@outerlayer/cli 0.29.0 → 0.30.1

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.
Files changed (127) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +9 -1
  3. package/dist/{agent-setup-S3KI7TER.js → agent-setup-ZNYAXAWI.js} +14 -14
  4. package/dist/{artifact-link-cmd-LIJEXVN5.js → artifact-link-cmd-VY6OM7S5.js} +2 -2
  5. package/dist/{bridge-CP25XV3W.js → bridge-FI7OF2H3.js} +2 -2
  6. package/dist/{build-ZS4Y5MJU.js → build-PXRDWSN4.js} +4 -4
  7. package/dist/build-info.json +1 -1
  8. package/dist/{builder-FDUOMHY3.js → builder-UNVHUZL7.js} +6 -6
  9. package/dist/{check-5XB22HKS.js → check-BKONE55O.js} +41 -41
  10. package/dist/{chunk-NAHTO4XM.js → chunk-2ZMJFGOZ.js} +1 -1
  11. package/dist/{chunk-GG3WS4C5.js → chunk-3F7RC3UA.js} +3 -3
  12. package/dist/{chunk-SN3C57RV.js → chunk-3IDNLZPR.js} +5 -5
  13. package/dist/{chunk-HRWL7NSJ.js → chunk-3YLHIXLR.js} +7 -7
  14. package/dist/{chunk-3KMYWLMK.js → chunk-44CGGHJF.js} +1 -1
  15. package/dist/{chunk-IGEJUPDE.js → chunk-5HZDPOJI.js} +3 -3
  16. package/dist/{chunk-OD6WUNKZ.js → chunk-6CNNRO53.js} +3 -3
  17. package/dist/{chunk-BFA2LNJG.js → chunk-7YSR636F.js} +4 -4
  18. package/dist/{chunk-NX2G6PH6.js → chunk-AKKVPUGK.js} +1 -1
  19. package/dist/{chunk-F72ABZRD.js → chunk-AM3GMWQK.js} +1 -1
  20. package/dist/{emit-finding-cmd-XEX5XVVI.js → chunk-B5CQJBZ2.js} +5 -23
  21. package/dist/{chunk-D3D2CERC.js → chunk-B6OYEP3K.js} +5 -5
  22. package/dist/{chunk-MZJAIRXM.js → chunk-BCWVTWS7.js} +4 -4
  23. package/dist/{chunk-GI73HOI2.js → chunk-D3LS7E7U.js} +1 -1
  24. package/dist/{chunk-GJJDPZS2.js → chunk-DBELICD6.js} +7 -7
  25. package/dist/{chunk-A2E7MU2H.js → chunk-DBENBGVF.js} +18 -18
  26. package/dist/{chunk-6AG2XW5S.js → chunk-DBRB26R7.js} +7 -7
  27. package/dist/{chunk-H6DGJBXG.js → chunk-DLY22KHX.js} +5 -5
  28. package/dist/{chunk-LKN4J37L.js → chunk-FTGJ3DPV.js} +52 -2
  29. package/dist/{chunk-VY4YVFL5.js → chunk-G2RRBBOX.js} +1 -1
  30. package/dist/{chunk-42TFWHFF.js → chunk-HJUGOAM7.js} +1 -1
  31. package/dist/{chunk-6XQPCQBW.js → chunk-HSUUTD4E.js} +1 -1
  32. package/dist/{chunk-FA6XWYRH.js → chunk-I3WLYIIW.js} +7 -7
  33. package/dist/{chunk-SHVE5JZO.js → chunk-IRF2FKB5.js} +1 -1
  34. package/dist/{chunk-CU7TJL6S.js → chunk-IRTZYDZO.js} +1 -1
  35. package/dist/{chunk-M4QY7YZ5.js → chunk-ISKWFUEQ.js} +20 -20
  36. package/dist/{chunk-JL6VZHAJ.js → chunk-IWFYKNAO.js} +50 -1
  37. package/dist/{chunk-WEMNLTWB.js → chunk-JGOMMFNX.js} +7 -7
  38. package/dist/{chunk-23PFIW35.js → chunk-LJIFCG4G.js} +1 -1
  39. package/dist/{chunk-77YT7YC4.js → chunk-MBVSVQVH.js} +1 -1
  40. package/dist/{chunk-TZGQQY7Y.js → chunk-MBZTX4V2.js} +7 -7
  41. package/dist/{chunk-UPKFSNSU.js → chunk-PS3AHE6C.js} +5 -5
  42. package/dist/{chunk-427AVP6J.js → chunk-QDDPVBIS.js} +2 -2
  43. package/dist/{chunk-MO2NI6W6.js → chunk-QQJGL7LG.js} +12 -12
  44. package/dist/{chunk-MX3PPJNS.js → chunk-QWJBTFAF.js} +1 -1
  45. package/dist/{chunk-IG45QISA.js → chunk-RJDJFRRY.js} +2 -2
  46. package/dist/{chunk-PGA5BVHQ.js → chunk-SJ4DX2AD.js} +3 -3
  47. package/dist/{chunk-PAHZQQB3.js → chunk-SOWXLIDN.js} +1 -1
  48. package/dist/{chunk-VT3BKV5D.js → chunk-TGUWHA27.js} +3 -3
  49. package/dist/{chunk-YSH4KCUJ.js → chunk-TKJISBV6.js} +1 -1
  50. package/dist/{chunk-2KOXAMMB.js → chunk-TKX23NFV.js} +12 -12
  51. package/dist/{chunk-KBIJZAH4.js → chunk-TN2XMMD7.js} +1 -1
  52. package/dist/{chunk-V47KJGNE.js → chunk-U5DC57AF.js} +3 -3
  53. package/dist/{chunk-S2Q65ZOT.js → chunk-UAFMC3PL.js} +1 -1
  54. package/dist/{chunk-FUGRIAG7.js → chunk-V6IYYQU3.js} +2 -2
  55. package/dist/{chunk-OKAJSYZ2.js → chunk-VL3CF4DZ.js} +1 -1
  56. package/dist/{chunk-C7F6U2YZ.js → chunk-WHCDULC4.js} +5 -2
  57. package/dist/{chunk-GJOF6357.js → chunk-XB7TRWI2.js} +4 -4
  58. package/dist/{chunk-2YLKMVFV.js → chunk-XRRSFHKV.js} +2 -2
  59. package/dist/{chunk-25Z6SBMQ.js → chunk-XTKH5VAC.js} +2 -2
  60. package/dist/{chunk-7H7RUQCZ.js → chunk-YVY3IVYV.js} +3 -3
  61. package/dist/{chunk-PP7C7JQO.js → chunk-ZNMVBHGJ.js} +3 -3
  62. package/dist/{chunk-DXI6A6JN.js → chunk-ZUOPFE22.js} +1 -1
  63. package/dist/{claude-launcher-SHIQTBS6.js → claude-launcher-ZDZQXW76.js} +5 -5
  64. package/dist/{cli-EN2WGVM6.js → cli-6NI7WJFP.js} +182 -120
  65. package/dist/{command-2VFWA2RF.js → command-EFYTEHPF.js} +30 -30
  66. package/dist/{config-HJQ4YE57.js → config-VM6GKCCE.js} +2 -2
  67. package/dist/{connect-cmd-T6IAT5FT.js → connect-cmd-U2DY4OZU.js} +12 -12
  68. package/dist/{container-start-C5ZCXXMF.js → container-start-C3CGPEXA.js} +32 -31
  69. package/dist/{context-cleanup-MV3X6NSF.js → context-cleanup-D5EGQHQV.js} +3 -3
  70. package/dist/{control-plane-launch-5FZ6LJOC.js → control-plane-launch-2AC4BTWL.js} +10 -10
  71. package/dist/{dist-H5IYGH3T.js → dist-IDP7Q53A.js} +2 -2
  72. package/dist/{docker-RFN6UWTT.js → docker-K442NGCS.js} +6 -6
  73. package/dist/{doctor-VXDBXKSL.js → doctor-RGTHY56D.js} +32 -32
  74. package/dist/{emit-artifact-cmd-M52RLUBU.js → emit-artifact-cmd-IK7GAS7V.js} +16 -16
  75. package/dist/{emit-cmd-HTNETHAE.js → emit-cmd-PSD7AAKJ.js} +6 -6
  76. package/dist/{emit-criteria-cmd-APDCA6FK.js → emit-criteria-cmd-TGBRMX3P.js} +13 -13
  77. package/dist/emit-finding-cmd-KXCNLJLK.js +34 -0
  78. package/dist/{emit-result-cmd-HFC3WDWB.js → emit-result-cmd-WJBLCVDL.js} +16 -16
  79. package/dist/{emit-step-cmd-LTRPF2YX.js → emit-step-cmd-OYX5X65A.js} +14 -14
  80. package/dist/{exec-client-GHFNXOY6.js → exec-client-RMGGSTGR.js} +3 -3
  81. package/dist/findings-cmd-HFDOB6AC.js +135 -0
  82. package/dist/{fleet-readiness-SJA7NFR2.js → fleet-readiness-5S2GCWZE.js} +12 -12
  83. package/dist/{governing-source-PBYOKKAJ.js → governing-source-LVTBDQIM.js} +17 -17
  84. package/dist/{guest-init-MQRIALWR.js → guest-init-O7INUZWE.js} +4 -4
  85. package/dist/{hook-fast-JKYCVO4R.js → hook-fast-A2N3PSXI.js} +1 -1
  86. package/dist/{host-key-DBYH3RTZ.js → host-key-HJ66C6MD.js} +3 -3
  87. package/dist/{image-tag-XNODAHAW.js → image-tag-LLXOFXKP.js} +3 -3
  88. package/dist/index.js +4 -4
  89. package/dist/{init-ZUMSDYMW.js → init-NO5PJEPZ.js} +29 -29
  90. package/dist/{init-JJPJ2XLL.js → init-VY6J7MAY.js} +29 -29
  91. package/dist/{init-cmd-342RW7DZ.js → init-cmd-FW67JGI7.js} +22 -22
  92. package/dist/{init-update-4MCW5W72.js → init-update-RN2PZ3MT.js} +21 -21
  93. package/dist/{install-GODA5G7U.js → install-GZ27NW6U.js} +4 -4
  94. package/dist/{install-cmd-YNQ5DCZP.js → install-cmd-26OY23ZZ.js} +5 -5
  95. package/dist/{layout-DBAL2HTQ.js → layout-3ISIED6A.js} +4 -4
  96. package/dist/{login-browser-B6E4GNIF.js → login-browser-NTVVDJF7.js} +2 -2
  97. package/dist/{logs-KAG3MAUO.js → logs-7O3ELY35.js} +2 -2
  98. package/dist/{loop-ZXJFOVCS.js → loop-SY636F7D.js} +41 -41
  99. package/dist/{machine-F3TVUBZY.js → machine-IJ2QP3FO.js} +25 -25
  100. package/dist/{machine-skills-6MLTVBCF.js → machine-skills-I4DB2CP3.js} +4 -4
  101. package/dist/{mcp-serve-cmd-SGISNCB3.js → mcp-serve-cmd-AT7G6J5V.js} +4 -4
  102. package/dist/{paths-PG4JNLZG.js → paths-32THAYBB.js} +2 -2
  103. package/dist/{pending-GG252ERT.js → pending-6CMYQHFL.js} +3 -3
  104. package/dist/{pidfile-7SYDMT2O.js → pidfile-3BH6WPOA.js} +3 -3
  105. package/dist/{record-ZGUOOYJH.js → record-WHPJCC6Y.js} +3 -3
  106. package/dist/{runner-env-WI6LKWIU.js → runner-env-6Q45P3IE.js} +5 -5
  107. package/dist/{runner-identity-JIC54L5Q.js → runner-identity-KH7HADNF.js} +6 -6
  108. package/dist/{runner-key-RXCKMQRL.js → runner-key-L6B5CNDG.js} +29 -29
  109. package/dist/{session-sender-JAAMA5E6.js → session-sender-N4DOGRTN.js} +17 -17
  110. package/dist/{spec-cmd-BUFLEQ6L.js → spec-cmd-7KOT4IQO.js} +14 -14
  111. package/dist/{starter-pack-I5W5JAYT.js → starter-pack-2WFNRGFA.js} +5 -5
  112. package/dist/{status-E7V365CD.js → status-LOQ2RHWX.js} +32 -32
  113. package/dist/{sync-cmd-U5FUBXJY.js → sync-cmd-E5VRZ5DK.js} +16 -16
  114. package/dist/{watch-AOPZJOUM.js → watch-P6XAYDM2.js} +16 -16
  115. package/dist/{work-claim-cmd-Z2UZD37I.js → work-claim-cmd-7YQ5CJ3R.js} +17 -17
  116. package/dist/{work-cmd-XLVQDNTC.js → work-cmd-RRHDQDOX.js} +14 -14
  117. package/dist/{work-comment-cmd-THLQUSMH.js → work-comment-cmd-XYAPMQYC.js} +14 -14
  118. package/dist/{work-logs-cmd-2NFG6ZY6.js → work-logs-cmd-TTLUEWVX.js} +14 -14
  119. package/dist/{work-open-pr-cmd-J22A2YCD.js → work-open-pr-cmd-A63YGIBW.js} +15 -15
  120. package/dist/{work-pr-cmd-SYAENEH4.js → work-pr-cmd-HOS5ZHJI.js} +14 -14
  121. package/dist/{work-stop-cmd-FP453YCB.js → work-stop-cmd-7KIKIZPO.js} +14 -14
  122. package/package.json +3 -3
  123. package/skill-pack/maintained/outerlayer-build/SKILL.md +4 -1
  124. package/skill-pack/maintained/outerlayer-findings/SKILL.md +14 -10
  125. package/skill-pack/shipped.json +2 -0
  126. package/skill-pack/template/build/SKILL.md +3 -1
  127. package/skill-pack/template/spec/SKILL.md +6 -4
@@ -1,44 +1,44 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-2KOXAMMB.js';
4
- import './chunk-MZJAIRXM.js';
5
- import './chunk-TZGQQY7Y.js';
3
+ import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-TKX23NFV.js';
4
+ import './chunk-BCWVTWS7.js';
5
+ import './chunk-MBZTX4V2.js';
6
6
  import './chunk-KT4CN6OU.js';
7
- import './chunk-25Z6SBMQ.js';
8
- import { verifiedTrackerNames, TRACKERS } from './chunk-6AG2XW5S.js';
9
- import './chunk-PGA5BVHQ.js';
10
- import './chunk-HRWL7NSJ.js';
11
- import './chunk-6XQPCQBW.js';
12
- import './chunk-LKN4J37L.js';
13
- import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-427AVP6J.js';
14
- import './chunk-VY4YVFL5.js';
7
+ import './chunk-XTKH5VAC.js';
8
+ import { verifiedTrackerNames, TRACKERS } from './chunk-DBRB26R7.js';
9
+ import './chunk-SJ4DX2AD.js';
10
+ import './chunk-3YLHIXLR.js';
11
+ import './chunk-HSUUTD4E.js';
12
+ import './chunk-FTGJ3DPV.js';
13
+ import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-QDDPVBIS.js';
14
+ import './chunk-G2RRBBOX.js';
15
15
  import './chunk-G2JWZDFA.js';
16
16
  import { C, warnDeprecated, API_KEY_FLAG_DEPRECATION, NO_COLOR_FLAG, stripNoColor } from './chunk-ANPNT6PM.js';
17
- import './chunk-FUGRIAG7.js';
18
- import './chunk-F72ABZRD.js';
17
+ import './chunk-V6IYYQU3.js';
18
+ import './chunk-AM3GMWQK.js';
19
19
  import './chunk-PJDQPF5N.js';
20
- import './chunk-SHVE5JZO.js';
21
- import './chunk-PAHZQQB3.js';
22
- import './chunk-C7F6U2YZ.js';
23
- import { hookFiredMarkerPath, installedCliDistDir } from './chunk-IG45QISA.js';
20
+ import './chunk-IRF2FKB5.js';
21
+ import './chunk-SOWXLIDN.js';
22
+ import './chunk-WHCDULC4.js';
23
+ import { hookFiredMarkerPath, installedCliDistDir } from './chunk-RJDJFRRY.js';
24
24
  import './chunk-ZJSNLVCE.js';
25
25
  import './chunk-I7RZHMXW.js';
26
26
  import './chunk-BKO6JEZI.js';
27
27
  import './chunk-HCVLP7XA.js';
28
28
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
29
- import './chunk-S2Q65ZOT.js';
30
- import './chunk-NX2G6PH6.js';
29
+ import './chunk-UAFMC3PL.js';
30
+ import './chunk-AKKVPUGK.js';
31
31
  import './chunk-5BHIBJDA.js';
32
32
  import './chunk-CDDED64E.js';
33
33
  import { resolveVersion, resolvePackageVersion } from './chunk-RA3O54FC.js';
34
34
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
35
35
  import { cliInvocation, packageRunnerOf } from './chunk-CRB3POP4.js';
36
36
  import { settingsPath, readSettings, SettingsParseError, listHookCandidates, PORTABLE_BIN, wrapHooks, writeSettings, unwrapHooks, REGISTERED_EVENTS, removeHooks, removeStatusline, cliBinResolvable, mergeHooks, repointWrappedHooks, AUTO_WRAP_EVENTS, mergeStatusline } from './chunk-URIZRCRY.js';
37
- import './chunk-42TFWHFF.js';
37
+ import './chunk-HJUGOAM7.js';
38
38
  import { cloneIsGoverned } from './chunk-YQR6E6OV.js';
39
39
  import { removeJournalHooks, removePreCommitGuardHook } from './chunk-TUSYOL2O.js';
40
- import './chunk-DXI6A6JN.js';
41
- import './chunk-JL6VZHAJ.js';
40
+ import './chunk-ZUOPFE22.js';
41
+ import './chunk-IWFYKNAO.js';
42
42
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
43
43
  import './chunk-XD4ZCMA4.js';
44
44
  import './chunk-MESOOLF4.js';
@@ -3658,14 +3658,14 @@ function apiKeyOption() {
3658
3658
  return new Option("--api-key <key>", `deprecated: use \`${cliInvocation()} login\` or OUTERLAYER_API_KEY`).hideHelp();
3659
3659
  }
3660
3660
  async function installStarterPackInRepo() {
3661
- const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-I5W5JAYT.js');
3661
+ const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-2WFNRGFA.js');
3662
3662
  const cwd = process.cwd();
3663
3663
  let repoRoot = cwd;
3664
3664
  try {
3665
3665
  repoRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim() || cwd;
3666
3666
  } catch {
3667
3667
  }
3668
- const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-DBAL2HTQ.js');
3668
+ const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-3ISIED6A.js');
3669
3669
  const fresh = !isAgentsMdLayout(repoRoot) && !existsSync(join(repoRoot, ".outerlayer"));
3670
3670
  const result = installStarterPack({ repoRoot, base: fresh ? ".agents/skills" : skillsBaseFor(repoRoot) });
3671
3671
  if (fresh) declareAgentsMdLayout(repoRoot);
@@ -3791,7 +3791,7 @@ ${starter.output}`),
3791
3791
  }
3792
3792
  }
3793
3793
  async function installMachineSkillsForSetup() {
3794
- const { setupMachineSkills } = await import('./machine-skills-6MLTVBCF.js');
3794
+ const { setupMachineSkills } = await import('./machine-skills-I4DB2CP3.js');
3795
3795
  const result = setupMachineSkills(homeFromEnv());
3796
3796
  for (const failure of result.failures) process.stderr.write(`${C.yellow}!${C.reset} Could not write a maintained skill: ${failure}
3797
3797
  `);
@@ -3799,8 +3799,8 @@ async function installMachineSkillsForSetup() {
3799
3799
  ` : "";
3800
3800
  }
3801
3801
  async function realConnectDepsForCwd() {
3802
- const { realConnectDeps } = await import('./connect-cmd-T6IAT5FT.js');
3803
- const { resolveRepoIdentity } = await import('./dist-H5IYGH3T.js');
3802
+ const { realConnectDeps } = await import('./connect-cmd-U2DY4OZU.js');
3803
+ const { resolveRepoIdentity } = await import('./dist-IDP7Q53A.js');
3804
3804
  return {
3805
3805
  ...realConnectDeps(),
3806
3806
  home: homeFromEnv(),
@@ -3817,7 +3817,7 @@ function buildProgram(argv = process.argv) {
3817
3817
  const program2 = new Command();
3818
3818
  program2.name(cliInvocation()).description("OuterLayer \u2014 see what your coding agents actually do").enablePositionalOptions().version(resolveVersion()).hook("preAction", async (_root, command) => {
3819
3819
  if (command.opts().apiKey !== void 0) warnDeprecated(API_KEY_FLAG_DEPRECATION);
3820
- const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-6MLTVBCF.js');
3820
+ const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-I4DB2CP3.js');
3821
3821
  const names = [];
3822
3822
  for (let at = command; at?.parent; at = at.parent) names.push(at.name());
3823
3823
  if (!machineRefreshSkipped(names, command._hidden === true, argv)) refreshMachineSkills(homeFromEnv());
@@ -3874,8 +3874,8 @@ build, ../outerlayer-build/SKILL.md becomes ~/.agents/skills/outerlayer-build/SK
3874
3874
  what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocation() + " doctor` reports the same\nstates under Starter files.\n"
3875
3875
  ).action(async (opts) => {
3876
3876
  if (opts.update || opts.dryRun) {
3877
- const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-4MCW5W72.js');
3878
- const { fleetReadiness } = await import('./fleet-readiness-SJA7NFR2.js');
3877
+ const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-RN2PZ3MT.js');
3878
+ const { fleetReadiness } = await import('./fleet-readiness-5S2GCWZE.js');
3879
3879
  const problem = updateFlagProblem(opts);
3880
3880
  if (problem !== void 0) {
3881
3881
  fail(problem);
@@ -3892,7 +3892,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3892
3892
  }
3893
3893
  let starterTemplate;
3894
3894
  if (opts.template !== void 0) {
3895
- const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-I5W5JAYT.js');
3895
+ const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-2WFNRGFA.js');
3896
3896
  try {
3897
3897
  assertKnownTemplate(opts.template);
3898
3898
  } catch (err) {
@@ -3926,13 +3926,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3926
3926
  if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
3927
3927
  `);
3928
3928
  }
3929
- const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-342RW7DZ.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
3929
+ const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-FW67JGI7.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
3930
3930
  if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
3931
3931
  else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
3932
3932
  return;
3933
3933
  }
3934
3934
  await installMachineSkillsForSetup();
3935
- const { runInitCommand } = await import('./init-cmd-342RW7DZ.js');
3935
+ const { runInitCommand } = await import('./init-cmd-FW67JGI7.js');
3936
3936
  const code = await runInitCommand(
3937
3937
  { json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
3938
3938
  {
@@ -3944,7 +3944,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3944
3944
  return { ok, text, detail };
3945
3945
  },
3946
3946
  runAgentSetup: async () => {
3947
- const { runAgentSetup } = await import('./agent-setup-S3KI7TER.js');
3947
+ const { runAgentSetup } = await import('./agent-setup-ZNYAXAWI.js');
3948
3948
  return runAgentSetup({ cwd: process.cwd(), skillsLink: opts.skillsLink !== false });
3949
3949
  },
3950
3950
  runDoctorChecks: gatherDoctorChecks,
@@ -3953,7 +3953,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3953
3953
  shellPath: process.env.SHELL,
3954
3954
  interactive: Boolean(process.stdin.isTTY && process.stderr.isTTY) && opts.json !== true,
3955
3955
  ask: async () => {
3956
- const { promptOnTerminal } = await import('./connect-cmd-T6IAT5FT.js');
3956
+ const { promptOnTerminal } = await import('./connect-cmd-U2DY4OZU.js');
3957
3957
  const answer = await promptOnTerminal({
3958
3958
  message: `Should plain claude start Claude Code through ${cliInvocation()} claude? That is how a session in a governed repository gets its control plane. It adds one block to your zsh or bash startup file.`,
3959
3959
  options: [
@@ -3992,7 +3992,7 @@ linked (true, false, or null when it could not be checked) and, when false,
3992
3992
  linkUrl.
3993
3993
  `
3994
3994
  ).action(async (opts) => {
3995
- const { runConnectCommand } = await import('./connect-cmd-T6IAT5FT.js');
3995
+ const { runConnectCommand } = await import('./connect-cmd-U2DY4OZU.js');
3996
3996
  const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
3997
3997
  stdout: process.stdout,
3998
3998
  stderr: process.stderr
@@ -4031,7 +4031,7 @@ Every later command reads the saved file, so none of them needs a key on
4031
4031
  its command line. A saved key is checked for real on the first \`sync\`.
4032
4032
  `
4033
4033
  ).action(async (opts) => {
4034
- const { runLoginCommand, realLoginDeps } = await import('./login-browser-B6E4GNIF.js');
4034
+ const { runLoginCommand, realLoginDeps } = await import('./login-browser-NTVVDJF7.js');
4035
4035
  const code = await runLoginCommand(
4036
4036
  {
4037
4037
  browser: opts.browser !== false,
@@ -4064,13 +4064,13 @@ code is 1: revoke the token on /profile/security.
4064
4064
  "\nIncremental: only sessions newer than the last checkpoint ship. The tier\nis applied on this machine before anything leaves it; `--dry-run` prints\nexactly what would. The hook-triggered background sync runs `--quiet`.\nExit 2 means the server rejected at least one session.\n"
4065
4065
  ).action(async (opts) => {
4066
4066
  if (opts.link !== void 0) {
4067
- const { lookupArtifactLink } = await import('./artifact-link-cmd-LIJEXVN5.js');
4067
+ const { lookupArtifactLink } = await import('./artifact-link-cmd-VY6OM7S5.js');
4068
4068
  const found = lookupArtifactLink(opts.link);
4069
4069
  if (found.ok) process.stdout.write(found.url + "\n");
4070
4070
  else fail(found.reason);
4071
4071
  return;
4072
4072
  }
4073
- const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-U5FUBXJY.js');
4073
+ const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-E5VRZ5DK.js');
4074
4074
  try {
4075
4075
  const result = await runSync({
4076
4076
  url: opts.url,
@@ -4101,7 +4101,7 @@ code is 1: revoke the token on /profile/security.
4101
4101
  if (invokedCommandToken(argv) === "watch") {
4102
4102
  warnDeprecated(`\`${cliInvocation()} watch\` is now \`${cliInvocation()} daemon\`; the old name will be removed in a future release.`);
4103
4103
  }
4104
- const { runWatch } = await import('./watch-AOPZJOUM.js');
4104
+ const { runWatch } = await import('./watch-P6XAYDM2.js');
4105
4105
  await runWatch({ once: opts.once });
4106
4106
  });
4107
4107
  program2.command("hook <event>", { hidden: true }).description("capture-hook fast path, installed by `init`").action(() => {
@@ -4162,7 +4162,7 @@ code is 1: revoke the token on /profile/security.
4162
4162
  }
4163
4163
  });
4164
4164
  program2.command("vm-exec", { hidden: true }).description("run a command in a microVM build's guest through its exec agent").requiredOption("--socket <path>", "the Unix socket Firecracker serves the build's vsock device on").option("--user <user>", "the user to run as", "").option("--cwd <dir>", "the working directory", "/").option("--env <NAME=value>", "an environment value the command line carries; repeatable", (value, previous) => [...previous, value], []).option("--pass <NAME>", "an environment variable whose value is read from this process; repeatable", (value, previous) => [...previous, value], []).argument("<argv...>", "the command and its arguments").action(async (argv2, opts) => {
4165
- const { runVmExec } = await import('./exec-client-GHFNXOY6.js');
4165
+ const { runVmExec } = await import('./exec-client-RMGGSTGR.js');
4166
4166
  const env = {};
4167
4167
  for (const entry of opts.env) {
4168
4168
  const eq = entry.indexOf("=");
@@ -4191,7 +4191,7 @@ code is 1: revoke the token on /profile/security.
4191
4191
  process.exitCode = await runBuildCommand({ dir: opts.dir, argv: command });
4192
4192
  });
4193
4193
  program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
4194
- const { runSessionSender } = await import('./session-sender-JAAMA5E6.js');
4194
+ const { runSessionSender } = await import('./session-sender-N4DOGRTN.js');
4195
4195
  try {
4196
4196
  await runSessionSender();
4197
4197
  } catch (err) {
@@ -4199,7 +4199,7 @@ code is 1: revoke the token on /profile/security.
4199
4199
  }
4200
4200
  });
4201
4201
  program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
4202
- const { realGuestHost, runGuestInit } = await import('./guest-init-MQRIALWR.js');
4202
+ const { realGuestHost, runGuestInit } = await import('./guest-init-O7INUZWE.js');
4203
4203
  const { readFileSync: readFileSync3 } = await import('fs');
4204
4204
  try {
4205
4205
  runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
@@ -4208,7 +4208,7 @@ code is 1: revoke the token on /profile/security.
4208
4208
  }
4209
4209
  });
4210
4210
  program2.command("vm-forward", { hidden: true }).description("pipe a guest port to another; vm-init runs it").requiredOption("--listen <host:port>", "the address to listen on").requiredOption("--to <host:port>", "the address to pipe each connection to").action(async (opts) => {
4211
- const { startBridgeForward } = await import('./bridge-CP25XV3W.js');
4211
+ const { startBridgeForward } = await import('./bridge-FI7OF2H3.js');
4212
4212
  try {
4213
4213
  await startBridgeForward(opts);
4214
4214
  } catch (err) {
@@ -4234,7 +4234,7 @@ async function runCli(processArgv) {
4234
4234
  await buildProgram(argv).parseAsync(argv);
4235
4235
  }
4236
4236
  async function compileContext(opts) {
4237
- const { runEmit, EmitError } = await import('./emit-cmd-HTNETHAE.js');
4237
+ const { runEmit, EmitError } = await import('./emit-cmd-PSD7AAKJ.js');
4238
4238
  try {
4239
4239
  const result = runEmit({ cwd: opts.dir, check: opts.check, json: opts.json });
4240
4240
  if (result.exitCode !== 0) process.exitCode = result.exitCode;
@@ -4286,7 +4286,7 @@ Compiling .outerlayer/ moved to \`${cliInvocation()} context emit\`.
4286
4286
  await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
4287
4287
  return;
4288
4288
  }
4289
- const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-HFC3WDWB.js');
4289
+ const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-WJBLCVDL.js');
4290
4290
  try {
4291
4291
  const result = await runEmitResult({
4292
4292
  name,
@@ -4337,7 +4337,7 @@ everywhere, bytes and deep link untouched; a still-queued one is cancelled
4337
4337
  locally so it never uploads. One correction can retire several duplicates.
4338
4338
  `
4339
4339
  ).action(async (file, opts) => {
4340
- const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-M52RLUBU.js');
4340
+ const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-IK7GAS7V.js');
4341
4341
  let pr;
4342
4342
  if (opts.pr !== void 0) {
4343
4343
  pr = parseTrackerNumber(opts.pr);
@@ -4396,7 +4396,7 @@ recent events with their ids. --find <text> searches all of them.
4396
4396
  item that session was launched for is used automatically.
4397
4397
  `
4398
4398
  ).action(async (opts) => {
4399
- const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-XEX5XVVI.js');
4399
+ const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-KXCNLJLK.js');
4400
4400
  try {
4401
4401
  refuseRemovedFindingFlags(opts);
4402
4402
  const result = await runEmitFinding({
@@ -4463,7 +4463,7 @@ the whole batch. "untimed": true records one with no time on purpose.
4463
4463
  that session was launched for is used automatically.
4464
4464
  `
4465
4465
  ).action(async (file, opts) => {
4466
- const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-XEX5XVVI.js');
4466
+ const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-KXCNLJLK.js');
4467
4467
  try {
4468
4468
  const result = await runEmitFindings({
4469
4469
  file,
@@ -4498,7 +4498,7 @@ command, the command exits 0, and \`sync\` sends it later. If the gateway refuse
4498
4498
  the step, the command prints why and exits 1.
4499
4499
  `
4500
4500
  ).action(async (name, opts) => {
4501
- const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-LTRPF2YX.js');
4501
+ const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-OYX5X65A.js');
4502
4502
  try {
4503
4503
  await runEmitStep({
4504
4504
  name,
@@ -4541,7 +4541,7 @@ of the item, and a (proof: <kind>) annotation names its proof.
4541
4541
  ${cliInvocation()} emit criteria acceptance/412-login.md --item 412
4542
4542
  `
4543
4543
  ).action(async (file, opts) => {
4544
- const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-APDCA6FK.js');
4544
+ const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-TGBRMX3P.js');
4545
4545
  try {
4546
4546
  const result = await runEmitCriteria({
4547
4547
  file,
@@ -4565,9 +4565,9 @@ function registerSpecCommands(program2) {
4565
4565
  const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
4566
4566
  const credentialOptions = (command) => command.option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)");
4567
4567
  const run = async (action) => {
4568
- const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4568
+ const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4569
4569
  try {
4570
- await action(await import('./spec-cmd-BUFLEQ6L.js'));
4570
+ await action(await import('./spec-cmd-7KOT4IQO.js'));
4571
4571
  } catch (err) {
4572
4572
  if (err instanceof WorkCommandError) {
4573
4573
  fail(err.message);
@@ -4590,6 +4590,68 @@ function registerSpecCommands(program2) {
4590
4590
  ).action((key, opts) => run((spec) => spec.runSpecEdit({ ...opts, key })));
4591
4591
  }
4592
4592
  function registerWorkCommands(program2) {
4593
+ const findingsCmd = program2.command("findings").description("Read the problems a fix item covers and record fix results");
4594
+ findingsCmd.command("show").description("List the problems this work item covers, with their reports and results").option("--item <number>", "work item to read, by its number in this factory").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").addHelpText(
4595
+ "after",
4596
+ `
4597
+ ${cliInvocation()} findings show
4598
+ ${cliInvocation()} findings show --item 412
4599
+
4600
+ Prints each problem the item covers with its id, its reports and its result.
4601
+ --item names the work item; without it, inside a recorded session, the item that
4602
+ session was launched for is used.
4603
+ `
4604
+ ).action(async (opts) => {
4605
+ const { runFindingsShow, FindingsCommandError } = await import('./findings-cmd-HFDOB6AC.js');
4606
+ try {
4607
+ const result = await runFindingsShow({
4608
+ item: opts.item,
4609
+ json: opts.json,
4610
+ url: opts.url,
4611
+ apiKey: opts.apiKey,
4612
+ appId: opts.appId
4613
+ });
4614
+ if (result.exitCode !== 0) process.exitCode = result.exitCode;
4615
+ } catch (err) {
4616
+ if (err instanceof FindingsCommandError) {
4617
+ fail(err.message);
4618
+ return;
4619
+ }
4620
+ throw err;
4621
+ }
4622
+ });
4623
+ findingsCmd.command("result <problem>").description("Record whether the fix resolved one covered problem").option("--fixed", "the fix resolved the problem").option("--not-fixed", "the fix did not resolve the problem").option("--note <text>", "what you did, or why you could not fix the problem").option("--item <number>", "work item to record on, by its number in this factory").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").addHelpText(
4624
+ "after",
4625
+ `
4626
+ ${cliInvocation()} findings result 0b6f3e1a-1111-4222-8333-444455556666 --fixed --note "Fixed the hook path."
4627
+ ${cliInvocation()} findings result <problem id> --not-fixed --note "The cause is in another repository."
4628
+
4629
+ Give exactly one of --fixed and --not-fixed, and a --note. Run it again for the same
4630
+ problem to replace the earlier result. A problem the item does not cover is refused.
4631
+ `
4632
+ ).action(async (problem, opts) => {
4633
+ const { runFindingsResult, FindingsCommandError } = await import('./findings-cmd-HFDOB6AC.js');
4634
+ try {
4635
+ const result = await runFindingsResult({
4636
+ problem,
4637
+ fixed: opts.fixed,
4638
+ notFixed: opts.notFixed,
4639
+ note: opts.note,
4640
+ item: opts.item,
4641
+ json: opts.json,
4642
+ url: opts.url,
4643
+ apiKey: opts.apiKey,
4644
+ appId: opts.appId
4645
+ });
4646
+ if (result.exitCode !== 0) process.exitCode = result.exitCode;
4647
+ } catch (err) {
4648
+ if (err instanceof FindingsCommandError) {
4649
+ fail(err.message);
4650
+ return;
4651
+ }
4652
+ throw err;
4653
+ }
4654
+ });
4593
4655
  const workCmd = program2.command("work").description("Start, remove, or read what the factory is working on (the Work page)");
4594
4656
  workCmd.command("build").description("Start work on an item: a host builds it, or with --local you do").option("--issue <number>", "issue number, or a Linear/Jira key like ENG-123 (adds it to Work first)").option(TRACKER_OPTION_FLAG, "tracker for a keyed --issue \u2014 required if more than one is connected").option("--item <number>", "the item's own number inside this factory \u2014 must already exist").option("--local", "you build it in a session you start; no host takes it").option("--repo <owner/name>", "repository \u2014 the checkout's remote for a number, never guessed for a key").option("--note <text>", "a short note for people to read; the agent never sees it").option("--instructions <text>", "text the build's agent receives, up to 2000 characters; not with --local").option("--session-id <id>", "session id to record as-is, skipping detection").option("--retry <count>", "retries after a gateway answer worth trying again").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").addHelpText(
4595
4657
  "after",
@@ -4609,7 +4671,7 @@ takes it, and prints the line that starts your session on it. That
4609
4671
  session links itself and holds the item's lease while it works.
4610
4672
  `
4611
4673
  ).action(async (opts) => {
4612
- const { runWorkBuild, WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4674
+ const { runWorkBuild, WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4613
4675
  try {
4614
4676
  await runWorkBuild(opts);
4615
4677
  } catch (err) {
@@ -4632,7 +4694,7 @@ renews that session's own 20-minute lease, unless --no-lease or
4632
4694
  --ended is given, or another worker already holds a live one.
4633
4695
  `
4634
4696
  ).action(async (number, opts) => {
4635
- const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4697
+ const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4636
4698
  try {
4637
4699
  await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
4638
4700
  } catch (err) {
@@ -4656,8 +4718,8 @@ criterion's new proof; --ready hands the thread back to a person. At
4656
4718
  most one action flag may be given.
4657
4719
  `
4658
4720
  ).action(async (opts) => {
4659
- const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-THLQUSMH.js');
4660
- const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4721
+ const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-XYAPMQYC.js');
4722
+ const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4661
4723
  try {
4662
4724
  await runWorkComment(opts);
4663
4725
  } catch (err) {
@@ -4678,8 +4740,8 @@ criterion that carries proof or a comment, each with who is waiting
4678
4740
  on whom next.
4679
4741
  `
4680
4742
  ).action(async (opts) => {
4681
- const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-THLQUSMH.js');
4682
- const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4743
+ const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-XYAPMQYC.js');
4744
+ const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4683
4745
  try {
4684
4746
  await runWorkThreads(opts);
4685
4747
  } catch (err) {
@@ -4703,8 +4765,8 @@ still running, or that an older runner released, has no log and the
4703
4765
  command exits 1.
4704
4766
  `
4705
4767
  ).action(async (opts) => {
4706
- const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-2NFG6ZY6.js');
4707
- const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4768
+ const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-TTLUEWVX.js');
4769
+ const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4708
4770
  try {
4709
4771
  await runWorkLogs(opts);
4710
4772
  } catch (err) {
@@ -4727,8 +4789,8 @@ item is not built again until a new build request. Exits 1 when no host
4727
4789
  build is running for the item.
4728
4790
  `
4729
4791
  ).action(async (opts) => {
4730
- const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-FP453YCB.js');
4731
- const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4792
+ const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-7KIKIZPO.js');
4793
+ const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4732
4794
  try {
4733
4795
  await runWorkStop(opts);
4734
4796
  } catch (err) {
@@ -4749,7 +4811,7 @@ deletes anything \u2014 the item is removed from Work only once no
4749
4811
  live addition remains on it.
4750
4812
  `
4751
4813
  ).action(async (opts) => {
4752
- const { runWorkRemove, WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4814
+ const { runWorkRemove, WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4753
4815
  try {
4754
4816
  await runWorkRemove(opts);
4755
4817
  } catch (err) {
@@ -4761,7 +4823,7 @@ live addition remains on it.
4761
4823
  }
4762
4824
  });
4763
4825
  workCmd.command("status").description("Show one item's stage, gate ledger, and additions").option("--item <number>", "the item's number inside this factory").option("--issue <number>", "issue number, or a Linear/Jira key like ENG-123").option(TRACKER_OPTION_FLAG, "tracker for a keyed --issue, when both hold the key").option("--repo <owner/name>", "repository for an issue number (default: the checkout's remote)").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").action(async (opts) => {
4764
- const { runWorkStatus, WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4826
+ const { runWorkStatus, WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4765
4827
  try {
4766
4828
  await runWorkStatus(opts);
4767
4829
  } catch (err) {
@@ -4773,7 +4835,7 @@ live addition remains on it.
4773
4835
  }
4774
4836
  });
4775
4837
  workCmd.command("list").description("List live work items for this factory").option("--stage <spec|build|review>", "filter by stage").option("--section <attention|waiting|flowing>", "filter by Queue section").option("--repo <owner/name>", "repository (default: the current checkout's remote)").option("--unclaimed", "only items with no live lease").option("--claimed", "only items with a live lease, held by a host or a local session").option("--startable", "only items a host can start: a build request, no open PR, no live lease").option("--needs <amend>", "only items with a thread waiting on an agent").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").action(async (opts) => {
4776
- const { runWorkList, WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4838
+ const { runWorkList, WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4777
4839
  try {
4778
4840
  await runWorkList(opts);
4779
4841
  } catch (err) {
@@ -4794,7 +4856,7 @@ by a different key is refused; claiming again with the same key extends
4794
4856
  it. --host is a label only.
4795
4857
  `
4796
4858
  ).action(async (opts) => {
4797
- const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-Z2UZD37I.js');
4859
+ const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-7YQ5CJ3R.js');
4798
4860
  try {
4799
4861
  await runWorkClaim(opts);
4800
4862
  } catch (err) {
@@ -4814,7 +4876,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
4814
4876
  lease has expired, or a 403 if a different key holds it.
4815
4877
  `
4816
4878
  ).action(async (opts) => {
4817
- const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-Z2UZD37I.js');
4879
+ const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-7YQ5CJ3R.js');
4818
4880
  try {
4819
4881
  await runWorkRenew(opts);
4820
4882
  } catch (err) {
@@ -4846,7 +4908,7 @@ applies to a host's lease only. A later tool call in the session
4846
4908
  takes the lease again.
4847
4909
  `
4848
4910
  ).action(async (opts) => {
4849
- const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-Z2UZD37I.js');
4911
+ const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-7YQ5CJ3R.js');
4850
4912
  try {
4851
4913
  await runWorkRelease(opts);
4852
4914
  } catch (err) {
@@ -4873,7 +4935,7 @@ Idempotent: declaring the same pull request twice is a no-op.
4873
4935
  needs your own login; an agent session or a factory key is refused.
4874
4936
  `
4875
4937
  ).action(async (number, opts) => {
4876
- const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-SYAENEH4.js');
4938
+ const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-HOS5ZHJI.js');
4877
4939
  try {
4878
4940
  await runWorkPr({ ...opts, number });
4879
4941
  } catch (err) {
@@ -4898,8 +4960,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
4898
4960
  Run it again after a change to the title or description.
4899
4961
  `
4900
4962
  ).action(async (opts) => {
4901
- const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-J22A2YCD.js');
4902
- const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4963
+ const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-A63YGIBW.js');
4964
+ const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
4903
4965
  try {
4904
4966
  await runWorkOpenPr(opts);
4905
4967
  } catch (err) {
@@ -4915,9 +4977,9 @@ function registerRunnerCommands(program2) {
4915
4977
  const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
4916
4978
  const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
4917
4979
  runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
4918
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-HJQ4YE57.js');
4919
- const { start, RunnerStartError } = await import('./loop-ZXJFOVCS.js');
4920
- const { RunnerAlreadyRunningError } = await import('./pidfile-7SYDMT2O.js');
4980
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-VM6GKCCE.js');
4981
+ const { start, RunnerStartError } = await import('./loop-SY636F7D.js');
4982
+ const { RunnerAlreadyRunningError } = await import('./pidfile-3BH6WPOA.js');
4921
4983
  const configPath = opts.config ?? defaultRunnerConfigPath();
4922
4984
  try {
4923
4985
  const { realUpdateDeps } = await import('./real-deps-QX5YH7FG.js');
@@ -4932,12 +4994,12 @@ function registerRunnerCommands(program2) {
4932
4994
  });
4933
4995
  runnerCmd.command("container-start").description("Container entrypoint: write the config from variables, then run").addHelpText(
4934
4996
  "after",
4935
- "\nReads OUTERLAYER_URL, OUTERLAYER_APP_ID, OUTERLAYER_API_KEY, OUTERLAYER_RUNNER_NAME and one Claude credential\n(CLAUDE_CODE_OAUTH_TOKEN, ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN) from the environment. OUTERLAYER_AGENT\nis optional and defaults to claude. On a later start it refuses variables that disagree with the config in the volume.\nThe image sets OUTERLAYER_RUNNER_IMAGE; outside the image, use `runner start`.\n"
4997
+ "\nReads OUTERLAYER_URL, OUTERLAYER_APP_ID, OUTERLAYER_API_KEY, OUTERLAYER_RUNNER_NAME and one Claude credential\n(CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY) from the environment. OUTERLAYER_AGENT\nis optional and defaults to claude. On a later start it refuses variables that disagree with the config in the volume.\nThe image sets OUTERLAYER_RUNNER_IMAGE; outside the image, use `runner start`.\n"
4936
4998
  ).action(async () => {
4937
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-HJQ4YE57.js');
4938
- const { containerStart } = await import('./container-start-C5ZCXXMF.js');
4939
- const { start, RunnerStartError } = await import('./loop-ZXJFOVCS.js');
4940
- const { RunnerAlreadyRunningError } = await import('./pidfile-7SYDMT2O.js');
4999
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-VM6GKCCE.js');
5000
+ const { containerStart } = await import('./container-start-C3CGPEXA.js');
5001
+ const { start, RunnerStartError } = await import('./loop-SY636F7D.js');
5002
+ const { RunnerAlreadyRunningError } = await import('./pidfile-3BH6WPOA.js');
4941
5003
  try {
4942
5004
  const result = await containerStart({
4943
5005
  env: process.env,
@@ -4955,8 +5017,8 @@ function registerRunnerCommands(program2) {
4955
5017
  }
4956
5018
  });
4957
5019
  runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
4958
- const { defaultRunnerConfigPath } = await import('./config-HJQ4YE57.js');
4959
- const { runRunnerCheck } = await import('./check-5XB22HKS.js');
5020
+ const { defaultRunnerConfigPath } = await import('./config-VM6GKCCE.js');
5021
+ const { runRunnerCheck } = await import('./check-BKONE55O.js');
4960
5022
  const configPath = opts.config ?? defaultRunnerConfigPath();
4961
5023
  const result = await runRunnerCheck(configPath);
4962
5024
  if (!result.ok) {
@@ -4977,8 +5039,8 @@ function registerRunnerCommands(program2) {
4977
5039
  `);
4978
5040
  });
4979
5041
  runnerCmd.command("install").description("Put this CLI in the runner's install layout; --service adds its service").option("--config <path>", configOption).option("--service", "set up the service that keeps the runner running").option("--print", "with --service, print the unit and set up nothing").option("--user <account>", "with --service, the account the service runs as").option("--replace", "replace a unit or launcher file this command did not write").option("--allow-downgrade", "install this CLI even when it is older than the version the runner runs").option("--unit-name <name>", "with --service, the unit's name, to run a second runner beside the first").action(async (opts) => {
4980
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-HJQ4YE57.js');
4981
- const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-YNQ5DCZP.js');
5042
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-VM6GKCCE.js');
5043
+ const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-26OY23ZZ.js');
4982
5044
  const configPath = opts.config ?? defaultRunnerConfigPath();
4983
5045
  if (opts.service !== true) {
4984
5046
  for (const flag of ["print", "user", "unitName"]) {
@@ -4990,7 +5052,7 @@ function registerRunnerCommands(program2) {
4990
5052
  }
4991
5053
  try {
4992
5054
  if (opts.service === true) {
4993
- const { installServiceCommand } = await import('./command-2VFWA2RF.js');
5055
+ const { installServiceCommand } = await import('./command-EFYTEHPF.js');
4994
5056
  const result2 = await installServiceCommand({
4995
5057
  configPath,
4996
5058
  print: opts.print,
@@ -5045,8 +5107,8 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
5045
5107
  fail(`pass --service: \`${cliInvocation()} runner uninstall --service\` removes the runner's service.`);
5046
5108
  return;
5047
5109
  }
5048
- const { defaultRunnerConfigPath } = await import('./config-HJQ4YE57.js');
5049
- const { uninstallServiceCommand } = await import('./command-2VFWA2RF.js');
5110
+ const { defaultRunnerConfigPath } = await import('./config-VM6GKCCE.js');
5111
+ const { uninstallServiceCommand } = await import('./command-EFYTEHPF.js');
5050
5112
  const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
5051
5113
  if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
5052
5114
  `);
@@ -5073,12 +5135,12 @@ already in claude.env is used.
5073
5135
  printf '%s' "$CLAUDE_CODE_OAUTH_TOKEN" | ${cliInvocation()} runner init --agent claude --factory <org>/<factory>
5074
5136
  `
5075
5137
  ).action(async (opts) => {
5076
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-HJQ4YE57.js');
5077
- const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-ZUMSDYMW.js');
5078
- const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-RXCKMQRL.js');
5079
- const { detectMachine } = await import('./machine-F3TVUBZY.js');
5080
- const { chooseVm, runVmInit, VmInitError } = await import('./init-JJPJ2XLL.js');
5081
- const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-WI6LKWIU.js');
5138
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-VM6GKCCE.js');
5139
+ const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-NO5PJEPZ.js');
5140
+ const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-L6B5CNDG.js');
5141
+ const { detectMachine } = await import('./machine-IJ2QP3FO.js');
5142
+ const { chooseVm, runVmInit, VmInitError } = await import('./init-VY6J7MAY.js');
5143
+ const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-6Q45P3IE.js');
5082
5144
  const configPath = opts.config ?? defaultRunnerConfigPath();
5083
5145
  if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
5084
5146
  fail(`--agent ${opts.agent}: runner init writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")}. For another agent, leave --agent out and edit runner.commands.`);
@@ -5092,7 +5154,7 @@ already in claude.env is used.
5092
5154
  try {
5093
5155
  let credential;
5094
5156
  if (agent !== void 0) {
5095
- const { readPipedKey } = await import('./login-browser-B6E4GNIF.js');
5157
+ const { readPipedKey } = await import('./login-browser-NTVVDJF7.js');
5096
5158
  credential = credentialFromStdin(
5097
5159
  await readPipedKey(process.stdin, {
5098
5160
  onWaiting: () => process.stderr.write(`runner init is waiting for Claude's credential on stdin; close stdin to use the one already in claude.env
@@ -5109,7 +5171,7 @@ already in claude.env is used.
5109
5171
  const chunks = [];
5110
5172
  for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
5111
5173
  const result2 = runRunnerInit(configPath, { machine, configFromStdin: Buffer.concat(chunks).toString("utf8"), requireContainer: true });
5112
- const { ensureHostKey: ensureHostKey2 } = await import('./host-key-DBYH3RTZ.js');
5174
+ const { ensureHostKey: ensureHostKey2 } = await import('./host-key-HJ66C6MD.js');
5113
5175
  const hostKey2 = await ensureHostKey2(configPath);
5114
5176
  process.stdout.write(`host key ${hostKey2.fingerprint}
5115
5177
  hooks: ${result2.hooks}
@@ -5168,7 +5230,7 @@ hooks: ${result2.hooks}
5168
5230
  const prepared = prepareRunnerInit(configPath, { machine, allowProcess, agent, credential, keyFromLogin: makeKey !== void 0 });
5169
5231
  const created = makeKey === void 0 ? void 0 : await makeKey();
5170
5232
  const result = writeRunnerInit(prepared, created);
5171
- const { ensureHostKey } = await import('./host-key-DBYH3RTZ.js');
5233
+ const { ensureHostKey } = await import('./host-key-HJ66C6MD.js');
5172
5234
  const hostKey = await ensureHostKey(configPath);
5173
5235
  if (created !== void 0) {
5174
5236
  process.stdout.write(`${C.green}\u2713${C.reset} saved the runner key in ${result.configPath}
@@ -5196,7 +5258,7 @@ ${C.yellow}${result.note}${C.reset}
5196
5258
  To isolate builds in containers instead, run ${C.yellow}${cliInvocation()} runner init --vm${C.reset}.
5197
5259
  `);
5198
5260
  }
5199
- const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-YNQ5DCZP.js');
5261
+ const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-26OY23ZZ.js');
5200
5262
  let installedLayout = false;
5201
5263
  let noService = "it starts the runner from the install layout, which needs a CLI installed with npm";
5202
5264
  try {
@@ -5228,7 +5290,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
5228
5290
  let serviceUp = false;
5229
5291
  let restart;
5230
5292
  if (installedLayout) {
5231
- const { installServiceCommand } = await import('./command-2VFWA2RF.js');
5293
+ const { installServiceCommand } = await import('./command-EFYTEHPF.js');
5232
5294
  const service = await installServiceCommand({
5233
5295
  configPath,
5234
5296
  entryPath: process.argv[1] ?? "",
@@ -5272,12 +5334,12 @@ Next:
5272
5334
  "after",
5273
5335
  "\nA repository governed by a control plane builds the control plane's image, at the commit\nthe gateway has stored for it. A repository that governs itself fetches the head of its\ndefault branch into the runner's cache. Either way it reads .devcontainer/devcontainer.json\nand builds the image with the devcontainer CLI. Settings\nthat reach the host or widen the container's privileges are ignored and listed. The\nimage holds this CLI and a pinned Claude Code. Nothing runs inside the image.\n"
5274
5336
  ).action(async (opts) => {
5275
- const { defaultRunnerConfigPath } = await import('./config-HJQ4YE57.js');
5276
- const { buildRepositoryImage, RecipeError } = await import('./build-ZS4Y5MJU.js');
5337
+ const { defaultRunnerConfigPath } = await import('./config-VM6GKCCE.js');
5338
+ const { buildRepositoryImage, RecipeError } = await import('./build-PXRDWSN4.js');
5277
5339
  const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
5278
- const { createDockerHost } = await import('./docker-RFN6UWTT.js');
5279
- const { builderSpec } = await import('./builder-FDUOMHY3.js');
5280
- const { loadRunnerConfig } = await import('./config-HJQ4YE57.js');
5340
+ const { createDockerHost } = await import('./docker-K442NGCS.js');
5341
+ const { builderSpec } = await import('./builder-UNVHUZL7.js');
5342
+ const { loadRunnerConfig } = await import('./config-VM6GKCCE.js');
5281
5343
  const configPath = opts.config ?? defaultRunnerConfigPath();
5282
5344
  const loaded = (() => {
5283
5345
  try {
@@ -5288,11 +5350,11 @@ Next:
5288
5350
  })();
5289
5351
  const memory = loaded?.build?.memory ?? "8g";
5290
5352
  try {
5291
- const { ensureRunnerIdentity } = await import('./runner-identity-JIC54L5Q.js');
5353
+ const { ensureRunnerIdentity } = await import('./runner-identity-KH7HADNF.js');
5292
5354
  await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
5293
5355
  console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
5294
5356
  });
5295
- const { imageTargetFor } = await import('./governing-source-PBYOKKAJ.js');
5357
+ const { imageTargetFor } = await import('./governing-source-LVTBDQIM.js');
5296
5358
  const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
5297
5359
  if (!target.ok) {
5298
5360
  if (opts.json) {
@@ -5355,25 +5417,25 @@ Next:
5355
5417
  }
5356
5418
  });
5357
5419
  runnerCmd.command("stop").description("Take no more work; finish running jobs, then exit").option("--config <path>", "the cloud config file naming the runner to stop").option("--now", "end running jobs immediately, with outcome stopped").action(async (opts) => {
5358
- const { defaultRunnerConfigPath } = await import('./config-HJQ4YE57.js');
5359
- const { requestStop } = await import('./loop-ZXJFOVCS.js');
5420
+ const { defaultRunnerConfigPath } = await import('./config-VM6GKCCE.js');
5421
+ const { requestStop } = await import('./loop-SY636F7D.js');
5360
5422
  const configPath = opts.config ?? defaultRunnerConfigPath();
5361
- const { runnerImageVersion } = await import('./image-tag-XNODAHAW.js');
5423
+ const { runnerImageVersion } = await import('./image-tag-LLXOFXKP.js');
5362
5424
  await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
5363
5425
  });
5364
5426
  runnerCmd.command("status").description("List running jobs; with --recent, finished ones too").option("--config <path>", "the cloud config file naming the runner to inspect").option("--recent", "also list finished jobs, newest first, capped at 20").option("--json", "machine-readable JSON output").action(async (opts) => {
5365
- const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-HJQ4YE57.js');
5366
- const { jobsDir, runnerDir } = await import('./paths-PG4JNLZG.js');
5367
- const { listJobFiles, runnerProcessState } = await import('./loop-ZXJFOVCS.js');
5368
- const { renderStatus } = await import('./status-E7V365CD.js');
5369
- const { readHousekeepingRecord } = await import('./record-ZGUOOYJH.js');
5427
+ const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-VM6GKCCE.js');
5428
+ const { jobsDir, runnerDir } = await import('./paths-32THAYBB.js');
5429
+ const { listJobFiles, runnerProcessState } = await import('./loop-SY636F7D.js');
5430
+ const { renderStatus } = await import('./status-LOQ2RHWX.js');
5431
+ const { readHousekeepingRecord } = await import('./record-WHPJCC6Y.js');
5370
5432
  const path2 = await import('path');
5371
5433
  const configPath = opts.config ?? defaultRunnerConfigPath();
5372
5434
  const all = listJobFiles(configPath);
5373
5435
  const housekeeping = readHousekeepingRecord(runnerDir(configPath));
5374
- const { readPendingUpdate } = await import('./pending-GG252ERT.js');
5436
+ const { readPendingUpdate } = await import('./pending-6CMYQHFL.js');
5375
5437
  const pendingUpdate = readPendingUpdate(runnerDir(configPath));
5376
- const { readImageStatus } = await import('./image-tag-XNODAHAW.js');
5438
+ const { readImageStatus } = await import('./image-tag-LLXOFXKP.js');
5377
5439
  const image = readImageStatus(runnerDir(configPath));
5378
5440
  let host = "unknown";
5379
5441
  let concurrency = 1;
@@ -5387,7 +5449,7 @@ Next:
5387
5449
  const service = await (async () => {
5388
5450
  if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
5389
5451
  const { inspectService, realInspectProbes } = await import('./inspect-L7JIBK3Y.js');
5390
- const { DEFAULT_UNIT_NAME } = await import('./install-GODA5G7U.js');
5452
+ const { DEFAULT_UNIT_NAME } = await import('./install-GZ27NW6U.js');
5391
5453
  const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
5392
5454
  return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
5393
5455
  })();
@@ -5424,9 +5486,9 @@ Next:
5424
5486
  );
5425
5487
  });
5426
5488
  runnerCmd.command("logs").argument("<item>", "the work item's number in the factory").description("Print the newest attempt's log for one item").option("--config <path>", "the cloud config file naming the runner to inspect").option("-f, --follow", "keep printing as the log grows").action(async (itemArg, opts) => {
5427
- const { defaultRunnerConfigPath } = await import('./config-HJQ4YE57.js');
5428
- const { listJobFiles } = await import('./loop-ZXJFOVCS.js');
5429
- const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-KAG3MAUO.js');
5489
+ const { defaultRunnerConfigPath } = await import('./config-VM6GKCCE.js');
5490
+ const { listJobFiles } = await import('./loop-SY636F7D.js');
5491
+ const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-7O3ELY35.js');
5430
5492
  const configPath = opts.config ?? defaultRunnerConfigPath();
5431
5493
  const item = parseTrackerNumber(itemArg);
5432
5494
  if (item === void 0) {
@@ -5657,7 +5719,7 @@ caller from the bearer token, the gateway answers 401 without that header.
5657
5719
  "after",
5658
5720
  "\nWhat the stdio .mcp.json entry spawns. Reads newline-delimited JSON-RPC 2.0 on\nstdin and writes responses on stdout. The API key comes from OUTERLAYER_API_KEY\nor ~/.outerlayer/config.json at start-up; with neither the command exits 1 and\nprints why, which the MCP client shows as the connect error.\n"
5659
5721
  ).action(async (opts) => {
5660
- const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-SGISNCB3.js');
5722
+ const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-AT7G6J5V.js');
5661
5723
  try {
5662
5724
  await runMcpServe({ url: opts.url, appId: opts.appId });
5663
5725
  } catch (err) {