@outerlayer/cli 0.33.0-next.20261023030517 → 0.33.0-next.20261023122246
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/README.md +15 -4
- package/dist/{agent-setup-APFM4MZ4.js → agent-setup-YHEW3WXB.js} +10 -10
- package/dist/{artifact-link-cmd-IHHMU4EA.js → artifact-link-cmd-7FYKWA7J.js} +2 -2
- package/dist/{build-disk-55M4ZMDX.js → build-disk-ECTLWTPC.js} +4 -4
- package/dist/build-info.json +1 -1
- package/dist/{builder-DQZCPB7J.js → builder-LUPHKUFM.js} +3 -3
- package/dist/{check-AEMFDR55.js → check-YCFZ3H35.js} +29 -29
- package/dist/{chunk-X62C7V4B.js → chunk-2JLM4GUF.js} +12 -12
- package/dist/{chunk-M24H6JQW.js → chunk-44V5SD4G.js} +1 -1
- package/dist/{chunk-C66Q2CLW.js → chunk-5M2J7B5N.js} +2 -2
- package/dist/{chunk-PNIFQX73.js → chunk-6CXNWKWD.js} +1 -1
- package/dist/{chunk-UAJYWZ2F.js → chunk-6SPD266O.js} +3 -3
- package/dist/{chunk-4NKHOCTF.js → chunk-7IFYI7XF.js} +3 -3
- package/dist/{chunk-HUBRTT2C.js → chunk-7UPMYRPS.js} +4 -4
- package/dist/{chunk-X37GC7DM.js → chunk-7V5GUEDU.js} +1 -1
- package/dist/{chunk-2WZ66FXA.js → chunk-AKZRGFGT.js} +3 -3
- package/dist/{chunk-T4S2DVOA.js → chunk-D3EDZPJR.js} +5 -5
- package/dist/{chunk-35DSTT37.js → chunk-DKFUXYGD.js} +4 -4
- package/dist/{chunk-7HZH5D7H.js → chunk-EHOFFTVX.js} +2 -2
- package/dist/{chunk-6ANIBEQ6.js → chunk-EJL6CWSP.js} +6 -6
- package/dist/{chunk-UHFU3CBN.js → chunk-EXZACZ2P.js} +1 -1
- package/dist/{chunk-V7Q5OKN7.js → chunk-F2D5BSXS.js} +27 -2
- package/dist/{chunk-C7WGCI77.js → chunk-FT7MUQGO.js} +2 -2
- package/dist/{chunk-M3RYZRMH.js → chunk-GO2DUPQS.js} +3 -3
- package/dist/{chunk-CCOU4NXE.js → chunk-HLZMAJJD.js} +2 -2
- package/dist/{chunk-GFTWZSOW.js → chunk-IUPY54BZ.js} +10 -10
- package/dist/{chunk-T4TT76GG.js → chunk-JEVKOZBB.js} +1 -1
- package/dist/{chunk-XMPE5TT4.js → chunk-KUE4V2SK.js} +2 -2
- package/dist/{chunk-DHUHQPRQ.js → chunk-L6MDOEHN.js} +7 -7
- package/dist/{chunk-PJI5D2XT.js → chunk-LYGI3T66.js} +2 -2
- package/dist/{chunk-E4F7YE7P.js → chunk-MPC2UAW2.js} +1 -1
- package/dist/{chunk-QQXNS4G2.js → chunk-NIY2UBT6.js} +1 -1
- package/dist/{chunk-QKEOAQ2W.js → chunk-OGMXVPCS.js} +1 -1
- package/dist/{chunk-A5FFANL7.js → chunk-QKNFU5GA.js} +5 -5
- package/dist/{chunk-AXIK6F52.js → chunk-RAMTJ2XP.js} +15 -15
- package/dist/{chunk-VJGQEASF.js → chunk-S5CNYXUA.js} +4 -4
- package/dist/{chunk-B6WW6AKO.js → chunk-SQQD5MST.js} +4 -4
- package/dist/{chunk-MZYOUIY5.js → chunk-TRP3KPGK.js} +1 -1
- package/dist/{chunk-JB4R5IFJ.js → chunk-UK4RGH46.js} +2 -2
- package/dist/{chunk-PILHDNHX.js → chunk-V673DFOL.js} +4 -4
- package/dist/{chunk-ONUACB5C.js → chunk-VWQCYOBS.js} +2 -2
- package/dist/{chunk-LHKWWEQZ.js → chunk-X4JEBMYN.js} +1 -1
- package/dist/{chunk-Z4GLZTDF.js → chunk-XCRET2GZ.js} +2 -2
- package/dist/{chunk-67KCGRKA.js → chunk-Y6KIGWFO.js} +48 -17
- package/dist/{chunk-5FSVA3CO.js → chunk-YXMGHGHR.js} +5 -5
- package/dist/{chunk-6ZLI652Y.js → chunk-ZF24JN7R.js} +1 -1
- package/dist/chunk-ZUVERBFB.js +81 -0
- package/dist/{claude-launcher-B55NWRH5.js → claude-launcher-YRPW4SWA.js} +5 -5
- package/dist/{cli-5YT5EL2R.js → cli-WFLOFK42.js} +108 -105
- package/dist/{command-DYLRDCGC.js → command-SQ4466SL.js} +19 -19
- package/dist/{config-RRY7DIJG.js → config-MVA7YTFW.js} +5 -5
- package/dist/{connect-cmd-7C6W2SEP.js → connect-cmd-KWXV2CGC.js} +8 -8
- package/dist/{container-start-F7PBMTAL.js → container-start-C4XCYPUA.js} +50 -27
- package/dist/{context-cleanup-EKTPKJJT.js → context-cleanup-A2FGVVPH.js} +3 -3
- package/dist/{context-show-cmd-I5JC7EFH.js → context-show-cmd-6F4UF4ND.js} +9 -9
- package/dist/{control-plane-launch-NOKM6CBH.js → control-plane-launch-7SOH6IMA.js} +6 -6
- package/dist/{dist-LLYL5UCV.js → dist-IG2DKUJJ.js} +2 -2
- package/dist/{docker-W7WWFZ3Q.js → docker-YKYQJHL2.js} +3 -3
- package/dist/{doctor-LYOFFCQS.js → doctor-4YZOP343.js} +20 -20
- package/dist/{emit-artifact-cmd-RO34UG7A.js → emit-artifact-cmd-6QTTWBVN.js} +13 -13
- package/dist/{emit-cmd-GY7Z26DY.js → emit-cmd-3FG7FEGO.js} +6 -6
- package/dist/{emit-criteria-cmd-Y36QCPAM.js → emit-criteria-cmd-22VVCL2W.js} +10 -10
- package/dist/{emit-demo-cmd-YMWVF5U4.js → emit-demo-cmd-IQRS7BP2.js} +168 -46
- package/dist/{emit-finding-cmd-MH3ZWUNV.js → emit-finding-cmd-TXDPJFVT.js} +10 -10
- package/dist/{emit-result-cmd-ZARZZZ3Y.js → emit-result-cmd-QHJDUC7J.js} +12 -12
- package/dist/{emit-step-cmd-A6HQJDBY.js → emit-step-cmd-TQCOLXAA.js} +10 -10
- package/dist/{findings-cmd-OLLBWJXJ.js → findings-cmd-EURKADAY.js} +10 -10
- package/dist/{fleet-readiness-VB5QSFSY.js → fleet-readiness-GXDSFTLP.js} +8 -8
- package/dist/{governing-source-ZX7VXTOA.js → governing-source-IRRP7G5G.js} +13 -13
- package/dist/{hook-fast-4RYMBFPO.js → hook-fast-3IYSWDL4.js} +1 -1
- package/dist/index.js +4 -4
- package/dist/{init-BQCGL7UD.js → init-63X6ECKF.js} +19 -19
- package/dist/{init-NCCMB2UE.js → init-T64C4MID.js} +19 -19
- package/dist/{init-cmd-OW2L5HTI.js → init-cmd-7CGCDLBZ.js} +18 -18
- package/dist/{init-update-7LUMOECE.js → init-update-LFKSC6Y4.js} +17 -17
- package/dist/{install-5BQ3TFBT.js → install-47Z7VNWP.js} +6 -6
- package/dist/{layout-RGVPCX7Y.js → layout-44S4OYLK.js} +4 -4
- package/dist/{login-browser-BC2Z5QKG.js → login-browser-BJZYKWHF.js} +2 -2
- package/dist/{loop-BU634Y6A.js → loop-KRGNTFZ2.js} +29 -29
- package/dist/{machine-RI4KHRYP.js → machine-VBITNWTR.js} +19 -19
- package/dist/{machine-skills-CS5HAQHF.js → machine-skills-GOKW3U5N.js} +4 -4
- package/dist/{runner-env-QSLLOFNF.js → runner-env-ILP6BAC2.js} +7 -7
- package/dist/{runner-identity-DQAXW4DL.js → runner-identity-MF3AYBR6.js} +3 -3
- package/dist/{runner-key-UWL475RU.js → runner-key-5SGBLTDJ.js} +19 -19
- package/dist/{session-sender-OGDUJ2KK.js → session-sender-2DYAJIMM.js} +13 -13
- package/dist/{spec-cmd-WB4UOFPG.js → spec-cmd-E6SINBX6.js} +11 -11
- package/dist/{starter-pack-XHATFTO3.js → starter-pack-FWTXE6XB.js} +5 -5
- package/dist/{status-GFZFND6L.js → status-YVJQWWDP.js} +24 -24
- package/dist/{sync-cmd-GPZD2C45.js → sync-cmd-NGX2PGIW.js} +12 -12
- package/dist/{watch-5I3GURXY.js → watch-ZIWZVU3Z.js} +12 -12
- package/dist/{work-claim-cmd-J52UVCAF.js → work-claim-cmd-GBU2ACRF.js} +16 -16
- package/dist/{work-cmd-PQZ5RYDB.js → work-cmd-OO6K6ELP.js} +10 -10
- package/dist/{work-comment-cmd-WI6B3IOS.js → work-comment-cmd-SY7NY2CR.js} +10 -10
- package/dist/{work-demo-cmd-3NDGSQKJ.js → work-demo-cmd-Y7EU335L.js} +10 -10
- package/dist/{work-logs-cmd-QCYZ5X5A.js → work-logs-cmd-PWOFLTGD.js} +10 -10
- package/dist/{work-open-pr-cmd-BRDF3ZKL.js → work-open-pr-cmd-AJUTKYWN.js} +11 -11
- package/dist/{work-pr-cmd-WY2TBAKW.js → work-pr-cmd-DH43AH3V.js} +10 -10
- package/dist/{work-proofs-cmd-R25HT6WP.js → work-proofs-cmd-6W6DDAP6.js} +10 -10
- package/dist/{work-stop-cmd-C52JPZ4E.js → work-stop-cmd-WZHBEKE4.js} +10 -10
- package/package.json +1 -1
- package/skill-pack/maintained/outerlayer-build/references/agent-briefs.md +8 -5
- package/skill-pack/maintained/outerlayer-build/references/evidence.md +3 -1
- package/skill-pack/maintained/outerlayer-evidence/SKILL.md +17 -16
- package/dist/chunk-RLAKWXDK.js +0 -36
|
@@ -1,45 +1,45 @@
|
|
|
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-2JLM4GUF.js';
|
|
4
|
+
import './chunk-DKFUXYGD.js';
|
|
5
|
+
import './chunk-EJL6CWSP.js';
|
|
6
6
|
import './chunk-KT4CN6OU.js';
|
|
7
|
-
import './chunk-
|
|
8
|
-
import { verifiedTrackerNames, TRACKERS } from './chunk-
|
|
7
|
+
import './chunk-KUE4V2SK.js';
|
|
8
|
+
import { verifiedTrackerNames, TRACKERS } from './chunk-YXMGHGHR.js';
|
|
9
9
|
import './chunk-IP7BIBXJ.js';
|
|
10
|
-
import './chunk-
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-
|
|
13
|
-
import './chunk-
|
|
14
|
-
import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-
|
|
15
|
-
import './chunk-
|
|
10
|
+
import './chunk-HLZMAJJD.js';
|
|
11
|
+
import './chunk-S5CNYXUA.js';
|
|
12
|
+
import './chunk-MPC2UAW2.js';
|
|
13
|
+
import './chunk-NIY2UBT6.js';
|
|
14
|
+
import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-LYGI3T66.js';
|
|
15
|
+
import './chunk-7V5GUEDU.js';
|
|
16
16
|
import './chunk-G2JWZDFA.js';
|
|
17
17
|
import { C, warnDeprecated, API_KEY_FLAG_DEPRECATION, NO_COLOR_FLAG, stripNoColor } from './chunk-ANPNT6PM.js';
|
|
18
|
-
import './chunk-
|
|
18
|
+
import './chunk-FT7MUQGO.js';
|
|
19
19
|
import './chunk-6RKD7YZ6.js';
|
|
20
20
|
import './chunk-PJDQPF5N.js';
|
|
21
21
|
import './chunk-SOI6K5DY.js';
|
|
22
22
|
import './chunk-PA6CK6WQ.js';
|
|
23
23
|
import './chunk-BALIE3BA.js';
|
|
24
|
-
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-
|
|
24
|
+
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-UK4RGH46.js';
|
|
25
25
|
import './chunk-ZJSNLVCE.js';
|
|
26
26
|
import './chunk-I7RZHMXW.js';
|
|
27
27
|
import './chunk-BKO6JEZI.js';
|
|
28
28
|
import './chunk-HCVLP7XA.js';
|
|
29
29
|
import { findGitDirs } from './chunk-BJ3KTMDH.js';
|
|
30
|
-
import './chunk-
|
|
31
|
-
import './chunk-
|
|
30
|
+
import './chunk-JEVKOZBB.js';
|
|
31
|
+
import './chunk-44V5SD4G.js';
|
|
32
32
|
import './chunk-5BHIBJDA.js';
|
|
33
33
|
import './chunk-CDDED64E.js';
|
|
34
34
|
import { resolveVersion, resolvePackageVersion } from './chunk-RA3O54FC.js';
|
|
35
35
|
import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
|
|
36
36
|
import { cliInvocation, packageRunnerOf } from './chunk-CRB3POP4.js';
|
|
37
37
|
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';
|
|
38
|
-
import './chunk-
|
|
38
|
+
import './chunk-ZF24JN7R.js';
|
|
39
39
|
import { cloneIsGoverned } from './chunk-YQR6E6OV.js';
|
|
40
40
|
import { removeJournalHooks, removePreCommitGuardHook } from './chunk-TUSYOL2O.js';
|
|
41
|
-
import './chunk-
|
|
42
|
-
import './chunk-
|
|
41
|
+
import './chunk-6CXNWKWD.js';
|
|
42
|
+
import './chunk-F2D5BSXS.js';
|
|
43
43
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
44
44
|
import './chunk-HACGUL52.js';
|
|
45
45
|
import './chunk-MESOOLF4.js';
|
|
@@ -3659,14 +3659,14 @@ function apiKeyOption() {
|
|
|
3659
3659
|
return new Option("--api-key <key>", `deprecated: use \`${cliInvocation()} login\` or OUTERLAYER_API_KEY`).hideHelp();
|
|
3660
3660
|
}
|
|
3661
3661
|
async function installStarterPackInRepo() {
|
|
3662
|
-
const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-
|
|
3662
|
+
const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-FWTXE6XB.js');
|
|
3663
3663
|
const cwd = process.cwd();
|
|
3664
3664
|
let repoRoot = cwd;
|
|
3665
3665
|
try {
|
|
3666
3666
|
repoRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim() || cwd;
|
|
3667
3667
|
} catch {
|
|
3668
3668
|
}
|
|
3669
|
-
const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-
|
|
3669
|
+
const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-44S4OYLK.js');
|
|
3670
3670
|
const fresh = !isAgentsMdLayout(repoRoot) && !existsSync(join(repoRoot, ".outerlayer/skills")) && !existsSync(join(repoRoot, ".outerlayer/AGENTS.md"));
|
|
3671
3671
|
const result = installStarterPack({ repoRoot, base: fresh ? ".agents/skills" : skillsBaseFor(repoRoot) });
|
|
3672
3672
|
if (fresh) declareAgentsMdLayout(repoRoot);
|
|
@@ -3792,7 +3792,7 @@ ${starter.output}`),
|
|
|
3792
3792
|
}
|
|
3793
3793
|
}
|
|
3794
3794
|
async function installMachineSkillsForSetup() {
|
|
3795
|
-
const { setupMachineSkills } = await import('./machine-skills-
|
|
3795
|
+
const { setupMachineSkills } = await import('./machine-skills-GOKW3U5N.js');
|
|
3796
3796
|
const result = setupMachineSkills(homeFromEnv());
|
|
3797
3797
|
for (const failure of result.failures) process.stderr.write(`${C.yellow}!${C.reset} Could not write a maintained skill: ${failure}
|
|
3798
3798
|
`);
|
|
@@ -3800,8 +3800,8 @@ async function installMachineSkillsForSetup() {
|
|
|
3800
3800
|
` : "";
|
|
3801
3801
|
}
|
|
3802
3802
|
async function realConnectDepsForCwd() {
|
|
3803
|
-
const { realConnectDeps } = await import('./connect-cmd-
|
|
3804
|
-
const { resolveRepoIdentity } = await import('./dist-
|
|
3803
|
+
const { realConnectDeps } = await import('./connect-cmd-KWXV2CGC.js');
|
|
3804
|
+
const { resolveRepoIdentity } = await import('./dist-IG2DKUJJ.js');
|
|
3805
3805
|
return {
|
|
3806
3806
|
...realConnectDeps(),
|
|
3807
3807
|
home: homeFromEnv(),
|
|
@@ -3818,7 +3818,7 @@ function buildProgram(argv = process.argv) {
|
|
|
3818
3818
|
const program2 = new Command();
|
|
3819
3819
|
program2.name(cliInvocation()).description("OuterLayer \u2014 see what your coding agents actually do").enablePositionalOptions().version(resolveVersion()).hook("preAction", async (_root, command) => {
|
|
3820
3820
|
if (command.opts().apiKey !== void 0) warnDeprecated(API_KEY_FLAG_DEPRECATION);
|
|
3821
|
-
const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-
|
|
3821
|
+
const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-GOKW3U5N.js');
|
|
3822
3822
|
const names = [];
|
|
3823
3823
|
for (let at = command; at?.parent; at = at.parent) names.push(at.name());
|
|
3824
3824
|
if (!machineRefreshSkipped(names, command._hidden === true, argv)) refreshMachineSkills(homeFromEnv());
|
|
@@ -3875,8 +3875,8 @@ build, ../outerlayer-build/SKILL.md becomes ~/.agents/skills/outerlayer-build/SK
|
|
|
3875
3875
|
what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocation() + " doctor` reports the same\nstates under Starter files.\n"
|
|
3876
3876
|
).action(async (opts) => {
|
|
3877
3877
|
if (opts.update || opts.dryRun) {
|
|
3878
|
-
const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-
|
|
3879
|
-
const { fleetReadiness } = await import('./fleet-readiness-
|
|
3878
|
+
const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-LFKSC6Y4.js');
|
|
3879
|
+
const { fleetReadiness } = await import('./fleet-readiness-GXDSFTLP.js');
|
|
3880
3880
|
const problem = updateFlagProblem(opts);
|
|
3881
3881
|
if (problem !== void 0) {
|
|
3882
3882
|
fail(problem);
|
|
@@ -3893,7 +3893,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3893
3893
|
}
|
|
3894
3894
|
let starterTemplate;
|
|
3895
3895
|
if (opts.template !== void 0) {
|
|
3896
|
-
const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-
|
|
3896
|
+
const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-FWTXE6XB.js');
|
|
3897
3897
|
try {
|
|
3898
3898
|
assertKnownTemplate(opts.template);
|
|
3899
3899
|
} catch (err) {
|
|
@@ -3927,13 +3927,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3927
3927
|
if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
|
|
3928
3928
|
`);
|
|
3929
3929
|
}
|
|
3930
|
-
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-
|
|
3930
|
+
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-7CGCDLBZ.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
|
|
3931
3931
|
if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
|
|
3932
3932
|
else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
|
|
3933
3933
|
return;
|
|
3934
3934
|
}
|
|
3935
3935
|
await installMachineSkillsForSetup();
|
|
3936
|
-
const { runInitCommand } = await import('./init-cmd-
|
|
3936
|
+
const { runInitCommand } = await import('./init-cmd-7CGCDLBZ.js');
|
|
3937
3937
|
const code = await runInitCommand(
|
|
3938
3938
|
{ json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
|
|
3939
3939
|
{
|
|
@@ -3945,7 +3945,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3945
3945
|
return { ok, text, detail };
|
|
3946
3946
|
},
|
|
3947
3947
|
runAgentSetup: async () => {
|
|
3948
|
-
const { runAgentSetup } = await import('./agent-setup-
|
|
3948
|
+
const { runAgentSetup } = await import('./agent-setup-YHEW3WXB.js');
|
|
3949
3949
|
return runAgentSetup({ cwd: process.cwd(), skillsLink: opts.skillsLink !== false });
|
|
3950
3950
|
},
|
|
3951
3951
|
runDoctorChecks: gatherDoctorChecks,
|
|
@@ -3954,7 +3954,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3954
3954
|
shellPath: process.env.SHELL,
|
|
3955
3955
|
interactive: Boolean(process.stdin.isTTY && process.stderr.isTTY) && opts.json !== true,
|
|
3956
3956
|
ask: async () => {
|
|
3957
|
-
const { promptOnTerminal } = await import('./connect-cmd-
|
|
3957
|
+
const { promptOnTerminal } = await import('./connect-cmd-KWXV2CGC.js');
|
|
3958
3958
|
const answer = await promptOnTerminal({
|
|
3959
3959
|
message: `Should plain claude start Claude Code through ${cliInvocation()} claude? That is how a session in a governed repository gets its control plane. It adds one block to your zsh or bash startup file.`,
|
|
3960
3960
|
options: [
|
|
@@ -3993,7 +3993,7 @@ linked (true, false, or null when it could not be checked) and, when false,
|
|
|
3993
3993
|
linkUrl.
|
|
3994
3994
|
`
|
|
3995
3995
|
).action(async (opts) => {
|
|
3996
|
-
const { runConnectCommand } = await import('./connect-cmd-
|
|
3996
|
+
const { runConnectCommand } = await import('./connect-cmd-KWXV2CGC.js');
|
|
3997
3997
|
const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
|
|
3998
3998
|
stdout: process.stdout,
|
|
3999
3999
|
stderr: process.stderr
|
|
@@ -4032,7 +4032,7 @@ Every later command reads the saved file, so none of them needs a key on
|
|
|
4032
4032
|
its command line. A saved key is checked for real on the first \`sync\`.
|
|
4033
4033
|
`
|
|
4034
4034
|
).action(async (opts) => {
|
|
4035
|
-
const { runLoginCommand, realLoginDeps } = await import('./login-browser-
|
|
4035
|
+
const { runLoginCommand, realLoginDeps } = await import('./login-browser-BJZYKWHF.js');
|
|
4036
4036
|
const code = await runLoginCommand(
|
|
4037
4037
|
{
|
|
4038
4038
|
browser: opts.browser !== false,
|
|
@@ -4065,13 +4065,13 @@ code is 1: revoke the token on /profile/security.
|
|
|
4065
4065
|
"\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"
|
|
4066
4066
|
).action(async (opts) => {
|
|
4067
4067
|
if (opts.link !== void 0) {
|
|
4068
|
-
const { lookupArtifactLink } = await import('./artifact-link-cmd-
|
|
4068
|
+
const { lookupArtifactLink } = await import('./artifact-link-cmd-7FYKWA7J.js');
|
|
4069
4069
|
const found = lookupArtifactLink(opts.link);
|
|
4070
4070
|
if (found.ok) process.stdout.write(found.url + "\n");
|
|
4071
4071
|
else fail(found.reason);
|
|
4072
4072
|
return;
|
|
4073
4073
|
}
|
|
4074
|
-
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-
|
|
4074
|
+
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-NGX2PGIW.js');
|
|
4075
4075
|
try {
|
|
4076
4076
|
const result = await runSync({
|
|
4077
4077
|
url: opts.url,
|
|
@@ -4102,7 +4102,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4102
4102
|
if (invokedCommandToken(argv) === "watch") {
|
|
4103
4103
|
warnDeprecated(`\`${cliInvocation()} watch\` is now \`${cliInvocation()} daemon\`; the old name will be removed in a future release.`);
|
|
4104
4104
|
}
|
|
4105
|
-
const { runWatch } = await import('./watch-
|
|
4105
|
+
const { runWatch } = await import('./watch-ZIWZVU3Z.js');
|
|
4106
4106
|
await runWatch({ once: opts.once });
|
|
4107
4107
|
});
|
|
4108
4108
|
program2.command("hook <event>", { hidden: true }).description("capture-hook fast path, installed by `init`").action(() => {
|
|
@@ -4192,7 +4192,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4192
4192
|
process.exitCode = await runBuildCommand({ dir: opts.dir, argv: command });
|
|
4193
4193
|
});
|
|
4194
4194
|
program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
|
|
4195
|
-
const { runSessionSender } = await import('./session-sender-
|
|
4195
|
+
const { runSessionSender } = await import('./session-sender-2DYAJIMM.js');
|
|
4196
4196
|
try {
|
|
4197
4197
|
await runSessionSender();
|
|
4198
4198
|
} catch (err) {
|
|
@@ -4235,7 +4235,7 @@ async function runCli(processArgv) {
|
|
|
4235
4235
|
await buildProgram(argv).parseAsync(argv);
|
|
4236
4236
|
}
|
|
4237
4237
|
async function compileContext(opts) {
|
|
4238
|
-
const { runEmit, EmitError } = await import('./emit-cmd-
|
|
4238
|
+
const { runEmit, EmitError } = await import('./emit-cmd-3FG7FEGO.js');
|
|
4239
4239
|
try {
|
|
4240
4240
|
const result = runEmit({ cwd: opts.dir, check: opts.check, json: opts.json });
|
|
4241
4241
|
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
@@ -4288,7 +4288,7 @@ Compiling .outerlayer/ moved to \`${cliInvocation()} context emit\`.
|
|
|
4288
4288
|
await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
|
|
4289
4289
|
return;
|
|
4290
4290
|
}
|
|
4291
|
-
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-
|
|
4291
|
+
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-QHJDUC7J.js');
|
|
4292
4292
|
try {
|
|
4293
4293
|
const result = await runEmitResult({
|
|
4294
4294
|
name,
|
|
@@ -4339,7 +4339,7 @@ everywhere, bytes and deep link untouched; a still-queued one is cancelled
|
|
|
4339
4339
|
locally so it never uploads. One correction can retire several duplicates.
|
|
4340
4340
|
`
|
|
4341
4341
|
).action(async (file, opts) => {
|
|
4342
|
-
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-
|
|
4342
|
+
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-6QTTWBVN.js');
|
|
4343
4343
|
let pr;
|
|
4344
4344
|
if (opts.pr !== void 0) {
|
|
4345
4345
|
pr = parseTrackerNumber(opts.pr);
|
|
@@ -4384,6 +4384,9 @@ Needs ffmpeg and ffprobe on PATH, and espeak-ng unless --no-narration is given.
|
|
|
4384
4384
|
run downloads the voice pack (about 400 MB) to ~/.outerlayer/voice/ and checks it against pinned
|
|
4385
4385
|
sha256 hashes. Every refusal comes before the first upload. Exit 1 means a chapter had a failed
|
|
4386
4386
|
check: its clip and the record are stored all the same.
|
|
4387
|
+
A chapter of a version 4 manifest may hold a screenshot frame, which its test marked with demo.screenshot().
|
|
4388
|
+
The frame is stored as a screenshot of the chapter's criterion only when that criterion declares screenshot
|
|
4389
|
+
and every check of the chapter passed. Otherwise no frame is stored and the command says why.
|
|
4387
4390
|
With --compare, the command pairs the chapters of the two runs, then compares the stills taken after each
|
|
4388
4391
|
check. A chapter reads yes when every still matches and no when one differs; the output names the step and
|
|
4389
4392
|
the region. One run, or a chapter with no stills, reads not checked. Comparing never changes which clips bind.
|
|
@@ -4392,7 +4395,7 @@ its criterion, and the new record retires the old record. The id must be the ite
|
|
|
4392
4395
|
as \`work demo --item <n> --json\` prints it.
|
|
4393
4396
|
`
|
|
4394
4397
|
).action(async (manifest, opts) => {
|
|
4395
|
-
const { runEmitDemo, EmitDemoError } = await import('./emit-demo-cmd-
|
|
4398
|
+
const { runEmitDemo, EmitDemoError } = await import('./emit-demo-cmd-IQRS7BP2.js');
|
|
4396
4399
|
let item;
|
|
4397
4400
|
if (opts.item !== void 0) {
|
|
4398
4401
|
item = parseTrackerNumber(opts.item);
|
|
@@ -4462,7 +4465,7 @@ recent events with their ids. --find <text> searches all of them.
|
|
|
4462
4465
|
item that session was launched for is used automatically.
|
|
4463
4466
|
`
|
|
4464
4467
|
).action(async (opts) => {
|
|
4465
|
-
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4468
|
+
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-TXDPJFVT.js');
|
|
4466
4469
|
try {
|
|
4467
4470
|
refuseRemovedFindingFlags(opts);
|
|
4468
4471
|
const result = await runEmitFinding({
|
|
@@ -4529,7 +4532,7 @@ the whole batch. "untimed": true records one with no time on purpose.
|
|
|
4529
4532
|
that session was launched for is used automatically.
|
|
4530
4533
|
`
|
|
4531
4534
|
).action(async (file, opts) => {
|
|
4532
|
-
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4535
|
+
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-TXDPJFVT.js');
|
|
4533
4536
|
try {
|
|
4534
4537
|
const result = await runEmitFindings({
|
|
4535
4538
|
file,
|
|
@@ -4564,7 +4567,7 @@ command, the command exits 0, and \`sync\` sends it later. If the gateway refuse
|
|
|
4564
4567
|
the step, the command prints why and exits 1.
|
|
4565
4568
|
`
|
|
4566
4569
|
).action(async (name, opts) => {
|
|
4567
|
-
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-
|
|
4570
|
+
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-TQCOLXAA.js');
|
|
4568
4571
|
try {
|
|
4569
4572
|
await runEmitStep({
|
|
4570
4573
|
name,
|
|
@@ -4607,7 +4610,7 @@ of the item, and a (proof: <kind>) annotation names its proof.
|
|
|
4607
4610
|
${cliInvocation()} emit criteria acceptance/412-login.md --item 412
|
|
4608
4611
|
`
|
|
4609
4612
|
).action(async (file, opts) => {
|
|
4610
|
-
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-
|
|
4613
|
+
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-22VVCL2W.js');
|
|
4611
4614
|
try {
|
|
4612
4615
|
const result = await runEmitCriteria({
|
|
4613
4616
|
file,
|
|
@@ -4631,9 +4634,9 @@ function registerSpecCommands(program2) {
|
|
|
4631
4634
|
const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
|
|
4632
4635
|
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)");
|
|
4633
4636
|
const run = async (action) => {
|
|
4634
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4637
|
+
const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4635
4638
|
try {
|
|
4636
|
-
await action(await import('./spec-cmd-
|
|
4639
|
+
await action(await import('./spec-cmd-E6SINBX6.js'));
|
|
4637
4640
|
} catch (err) {
|
|
4638
4641
|
if (err instanceof WorkCommandError) {
|
|
4639
4642
|
fail(err.message);
|
|
@@ -4668,7 +4671,7 @@ Prints each problem the item covers with its id, its reports and its result.
|
|
|
4668
4671
|
session was launched for is used.
|
|
4669
4672
|
`
|
|
4670
4673
|
).action(async (opts) => {
|
|
4671
|
-
const { runFindingsShow, FindingsCommandError } = await import('./findings-cmd-
|
|
4674
|
+
const { runFindingsShow, FindingsCommandError } = await import('./findings-cmd-EURKADAY.js');
|
|
4672
4675
|
try {
|
|
4673
4676
|
const result = await runFindingsShow({
|
|
4674
4677
|
item: opts.item,
|
|
@@ -4696,7 +4699,7 @@ Give exactly one of --fixed and --not-fixed, and a --note. Run it again for the
|
|
|
4696
4699
|
problem to replace the earlier result. A problem the item does not cover is refused.
|
|
4697
4700
|
`
|
|
4698
4701
|
).action(async (problem, opts) => {
|
|
4699
|
-
const { runFindingsResult, FindingsCommandError } = await import('./findings-cmd-
|
|
4702
|
+
const { runFindingsResult, FindingsCommandError } = await import('./findings-cmd-EURKADAY.js');
|
|
4700
4703
|
try {
|
|
4701
4704
|
const result = await runFindingsResult({
|
|
4702
4705
|
problem,
|
|
@@ -4737,7 +4740,7 @@ takes it, and prints the line that starts your session on it. That
|
|
|
4737
4740
|
session links itself and holds the item's lease while it works.
|
|
4738
4741
|
`
|
|
4739
4742
|
).action(async (opts) => {
|
|
4740
|
-
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-
|
|
4743
|
+
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4741
4744
|
try {
|
|
4742
4745
|
await runWorkBuild(opts);
|
|
4743
4746
|
} catch (err) {
|
|
@@ -4760,7 +4763,7 @@ renews that session's own 20-minute lease, unless --no-lease or
|
|
|
4760
4763
|
--ended is given, or another worker already holds a live one.
|
|
4761
4764
|
`
|
|
4762
4765
|
).action(async (number, opts) => {
|
|
4763
|
-
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-
|
|
4766
|
+
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4764
4767
|
try {
|
|
4765
4768
|
await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
|
|
4766
4769
|
} catch (err) {
|
|
@@ -4784,8 +4787,8 @@ criterion's new proof; --ready hands the thread back to a person. At
|
|
|
4784
4787
|
most one action flag may be given.
|
|
4785
4788
|
`
|
|
4786
4789
|
).action(async (opts) => {
|
|
4787
|
-
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4788
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4790
|
+
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-SY7NY2CR.js');
|
|
4791
|
+
const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4789
4792
|
try {
|
|
4790
4793
|
await runWorkComment(opts);
|
|
4791
4794
|
} catch (err) {
|
|
@@ -4806,8 +4809,8 @@ criterion that carries proof or a comment, each with who is waiting
|
|
|
4806
4809
|
on whom next.
|
|
4807
4810
|
`
|
|
4808
4811
|
).action(async (opts) => {
|
|
4809
|
-
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4810
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4812
|
+
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-SY7NY2CR.js');
|
|
4813
|
+
const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4811
4814
|
try {
|
|
4812
4815
|
await runWorkThreads(opts);
|
|
4813
4816
|
} catch (err) {
|
|
@@ -4831,8 +4834,8 @@ still running, or that an older runner released, has no log and the
|
|
|
4831
4834
|
command exits 1.
|
|
4832
4835
|
`
|
|
4833
4836
|
).action(async (opts) => {
|
|
4834
|
-
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-
|
|
4835
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4837
|
+
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-PWOFLTGD.js');
|
|
4838
|
+
const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4836
4839
|
try {
|
|
4837
4840
|
await runWorkLogs(opts);
|
|
4838
4841
|
} catch (err) {
|
|
@@ -4855,8 +4858,8 @@ item is not built again until a new build request. Exits 1 when no host
|
|
|
4855
4858
|
build is running for the item.
|
|
4856
4859
|
`
|
|
4857
4860
|
).action(async (opts) => {
|
|
4858
|
-
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-
|
|
4859
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4861
|
+
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-WZHBEKE4.js');
|
|
4862
|
+
const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4860
4863
|
try {
|
|
4861
4864
|
await runWorkStop(opts);
|
|
4862
4865
|
} catch (err) {
|
|
@@ -4877,8 +4880,8 @@ Prints the item's newest live demo record: its artifact id, the commit it was re
|
|
|
4877
4880
|
test file that recorded it. With --json, prints { "demo": null } for an item with no demo.
|
|
4878
4881
|
`
|
|
4879
4882
|
).action(async (opts) => {
|
|
4880
|
-
const { runWorkDemo, WorkDemoCommandError } = await import('./work-demo-cmd-
|
|
4881
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4883
|
+
const { runWorkDemo, WorkDemoCommandError } = await import('./work-demo-cmd-Y7EU335L.js');
|
|
4884
|
+
const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4882
4885
|
try {
|
|
4883
4886
|
await runWorkDemo(opts);
|
|
4884
4887
|
} catch (err) {
|
|
@@ -4899,7 +4902,7 @@ deletes anything \u2014 the item is removed from Work only once no
|
|
|
4899
4902
|
live addition remains on it.
|
|
4900
4903
|
`
|
|
4901
4904
|
).action(async (opts) => {
|
|
4902
|
-
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-
|
|
4905
|
+
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4903
4906
|
try {
|
|
4904
4907
|
await runWorkRemove(opts);
|
|
4905
4908
|
} catch (err) {
|
|
@@ -4911,7 +4914,7 @@ live addition remains on it.
|
|
|
4911
4914
|
}
|
|
4912
4915
|
});
|
|
4913
4916
|
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) => {
|
|
4914
|
-
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-
|
|
4917
|
+
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4915
4918
|
try {
|
|
4916
4919
|
await runWorkStatus(opts);
|
|
4917
4920
|
} catch (err) {
|
|
@@ -4935,11 +4938,11 @@ Exits 0 when every listed proof is current, 1 when any is out of date or missing
|
|
|
4935
4938
|
and 2 when it cannot tell.
|
|
4936
4939
|
`
|
|
4937
4940
|
).action(async (opts) => {
|
|
4938
|
-
const { runWorkProofsCommand } = await import('./work-proofs-cmd-
|
|
4941
|
+
const { runWorkProofsCommand } = await import('./work-proofs-cmd-6W6DDAP6.js');
|
|
4939
4942
|
await runWorkProofsCommand(opts);
|
|
4940
4943
|
});
|
|
4941
4944
|
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) => {
|
|
4942
|
-
const { runWorkList, WorkCommandError } = await import('./work-cmd-
|
|
4945
|
+
const { runWorkList, WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
4943
4946
|
try {
|
|
4944
4947
|
await runWorkList(opts);
|
|
4945
4948
|
} catch (err) {
|
|
@@ -4960,7 +4963,7 @@ by a different key is refused; claiming again with the same key extends
|
|
|
4960
4963
|
it. --host is a label only.
|
|
4961
4964
|
`
|
|
4962
4965
|
).action(async (opts) => {
|
|
4963
|
-
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-
|
|
4966
|
+
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-GBU2ACRF.js');
|
|
4964
4967
|
try {
|
|
4965
4968
|
await runWorkClaim(opts);
|
|
4966
4969
|
} catch (err) {
|
|
@@ -4980,7 +4983,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
|
|
|
4980
4983
|
lease has expired, or a 403 if a different key holds it.
|
|
4981
4984
|
`
|
|
4982
4985
|
).action(async (opts) => {
|
|
4983
|
-
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-
|
|
4986
|
+
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-GBU2ACRF.js');
|
|
4984
4987
|
try {
|
|
4985
4988
|
await runWorkRenew(opts);
|
|
4986
4989
|
} catch (err) {
|
|
@@ -5012,7 +5015,7 @@ applies to a host's lease only. A later tool call in the session
|
|
|
5012
5015
|
takes the lease again.
|
|
5013
5016
|
`
|
|
5014
5017
|
).action(async (opts) => {
|
|
5015
|
-
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-
|
|
5018
|
+
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-GBU2ACRF.js');
|
|
5016
5019
|
try {
|
|
5017
5020
|
await runWorkRelease(opts);
|
|
5018
5021
|
} catch (err) {
|
|
@@ -5039,7 +5042,7 @@ Idempotent: declaring the same pull request twice is a no-op.
|
|
|
5039
5042
|
needs your own login; an agent session or a factory key is refused.
|
|
5040
5043
|
`
|
|
5041
5044
|
).action(async (number, opts) => {
|
|
5042
|
-
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-
|
|
5045
|
+
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-DH43AH3V.js');
|
|
5043
5046
|
try {
|
|
5044
5047
|
await runWorkPr({ ...opts, number });
|
|
5045
5048
|
} catch (err) {
|
|
@@ -5064,8 +5067,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
|
|
|
5064
5067
|
Run it again after a change to the title or description.
|
|
5065
5068
|
`
|
|
5066
5069
|
).action(async (opts) => {
|
|
5067
|
-
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-
|
|
5068
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
5070
|
+
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-AJUTKYWN.js');
|
|
5071
|
+
const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
|
|
5069
5072
|
try {
|
|
5070
5073
|
await runWorkOpenPr(opts);
|
|
5071
5074
|
} catch (err) {
|
|
@@ -5081,8 +5084,8 @@ function registerRunnerCommands(program2) {
|
|
|
5081
5084
|
const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
|
|
5082
5085
|
const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
|
|
5083
5086
|
runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
|
|
5084
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5085
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
5087
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-MVA7YTFW.js');
|
|
5088
|
+
const { start, RunnerStartError } = await import('./loop-KRGNTFZ2.js');
|
|
5086
5089
|
const { RunnerAlreadyRunningError } = await import('./pidfile-5UDLYPMC.js');
|
|
5087
5090
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5088
5091
|
try {
|
|
@@ -5100,9 +5103,9 @@ function registerRunnerCommands(program2) {
|
|
|
5100
5103
|
"after",
|
|
5101
5104
|
"\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"
|
|
5102
5105
|
).action(async () => {
|
|
5103
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5104
|
-
const { containerStart } = await import('./container-start-
|
|
5105
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
5106
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-MVA7YTFW.js');
|
|
5107
|
+
const { containerStart } = await import('./container-start-C4XCYPUA.js');
|
|
5108
|
+
const { start, RunnerStartError } = await import('./loop-KRGNTFZ2.js');
|
|
5106
5109
|
const { RunnerAlreadyRunningError } = await import('./pidfile-5UDLYPMC.js');
|
|
5107
5110
|
try {
|
|
5108
5111
|
const result = await containerStart({
|
|
@@ -5121,8 +5124,8 @@ function registerRunnerCommands(program2) {
|
|
|
5121
5124
|
}
|
|
5122
5125
|
});
|
|
5123
5126
|
runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
|
|
5124
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5125
|
-
const { runRunnerCheck } = await import('./check-
|
|
5127
|
+
const { defaultRunnerConfigPath } = await import('./config-MVA7YTFW.js');
|
|
5128
|
+
const { runRunnerCheck } = await import('./check-YCFZ3H35.js');
|
|
5126
5129
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5127
5130
|
const result = await runRunnerCheck(configPath);
|
|
5128
5131
|
if (!result.ok) {
|
|
@@ -5143,7 +5146,7 @@ function registerRunnerCommands(program2) {
|
|
|
5143
5146
|
`);
|
|
5144
5147
|
});
|
|
5145
5148
|
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) => {
|
|
5146
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5149
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-MVA7YTFW.js');
|
|
5147
5150
|
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-FV7IZ7XF.js');
|
|
5148
5151
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5149
5152
|
if (opts.service !== true) {
|
|
@@ -5156,7 +5159,7 @@ function registerRunnerCommands(program2) {
|
|
|
5156
5159
|
}
|
|
5157
5160
|
try {
|
|
5158
5161
|
if (opts.service === true) {
|
|
5159
|
-
const { installServiceCommand } = await import('./command-
|
|
5162
|
+
const { installServiceCommand } = await import('./command-SQ4466SL.js');
|
|
5160
5163
|
const result2 = await installServiceCommand({
|
|
5161
5164
|
configPath,
|
|
5162
5165
|
print: opts.print,
|
|
@@ -5211,8 +5214,8 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
|
|
|
5211
5214
|
fail(`pass --service: \`${cliInvocation()} runner uninstall --service\` removes the runner's service.`);
|
|
5212
5215
|
return;
|
|
5213
5216
|
}
|
|
5214
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5215
|
-
const { uninstallServiceCommand } = await import('./command-
|
|
5217
|
+
const { defaultRunnerConfigPath } = await import('./config-MVA7YTFW.js');
|
|
5218
|
+
const { uninstallServiceCommand } = await import('./command-SQ4466SL.js');
|
|
5216
5219
|
const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
|
|
5217
5220
|
if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
5218
5221
|
`);
|
|
@@ -5239,12 +5242,12 @@ already in claude.env is used.
|
|
|
5239
5242
|
printf '%s' "$CLAUDE_CODE_OAUTH_TOKEN" | ${cliInvocation()} runner init --agent claude --factory <org>/<factory>
|
|
5240
5243
|
`
|
|
5241
5244
|
).action(async (opts) => {
|
|
5242
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5243
|
-
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-
|
|
5244
|
-
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-
|
|
5245
|
-
const { detectMachine } = await import('./machine-
|
|
5246
|
-
const { chooseVm, runVmInit, VmInitError } = await import('./init-
|
|
5247
|
-
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-
|
|
5245
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-MVA7YTFW.js');
|
|
5246
|
+
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-T64C4MID.js');
|
|
5247
|
+
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-5SGBLTDJ.js');
|
|
5248
|
+
const { detectMachine } = await import('./machine-VBITNWTR.js');
|
|
5249
|
+
const { chooseVm, runVmInit, VmInitError } = await import('./init-63X6ECKF.js');
|
|
5250
|
+
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-ILP6BAC2.js');
|
|
5248
5251
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5249
5252
|
if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
|
|
5250
5253
|
fail(`--agent ${opts.agent}: runner init writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")}. For another agent, leave --agent out and edit runner.commands.`);
|
|
@@ -5258,7 +5261,7 @@ already in claude.env is used.
|
|
|
5258
5261
|
try {
|
|
5259
5262
|
let credential;
|
|
5260
5263
|
if (agent !== void 0) {
|
|
5261
|
-
const { readPipedKey } = await import('./login-browser-
|
|
5264
|
+
const { readPipedKey } = await import('./login-browser-BJZYKWHF.js');
|
|
5262
5265
|
credential = credentialFromStdin(
|
|
5263
5266
|
await readPipedKey(process.stdin, {
|
|
5264
5267
|
onWaiting: () => process.stderr.write(`runner init is waiting for Claude's credential on stdin; close stdin to use the one already in claude.env
|
|
@@ -5394,7 +5397,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
|
|
|
5394
5397
|
let serviceUp = false;
|
|
5395
5398
|
let restart;
|
|
5396
5399
|
if (installedLayout) {
|
|
5397
|
-
const { installServiceCommand } = await import('./command-
|
|
5400
|
+
const { installServiceCommand } = await import('./command-SQ4466SL.js');
|
|
5398
5401
|
const service = await installServiceCommand({
|
|
5399
5402
|
configPath,
|
|
5400
5403
|
entryPath: process.argv[1] ?? "",
|
|
@@ -5438,12 +5441,12 @@ Next:
|
|
|
5438
5441
|
"after",
|
|
5439
5442
|
"\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"
|
|
5440
5443
|
).action(async (opts) => {
|
|
5441
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5444
|
+
const { defaultRunnerConfigPath } = await import('./config-MVA7YTFW.js');
|
|
5442
5445
|
const { buildRepositoryImage, RecipeError } = await import('./build-SEAQVLD5.js');
|
|
5443
5446
|
const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
|
|
5444
|
-
const { createDockerHost } = await import('./docker-
|
|
5445
|
-
const { builderSpec } = await import('./builder-
|
|
5446
|
-
const { loadRunnerConfig } = await import('./config-
|
|
5447
|
+
const { createDockerHost } = await import('./docker-YKYQJHL2.js');
|
|
5448
|
+
const { builderSpec } = await import('./builder-LUPHKUFM.js');
|
|
5449
|
+
const { loadRunnerConfig } = await import('./config-MVA7YTFW.js');
|
|
5447
5450
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5448
5451
|
const loaded = (() => {
|
|
5449
5452
|
try {
|
|
@@ -5454,11 +5457,11 @@ Next:
|
|
|
5454
5457
|
})();
|
|
5455
5458
|
const memory = loaded?.build?.memory ?? "8g";
|
|
5456
5459
|
try {
|
|
5457
|
-
const { ensureRunnerIdentity } = await import('./runner-identity-
|
|
5460
|
+
const { ensureRunnerIdentity } = await import('./runner-identity-MF3AYBR6.js');
|
|
5458
5461
|
await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
|
|
5459
5462
|
console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
|
|
5460
5463
|
});
|
|
5461
|
-
const { imageTargetFor } = await import('./governing-source-
|
|
5464
|
+
const { imageTargetFor } = await import('./governing-source-IRRP7G5G.js');
|
|
5462
5465
|
const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
|
|
5463
5466
|
if (!target.ok) {
|
|
5464
5467
|
if (opts.json) {
|
|
@@ -5521,17 +5524,17 @@ Next:
|
|
|
5521
5524
|
}
|
|
5522
5525
|
});
|
|
5523
5526
|
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) => {
|
|
5524
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5525
|
-
const { requestStop } = await import('./loop-
|
|
5527
|
+
const { defaultRunnerConfigPath } = await import('./config-MVA7YTFW.js');
|
|
5528
|
+
const { requestStop } = await import('./loop-KRGNTFZ2.js');
|
|
5526
5529
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5527
5530
|
const { runnerImageVersion } = await import('./image-tag-ADSLWXBA.js');
|
|
5528
5531
|
await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
|
|
5529
5532
|
});
|
|
5530
5533
|
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) => {
|
|
5531
|
-
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-
|
|
5534
|
+
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-MVA7YTFW.js');
|
|
5532
5535
|
const { jobsDir, runnerDir } = await import('./paths-7HVTDE6J.js');
|
|
5533
|
-
const { listJobFiles, runnerProcessState } = await import('./loop-
|
|
5534
|
-
const { renderStatus } = await import('./status-
|
|
5536
|
+
const { listJobFiles, runnerProcessState } = await import('./loop-KRGNTFZ2.js');
|
|
5537
|
+
const { renderStatus } = await import('./status-YVJQWWDP.js');
|
|
5535
5538
|
const { readHousekeepingRecord } = await import('./record-PPZEXAVA.js');
|
|
5536
5539
|
const path2 = await import('path');
|
|
5537
5540
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
@@ -5553,7 +5556,7 @@ Next:
|
|
|
5553
5556
|
const service = await (async () => {
|
|
5554
5557
|
if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
|
|
5555
5558
|
const { inspectService, realInspectProbes } = await import('./inspect-DNLXTXLA.js');
|
|
5556
|
-
const { DEFAULT_UNIT_NAME } = await import('./install-
|
|
5559
|
+
const { DEFAULT_UNIT_NAME } = await import('./install-47Z7VNWP.js');
|
|
5557
5560
|
const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
|
|
5558
5561
|
return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
|
|
5559
5562
|
})();
|
|
@@ -5590,8 +5593,8 @@ Next:
|
|
|
5590
5593
|
);
|
|
5591
5594
|
});
|
|
5592
5595
|
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) => {
|
|
5593
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5594
|
-
const { listJobFiles } = await import('./loop-
|
|
5596
|
+
const { defaultRunnerConfigPath } = await import('./config-MVA7YTFW.js');
|
|
5597
|
+
const { listJobFiles } = await import('./loop-KRGNTFZ2.js');
|
|
5595
5598
|
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-HI46FO6Z.js');
|
|
5596
5599
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5597
5600
|
const item = parseTrackerNumber(itemArg);
|
|
@@ -5844,7 +5847,7 @@ would get, the instruction files and the names of the skills. It warns when the
|
|
|
5844
5847
|
no \`build\`. It needs the context-read permission: a login or a factory key with it is enough.
|
|
5845
5848
|
`
|
|
5846
5849
|
).action(async (opts) => {
|
|
5847
|
-
const { runContextShow, ContextShowError } = await import('./context-show-cmd-
|
|
5850
|
+
const { runContextShow, ContextShowError } = await import('./context-show-cmd-6F4UF4ND.js');
|
|
5848
5851
|
try {
|
|
5849
5852
|
const result = await runContextShow({ repo: opts.repo, json: opts.json, url: opts.url, apiKey: opts.apiKey, appId: opts.appId });
|
|
5850
5853
|
process.stdout.write(result.output);
|