@outerlayer/cli 0.28.3 → 0.29.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 (127) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/{agent-setup-IDF3EXM4.js → agent-setup-S3KI7TER.js} +14 -14
  3. package/dist/{artifact-link-cmd-LEI6EOZE.js → artifact-link-cmd-LIJEXVN5.js} +2 -2
  4. package/dist/{bridge-JN3VJ23L.js → bridge-CP25XV3W.js} +2 -2
  5. package/dist/{build-JCYOHPLL.js → build-ZS4Y5MJU.js} +4 -4
  6. package/dist/build-info.json +1 -1
  7. package/dist/{builder-HCTVP2O7.js → builder-FDUOMHY3.js} +6 -6
  8. package/dist/{check-F2TJCQ7S.js → check-5XB22HKS.js} +42 -41
  9. package/dist/{chunk-6NFXOQKZ.js → chunk-23PFIW35.js} +1 -1
  10. package/dist/{chunk-SATUCMAJ.js → chunk-25Z6SBMQ.js} +2 -2
  11. package/dist/{chunk-W7BH5YN6.js → chunk-2KOXAMMB.js} +39 -28
  12. package/dist/{chunk-EPGMCEVP.js → chunk-2YLKMVFV.js} +2 -2
  13. package/dist/{chunk-QBF462QH.js → chunk-3KMYWLMK.js} +1 -1
  14. package/dist/{chunk-5B7BEQPR.js → chunk-427AVP6J.js} +2 -2
  15. package/dist/{chunk-VWFOKRYS.js → chunk-42TFWHFF.js} +1 -1
  16. package/dist/{chunk-X7SFJZIG.js → chunk-6AG2XW5S.js} +29 -10
  17. package/dist/{chunk-BUP5N3X6.js → chunk-6XQPCQBW.js} +1 -1
  18. package/dist/{chunk-WL3QF3QF.js → chunk-77YT7YC4.js} +18 -16
  19. package/dist/{chunk-EZ3DZXUH.js → chunk-7H7RUQCZ.js} +3 -3
  20. package/dist/{chunk-LRFU6RPD.js → chunk-A2E7MU2H.js} +55 -47
  21. package/dist/{chunk-MFI55TNI.js → chunk-BFA2LNJG.js} +22 -6
  22. package/dist/{chunk-N5EEEKT6.js → chunk-C7F6U2YZ.js} +3 -2
  23. package/dist/{chunk-M6NNXKRM.js → chunk-CU7TJL6S.js} +1 -1
  24. package/dist/{chunk-T7LJ6AIC.js → chunk-D3D2CERC.js} +5 -5
  25. package/dist/{chunk-RKOTJQVG.js → chunk-DXI6A6JN.js} +10 -4
  26. package/dist/{chunk-KJIUFOC4.js → chunk-F72ABZRD.js} +1 -1
  27. package/dist/{chunk-UXLLWIA2.js → chunk-FA6XWYRH.js} +7 -7
  28. package/dist/{chunk-P2RWZCV7.js → chunk-FUGRIAG7.js} +2 -2
  29. package/dist/{chunk-JYVBEWBC.js → chunk-GG3WS4C5.js} +3 -3
  30. package/dist/{chunk-O47BTZSN.js → chunk-GI73HOI2.js} +1 -1
  31. package/dist/{chunk-2BZTGJII.js → chunk-GJJDPZS2.js} +7 -7
  32. package/dist/{chunk-QKXF7CLR.js → chunk-GJOF6357.js} +4 -4
  33. package/dist/{chunk-TG7FAHRP.js → chunk-H6DGJBXG.js} +5 -5
  34. package/dist/{chunk-QFNFBQCG.js → chunk-HRWL7NSJ.js} +5 -5
  35. package/dist/chunk-I3LTIAOR.js +11 -0
  36. package/dist/{chunk-OOUHNKKX.js → chunk-IG45QISA.js} +2 -2
  37. package/dist/{chunk-AV5MJY45.js → chunk-IGEJUPDE.js} +3 -3
  38. package/dist/{chunk-QZBXLLTV.js → chunk-JL6VZHAJ.js} +38 -1
  39. package/dist/{chunk-RXFKXZJS.js → chunk-KBIJZAH4.js} +1 -1
  40. package/dist/{chunk-UHU7H57K.js → chunk-LKN4J37L.js} +151 -34
  41. package/dist/{chunk-ILU6664L.js → chunk-M4QY7YZ5.js} +360 -74
  42. package/dist/{chunk-4SJ57DH7.js → chunk-MO2NI6W6.js} +35 -27
  43. package/dist/{chunk-HWOU2HDH.js → chunk-MX3PPJNS.js} +1 -1
  44. package/dist/{chunk-ITAIEJ2T.js → chunk-MZJAIRXM.js} +4 -4
  45. package/dist/{chunk-YYGXCRIW.js → chunk-NAHTO4XM.js} +1 -1
  46. package/dist/{chunk-JGML2VUN.js → chunk-NX2G6PH6.js} +1 -1
  47. package/dist/{chunk-OO6OADZN.js → chunk-OD6WUNKZ.js} +3 -3
  48. package/dist/{chunk-DSKOHPXN.js → chunk-OKAJSYZ2.js} +1 -1
  49. package/dist/{chunk-DWVAG73B.js → chunk-PAHZQQB3.js} +1 -1
  50. package/dist/{chunk-NMIYK2G2.js → chunk-PGA5BVHQ.js} +3 -3
  51. package/dist/{chunk-YTR435DO.js → chunk-PP7C7JQO.js} +3 -3
  52. package/dist/{chunk-DQYMQ47E.js → chunk-S2Q65ZOT.js} +1 -1
  53. package/dist/{chunk-R7TMTFJP.js → chunk-SHVE5JZO.js} +1 -1
  54. package/dist/{chunk-JZJLKTZT.js → chunk-SN3C57RV.js} +5 -5
  55. package/dist/{chunk-TOHKSZKI.js → chunk-TZGQQY7Y.js} +7 -7
  56. package/dist/{chunk-VM6BX2WJ.js → chunk-UPKFSNSU.js} +5 -5
  57. package/dist/{chunk-TCBVV2JK.js → chunk-V47KJGNE.js} +3 -3
  58. package/dist/{chunk-NKD5BNRX.js → chunk-VT3BKV5D.js} +3 -3
  59. package/dist/{chunk-HOU33DW5.js → chunk-VY4YVFL5.js} +1 -1
  60. package/dist/{chunk-SVODOMYC.js → chunk-WEMNLTWB.js} +7 -7
  61. package/dist/{chunk-DIQN5SEL.js → chunk-YSH4KCUJ.js} +1 -1
  62. package/dist/{claude-launcher-LVYZ4YJI.js → claude-launcher-SHIQTBS6.js} +5 -5
  63. package/dist/{cli-5LLFR2SX.js → cli-EN2WGVM6.js} +126 -120
  64. package/dist/{command-YXOMIXOJ.js → command-2VFWA2RF.js} +30 -30
  65. package/dist/{config-TNV5HHLO.js → config-HJQ4YE57.js} +2 -2
  66. package/dist/{connect-cmd-43IWARIV.js → connect-cmd-T6IAT5FT.js} +12 -12
  67. package/dist/{container-start-YG45GLFE.js → container-start-C5ZCXXMF.js} +29 -29
  68. package/dist/{context-cleanup-LTH77FC3.js → context-cleanup-MV3X6NSF.js} +3 -3
  69. package/dist/{control-plane-launch-TIK265OT.js → control-plane-launch-5FZ6LJOC.js} +10 -10
  70. package/dist/{dist-JFVKLUHL.js → dist-H5IYGH3T.js} +2 -2
  71. package/dist/{docker-2IIRBQAB.js → docker-RFN6UWTT.js} +6 -6
  72. package/dist/{doctor-3SRHLRF5.js → doctor-VXDBXKSL.js} +32 -32
  73. package/dist/{emit-artifact-cmd-RM2X3PBJ.js → emit-artifact-cmd-M52RLUBU.js} +16 -16
  74. package/dist/{emit-cmd-QUABLVO6.js → emit-cmd-HTNETHAE.js} +6 -6
  75. package/dist/{emit-criteria-cmd-ZUI7DFND.js → emit-criteria-cmd-APDCA6FK.js} +13 -13
  76. package/dist/{emit-finding-cmd-W2FU4CCF.js → emit-finding-cmd-XEX5XVVI.js} +13 -13
  77. package/dist/{emit-result-cmd-JINMQ7QG.js → emit-result-cmd-HFC3WDWB.js} +52 -25
  78. package/dist/{emit-step-cmd-7FZWQTV3.js → emit-step-cmd-LTRPF2YX.js} +14 -14
  79. package/dist/{exec-client-6ZJJ4KVH.js → exec-client-GHFNXOY6.js} +3 -3
  80. package/dist/{fleet-readiness-3A67MUAU.js → fleet-readiness-SJA7NFR2.js} +12 -12
  81. package/dist/{governing-source-KQMKM5CI.js → governing-source-PBYOKKAJ.js} +17 -17
  82. package/dist/{guest-init-A4HHI2UR.js → guest-init-MQRIALWR.js} +4 -4
  83. package/dist/{hook-fast-UJPAWDAO.js → hook-fast-JKYCVO4R.js} +1 -1
  84. package/dist/{host-key-NGRCMJZ7.js → host-key-DBYH3RTZ.js} +3 -3
  85. package/dist/{image-tag-TEOKZVD5.js → image-tag-XNODAHAW.js} +3 -3
  86. package/dist/index.js +4 -4
  87. package/dist/{init-XP55Q4ZT.js → init-JJPJ2XLL.js} +29 -29
  88. package/dist/{init-HQW3LHIF.js → init-ZUMSDYMW.js} +29 -29
  89. package/dist/{init-cmd-XSOVMNNE.js → init-cmd-342RW7DZ.js} +22 -22
  90. package/dist/{init-update-MZ4IRFC7.js → init-update-4MCW5W72.js} +21 -21
  91. package/dist/{install-NPTR35MG.js → install-GODA5G7U.js} +4 -4
  92. package/dist/{install-cmd-4PXPAFQX.js → install-cmd-YNQ5DCZP.js} +5 -5
  93. package/dist/{layout-BBTQPS6V.js → layout-DBAL2HTQ.js} +4 -4
  94. package/dist/{login-browser-WSOSQH2T.js → login-browser-B6E4GNIF.js} +2 -2
  95. package/dist/{logs-Z4L4I3OR.js → logs-KAG3MAUO.js} +2 -2
  96. package/dist/loop-ZXJFOVCS.js +81 -0
  97. package/dist/{machine-ATDPHWL5.js → machine-F3TVUBZY.js} +25 -25
  98. package/dist/{machine-skills-O7W6NMWB.js → machine-skills-6MLTVBCF.js} +4 -4
  99. package/dist/{mcp-serve-cmd-NQM2WDYI.js → mcp-serve-cmd-SGISNCB3.js} +4 -4
  100. package/dist/{paths-2VSGK6E2.js → paths-PG4JNLZG.js} +2 -2
  101. package/dist/{pending-SFZ2AYSK.js → pending-GG252ERT.js} +3 -3
  102. package/dist/{pidfile-3FT5OLUE.js → pidfile-7SYDMT2O.js} +3 -3
  103. package/dist/{record-7SSRLSI2.js → record-ZGUOOYJH.js} +3 -3
  104. package/dist/{runner-env-2Z2DVSUJ.js → runner-env-WI6LKWIU.js} +5 -5
  105. package/dist/{runner-identity-B37HHOZR.js → runner-identity-JIC54L5Q.js} +6 -6
  106. package/dist/{runner-key-SICUOQY5.js → runner-key-RXCKMQRL.js} +29 -29
  107. package/dist/{session-sender-7MSVJZ6Q.js → session-sender-JAAMA5E6.js} +17 -17
  108. package/dist/{spec-cmd-KAQ7MX4O.js → spec-cmd-BUFLEQ6L.js} +14 -14
  109. package/dist/{starter-pack-5SOT5V4I.js → starter-pack-I5W5JAYT.js} +5 -5
  110. package/dist/{status-AI22UPKC.js → status-E7V365CD.js} +33 -32
  111. package/dist/{sync-cmd-7K3WVQKO.js → sync-cmd-U5FUBXJY.js} +16 -16
  112. package/dist/{watch-NCYESLO2.js → watch-AOPZJOUM.js} +16 -16
  113. package/dist/{work-claim-cmd-IOUEHYIY.js → work-claim-cmd-Z2UZD37I.js} +17 -17
  114. package/dist/{work-cmd-FOI74X5B.js → work-cmd-XLVQDNTC.js} +14 -14
  115. package/dist/{work-comment-cmd-3C44H4CG.js → work-comment-cmd-THLQUSMH.js} +14 -14
  116. package/dist/{work-logs-cmd-YGAWCX3X.js → work-logs-cmd-2NFG6ZY6.js} +14 -14
  117. package/dist/{work-open-pr-cmd-HUG5HAVC.js → work-open-pr-cmd-J22A2YCD.js} +15 -15
  118. package/dist/{work-pr-cmd-L2EDOYXH.js → work-pr-cmd-SYAENEH4.js} +14 -14
  119. package/dist/{work-stop-cmd-GGDVKC67.js → work-stop-cmd-FP453YCB.js} +14 -14
  120. package/package.json +1 -1
  121. package/skill-pack/maintained/outerlayer-amend/SKILL.md +40 -39
  122. package/skill-pack/maintained/outerlayer-build/SKILL.md +5 -9
  123. package/skill-pack/maintained/outerlayer-build/references/criteria-judge.md +15 -12
  124. package/skill-pack/maintained/outerlayer-build/references/release.md +11 -6
  125. package/skill-pack/shipped.json +1 -0
  126. package/skill-pack/validators/acceptance-criteria.yaml +7 -2
  127. package/dist/loop-QQBLJ7GN.js +0 -80
@@ -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-W7BH5YN6.js';
4
- import './chunk-ITAIEJ2T.js';
5
- import './chunk-TOHKSZKI.js';
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';
6
6
  import './chunk-KT4CN6OU.js';
7
- import './chunk-SATUCMAJ.js';
8
- import { verifiedTrackerNames, TRACKERS } from './chunk-X7SFJZIG.js';
9
- import './chunk-NMIYK2G2.js';
10
- import './chunk-QFNFBQCG.js';
11
- import './chunk-BUP5N3X6.js';
12
- import './chunk-UHU7H57K.js';
13
- import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-5B7BEQPR.js';
14
- import './chunk-HOU33DW5.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';
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-P2RWZCV7.js';
18
- import './chunk-KJIUFOC4.js';
17
+ import './chunk-FUGRIAG7.js';
18
+ import './chunk-F72ABZRD.js';
19
19
  import './chunk-PJDQPF5N.js';
20
- import './chunk-R7TMTFJP.js';
21
- import './chunk-DWVAG73B.js';
22
- import './chunk-N5EEEKT6.js';
23
- import { hookFiredMarkerPath, installedCliDistDir } from './chunk-OOUHNKKX.js';
20
+ import './chunk-SHVE5JZO.js';
21
+ import './chunk-PAHZQQB3.js';
22
+ import './chunk-C7F6U2YZ.js';
23
+ import { hookFiredMarkerPath, installedCliDistDir } from './chunk-IG45QISA.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-DQYMQ47E.js';
30
- import './chunk-JGML2VUN.js';
29
+ import './chunk-S2Q65ZOT.js';
30
+ import './chunk-NX2G6PH6.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-VWFOKRYS.js';
37
+ import './chunk-42TFWHFF.js';
38
38
  import { cloneIsGoverned } from './chunk-YQR6E6OV.js';
39
39
  import { removeJournalHooks, removePreCommitGuardHook } from './chunk-TUSYOL2O.js';
40
- import './chunk-RKOTJQVG.js';
41
- import './chunk-QZBXLLTV.js';
40
+ import './chunk-DXI6A6JN.js';
41
+ import './chunk-JL6VZHAJ.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-5SOT5V4I.js');
3661
+ const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-I5W5JAYT.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-BBTQPS6V.js');
3668
+ const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-DBAL2HTQ.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-O7W6NMWB.js');
3794
+ const { setupMachineSkills } = await import('./machine-skills-6MLTVBCF.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-43IWARIV.js');
3803
- const { resolveRepoIdentity } = await import('./dist-JFVKLUHL.js');
3802
+ const { realConnectDeps } = await import('./connect-cmd-T6IAT5FT.js');
3803
+ const { resolveRepoIdentity } = await import('./dist-H5IYGH3T.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-O7W6NMWB.js');
3820
+ const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-6MLTVBCF.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-MZ4IRFC7.js');
3878
- const { fleetReadiness } = await import('./fleet-readiness-3A67MUAU.js');
3877
+ const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-4MCW5W72.js');
3878
+ const { fleetReadiness } = await import('./fleet-readiness-SJA7NFR2.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-5SOT5V4I.js');
3895
+ const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-I5W5JAYT.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-XSOVMNNE.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-342RW7DZ.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-XSOVMNNE.js');
3935
+ const { runInitCommand } = await import('./init-cmd-342RW7DZ.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-IDF3EXM4.js');
3947
+ const { runAgentSetup } = await import('./agent-setup-S3KI7TER.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-43IWARIV.js');
3956
+ const { promptOnTerminal } = await import('./connect-cmd-T6IAT5FT.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-43IWARIV.js');
3995
+ const { runConnectCommand } = await import('./connect-cmd-T6IAT5FT.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-WSOSQH2T.js');
4034
+ const { runLoginCommand, realLoginDeps } = await import('./login-browser-B6E4GNIF.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-LEI6EOZE.js');
4067
+ const { lookupArtifactLink } = await import('./artifact-link-cmd-LIJEXVN5.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-7K3WVQKO.js');
4073
+ const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-U5FUBXJY.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-NCYESLO2.js');
4104
+ const { runWatch } = await import('./watch-AOPZJOUM.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-6ZJJ4KVH.js');
4165
+ const { runVmExec } = await import('./exec-client-GHFNXOY6.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-7MSVJZ6Q.js');
4194
+ const { runSessionSender } = await import('./session-sender-JAAMA5E6.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-A4HHI2UR.js');
4202
+ const { realGuestHost, runGuestInit } = await import('./guest-init-MQRIALWR.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-JN3VJ23L.js');
4211
+ const { startBridgeForward } = await import('./bridge-CP25XV3W.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-QUABLVO6.js');
4237
+ const { runEmit, EmitError } = await import('./emit-cmd-HTNETHAE.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;
@@ -4247,7 +4247,7 @@ async function compileContext(opts) {
4247
4247
  }
4248
4248
  }
4249
4249
  function registerEmitCommands(program2) {
4250
- const emitCmd = program2.command("emit").enablePositionalOptions().description("Record evidence for a work item: a named check result").argument("[name]", "the check name a validator declares (e.g. smoke.pass)").option("--link <url>", "proof link, usually the CI run URL").option("--body <text>", "one sentence recording your judgment").option("--body-file <path>", "read the sentence from a file; - reads standard input").option("--result <pass|fail>", "check outcome (default: pass)").option("--item <number>", "work item to record on directly, 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)").addOption(new Option("--check", "deprecated: use `context emit --check`").hideHelp()).addOption(new Option("--dir <path>", "deprecated: use `context emit --dir`").hideHelp()).addHelpText(
4250
+ const emitCmd = program2.command("emit").enablePositionalOptions().description("Record evidence for a work item: a named check result").argument("[name]", "the check name a validator declares (e.g. smoke.pass)").option("--link <url>", "proof link, usually the CI run URL").option("--body <text>", "one sentence recording your judgment").option("--body-file <path>", "read the sentence from a file; - reads standard input").option("--items <path>", "check items to record, as a JSON array; - reads standard input").option("--result <pass|fail>", "check outcome (default: pass, or fail when a check item fails)").option("--item <number>", "work item to record on directly, 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)").addOption(new Option("--check", "deprecated: use `context emit --check`").hideHelp()).addOption(new Option("--dir <path>", "deprecated: use `context emit --dir`").hideHelp()).addHelpText(
4251
4251
  "after",
4252
4252
  `
4253
4253
  ${cliInvocation()} emit smoke.pass --item 412 --link https://ci.example.com/run/42
@@ -4262,6 +4262,11 @@ least one of the two. Run from inside a session, the check is stored as
4262
4262
  the session's; a session cannot record over a person's fail. With
4263
4263
  nothing to attach it to, the command refuses.
4264
4264
 
4265
+ --items names a JSON array of check items, one per thing the check judged:
4266
+ [{"id": "AC-12-03", "criterion": "AC-12-03", "result": "fail", "reason": "..."}]
4267
+ A check item's result is pass, fail or skipped; \`criterion\` joins it to
4268
+ that acceptance criterion. A failing check item fails the check.
4269
+
4265
4270
  Who recorded a check is decided by your API key, never by what you send:
4266
4271
  a key bound to your membership records it as yours, and nothing automated
4267
4272
  can then clear it.
@@ -4281,13 +4286,14 @@ Compiling .outerlayer/ moved to \`${cliInvocation()} context emit\`.
4281
4286
  await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
4282
4287
  return;
4283
4288
  }
4284
- const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-JINMQ7QG.js');
4289
+ const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-HFC3WDWB.js');
4285
4290
  try {
4286
4291
  const result = await runEmitResult({
4287
4292
  name,
4288
4293
  link: opts.link,
4289
4294
  body: opts.body,
4290
4295
  bodyFile: opts.bodyFile,
4296
+ itemsFile: opts.items,
4291
4297
  result: opts.result,
4292
4298
  item: opts.item,
4293
4299
  json: opts.json,
@@ -4331,7 +4337,7 @@ everywhere, bytes and deep link untouched; a still-queued one is cancelled
4331
4337
  locally so it never uploads. One correction can retire several duplicates.
4332
4338
  `
4333
4339
  ).action(async (file, opts) => {
4334
- const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-RM2X3PBJ.js');
4340
+ const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-M52RLUBU.js');
4335
4341
  let pr;
4336
4342
  if (opts.pr !== void 0) {
4337
4343
  pr = parseTrackerNumber(opts.pr);
@@ -4390,7 +4396,7 @@ recent events with their ids. --find <text> searches all of them.
4390
4396
  item that session was launched for is used automatically.
4391
4397
  `
4392
4398
  ).action(async (opts) => {
4393
- const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-W2FU4CCF.js');
4399
+ const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-XEX5XVVI.js');
4394
4400
  try {
4395
4401
  refuseRemovedFindingFlags(opts);
4396
4402
  const result = await runEmitFinding({
@@ -4457,7 +4463,7 @@ the whole batch. "untimed": true records one with no time on purpose.
4457
4463
  that session was launched for is used automatically.
4458
4464
  `
4459
4465
  ).action(async (file, opts) => {
4460
- const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-W2FU4CCF.js');
4466
+ const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-XEX5XVVI.js');
4461
4467
  try {
4462
4468
  const result = await runEmitFindings({
4463
4469
  file,
@@ -4492,7 +4498,7 @@ command, the command exits 0, and \`sync\` sends it later. If the gateway refuse
4492
4498
  the step, the command prints why and exits 1.
4493
4499
  `
4494
4500
  ).action(async (name, opts) => {
4495
- const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-7FZWQTV3.js');
4501
+ const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-LTRPF2YX.js');
4496
4502
  try {
4497
4503
  await runEmitStep({
4498
4504
  name,
@@ -4535,7 +4541,7 @@ of the item, and a (proof: <kind>) annotation names its proof.
4535
4541
  ${cliInvocation()} emit criteria acceptance/412-login.md --item 412
4536
4542
  `
4537
4543
  ).action(async (file, opts) => {
4538
- const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-ZUI7DFND.js');
4544
+ const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-APDCA6FK.js');
4539
4545
  try {
4540
4546
  const result = await runEmitCriteria({
4541
4547
  file,
@@ -4559,9 +4565,9 @@ function registerSpecCommands(program2) {
4559
4565
  const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
4560
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)");
4561
4567
  const run = async (action) => {
4562
- const { WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4568
+ const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4563
4569
  try {
4564
- await action(await import('./spec-cmd-KAQ7MX4O.js'));
4570
+ await action(await import('./spec-cmd-BUFLEQ6L.js'));
4565
4571
  } catch (err) {
4566
4572
  if (err instanceof WorkCommandError) {
4567
4573
  fail(err.message);
@@ -4603,7 +4609,7 @@ takes it, and prints the line that starts your session on it. That
4603
4609
  session links itself and holds the item's lease while it works.
4604
4610
  `
4605
4611
  ).action(async (opts) => {
4606
- const { runWorkBuild, WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4612
+ const { runWorkBuild, WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4607
4613
  try {
4608
4614
  await runWorkBuild(opts);
4609
4615
  } catch (err) {
@@ -4626,7 +4632,7 @@ renews that session's own 20-minute lease, unless --no-lease or
4626
4632
  --ended is given, or another worker already holds a live one.
4627
4633
  `
4628
4634
  ).action(async (number, opts) => {
4629
- const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4635
+ const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4630
4636
  try {
4631
4637
  await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
4632
4638
  } catch (err) {
@@ -4650,8 +4656,8 @@ criterion's new proof; --ready hands the thread back to a person. At
4650
4656
  most one action flag may be given.
4651
4657
  `
4652
4658
  ).action(async (opts) => {
4653
- const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-3C44H4CG.js');
4654
- const { WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4659
+ const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-THLQUSMH.js');
4660
+ const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4655
4661
  try {
4656
4662
  await runWorkComment(opts);
4657
4663
  } catch (err) {
@@ -4672,8 +4678,8 @@ criterion that carries proof or a comment, each with who is waiting
4672
4678
  on whom next.
4673
4679
  `
4674
4680
  ).action(async (opts) => {
4675
- const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-3C44H4CG.js');
4676
- const { WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4681
+ const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-THLQUSMH.js');
4682
+ const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4677
4683
  try {
4678
4684
  await runWorkThreads(opts);
4679
4685
  } catch (err) {
@@ -4697,8 +4703,8 @@ still running, or that an older runner released, has no log and the
4697
4703
  command exits 1.
4698
4704
  `
4699
4705
  ).action(async (opts) => {
4700
- const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-YGAWCX3X.js');
4701
- const { WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4706
+ const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-2NFG6ZY6.js');
4707
+ const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4702
4708
  try {
4703
4709
  await runWorkLogs(opts);
4704
4710
  } catch (err) {
@@ -4721,8 +4727,8 @@ item is not built again until a new build request. Exits 1 when no host
4721
4727
  build is running for the item.
4722
4728
  `
4723
4729
  ).action(async (opts) => {
4724
- const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-GGDVKC67.js');
4725
- const { WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4730
+ const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-FP453YCB.js');
4731
+ const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4726
4732
  try {
4727
4733
  await runWorkStop(opts);
4728
4734
  } catch (err) {
@@ -4743,7 +4749,7 @@ deletes anything \u2014 the item is removed from Work only once no
4743
4749
  live addition remains on it.
4744
4750
  `
4745
4751
  ).action(async (opts) => {
4746
- const { runWorkRemove, WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4752
+ const { runWorkRemove, WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4747
4753
  try {
4748
4754
  await runWorkRemove(opts);
4749
4755
  } catch (err) {
@@ -4755,7 +4761,7 @@ live addition remains on it.
4755
4761
  }
4756
4762
  });
4757
4763
  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) => {
4758
- const { runWorkStatus, WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4764
+ const { runWorkStatus, WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4759
4765
  try {
4760
4766
  await runWorkStatus(opts);
4761
4767
  } catch (err) {
@@ -4767,7 +4773,7 @@ live addition remains on it.
4767
4773
  }
4768
4774
  });
4769
4775
  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) => {
4770
- const { runWorkList, WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4776
+ const { runWorkList, WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4771
4777
  try {
4772
4778
  await runWorkList(opts);
4773
4779
  } catch (err) {
@@ -4788,7 +4794,7 @@ by a different key is refused; claiming again with the same key extends
4788
4794
  it. --host is a label only.
4789
4795
  `
4790
4796
  ).action(async (opts) => {
4791
- const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-IOUEHYIY.js');
4797
+ const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-Z2UZD37I.js');
4792
4798
  try {
4793
4799
  await runWorkClaim(opts);
4794
4800
  } catch (err) {
@@ -4808,7 +4814,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
4808
4814
  lease has expired, or a 403 if a different key holds it.
4809
4815
  `
4810
4816
  ).action(async (opts) => {
4811
- const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-IOUEHYIY.js');
4817
+ const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-Z2UZD37I.js');
4812
4818
  try {
4813
4819
  await runWorkRenew(opts);
4814
4820
  } catch (err) {
@@ -4840,7 +4846,7 @@ applies to a host's lease only. A later tool call in the session
4840
4846
  takes the lease again.
4841
4847
  `
4842
4848
  ).action(async (opts) => {
4843
- const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-IOUEHYIY.js');
4849
+ const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-Z2UZD37I.js');
4844
4850
  try {
4845
4851
  await runWorkRelease(opts);
4846
4852
  } catch (err) {
@@ -4867,7 +4873,7 @@ Idempotent: declaring the same pull request twice is a no-op.
4867
4873
  needs your own login; an agent session or a factory key is refused.
4868
4874
  `
4869
4875
  ).action(async (number, opts) => {
4870
- const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-L2EDOYXH.js');
4876
+ const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-SYAENEH4.js');
4871
4877
  try {
4872
4878
  await runWorkPr({ ...opts, number });
4873
4879
  } catch (err) {
@@ -4892,8 +4898,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
4892
4898
  Run it again after a change to the title or description.
4893
4899
  `
4894
4900
  ).action(async (opts) => {
4895
- const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-HUG5HAVC.js');
4896
- const { WorkCommandError } = await import('./work-cmd-FOI74X5B.js');
4901
+ const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-J22A2YCD.js');
4902
+ const { WorkCommandError } = await import('./work-cmd-XLVQDNTC.js');
4897
4903
  try {
4898
4904
  await runWorkOpenPr(opts);
4899
4905
  } catch (err) {
@@ -4909,9 +4915,9 @@ function registerRunnerCommands(program2) {
4909
4915
  const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
4910
4916
  const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
4911
4917
  runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
4912
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TNV5HHLO.js');
4913
- const { start, RunnerStartError } = await import('./loop-QQBLJ7GN.js');
4914
- const { RunnerAlreadyRunningError } = await import('./pidfile-3FT5OLUE.js');
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');
4915
4921
  const configPath = opts.config ?? defaultRunnerConfigPath();
4916
4922
  try {
4917
4923
  const { realUpdateDeps } = await import('./real-deps-QX5YH7FG.js');
@@ -4928,10 +4934,10 @@ function registerRunnerCommands(program2) {
4928
4934
  "after",
4929
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"
4930
4936
  ).action(async () => {
4931
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TNV5HHLO.js');
4932
- const { containerStart } = await import('./container-start-YG45GLFE.js');
4933
- const { start, RunnerStartError } = await import('./loop-QQBLJ7GN.js');
4934
- const { RunnerAlreadyRunningError } = await import('./pidfile-3FT5OLUE.js');
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');
4935
4941
  try {
4936
4942
  const result = await containerStart({
4937
4943
  env: process.env,
@@ -4949,8 +4955,8 @@ function registerRunnerCommands(program2) {
4949
4955
  }
4950
4956
  });
4951
4957
  runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
4952
- const { defaultRunnerConfigPath } = await import('./config-TNV5HHLO.js');
4953
- const { runRunnerCheck } = await import('./check-F2TJCQ7S.js');
4958
+ const { defaultRunnerConfigPath } = await import('./config-HJQ4YE57.js');
4959
+ const { runRunnerCheck } = await import('./check-5XB22HKS.js');
4954
4960
  const configPath = opts.config ?? defaultRunnerConfigPath();
4955
4961
  const result = await runRunnerCheck(configPath);
4956
4962
  if (!result.ok) {
@@ -4971,8 +4977,8 @@ function registerRunnerCommands(program2) {
4971
4977
  `);
4972
4978
  });
4973
4979
  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) => {
4974
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TNV5HHLO.js');
4975
- const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-4PXPAFQX.js');
4980
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-HJQ4YE57.js');
4981
+ const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-YNQ5DCZP.js');
4976
4982
  const configPath = opts.config ?? defaultRunnerConfigPath();
4977
4983
  if (opts.service !== true) {
4978
4984
  for (const flag of ["print", "user", "unitName"]) {
@@ -4984,7 +4990,7 @@ function registerRunnerCommands(program2) {
4984
4990
  }
4985
4991
  try {
4986
4992
  if (opts.service === true) {
4987
- const { installServiceCommand } = await import('./command-YXOMIXOJ.js');
4993
+ const { installServiceCommand } = await import('./command-2VFWA2RF.js');
4988
4994
  const result2 = await installServiceCommand({
4989
4995
  configPath,
4990
4996
  print: opts.print,
@@ -5039,8 +5045,8 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
5039
5045
  fail(`pass --service: \`${cliInvocation()} runner uninstall --service\` removes the runner's service.`);
5040
5046
  return;
5041
5047
  }
5042
- const { defaultRunnerConfigPath } = await import('./config-TNV5HHLO.js');
5043
- const { uninstallServiceCommand } = await import('./command-YXOMIXOJ.js');
5048
+ const { defaultRunnerConfigPath } = await import('./config-HJQ4YE57.js');
5049
+ const { uninstallServiceCommand } = await import('./command-2VFWA2RF.js');
5044
5050
  const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
5045
5051
  if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
5046
5052
  `);
@@ -5067,12 +5073,12 @@ already in claude.env is used.
5067
5073
  printf '%s' "$CLAUDE_CODE_OAUTH_TOKEN" | ${cliInvocation()} runner init --agent claude --factory <org>/<factory>
5068
5074
  `
5069
5075
  ).action(async (opts) => {
5070
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TNV5HHLO.js');
5071
- const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-HQW3LHIF.js');
5072
- const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-SICUOQY5.js');
5073
- const { detectMachine } = await import('./machine-ATDPHWL5.js');
5074
- const { chooseVm, runVmInit, VmInitError } = await import('./init-XP55Q4ZT.js');
5075
- const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-2Z2DVSUJ.js');
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');
5076
5082
  const configPath = opts.config ?? defaultRunnerConfigPath();
5077
5083
  if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
5078
5084
  fail(`--agent ${opts.agent}: runner init writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")}. For another agent, leave --agent out and edit runner.commands.`);
@@ -5086,7 +5092,7 @@ already in claude.env is used.
5086
5092
  try {
5087
5093
  let credential;
5088
5094
  if (agent !== void 0) {
5089
- const { readPipedKey } = await import('./login-browser-WSOSQH2T.js');
5095
+ const { readPipedKey } = await import('./login-browser-B6E4GNIF.js');
5090
5096
  credential = credentialFromStdin(
5091
5097
  await readPipedKey(process.stdin, {
5092
5098
  onWaiting: () => process.stderr.write(`runner init is waiting for Claude's credential on stdin; close stdin to use the one already in claude.env
@@ -5103,7 +5109,7 @@ already in claude.env is used.
5103
5109
  const chunks = [];
5104
5110
  for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
5105
5111
  const result2 = runRunnerInit(configPath, { machine, configFromStdin: Buffer.concat(chunks).toString("utf8"), requireContainer: true });
5106
- const { ensureHostKey: ensureHostKey2 } = await import('./host-key-NGRCMJZ7.js');
5112
+ const { ensureHostKey: ensureHostKey2 } = await import('./host-key-DBYH3RTZ.js');
5107
5113
  const hostKey2 = await ensureHostKey2(configPath);
5108
5114
  process.stdout.write(`host key ${hostKey2.fingerprint}
5109
5115
  hooks: ${result2.hooks}
@@ -5162,7 +5168,7 @@ hooks: ${result2.hooks}
5162
5168
  const prepared = prepareRunnerInit(configPath, { machine, allowProcess, agent, credential, keyFromLogin: makeKey !== void 0 });
5163
5169
  const created = makeKey === void 0 ? void 0 : await makeKey();
5164
5170
  const result = writeRunnerInit(prepared, created);
5165
- const { ensureHostKey } = await import('./host-key-NGRCMJZ7.js');
5171
+ const { ensureHostKey } = await import('./host-key-DBYH3RTZ.js');
5166
5172
  const hostKey = await ensureHostKey(configPath);
5167
5173
  if (created !== void 0) {
5168
5174
  process.stdout.write(`${C.green}\u2713${C.reset} saved the runner key in ${result.configPath}
@@ -5190,7 +5196,7 @@ ${C.yellow}${result.note}${C.reset}
5190
5196
  To isolate builds in containers instead, run ${C.yellow}${cliInvocation()} runner init --vm${C.reset}.
5191
5197
  `);
5192
5198
  }
5193
- const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-4PXPAFQX.js');
5199
+ const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-YNQ5DCZP.js');
5194
5200
  let installedLayout = false;
5195
5201
  let noService = "it starts the runner from the install layout, which needs a CLI installed with npm";
5196
5202
  try {
@@ -5222,7 +5228,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
5222
5228
  let serviceUp = false;
5223
5229
  let restart;
5224
5230
  if (installedLayout) {
5225
- const { installServiceCommand } = await import('./command-YXOMIXOJ.js');
5231
+ const { installServiceCommand } = await import('./command-2VFWA2RF.js');
5226
5232
  const service = await installServiceCommand({
5227
5233
  configPath,
5228
5234
  entryPath: process.argv[1] ?? "",
@@ -5266,12 +5272,12 @@ Next:
5266
5272
  "after",
5267
5273
  "\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"
5268
5274
  ).action(async (opts) => {
5269
- const { defaultRunnerConfigPath } = await import('./config-TNV5HHLO.js');
5270
- const { buildRepositoryImage, RecipeError } = await import('./build-JCYOHPLL.js');
5275
+ const { defaultRunnerConfigPath } = await import('./config-HJQ4YE57.js');
5276
+ const { buildRepositoryImage, RecipeError } = await import('./build-ZS4Y5MJU.js');
5271
5277
  const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
5272
- const { createDockerHost } = await import('./docker-2IIRBQAB.js');
5273
- const { builderSpec } = await import('./builder-HCTVP2O7.js');
5274
- const { loadRunnerConfig } = await import('./config-TNV5HHLO.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');
5275
5281
  const configPath = opts.config ?? defaultRunnerConfigPath();
5276
5282
  const loaded = (() => {
5277
5283
  try {
@@ -5282,11 +5288,11 @@ Next:
5282
5288
  })();
5283
5289
  const memory = loaded?.build?.memory ?? "8g";
5284
5290
  try {
5285
- const { ensureRunnerIdentity } = await import('./runner-identity-B37HHOZR.js');
5291
+ const { ensureRunnerIdentity } = await import('./runner-identity-JIC54L5Q.js');
5286
5292
  await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
5287
5293
  console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
5288
5294
  });
5289
- const { imageTargetFor } = await import('./governing-source-KQMKM5CI.js');
5295
+ const { imageTargetFor } = await import('./governing-source-PBYOKKAJ.js');
5290
5296
  const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
5291
5297
  if (!target.ok) {
5292
5298
  if (opts.json) {
@@ -5349,25 +5355,25 @@ Next:
5349
5355
  }
5350
5356
  });
5351
5357
  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) => {
5352
- const { defaultRunnerConfigPath } = await import('./config-TNV5HHLO.js');
5353
- const { requestStop } = await import('./loop-QQBLJ7GN.js');
5358
+ const { defaultRunnerConfigPath } = await import('./config-HJQ4YE57.js');
5359
+ const { requestStop } = await import('./loop-ZXJFOVCS.js');
5354
5360
  const configPath = opts.config ?? defaultRunnerConfigPath();
5355
- const { runnerImageVersion } = await import('./image-tag-TEOKZVD5.js');
5361
+ const { runnerImageVersion } = await import('./image-tag-XNODAHAW.js');
5356
5362
  await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
5357
5363
  });
5358
5364
  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) => {
5359
- const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-TNV5HHLO.js');
5360
- const { jobsDir, runnerDir } = await import('./paths-2VSGK6E2.js');
5361
- const { listJobFiles, runnerProcessState } = await import('./loop-QQBLJ7GN.js');
5362
- const { renderStatus } = await import('./status-AI22UPKC.js');
5363
- const { readHousekeepingRecord } = await import('./record-7SSRLSI2.js');
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');
5364
5370
  const path2 = await import('path');
5365
5371
  const configPath = opts.config ?? defaultRunnerConfigPath();
5366
5372
  const all = listJobFiles(configPath);
5367
5373
  const housekeeping = readHousekeepingRecord(runnerDir(configPath));
5368
- const { readPendingUpdate } = await import('./pending-SFZ2AYSK.js');
5374
+ const { readPendingUpdate } = await import('./pending-GG252ERT.js');
5369
5375
  const pendingUpdate = readPendingUpdate(runnerDir(configPath));
5370
- const { readImageStatus } = await import('./image-tag-TEOKZVD5.js');
5376
+ const { readImageStatus } = await import('./image-tag-XNODAHAW.js');
5371
5377
  const image = readImageStatus(runnerDir(configPath));
5372
5378
  let host = "unknown";
5373
5379
  let concurrency = 1;
@@ -5381,7 +5387,7 @@ Next:
5381
5387
  const service = await (async () => {
5382
5388
  if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
5383
5389
  const { inspectService, realInspectProbes } = await import('./inspect-L7JIBK3Y.js');
5384
- const { DEFAULT_UNIT_NAME } = await import('./install-NPTR35MG.js');
5390
+ const { DEFAULT_UNIT_NAME } = await import('./install-GODA5G7U.js');
5385
5391
  const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
5386
5392
  return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
5387
5393
  })();
@@ -5418,9 +5424,9 @@ Next:
5418
5424
  );
5419
5425
  });
5420
5426
  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) => {
5421
- const { defaultRunnerConfigPath } = await import('./config-TNV5HHLO.js');
5422
- const { listJobFiles } = await import('./loop-QQBLJ7GN.js');
5423
- const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-Z4L4I3OR.js');
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');
5424
5430
  const configPath = opts.config ?? defaultRunnerConfigPath();
5425
5431
  const item = parseTrackerNumber(itemArg);
5426
5432
  if (item === void 0) {
@@ -5651,7 +5657,7 @@ caller from the bearer token, the gateway answers 401 without that header.
5651
5657
  "after",
5652
5658
  "\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"
5653
5659
  ).action(async (opts) => {
5654
- const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-NQM2WDYI.js');
5660
+ const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-SGISNCB3.js');
5655
5661
  try {
5656
5662
  await runMcpServe({ url: opts.url, appId: opts.appId });
5657
5663
  } catch (err) {