@outerlayer/cli 0.26.3 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +12 -9
  3. package/dist/{agent-setup-PZYQWN4H.js → agent-setup-UW36TAQM.js} +13 -13
  4. package/dist/{bridge-5KZ36YDG.js → bridge-B5VJVECY.js} +2 -2
  5. package/dist/build-TNM7HYCA.js +12 -0
  6. package/dist/build-info.json +1 -1
  7. package/dist/{builder-WEGLC2F2.js → builder-LDJGS2JC.js} +6 -6
  8. package/dist/{check-WJJ325EQ.js → check-JVBAWIN6.js} +44 -43
  9. package/dist/{chunk-7LVF4E5V.js → chunk-24ID7EQ2.js} +7 -4
  10. package/dist/{chunk-HXFRJKMU.js → chunk-2F762IXY.js} +2 -2
  11. package/dist/{chunk-2K3TCQHW.js → chunk-2I3LIRZP.js} +26 -8
  12. package/dist/{chunk-UKCNOAO6.js → chunk-55GNQPO6.js} +17 -6
  13. package/dist/{chunk-XSPA5ODY.js → chunk-6BLXUD56.js} +4 -3
  14. package/dist/{chunk-MWPBF2XG.js → chunk-6KKM7VGZ.js} +32 -4
  15. package/dist/{chunk-VPEGE3QZ.js → chunk-6TRNCUM4.js} +1 -1
  16. package/dist/{chunk-MLD2NA7N.js → chunk-7AQ5AM7U.js} +12 -5
  17. package/dist/{chunk-HBISTTG3.js → chunk-7OUOLGUV.js} +20 -5
  18. package/dist/{chunk-6FAP657M.js → chunk-ABXQBEYK.js} +1 -1
  19. package/dist/{chunk-TSW4DGV2.js → chunk-B6K7R5UY.js} +2 -2
  20. package/dist/chunk-BM7EC3OZ.js +181 -0
  21. package/dist/{chunk-W3NVHOCS.js → chunk-BPKO76QR.js} +4 -4
  22. package/dist/{chunk-QRZLUUNN.js → chunk-BWH36FOC.js} +8 -3
  23. package/dist/{chunk-PYSKSROG.js → chunk-D7ECMB7B.js} +4 -4
  24. package/dist/{chunk-FO7F6QSV.js → chunk-DJHNEGNM.js} +27 -3
  25. package/dist/{chunk-TPAF24PK.js → chunk-E5IJ5533.js} +2 -2
  26. package/dist/{chunk-JWRX5ZTT.js → chunk-EPPIISRD.js} +2 -2
  27. package/dist/{chunk-6M4LNO22.js → chunk-FP23SVDD.js} +6 -6
  28. package/dist/{chunk-GOSFARMS.js → chunk-G2JWZDFA.js} +9 -2
  29. package/dist/{chunk-XFGL53GU.js → chunk-G3EZA6MK.js} +56 -8
  30. package/dist/{chunk-5PMQDQFV.js → chunk-GFUE5TKO.js} +3 -3
  31. package/dist/{chunk-XLC7KEUV.js → chunk-GLUKDQS4.js} +1 -1
  32. package/dist/{chunk-ZLEXMZFW.js → chunk-JH2GQU5T.js} +5 -5
  33. package/dist/{chunk-YVZJ6GKF.js → chunk-KT4CN6OU.js} +1 -1
  34. package/dist/{chunk-JKNYTNYD.js → chunk-LOKSLO25.js} +1 -1
  35. package/dist/{chunk-665QWBNW.js → chunk-M3MHHIUW.js} +1 -1
  36. package/dist/{chunk-4IFKLYMM.js → chunk-MATUHHN4.js} +1 -1
  37. package/dist/{chunk-MQ743JX3.js → chunk-MHX7YX7Y.js} +1 -1
  38. package/dist/{chunk-TEVO3RUV.js → chunk-N4D5TMVU.js} +4 -4
  39. package/dist/{chunk-EORWWFPA.js → chunk-O2IJTY7L.js} +2 -2
  40. package/dist/{chunk-EABW6AJQ.js → chunk-PJDQPF5N.js} +18 -5
  41. package/dist/{chunk-KDDFI5MR.js → chunk-QHH4OSD4.js} +1 -1
  42. package/dist/{chunk-W7LGHNXT.js → chunk-QIVOTQOQ.js} +5 -5
  43. package/dist/{chunk-JF572PM5.js → chunk-QKIQ2R7F.js} +3 -3
  44. package/dist/{chunk-L4CW6LZQ.js → chunk-RHAGBUL5.js} +5 -2
  45. package/dist/{chunk-TKL74NLB.js → chunk-RHGF73IU.js} +1 -1
  46. package/dist/{chunk-SKZG7SAN.js → chunk-RK7FWC6B.js} +206 -42
  47. package/dist/{chunk-6MZSX4M7.js → chunk-STSLH5EJ.js} +3 -1
  48. package/dist/{chunk-K7FCZCLQ.js → chunk-TXHJ7BGR.js} +13 -13
  49. package/dist/{chunk-364XDGOK.js → chunk-UQYBCJ2L.js} +3 -3
  50. package/dist/{chunk-2AKDF6C2.js → chunk-VS27BP3E.js} +5 -5
  51. package/dist/{chunk-J7BXZLSO.js → chunk-WSYXLLA5.js} +29 -8
  52. package/dist/{chunk-WX2WEERU.js → chunk-WUL2OP5A.js} +3 -3
  53. package/dist/{chunk-ZPXI7LMG.js → chunk-WVDP6HVZ.js} +6 -6
  54. package/dist/{chunk-MXTN35XN.js → chunk-XBPUTQ7E.js} +1 -1
  55. package/dist/{chunk-UNF7MWEL.js → chunk-XS3FDWSZ.js} +1 -1
  56. package/dist/{chunk-VJBFQP3H.js → chunk-XZ6Q6ZNR.js} +9 -5
  57. package/dist/{chunk-F6DIHHBS.js → chunk-Y4OKEFAX.js} +1 -1
  58. package/dist/{chunk-XDHYZWEK.js → chunk-Y7ZCHBYB.js} +2 -2
  59. package/dist/chunk-YB3CSYXX.js +95 -0
  60. package/dist/{chunk-VHVFU6QU.js → chunk-YF56R4DV.js} +86 -31
  61. package/dist/chunk-YJLHUKYS.js +38 -0
  62. package/dist/{chunk-XF77SNB4.js → chunk-ZXRWMOJ3.js} +287 -51
  63. package/dist/{claude-launcher-O2U6P6ZD.js → claude-launcher-TKX4WCUN.js} +8 -4
  64. package/dist/{cli-2UUJM3AE.js → cli-XVXQDKZT.js} +141 -135
  65. package/dist/{command-GQBHC53U.js → command-B2T7VR77.js} +33 -32
  66. package/dist/{config-JJ3EO7SB.js → config-TWS5VZEN.js} +3 -3
  67. package/dist/{connect-cmd-2JHSLBXK.js → connect-cmd-HGS7YPA2.js} +10 -10
  68. package/dist/{container-start-AUJHF2BC.js → container-start-JE7HTKZG.js} +32 -31
  69. package/dist/{control-plane-launch-654RV5PO.js → control-plane-launch-DBQA3KLJ.js} +9 -9
  70. package/dist/{docker-NYAIIX2F.js → docker-MJEEHUUA.js} +6 -6
  71. package/dist/{doctor-NV2PUERZ.js → doctor-6ZIF2BRZ.js} +184 -37
  72. package/dist/{emit-artifact-cmd-XXTCHP6V.js → emit-artifact-cmd-ALDK55Y2.js} +14 -14
  73. package/dist/{emit-cmd-WQH2NK7H.js → emit-cmd-VAQHRWJR.js} +4 -4
  74. package/dist/{emit-criteria-cmd-VMZIRJCQ.js → emit-criteria-cmd-Q7SM6VP2.js} +11 -11
  75. package/dist/{emit-finding-cmd-KMJNYQI7.js → emit-finding-cmd-2NBAPDSV.js} +11 -11
  76. package/dist/{emit-result-cmd-HRTXGZLK.js → emit-result-cmd-KUSL56RI.js} +14 -14
  77. package/dist/{emit-step-cmd-AUHA3EXY.js → emit-step-cmd-KD4AKEAT.js} +12 -12
  78. package/dist/{exec-client-J6L5FDRR.js → exec-client-6WVS7DRZ.js} +3 -3
  79. package/dist/{governing-source-PTJ6EAA3.js → governing-source-VVUA5TKB.js} +16 -16
  80. package/dist/{guest-init-CXIHA5VI.js → guest-init-H5K2RW3P.js} +4 -4
  81. package/dist/{hook-fast-SDFXJEAW.js → hook-fast-3SUJM765.js} +1 -1
  82. package/dist/{host-key-5TKBNUZ4.js → host-key-XNKZCWTS.js} +3 -3
  83. package/dist/{image-tag-5SJ6ZKT7.js → image-tag-R34J4O3F.js} +3 -3
  84. package/dist/index.js +4 -4
  85. package/dist/init-ETKGFCXR.js +55 -0
  86. package/dist/{init-UZWRJMPZ.js → init-Q2RPUUVP.js} +33 -32
  87. package/dist/{init-cmd-SQKWPACS.js → init-cmd-M6MQRGOU.js} +19 -18
  88. package/dist/{init-update-FJDKY4SJ.js → init-update-N4HTZGVS.js} +59 -30
  89. package/dist/{inspect-6UYAAXH7.js → inspect-IPFA7AAT.js} +1 -1
  90. package/dist/{install-QSTTBUHX.js → install-6OIY3KHZ.js} +6 -5
  91. package/dist/{install-cmd-3DXJJUAA.js → install-cmd-JMT67P35.js} +5 -5
  92. package/dist/{layout-UOJQGEPW.js → layout-XNFDTOET.js} +2 -2
  93. package/dist/{login-browser-4OMZFP3U.js → login-browser-EWXSGHM7.js} +3 -3
  94. package/dist/{logout-cmd-5V5MMBSY.js → logout-cmd-5WE2N5B5.js} +2 -2
  95. package/dist/{logs-VN2HKDSH.js → logs-XHAS6LMZ.js} +2 -2
  96. package/dist/loop-2Y4CUFNP.js +79 -0
  97. package/dist/machine-Z2S47JW7.js +50 -0
  98. package/dist/machine-skills-RRF4HLAD.js +11 -0
  99. package/dist/{mcp-install-cmd-GGWB3JJ2.js → mcp-install-cmd-LD7KYAOP.js} +2 -2
  100. package/dist/{mcp-serve-cmd-U5N5DK3H.js → mcp-serve-cmd-LY5A3CE7.js} +5 -5
  101. package/dist/{paths-ZC6BMWMT.js → paths-LHSPNORF.js} +2 -2
  102. package/dist/{pending-54HC7MM3.js → pending-3YZCSKON.js} +3 -3
  103. package/dist/{pidfile-BY5Z6YH7.js → pidfile-DKMYYXLH.js} +3 -3
  104. package/dist/{record-K23IN6QN.js → record-3LPTY3G5.js} +3 -3
  105. package/dist/{runner-env-2D7MPOIJ.js → runner-env-YRRNRKF4.js} +8 -7
  106. package/dist/{runner-identity-YYENYKDH.js → runner-identity-EX7HXPUE.js} +6 -6
  107. package/dist/{runner-key-AZVXBQIB.js → runner-key-GO277GW2.js} +32 -31
  108. package/dist/{session-sender-VH2EKAT5.js → session-sender-SC5PSU2G.js} +15 -15
  109. package/dist/{spec-cmd-BOUPLX7X.js → spec-cmd-JGYHHJ4P.js} +12 -12
  110. package/dist/{starter-pack-55EFILC5.js → starter-pack-GPU4X6B7.js} +2 -2
  111. package/dist/{status-3WC2IGVI.js → status-CJCE2FHD.js} +34 -33
  112. package/dist/{sync-cmd-GT2WTQRA.js → sync-cmd-ATXJVS7S.js} +14 -14
  113. package/dist/{watch-JED7SYAA.js → watch-M7NR3DOW.js} +14 -14
  114. package/dist/{work-claim-cmd-MY4N74HA.js → work-claim-cmd-DNUDZKJA.js} +16 -16
  115. package/dist/{work-cmd-UQ45HDM4.js → work-cmd-VECTYST6.js} +12 -12
  116. package/dist/{work-comment-cmd-I7NNSNDP.js → work-comment-cmd-F3NRWKPZ.js} +12 -12
  117. package/dist/{work-logs-cmd-YIQJVENH.js → work-logs-cmd-QF6P32FE.js} +12 -12
  118. package/dist/{work-open-pr-cmd-VP5NNTCW.js → work-open-pr-cmd-XE23JA3R.js} +13 -13
  119. package/dist/{work-pr-cmd-DKTBEFHO.js → work-pr-cmd-BH56GUKN.js} +12 -12
  120. package/dist/{work-stop-cmd-GN2WX73C.js → work-stop-cmd-C3F5HNUO.js} +12 -12
  121. package/package.json +1 -1
  122. package/skill-pack/maintained/outerlayer-cli/SKILL.md +6 -5
  123. package/skill-pack/shipped.json +1 -0
  124. package/skill-pack/template/build/SKILL.md +1 -1
  125. package/dist/build-EBQYXL7Y.js +0 -12
  126. package/dist/chunk-7RQ73DLO.js +0 -23
  127. package/dist/init-KIGYMLDM.js +0 -54
  128. package/dist/loop-OE32U2IZ.js +0 -78
  129. package/dist/machine-L7INJ4JN.js +0 -49
@@ -1,28 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-K7FCZCLQ.js';
4
- import './chunk-XFGL53GU.js';
5
- import './chunk-VJBFQP3H.js';
6
- import { verifiedTrackerNames, TRACKERS } from './chunk-UKCNOAO6.js';
7
- import './chunk-HXFRJKMU.js';
8
- import './chunk-TEVO3RUV.js';
3
+ import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-TXHJ7BGR.js';
4
+ import './chunk-G3EZA6MK.js';
5
+ import './chunk-XZ6Q6ZNR.js';
6
+ import { verifiedTrackerNames, TRACKERS } from './chunk-55GNQPO6.js';
7
+ import './chunk-2F762IXY.js';
8
+ import './chunk-N4D5TMVU.js';
9
9
  import './chunk-BUP5N3X6.js';
10
- import './chunk-XSPA5ODY.js';
11
- import './chunk-GOSFARMS.js';
12
- import './chunk-MQ743JX3.js';
13
- import './chunk-QRZLUUNN.js';
14
- import { hookFiredMarkerPath, installedCliDistDir } from './chunk-FO7F6QSV.js';
10
+ import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-LOKSLO25.js';
11
+ import './chunk-6BLXUD56.js';
12
+ import './chunk-G2JWZDFA.js';
13
+ import './chunk-MHX7YX7Y.js';
14
+ import './chunk-BWH36FOC.js';
15
+ import { hookFiredMarkerPath, installedCliDistDir } from './chunk-DJHNEGNM.js';
15
16
  import './chunk-ZJSNLVCE.js';
16
17
  import './chunk-I7RZHMXW.js';
17
18
  import './chunk-BKO6JEZI.js';
18
19
  import './chunk-HCVLP7XA.js';
19
20
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
21
+ import './chunk-BM7EC3OZ.js';
22
+ import './chunk-7OUOLGUV.js';
20
23
  import './chunk-QE3UQAHK.js';
21
- import './chunk-YVZJ6GKF.js';
24
+ import './chunk-KT4CN6OU.js';
22
25
  import { C, warnDeprecated, API_KEY_FLAG_DEPRECATION, NO_COLOR_FLAG, stripNoColor } from './chunk-ANPNT6PM.js';
23
- import './chunk-EABW6AJQ.js';
24
- import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-JKNYTNYD.js';
25
- import './chunk-HBISTTG3.js';
26
+ import './chunk-PJDQPF5N.js';
26
27
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
27
28
  import { cliInvocation, packageRunnerOf } from './chunk-CRB3POP4.js';
28
29
  import { settingsPath, readSettings, SettingsParseError, listHookCandidates, PORTABLE_BIN, wrapHooks, writeSettings, unwrapHooks, REGISTERED_EVENTS, removeHooks, removeStatusline, cliBinResolvable, mergeHooks, repointWrappedHooks, AUTO_WRAP_EVENTS, mergeStatusline } from './chunk-URIZRCRY.js';
@@ -33,9 +34,9 @@ import './chunk-RKOTJQVG.js';
33
34
  import './chunk-QZBXLLTV.js';
34
35
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
35
36
  import { resolveVersion } from './chunk-RA3O54FC.js';
36
- import './chunk-F6DIHHBS.js';
37
- import './chunk-L4CW6LZQ.js';
38
- import './chunk-2K3TCQHW.js';
37
+ import './chunk-Y4OKEFAX.js';
38
+ import './chunk-RHAGBUL5.js';
39
+ import './chunk-2I3LIRZP.js';
39
40
  import './chunk-JGD5TWQ2.js';
40
41
  import './chunk-Z5GEFMRW.js';
41
42
  import { EventEmitter } from 'events';
@@ -3653,14 +3654,14 @@ function apiKeyOption() {
3653
3654
  return new Option("--api-key <key>", `deprecated: use \`${cliInvocation()} login\` or OUTERLAYER_API_KEY`).hideHelp();
3654
3655
  }
3655
3656
  async function installStarterPackInRepo() {
3656
- const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-55EFILC5.js');
3657
+ const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-GPU4X6B7.js');
3657
3658
  const cwd = process.cwd();
3658
3659
  let repoRoot = cwd;
3659
3660
  try {
3660
3661
  repoRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim() || cwd;
3661
3662
  } catch {
3662
3663
  }
3663
- const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-UOJQGEPW.js');
3664
+ const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-XNFDTOET.js');
3664
3665
  const fresh = !isAgentsMdLayout(repoRoot) && !existsSync(join(repoRoot, ".outerlayer"));
3665
3666
  const result = installStarterPack({ repoRoot, base: fresh ? ".agents/skills" : skillsBaseFor(repoRoot) });
3666
3667
  if (fresh) declareAgentsMdLayout(repoRoot);
@@ -3785,8 +3786,16 @@ ${starter.output}`),
3785
3786
  throw err;
3786
3787
  }
3787
3788
  }
3789
+ async function installMachineSkillsForSetup() {
3790
+ const { setupMachineSkills } = await import('./machine-skills-RRF4HLAD.js');
3791
+ const result = setupMachineSkills(homeFromEnv());
3792
+ for (const failure of result.failures) process.stderr.write(`${C.yellow}!${C.reset} Could not write a maintained skill: ${failure}
3793
+ `);
3794
+ return result.failures.length === 0 ? `${C.green}\u2713${C.reset} Maintained skills: ~/.agents/skills/, linked from ~/.claude/skills/ ${C.dim}(every outerlayer command keeps them at its own version)${C.reset}
3795
+ ` : "";
3796
+ }
3788
3797
  async function realConnectDepsForCwd() {
3789
- const { realConnectDeps } = await import('./connect-cmd-2JHSLBXK.js');
3798
+ const { realConnectDeps } = await import('./connect-cmd-HGS7YPA2.js');
3790
3799
  const { resolveRepoIdentity } = await import('./dist-QPHZE47F.js');
3791
3800
  return {
3792
3801
  ...realConnectDeps(),
@@ -3802,8 +3811,12 @@ function invokedCommandToken(argv) {
3802
3811
  }
3803
3812
  function buildProgram(argv = process.argv) {
3804
3813
  const program2 = new Command();
3805
- program2.name(cliInvocation()).description("OuterLayer \u2014 see what your coding agents actually do").enablePositionalOptions().version(resolveVersion()).hook("preAction", (_root, command) => {
3814
+ program2.name(cliInvocation()).description("OuterLayer \u2014 see what your coding agents actually do").enablePositionalOptions().version(resolveVersion()).hook("preAction", async (_root, command) => {
3806
3815
  if (command.opts().apiKey !== void 0) warnDeprecated(API_KEY_FLAG_DEPRECATION);
3816
+ const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-RRF4HLAD.js');
3817
+ const names = [];
3818
+ for (let at = command; at?.parent; at = at.parent) names.push(at.name());
3819
+ if (!machineRefreshSkipped(names, command._hidden === true, argv)) refreshMachineSkills(homeFromEnv());
3807
3820
  }).option(NO_COLOR_FLAG, "disable color (NO_COLOR=1 does the same)").addHelpText("after", SUPPORT_TEXT);
3808
3821
  program2.command("init").description("Connect this repository, install hooks and agent skills, run doctor").option("--user", "install into user settings [default]").option("--project", "install into project settings (./.claude/settings.json)").option("--org", "print a managed-settings.json snippet for MDM/GPO rollout").option("--remove", "uninstall OuterLayer hooks").option("--local", "install the hooks only: no connect step and no network call").option("--factory <org/factory>", `the factory to connect this repository to (see \`${cliInvocation()} connect\`)`).option("--gitignore", "also add .outerlayer/ to .gitignore (project scope)").option("--template <name>", "install the starter skills and a policy file (only: default)").option("--update", "update the files init wrote that you have not edited, and write missing ones").option("--dry-run", "with --update: print the plan and write nothing").option("--no-skills-link", "do not link .claude/skills to .agents/skills").option("--control-plane", "with --update: this is a control plane; older CLIs keep .claude/skills/").option("--no-wrap-hooks", "leave PreToolUse/PostToolUse hooks unwrapped").option("--statusline", "install the status-line segment [default]").option("--no-statusline", "leave the statusLine slot untouched").option("--shell-function", "make plain claude run `outerlayer claude` (edits ~/.zshrc or ~/.bashrc)").option("--no-shell-function", "do not set up the shell function, and remove it if it is there").option("--json", "machine-readable JSON output").addHelpText(
3809
3822
  "after",
@@ -3815,19 +3828,14 @@ login it skips the connect step and says to run \`${cliInvocation()} login\`. Wi
3815
3828
  --json it prints one document naming the outcome of each step: done,
3816
3829
  skipped or failed. The exit code is 1 when a step failed.
3817
3830
 
3818
- The agent setup step installs the starter skills and the \`outerlayer\` skill
3819
- into .agents/skills/, writes AGENTS.md when there is no AGENTS.md or
3831
+ The agent setup step installs the starter skills into .agents/skills/,
3832
+ writes AGENTS.md when there is no AGENTS.md or
3820
3833
  CLAUDE.md, writes .outerlayer/config.json with "layout": 2 when there is
3821
3834
  none, links .claude/skills to ../.agents/skills, and adds the outerlayer and
3822
3835
  outerlayer-docs MCP servers to .mcp.json. Nothing is generated, so nothing
3823
- needs \`` + cliInvocation() + ` context emit\`. --no-skills-link leaves out the link.
3824
- Nothing you wrote is changed. A repository still in the earlier layout keeps
3825
- its files in .outerlayer/ and is compiled as before until --update moves it.
3826
- The files are left uncommitted.
3827
- The step is skipped outside a git repository and in a repository whose
3828
- context comes from a control plane, where it arrives at session start.
3836
+ needs \`` + cliInvocation() + " context emit`. --no-skills-link leaves out the link.\nNothing you wrote is changed. A repository still in the earlier layout keeps\nits files in .outerlayer/ and is compiled as before until --update moves it.\nThe files are left uncommitted.\nThe step is skipped outside a git repository and in a repository whose\ncontext comes from a control plane, where it arrives at session start.\n\nEvery init installs the five maintained skills (outerlayer-evidence,\nouterlayer-amend, outerlayer-findings, outerlayer-cli, outerlayer-build) once\nper machine, in ~/.agents/skills/, with a link to each in ~/.claude/skills/.\nEvery later outerlayer command keeps them at its own version. A repository in\nthe AGENTS.md layout carries none of them. `" + cliInvocation() + " claude` installs them too.\nIf a write fails, init says so and goes on; `" + cliInvocation() + ` doctor\` reports it.
3829
3837
 
3830
- --local installs only the hooks: no connect step, no agent setup and no
3838
+ --local installs only the hooks and the per-machine skills: no connect step, no agent setup and no
3831
3839
  network call. Add \`--template default\` to also write the starter skills and
3832
3840
  a policy file, with nothing to compile.
3833
3841
 
@@ -3837,23 +3845,19 @@ changes nothing. Wrapping adds one spawn per hook firing; undo it with
3837
3845
  replaced.
3838
3846
 
3839
3847
  Three of the starter skills are copied once and are yours to edit. The
3840
- others are rewritten from this CLI by \`init --update\`, or by \`context emit\`
3841
- in a repository that has not moved.
3848
+ maintained skills are not copied into a repository in the AGENTS.md layout. A
3849
+ repository that has not moved keeps copies that \`context emit\` rewrites.
3842
3850
 
3843
3851
  --update first moves a repository in the earlier layout to AGENTS.md,
3844
3852
  .agents/skills/ and .mcp.json: it removes each file that holds exactly what
3845
- \`` + cliInvocation() + ` context emit\` writes, moves the sources, links .claude/skills
3846
- and sets "layout": 2. A file you edited is kept and listed. It then brings
3847
- the files init wrote once up to this CLI's version: the template skills, the
3848
- policy, the two starter checks and the two MCP entries. A file still equal
3849
- to a version an earlier release wrote is replaced, and a missing one is
3850
- written. A file you edited is never touched. The changes are left
3851
- uncommitted. --dry-run prints the plan, with a command to compare each
3852
- edited file, and writes nothing. --control-plane makes no link and says
3853
+ \`` + cliInvocation() + ' context emit` writes, moves the sources, links .claude/skills\nand sets "layout": 2. A file you edited is kept and listed. It then brings\nthe files init wrote once up to this CLI\'s version: the template skills, the\npolicy, the two starter checks and the two MCP entries. A file still equal\nto a version an earlier release wrote is replaced, and a missing one is\nwritten. A file you edited is never touched. The changes are left\nuncommitted. --dry-run prints the plan, with a command to compare each\nedited file, and writes nothing. In the AGENTS.md layout, --update also removes\neach maintained skill folder whose SKILL.md carries the "maintained by\nOuterLayer" line, from .agents/skills/ and from a .claude/skills that is a\nfolder. It says that every machine and runner host must run this CLI version\nor later, and each machine a person works on must run `' + cliInvocation() + ` init --local\`,
3854
+ before you commit the removal. In an edited build, it changes only the line
3855
+ that names ../outerlayer-build/SKILL.md, to ~/.agents/skills/outerlayer-build/SKILL.md.
3856
+ --control-plane makes no link and says
3853
3857
  what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocation() + " doctor` reports the same\nstates under Starter files.\n"
3854
3858
  ).action(async (opts) => {
3855
3859
  if (opts.update || opts.dryRun) {
3856
- const { runInitUpdate, formatInitUpdate, updateFlagProblem } = await import('./init-update-FJDKY4SJ.js');
3860
+ const { runInitUpdate, formatInitUpdate, updateFlagProblem } = await import('./init-update-N4HTZGVS.js');
3857
3861
  const problem = updateFlagProblem(opts);
3858
3862
  if (problem !== void 0) {
3859
3863
  fail(problem);
@@ -3867,7 +3871,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3867
3871
  }
3868
3872
  let starterTemplate;
3869
3873
  if (opts.template !== void 0) {
3870
- const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-55EFILC5.js');
3874
+ const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-GPU4X6B7.js');
3871
3875
  try {
3872
3876
  assertKnownTemplate(opts.template);
3873
3877
  } catch (err) {
@@ -3889,6 +3893,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3889
3893
  return;
3890
3894
  }
3891
3895
  if (opts.remove || opts.local) {
3896
+ const skillsLine = opts.remove ? "" : await installMachineSkillsForSetup();
3892
3897
  const outcome = await installHooks(opts, cliBin, void 0, starterTemplate);
3893
3898
  if (!outcome.ok) {
3894
3899
  fail(outcome.text);
@@ -3900,12 +3905,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3900
3905
  if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
3901
3906
  `);
3902
3907
  }
3903
- const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-SQKWPACS.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
3908
+ const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-M6MQRGOU.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
3904
3909
  if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
3905
- else process.stdout.write(outcome.text + (shell?.text ?? ""));
3910
+ else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
3906
3911
  return;
3907
3912
  }
3908
- const { runInitCommand } = await import('./init-cmd-SQKWPACS.js');
3913
+ await installMachineSkillsForSetup();
3914
+ const { runInitCommand } = await import('./init-cmd-M6MQRGOU.js');
3909
3915
  const code = await runInitCommand(
3910
3916
  { json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
3911
3917
  {
@@ -3917,7 +3923,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3917
3923
  return { ok, text, detail };
3918
3924
  },
3919
3925
  runAgentSetup: async () => {
3920
- const { runAgentSetup } = await import('./agent-setup-PZYQWN4H.js');
3926
+ const { runAgentSetup } = await import('./agent-setup-UW36TAQM.js');
3921
3927
  return runAgentSetup({ cwd: process.cwd(), skillsLink: opts.skillsLink !== false });
3922
3928
  },
3923
3929
  runDoctorChecks: gatherDoctorChecks,
@@ -3926,7 +3932,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3926
3932
  shellPath: process.env.SHELL,
3927
3933
  interactive: Boolean(process.stdin.isTTY && process.stderr.isTTY) && opts.json !== true,
3928
3934
  ask: async () => {
3929
- const { promptOnTerminal } = await import('./connect-cmd-2JHSLBXK.js');
3935
+ const { promptOnTerminal } = await import('./connect-cmd-HGS7YPA2.js');
3930
3936
  const answer = await promptOnTerminal({
3931
3937
  message: `Should plain claude start Claude Code through ${cliInvocation()} claude? That is how a session in a governed repository gets its control plane. It adds one block to your zsh or bash startup file.`,
3932
3938
  options: [
@@ -3965,7 +3971,7 @@ linked (true, false, or null when it could not be checked) and, when false,
3965
3971
  linkUrl.
3966
3972
  `
3967
3973
  ).action(async (opts) => {
3968
- const { runConnectCommand } = await import('./connect-cmd-2JHSLBXK.js');
3974
+ const { runConnectCommand } = await import('./connect-cmd-HGS7YPA2.js');
3969
3975
  const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
3970
3976
  stdout: process.stdout,
3971
3977
  stderr: process.stderr
@@ -4004,7 +4010,7 @@ Every later command reads the saved file, so none of them needs a key on
4004
4010
  its command line. A saved key is checked for real on the first \`sync\`.
4005
4011
  `
4006
4012
  ).action(async (opts) => {
4007
- const { runLoginCommand, realLoginDeps } = await import('./login-browser-4OMZFP3U.js');
4013
+ const { runLoginCommand, realLoginDeps } = await import('./login-browser-EWXSGHM7.js');
4008
4014
  const code = await runLoginCommand(
4009
4015
  {
4010
4016
  browser: opts.browser !== false,
@@ -4028,7 +4034,7 @@ dashboard cannot be reached the local copy is still deleted and the exit
4028
4034
  code is 1: revoke the token on /profile/security.
4029
4035
  `
4030
4036
  ).action(async () => {
4031
- const { runLogoutCommand, realLogoutDeps } = await import('./logout-cmd-5V5MMBSY.js');
4037
+ const { runLogoutCommand, realLogoutDeps } = await import('./logout-cmd-5WE2N5B5.js');
4032
4038
  const code = await runLogoutCommand(realLogoutDeps());
4033
4039
  if (code !== 0) process.exitCode = code;
4034
4040
  });
@@ -4043,7 +4049,7 @@ code is 1: revoke the token on /profile/security.
4043
4049
  else fail(found.reason);
4044
4050
  return;
4045
4051
  }
4046
- const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-GT2WTQRA.js');
4052
+ const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-ATXJVS7S.js');
4047
4053
  try {
4048
4054
  const result = await runSync({
4049
4055
  url: opts.url,
@@ -4074,7 +4080,7 @@ code is 1: revoke the token on /profile/security.
4074
4080
  if (invokedCommandToken(argv) === "watch") {
4075
4081
  warnDeprecated(`\`${cliInvocation()} watch\` is now \`${cliInvocation()} daemon\`; the old name will be removed in a future release.`);
4076
4082
  }
4077
- const { runWatch } = await import('./watch-JED7SYAA.js');
4083
+ const { runWatch } = await import('./watch-M7NR3DOW.js');
4078
4084
  await runWatch({ once: opts.once });
4079
4085
  });
4080
4086
  program2.command("hook <event>", { hidden: true }).description("capture-hook fast path, installed by `init`").action(() => {
@@ -4135,7 +4141,7 @@ code is 1: revoke the token on /profile/security.
4135
4141
  }
4136
4142
  });
4137
4143
  program2.command("vm-exec", { hidden: true }).description("run a command in a microVM build's guest through its exec agent").requiredOption("--socket <path>", "the Unix socket Firecracker serves the build's vsock device on").option("--user <user>", "the user to run as", "").option("--cwd <dir>", "the working directory", "/").option("--env <NAME=value>", "an environment value the command line carries; repeatable", (value, previous) => [...previous, value], []).option("--pass <NAME>", "an environment variable whose value is read from this process; repeatable", (value, previous) => [...previous, value], []).argument("<argv...>", "the command and its arguments").action(async (argv2, opts) => {
4138
- const { runVmExec } = await import('./exec-client-J6L5FDRR.js');
4144
+ const { runVmExec } = await import('./exec-client-6WVS7DRZ.js');
4139
4145
  const env = {};
4140
4146
  for (const entry of opts.env) {
4141
4147
  const eq = entry.indexOf("=");
@@ -4164,7 +4170,7 @@ code is 1: revoke the token on /profile/security.
4164
4170
  process.exitCode = await runBuildCommand({ dir: opts.dir, argv: command });
4165
4171
  });
4166
4172
  program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
4167
- const { runSessionSender } = await import('./session-sender-VH2EKAT5.js');
4173
+ const { runSessionSender } = await import('./session-sender-SC5PSU2G.js');
4168
4174
  try {
4169
4175
  await runSessionSender();
4170
4176
  } catch (err) {
@@ -4172,7 +4178,7 @@ code is 1: revoke the token on /profile/security.
4172
4178
  }
4173
4179
  });
4174
4180
  program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
4175
- const { realGuestHost, runGuestInit } = await import('./guest-init-CXIHA5VI.js');
4181
+ const { realGuestHost, runGuestInit } = await import('./guest-init-H5K2RW3P.js');
4176
4182
  const { readFileSync: readFileSync3 } = await import('fs');
4177
4183
  try {
4178
4184
  runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
@@ -4181,7 +4187,7 @@ code is 1: revoke the token on /profile/security.
4181
4187
  }
4182
4188
  });
4183
4189
  program2.command("vm-forward", { hidden: true }).description("pipe a guest port to another; vm-init runs it").requiredOption("--listen <host:port>", "the address to listen on").requiredOption("--to <host:port>", "the address to pipe each connection to").action(async (opts) => {
4184
- const { startBridgeForward } = await import('./bridge-5KZ36YDG.js');
4190
+ const { startBridgeForward } = await import('./bridge-B5VJVECY.js');
4185
4191
  try {
4186
4192
  await startBridgeForward(opts);
4187
4193
  } catch (err) {
@@ -4207,7 +4213,7 @@ async function runCli(processArgv) {
4207
4213
  await buildProgram(argv).parseAsync(argv);
4208
4214
  }
4209
4215
  async function compileContext(opts) {
4210
- const { runEmit, EmitError } = await import('./emit-cmd-WQH2NK7H.js');
4216
+ const { runEmit, EmitError } = await import('./emit-cmd-VAQHRWJR.js');
4211
4217
  try {
4212
4218
  const result = runEmit({ cwd: opts.dir, check: opts.check, json: opts.json });
4213
4219
  if (result.exitCode !== 0) process.exitCode = result.exitCode;
@@ -4254,7 +4260,7 @@ Compiling .outerlayer/ moved to \`${cliInvocation()} context emit\`.
4254
4260
  await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
4255
4261
  return;
4256
4262
  }
4257
- const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-HRTXGZLK.js');
4263
+ const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-KUSL56RI.js');
4258
4264
  try {
4259
4265
  const result = await runEmitResult({
4260
4266
  name,
@@ -4304,7 +4310,7 @@ everywhere, bytes and deep link untouched; a still-queued one is cancelled
4304
4310
  locally so it never uploads. One correction can retire several duplicates.
4305
4311
  `
4306
4312
  ).action(async (file, opts) => {
4307
- const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-XXTCHP6V.js');
4313
+ const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-ALDK55Y2.js');
4308
4314
  let pr;
4309
4315
  if (opts.pr !== void 0) {
4310
4316
  pr = parseTrackerNumber(opts.pr);
@@ -4363,7 +4369,7 @@ recent events with their ids. --find <text> searches all of them.
4363
4369
  item that session was launched for is used automatically.
4364
4370
  `
4365
4371
  ).action(async (opts) => {
4366
- const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-KMJNYQI7.js');
4372
+ const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-2NBAPDSV.js');
4367
4373
  try {
4368
4374
  refuseRemovedFindingFlags(opts);
4369
4375
  const result = await runEmitFinding({
@@ -4430,7 +4436,7 @@ the whole batch. "untimed": true records one with no time on purpose.
4430
4436
  that session was launched for is used automatically.
4431
4437
  `
4432
4438
  ).action(async (file, opts) => {
4433
- const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-KMJNYQI7.js');
4439
+ const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-2NBAPDSV.js');
4434
4440
  try {
4435
4441
  const result = await runEmitFindings({
4436
4442
  file,
@@ -4465,7 +4471,7 @@ command, the command exits 0, and \`sync\` sends it later. If the gateway refuse
4465
4471
  the step, the command prints why and exits 1.
4466
4472
  `
4467
4473
  ).action(async (name, opts) => {
4468
- const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-AUHA3EXY.js');
4474
+ const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-KD4AKEAT.js');
4469
4475
  try {
4470
4476
  await runEmitStep({
4471
4477
  name,
@@ -4508,7 +4514,7 @@ of the item, and a (proof: <kind>) annotation names its proof.
4508
4514
  ${cliInvocation()} emit criteria acceptance/412-login.md --item 412
4509
4515
  `
4510
4516
  ).action(async (file, opts) => {
4511
- const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-VMZIRJCQ.js');
4517
+ const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-Q7SM6VP2.js');
4512
4518
  try {
4513
4519
  const result = await runEmitCriteria({
4514
4520
  file,
@@ -4532,9 +4538,9 @@ function registerSpecCommands(program2) {
4532
4538
  const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
4533
4539
  const credentialOptions = (command) => command.option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)");
4534
4540
  const run = async (action) => {
4535
- const { WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4541
+ const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4536
4542
  try {
4537
- await action(await import('./spec-cmd-BOUPLX7X.js'));
4543
+ await action(await import('./spec-cmd-JGYHHJ4P.js'));
4538
4544
  } catch (err) {
4539
4545
  if (err instanceof WorkCommandError) {
4540
4546
  fail(err.message);
@@ -4576,7 +4582,7 @@ takes it, and prints the line that starts your session on it. That
4576
4582
  session links itself and holds the item's lease while it works.
4577
4583
  `
4578
4584
  ).action(async (opts) => {
4579
- const { runWorkBuild, WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4585
+ const { runWorkBuild, WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4580
4586
  try {
4581
4587
  await runWorkBuild(opts);
4582
4588
  } catch (err) {
@@ -4599,7 +4605,7 @@ renews that session's own 20-minute lease, unless --no-lease or
4599
4605
  --ended is given, or another worker already holds a live one.
4600
4606
  `
4601
4607
  ).action(async (number, opts) => {
4602
- const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4608
+ const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4603
4609
  try {
4604
4610
  await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
4605
4611
  } catch (err) {
@@ -4623,8 +4629,8 @@ criterion's new proof; --ready hands the thread back to a person. At
4623
4629
  most one action flag may be given.
4624
4630
  `
4625
4631
  ).action(async (opts) => {
4626
- const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-I7NNSNDP.js');
4627
- const { WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4632
+ const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-F3NRWKPZ.js');
4633
+ const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4628
4634
  try {
4629
4635
  await runWorkComment(opts);
4630
4636
  } catch (err) {
@@ -4645,8 +4651,8 @@ criterion that carries proof or a comment, each with who is waiting
4645
4651
  on whom next.
4646
4652
  `
4647
4653
  ).action(async (opts) => {
4648
- const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-I7NNSNDP.js');
4649
- const { WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4654
+ const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-F3NRWKPZ.js');
4655
+ const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4650
4656
  try {
4651
4657
  await runWorkThreads(opts);
4652
4658
  } catch (err) {
@@ -4670,8 +4676,8 @@ still running, or that an older runner released, has no log and the
4670
4676
  command exits 1.
4671
4677
  `
4672
4678
  ).action(async (opts) => {
4673
- const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-YIQJVENH.js');
4674
- const { WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4679
+ const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-QF6P32FE.js');
4680
+ const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4675
4681
  try {
4676
4682
  await runWorkLogs(opts);
4677
4683
  } catch (err) {
@@ -4694,8 +4700,8 @@ item is not built again until a new build request. Exits 1 when no host
4694
4700
  build is running for the item.
4695
4701
  `
4696
4702
  ).action(async (opts) => {
4697
- const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-GN2WX73C.js');
4698
- const { WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4703
+ const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-C3F5HNUO.js');
4704
+ const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4699
4705
  try {
4700
4706
  await runWorkStop(opts);
4701
4707
  } catch (err) {
@@ -4716,7 +4722,7 @@ deletes anything \u2014 the item is removed from Work only once no
4716
4722
  live addition remains on it.
4717
4723
  `
4718
4724
  ).action(async (opts) => {
4719
- const { runWorkRemove, WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4725
+ const { runWorkRemove, WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4720
4726
  try {
4721
4727
  await runWorkRemove(opts);
4722
4728
  } catch (err) {
@@ -4728,7 +4734,7 @@ live addition remains on it.
4728
4734
  }
4729
4735
  });
4730
4736
  workCmd.command("status").description("Show one item's stage, gate ledger, and additions").option("--item <number>", "the item's number inside this factory").option("--issue <number>", "issue number, or a Linear/Jira key like ENG-123").option(TRACKER_OPTION_FLAG, "tracker for a keyed --issue, when both hold the key").option("--repo <owner/name>", "repository for an issue number (default: the checkout's remote)").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").action(async (opts) => {
4731
- const { runWorkStatus, WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4737
+ const { runWorkStatus, WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4732
4738
  try {
4733
4739
  await runWorkStatus(opts);
4734
4740
  } catch (err) {
@@ -4740,7 +4746,7 @@ live addition remains on it.
4740
4746
  }
4741
4747
  });
4742
4748
  workCmd.command("list").description("List live work items for this factory").option("--stage <spec|build|review>", "filter by stage").option("--section <attention|waiting|flowing>", "filter by Queue section").option("--repo <owner/name>", "repository (default: the current checkout's remote)").option("--unclaimed", "only items with no live lease").option("--claimed", "only items with a live lease, held by a host or a local session").option("--startable", "only items a host can start: a build request, no open PR, no live lease").option("--needs <amend>", "only items with a thread waiting on an agent").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").action(async (opts) => {
4743
- const { runWorkList, WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4749
+ const { runWorkList, WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4744
4750
  try {
4745
4751
  await runWorkList(opts);
4746
4752
  } catch (err) {
@@ -4761,7 +4767,7 @@ by a different key is refused; claiming again with the same key extends
4761
4767
  it. --host is a label only.
4762
4768
  `
4763
4769
  ).action(async (opts) => {
4764
- const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-MY4N74HA.js');
4770
+ const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-DNUDZKJA.js');
4765
4771
  try {
4766
4772
  await runWorkClaim(opts);
4767
4773
  } catch (err) {
@@ -4781,7 +4787,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
4781
4787
  lease has expired, or a 403 if a different key holds it.
4782
4788
  `
4783
4789
  ).action(async (opts) => {
4784
- const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-MY4N74HA.js');
4790
+ const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-DNUDZKJA.js');
4785
4791
  try {
4786
4792
  await runWorkRenew(opts);
4787
4793
  } catch (err) {
@@ -4813,7 +4819,7 @@ applies to a host's lease only. A later tool call in the session
4813
4819
  takes the lease again.
4814
4820
  `
4815
4821
  ).action(async (opts) => {
4816
- const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-MY4N74HA.js');
4822
+ const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-DNUDZKJA.js');
4817
4823
  try {
4818
4824
  await runWorkRelease(opts);
4819
4825
  } catch (err) {
@@ -4840,7 +4846,7 @@ Idempotent: declaring the same pull request twice is a no-op.
4840
4846
  needs your own login; an agent session or a factory key is refused.
4841
4847
  `
4842
4848
  ).action(async (number, opts) => {
4843
- const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-DKTBEFHO.js');
4849
+ const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-BH56GUKN.js');
4844
4850
  try {
4845
4851
  await runWorkPr({ ...opts, number });
4846
4852
  } catch (err) {
@@ -4865,8 +4871,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
4865
4871
  Run it again after a change to the title or description.
4866
4872
  `
4867
4873
  ).action(async (opts) => {
4868
- const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-VP5NNTCW.js');
4869
- const { WorkCommandError } = await import('./work-cmd-UQ45HDM4.js');
4874
+ const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-XE23JA3R.js');
4875
+ const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
4870
4876
  try {
4871
4877
  await runWorkOpenPr(opts);
4872
4878
  } catch (err) {
@@ -4882,13 +4888,13 @@ function registerRunnerCommands(program2) {
4882
4888
  const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
4883
4889
  const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
4884
4890
  runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
4885
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
4886
- const { start, RunnerStartError } = await import('./loop-OE32U2IZ.js');
4887
- const { RunnerAlreadyRunningError } = await import('./pidfile-BY5Z6YH7.js');
4891
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TWS5VZEN.js');
4892
+ const { start, RunnerStartError } = await import('./loop-2Y4CUFNP.js');
4893
+ const { RunnerAlreadyRunningError } = await import('./pidfile-DKMYYXLH.js');
4888
4894
  const configPath = opts.config ?? defaultRunnerConfigPath();
4889
4895
  try {
4890
4896
  const { realUpdateDeps } = await import('./real-deps-KNNBQC75.js');
4891
- await start(configPath, { update: realUpdateDeps(), fetchImpl: fetch });
4897
+ await start(configPath, { update: realUpdateDeps(), leave: { exit: (code) => process.exit(code) }, fetchImpl: fetch });
4892
4898
  } catch (err) {
4893
4899
  if (err instanceof RunnerConfigError || err instanceof RunnerAlreadyRunningError || err instanceof RunnerStartError) {
4894
4900
  fail(err.message);
@@ -4901,10 +4907,10 @@ function registerRunnerCommands(program2) {
4901
4907
  "after",
4902
4908
  "\nReads OUTERLAYER_URL, OUTERLAYER_APP_ID, OUTERLAYER_API_KEY, OUTERLAYER_RUNNER_NAME and one Claude credential\n(CLAUDE_CODE_OAUTH_TOKEN, ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN) from the environment. OUTERLAYER_AGENT\nis optional and defaults to claude. On a later start it refuses variables that disagree with the config in the volume.\nThe image sets OUTERLAYER_RUNNER_IMAGE; outside the image, use `runner start`.\n"
4903
4909
  ).action(async () => {
4904
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
4905
- const { containerStart } = await import('./container-start-AUJHF2BC.js');
4906
- const { start, RunnerStartError } = await import('./loop-OE32U2IZ.js');
4907
- const { RunnerAlreadyRunningError } = await import('./pidfile-BY5Z6YH7.js');
4910
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TWS5VZEN.js');
4911
+ const { containerStart } = await import('./container-start-JE7HTKZG.js');
4912
+ const { start, RunnerStartError } = await import('./loop-2Y4CUFNP.js');
4913
+ const { RunnerAlreadyRunningError } = await import('./pidfile-DKMYYXLH.js');
4908
4914
  try {
4909
4915
  const result = await containerStart({
4910
4916
  env: process.env,
@@ -4922,8 +4928,8 @@ function registerRunnerCommands(program2) {
4922
4928
  }
4923
4929
  });
4924
4930
  runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
4925
- const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
4926
- const { runRunnerCheck } = await import('./check-WJJ325EQ.js');
4931
+ const { defaultRunnerConfigPath } = await import('./config-TWS5VZEN.js');
4932
+ const { runRunnerCheck } = await import('./check-JVBAWIN6.js');
4927
4933
  const configPath = opts.config ?? defaultRunnerConfigPath();
4928
4934
  const result = await runRunnerCheck(configPath);
4929
4935
  if (!result.ok) {
@@ -4944,8 +4950,8 @@ function registerRunnerCommands(program2) {
4944
4950
  `);
4945
4951
  });
4946
4952
  runnerCmd.command("install").description("Put this CLI in the runner's install layout; --service adds its service").option("--config <path>", configOption).option("--service", "set up the service that keeps the runner running").option("--print", "with --service, print the unit and set up nothing").option("--user <account>", "with --service, the account the service runs as").option("--replace", "replace a unit or launcher file this command did not write").option("--allow-downgrade", "install this CLI even when it is older than the version the runner runs").option("--unit-name <name>", "with --service, the unit's name, to run a second runner beside the first").action(async (opts) => {
4947
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
4948
- const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-3DXJJUAA.js');
4953
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TWS5VZEN.js');
4954
+ const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-JMT67P35.js');
4949
4955
  const configPath = opts.config ?? defaultRunnerConfigPath();
4950
4956
  if (opts.service !== true) {
4951
4957
  for (const flag of ["print", "user", "unitName"]) {
@@ -4957,7 +4963,7 @@ function registerRunnerCommands(program2) {
4957
4963
  }
4958
4964
  try {
4959
4965
  if (opts.service === true) {
4960
- const { installServiceCommand } = await import('./command-GQBHC53U.js');
4966
+ const { installServiceCommand } = await import('./command-B2T7VR77.js');
4961
4967
  const result2 = await installServiceCommand({
4962
4968
  configPath,
4963
4969
  print: opts.print,
@@ -5012,8 +5018,8 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
5012
5018
  fail(`pass --service: \`${cliInvocation()} runner uninstall --service\` removes the runner's service.`);
5013
5019
  return;
5014
5020
  }
5015
- const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
5016
- const { uninstallServiceCommand } = await import('./command-GQBHC53U.js');
5021
+ const { defaultRunnerConfigPath } = await import('./config-TWS5VZEN.js');
5022
+ const { uninstallServiceCommand } = await import('./command-B2T7VR77.js');
5017
5023
  const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
5018
5024
  if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
5019
5025
  `);
@@ -5040,12 +5046,12 @@ already in runner.env is used.
5040
5046
  printf '%s' "$CLAUDE_CODE_OAUTH_TOKEN" | ${cliInvocation()} runner init --agent claude --factory <org>/<factory>
5041
5047
  `
5042
5048
  ).action(async (opts) => {
5043
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
5044
- const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-KIGYMLDM.js');
5045
- const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-AZVXBQIB.js');
5046
- const { detectMachine } = await import('./machine-L7INJ4JN.js');
5047
- const { chooseVm, runVmInit, VmInitError } = await import('./init-UZWRJMPZ.js');
5048
- const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-2D7MPOIJ.js');
5049
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TWS5VZEN.js');
5050
+ const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-ETKGFCXR.js');
5051
+ const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-GO277GW2.js');
5052
+ const { detectMachine } = await import('./machine-Z2S47JW7.js');
5053
+ const { chooseVm, runVmInit, VmInitError } = await import('./init-Q2RPUUVP.js');
5054
+ const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-YRRNRKF4.js');
5049
5055
  const configPath = opts.config ?? defaultRunnerConfigPath();
5050
5056
  if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
5051
5057
  fail(`--agent ${opts.agent}: runner init writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")}. For another agent, leave --agent out and edit runner.commands.`);
@@ -5059,7 +5065,7 @@ already in runner.env is used.
5059
5065
  try {
5060
5066
  let credential;
5061
5067
  if (agent !== void 0) {
5062
- const { readPipedKey } = await import('./login-browser-4OMZFP3U.js');
5068
+ const { readPipedKey } = await import('./login-browser-EWXSGHM7.js');
5063
5069
  credential = credentialFromStdin(
5064
5070
  await readPipedKey(process.stdin, {
5065
5071
  onWaiting: () => process.stderr.write(`runner init is waiting for Claude's credential on stdin; close stdin to use the one already in runner.env
@@ -5076,7 +5082,7 @@ already in runner.env is used.
5076
5082
  const chunks = [];
5077
5083
  for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
5078
5084
  const result2 = runRunnerInit(configPath, { machine, configFromStdin: Buffer.concat(chunks).toString("utf8"), requireContainer: true });
5079
- const { ensureHostKey: ensureHostKey2 } = await import('./host-key-5TKBNUZ4.js');
5085
+ const { ensureHostKey: ensureHostKey2 } = await import('./host-key-XNKZCWTS.js');
5080
5086
  const hostKey2 = await ensureHostKey2(configPath);
5081
5087
  process.stdout.write(`host key ${hostKey2.fingerprint}
5082
5088
  hooks: ${result2.hooks}
@@ -5135,7 +5141,7 @@ hooks: ${result2.hooks}
5135
5141
  const prepared = prepareRunnerInit(configPath, { machine, allowProcess, agent, credential, keyFromLogin: makeKey !== void 0 });
5136
5142
  const created = makeKey === void 0 ? void 0 : await makeKey();
5137
5143
  const result = writeRunnerInit(prepared, created);
5138
- const { ensureHostKey } = await import('./host-key-5TKBNUZ4.js');
5144
+ const { ensureHostKey } = await import('./host-key-XNKZCWTS.js');
5139
5145
  const hostKey = await ensureHostKey(configPath);
5140
5146
  if (created !== void 0) {
5141
5147
  process.stdout.write(`${C.green}\u2713${C.reset} saved the runner key in ${result.configPath}
@@ -5163,7 +5169,7 @@ ${C.yellow}${result.note}${C.reset}
5163
5169
  To isolate builds in containers instead, run ${C.yellow}${cliInvocation()} runner init --vm${C.reset}.
5164
5170
  `);
5165
5171
  }
5166
- const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-3DXJJUAA.js');
5172
+ const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-JMT67P35.js');
5167
5173
  let installedLayout = false;
5168
5174
  let noService = "it starts the runner from the install layout, which needs a CLI installed with npm";
5169
5175
  try {
@@ -5195,7 +5201,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
5195
5201
  let serviceUp = false;
5196
5202
  let restart;
5197
5203
  if (installedLayout) {
5198
- const { installServiceCommand } = await import('./command-GQBHC53U.js');
5204
+ const { installServiceCommand } = await import('./command-B2T7VR77.js');
5199
5205
  const service = await installServiceCommand({
5200
5206
  configPath,
5201
5207
  entryPath: process.argv[1] ?? "",
@@ -5239,12 +5245,12 @@ Next:
5239
5245
  "after",
5240
5246
  "\nA repository governed by a control plane builds the control plane's image, at the commit\nthe gateway has stored for it. A repository that governs itself fetches the head of its\ndefault branch into the runner's cache. Either way it reads .devcontainer/devcontainer.json\nand builds the image with the devcontainer CLI. Settings\nthat reach the host or widen the container's privileges are ignored and listed. The\nimage holds this CLI and a pinned Claude Code. Nothing runs inside the image.\n"
5241
5247
  ).action(async (opts) => {
5242
- const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
5243
- const { buildRepositoryImage, RecipeError } = await import('./build-EBQYXL7Y.js');
5248
+ const { defaultRunnerConfigPath } = await import('./config-TWS5VZEN.js');
5249
+ const { buildRepositoryImage, RecipeError } = await import('./build-TNM7HYCA.js');
5244
5250
  const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
5245
- const { createDockerHost } = await import('./docker-NYAIIX2F.js');
5246
- const { builderSpec } = await import('./builder-WEGLC2F2.js');
5247
- const { loadRunnerConfig } = await import('./config-JJ3EO7SB.js');
5251
+ const { createDockerHost } = await import('./docker-MJEEHUUA.js');
5252
+ const { builderSpec } = await import('./builder-LDJGS2JC.js');
5253
+ const { loadRunnerConfig } = await import('./config-TWS5VZEN.js');
5248
5254
  const configPath = opts.config ?? defaultRunnerConfigPath();
5249
5255
  const loaded = (() => {
5250
5256
  try {
@@ -5255,11 +5261,11 @@ Next:
5255
5261
  })();
5256
5262
  const memory = loaded?.build?.memory ?? "8g";
5257
5263
  try {
5258
- const { ensureRunnerIdentity } = await import('./runner-identity-YYENYKDH.js');
5264
+ const { ensureRunnerIdentity } = await import('./runner-identity-EX7HXPUE.js');
5259
5265
  await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
5260
5266
  console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
5261
5267
  });
5262
- const { imageTargetFor } = await import('./governing-source-PTJ6EAA3.js');
5268
+ const { imageTargetFor } = await import('./governing-source-VVUA5TKB.js');
5263
5269
  const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
5264
5270
  if (!target.ok) {
5265
5271
  if (opts.json) {
@@ -5322,25 +5328,25 @@ Next:
5322
5328
  }
5323
5329
  });
5324
5330
  runnerCmd.command("stop").description("Take no more work; finish running jobs, then exit").option("--config <path>", "the cloud config file naming the runner to stop").option("--now", "end running jobs immediately, with outcome stopped").action(async (opts) => {
5325
- const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
5326
- const { requestStop } = await import('./loop-OE32U2IZ.js');
5331
+ const { defaultRunnerConfigPath } = await import('./config-TWS5VZEN.js');
5332
+ const { requestStop } = await import('./loop-2Y4CUFNP.js');
5327
5333
  const configPath = opts.config ?? defaultRunnerConfigPath();
5328
- const { runnerImageVersion } = await import('./image-tag-5SJ6ZKT7.js');
5334
+ const { runnerImageVersion } = await import('./image-tag-R34J4O3F.js');
5329
5335
  await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
5330
5336
  });
5331
5337
  runnerCmd.command("status").description("List running jobs; with --recent, finished ones too").option("--config <path>", "the cloud config file naming the runner to inspect").option("--recent", "also list finished jobs, newest first, capped at 20").option("--json", "machine-readable JSON output").action(async (opts) => {
5332
- const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-JJ3EO7SB.js');
5333
- const { jobsDir, runnerDir } = await import('./paths-ZC6BMWMT.js');
5334
- const { listJobFiles, runnerProcessState } = await import('./loop-OE32U2IZ.js');
5335
- const { renderStatus } = await import('./status-3WC2IGVI.js');
5336
- const { readHousekeepingRecord } = await import('./record-K23IN6QN.js');
5338
+ const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-TWS5VZEN.js');
5339
+ const { jobsDir, runnerDir } = await import('./paths-LHSPNORF.js');
5340
+ const { listJobFiles, runnerProcessState } = await import('./loop-2Y4CUFNP.js');
5341
+ const { renderStatus } = await import('./status-CJCE2FHD.js');
5342
+ const { readHousekeepingRecord } = await import('./record-3LPTY3G5.js');
5337
5343
  const path2 = await import('path');
5338
5344
  const configPath = opts.config ?? defaultRunnerConfigPath();
5339
5345
  const all = listJobFiles(configPath);
5340
5346
  const housekeeping = readHousekeepingRecord(runnerDir(configPath));
5341
- const { readPendingUpdate } = await import('./pending-54HC7MM3.js');
5347
+ const { readPendingUpdate } = await import('./pending-3YZCSKON.js');
5342
5348
  const pendingUpdate = readPendingUpdate(runnerDir(configPath));
5343
- const { readImageStatus } = await import('./image-tag-5SJ6ZKT7.js');
5349
+ const { readImageStatus } = await import('./image-tag-R34J4O3F.js');
5344
5350
  const image = readImageStatus(runnerDir(configPath));
5345
5351
  let host = "unknown";
5346
5352
  let concurrency = 1;
@@ -5353,8 +5359,8 @@ Next:
5353
5359
  const processState = runnerProcessState(configPath);
5354
5360
  const service = await (async () => {
5355
5361
  if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
5356
- const { inspectService, realInspectProbes } = await import('./inspect-6UYAAXH7.js');
5357
- const { DEFAULT_UNIT_NAME } = await import('./install-QSTTBUHX.js');
5362
+ const { inspectService, realInspectProbes } = await import('./inspect-IPFA7AAT.js');
5363
+ const { DEFAULT_UNIT_NAME } = await import('./install-6OIY3KHZ.js');
5358
5364
  const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
5359
5365
  return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
5360
5366
  })();
@@ -5391,9 +5397,9 @@ Next:
5391
5397
  );
5392
5398
  });
5393
5399
  runnerCmd.command("logs").argument("<item>", "the work item's number in the factory").description("Print the newest attempt's log for one item").option("--config <path>", "the cloud config file naming the runner to inspect").option("-f, --follow", "keep printing as the log grows").action(async (itemArg, opts) => {
5394
- const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
5395
- const { listJobFiles } = await import('./loop-OE32U2IZ.js');
5396
- const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-VN2HKDSH.js');
5400
+ const { defaultRunnerConfigPath } = await import('./config-TWS5VZEN.js');
5401
+ const { listJobFiles } = await import('./loop-2Y4CUFNP.js');
5402
+ const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-XHAS6LMZ.js');
5397
5403
  const configPath = opts.config ?? defaultRunnerConfigPath();
5398
5404
  const item = parseTrackerNumber(itemArg);
5399
5405
  if (item === void 0) {
@@ -5602,7 +5608,7 @@ Self-host deployments also need --app-id: without a key service to resolve the
5602
5608
  caller from the bearer token, the gateway answers 401 without that header.
5603
5609
  `
5604
5610
  ).action(async (opts) => {
5605
- const { runMcpInstall, handleMcpInstallError, McpInstallError } = await import('./mcp-install-cmd-GGWB3JJ2.js');
5611
+ const { runMcpInstall, handleMcpInstallError, McpInstallError } = await import('./mcp-install-cmd-LD7KYAOP.js');
5606
5612
  try {
5607
5613
  if (opts.transport !== void 0 && opts.transport !== "stdio" && opts.transport !== "http") {
5608
5614
  throw new McpInstallError(`--transport must be "stdio" or "http", got "${opts.transport}"`);
@@ -5624,7 +5630,7 @@ caller from the bearer token, the gateway answers 401 without that header.
5624
5630
  "after",
5625
5631
  "\nWhat the stdio .mcp.json entry spawns. Reads newline-delimited JSON-RPC 2.0 on\nstdin and writes responses on stdout. The API key comes from OUTERLAYER_API_KEY\nor ~/.outerlayer/config.json at start-up; with neither the command exits 1 and\nprints why, which the MCP client shows as the connect error.\n"
5626
5632
  ).action(async (opts) => {
5627
- const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-U5N5DK3H.js');
5633
+ const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-LY5A3CE7.js');
5628
5634
  try {
5629
5635
  await runMcpServe({ url: opts.url, appId: opts.appId });
5630
5636
  } catch (err) {