@outerlayer/cli 0.6.0 → 0.7.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 (80) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +10 -0
  3. package/dist/{agent-setup-USZ2SAXC.js → agent-setup-TXLDY5RV.js} +7 -6
  4. package/dist/{build-PAEKVYVK.js → build-JF5UOWKJ.js} +2 -1
  5. package/dist/build-info.json +1 -1
  6. package/dist/{check-CCVPBN7A.js → check-ASZL5BEO.js} +29 -23
  7. package/dist/{chunk-ZILGTTY6.js → chunk-2VO25HHO.js} +3 -3
  8. package/dist/{chunk-OIRNH6UO.js → chunk-5FWNEQNZ.js} +3 -3
  9. package/dist/{chunk-MXB5VB4Y.js → chunk-6IYLDODX.js} +6 -6
  10. package/dist/{chunk-4NLKY4WR.js → chunk-6QWV3YDJ.js} +2 -2
  11. package/dist/{chunk-UMFWVGJO.js → chunk-6ZZHWY2Z.js} +4 -3
  12. package/dist/{chunk-NQXFAGHU.js → chunk-7FTNIAHS.js} +1 -1
  13. package/dist/{chunk-EMY4I27X.js → chunk-7ZR5UPMB.js} +555 -5
  14. package/dist/{chunk-43J3M6KB.js → chunk-AII7CKTH.js} +45 -31
  15. package/dist/{chunk-VMJ3MMBX.js → chunk-AJKEHABI.js} +312 -18
  16. package/dist/{chunk-RBOMWNOG.js → chunk-AQ54MKSQ.js} +2 -2
  17. package/dist/{chunk-Z62HNKEJ.js → chunk-CEBIA5FD.js} +31 -5
  18. package/dist/{chunk-ANK2B36Y.js → chunk-D6FXM5OW.js} +6182 -28607
  19. package/dist/{chunk-BNMCXPG7.js → chunk-DGAIVMMN.js} +12 -3
  20. package/dist/{chunk-3DD6AOWC.js → chunk-DTXOJDEH.js} +26 -2
  21. package/dist/{chunk-RZSF5B46.js → chunk-E4PIFIC3.js} +100 -15
  22. package/dist/{chunk-H5NCNVDA.js → chunk-EV3M3EH7.js} +2 -2
  23. package/dist/chunk-HKMPVPO7.js +55 -0
  24. package/dist/{chunk-FA2BOX4O.js → chunk-JPR2WHHF.js} +1 -1
  25. package/dist/{chunk-ZMYPLFG3.js → chunk-M3SQ4YGD.js} +1 -1
  26. package/dist/{chunk-MIGEDH5P.js → chunk-MQPRB5K7.js} +9 -9
  27. package/dist/{chunk-AUFG23AA.js → chunk-OD2VTIHN.js} +19 -47
  28. package/dist/chunk-PUN7LMNS.js +39 -0
  29. package/dist/{chunk-JWOQNNN2.js → chunk-Q5G2ODUZ.js} +1 -1
  30. package/dist/{chunk-B2G7JHHB.js → chunk-R7STSBLC.js} +1 -1
  31. package/dist/{chunk-PMAMOSTP.js → chunk-SSU747O6.js} +85 -25
  32. package/dist/{chunk-YYYXRJUW.js → chunk-TI7B7UEO.js} +1 -1
  33. package/dist/{chunk-WO2BXCTQ.js → chunk-VXLJORHL.js} +1 -1
  34. package/dist/{chunk-CBPPJSAR.js → chunk-WVGSB3Z2.js} +2 -2
  35. package/dist/{chunk-IASWYRVG.js → chunk-X2FSFU4C.js} +4 -1
  36. package/dist/chunk-YNJEOGDL.js +22434 -0
  37. package/dist/{chunk-W4SQCOZU.js → chunk-ZOAEPWGL.js} +1 -1
  38. package/dist/{chunk-3DEVYTNQ.js → chunk-ZYHKJKSU.js} +1 -1
  39. package/dist/{chunk-WIOZAJ2W.js → chunk-ZZXLM64C.js} +1 -1
  40. package/dist/{cli-7WCNPBYC.js → cli-LEVCGAQV.js} +73 -71
  41. package/dist/{command-ARFK3OYF.js → command-FLSYCGIB.js} +47 -22
  42. package/dist/config-I3TVFYLH.js +10 -0
  43. package/dist/{connect-cmd-PCESZLTR.js → connect-cmd-MJMUONDY.js} +4 -4
  44. package/dist/{context-adopt-G5JAELE7.js → context-adopt-CE4KDXS3.js} +5 -4
  45. package/dist/{context-materialize-3HLPZAF6.js → context-materialize-QL33HDJN.js} +5 -4
  46. package/dist/{dist-RDLP4GGJ.js → dist-PXBSA7QX.js} +2 -1
  47. package/dist/{doctor-VOMYOHQU.js → doctor-FVDT3KJZ.js} +23 -16
  48. package/dist/{emit-artifact-cmd-TBF46VXZ.js → emit-artifact-cmd-7RPMRSVP.js} +11 -4
  49. package/dist/{emit-cmd-DCERAU27.js → emit-cmd-2QRMYPYO.js} +4 -3
  50. package/dist/{emit-criteria-cmd-3427XKFW.js → emit-criteria-cmd-MKI7WETO.js} +10 -1
  51. package/dist/{emit-finding-cmd-GSI75K36.js → emit-finding-cmd-RMLGZASB.js} +12 -1
  52. package/dist/{emit-result-cmd-3PRQKB55.js → emit-result-cmd-MTXAZ2GV.js} +13 -6
  53. package/dist/{exec-client-4XGXV3XN.js → exec-client-NPYNUAF3.js} +4 -3
  54. package/dist/{guest-init-GENRHNP7.js → guest-init-JWNNAH2H.js} +4 -3
  55. package/dist/{hook-fast-NJBBZQ5Q.js → hook-fast-XBOZ3N6L.js} +1 -1
  56. package/dist/{import-capture-cmd-AVZ4VIVJ.js → import-capture-cmd-T4556ELW.js} +3 -2
  57. package/dist/{import-ruler-cmd-GUHL6IY5.js → import-ruler-cmd-SG3UVGI7.js} +2 -1
  58. package/dist/index.js +3 -3
  59. package/dist/{init-WVR4BZQ4.js → init-BACXESVV.js} +21 -14
  60. package/dist/{init-OHYFIKZD.js → init-VLW7H6RW.js} +22 -15
  61. package/dist/{init-cmd-HMFNIFPI.js → init-cmd-VJFB5L7X.js} +10 -9
  62. package/dist/{install-DSUZE2TJ.js → install-NMAPLLBQ.js} +4 -3
  63. package/dist/{install-cmd-453C7IZT.js → install-cmd-B5SEU3G7.js} +2 -2
  64. package/dist/{logs-7RYUH5A6.js → logs-H55NWW4H.js} +1 -0
  65. package/dist/{loop-UAJB34KA.js → loop-D3243JKT.js} +29 -23
  66. package/dist/{machine-2JOWGRSZ.js → machine-EB3GEVI4.js} +20 -13
  67. package/dist/{session-sender-ED26V45B.js → session-sender-LMACEJJS.js} +6 -5
  68. package/dist/{starter-pack-LIZYMKYQ.js → starter-pack-MUXMAU4S.js} +4 -3
  69. package/dist/{status-6WNXX2O7.js → status-F4THTJJK.js} +24 -18
  70. package/dist/{sync-cmd-YONVGUYS.js → sync-cmd-M6JA3OEE.js} +5 -4
  71. package/dist/{watch-HHKAF26L.js → watch-NB5TGPEZ.js} +5 -4
  72. package/dist/{work-claim-cmd-LXBZTMJA.js → work-claim-cmd-UHMWOS3G.js} +13 -6
  73. package/dist/{work-cmd-OVNF44FY.js → work-cmd-6UMCFTAW.js} +9 -3
  74. package/dist/{work-comment-cmd-6DGQNTAH.js → work-comment-cmd-E4LEUIXZ.js} +9 -3
  75. package/dist/{work-open-pr-cmd-FCZHFHZS.js → work-open-pr-cmd-OPZWGSEQ.js} +10 -4
  76. package/dist/{work-pr-cmd-QJJVHZDC.js → work-pr-cmd-IDIAFFRU.js} +9 -2
  77. package/package.json +1 -1
  78. package/skill-pack/template/build/scripts/record-criteria.mjs +2 -1
  79. package/dist/chunk-7DBI6SNT.js +0 -55
  80. package/dist/config-HL2AIR3K.js +0 -9
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { EXEC_PORT } from './chunk-B2G7JHHB.js';
3
+ import { EXEC_PORT } from './chunk-R7STSBLC.js';
4
4
  import { createConnection } from 'net';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-ANK2B36Y.js';
3
+ import { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-YNJEOGDL.js';
4
4
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
5
5
  import { mkdirSync, appendFileSync, writeFileSync, renameSync, existsSync, unlinkSync, readdirSync, readFileSync } from 'fs';
6
6
  import { join, dirname } from 'path';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { CONTEXT_PIN_SCHEMA_VERSION, CONTEXT_PIN_FILENAME } from './chunk-EMY4I27X.js';
3
+ import { CONTEXT_PIN_SCHEMA_VERSION, CONTEXT_PIN_FILENAME } from './chunk-7ZR5UPMB.js';
4
4
  import { readFileSync, existsSync, writeFileSync, mkdirSync, utimesSync, statSync, unlinkSync } from 'fs';
5
5
  import { join, dirname } from 'path';
6
6
 
@@ -1,27 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-MIGEDH5P.js';
4
- import './chunk-7DBI6SNT.js';
3
+ import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-MQPRB5K7.js';
5
4
  import './chunk-F47JBIAW.js';
6
5
  import './chunk-BKO6JEZI.js';
7
- import './chunk-BNMCXPG7.js';
6
+ import './chunk-DGAIVMMN.js';
7
+ import './chunk-PUN7LMNS.js';
8
8
  import './chunk-BFESLKPP.js';
9
- import './chunk-3DEVYTNQ.js';
10
- import './chunk-ANK2B36Y.js';
9
+ import './chunk-SSU747O6.js';
10
+ import './chunk-ZYHKJKSU.js';
11
+ import './chunk-D6FXM5OW.js';
11
12
  import './chunk-USO2DKBD.js';
12
13
  import './chunk-N6LURUEF.js';
13
14
  import { C, NO_COLOR_FLAG, warnDeprecated, stripNoColor, API_KEY_FLAG_DEPRECATION } from './chunk-YRYMNBGQ.js';
14
15
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
15
16
  import { settingsPath, readSettings, SettingsParseError, listHookCandidates, wrapHooks, writeSettings, unwrapHooks, REGISTERED_EVENTS, cliCommand, removeHooks, removeStatusline, cliBinResolvable, mergeHooks, repointWrappedHooks, AUTO_WRAP_EVENTS, mergeStatusline } from './chunk-5QRP3MVS.js';
16
- import { pinExists } from './chunk-WIOZAJ2W.js';
17
- import './chunk-EMY4I27X.js';
17
+ import { pinExists } from './chunk-ZZXLM64C.js';
18
+ import './chunk-7ZR5UPMB.js';
18
19
  import './chunk-BCLJSQCV.js';
19
20
  import './chunk-BOLTI6LR.js';
21
+ import './chunk-YNJEOGDL.js';
20
22
  import './chunk-EABW6AJQ.js';
21
23
  import { resolveVersion } from './chunk-RA3O54FC.js';
22
24
  import './chunk-M5POMKKW.js';
23
25
  import './chunk-ZM2IMMYN.js';
24
- import { hookFiredMarkerPath, installedCliDistDir } from './chunk-FA2BOX4O.js';
26
+ import { hookFiredMarkerPath, installedCliDistDir } from './chunk-JPR2WHHF.js';
25
27
  import { managedHookScripts, removeJournalHooks, installPreCommitGuardHook, removePreCommitGuardHook } from './chunk-XCCLFVXM.js';
26
28
  import './chunk-BJ3KTMDH.js';
27
29
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -3632,7 +3634,7 @@ function warnIfApiKeyFlag(opts) {
3632
3634
  if (opts.apiKey !== void 0) warnDeprecated(API_KEY_FLAG_DEPRECATION);
3633
3635
  }
3634
3636
  async function installStarterPackInRepo() {
3635
- const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-LIZYMKYQ.js');
3637
+ const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-MUXMAU4S.js');
3636
3638
  const cwd = process.cwd();
3637
3639
  let repoRoot = cwd;
3638
3640
  try {
@@ -3792,8 +3794,8 @@ ${starter.output}`),
3792
3794
  }
3793
3795
  }
3794
3796
  async function realConnectDepsForCwd() {
3795
- const { realConnectDeps } = await import('./connect-cmd-PCESZLTR.js');
3796
- const { resolveRepoIdentity } = await import('./dist-RDLP4GGJ.js');
3797
+ const { realConnectDeps } = await import('./connect-cmd-MJMUONDY.js');
3798
+ const { resolveRepoIdentity } = await import('./dist-PXBSA7QX.js');
3797
3799
  return {
3798
3800
  ...realConnectDeps(),
3799
3801
  home: homeFromEnv(),
@@ -3815,7 +3817,7 @@ function buildProgram(argv = process.argv) {
3815
3817
  ).action(async (opts) => {
3816
3818
  let starterTemplate;
3817
3819
  if (opts.template !== void 0) {
3818
- const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-LIZYMKYQ.js');
3820
+ const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-MUXMAU4S.js');
3819
3821
  try {
3820
3822
  assertKnownTemplate(opts.template);
3821
3823
  } catch (err) {
@@ -3846,7 +3848,7 @@ function buildProgram(argv = process.argv) {
3846
3848
  else process.stdout.write(outcome.text);
3847
3849
  return;
3848
3850
  }
3849
- const { runInitCommand } = await import('./init-cmd-HMFNIFPI.js');
3851
+ const { runInitCommand } = await import('./init-cmd-VJFB5L7X.js');
3850
3852
  const code = await runInitCommand(
3851
3853
  { json: opts.json, factory: opts.factory },
3852
3854
  {
@@ -3858,7 +3860,7 @@ function buildProgram(argv = process.argv) {
3858
3860
  return { ok, text, detail };
3859
3861
  },
3860
3862
  runAgentSetup: async () => {
3861
- const { runAgentSetup } = await import('./agent-setup-USZ2SAXC.js');
3863
+ const { runAgentSetup } = await import('./agent-setup-TXLDY5RV.js');
3862
3864
  return runAgentSetup({ cwd: process.cwd() });
3863
3865
  },
3864
3866
  runDoctorChecks: gatherDoctorChecks
@@ -3870,7 +3872,7 @@ function buildProgram(argv = process.argv) {
3870
3872
  "after",
3871
3873
  "\nRun it in a repository, after `outerlayer login`. With a login, connect lists\nthe factories you can use and takes the first rule that leaves one answer:\n 1. --factory <org>/<factory>, or a factory id\n 2. the factory this repository is already connected to\n 3. the one factory this repository is linked to\n 4. the one factory you can use\n 5. on a terminal, ask; with no terminal, exit 1 and list each --factory value\n\nIt says what it chose and why. The choice is saved in this repository's git\ndirectory (outerlayer/connection.json), shared by every worktree of the\nclone and never committed. A factory key already belongs to one factory, so\nconnect changes nothing for it. Connect never links a repository.\n\nAfter it saves the choice, connect checks that this repository is linked to\nthe factory. If it is not, connect says so, prints the factory's Work page\nlink where you link it, and exits 2. The choice is saved either way. Run\nconnect again once the repository is linked. With --json, the document has\nlinked (true, false, or null when it could not be checked) and, when false,\nlinkUrl.\n"
3872
3874
  ).action(async (opts) => {
3873
- const { runConnectCommand } = await import('./connect-cmd-PCESZLTR.js');
3875
+ const { runConnectCommand } = await import('./connect-cmd-MJMUONDY.js');
3874
3876
  const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
3875
3877
  stdout: process.stdout,
3876
3878
  stderr: process.stderr
@@ -3918,7 +3920,7 @@ function buildProgram(argv = process.argv) {
3918
3920
  "\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"
3919
3921
  ).action(async (opts) => {
3920
3922
  warnIfApiKeyFlag(opts);
3921
- const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-YONVGUYS.js');
3923
+ const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-M6JA3OEE.js');
3922
3924
  try {
3923
3925
  const result = await runSync({
3924
3926
  url: opts.url,
@@ -3947,7 +3949,7 @@ function buildProgram(argv = process.argv) {
3947
3949
  if (invokedCommandToken(argv) === "watch") {
3948
3950
  warnDeprecated("`outerlayer watch` is now `outerlayer daemon`; the old name will be removed in a future release.");
3949
3951
  }
3950
- const { runWatch } = await import('./watch-HHKAF26L.js');
3952
+ const { runWatch } = await import('./watch-NB5TGPEZ.js');
3951
3953
  await runWatch({ once: opts.once });
3952
3954
  });
3953
3955
  program2.command("hook <event>", { hidden: true }).description("capture-hook fast path, installed by `init`").action(() => {
@@ -3976,7 +3978,7 @@ function buildProgram(argv = process.argv) {
3976
3978
  await startRelay({ port, socketPath: opts.socket, forwards });
3977
3979
  });
3978
3980
  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) => {
3979
- const { runVmExec } = await import('./exec-client-4XGXV3XN.js');
3981
+ const { runVmExec } = await import('./exec-client-NPYNUAF3.js');
3980
3982
  const env = {};
3981
3983
  for (const entry of opts.env) {
3982
3984
  const eq = entry.indexOf("=");
@@ -4001,7 +4003,7 @@ function buildProgram(argv = process.argv) {
4001
4003
  }
4002
4004
  });
4003
4005
  program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
4004
- const { runSessionSender } = await import('./session-sender-ED26V45B.js');
4006
+ const { runSessionSender } = await import('./session-sender-LMACEJJS.js');
4005
4007
  try {
4006
4008
  await runSessionSender();
4007
4009
  } catch (err) {
@@ -4009,7 +4011,7 @@ function buildProgram(argv = process.argv) {
4009
4011
  }
4010
4012
  });
4011
4013
  program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
4012
- const { realGuestHost, runGuestInit } = await import('./guest-init-GENRHNP7.js');
4014
+ const { realGuestHost, runGuestInit } = await import('./guest-init-JWNNAH2H.js');
4013
4015
  const { readFileSync: readFileSync3 } = await import('fs');
4014
4016
  try {
4015
4017
  runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
@@ -4036,7 +4038,7 @@ async function runCli(processArgv) {
4036
4038
  await buildProgram(argv).parseAsync(argv);
4037
4039
  }
4038
4040
  async function compileContext(opts) {
4039
- const { runEmit, EmitError } = await import('./emit-cmd-DCERAU27.js');
4041
+ const { runEmit, EmitError } = await import('./emit-cmd-2QRMYPYO.js');
4040
4042
  try {
4041
4043
  const result = runEmit({ cwd: opts.dir, check: opts.check, json: opts.json });
4042
4044
  if (result.exitCode !== 0) process.exitCode = result.exitCode;
@@ -4059,7 +4061,7 @@ function registerEmitCommands(program2) {
4059
4061
  return;
4060
4062
  }
4061
4063
  warnIfApiKeyFlag(opts);
4062
- const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-3PRQKB55.js');
4064
+ const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-MTXAZ2GV.js');
4063
4065
  try {
4064
4066
  const result = await runEmitResult({
4065
4067
  name,
@@ -4110,7 +4112,7 @@ locally so it never uploads. One correction can retire several duplicates.
4110
4112
  `
4111
4113
  ).action(async (file, opts) => {
4112
4114
  warnIfApiKeyFlag(opts);
4113
- const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-TBF46VXZ.js');
4115
+ const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-7RPMRSVP.js');
4114
4116
  let pr;
4115
4117
  if (opts.pr !== void 0) {
4116
4118
  pr = parseTrackerNumber(opts.pr);
@@ -4145,7 +4147,7 @@ locally so it never uploads. One correction can retire several duplicates.
4145
4147
  '\n outerlayer emit finding --id gate-skip --category tooling \\\n --title "The pre-push gate prints green when a step was skipped" \\\n --file scripts/git/pre-push-checks.mjs --where "build session"\n\nRecords one problem you hit in the factory: an instruction that is wrong or\nmissing (context), a flaky test, a misbehaving script (tooling), a local\nsetup trap (environment), a bug outside your own change (defect), or\nanything else. A problem in your own change is fixed, not recorded.\nA context finding needs --rule-path and --rule-relation, and --rule-quote\nunless the relation is missing.\n--item names the work item; without it, inside a recorded session, the\nitem that session was launched for is used automatically.\n'
4146
4148
  ).action(async (opts) => {
4147
4149
  warnIfApiKeyFlag(opts);
4148
- const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-GSI75K36.js');
4150
+ const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-RMLGZASB.js');
4149
4151
  try {
4150
4152
  refuseRemovedFindingFlags(opts);
4151
4153
  const result = await runEmitFinding({
@@ -4184,7 +4186,7 @@ locally so it never uploads. One correction can retire several duplicates.
4184
4186
  "\n outerlayer emit findings review.json --item 412\n\nRecords a whole batch at once \u2014 a FindingBatch JSON file (schemaVersion,\noptional headSha / contextSourceSha, and 1-500 findings), validated against\nthe same contract `emit finding` uses before anything is sent. Re-emitting\nan id already on the item replaces that row rather than adding a second one.\n--item names the work item; without it, inside a recorded session, the item\nthat session was launched for is used automatically.\n"
4185
4187
  ).action(async (file, opts) => {
4186
4188
  warnIfApiKeyFlag(opts);
4187
- const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-GSI75K36.js');
4189
+ const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-RMLGZASB.js');
4188
4190
  try {
4189
4191
  const result = await runEmitFindings({
4190
4192
  file,
@@ -4208,7 +4210,7 @@ locally so it never uploads. One correction can retire several duplicates.
4208
4210
  '\n outerlayer emit criteria criteria.json --item 412\n\nRecords the item\'s acceptance criteria as one list. The file is JSON:\n { "criteria": [ { "id": "AC-1", "text": "Given ...", "proof": null },\n { "id": "login.redirect", "text": "...", "proof": "screenshot" } ] }\nAn id is 1-64 characters of A-Z a-z 0-9 . _ : - and is the id evidence is bound to with\n`emit artifact --for`. proof is video, screenshot, report, log, test, file or null (any bound\nartifact proves it). The list holds 1 to 200 criteria, each text at most 2,000\ncharacters, and no id twice. The list is validated before anything is sent.\nOnce an item has a list, only a person can replace it: run the command outside an\nagent session, with your own login. A key bound to no member cannot replace it either.\n--item names the work item; without it, inside a recorded session, the item that\nsession was launched for is used automatically.\n'
4209
4211
  ).action(async (file, opts) => {
4210
4212
  warnIfApiKeyFlag(opts);
4211
- const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-3427XKFW.js');
4213
+ const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-MKI7WETO.js');
4212
4214
  try {
4213
4215
  const result = await runEmitCriteria({
4214
4216
  file,
@@ -4235,7 +4237,7 @@ function registerWorkCommands(program2) {
4235
4237
  "\n outerlayer work build --issue 42 # a host builds it\n outerlayer work build --item 7 # retry an item already on Work\n outerlayer work build --issue 42 --local # you build it\n outerlayer work build --issue ENG-123 --tracker linear # a Linear issue\n\nWithout --local, records a build request: a host takes the item when it\nhas a free slot. It never links the calling session and never takes a\nlease, even run from inside one.\n\nWith --local, puts the item on Work with no build request, so no host\ntakes it, and prints the line that starts your session on it. That\nsession links itself and holds the item's lease while it works.\n"
4236
4238
  ).action(async (opts) => {
4237
4239
  warnIfApiKeyFlag(opts);
4238
- const { runWorkBuild, WorkCommandError } = await import('./work-cmd-OVNF44FY.js');
4240
+ const { runWorkBuild, WorkCommandError } = await import('./work-cmd-6UMCFTAW.js');
4239
4241
  try {
4240
4242
  await runWorkBuild(opts);
4241
4243
  } catch (err) {
@@ -4251,7 +4253,7 @@ function registerWorkCommands(program2) {
4251
4253
  "\n outerlayer work link-session 42\n\nNames an item that already exists on the calling session \u2014 it never\ncreates one. Create one with `outerlayer work build --local`. Linking\nthe same session to the same item twice is a no-op. Also takes or\nrenews that session's own 20-minute lease, unless --no-lease or\n--ended is given, or another worker already holds a live one.\n"
4252
4254
  ).action(async (number, opts) => {
4253
4255
  warnIfApiKeyFlag(opts);
4254
- const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-OVNF44FY.js');
4256
+ const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-6UMCFTAW.js');
4255
4257
  try {
4256
4258
  await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
4257
4259
  } catch (err) {
@@ -4276,8 +4278,8 @@ most one action flag may be given.
4276
4278
  `
4277
4279
  ).action(async (opts) => {
4278
4280
  warnIfApiKeyFlag(opts);
4279
- const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-6DGQNTAH.js');
4280
- const { WorkCommandError } = await import('./work-cmd-OVNF44FY.js');
4281
+ const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-E4LEUIXZ.js');
4282
+ const { WorkCommandError } = await import('./work-cmd-6UMCFTAW.js');
4281
4283
  try {
4282
4284
  await runWorkComment(opts);
4283
4285
  } catch (err) {
@@ -4293,8 +4295,8 @@ most one action flag may be given.
4293
4295
  "\n outerlayer work threads --item 7\n\nPrints the item's general thread, then one thread per acceptance\ncriterion that carries proof or a comment, each with who is waiting\non whom next.\n"
4294
4296
  ).action(async (opts) => {
4295
4297
  warnIfApiKeyFlag(opts);
4296
- const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-6DGQNTAH.js');
4297
- const { WorkCommandError } = await import('./work-cmd-OVNF44FY.js');
4298
+ const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-E4LEUIXZ.js');
4299
+ const { WorkCommandError } = await import('./work-cmd-6UMCFTAW.js');
4298
4300
  try {
4299
4301
  await runWorkThreads(opts);
4300
4302
  } catch (err) {
@@ -4316,7 +4318,7 @@ live addition remains on it.
4316
4318
  `
4317
4319
  ).action(async (opts) => {
4318
4320
  warnIfApiKeyFlag(opts);
4319
- const { runWorkRemove, WorkCommandError } = await import('./work-cmd-OVNF44FY.js');
4321
+ const { runWorkRemove, WorkCommandError } = await import('./work-cmd-6UMCFTAW.js');
4320
4322
  try {
4321
4323
  await runWorkRemove(opts);
4322
4324
  } catch (err) {
@@ -4329,7 +4331,7 @@ live addition remains on it.
4329
4331
  });
4330
4332
  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").option("--repo <owner/name>", "repository (default: the current 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) => {
4331
4333
  warnIfApiKeyFlag(opts);
4332
- const { runWorkStatus, WorkCommandError } = await import('./work-cmd-OVNF44FY.js');
4334
+ const { runWorkStatus, WorkCommandError } = await import('./work-cmd-6UMCFTAW.js');
4333
4335
  try {
4334
4336
  await runWorkStatus(opts);
4335
4337
  } catch (err) {
@@ -4342,7 +4344,7 @@ live addition remains on it.
4342
4344
  });
4343
4345
  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 with an unused build request and 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) => {
4344
4346
  warnIfApiKeyFlag(opts);
4345
- const { runWorkList, WorkCommandError } = await import('./work-cmd-OVNF44FY.js');
4347
+ const { runWorkList, WorkCommandError } = await import('./work-cmd-6UMCFTAW.js');
4346
4348
  try {
4347
4349
  await runWorkList(opts);
4348
4350
  } catch (err) {
@@ -4358,7 +4360,7 @@ live addition remains on it.
4358
4360
  "\n outerlayer work claim --item 42 --kind implement\n\nRecords a lease for this host. A live lease already held by a\ndifferent host is refused; claiming again under the same host extends\nit.\n"
4359
4361
  ).action(async (opts) => {
4360
4362
  warnIfApiKeyFlag(opts);
4361
- const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-LXBZTMJA.js');
4363
+ const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-UHMWOS3G.js');
4362
4364
  try {
4363
4365
  await runWorkClaim(opts);
4364
4366
  } catch (err) {
@@ -4374,7 +4376,7 @@ live addition remains on it.
4374
4376
  "\n outerlayer work renew --item 42\n\nExtends this host's own live lease. Refused with a 410 if the lease\nhas expired, or a 403 if a different host holds it.\n"
4375
4377
  ).action(async (opts) => {
4376
4378
  warnIfApiKeyFlag(opts);
4377
- const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-LXBZTMJA.js');
4379
+ const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-UHMWOS3G.js');
4378
4380
  try {
4379
4381
  await runWorkRenew(opts);
4380
4382
  } catch (err) {
@@ -4393,7 +4395,7 @@ live addition remains on it.
4393
4395
  "\n outerlayer work release --item 42 --outcome ok\n\nMarks this host's lease released, optionally with an outcome.\nReleasing an already-released lease is a no-op that returns the\nrecorded release time and outcome.\n"
4394
4396
  ).action(async (opts) => {
4395
4397
  warnIfApiKeyFlag(opts);
4396
- const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-LXBZTMJA.js');
4398
+ const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-UHMWOS3G.js');
4397
4399
  try {
4398
4400
  await runWorkRelease(opts);
4399
4401
  } catch (err) {
@@ -4409,7 +4411,7 @@ live addition remains on it.
4409
4411
  "\n outerlayer work pr 481\n\nRun inside a session already on a work item. Records that pull\nrequest 481 in the checkout's repository belongs to that item \u2014 the\nsame fact a `pr-link` in the session's own transcript records on\nsync. Idempotent: declaring the same pull request twice is a no-op.\n"
4410
4412
  ).action(async (number, opts) => {
4411
4413
  warnIfApiKeyFlag(opts);
4412
- const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-QJJVHZDC.js');
4414
+ const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-IDIAFFRU.js');
4413
4415
  try {
4414
4416
  await runWorkPr({ ...opts, number });
4415
4417
  } catch (err) {
@@ -4425,8 +4427,8 @@ live addition remains on it.
4425
4427
  '\n outerlayer work open-pr --title "Add the thing" --body-file pr.md\n\nIn a host build, which holds an item key, the gateway opens the pull\nrequest as the factory\'s GitHub App, from the branch the claim named,\nor edits the one already open on that branch. No gh command runs.\nIn your own session it runs `gh pr create` (or `gh pr edit`) under your\nlogin, then declares the pull request on the item, as `work pr` does.\nRun it again after a change to the title or description.\n'
4426
4428
  ).action(async (opts) => {
4427
4429
  warnIfApiKeyFlag(opts);
4428
- const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-FCZHFHZS.js');
4429
- const { WorkCommandError } = await import('./work-cmd-OVNF44FY.js');
4430
+ const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-OPZWGSEQ.js');
4431
+ const { WorkCommandError } = await import('./work-cmd-6UMCFTAW.js');
4430
4432
  try {
4431
4433
  await runWorkOpenPr(opts);
4432
4434
  } catch (err) {
@@ -4442,8 +4444,8 @@ function registerRunnerCommands(program2) {
4442
4444
  const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
4443
4445
  const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
4444
4446
  runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
4445
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-HL2AIR3K.js');
4446
- const { start, RunnerStartError } = await import('./loop-UAJB34KA.js');
4447
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-I3TVFYLH.js');
4448
+ const { start, RunnerStartError } = await import('./loop-D3243JKT.js');
4447
4449
  const { RunnerAlreadyRunningError } = await import('./pidfile-UZRH774M.js');
4448
4450
  const configPath = opts.config ?? defaultRunnerConfigPath();
4449
4451
  try {
@@ -4458,8 +4460,8 @@ function registerRunnerCommands(program2) {
4458
4460
  }
4459
4461
  });
4460
4462
  runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
4461
- const { defaultRunnerConfigPath } = await import('./config-HL2AIR3K.js');
4462
- const { runRunnerCheck } = await import('./check-CCVPBN7A.js');
4463
+ const { defaultRunnerConfigPath } = await import('./config-I3TVFYLH.js');
4464
+ const { runRunnerCheck } = await import('./check-ASZL5BEO.js');
4463
4465
  const configPath = opts.config ?? defaultRunnerConfigPath();
4464
4466
  const result = await runRunnerCheck(configPath);
4465
4467
  if (!result.ok) {
@@ -4475,8 +4477,8 @@ function registerRunnerCommands(program2) {
4475
4477
  `);
4476
4478
  });
4477
4479
  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", "with --service, replace a unit this command did not write").addOption(new Option("--unit-name <name>", "with --service, the unit's name").hideHelp()).action(async (opts) => {
4478
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-HL2AIR3K.js');
4479
- const { runRunnerInstall, RunnerInstallError } = await import('./install-cmd-453C7IZT.js');
4480
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-I3TVFYLH.js');
4481
+ const { runRunnerInstall, RunnerInstallError } = await import('./install-cmd-B5SEU3G7.js');
4480
4482
  const configPath = opts.config ?? defaultRunnerConfigPath();
4481
4483
  if (opts.service !== true) {
4482
4484
  for (const flag of ["print", "user", "replace", "unitName"]) {
@@ -4488,7 +4490,7 @@ function registerRunnerCommands(program2) {
4488
4490
  }
4489
4491
  try {
4490
4492
  if (opts.service === true) {
4491
- const { installServiceCommand } = await import('./command-ARFK3OYF.js');
4493
+ const { installServiceCommand } = await import('./command-FLSYCGIB.js');
4492
4494
  const result2 = await installServiceCommand({
4493
4495
  configPath,
4494
4496
  print: opts.print,
@@ -4527,18 +4529,18 @@ To keep it running, run ${C.yellow}outerlayer runner install --service${C.reset}
4527
4529
  fail("pass --service: `outerlayer runner uninstall --service` removes the runner's service.");
4528
4530
  return;
4529
4531
  }
4530
- const { defaultRunnerConfigPath } = await import('./config-HL2AIR3K.js');
4531
- const { uninstallServiceCommand } = await import('./command-ARFK3OYF.js');
4532
+ const { defaultRunnerConfigPath } = await import('./config-I3TVFYLH.js');
4533
+ const { uninstallServiceCommand } = await import('./command-FLSYCGIB.js');
4532
4534
  const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
4533
4535
  if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
4534
4536
  `);
4535
4537
  else fail(result.lines.length > 0 ? result.lines.join("\n ") : "the service was not removed");
4536
4538
  });
4537
4539
  runnerCmd.command("init").description("Write a runner block that fits this machine; on macOS, offers a Linux VM").option("--config <path>", configOption).option("--vm", "on macOS, run the runner in a Linux VM (Lima), with container builds").option("--no-vm", "on macOS, skip the VM and run builds as unisolated processes").option("--allow-process-builds", "where builds cannot be isolated, run them as processes anyway").addOption(new Option("--config-stdin", "the VM-side hand-off: read the whole config as JSON on stdin").hideHelp()).addOption(new Option("--vm-cli-package <path>", "install this packed CLI tarball in the VM instead of the published version").hideHelp()).addOption(new Option("--unit-name <name>", "the service unit's name").hideHelp()).action(async (opts) => {
4538
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-HL2AIR3K.js');
4539
- const { runRunnerInit, RunnerInitError } = await import('./init-WVR4BZQ4.js');
4540
- const { detectMachine } = await import('./machine-2JOWGRSZ.js');
4541
- const { chooseVm, runVmInit, VmInitError } = await import('./init-OHYFIKZD.js');
4540
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-I3TVFYLH.js');
4541
+ const { runRunnerInit, RunnerInitError } = await import('./init-BACXESVV.js');
4542
+ const { detectMachine } = await import('./machine-EB3GEVI4.js');
4543
+ const { chooseVm, runVmInit, VmInitError } = await import('./init-VLW7H6RW.js');
4542
4544
  const configPath = opts.config ?? defaultRunnerConfigPath();
4543
4545
  try {
4544
4546
  const machine = detectMachine();
@@ -4607,7 +4609,7 @@ ${C.yellow}${result.note}${C.reset}
4607
4609
  To isolate builds in containers instead, run ${C.yellow}outerlayer runner init --vm${C.reset}.
4608
4610
  `);
4609
4611
  }
4610
- const { runRunnerInstall, RunnerInstallError } = await import('./install-cmd-453C7IZT.js');
4612
+ const { runRunnerInstall, RunnerInstallError } = await import('./install-cmd-B5SEU3G7.js');
4611
4613
  let installedLayout = false;
4612
4614
  try {
4613
4615
  const installed = runRunnerInstall({ configPath, entryPath: process.argv[1] ?? "", nodePath: process.execPath });
@@ -4622,7 +4624,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
4622
4624
  }
4623
4625
  let serviceUp = false;
4624
4626
  if (installedLayout) {
4625
- const { installServiceCommand } = await import('./command-ARFK3OYF.js');
4627
+ const { installServiceCommand } = await import('./command-FLSYCGIB.js');
4626
4628
  const service = await installServiceCommand({
4627
4629
  configPath,
4628
4630
  entryPath: process.argv[1] ?? "",
@@ -4660,8 +4662,8 @@ Next:
4660
4662
  "after",
4661
4663
  "\nFetches the head of the default branch into the runner's cache, reads its\n.devcontainer/devcontainer.json, and 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"
4662
4664
  ).action(async (opts) => {
4663
- const { defaultRunnerConfigPath } = await import('./config-HL2AIR3K.js');
4664
- const { buildRepositoryImage, RecipeError } = await import('./build-PAEKVYVK.js');
4665
+ const { defaultRunnerConfigPath } = await import('./config-I3TVFYLH.js');
4666
+ const { buildRepositoryImage, RecipeError } = await import('./build-JF5UOWKJ.js');
4665
4667
  const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
4666
4668
  const { createDockerHost } = await import('./docker-NEGDLU6D.js');
4667
4669
  try {
@@ -4712,16 +4714,16 @@ Next:
4712
4714
  }
4713
4715
  });
4714
4716
  runnerCmd.command("stop").description("Take no more work; wait for running jobs to finish, 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) => {
4715
- const { defaultRunnerConfigPath } = await import('./config-HL2AIR3K.js');
4716
- const { requestStop } = await import('./loop-UAJB34KA.js');
4717
+ const { defaultRunnerConfigPath } = await import('./config-I3TVFYLH.js');
4718
+ const { requestStop } = await import('./loop-D3243JKT.js');
4717
4719
  const configPath = opts.config ?? defaultRunnerConfigPath();
4718
4720
  await requestStop(configPath, Boolean(opts.now));
4719
4721
  });
4720
4722
  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) => {
4721
- const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-HL2AIR3K.js');
4723
+ const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-I3TVFYLH.js');
4722
4724
  const { jobsDir, runnerDir } = await import('./paths-OYKMVYJP.js');
4723
- const { listJobFiles, runnerProcessState } = await import('./loop-UAJB34KA.js');
4724
- const { renderStatus } = await import('./status-6WNXX2O7.js');
4725
+ const { listJobFiles, runnerProcessState } = await import('./loop-D3243JKT.js');
4726
+ const { renderStatus } = await import('./status-F4THTJJK.js');
4725
4727
  const { readHousekeepingRecord } = await import('./record-C43U4PKS.js');
4726
4728
  const path2 = await import('path');
4727
4729
  const configPath = opts.config ?? defaultRunnerConfigPath();
@@ -4739,7 +4741,7 @@ Next:
4739
4741
  const service = await (async () => {
4740
4742
  if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
4741
4743
  const { inspectService, realInspectProbes } = await import('./inspect-XAUSB7L3.js');
4742
- const { DEFAULT_UNIT_NAME } = await import('./install-DSUZE2TJ.js');
4744
+ const { DEFAULT_UNIT_NAME } = await import('./install-NMAPLLBQ.js');
4743
4745
  const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
4744
4746
  return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
4745
4747
  })();
@@ -4772,9 +4774,9 @@ Next:
4772
4774
  );
4773
4775
  });
4774
4776
  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) => {
4775
- const { defaultRunnerConfigPath } = await import('./config-HL2AIR3K.js');
4776
- const { listJobFiles } = await import('./loop-UAJB34KA.js');
4777
- const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-7RYUH5A6.js');
4777
+ const { defaultRunnerConfigPath } = await import('./config-I3TVFYLH.js');
4778
+ const { listJobFiles } = await import('./loop-D3243JKT.js');
4779
+ const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-H55NWW4H.js');
4778
4780
  const configPath = opts.config ?? defaultRunnerConfigPath();
4779
4781
  const item = parseTrackerNumber(itemArg);
4780
4782
  if (item === void 0) {
@@ -5030,7 +5032,7 @@ function registerMcpCommands(program2) {
5030
5032
  function registerImportCommands(program2) {
5031
5033
  const importCmd = program2.command("import").description("Import an existing config format into .outerlayer/");
5032
5034
  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) => {
5033
- const { runImportRuler, ImportRulerError } = await import('./import-ruler-cmd-GUHL6IY5.js');
5035
+ const { runImportRuler, ImportRulerError } = await import('./import-ruler-cmd-SG3UVGI7.js');
5034
5036
  try {
5035
5037
  const result = runImportRuler({ cwd: opts.dir, json: opts.json });
5036
5038
  if (result.exitCode !== 0) process.exitCode = result.exitCode;
@@ -5046,7 +5048,7 @@ function registerImportCommands(program2) {
5046
5048
  "after",
5047
5049
  "\nInstalls the four maintained skills (emitting-evidence, amend,\nreporting-findings, outerlayer) 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"
5048
5050
  ).action(async (opts) => {
5049
- const { runImportCapture, ImportCaptureError } = await import('./import-capture-cmd-AVZ4VIVJ.js');
5051
+ const { runImportCapture, ImportCaptureError } = await import('./import-capture-cmd-T4556ELW.js');
5050
5052
  try {
5051
5053
  runImportCapture({ cwd: opts.dir, json: opts.json });
5052
5054
  } catch (err) {
@@ -5089,7 +5091,7 @@ function registerContextCommands(program2) {
5089
5091
  await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
5090
5092
  });
5091
5093
  contextCmd.command("adopt <stagedDir>", { hidden: true }).description("Copy context the runner staged into this checkout (container builds)").option("--json", "machine-readable JSON output").action(async (stagedDir) => {
5092
- const { runContextAdopt } = await import('./context-adopt-G5JAELE7.js');
5094
+ const { runContextAdopt } = await import('./context-adopt-CE4KDXS3.js');
5093
5095
  const { exitCode, stdout } = runContextAdopt(stagedDir, process.cwd());
5094
5096
  process.stdout.write(stdout);
5095
5097
  process.exitCode = exitCode;
@@ -5098,7 +5100,7 @@ function registerContextCommands(program2) {
5098
5100
  "after",
5099
5101
  "\nThe same flow SessionStart runs automatically, exposed for a manual retry or a\nfirst check outside a session. Writes AGENTS.md, .claude/**, and .outerlayer/**.\n"
5100
5102
  ).action(async (opts) => {
5101
- const { materializeContext } = await import('./context-materialize-3HLPZAF6.js');
5103
+ const { materializeContext } = await import('./context-materialize-QL33HDJN.js');
5102
5104
  const result = await materializeContext({ cwd: process.cwd(), sessionId: `manual-${Date.now()}` });
5103
5105
  const output = formatContextMaterializeOutput(result);
5104
5106
  if (output.exitCode !== void 0) process.exitCode = output.exitCode;