@outerlayer/cli 0.33.0-next.20261022195547 → 0.33.0-next.20261023002325
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 +5 -0
- package/dist/{agent-setup-RJOVRRHK.js → agent-setup-55ZDEXCS.js} +6 -6
- package/dist/{bridge-BCG2EB7F.js → bridge-NBCXFTT4.js} +2 -2
- package/dist/{build-GKCVFHF4.js → build-G4GUF6LT.js} +4 -4
- package/dist/{build-disk-6QAXMA2J.js → build-disk-3GL3KKEB.js} +5 -5
- package/dist/build-info.json +1 -1
- package/dist/{builder-DPNHJXG3.js → builder-3CUKTVSY.js} +4 -4
- package/dist/{check-64UX323V.js → check-64FD5G3X.js} +35 -37
- package/dist/{chunk-3MXPS7ED.js → chunk-2N67C6IV.js} +5 -4
- package/dist/{chunk-ZQOSIMKU.js → chunk-2WMZPJVE.js} +6 -3
- package/dist/{chunk-5BNWAIHN.js → chunk-3DCB3GOV.js} +41 -3
- package/dist/{chunk-UOFBHIOZ.js → chunk-57L2YAJA.js} +1 -1
- package/dist/{chunk-6NWS455T.js → chunk-5THSC6BD.js} +1 -1
- package/dist/{chunk-QL3LPZ67.js → chunk-6LBSAW6I.js} +1 -1
- package/dist/{chunk-WPGBDY73.js → chunk-6RKD7YZ6.js} +1 -1
- package/dist/{chunk-77B36F5K.js → chunk-6Z4SZHV2.js} +4 -3
- package/dist/{chunk-DETKDTNL.js → chunk-AU346ENF.js} +3 -2
- package/dist/chunk-B2JURP6A.js +41 -0
- package/dist/{chunk-BCCI32ME.js → chunk-BALIE3BA.js} +36 -7
- package/dist/{chunk-BY36DVJV.js → chunk-BKADJZ7F.js} +3 -2
- package/dist/{chunk-H7A3IQH5.js → chunk-CANYZTD5.js} +39 -22
- package/dist/{chunk-L6JFFP3Q.js → chunk-DGI66PGY.js} +32 -20
- package/dist/{chunk-GN2R5Z7G.js → chunk-DXJTBU7A.js} +3 -3
- package/dist/{chunk-WCELNMXT.js → chunk-EUVE2EAE.js} +2 -2
- package/dist/{chunk-DDS2ISML.js → chunk-F5UL23I2.js} +1 -1
- package/dist/{chunk-43PV5KDB.js → chunk-GFVDC5S3.js} +3 -3
- package/dist/{chunk-JEKENLLA.js → chunk-GH246BGV.js} +1 -1
- package/dist/{chunk-W5DOK7BL.js → chunk-HVRQQOMH.js} +3 -3
- package/dist/{chunk-6IKSUAIA.js → chunk-HXA5GIHK.js} +61 -3
- package/dist/{chunk-2QT4JUW3.js → chunk-IP7BIBXJ.js} +1 -35
- package/dist/{chunk-KLXWS5Z7.js → chunk-JPG43G6Y.js} +3 -3
- package/dist/{chunk-D3HRAPNF.js → chunk-JRZCRIEO.js} +1044 -640
- package/dist/{chunk-LWTBE5J6.js → chunk-L26V6ILJ.js} +1 -1
- package/dist/{chunk-ZXBQ6E72.js → chunk-LJUIG5K4.js} +14 -9
- package/dist/{chunk-ZRRUWNJS.js → chunk-LYE3KB6L.js} +3 -3
- package/dist/{chunk-SK4TWCN3.js → chunk-MZBQTVFG.js} +1 -1
- package/dist/{chunk-YKYCE4HY.js → chunk-MZYOUIY5.js} +1 -1
- package/dist/{chunk-OWDSO3PE.js → chunk-NBZ7XBT6.js} +1 -1
- package/dist/{chunk-6C2YWM6N.js → chunk-OOCAF3ID.js} +1 -1
- package/dist/{chunk-AGZNCIIJ.js → chunk-PA6CK6WQ.js} +1 -1
- package/dist/{chunk-QDMMW5PC.js → chunk-Q2CMEQV7.js} +2 -2
- package/dist/{chunk-DNKUSXQU.js → chunk-QFQC5K4J.js} +6 -113
- package/dist/{chunk-DJWKUQLO.js → chunk-QPWFVE3X.js} +1 -1
- package/dist/{chunk-AA6LYZC4.js → chunk-SOI6K5DY.js} +1 -1
- package/dist/{chunk-35IY5HQY.js → chunk-SVDOA4W2.js} +1 -1
- package/dist/{chunk-RBJG5MM4.js → chunk-T5REPMNL.js} +5 -5
- package/dist/{chunk-6KLPC4U7.js → chunk-ULBNTSAD.js} +3 -2
- package/dist/{chunk-CMKY36NV.js → chunk-VT4TTJPG.js} +6 -5
- package/dist/{chunk-FAZDYI2D.js → chunk-XL2XWWU7.js} +3 -2
- package/dist/{chunk-P5FC7VUO.js → chunk-XWFSAOC7.js} +2 -2
- package/dist/{chunk-CUBIZBMF.js → chunk-YERR22SY.js} +3 -3
- package/dist/{chunk-GWDS42JC.js → chunk-Z5IW4DHH.js} +1 -1
- package/dist/{claude-launcher-66GKNIRZ.js → claude-launcher-NTYHJUJM.js} +1 -1
- package/dist/{cli-WICFAKFW.js → cli-WKRURGHC.js} +126 -102
- package/dist/{command-VGR24IPI.js → command-WG54AUHK.js} +23 -23
- package/dist/{config-DUY2PT7K.js → config-LZSFW2O3.js} +2 -3
- package/dist/{connect-cmd-ADRPR6ES.js → connect-cmd-P5GASVAF.js} +5 -5
- package/dist/{container-start-QX53HKXW.js → container-start-DQKFQ3CL.js} +21 -23
- package/dist/context-show-cmd-3EPJ7CJC.js +115 -0
- package/dist/{control-plane-launch-SMHL6MWW.js → control-plane-launch-A3YCHQNQ.js} +5 -5
- package/dist/{docker-GGRJHHBP.js → docker-4ERXWTRW.js} +4 -4
- package/dist/{doctor-N3CDJ66I.js → doctor-GRCEYJXA.js} +24 -26
- package/dist/{emit-artifact-cmd-73OWUBH6.js → emit-artifact-cmd-FDPJKGOO.js} +11 -10
- package/dist/{emit-criteria-cmd-D7OR356Y.js → emit-criteria-cmd-3SVGCMJN.js} +8 -7
- package/dist/{emit-demo-cmd-4AV74GMZ.js → emit-demo-cmd-JSVI56WY.js} +11 -10
- package/dist/{emit-finding-cmd-GEPRJ6KO.js → emit-finding-cmd-TLJWBGQE.js} +8 -7
- package/dist/{emit-result-cmd-N52IABK6.js → emit-result-cmd-CJNVDV5V.js} +10 -9
- package/dist/{emit-step-cmd-CC6MUJ2S.js → emit-step-cmd-347CZO7Y.js} +8 -7
- package/dist/{exec-client-KLI262IX.js → exec-client-7PT4W7JR.js} +3 -3
- package/dist/{findings-cmd-7I72XX2H.js → findings-cmd-LHTYEHYB.js} +8 -7
- package/dist/{fleet-readiness-EZAGL32M.js → fleet-readiness-KGR5AC2J.js} +5 -5
- package/dist/{governing-source-M7ZRJCGY.js → governing-source-JZQZUTMA.js} +10 -9
- package/dist/{guest-init-ZJIE6MU3.js → guest-init-J3F3AEEY.js} +4 -4
- package/dist/{hook-fast-WNKICZ6E.js → hook-fast-6WDMNZG5.js} +1 -1
- package/dist/{pending-I5TY6SQH.js → host-key-UERIQRE6.js} +3 -3
- package/dist/{image-tag-MORUQ4LF.js → image-tag-ADSLWXBA.js} +3 -3
- package/dist/index.js +4 -4
- package/dist/{init-XG4NRZX4.js → init-OKJAI77M.js} +20 -22
- package/dist/{init-VCWDBOT4.js → init-WNO4NAO7.js} +20 -22
- package/dist/{init-cmd-2CAMWMRP.js → init-cmd-PFW4XTG7.js} +11 -10
- package/dist/{init-update-NCM4GA3S.js → init-update-X7YLZL6H.js} +8 -8
- package/dist/{install-NLVYISAV.js → install-GQUCHIGE.js} +4 -5
- package/dist/{install-cmd-HFGINYEE.js → install-cmd-FV7IZ7XF.js} +5 -5
- package/dist/{logs-QSKJ4G6M.js → logs-HI46FO6Z.js} +2 -2
- package/dist/{loop-PXALY3VY.js → loop-2SITCQ6H.js} +35 -37
- package/dist/{machine-AZRL432D.js → machine-YHBCNRUO.js} +20 -18
- package/dist/{mcp-serve-cmd-DQSO6MOL.js → mcp-serve-cmd-7ABBV2QE.js} +4 -4
- package/dist/{paths-KHDFSBEI.js → paths-7HVTDE6J.js} +2 -2
- package/dist/{host-key-REZADWAM.js → pending-5HZACM2V.js} +3 -3
- package/dist/{pidfile-BSY63HIC.js → pidfile-5UDLYPMC.js} +3 -3
- package/dist/{record-7CNTGRLD.js → record-PPZEXAVA.js} +3 -3
- package/dist/{runner-env-26NLQI35.js → runner-env-QYE7KZFP.js} +5 -6
- package/dist/{runner-identity-WGH73DTV.js → runner-identity-FIHOECSH.js} +4 -4
- package/dist/{runner-key-6BIULOR4.js → runner-key-YUKU2MWK.js} +20 -22
- package/dist/{session-sender-MSHKJSBG.js → session-sender-7B3ZDWMC.js} +11 -10
- package/dist/{spec-cmd-AWIMO32E.js → spec-cmd-Q26NE22H.js} +9 -8
- package/dist/{status-BILERIXB.js → status-VBQJMFEX.js} +27 -25
- package/dist/{sync-cmd-BSUZ65CU.js → sync-cmd-SSUYTMLJ.js} +10 -9
- package/dist/{watch-UF6XCGSI.js → watch-L5NCO46E.js} +10 -9
- package/dist/{work-claim-cmd-4FXVAZWF.js → work-claim-cmd-MFND6Z4S.js} +12 -12
- package/dist/{work-cmd-NCP4637R.js → work-cmd-W7WEHMQJ.js} +8 -7
- package/dist/{work-comment-cmd-YNQYVHYS.js → work-comment-cmd-SSUOGVDD.js} +8 -7
- package/dist/{work-logs-cmd-HHWVYQBG.js → work-logs-cmd-WPMWMDX6.js} +8 -7
- package/dist/{work-open-pr-cmd-ALVD7KLY.js → work-open-pr-cmd-NO5YLOXD.js} +9 -8
- package/dist/{work-pr-cmd-KBNFVRB4.js → work-pr-cmd-37B5KECR.js} +8 -7
- package/dist/{work-stop-cmd-DBWNHZJO.js → work-stop-cmd-3BJLXUJ3.js} +8 -7
- package/package.json +1 -1
- package/skill-pack/maintained/outerlayer-build/SKILL.md +4 -2
- package/dist/chunk-I5LGKZ4M.js +0 -107
- package/dist/chunk-UXYLWVTQ.js +0 -43
- package/dist/chunk-WBZJWVT2.js +0 -146
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-
|
|
3
|
+
import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-LJUIG5K4.js';
|
|
4
4
|
import './chunk-BJQ25STI.js';
|
|
5
|
-
import './chunk-
|
|
5
|
+
import './chunk-HXA5GIHK.js';
|
|
6
6
|
import './chunk-KT4CN6OU.js';
|
|
7
7
|
import './chunk-DY7Y7UT4.js';
|
|
8
|
-
import { verifiedTrackerNames, TRACKERS } from './chunk-
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
8
|
+
import { verifiedTrackerNames, TRACKERS } from './chunk-VT4TTJPG.js';
|
|
9
|
+
import './chunk-IP7BIBXJ.js';
|
|
10
|
+
import './chunk-B2JURP6A.js';
|
|
11
|
+
import './chunk-2WMZPJVE.js';
|
|
11
12
|
import './chunk-EWVYQLD3.js';
|
|
12
13
|
import './chunk-5DNCFOXA.js';
|
|
13
14
|
import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-HJYBWJAS.js';
|
|
@@ -15,12 +16,12 @@ import './chunk-NSPRS7WK.js';
|
|
|
15
16
|
import './chunk-G2JWZDFA.js';
|
|
16
17
|
import { C, warnDeprecated, API_KEY_FLAG_DEPRECATION, NO_COLOR_FLAG, stripNoColor } from './chunk-ANPNT6PM.js';
|
|
17
18
|
import './chunk-UIUGTW5C.js';
|
|
18
|
-
import './chunk-
|
|
19
|
+
import './chunk-6RKD7YZ6.js';
|
|
19
20
|
import './chunk-PJDQPF5N.js';
|
|
20
|
-
import './chunk-
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
23
|
-
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-
|
|
21
|
+
import './chunk-SOI6K5DY.js';
|
|
22
|
+
import './chunk-PA6CK6WQ.js';
|
|
23
|
+
import './chunk-BALIE3BA.js';
|
|
24
|
+
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-QPWFVE3X.js';
|
|
24
25
|
import './chunk-ZJSNLVCE.js';
|
|
25
26
|
import './chunk-I7RZHMXW.js';
|
|
26
27
|
import './chunk-BKO6JEZI.js';
|
|
@@ -3666,7 +3667,7 @@ async function installStarterPackInRepo() {
|
|
|
3666
3667
|
} catch {
|
|
3667
3668
|
}
|
|
3668
3669
|
const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-JGF7MJHG.js');
|
|
3669
|
-
const fresh = !isAgentsMdLayout(repoRoot) && !existsSync(join(repoRoot, ".outerlayer"));
|
|
3670
|
+
const fresh = !isAgentsMdLayout(repoRoot) && !existsSync(join(repoRoot, ".outerlayer/skills")) && !existsSync(join(repoRoot, ".outerlayer/AGENTS.md"));
|
|
3670
3671
|
const result = installStarterPack({ repoRoot, base: fresh ? ".agents/skills" : skillsBaseFor(repoRoot) });
|
|
3671
3672
|
if (fresh) declareAgentsMdLayout(repoRoot);
|
|
3672
3673
|
return { result, output: formatStarterPackOutput(result) };
|
|
@@ -3799,7 +3800,7 @@ async function installMachineSkillsForSetup() {
|
|
|
3799
3800
|
` : "";
|
|
3800
3801
|
}
|
|
3801
3802
|
async function realConnectDepsForCwd() {
|
|
3802
|
-
const { realConnectDeps } = await import('./connect-cmd-
|
|
3803
|
+
const { realConnectDeps } = await import('./connect-cmd-P5GASVAF.js');
|
|
3803
3804
|
const { resolveRepoIdentity } = await import('./dist-ACTRIBVW.js');
|
|
3804
3805
|
return {
|
|
3805
3806
|
...realConnectDeps(),
|
|
@@ -3874,8 +3875,8 @@ build, ../outerlayer-build/SKILL.md becomes ~/.agents/skills/outerlayer-build/SK
|
|
|
3874
3875
|
what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocation() + " doctor` reports the same\nstates under Starter files.\n"
|
|
3875
3876
|
).action(async (opts) => {
|
|
3876
3877
|
if (opts.update || opts.dryRun) {
|
|
3877
|
-
const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-
|
|
3878
|
-
const { fleetReadiness } = await import('./fleet-readiness-
|
|
3878
|
+
const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-X7YLZL6H.js');
|
|
3879
|
+
const { fleetReadiness } = await import('./fleet-readiness-KGR5AC2J.js');
|
|
3879
3880
|
const problem = updateFlagProblem(opts);
|
|
3880
3881
|
if (problem !== void 0) {
|
|
3881
3882
|
fail(problem);
|
|
@@ -3926,13 +3927,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3926
3927
|
if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
|
|
3927
3928
|
`);
|
|
3928
3929
|
}
|
|
3929
|
-
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-PFW4XTG7.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
|
|
3930
3931
|
if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
|
|
3931
3932
|
else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
|
|
3932
3933
|
return;
|
|
3933
3934
|
}
|
|
3934
3935
|
await installMachineSkillsForSetup();
|
|
3935
|
-
const { runInitCommand } = await import('./init-cmd-
|
|
3936
|
+
const { runInitCommand } = await import('./init-cmd-PFW4XTG7.js');
|
|
3936
3937
|
const code = await runInitCommand(
|
|
3937
3938
|
{ json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
|
|
3938
3939
|
{
|
|
@@ -3944,7 +3945,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3944
3945
|
return { ok, text, detail };
|
|
3945
3946
|
},
|
|
3946
3947
|
runAgentSetup: async () => {
|
|
3947
|
-
const { runAgentSetup } = await import('./agent-setup-
|
|
3948
|
+
const { runAgentSetup } = await import('./agent-setup-55ZDEXCS.js');
|
|
3948
3949
|
return runAgentSetup({ cwd: process.cwd(), skillsLink: opts.skillsLink !== false });
|
|
3949
3950
|
},
|
|
3950
3951
|
runDoctorChecks: gatherDoctorChecks,
|
|
@@ -3953,7 +3954,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3953
3954
|
shellPath: process.env.SHELL,
|
|
3954
3955
|
interactive: Boolean(process.stdin.isTTY && process.stderr.isTTY) && opts.json !== true,
|
|
3955
3956
|
ask: async () => {
|
|
3956
|
-
const { promptOnTerminal } = await import('./connect-cmd-
|
|
3957
|
+
const { promptOnTerminal } = await import('./connect-cmd-P5GASVAF.js');
|
|
3957
3958
|
const answer = await promptOnTerminal({
|
|
3958
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.`,
|
|
3959
3960
|
options: [
|
|
@@ -3992,7 +3993,7 @@ linked (true, false, or null when it could not be checked) and, when false,
|
|
|
3992
3993
|
linkUrl.
|
|
3993
3994
|
`
|
|
3994
3995
|
).action(async (opts) => {
|
|
3995
|
-
const { runConnectCommand } = await import('./connect-cmd-
|
|
3996
|
+
const { runConnectCommand } = await import('./connect-cmd-P5GASVAF.js');
|
|
3996
3997
|
const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
|
|
3997
3998
|
stdout: process.stdout,
|
|
3998
3999
|
stderr: process.stderr
|
|
@@ -4070,7 +4071,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4070
4071
|
else fail(found.reason);
|
|
4071
4072
|
return;
|
|
4072
4073
|
}
|
|
4073
|
-
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-
|
|
4074
|
+
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-SSUYTMLJ.js');
|
|
4074
4075
|
try {
|
|
4075
4076
|
const result = await runSync({
|
|
4076
4077
|
url: opts.url,
|
|
@@ -4101,7 +4102,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4101
4102
|
if (invokedCommandToken(argv) === "watch") {
|
|
4102
4103
|
warnDeprecated(`\`${cliInvocation()} watch\` is now \`${cliInvocation()} daemon\`; the old name will be removed in a future release.`);
|
|
4103
4104
|
}
|
|
4104
|
-
const { runWatch } = await import('./watch-
|
|
4105
|
+
const { runWatch } = await import('./watch-L5NCO46E.js');
|
|
4105
4106
|
await runWatch({ once: opts.once });
|
|
4106
4107
|
});
|
|
4107
4108
|
program2.command("hook <event>", { hidden: true }).description("capture-hook fast path, installed by `init`").action(() => {
|
|
@@ -4162,7 +4163,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4162
4163
|
}
|
|
4163
4164
|
});
|
|
4164
4165
|
program2.command("vm-exec", { hidden: true }).description("run a command in a microVM build's guest through its exec agent").requiredOption("--socket <path>", "the Unix socket Firecracker serves the build's vsock device on").option("--user <user>", "the user to run as", "").option("--cwd <dir>", "the working directory", "/").option("--env <NAME=value>", "an environment value the command line carries; repeatable", (value, previous) => [...previous, value], []).option("--pass <NAME>", "an environment variable whose value is read from this process; repeatable", (value, previous) => [...previous, value], []).argument("<argv...>", "the command and its arguments").action(async (argv2, opts) => {
|
|
4165
|
-
const { runVmExec } = await import('./exec-client-
|
|
4166
|
+
const { runVmExec } = await import('./exec-client-7PT4W7JR.js');
|
|
4166
4167
|
const env = {};
|
|
4167
4168
|
for (const entry of opts.env) {
|
|
4168
4169
|
const eq = entry.indexOf("=");
|
|
@@ -4191,7 +4192,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4191
4192
|
process.exitCode = await runBuildCommand({ dir: opts.dir, argv: command });
|
|
4192
4193
|
});
|
|
4193
4194
|
program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
|
|
4194
|
-
const { runSessionSender } = await import('./session-sender-
|
|
4195
|
+
const { runSessionSender } = await import('./session-sender-7B3ZDWMC.js');
|
|
4195
4196
|
try {
|
|
4196
4197
|
await runSessionSender();
|
|
4197
4198
|
} catch (err) {
|
|
@@ -4199,7 +4200,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4199
4200
|
}
|
|
4200
4201
|
});
|
|
4201
4202
|
program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
|
|
4202
|
-
const { realGuestHost, runGuestInit } = await import('./guest-init-
|
|
4203
|
+
const { realGuestHost, runGuestInit } = await import('./guest-init-J3F3AEEY.js');
|
|
4203
4204
|
const { readFileSync: readFileSync3 } = await import('fs');
|
|
4204
4205
|
try {
|
|
4205
4206
|
runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
|
|
@@ -4208,7 +4209,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4208
4209
|
}
|
|
4209
4210
|
});
|
|
4210
4211
|
program2.command("vm-forward", { hidden: true }).description("pipe a guest port to another; vm-init runs it").requiredOption("--listen <host:port>", "the address to listen on").requiredOption("--to <host:port>", "the address to pipe each connection to").action(async (opts) => {
|
|
4211
|
-
const { startBridgeForward } = await import('./bridge-
|
|
4212
|
+
const { startBridgeForward } = await import('./bridge-NBCXFTT4.js');
|
|
4212
4213
|
try {
|
|
4213
4214
|
await startBridgeForward(opts);
|
|
4214
4215
|
} catch (err) {
|
|
@@ -4287,7 +4288,7 @@ Compiling .outerlayer/ moved to \`${cliInvocation()} context emit\`.
|
|
|
4287
4288
|
await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
|
|
4288
4289
|
return;
|
|
4289
4290
|
}
|
|
4290
|
-
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-
|
|
4291
|
+
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-CJNVDV5V.js');
|
|
4291
4292
|
try {
|
|
4292
4293
|
const result = await runEmitResult({
|
|
4293
4294
|
name,
|
|
@@ -4338,7 +4339,7 @@ everywhere, bytes and deep link untouched; a still-queued one is cancelled
|
|
|
4338
4339
|
locally so it never uploads. One correction can retire several duplicates.
|
|
4339
4340
|
`
|
|
4340
4341
|
).action(async (file, opts) => {
|
|
4341
|
-
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-
|
|
4342
|
+
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-FDPJKGOO.js');
|
|
4342
4343
|
let pr;
|
|
4343
4344
|
if (opts.pr !== void 0) {
|
|
4344
4345
|
pr = parseTrackerNumber(opts.pr);
|
|
@@ -4387,7 +4388,7 @@ check. A chapter reads yes when every still matches and no when one differs; the
|
|
|
4387
4388
|
the region. One run, or a chapter with no stills, reads not checked. Comparing never changes which clips bind.
|
|
4388
4389
|
`
|
|
4389
4390
|
).action(async (manifest, opts) => {
|
|
4390
|
-
const { runEmitDemo, EmitDemoError } = await import('./emit-demo-cmd-
|
|
4391
|
+
const { runEmitDemo, EmitDemoError } = await import('./emit-demo-cmd-JSVI56WY.js');
|
|
4391
4392
|
let item;
|
|
4392
4393
|
if (opts.item !== void 0) {
|
|
4393
4394
|
item = parseTrackerNumber(opts.item);
|
|
@@ -4456,7 +4457,7 @@ recent events with their ids. --find <text> searches all of them.
|
|
|
4456
4457
|
item that session was launched for is used automatically.
|
|
4457
4458
|
`
|
|
4458
4459
|
).action(async (opts) => {
|
|
4459
|
-
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4460
|
+
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-TLJWBGQE.js');
|
|
4460
4461
|
try {
|
|
4461
4462
|
refuseRemovedFindingFlags(opts);
|
|
4462
4463
|
const result = await runEmitFinding({
|
|
@@ -4523,7 +4524,7 @@ the whole batch. "untimed": true records one with no time on purpose.
|
|
|
4523
4524
|
that session was launched for is used automatically.
|
|
4524
4525
|
`
|
|
4525
4526
|
).action(async (file, opts) => {
|
|
4526
|
-
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4527
|
+
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-TLJWBGQE.js');
|
|
4527
4528
|
try {
|
|
4528
4529
|
const result = await runEmitFindings({
|
|
4529
4530
|
file,
|
|
@@ -4558,7 +4559,7 @@ command, the command exits 0, and \`sync\` sends it later. If the gateway refuse
|
|
|
4558
4559
|
the step, the command prints why and exits 1.
|
|
4559
4560
|
`
|
|
4560
4561
|
).action(async (name, opts) => {
|
|
4561
|
-
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-
|
|
4562
|
+
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-347CZO7Y.js');
|
|
4562
4563
|
try {
|
|
4563
4564
|
await runEmitStep({
|
|
4564
4565
|
name,
|
|
@@ -4601,7 +4602,7 @@ of the item, and a (proof: <kind>) annotation names its proof.
|
|
|
4601
4602
|
${cliInvocation()} emit criteria acceptance/412-login.md --item 412
|
|
4602
4603
|
`
|
|
4603
4604
|
).action(async (file, opts) => {
|
|
4604
|
-
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-
|
|
4605
|
+
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-3SVGCMJN.js');
|
|
4605
4606
|
try {
|
|
4606
4607
|
const result = await runEmitCriteria({
|
|
4607
4608
|
file,
|
|
@@ -4625,9 +4626,9 @@ function registerSpecCommands(program2) {
|
|
|
4625
4626
|
const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
|
|
4626
4627
|
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)");
|
|
4627
4628
|
const run = async (action) => {
|
|
4628
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4629
|
+
const { WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
4629
4630
|
try {
|
|
4630
|
-
await action(await import('./spec-cmd-
|
|
4631
|
+
await action(await import('./spec-cmd-Q26NE22H.js'));
|
|
4631
4632
|
} catch (err) {
|
|
4632
4633
|
if (err instanceof WorkCommandError) {
|
|
4633
4634
|
fail(err.message);
|
|
@@ -4662,7 +4663,7 @@ Prints each problem the item covers with its id, its reports and its result.
|
|
|
4662
4663
|
session was launched for is used.
|
|
4663
4664
|
`
|
|
4664
4665
|
).action(async (opts) => {
|
|
4665
|
-
const { runFindingsShow, FindingsCommandError } = await import('./findings-cmd-
|
|
4666
|
+
const { runFindingsShow, FindingsCommandError } = await import('./findings-cmd-LHTYEHYB.js');
|
|
4666
4667
|
try {
|
|
4667
4668
|
const result = await runFindingsShow({
|
|
4668
4669
|
item: opts.item,
|
|
@@ -4690,7 +4691,7 @@ Give exactly one of --fixed and --not-fixed, and a --note. Run it again for the
|
|
|
4690
4691
|
problem to replace the earlier result. A problem the item does not cover is refused.
|
|
4691
4692
|
`
|
|
4692
4693
|
).action(async (problem, opts) => {
|
|
4693
|
-
const { runFindingsResult, FindingsCommandError } = await import('./findings-cmd-
|
|
4694
|
+
const { runFindingsResult, FindingsCommandError } = await import('./findings-cmd-LHTYEHYB.js');
|
|
4694
4695
|
try {
|
|
4695
4696
|
const result = await runFindingsResult({
|
|
4696
4697
|
problem,
|
|
@@ -4731,7 +4732,7 @@ takes it, and prints the line that starts your session on it. That
|
|
|
4731
4732
|
session links itself and holds the item's lease while it works.
|
|
4732
4733
|
`
|
|
4733
4734
|
).action(async (opts) => {
|
|
4734
|
-
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-
|
|
4735
|
+
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
4735
4736
|
try {
|
|
4736
4737
|
await runWorkBuild(opts);
|
|
4737
4738
|
} catch (err) {
|
|
@@ -4754,7 +4755,7 @@ renews that session's own 20-minute lease, unless --no-lease or
|
|
|
4754
4755
|
--ended is given, or another worker already holds a live one.
|
|
4755
4756
|
`
|
|
4756
4757
|
).action(async (number, opts) => {
|
|
4757
|
-
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-
|
|
4758
|
+
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
4758
4759
|
try {
|
|
4759
4760
|
await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
|
|
4760
4761
|
} catch (err) {
|
|
@@ -4778,8 +4779,8 @@ criterion's new proof; --ready hands the thread back to a person. At
|
|
|
4778
4779
|
most one action flag may be given.
|
|
4779
4780
|
`
|
|
4780
4781
|
).action(async (opts) => {
|
|
4781
|
-
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4782
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4782
|
+
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-SSUOGVDD.js');
|
|
4783
|
+
const { WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
4783
4784
|
try {
|
|
4784
4785
|
await runWorkComment(opts);
|
|
4785
4786
|
} catch (err) {
|
|
@@ -4800,8 +4801,8 @@ criterion that carries proof or a comment, each with who is waiting
|
|
|
4800
4801
|
on whom next.
|
|
4801
4802
|
`
|
|
4802
4803
|
).action(async (opts) => {
|
|
4803
|
-
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4804
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4804
|
+
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-SSUOGVDD.js');
|
|
4805
|
+
const { WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
4805
4806
|
try {
|
|
4806
4807
|
await runWorkThreads(opts);
|
|
4807
4808
|
} catch (err) {
|
|
@@ -4825,8 +4826,8 @@ still running, or that an older runner released, has no log and the
|
|
|
4825
4826
|
command exits 1.
|
|
4826
4827
|
`
|
|
4827
4828
|
).action(async (opts) => {
|
|
4828
|
-
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-
|
|
4829
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4829
|
+
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-WPMWMDX6.js');
|
|
4830
|
+
const { WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
4830
4831
|
try {
|
|
4831
4832
|
await runWorkLogs(opts);
|
|
4832
4833
|
} catch (err) {
|
|
@@ -4849,8 +4850,8 @@ item is not built again until a new build request. Exits 1 when no host
|
|
|
4849
4850
|
build is running for the item.
|
|
4850
4851
|
`
|
|
4851
4852
|
).action(async (opts) => {
|
|
4852
|
-
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-
|
|
4853
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4853
|
+
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-3BJLXUJ3.js');
|
|
4854
|
+
const { WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
4854
4855
|
try {
|
|
4855
4856
|
await runWorkStop(opts);
|
|
4856
4857
|
} catch (err) {
|
|
@@ -4871,7 +4872,7 @@ deletes anything \u2014 the item is removed from Work only once no
|
|
|
4871
4872
|
live addition remains on it.
|
|
4872
4873
|
`
|
|
4873
4874
|
).action(async (opts) => {
|
|
4874
|
-
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-
|
|
4875
|
+
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
4875
4876
|
try {
|
|
4876
4877
|
await runWorkRemove(opts);
|
|
4877
4878
|
} catch (err) {
|
|
@@ -4883,7 +4884,7 @@ live addition remains on it.
|
|
|
4883
4884
|
}
|
|
4884
4885
|
});
|
|
4885
4886
|
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) => {
|
|
4886
|
-
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-
|
|
4887
|
+
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
4887
4888
|
try {
|
|
4888
4889
|
await runWorkStatus(opts);
|
|
4889
4890
|
} catch (err) {
|
|
@@ -4895,7 +4896,7 @@ live addition remains on it.
|
|
|
4895
4896
|
}
|
|
4896
4897
|
});
|
|
4897
4898
|
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) => {
|
|
4898
|
-
const { runWorkList, WorkCommandError } = await import('./work-cmd-
|
|
4899
|
+
const { runWorkList, WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
4899
4900
|
try {
|
|
4900
4901
|
await runWorkList(opts);
|
|
4901
4902
|
} catch (err) {
|
|
@@ -4916,7 +4917,7 @@ by a different key is refused; claiming again with the same key extends
|
|
|
4916
4917
|
it. --host is a label only.
|
|
4917
4918
|
`
|
|
4918
4919
|
).action(async (opts) => {
|
|
4919
|
-
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-
|
|
4920
|
+
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-MFND6Z4S.js');
|
|
4920
4921
|
try {
|
|
4921
4922
|
await runWorkClaim(opts);
|
|
4922
4923
|
} catch (err) {
|
|
@@ -4936,7 +4937,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
|
|
|
4936
4937
|
lease has expired, or a 403 if a different key holds it.
|
|
4937
4938
|
`
|
|
4938
4939
|
).action(async (opts) => {
|
|
4939
|
-
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-
|
|
4940
|
+
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-MFND6Z4S.js');
|
|
4940
4941
|
try {
|
|
4941
4942
|
await runWorkRenew(opts);
|
|
4942
4943
|
} catch (err) {
|
|
@@ -4968,7 +4969,7 @@ applies to a host's lease only. A later tool call in the session
|
|
|
4968
4969
|
takes the lease again.
|
|
4969
4970
|
`
|
|
4970
4971
|
).action(async (opts) => {
|
|
4971
|
-
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-
|
|
4972
|
+
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-MFND6Z4S.js');
|
|
4972
4973
|
try {
|
|
4973
4974
|
await runWorkRelease(opts);
|
|
4974
4975
|
} catch (err) {
|
|
@@ -4995,7 +4996,7 @@ Idempotent: declaring the same pull request twice is a no-op.
|
|
|
4995
4996
|
needs your own login; an agent session or a factory key is refused.
|
|
4996
4997
|
`
|
|
4997
4998
|
).action(async (number, opts) => {
|
|
4998
|
-
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-
|
|
4999
|
+
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-37B5KECR.js');
|
|
4999
5000
|
try {
|
|
5000
5001
|
await runWorkPr({ ...opts, number });
|
|
5001
5002
|
} catch (err) {
|
|
@@ -5020,8 +5021,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
|
|
|
5020
5021
|
Run it again after a change to the title or description.
|
|
5021
5022
|
`
|
|
5022
5023
|
).action(async (opts) => {
|
|
5023
|
-
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-
|
|
5024
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
5024
|
+
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-NO5YLOXD.js');
|
|
5025
|
+
const { WorkCommandError } = await import('./work-cmd-W7WEHMQJ.js');
|
|
5025
5026
|
try {
|
|
5026
5027
|
await runWorkOpenPr(opts);
|
|
5027
5028
|
} catch (err) {
|
|
@@ -5037,9 +5038,9 @@ function registerRunnerCommands(program2) {
|
|
|
5037
5038
|
const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
|
|
5038
5039
|
const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
|
|
5039
5040
|
runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
|
|
5040
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5041
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
5042
|
-
const { RunnerAlreadyRunningError } = await import('./pidfile-
|
|
5041
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-LZSFW2O3.js');
|
|
5042
|
+
const { start, RunnerStartError } = await import('./loop-2SITCQ6H.js');
|
|
5043
|
+
const { RunnerAlreadyRunningError } = await import('./pidfile-5UDLYPMC.js');
|
|
5043
5044
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5044
5045
|
try {
|
|
5045
5046
|
const { realUpdateDeps } = await import('./real-deps-QX5YH7FG.js');
|
|
@@ -5056,10 +5057,10 @@ function registerRunnerCommands(program2) {
|
|
|
5056
5057
|
"after",
|
|
5057
5058
|
"\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"
|
|
5058
5059
|
).action(async () => {
|
|
5059
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5060
|
-
const { containerStart } = await import('./container-start-
|
|
5061
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
5062
|
-
const { RunnerAlreadyRunningError } = await import('./pidfile-
|
|
5060
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-LZSFW2O3.js');
|
|
5061
|
+
const { containerStart } = await import('./container-start-DQKFQ3CL.js');
|
|
5062
|
+
const { start, RunnerStartError } = await import('./loop-2SITCQ6H.js');
|
|
5063
|
+
const { RunnerAlreadyRunningError } = await import('./pidfile-5UDLYPMC.js');
|
|
5063
5064
|
try {
|
|
5064
5065
|
const result = await containerStart({
|
|
5065
5066
|
env: process.env,
|
|
@@ -5077,8 +5078,8 @@ function registerRunnerCommands(program2) {
|
|
|
5077
5078
|
}
|
|
5078
5079
|
});
|
|
5079
5080
|
runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
|
|
5080
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5081
|
-
const { runRunnerCheck } = await import('./check-
|
|
5081
|
+
const { defaultRunnerConfigPath } = await import('./config-LZSFW2O3.js');
|
|
5082
|
+
const { runRunnerCheck } = await import('./check-64FD5G3X.js');
|
|
5082
5083
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5083
5084
|
const result = await runRunnerCheck(configPath);
|
|
5084
5085
|
if (!result.ok) {
|
|
@@ -5099,8 +5100,8 @@ function registerRunnerCommands(program2) {
|
|
|
5099
5100
|
`);
|
|
5100
5101
|
});
|
|
5101
5102
|
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) => {
|
|
5102
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5103
|
-
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-
|
|
5103
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-LZSFW2O3.js');
|
|
5104
|
+
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-FV7IZ7XF.js');
|
|
5104
5105
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5105
5106
|
if (opts.service !== true) {
|
|
5106
5107
|
for (const flag of ["print", "user", "unitName"]) {
|
|
@@ -5112,7 +5113,7 @@ function registerRunnerCommands(program2) {
|
|
|
5112
5113
|
}
|
|
5113
5114
|
try {
|
|
5114
5115
|
if (opts.service === true) {
|
|
5115
|
-
const { installServiceCommand } = await import('./command-
|
|
5116
|
+
const { installServiceCommand } = await import('./command-WG54AUHK.js');
|
|
5116
5117
|
const result2 = await installServiceCommand({
|
|
5117
5118
|
configPath,
|
|
5118
5119
|
print: opts.print,
|
|
@@ -5167,8 +5168,8 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
|
|
|
5167
5168
|
fail(`pass --service: \`${cliInvocation()} runner uninstall --service\` removes the runner's service.`);
|
|
5168
5169
|
return;
|
|
5169
5170
|
}
|
|
5170
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5171
|
-
const { uninstallServiceCommand } = await import('./command-
|
|
5171
|
+
const { defaultRunnerConfigPath } = await import('./config-LZSFW2O3.js');
|
|
5172
|
+
const { uninstallServiceCommand } = await import('./command-WG54AUHK.js');
|
|
5172
5173
|
const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
|
|
5173
5174
|
if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
5174
5175
|
`);
|
|
@@ -5195,12 +5196,12 @@ already in claude.env is used.
|
|
|
5195
5196
|
printf '%s' "$CLAUDE_CODE_OAUTH_TOKEN" | ${cliInvocation()} runner init --agent claude --factory <org>/<factory>
|
|
5196
5197
|
`
|
|
5197
5198
|
).action(async (opts) => {
|
|
5198
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5199
|
-
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-
|
|
5200
|
-
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-
|
|
5201
|
-
const { detectMachine } = await import('./machine-
|
|
5202
|
-
const { chooseVm, runVmInit, VmInitError } = await import('./init-
|
|
5203
|
-
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-
|
|
5199
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-LZSFW2O3.js');
|
|
5200
|
+
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-WNO4NAO7.js');
|
|
5201
|
+
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-YUKU2MWK.js');
|
|
5202
|
+
const { detectMachine } = await import('./machine-YHBCNRUO.js');
|
|
5203
|
+
const { chooseVm, runVmInit, VmInitError } = await import('./init-OKJAI77M.js');
|
|
5204
|
+
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-QYE7KZFP.js');
|
|
5204
5205
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5205
5206
|
if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
|
|
5206
5207
|
fail(`--agent ${opts.agent}: runner init writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")}. For another agent, leave --agent out and edit runner.commands.`);
|
|
@@ -5231,7 +5232,7 @@ already in claude.env is used.
|
|
|
5231
5232
|
const chunks = [];
|
|
5232
5233
|
for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
|
|
5233
5234
|
const result2 = runRunnerInit(configPath, { machine, configFromStdin: Buffer.concat(chunks).toString("utf8"), requireContainer: true });
|
|
5234
|
-
const { ensureHostKey: ensureHostKey2 } = await import('./host-key-
|
|
5235
|
+
const { ensureHostKey: ensureHostKey2 } = await import('./host-key-UERIQRE6.js');
|
|
5235
5236
|
const hostKey2 = await ensureHostKey2(configPath);
|
|
5236
5237
|
process.stdout.write(`host key ${hostKey2.fingerprint}
|
|
5237
5238
|
hooks: ${result2.hooks}
|
|
@@ -5290,7 +5291,7 @@ hooks: ${result2.hooks}
|
|
|
5290
5291
|
const prepared = prepareRunnerInit(configPath, { machine, allowProcess, agent, credential, keyFromLogin: makeKey !== void 0 });
|
|
5291
5292
|
const created = makeKey === void 0 ? void 0 : await makeKey();
|
|
5292
5293
|
const result = writeRunnerInit(prepared, created);
|
|
5293
|
-
const { ensureHostKey } = await import('./host-key-
|
|
5294
|
+
const { ensureHostKey } = await import('./host-key-UERIQRE6.js');
|
|
5294
5295
|
const hostKey = await ensureHostKey(configPath);
|
|
5295
5296
|
if (created !== void 0) {
|
|
5296
5297
|
process.stdout.write(`${C.green}\u2713${C.reset} saved the runner key in ${result.configPath}
|
|
@@ -5318,7 +5319,7 @@ ${C.yellow}${result.note}${C.reset}
|
|
|
5318
5319
|
To isolate builds in containers instead, run ${C.yellow}${cliInvocation()} runner init --vm${C.reset}.
|
|
5319
5320
|
`);
|
|
5320
5321
|
}
|
|
5321
|
-
const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-
|
|
5322
|
+
const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-FV7IZ7XF.js');
|
|
5322
5323
|
let installedLayout = false;
|
|
5323
5324
|
let noService = "it starts the runner from the install layout, which needs a CLI installed with npm";
|
|
5324
5325
|
try {
|
|
@@ -5350,7 +5351,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
|
|
|
5350
5351
|
let serviceUp = false;
|
|
5351
5352
|
let restart;
|
|
5352
5353
|
if (installedLayout) {
|
|
5353
|
-
const { installServiceCommand } = await import('./command-
|
|
5354
|
+
const { installServiceCommand } = await import('./command-WG54AUHK.js');
|
|
5354
5355
|
const service = await installServiceCommand({
|
|
5355
5356
|
configPath,
|
|
5356
5357
|
entryPath: process.argv[1] ?? "",
|
|
@@ -5394,12 +5395,12 @@ Next:
|
|
|
5394
5395
|
"after",
|
|
5395
5396
|
"\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"
|
|
5396
5397
|
).action(async (opts) => {
|
|
5397
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5398
|
-
const { buildRepositoryImage, RecipeError } = await import('./build-
|
|
5398
|
+
const { defaultRunnerConfigPath } = await import('./config-LZSFW2O3.js');
|
|
5399
|
+
const { buildRepositoryImage, RecipeError } = await import('./build-G4GUF6LT.js');
|
|
5399
5400
|
const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
|
|
5400
|
-
const { createDockerHost } = await import('./docker-
|
|
5401
|
-
const { builderSpec } = await import('./builder-
|
|
5402
|
-
const { loadRunnerConfig } = await import('./config-
|
|
5401
|
+
const { createDockerHost } = await import('./docker-4ERXWTRW.js');
|
|
5402
|
+
const { builderSpec } = await import('./builder-3CUKTVSY.js');
|
|
5403
|
+
const { loadRunnerConfig } = await import('./config-LZSFW2O3.js');
|
|
5403
5404
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5404
5405
|
const loaded = (() => {
|
|
5405
5406
|
try {
|
|
@@ -5410,11 +5411,11 @@ Next:
|
|
|
5410
5411
|
})();
|
|
5411
5412
|
const memory = loaded?.build?.memory ?? "8g";
|
|
5412
5413
|
try {
|
|
5413
|
-
const { ensureRunnerIdentity } = await import('./runner-identity-
|
|
5414
|
+
const { ensureRunnerIdentity } = await import('./runner-identity-FIHOECSH.js');
|
|
5414
5415
|
await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
|
|
5415
5416
|
console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
|
|
5416
5417
|
});
|
|
5417
|
-
const { imageTargetFor } = await import('./governing-source-
|
|
5418
|
+
const { imageTargetFor } = await import('./governing-source-JZQZUTMA.js');
|
|
5418
5419
|
const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
|
|
5419
5420
|
if (!target.ok) {
|
|
5420
5421
|
if (opts.json) {
|
|
@@ -5477,25 +5478,25 @@ Next:
|
|
|
5477
5478
|
}
|
|
5478
5479
|
});
|
|
5479
5480
|
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) => {
|
|
5480
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5481
|
-
const { requestStop } = await import('./loop-
|
|
5481
|
+
const { defaultRunnerConfigPath } = await import('./config-LZSFW2O3.js');
|
|
5482
|
+
const { requestStop } = await import('./loop-2SITCQ6H.js');
|
|
5482
5483
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5483
|
-
const { runnerImageVersion } = await import('./image-tag-
|
|
5484
|
+
const { runnerImageVersion } = await import('./image-tag-ADSLWXBA.js');
|
|
5484
5485
|
await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
|
|
5485
5486
|
});
|
|
5486
5487
|
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) => {
|
|
5487
|
-
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-
|
|
5488
|
-
const { jobsDir, runnerDir } = await import('./paths-
|
|
5489
|
-
const { listJobFiles, runnerProcessState } = await import('./loop-
|
|
5490
|
-
const { renderStatus } = await import('./status-
|
|
5491
|
-
const { readHousekeepingRecord } = await import('./record-
|
|
5488
|
+
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-LZSFW2O3.js');
|
|
5489
|
+
const { jobsDir, runnerDir } = await import('./paths-7HVTDE6J.js');
|
|
5490
|
+
const { listJobFiles, runnerProcessState } = await import('./loop-2SITCQ6H.js');
|
|
5491
|
+
const { renderStatus } = await import('./status-VBQJMFEX.js');
|
|
5492
|
+
const { readHousekeepingRecord } = await import('./record-PPZEXAVA.js');
|
|
5492
5493
|
const path2 = await import('path');
|
|
5493
5494
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5494
5495
|
const all = listJobFiles(configPath);
|
|
5495
5496
|
const housekeeping = readHousekeepingRecord(runnerDir(configPath));
|
|
5496
|
-
const { readPendingUpdate } = await import('./pending-
|
|
5497
|
+
const { readPendingUpdate } = await import('./pending-5HZACM2V.js');
|
|
5497
5498
|
const pendingUpdate = readPendingUpdate(runnerDir(configPath));
|
|
5498
|
-
const { readImageStatus } = await import('./image-tag-
|
|
5499
|
+
const { readImageStatus } = await import('./image-tag-ADSLWXBA.js');
|
|
5499
5500
|
const image = readImageStatus(runnerDir(configPath));
|
|
5500
5501
|
let host = "unknown";
|
|
5501
5502
|
let concurrency = 1;
|
|
@@ -5509,7 +5510,7 @@ Next:
|
|
|
5509
5510
|
const service = await (async () => {
|
|
5510
5511
|
if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
|
|
5511
5512
|
const { inspectService, realInspectProbes } = await import('./inspect-DNLXTXLA.js');
|
|
5512
|
-
const { DEFAULT_UNIT_NAME } = await import('./install-
|
|
5513
|
+
const { DEFAULT_UNIT_NAME } = await import('./install-GQUCHIGE.js');
|
|
5513
5514
|
const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
|
|
5514
5515
|
return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
|
|
5515
5516
|
})();
|
|
@@ -5546,9 +5547,9 @@ Next:
|
|
|
5546
5547
|
);
|
|
5547
5548
|
});
|
|
5548
5549
|
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) => {
|
|
5549
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5550
|
-
const { listJobFiles } = await import('./loop-
|
|
5551
|
-
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-
|
|
5550
|
+
const { defaultRunnerConfigPath } = await import('./config-LZSFW2O3.js');
|
|
5551
|
+
const { listJobFiles } = await import('./loop-2SITCQ6H.js');
|
|
5552
|
+
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-HI46FO6Z.js');
|
|
5552
5553
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5553
5554
|
const item = parseTrackerNumber(itemArg);
|
|
5554
5555
|
if (item === void 0) {
|
|
@@ -5779,7 +5780,7 @@ caller from the bearer token, the gateway answers 401 without that header.
|
|
|
5779
5780
|
"after",
|
|
5780
5781
|
"\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"
|
|
5781
5782
|
).action(async (opts) => {
|
|
5782
|
-
const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-
|
|
5783
|
+
const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-7ABBV2QE.js');
|
|
5783
5784
|
try {
|
|
5784
5785
|
await runMcpServe({ url: opts.url, appId: opts.appId });
|
|
5785
5786
|
} catch (err) {
|
|
@@ -5788,7 +5789,30 @@ caller from the bearer token, the gateway answers 401 without that header.
|
|
|
5788
5789
|
});
|
|
5789
5790
|
}
|
|
5790
5791
|
function registerContextCommands(program2) {
|
|
5791
|
-
const contextCmd = program2.command("context").description("Compile agent context");
|
|
5792
|
+
const contextCmd = program2.command("context").description("Compile agent context, and show what a repository's builds receive");
|
|
5793
|
+
contextCmd.command("show").description("Print the instructions and skills that a repository's builds receive").option("--repo <owner/name>", "repository to show (default: the checkout's own)").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").addHelpText(
|
|
5794
|
+
"after",
|
|
5795
|
+
`
|
|
5796
|
+
${cliInvocation()} context show
|
|
5797
|
+
${cliInvocation()} context show --repo acme/app --json
|
|
5798
|
+
|
|
5799
|
+
Prints the repository that governs the repository, or that it governs itself, the commit a build
|
|
5800
|
+
would get, the instruction files and the names of the skills. It warns when the skills include
|
|
5801
|
+
no \`build\`. It needs the context-read permission: a login or a factory key with it is enough.
|
|
5802
|
+
`
|
|
5803
|
+
).action(async (opts) => {
|
|
5804
|
+
const { runContextShow, ContextShowError } = await import('./context-show-cmd-3EPJ7CJC.js');
|
|
5805
|
+
try {
|
|
5806
|
+
const result = await runContextShow({ repo: opts.repo, json: opts.json, url: opts.url, apiKey: opts.apiKey, appId: opts.appId });
|
|
5807
|
+
process.stdout.write(result.output);
|
|
5808
|
+
} catch (err) {
|
|
5809
|
+
if (err instanceof ContextShowError) {
|
|
5810
|
+
fail(err.message);
|
|
5811
|
+
return;
|
|
5812
|
+
}
|
|
5813
|
+
throw err;
|
|
5814
|
+
}
|
|
5815
|
+
});
|
|
5792
5816
|
contextCmd.command("emit").description("Compile .outerlayer/ into each configured target tool's native files").option("--check", "compare against disk, write nothing, exit 1 on drift (CI mode)").option("--dir <path>", "repo root to read from (default: cwd)").option("--json", "machine-readable JSON output").addHelpText(
|
|
5793
5817
|
"after",
|
|
5794
5818
|
'\nTargets come from .outerlayer/config.json only; there is no --target flag.\nMissing or empty config: {"targets": [...]}, e.g. {"targets": ["claude-code"]}.\nKnown targets: claude-code, cursor, codex, copilot, factory.\n\nThe maintained skills (outerlayer-evidence, outerlayer-amend, outerlayer-findings,\nouterlayer-cli, outerlayer-build) follow this CLI: emit rewrites one that differs from its bundle, and --check\nreports it as drift. A copy under an earlier name (amend, emitting-evidence,\nreporting-findings, outerlayer) is deleted, and --check reports it as retired.\nTemplates (spec, writing-specs, writing-tests, build) are never rewritten or reported.\n\nOrphan detection (--check) only covers header-carrying outputs: every markdown\ntarget file gets a generated-by comment, but .mcp.json and .cursor/mcp.json are\nJSON with no comment syntax, so they can never be flagged as orphaned; missing\nand content drift still apply to them.\n'
|