@outerlayer/cli 0.25.1 → 0.26.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 (91) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +0 -1
  3. package/dist/{agent-setup-PDIIGMKE.js → agent-setup-YHFZB2BC.js} +5 -5
  4. package/dist/{build-YYVAJ75G.js → build-JK2DLT6X.js} +4 -4
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-MNUJS4RG.js → builder-TMA25KRR.js} +4 -4
  7. package/dist/{check-C6HEFW6R.js → check-FAGTKWHT.js} +28 -28
  8. package/dist/{chunk-QMQC6JCO.js → chunk-4IFKLYMM.js} +1 -1
  9. package/dist/{chunk-A6ORKBVJ.js → chunk-4QKHBDEN.js} +20 -11
  10. package/dist/{chunk-APBTVIM4.js → chunk-4R24DSL2.js} +4 -4
  11. package/dist/{chunk-ZGMQQWCV.js → chunk-5PMQDQFV.js} +2 -2
  12. package/dist/{chunk-5222PA6S.js → chunk-665QWBNW.js} +1 -1
  13. package/dist/{chunk-O2WYUIK7.js → chunk-6FAP657M.js} +1 -1
  14. package/dist/{chunk-S6AWZKJN.js → chunk-6S3UEBLB.js} +3 -3
  15. package/dist/{chunk-ENFBARQP.js → chunk-6WZKI6LQ.js} +18 -11
  16. package/dist/{chunk-N3VSI5ZI.js → chunk-7I6GZSN3.js} +3 -3
  17. package/dist/{chunk-Q435LWVN.js → chunk-AINUN2TT.js} +3 -3
  18. package/dist/{chunk-OEU4JSDE.js → chunk-ARMZI56S.js} +4 -4
  19. package/dist/{chunk-K5WVK7IC.js → chunk-C3AMVSMS.js} +1 -1
  20. package/dist/{chunk-23SPSYXZ.js → chunk-CLUUAX6O.js} +2 -2
  21. package/dist/{chunk-FXUVXSY2.js → chunk-D4UDE2AP.js} +1 -1
  22. package/dist/{chunk-F57CLUH7.js → chunk-DVAAATJP.js} +16 -16
  23. package/dist/{chunk-CQRIZNE6.js → chunk-DZUANBKP.js} +5 -5
  24. package/dist/{chunk-ZODVSFI4.js → chunk-F6DIHHBS.js} +1 -1
  25. package/dist/{chunk-3WZ5ECSM.js → chunk-FQCLEH34.js} +2 -2
  26. package/dist/{chunk-SNQR2EYI.js → chunk-G2T4HCGT.js} +1 -1
  27. package/dist/{chunk-M4B6QKNZ.js → chunk-GJZEUQ6D.js} +1 -1
  28. package/dist/{chunk-4S4VBDSO.js → chunk-H3AEZIYB.js} +1 -1
  29. package/dist/{chunk-C36EOUUU.js → chunk-ITP76BST.js} +4 -4
  30. package/dist/{chunk-QXNJWSTM.js → chunk-JF572PM5.js} +3 -3
  31. package/dist/{chunk-ATGHVEU4.js → chunk-KDDFI5MR.js} +1 -1
  32. package/dist/{chunk-ZI2ZVWKT.js → chunk-L4CW6LZQ.js} +1 -1
  33. package/dist/{chunk-IGRRD7PX.js → chunk-MLD2NA7N.js} +1 -1
  34. package/dist/{chunk-H6ZFLIX3.js → chunk-P7UQZFNY.js} +2 -2
  35. package/dist/{chunk-DEBOL6ON.js → chunk-PYSKSROG.js} +1 -1
  36. package/dist/{chunk-24LQ34XL.js → chunk-TI33WRBT.js} +4 -4
  37. package/dist/{chunk-XRYUJTAT.js → chunk-TKL74NLB.js} +1 -1
  38. package/dist/{chunk-3FNPTQRH.js → chunk-WVM6PM2N.js} +5 -5
  39. package/dist/{chunk-VAMUWK55.js → chunk-XBCJI6SV.js} +2 -2
  40. package/dist/{chunk-I25F6YVP.js → chunk-XK7FRM5J.js} +6 -6
  41. package/dist/{claude-launcher-WGOCLTG6.js → claude-launcher-FXFXYW2E.js} +1 -1
  42. package/dist/{cli-YMTNHR4W.js → cli-CD4UNXBY.js} +80 -129
  43. package/dist/{command-DKYZC7PH.js → command-A54TSZWD.js} +19 -19
  44. package/dist/{connect-cmd-F7T4LNKX.js → connect-cmd-HAFFAVEO.js} +4 -4
  45. package/dist/{container-start-AX7QXJMR.js → container-start-NRPEMKKE.js} +18 -18
  46. package/dist/{control-plane-launch-ZFT6SI4N.js → control-plane-launch-FRK5IZXC.js} +4 -4
  47. package/dist/{docker-5EC5TE3Y.js → docker-4X2A5HDY.js} +4 -4
  48. package/dist/{doctor-S6YCZGUU.js → doctor-AXJQQBKY.js} +36 -22
  49. package/dist/{emit-artifact-cmd-DJO475VZ.js → emit-artifact-cmd-Y2GMWCSD.js} +8 -8
  50. package/dist/{emit-criteria-cmd-EULQ2MLI.js → emit-criteria-cmd-LI7OLHEC.js} +5 -5
  51. package/dist/{emit-finding-cmd-QIIKMITO.js → emit-finding-cmd-3LU7C356.js} +5 -5
  52. package/dist/{emit-result-cmd-NMCLTA47.js → emit-result-cmd-NKAKRBW2.js} +8 -8
  53. package/dist/{emit-step-cmd-72OX5P6M.js → emit-step-cmd-JQ23TRF5.js} +6 -6
  54. package/dist/{governing-source-JNQ6PX2A.js → governing-source-73APROH6.js} +8 -8
  55. package/dist/{hook-fast-NEELST6G.js → hook-fast-GD7F2EBL.js} +1 -1
  56. package/dist/{pending-BGLMTB5Q.js → host-key-5TKBNUZ4.js} +2 -2
  57. package/dist/{image-tag-6KJOGBQK.js → image-tag-5SJ6ZKT7.js} +2 -2
  58. package/dist/index.js +4 -4
  59. package/dist/{init-G7XC5WWL.js → init-5WVPLO3G.js} +18 -18
  60. package/dist/{init-624F4JIP.js → init-IFQCZKY6.js} +18 -18
  61. package/dist/{init-cmd-UUYA57VO.js → init-cmd-KNYXSA6O.js} +8 -8
  62. package/dist/{init-update-MMV33PLM.js → init-update-HTHYQOHU.js} +6 -6
  63. package/dist/{install-MPEJJ7X6.js → install-QSTTBUHX.js} +2 -2
  64. package/dist/{install-cmd-SE6NCTJK.js → install-cmd-3DXJJUAA.js} +4 -4
  65. package/dist/{logs-T4ERSOQ4.js → logs-VN2HKDSH.js} +1 -1
  66. package/dist/{loop-K5B2A3VW.js → loop-HTWKPG3J.js} +28 -28
  67. package/dist/{machine-J4IFVIKU.js → machine-AYYL2WXW.js} +15 -15
  68. package/dist/{mcp-serve-cmd-7M4VLNI4.js → mcp-serve-cmd-QBFQN553.js} +3 -3
  69. package/dist/paths-ZC6BMWMT.js +8 -0
  70. package/dist/{host-key-ICJEQBWH.js → pending-54HC7MM3.js} +2 -2
  71. package/dist/{pidfile-VYBH3IMN.js → pidfile-BY5Z6YH7.js} +2 -2
  72. package/dist/{record-GNOHDJ2O.js → record-K23IN6QN.js} +2 -2
  73. package/dist/{runner-env-GUFV544G.js → runner-env-2D7MPOIJ.js} +3 -3
  74. package/dist/{runner-identity-HZ6CBM2R.js → runner-identity-NH6RLVMI.js} +4 -4
  75. package/dist/{runner-key-FFVZUEHE.js → runner-key-3HAVHQZI.js} +18 -18
  76. package/dist/{session-sender-3SUWNNVP.js → session-sender-535VA2CA.js} +9 -9
  77. package/dist/{spec-cmd-VZDE6FFH.js → spec-cmd-KERLZ6GJ.js} +6 -6
  78. package/dist/{status-GXTD44DX.js → status-IAXWRX7B.js} +19 -19
  79. package/dist/{sync-cmd-VFB3NEJ6.js → sync-cmd-EIRKU5FA.js} +8 -8
  80. package/dist/{watch-LWMTDD3L.js → watch-SMF5CW5T.js} +8 -8
  81. package/dist/{work-claim-cmd-FOBTDQVR.js → work-claim-cmd-JCUBRZKN.js} +8 -8
  82. package/dist/{work-cmd-6HARIBMW.js → work-cmd-C3CFJZYD.js} +6 -6
  83. package/dist/{work-comment-cmd-BITPALHR.js → work-comment-cmd-NDE3O7PN.js} +6 -6
  84. package/dist/{work-logs-cmd-VGB3O2LZ.js → work-logs-cmd-KUGBBJAO.js} +6 -6
  85. package/dist/{work-open-pr-cmd-SVZCNOIM.js → work-open-pr-cmd-TFIGKPRL.js} +7 -7
  86. package/dist/{work-pr-cmd-SJT46GN4.js → work-pr-cmd-KKCLXRJL.js} +6 -6
  87. package/dist/{work-stop-cmd-WXKVVA4S.js → work-stop-cmd-QUEDBM4Q.js} +6 -6
  88. package/package.json +2 -2
  89. package/dist/import-capture-cmd-TCOKNVBM.js +0 -73
  90. package/dist/import-ruler-cmd-VJOHOJQ7.js +0 -173
  91. package/dist/paths-2KGM2LZV.js +0 -8
@@ -1,17 +1,17 @@
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-I25F6YVP.js';
3
+ import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-XK7FRM5J.js';
4
4
  import './chunk-XFGL53GU.js';
5
5
  import './chunk-VJBFQP3H.js';
6
- import { verifiedTrackerNames, TRACKERS } from './chunk-CQRIZNE6.js';
7
- import './chunk-3WZ5ECSM.js';
8
- import './chunk-SNQR2EYI.js';
6
+ import { verifiedTrackerNames, TRACKERS } from './chunk-DZUANBKP.js';
7
+ import './chunk-FQCLEH34.js';
8
+ import './chunk-G2T4HCGT.js';
9
9
  import './chunk-BUP5N3X6.js';
10
10
  import './chunk-XSPA5ODY.js';
11
11
  import './chunk-GOSFARMS.js';
12
12
  import './chunk-MQ743JX3.js';
13
- import './chunk-M4B6QKNZ.js';
14
- import { hookFiredMarkerPath, installedCliDistDir } from './chunk-K5WVK7IC.js';
13
+ import './chunk-GJZEUQ6D.js';
14
+ import { hookFiredMarkerPath, installedCliDistDir } from './chunk-C3AMVSMS.js';
15
15
  import './chunk-ZJSNLVCE.js';
16
16
  import './chunk-DXDF43YG.js';
17
17
  import './chunk-BKO6JEZI.js';
@@ -33,8 +33,8 @@ import './chunk-RKOTJQVG.js';
33
33
  import './chunk-QZBXLLTV.js';
34
34
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
35
35
  import { resolveVersion } from './chunk-RA3O54FC.js';
36
- import './chunk-ZODVSFI4.js';
37
- import './chunk-ZI2ZVWKT.js';
36
+ import './chunk-F6DIHHBS.js';
37
+ import './chunk-L4CW6LZQ.js';
38
38
  import './chunk-2K3TCQHW.js';
39
39
  import './chunk-JGD5TWQ2.js';
40
40
  import './chunk-Z5GEFMRW.js';
@@ -3784,7 +3784,7 @@ ${starter.output}`),
3784
3784
  }
3785
3785
  }
3786
3786
  async function realConnectDepsForCwd() {
3787
- const { realConnectDeps } = await import('./connect-cmd-F7T4LNKX.js');
3787
+ const { realConnectDeps } = await import('./connect-cmd-HAFFAVEO.js');
3788
3788
  const { resolveRepoIdentity } = await import('./dist-QPHZE47F.js');
3789
3789
  return {
3790
3790
  ...realConnectDeps(),
@@ -3851,7 +3851,7 @@ edited file, and writes nothing. --control-plane makes no link and says
3851
3851
  what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocation() + " doctor` reports the same\nstates under Starter files.\n"
3852
3852
  ).action(async (opts) => {
3853
3853
  if (opts.update || opts.dryRun) {
3854
- const { runInitUpdate, formatInitUpdate, updateFlagProblem } = await import('./init-update-MMV33PLM.js');
3854
+ const { runInitUpdate, formatInitUpdate, updateFlagProblem } = await import('./init-update-HTHYQOHU.js');
3855
3855
  const problem = updateFlagProblem(opts);
3856
3856
  if (problem !== void 0) {
3857
3857
  fail(problem);
@@ -3898,12 +3898,12 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3898
3898
  if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
3899
3899
  `);
3900
3900
  }
3901
- const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-UUYA57VO.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
3901
+ const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-KNYXSA6O.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
3902
3902
  if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
3903
3903
  else process.stdout.write(outcome.text + (shell?.text ?? ""));
3904
3904
  return;
3905
3905
  }
3906
- const { runInitCommand } = await import('./init-cmd-UUYA57VO.js');
3906
+ const { runInitCommand } = await import('./init-cmd-KNYXSA6O.js');
3907
3907
  const code = await runInitCommand(
3908
3908
  { json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
3909
3909
  {
@@ -3915,7 +3915,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3915
3915
  return { ok, text, detail };
3916
3916
  },
3917
3917
  runAgentSetup: async () => {
3918
- const { runAgentSetup } = await import('./agent-setup-PDIIGMKE.js');
3918
+ const { runAgentSetup } = await import('./agent-setup-YHFZB2BC.js');
3919
3919
  return runAgentSetup({ cwd: process.cwd(), skillsLink: opts.skillsLink !== false });
3920
3920
  },
3921
3921
  runDoctorChecks: gatherDoctorChecks,
@@ -3924,7 +3924,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3924
3924
  shellPath: process.env.SHELL,
3925
3925
  interactive: Boolean(process.stdin.isTTY && process.stderr.isTTY) && opts.json !== true,
3926
3926
  ask: async () => {
3927
- const { promptOnTerminal } = await import('./connect-cmd-F7T4LNKX.js');
3927
+ const { promptOnTerminal } = await import('./connect-cmd-HAFFAVEO.js');
3928
3928
  const answer = await promptOnTerminal({
3929
3929
  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.`,
3930
3930
  options: [
@@ -3963,7 +3963,7 @@ linked (true, false, or null when it could not be checked) and, when false,
3963
3963
  linkUrl.
3964
3964
  `
3965
3965
  ).action(async (opts) => {
3966
- const { runConnectCommand } = await import('./connect-cmd-F7T4LNKX.js');
3966
+ const { runConnectCommand } = await import('./connect-cmd-HAFFAVEO.js');
3967
3967
  const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
3968
3968
  stdout: process.stdout,
3969
3969
  stderr: process.stderr
@@ -4041,7 +4041,7 @@ code is 1: revoke the token on /profile/security.
4041
4041
  else fail(found.reason);
4042
4042
  return;
4043
4043
  }
4044
- const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-VFB3NEJ6.js');
4044
+ const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-EIRKU5FA.js');
4045
4045
  try {
4046
4046
  const result = await runSync({
4047
4047
  url: opts.url,
@@ -4072,7 +4072,7 @@ code is 1: revoke the token on /profile/security.
4072
4072
  if (invokedCommandToken(argv) === "watch") {
4073
4073
  warnDeprecated(`\`${cliInvocation()} watch\` is now \`${cliInvocation()} daemon\`; the old name will be removed in a future release.`);
4074
4074
  }
4075
- const { runWatch } = await import('./watch-LWMTDD3L.js');
4075
+ const { runWatch } = await import('./watch-SMF5CW5T.js');
4076
4076
  await runWatch({ once: opts.once });
4077
4077
  });
4078
4078
  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
  process.exitCode = await runBuildCommand({ dir: opts.dir, argv: command });
4163
4163
  });
4164
4164
  program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
4165
- const { runSessionSender } = await import('./session-sender-3SUWNNVP.js');
4165
+ const { runSessionSender } = await import('./session-sender-535VA2CA.js');
4166
4166
  try {
4167
4167
  await runSessionSender();
4168
4168
  } catch (err) {
@@ -4187,7 +4187,6 @@ code is 1: revoke the token on /profile/security.
4187
4187
  }
4188
4188
  });
4189
4189
  registerEmitCommands(program2);
4190
- registerImportCommands(program2);
4191
4190
  registerHooksCommands(program2);
4192
4191
  registerMcpCommands(program2);
4193
4192
  registerContextCommands(program2);
@@ -4253,7 +4252,7 @@ Compiling .outerlayer/ moved to \`${cliInvocation()} context emit\`.
4253
4252
  await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
4254
4253
  return;
4255
4254
  }
4256
- const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-NMCLTA47.js');
4255
+ const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-NKAKRBW2.js');
4257
4256
  try {
4258
4257
  const result = await runEmitResult({
4259
4258
  name,
@@ -4303,7 +4302,7 @@ everywhere, bytes and deep link untouched; a still-queued one is cancelled
4303
4302
  locally so it never uploads. One correction can retire several duplicates.
4304
4303
  `
4305
4304
  ).action(async (file, opts) => {
4306
- const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-DJO475VZ.js');
4305
+ const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-Y2GMWCSD.js');
4307
4306
  let pr;
4308
4307
  if (opts.pr !== void 0) {
4309
4308
  pr = parseTrackerNumber(opts.pr);
@@ -4362,7 +4361,7 @@ recent events with their ids. --find <text> searches all of them.
4362
4361
  item that session was launched for is used automatically.
4363
4362
  `
4364
4363
  ).action(async (opts) => {
4365
- const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-QIIKMITO.js');
4364
+ const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-3LU7C356.js');
4366
4365
  try {
4367
4366
  refuseRemovedFindingFlags(opts);
4368
4367
  const result = await runEmitFinding({
@@ -4429,7 +4428,7 @@ the whole batch. "untimed": true records one with no time on purpose.
4429
4428
  that session was launched for is used automatically.
4430
4429
  `
4431
4430
  ).action(async (file, opts) => {
4432
- const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-QIIKMITO.js');
4431
+ const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-3LU7C356.js');
4433
4432
  try {
4434
4433
  const result = await runEmitFindings({
4435
4434
  file,
@@ -4464,7 +4463,7 @@ command, the command exits 0, and \`sync\` sends it later. If the gateway refuse
4464
4463
  the step, the command prints why and exits 1.
4465
4464
  `
4466
4465
  ).action(async (name, opts) => {
4467
- const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-72OX5P6M.js');
4466
+ const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-JQ23TRF5.js');
4468
4467
  try {
4469
4468
  await runEmitStep({
4470
4469
  name,
@@ -4507,7 +4506,7 @@ of the item, and a (proof: <kind>) annotation names its proof.
4507
4506
  ${cliInvocation()} emit criteria acceptance/412-login.md --item 412
4508
4507
  `
4509
4508
  ).action(async (file, opts) => {
4510
- const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-EULQ2MLI.js');
4509
+ const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-LI7OLHEC.js');
4511
4510
  try {
4512
4511
  const result = await runEmitCriteria({
4513
4512
  file,
@@ -4531,9 +4530,9 @@ function registerSpecCommands(program2) {
4531
4530
  const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
4532
4531
  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)");
4533
4532
  const run = async (action) => {
4534
- const { WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4533
+ const { WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4535
4534
  try {
4536
- await action(await import('./spec-cmd-VZDE6FFH.js'));
4535
+ await action(await import('./spec-cmd-KERLZ6GJ.js'));
4537
4536
  } catch (err) {
4538
4537
  if (err instanceof WorkCommandError) {
4539
4538
  fail(err.message);
@@ -4575,7 +4574,7 @@ takes it, and prints the line that starts your session on it. That
4575
4574
  session links itself and holds the item's lease while it works.
4576
4575
  `
4577
4576
  ).action(async (opts) => {
4578
- const { runWorkBuild, WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4577
+ const { runWorkBuild, WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4579
4578
  try {
4580
4579
  await runWorkBuild(opts);
4581
4580
  } catch (err) {
@@ -4598,7 +4597,7 @@ renews that session's own 20-minute lease, unless --no-lease or
4598
4597
  --ended is given, or another worker already holds a live one.
4599
4598
  `
4600
4599
  ).action(async (number, opts) => {
4601
- const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4600
+ const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4602
4601
  try {
4603
4602
  await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
4604
4603
  } catch (err) {
@@ -4622,8 +4621,8 @@ criterion's new proof; --ready hands the thread back to a person. At
4622
4621
  most one action flag may be given.
4623
4622
  `
4624
4623
  ).action(async (opts) => {
4625
- const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-BITPALHR.js');
4626
- const { WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4624
+ const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-NDE3O7PN.js');
4625
+ const { WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4627
4626
  try {
4628
4627
  await runWorkComment(opts);
4629
4628
  } catch (err) {
@@ -4644,8 +4643,8 @@ criterion that carries proof or a comment, each with who is waiting
4644
4643
  on whom next.
4645
4644
  `
4646
4645
  ).action(async (opts) => {
4647
- const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-BITPALHR.js');
4648
- const { WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4646
+ const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-NDE3O7PN.js');
4647
+ const { WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4649
4648
  try {
4650
4649
  await runWorkThreads(opts);
4651
4650
  } catch (err) {
@@ -4669,8 +4668,8 @@ still running, or that an older runner released, has no log and the
4669
4668
  command exits 1.
4670
4669
  `
4671
4670
  ).action(async (opts) => {
4672
- const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-VGB3O2LZ.js');
4673
- const { WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4671
+ const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-KUGBBJAO.js');
4672
+ const { WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4674
4673
  try {
4675
4674
  await runWorkLogs(opts);
4676
4675
  } catch (err) {
@@ -4693,8 +4692,8 @@ item is not built again until a new build request. Exits 1 when no host
4693
4692
  build is running for the item.
4694
4693
  `
4695
4694
  ).action(async (opts) => {
4696
- const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-WXKVVA4S.js');
4697
- const { WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4695
+ const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-QUEDBM4Q.js');
4696
+ const { WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4698
4697
  try {
4699
4698
  await runWorkStop(opts);
4700
4699
  } catch (err) {
@@ -4715,7 +4714,7 @@ deletes anything \u2014 the item is removed from Work only once no
4715
4714
  live addition remains on it.
4716
4715
  `
4717
4716
  ).action(async (opts) => {
4718
- const { runWorkRemove, WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4717
+ const { runWorkRemove, WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4719
4718
  try {
4720
4719
  await runWorkRemove(opts);
4721
4720
  } catch (err) {
@@ -4727,7 +4726,7 @@ live addition remains on it.
4727
4726
  }
4728
4727
  });
4729
4728
  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) => {
4730
- const { runWorkStatus, WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4729
+ const { runWorkStatus, WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4731
4730
  try {
4732
4731
  await runWorkStatus(opts);
4733
4732
  } catch (err) {
@@ -4739,7 +4738,7 @@ live addition remains on it.
4739
4738
  }
4740
4739
  });
4741
4740
  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) => {
4742
- const { runWorkList, WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4741
+ const { runWorkList, WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4743
4742
  try {
4744
4743
  await runWorkList(opts);
4745
4744
  } catch (err) {
@@ -4760,7 +4759,7 @@ by a different key is refused; claiming again with the same key extends
4760
4759
  it. --host is a label only.
4761
4760
  `
4762
4761
  ).action(async (opts) => {
4763
- const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-FOBTDQVR.js');
4762
+ const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-JCUBRZKN.js');
4764
4763
  try {
4765
4764
  await runWorkClaim(opts);
4766
4765
  } catch (err) {
@@ -4780,7 +4779,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
4780
4779
  lease has expired, or a 403 if a different key holds it.
4781
4780
  `
4782
4781
  ).action(async (opts) => {
4783
- const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-FOBTDQVR.js');
4782
+ const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-JCUBRZKN.js');
4784
4783
  try {
4785
4784
  await runWorkRenew(opts);
4786
4785
  } catch (err) {
@@ -4812,7 +4811,7 @@ applies to a host's lease only. A later tool call in the session
4812
4811
  takes the lease again.
4813
4812
  `
4814
4813
  ).action(async (opts) => {
4815
- const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-FOBTDQVR.js');
4814
+ const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-JCUBRZKN.js');
4816
4815
  try {
4817
4816
  await runWorkRelease(opts);
4818
4817
  } catch (err) {
@@ -4839,7 +4838,7 @@ Idempotent: declaring the same pull request twice is a no-op.
4839
4838
  needs your own login; an agent session or a factory key is refused.
4840
4839
  `
4841
4840
  ).action(async (number, opts) => {
4842
- const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-SJT46GN4.js');
4841
+ const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-KKCLXRJL.js');
4843
4842
  try {
4844
4843
  await runWorkPr({ ...opts, number });
4845
4844
  } catch (err) {
@@ -4864,8 +4863,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
4864
4863
  Run it again after a change to the title or description.
4865
4864
  `
4866
4865
  ).action(async (opts) => {
4867
- const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-SVZCNOIM.js');
4868
- const { WorkCommandError } = await import('./work-cmd-6HARIBMW.js');
4866
+ const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-TFIGKPRL.js');
4867
+ const { WorkCommandError } = await import('./work-cmd-C3CFJZYD.js');
4869
4868
  try {
4870
4869
  await runWorkOpenPr(opts);
4871
4870
  } catch (err) {
@@ -4882,8 +4881,8 @@ function registerRunnerCommands(program2) {
4882
4881
  const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
4883
4882
  runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
4884
4883
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
4885
- const { start, RunnerStartError } = await import('./loop-K5B2A3VW.js');
4886
- const { RunnerAlreadyRunningError } = await import('./pidfile-VYBH3IMN.js');
4884
+ const { start, RunnerStartError } = await import('./loop-HTWKPG3J.js');
4885
+ const { RunnerAlreadyRunningError } = await import('./pidfile-BY5Z6YH7.js');
4887
4886
  const configPath = opts.config ?? defaultRunnerConfigPath();
4888
4887
  try {
4889
4888
  const { realUpdateDeps } = await import('./real-deps-KNNBQC75.js');
@@ -4901,9 +4900,9 @@ function registerRunnerCommands(program2) {
4901
4900
  "\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"
4902
4901
  ).action(async () => {
4903
4902
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
4904
- const { containerStart } = await import('./container-start-AX7QXJMR.js');
4905
- const { start, RunnerStartError } = await import('./loop-K5B2A3VW.js');
4906
- const { RunnerAlreadyRunningError } = await import('./pidfile-VYBH3IMN.js');
4903
+ const { containerStart } = await import('./container-start-NRPEMKKE.js');
4904
+ const { start, RunnerStartError } = await import('./loop-HTWKPG3J.js');
4905
+ const { RunnerAlreadyRunningError } = await import('./pidfile-BY5Z6YH7.js');
4907
4906
  try {
4908
4907
  const result = await containerStart({
4909
4908
  env: process.env,
@@ -4922,7 +4921,7 @@ function registerRunnerCommands(program2) {
4922
4921
  });
4923
4922
  runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
4924
4923
  const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
4925
- const { runRunnerCheck } = await import('./check-C6HEFW6R.js');
4924
+ const { runRunnerCheck } = await import('./check-FAGTKWHT.js');
4926
4925
  const configPath = opts.config ?? defaultRunnerConfigPath();
4927
4926
  const result = await runRunnerCheck(configPath);
4928
4927
  if (!result.ok) {
@@ -4944,7 +4943,7 @@ function registerRunnerCommands(program2) {
4944
4943
  });
4945
4944
  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) => {
4946
4945
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
4947
- const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-SE6NCTJK.js');
4946
+ const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-3DXJJUAA.js');
4948
4947
  const configPath = opts.config ?? defaultRunnerConfigPath();
4949
4948
  if (opts.service !== true) {
4950
4949
  for (const flag of ["print", "user", "unitName"]) {
@@ -4956,7 +4955,7 @@ function registerRunnerCommands(program2) {
4956
4955
  }
4957
4956
  try {
4958
4957
  if (opts.service === true) {
4959
- const { installServiceCommand } = await import('./command-DKYZC7PH.js');
4958
+ const { installServiceCommand } = await import('./command-A54TSZWD.js');
4960
4959
  const result2 = await installServiceCommand({
4961
4960
  configPath,
4962
4961
  print: opts.print,
@@ -5012,7 +5011,7 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
5012
5011
  return;
5013
5012
  }
5014
5013
  const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
5015
- const { uninstallServiceCommand } = await import('./command-DKYZC7PH.js');
5014
+ const { uninstallServiceCommand } = await import('./command-A54TSZWD.js');
5016
5015
  const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
5017
5016
  if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
5018
5017
  `);
@@ -5040,11 +5039,11 @@ already in runner.env is used.
5040
5039
  `
5041
5040
  ).action(async (opts) => {
5042
5041
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
5043
- const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-624F4JIP.js');
5044
- const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-FFVZUEHE.js');
5045
- const { detectMachine } = await import('./machine-J4IFVIKU.js');
5046
- const { chooseVm, runVmInit, VmInitError } = await import('./init-G7XC5WWL.js');
5047
- const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-GUFV544G.js');
5042
+ const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-IFQCZKY6.js');
5043
+ const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-3HAVHQZI.js');
5044
+ const { detectMachine } = await import('./machine-AYYL2WXW.js');
5045
+ const { chooseVm, runVmInit, VmInitError } = await import('./init-5WVPLO3G.js');
5046
+ const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-2D7MPOIJ.js');
5048
5047
  const configPath = opts.config ?? defaultRunnerConfigPath();
5049
5048
  if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
5050
5049
  fail(`--agent ${opts.agent}: runner init writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")}. For another agent, leave --agent out and edit runner.commands.`);
@@ -5075,7 +5074,7 @@ already in runner.env is used.
5075
5074
  const chunks = [];
5076
5075
  for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
5077
5076
  const result2 = runRunnerInit(configPath, { machine, configFromStdin: Buffer.concat(chunks).toString("utf8"), requireContainer: true });
5078
- const { ensureHostKey: ensureHostKey2 } = await import('./host-key-ICJEQBWH.js');
5077
+ const { ensureHostKey: ensureHostKey2 } = await import('./host-key-5TKBNUZ4.js');
5079
5078
  const hostKey2 = await ensureHostKey2(configPath);
5080
5079
  process.stdout.write(`host key ${hostKey2.fingerprint}
5081
5080
  hooks: ${result2.hooks}
@@ -5134,7 +5133,7 @@ hooks: ${result2.hooks}
5134
5133
  const prepared = prepareRunnerInit(configPath, { machine, allowProcess, agent, credential, keyFromLogin: makeKey !== void 0 });
5135
5134
  const created = makeKey === void 0 ? void 0 : await makeKey();
5136
5135
  const result = writeRunnerInit(prepared, created);
5137
- const { ensureHostKey } = await import('./host-key-ICJEQBWH.js');
5136
+ const { ensureHostKey } = await import('./host-key-5TKBNUZ4.js');
5138
5137
  const hostKey = await ensureHostKey(configPath);
5139
5138
  if (created !== void 0) {
5140
5139
  process.stdout.write(`${C.green}\u2713${C.reset} saved the runner key in ${result.configPath}
@@ -5162,7 +5161,7 @@ ${C.yellow}${result.note}${C.reset}
5162
5161
  To isolate builds in containers instead, run ${C.yellow}${cliInvocation()} runner init --vm${C.reset}.
5163
5162
  `);
5164
5163
  }
5165
- const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-SE6NCTJK.js');
5164
+ const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-3DXJJUAA.js');
5166
5165
  let installedLayout = false;
5167
5166
  let noService = "it starts the runner from the install layout, which needs a CLI installed with npm";
5168
5167
  try {
@@ -5194,7 +5193,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
5194
5193
  let serviceUp = false;
5195
5194
  let restart;
5196
5195
  if (installedLayout) {
5197
- const { installServiceCommand } = await import('./command-DKYZC7PH.js');
5196
+ const { installServiceCommand } = await import('./command-A54TSZWD.js');
5198
5197
  const service = await installServiceCommand({
5199
5198
  configPath,
5200
5199
  entryPath: process.argv[1] ?? "",
@@ -5239,10 +5238,10 @@ Next:
5239
5238
  "\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"
5240
5239
  ).action(async (opts) => {
5241
5240
  const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
5242
- const { buildRepositoryImage, RecipeError } = await import('./build-YYVAJ75G.js');
5241
+ const { buildRepositoryImage, RecipeError } = await import('./build-JK2DLT6X.js');
5243
5242
  const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
5244
- const { createDockerHost } = await import('./docker-5EC5TE3Y.js');
5245
- const { builderSpec } = await import('./builder-MNUJS4RG.js');
5243
+ const { createDockerHost } = await import('./docker-4X2A5HDY.js');
5244
+ const { builderSpec } = await import('./builder-TMA25KRR.js');
5246
5245
  const { loadRunnerConfig } = await import('./config-JJ3EO7SB.js');
5247
5246
  const configPath = opts.config ?? defaultRunnerConfigPath();
5248
5247
  const loaded = (() => {
@@ -5254,11 +5253,11 @@ Next:
5254
5253
  })();
5255
5254
  const memory = loaded?.build?.memory ?? "8g";
5256
5255
  try {
5257
- const { ensureRunnerIdentity } = await import('./runner-identity-HZ6CBM2R.js');
5256
+ const { ensureRunnerIdentity } = await import('./runner-identity-NH6RLVMI.js');
5258
5257
  await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
5259
5258
  console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
5260
5259
  });
5261
- const { imageTargetFor } = await import('./governing-source-JNQ6PX2A.js');
5260
+ const { imageTargetFor } = await import('./governing-source-73APROH6.js');
5262
5261
  const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
5263
5262
  if (!target.ok) {
5264
5263
  if (opts.json) {
@@ -5322,24 +5321,24 @@ Next:
5322
5321
  });
5323
5322
  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) => {
5324
5323
  const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
5325
- const { requestStop } = await import('./loop-K5B2A3VW.js');
5324
+ const { requestStop } = await import('./loop-HTWKPG3J.js');
5326
5325
  const configPath = opts.config ?? defaultRunnerConfigPath();
5327
- const { runnerImageVersion } = await import('./image-tag-6KJOGBQK.js');
5326
+ const { runnerImageVersion } = await import('./image-tag-5SJ6ZKT7.js');
5328
5327
  await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
5329
5328
  });
5330
5329
  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) => {
5331
5330
  const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-JJ3EO7SB.js');
5332
- const { jobsDir, runnerDir } = await import('./paths-2KGM2LZV.js');
5333
- const { listJobFiles, runnerProcessState } = await import('./loop-K5B2A3VW.js');
5334
- const { renderStatus } = await import('./status-GXTD44DX.js');
5335
- const { readHousekeepingRecord } = await import('./record-GNOHDJ2O.js');
5331
+ const { jobsDir, runnerDir } = await import('./paths-ZC6BMWMT.js');
5332
+ const { listJobFiles, runnerProcessState } = await import('./loop-HTWKPG3J.js');
5333
+ const { renderStatus } = await import('./status-IAXWRX7B.js');
5334
+ const { readHousekeepingRecord } = await import('./record-K23IN6QN.js');
5336
5335
  const path2 = await import('path');
5337
5336
  const configPath = opts.config ?? defaultRunnerConfigPath();
5338
5337
  const all = listJobFiles(configPath);
5339
5338
  const housekeeping = readHousekeepingRecord(runnerDir(configPath));
5340
- const { readPendingUpdate } = await import('./pending-BGLMTB5Q.js');
5339
+ const { readPendingUpdate } = await import('./pending-54HC7MM3.js');
5341
5340
  const pendingUpdate = readPendingUpdate(runnerDir(configPath));
5342
- const { readImageStatus } = await import('./image-tag-6KJOGBQK.js');
5341
+ const { readImageStatus } = await import('./image-tag-5SJ6ZKT7.js');
5343
5342
  const image = readImageStatus(runnerDir(configPath));
5344
5343
  let host = "unknown";
5345
5344
  let concurrency = 1;
@@ -5353,7 +5352,7 @@ Next:
5353
5352
  const service = await (async () => {
5354
5353
  if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
5355
5354
  const { inspectService, realInspectProbes } = await import('./inspect-6UYAAXH7.js');
5356
- const { DEFAULT_UNIT_NAME } = await import('./install-MPEJJ7X6.js');
5355
+ const { DEFAULT_UNIT_NAME } = await import('./install-QSTTBUHX.js');
5357
5356
  const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
5358
5357
  return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
5359
5358
  })();
@@ -5391,8 +5390,8 @@ Next:
5391
5390
  });
5392
5391
  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) => {
5393
5392
  const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
5394
- const { listJobFiles } = await import('./loop-K5B2A3VW.js');
5395
- const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-T4ERSOQ4.js');
5393
+ const { listJobFiles } = await import('./loop-HTWKPG3J.js');
5394
+ const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-VN2HKDSH.js');
5396
5395
  const configPath = opts.config ?? defaultRunnerConfigPath();
5397
5396
  const item = parseTrackerNumber(itemArg);
5398
5397
  if (item === void 0) {
@@ -5426,23 +5425,6 @@ function registerHooksCommands(program2) {
5426
5425
  "after",
5427
5426
  "\n`init` auto-wraps PreToolUse/PostToolUse hooks; these subcommands cover the\nrest: manual re-scans, other events, and undo.\n"
5428
5427
  );
5429
- hooksCmd.command("install-git").description("Remove the git hooks an earlier version installed in this repo").addHelpText(
5430
- "after",
5431
- "\nEarlier versions installed a pre-commit guard and commit journal hooks. This removes\nthe ones OuterLayer wrote and leaves any hook it did not write untouched.\n"
5432
- ).action(() => {
5433
- const removal = removeJournalHooks(process.cwd());
5434
- if (removal.removed) {
5435
- process.stdout.write(`${C.green}\u2713${C.reset} removed the commit journal hooks an earlier version installed \u2192 ${removal.path}
5436
- `);
5437
- }
5438
- const guard = removePreCommitGuardHook(process.cwd());
5439
- if (guard.removed) {
5440
- process.stdout.write(`${C.green}\u2713${C.reset} removed the pre-commit guard an earlier version installed \u2192 ${guard.path}
5441
- `);
5442
- }
5443
- if (!removal.removed && !guard.removed) process.stdout.write(`${C.dim}No git hooks from an earlier version were found.${C.reset}
5444
- `);
5445
- });
5446
5428
  hooksCmd.command("status").description("List hook entries in user and project settings, marking the wrapped ones").option("--json", "machine-readable JSON output").action((opts) => {
5447
5429
  const report = [];
5448
5430
  for (const scope of ["user", "project"]) {
@@ -5640,7 +5622,7 @@ caller from the bearer token, the gateway answers 401 without that header.
5640
5622
  "after",
5641
5623
  "\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"
5642
5624
  ).action(async (opts) => {
5643
- const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-7M4VLNI4.js');
5625
+ const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-QBFQN553.js');
5644
5626
  try {
5645
5627
  await runMcpServe({ url: opts.url, appId: opts.appId });
5646
5628
  } catch (err) {
@@ -5648,37 +5630,6 @@ caller from the bearer token, the gateway answers 401 without that header.
5648
5630
  }
5649
5631
  });
5650
5632
  }
5651
- function registerImportCommands(program2) {
5652
- const importCmd = program2.command("import").description("Import an existing config format into .outerlayer/");
5653
- importCmd.command("ruler").description("Port a .ruler/ tree into the equivalent .outerlayer/ tree").option("--dir <path>", "repo root to read from (default: cwd)").option("--json", "machine-readable JSON output").addHelpText("after", "\nRuler: https://github.com/intellectronica/ruler. Mostly a rename.\n").action(async (opts) => {
5654
- const { runImportRuler, ImportRulerError } = await import('./import-ruler-cmd-VJOHOJQ7.js');
5655
- try {
5656
- const result = runImportRuler({ cwd: opts.dir, json: opts.json });
5657
- if (result.exitCode !== 0) process.exitCode = result.exitCode;
5658
- } catch (err) {
5659
- if (err instanceof ImportRulerError) {
5660
- fail(err.message);
5661
- return;
5662
- }
5663
- throw err;
5664
- }
5665
- });
5666
- importCmd.command("capture").description("Install the maintained skills into .outerlayer/").option("--dir <path>", "repo root to write into (default: cwd)").option("--json", "machine-readable JSON output").addHelpText(
5667
- "after",
5668
- "\nInstalls the five maintained skills (outerlayer-evidence, outerlayer-amend,\nouterlayer-findings, outerlayer-cli, outerlayer-build) and an AGENTS.md snippet teaching agents to run\n`emit artifact`. A skill that differs from this CLI's bundle is rewritten to it, and the output says so.\n"
5669
- ).action(async (opts) => {
5670
- const { runImportCapture, ImportCaptureError } = await import('./import-capture-cmd-TCOKNVBM.js');
5671
- try {
5672
- runImportCapture({ cwd: opts.dir, json: opts.json });
5673
- } catch (err) {
5674
- if (err instanceof ImportCaptureError) {
5675
- fail(err.message);
5676
- return;
5677
- }
5678
- throw err;
5679
- }
5680
- });
5681
- }
5682
5633
  function registerContextCommands(program2) {
5683
5634
  const contextCmd = program2.command("context").description("Compile agent context");
5684
5635
  contextCmd.command("emit").description("Compile .outerlayer/ into each configured target tool's native files").option("--check", "compare against disk, write nothing, exit 1 on drift (CI mode)").option("--dir <path>", "repo root to read from (default: cwd)").option("--json", "machine-readable JSON output").addHelpText(