@outerlayer/cli 0.33.0-next.20261023003700 → 0.33.0-next.20261023120437

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 (107) hide show
  1. package/README.md +11 -4
  2. package/dist/{agent-setup-55ZDEXCS.js → agent-setup-YHEW3WXB.js} +10 -10
  3. package/dist/{artifact-link-cmd-6FF2Y6QI.js → artifact-link-cmd-7FYKWA7J.js} +2 -2
  4. package/dist/{build-disk-JHTMPRAA.js → build-disk-ECTLWTPC.js} +4 -4
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-Y4P7QARW.js → builder-LUPHKUFM.js} +3 -3
  7. package/dist/{check-MRYFTLOO.js → check-4QNLMDP7.js} +28 -28
  8. package/dist/{chunk-3RIFVLPO.js → chunk-2JLM4GUF.js} +12 -12
  9. package/dist/{chunk-G63KT5I5.js → chunk-44V5SD4G.js} +1 -1
  10. package/dist/{chunk-ULBNTSAD.js → chunk-5M2J7B5N.js} +2 -2
  11. package/dist/{chunk-LJG6EMLJ.js → chunk-6CXNWKWD.js} +1 -1
  12. package/dist/{chunk-BKADJZ7F.js → chunk-6SPD266O.js} +3 -3
  13. package/dist/{chunk-Q2CMEQV7.js → chunk-7IFYI7XF.js} +3 -3
  14. package/dist/{chunk-AU346ENF.js → chunk-7UPMYRPS.js} +4 -4
  15. package/dist/{chunk-NSPRS7WK.js → chunk-7V5GUEDU.js} +1 -1
  16. package/dist/{chunk-EUVE2EAE.js → chunk-AKZRGFGT.js} +3 -3
  17. package/dist/{chunk-2N67C6IV.js → chunk-D3EDZPJR.js} +5 -5
  18. package/dist/{chunk-BJQ25STI.js → chunk-DKFUXYGD.js} +4 -4
  19. package/dist/{chunk-HE4FBF4T.js → chunk-EHOFFTVX.js} +2 -2
  20. package/dist/{chunk-HXA5GIHK.js → chunk-EJL6CWSP.js} +6 -6
  21. package/dist/chunk-ER6KQCVJ.js +18 -0
  22. package/dist/{chunk-DISTLL2Q.js → chunk-EXZACZ2P.js} +1 -1
  23. package/dist/{chunk-E6CO3MJE.js → chunk-F2D5BSXS.js} +38 -2
  24. package/dist/{chunk-UIUGTW5C.js → chunk-FT7MUQGO.js} +2 -2
  25. package/dist/{chunk-PWH3BEZF.js → chunk-FZUFUVLK.js} +13 -13
  26. package/dist/{chunk-XL2XWWU7.js → chunk-GO2DUPQS.js} +3 -3
  27. package/dist/{chunk-B2JURP6A.js → chunk-HLZMAJJD.js} +2 -2
  28. package/dist/{chunk-2EGCI2VW.js → chunk-IUPY54BZ.js} +10 -10
  29. package/dist/{chunk-GFYEMCPP.js → chunk-JEVKOZBB.js} +1 -1
  30. package/dist/{chunk-DY7Y7UT4.js → chunk-KUE4V2SK.js} +2 -2
  31. package/dist/{chunk-SVDOA4W2.js → chunk-L6MDOEHN.js} +7 -7
  32. package/dist/{chunk-HJYBWJAS.js → chunk-LYGI3T66.js} +2 -2
  33. package/dist/{chunk-EWVYQLD3.js → chunk-MPC2UAW2.js} +1 -1
  34. package/dist/{chunk-5DNCFOXA.js → chunk-NIY2UBT6.js} +1 -1
  35. package/dist/{chunk-FR7HWWCF.js → chunk-OGMXVPCS.js} +1 -1
  36. package/dist/{chunk-6Z4SZHV2.js → chunk-QKNFU5GA.js} +5 -5
  37. package/dist/{chunk-2WMZPJVE.js → chunk-S5CNYXUA.js} +4 -4
  38. package/dist/{chunk-7HHNGZS5.js → chunk-SQQD5MST.js} +4 -4
  39. package/dist/{chunk-QPWFVE3X.js → chunk-UK4RGH46.js} +2 -2
  40. package/dist/{chunk-JHTJPQSL.js → chunk-V673DFOL.js} +4 -4
  41. package/dist/{chunk-RQJMN5TJ.js → chunk-VWQCYOBS.js} +2 -2
  42. package/dist/{chunk-W2AEL4BJ.js → chunk-X4JEBMYN.js} +1 -1
  43. package/dist/{chunk-T5REPMNL.js → chunk-XCRET2GZ.js} +2 -2
  44. package/dist/{chunk-XHHTMFCX.js → chunk-YGZLRX5U.js} +1 -1
  45. package/dist/{chunk-SDU2IE22.js → chunk-YSM4EEUK.js} +12 -12
  46. package/dist/{chunk-VT4TTJPG.js → chunk-YXMGHGHR.js} +5 -5
  47. package/dist/{chunk-AVTI3FL5.js → chunk-ZF24JN7R.js} +1 -1
  48. package/dist/{claude-launcher-NTYHJUJM.js → claude-launcher-YRPW4SWA.js} +5 -5
  49. package/dist/{cli-K6XGL4EZ.js → cli-BC7JWQUQ.js} +149 -103
  50. package/dist/{command-7FAIIQGF.js → command-SQ4466SL.js} +19 -19
  51. package/dist/{config-QXMUWJAQ.js → config-MVA7YTFW.js} +5 -5
  52. package/dist/{connect-cmd-P5GASVAF.js → connect-cmd-KWXV2CGC.js} +8 -8
  53. package/dist/{container-start-CVP3NTDG.js → container-start-AQJ64LCF.js} +20 -20
  54. package/dist/{context-cleanup-BX5Y3AFL.js → context-cleanup-A2FGVVPH.js} +3 -3
  55. package/dist/{context-show-cmd-3EPJ7CJC.js → context-show-cmd-6F4UF4ND.js} +9 -9
  56. package/dist/{control-plane-launch-A3YCHQNQ.js → control-plane-launch-7SOH6IMA.js} +6 -6
  57. package/dist/{dist-ACTRIBVW.js → dist-IG2DKUJJ.js} +2 -2
  58. package/dist/{docker-ANW76BNW.js → docker-YKYQJHL2.js} +3 -3
  59. package/dist/{doctor-GJAHI3KU.js → doctor-4YZOP343.js} +20 -20
  60. package/dist/{emit-artifact-cmd-FDPJKGOO.js → emit-artifact-cmd-6QTTWBVN.js} +13 -13
  61. package/dist/{emit-cmd-OX6LYS6I.js → emit-cmd-3FG7FEGO.js} +6 -6
  62. package/dist/{emit-criteria-cmd-3SVGCMJN.js → emit-criteria-cmd-22VVCL2W.js} +10 -10
  63. package/dist/{emit-demo-cmd-6DF2QIAS.js → emit-demo-cmd-IQRS7BP2.js} +243 -51
  64. package/dist/{emit-finding-cmd-TLJWBGQE.js → emit-finding-cmd-TXDPJFVT.js} +10 -10
  65. package/dist/{emit-result-cmd-CJNVDV5V.js → emit-result-cmd-QHJDUC7J.js} +12 -12
  66. package/dist/{emit-step-cmd-347CZO7Y.js → emit-step-cmd-TQCOLXAA.js} +10 -10
  67. package/dist/{findings-cmd-LHTYEHYB.js → findings-cmd-EURKADAY.js} +10 -10
  68. package/dist/{fleet-readiness-KGR5AC2J.js → fleet-readiness-GXDSFTLP.js} +8 -8
  69. package/dist/{governing-source-JZQZUTMA.js → governing-source-IRRP7G5G.js} +13 -13
  70. package/dist/{hook-fast-6WDMNZG5.js → hook-fast-3IYSWDL4.js} +1 -1
  71. package/dist/index.js +4 -4
  72. package/dist/{init-ZQ5B3TJZ.js → init-63X6ECKF.js} +19 -19
  73. package/dist/{init-XDOKWBL2.js → init-T64C4MID.js} +19 -19
  74. package/dist/{init-cmd-YMGW2WXJ.js → init-cmd-7CGCDLBZ.js} +18 -18
  75. package/dist/{init-update-X7YLZL6H.js → init-update-LFKSC6Y4.js} +17 -17
  76. package/dist/{install-QPA7DQHO.js → install-47Z7VNWP.js} +6 -6
  77. package/dist/{layout-JGF7MJHG.js → layout-44S4OYLK.js} +4 -4
  78. package/dist/{login-browser-3RIZQJY2.js → login-browser-BJZYKWHF.js} +2 -2
  79. package/dist/{loop-UJL2UCUM.js → loop-YJF27PUS.js} +28 -28
  80. package/dist/{machine-2YPAFFCH.js → machine-VBITNWTR.js} +19 -19
  81. package/dist/{machine-skills-AGERT2HN.js → machine-skills-GOKW3U5N.js} +4 -4
  82. package/dist/{runner-env-HOUXKWIJ.js → runner-env-ILP6BAC2.js} +7 -7
  83. package/dist/{runner-identity-KPUVTRLS.js → runner-identity-MF3AYBR6.js} +3 -3
  84. package/dist/{runner-key-FUJD66R6.js → runner-key-5SGBLTDJ.js} +19 -19
  85. package/dist/{session-sender-7B3ZDWMC.js → session-sender-2DYAJIMM.js} +13 -13
  86. package/dist/{spec-cmd-Q26NE22H.js → spec-cmd-E6SINBX6.js} +11 -11
  87. package/dist/{starter-pack-UBEC5LTE.js → starter-pack-FWTXE6XB.js} +5 -5
  88. package/dist/{status-2KNTILGQ.js → status-AYHBGIAP.js} +24 -24
  89. package/dist/{sync-cmd-SSUYTMLJ.js → sync-cmd-NGX2PGIW.js} +12 -12
  90. package/dist/{watch-L5NCO46E.js → watch-ZIWZVU3Z.js} +12 -12
  91. package/dist/{work-claim-cmd-NJNOQFQE.js → work-claim-cmd-CIVWB7EJ.js} +15 -15
  92. package/dist/{work-cmd-W7WEHMQJ.js → work-cmd-OO6K6ELP.js} +10 -10
  93. package/dist/{work-comment-cmd-SSUOGVDD.js → work-comment-cmd-SY7NY2CR.js} +10 -10
  94. package/dist/work-demo-cmd-Y7EU335L.js +62 -0
  95. package/dist/{work-logs-cmd-WPMWMDX6.js → work-logs-cmd-PWOFLTGD.js} +10 -10
  96. package/dist/{work-open-pr-cmd-NO5YLOXD.js → work-open-pr-cmd-AJUTKYWN.js} +11 -11
  97. package/dist/{work-pr-cmd-37B5KECR.js → work-pr-cmd-DH43AH3V.js} +10 -10
  98. package/dist/work-proofs-cmd-6W6DDAP6.js +111 -0
  99. package/dist/{work-stop-cmd-3BJLXUJ3.js → work-stop-cmd-WZHBEKE4.js} +10 -10
  100. package/package.json +1 -1
  101. package/skill-pack/maintained/outerlayer-amend/SKILL.md +36 -34
  102. package/skill-pack/maintained/outerlayer-amend/scripts/rerecord-demo.mjs +187 -0
  103. package/skill-pack/maintained/outerlayer-build/SKILL.md +7 -2
  104. package/skill-pack/maintained/outerlayer-build/references/agent-briefs.md +16 -4
  105. package/skill-pack/maintained/outerlayer-build/references/evidence.md +11 -1
  106. package/skill-pack/maintained/outerlayer-build/references/release.md +3 -2
  107. package/skill-pack/maintained/outerlayer-evidence/SKILL.md +21 -18
@@ -1,19 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { runEmitArtifact } from './chunk-6Z4SZHV2.js';
4
- import './chunk-2N67C6IV.js';
5
- import './chunk-AU346ENF.js';
3
+ import { readNewestDemo } from './chunk-ER6KQCVJ.js';
4
+ import { runEmitArtifact } from './chunk-QKNFU5GA.js';
5
+ import './chunk-D3EDZPJR.js';
6
+ import './chunk-7UPMYRPS.js';
6
7
  import './chunk-ESVW4MJY.js';
7
8
  import './chunk-TBT347UY.js';
8
9
  import { VoiceDownloadError, downloadPinned, sha256OfFile } from './chunk-2PGI6RDE.js';
9
10
  import { VOICE_PACK_FILES, VOICE_PACK_VERSION } from './chunk-NE63JADS.js';
10
11
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
11
- import { autoConnect } from './chunk-B2JURP6A.js';
12
- import './chunk-2WMZPJVE.js';
13
- import './chunk-EWVYQLD3.js';
14
- import { resolveRepoIdentity } from './chunk-5DNCFOXA.js';
15
- import './chunk-HJYBWJAS.js';
16
- import './chunk-NSPRS7WK.js';
12
+ import { autoConnect } from './chunk-HLZMAJJD.js';
13
+ import './chunk-S5CNYXUA.js';
14
+ import './chunk-MPC2UAW2.js';
15
+ import { resolveRepoIdentity } from './chunk-NIY2UBT6.js';
16
+ import './chunk-LYGI3T66.js';
17
+ import './chunk-7V5GUEDU.js';
17
18
  import './chunk-G2JWZDFA.js';
18
19
  import { C } from './chunk-ANPNT6PM.js';
19
20
  import { defaultFetch, resolveGatewayCredentials } from './chunk-6RKD7YZ6.js';
@@ -21,13 +22,13 @@ import './chunk-PJDQPF5N.js';
21
22
  import './chunk-SOI6K5DY.js';
22
23
  import './chunk-PA6CK6WQ.js';
23
24
  import './chunk-BALIE3BA.js';
24
- import './chunk-QPWFVE3X.js';
25
+ import './chunk-UK4RGH46.js';
25
26
  import './chunk-ZJSNLVCE.js';
26
27
  import './chunk-2O5KA67H.js';
27
28
  import './chunk-BKO6JEZI.js';
28
29
  import './chunk-HCVLP7XA.js';
29
30
  import './chunk-BJ3KTMDH.js';
30
- import './chunk-G63KT5I5.js';
31
+ import './chunk-44V5SD4G.js';
31
32
  import './chunk-5BHIBJDA.js';
32
33
  import './chunk-CDDED64E.js';
33
34
  import './chunk-RA3O54FC.js';
@@ -36,16 +37,16 @@ import './chunk-WZBHBH3J.js';
36
37
  import './chunk-CRB3POP4.js';
37
38
  import './chunk-URIZRCRY.js';
38
39
  import './chunk-TUSYOL2O.js';
39
- import './chunk-LJG6EMLJ.js';
40
- import { ARTIFACT_MAX_BYTES, ARTIFACT_MAX_CAPTION_LENGTH, DEMO_RECORD_MEDIA_TYPE, DemoManifestSchema } from './chunk-E6CO3MJE.js';
40
+ import './chunk-6CXNWKWD.js';
41
+ import { ARTIFACT_MAX_BYTES, ARTIFACT_MAX_CAPTION_LENGTH, DEMO_RECORD_MEDIA_TYPE, ARTIFACT_MAX_REPLACES_TARGETS, DemoManifestSchema, ARTIFACT_KINDS } from './chunk-F2D5BSXS.js';
41
42
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
42
43
  import './chunk-HACGUL52.js';
43
44
  import './chunk-MESOOLF4.js';
44
45
  import { __commonJS, __require, __toESM } from './chunk-Z5GEFMRW.js';
45
46
  import { createHash } from 'crypto';
46
- import { mkdtempSync, statSync, readFileSync, writeFileSync, rmSync, mkdirSync, accessSync, constants, realpathSync, existsSync, createReadStream, createWriteStream } from 'fs';
47
+ import { mkdtempSync, writeFileSync, statSync, readFileSync, rmSync, mkdirSync, accessSync, constants, realpathSync, existsSync, createReadStream, createWriteStream } from 'fs';
47
48
  import { tmpdir } from 'os';
48
- import { resolve, dirname, join, delimiter, normalize, sep } from 'path';
49
+ import { resolve, dirname, join, relative, sep, isAbsolute, delimiter, normalize } from 'path';
49
50
  import { execFileSync } from 'child_process';
50
51
  import { createRequire as createRequire$1 } from 'module';
51
52
  import { createGunzip } from 'zlib';
@@ -2155,16 +2156,16 @@ function checkManifest(params) {
2155
2156
  var import_pngjs = __toESM(require_png(), 1);
2156
2157
  var StillError = class extends Error {
2157
2158
  };
2158
- function readStill(dir, file, sha256) {
2159
+ function readStill(dir, file, sha256, what = "still") {
2159
2160
  const path = resolve(dir, file);
2160
2161
  let bytes;
2161
2162
  try {
2162
2163
  bytes = readFileSync(path);
2163
2164
  } catch (err) {
2164
- throw new StillError(`cannot read the still "${file}" (${path}): ${err instanceof Error ? err.message : String(err)}`);
2165
+ throw new StillError(`cannot read the ${what} "${file}" (${path}): ${err instanceof Error ? err.message : String(err)}`);
2165
2166
  }
2166
2167
  if (createHash("sha256").update(bytes).digest("hex") !== sha256) {
2167
- throw new StillError(`the still "${file}" does not match the SHA-256 in its manifest \u2014 the file changed after the run`);
2168
+ throw new StillError(`the ${what} "${file}" does not match the SHA-256 in its manifest \u2014 the file changed after the run`);
2168
2169
  }
2169
2170
  return bytes;
2170
2171
  }
@@ -2258,7 +2259,7 @@ function compareChapters(params) {
2258
2259
  }
2259
2260
 
2260
2261
  // src/demo/criteria.ts
2261
- async function readRecordedCriteriaIds(params) {
2262
+ async function readRecordedCriteria(params) {
2262
2263
  const endpoint = new URL(`/v1/work-items/${params.item}`, params.url).toString();
2263
2264
  const response = await params.fetchImpl(endpoint, {
2264
2265
  method: "GET",
@@ -2268,7 +2269,12 @@ async function readRecordedCriteriaIds(params) {
2268
2269
  const body = await response.json();
2269
2270
  const items = body.data?.criteria?.items;
2270
2271
  if (!Array.isArray(items)) return void 0;
2271
- return new Set(items.flatMap((entry) => typeof entry.id === "string" ? [entry.id] : []));
2272
+ const kinds = ARTIFACT_KINDS;
2273
+ return new Map(
2274
+ items.flatMap(
2275
+ (entry) => typeof entry.id === "string" ? [[entry.id, kinds.includes(entry.proof) ? entry.proof : null]] : []
2276
+ )
2277
+ );
2272
2278
  }
2273
2279
 
2274
2280
  // src/demo/fit.ts
@@ -2432,6 +2438,36 @@ function createMediaTools(env, exec = execFileSync) {
2432
2438
  };
2433
2439
  }
2434
2440
 
2441
+ // src/demo/screenshots.ts
2442
+ function frameOf(chapter) {
2443
+ return "screenshot" in chapter ? chapter.screenshot : void 0;
2444
+ }
2445
+ function planScreenshots(params) {
2446
+ const { manifest, proofs } = params;
2447
+ return manifest.chapters.map((chapter) => {
2448
+ const id = chapter.criterionId;
2449
+ if (id === null) return void 0;
2450
+ const frame = frameOf(chapter);
2451
+ const declared = proofs?.get(id) ?? null;
2452
+ if (frame === void 0 && declared !== "screenshot") return void 0;
2453
+ if (proofs === void 0) return { skip: "the item's criteria could not be read, so no screenshot is bound" };
2454
+ if (frame === void 0) return { skip: `calls no demo.screenshot(), so no screenshot is bound to ${id}` };
2455
+ if (declared !== "screenshot") {
2456
+ return { skip: `${id} declares ${declared === null ? "no proof" : declared}, not screenshot, so the frame is not stored` };
2457
+ }
2458
+ if (chapter.checks.length === 0) return { skip: "ran no checks, so the frame is not stored" };
2459
+ if (chapter.checks.some((check) => !check.passed)) return { skip: "a check failed, so the frame is not stored" };
2460
+ return { bind: frame };
2461
+ });
2462
+ }
2463
+ function screenshotCaption(index, chapter, frame) {
2464
+ const head = `Demo chapter ${index + 1} screenshot: ${chapter.title}, after "`;
2465
+ const tail = `"${frame.masked ? ", with masks" : ""}`;
2466
+ const room = Math.max(1, ARTIFACT_MAX_CAPTION_LENGTH - head.length - tail.length);
2467
+ const text = chapter.checks[frame.check].text;
2468
+ return `${head}${text.length <= room ? text : `${text.slice(0, room - 1)}\u2026`}${tail}`;
2469
+ }
2470
+
2435
2471
  // src/demo/record.ts
2436
2472
  function chapterPassed(checks) {
2437
2473
  return checks.length > 0 && checks.every((check) => check.passed);
@@ -2445,6 +2481,8 @@ function buildDemoRecord(manifest, video, stored, comparisons) {
2445
2481
  }
2446
2482
  return {
2447
2483
  schemaVersion: 3,
2484
+ // Only a manifest of version 3 or later names its test. An older one stores a record with no test.
2485
+ ..."test" in manifest ? { test: manifest.test } : {},
2448
2486
  video,
2449
2487
  chapters: manifest.chapters.map((chapter, index) => {
2450
2488
  const comparison = comparisons[index];
@@ -2460,11 +2498,17 @@ function buildDemoRecord(manifest, video, stored, comparisons) {
2460
2498
  bound: stored[index].bound,
2461
2499
  comparable: comparison.comparable,
2462
2500
  stills: comparison.stills,
2463
- ...comparison.difference === void 0 ? {} : { difference: comparison.difference }
2501
+ ...comparison.difference === void 0 ? {} : { difference: comparison.difference },
2502
+ ...recordedFrame(chapter, stored[index])
2464
2503
  };
2465
2504
  })
2466
2505
  };
2467
2506
  }
2507
+ function recordedFrame(chapter, stored) {
2508
+ const frame = frameOf(chapter);
2509
+ if (frame === void 0 || stored.screenshot === void 0) return {};
2510
+ return { screenshot: { artifactId: stored.screenshot.artifactId, check: frame.check, sha256: frame.sha256, fullPage: frame.fullPage, masked: frame.masked } };
2511
+ }
2468
2512
  var PUNCTUATION = ';:,.!?\xA1\xBF\u2014\u2026"\xAB\xBB\u201C\u201D(){}[]';
2469
2513
  var PUNCTUATION_RUN = new RegExp(`(\\s*[${PUNCTUATION.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}]+\\s*)+`, "g");
2470
2514
  function splitYear(text) {
@@ -2647,9 +2691,9 @@ async function extractNpmTarball(tarball, destDir, keep = () => true) {
2647
2691
  padding = (BLOCK - entry.size % BLOCK) % BLOCK;
2648
2692
  collected = [];
2649
2693
  if (entry.type !== "0" && entry.type !== "\0") return;
2650
- const relative = entry.path.split("/").slice(1).join("/");
2651
- if (relative === "" || !keep(relative)) return;
2652
- const target = normalize(join(destDir, relative));
2694
+ const relative2 = entry.path.split("/").slice(1).join("/");
2695
+ if (relative2 === "" || !keep(relative2)) return;
2696
+ const target = normalize(join(destDir, relative2));
2653
2697
  if (!target.startsWith(normalize(destDir) + sep)) throw new Error(`the archive has a path outside its folder: ${entry.path}`);
2654
2698
  mkdirSync(dirname(target), { recursive: true });
2655
2699
  sink = createWriteStream(target, { mode: 493 });
@@ -2843,7 +2887,10 @@ async function runEmitDemo(opts) {
2843
2887
  }
2844
2888
  const fetchImpl = opts.fetchImpl ?? defaultFetch;
2845
2889
  const media = opts.media ?? createMediaTools(env);
2846
- const recordedIds = await recordedCriteria({ opts, env, cwd, home, fetchImpl, say });
2890
+ const item = resolveItem({ opts, env, cwd, home });
2891
+ const retiring = opts.replaces === void 0 ? void 0 : await readRetiring({ opts, item, env, cwd, home, fetchImpl });
2892
+ const proofs = await recordedCriteria({ opts, item, env, cwd, home, fetchImpl, say });
2893
+ const recordedIds = proofs === void 0 ? void 0 : new Set(proofs.keys());
2847
2894
  let videoSeconds;
2848
2895
  try {
2849
2896
  videoSeconds = media.probe(videoPath);
@@ -2852,8 +2899,16 @@ async function runEmitDemo(opts) {
2852
2899
  }
2853
2900
  const problem = checkManifest({ manifest, videoSeconds, recordedIds });
2854
2901
  if (problem !== void 0) throw new EmitDemoError(problem);
2902
+ const manifestDir = dirname(manifestPath);
2903
+ const frames = decideFrames({ manifest, proofs, dir: manifestDir, say });
2855
2904
  const work = mkdtempSync(join(tmpdir(), "outerlayer-demo-"));
2856
2905
  try {
2906
+ const framePaths = frames.map((frame, index) => {
2907
+ if (frame.kind !== "bind") return void 0;
2908
+ const path = join(work, `screenshot-${index + 1}.png`);
2909
+ writeFileSync(path, frame.bytes);
2910
+ return path;
2911
+ });
2857
2912
  const speaker = narrated ? opts.speaker ?? await realSpeaker({ env, home, work, say, installedRoot: opts.installedVoiceRoot }) : void 0;
2858
2913
  const spoken = [];
2859
2914
  for (const [index, chapter] of manifest.chapters.entries()) {
@@ -2944,7 +2999,15 @@ async function runEmitDemo(opts) {
2944
2999
  bound: bound[index]
2945
3000
  }));
2946
3001
  }
2947
- const plannedRecord = JSON.stringify(buildDemoRecord(manifest, video, stored, comparisons));
3002
+ const frameIds = frames.map((frame) => frame.kind === "bind" ? idFor(`screenshot-${frame.index + 1}`, framePaths[frame.index]) : void 0);
3003
+ const plannedRecord = JSON.stringify(
3004
+ buildDemoRecord(
3005
+ manifest,
3006
+ video,
3007
+ withFrames(stored, frameIds),
3008
+ comparisons
3009
+ )
3010
+ );
2948
3011
  const recordBytes = Buffer.byteLength(plannedRecord);
2949
3012
  if (recordBytes > ARTIFACT_MAX_BYTES) {
2950
3013
  throw new EmitDemoError(
@@ -2964,7 +3027,8 @@ async function runEmitDemo(opts) {
2964
3027
  env,
2965
3028
  fetchImpl: opts.fetchImpl
2966
3029
  };
2967
- const total = manifest.chapters.length + (wholeFits ? 1 : 0) + 1;
3030
+ const replacing = retiring === void 0 ? void 0 : planReplaces(retiring, manifest, wholeFits, frames.map((frame) => frame.kind === "bind"));
3031
+ const total = manifest.chapters.length + (wholeFits ? 1 : 0) + 1 + frameIds.filter((id) => id !== void 0).length;
2968
3032
  const unit = "artifacts";
2969
3033
  let emitted = 0;
2970
3034
  const emitStep = async (params) => {
@@ -2977,12 +3041,15 @@ async function runEmitDemo(opts) {
2977
3041
  file: wholePlan.output,
2978
3042
  artifactId: video.artifactId,
2979
3043
  caption: `Demo: ${manifest.chapters.length} chapter${manifest.chapters.length === 1 ? "" : "s"}, ${(wholePlan.end - wholePlan.start).toFixed(1)} s`,
2980
- blobOptional: true
3044
+ blobOptional: true,
3045
+ ...replaceOption(replacing?.video)
2981
3046
  });
2982
3047
  video = { artifactId: artifactIdOf(wholeResult) };
2983
3048
  }
2984
3049
  const failures = [];
2985
3050
  const clips = [];
3051
+ const screenshots = [];
3052
+ const storedFrames = [];
2986
3053
  for (const [index, chapter] of manifest.chapters.entries()) {
2987
3054
  const failed = chapter.checks.filter((check) => !check.passed);
2988
3055
  if (failed.length > 0) {
@@ -2999,8 +3066,27 @@ async function runEmitDemo(opts) {
2999
3066
  caption: caption.slice(0, ARTIFACT_MAX_CAPTION_LENGTH),
3000
3067
  ...bound[index] ? { criterionId: chapter.criterionId } : {},
3001
3068
  ...wholeFits ? { range: stored[index].range } : {},
3002
- blobOptional: true
3069
+ blobOptional: true,
3070
+ ...replaceOption(replacing?.chapters[index])
3003
3071
  });
3072
+ const frame = frames[index];
3073
+ if (frame.kind === "bind") {
3074
+ const shot = await emitStep({
3075
+ file: framePaths[index],
3076
+ filename: `screenshot-${String(index + 1).padStart(2, "0")}.png`,
3077
+ mediaType: "image/png",
3078
+ artifactId: frameIds[index],
3079
+ caption: screenshotCaption(index, chapter, frame.frame),
3080
+ criterionId: chapter.criterionId,
3081
+ blobOptional: true,
3082
+ ...replaceOption(replacing?.screenshots[index])
3083
+ });
3084
+ storedFrames.push({ artifactId: artifactIdOf(shot) });
3085
+ screenshots.push({ chapter: index + 1, criterionId: chapter.criterionId, artifactId: artifactIdOf(shot) });
3086
+ } else {
3087
+ storedFrames.push(void 0);
3088
+ if (frame.kind === "skip") screenshots.push({ chapter: index + 1, criterionId: chapter.criterionId, reason: frame.reason });
3089
+ }
3004
3090
  clips.push({
3005
3091
  clipArtifactId: artifactIdOf(result),
3006
3092
  bound: bound[index],
@@ -3012,7 +3098,10 @@ async function runEmitDemo(opts) {
3012
3098
  const record = buildDemoRecord(
3013
3099
  manifest,
3014
3100
  video,
3015
- clips.map((clip) => ({ artifactId: clip.clipArtifactId, range: clip.range, bound: clip.bound })),
3101
+ withFrames(
3102
+ clips.map((clip) => ({ artifactId: clip.clipArtifactId, range: clip.range, bound: clip.bound })),
3103
+ storedFrames.map((stored2) => stored2?.artifactId)
3104
+ ),
3016
3105
  comparisons
3017
3106
  );
3018
3107
  const recordPath = join(work, "demo.json");
@@ -3022,7 +3111,8 @@ async function runEmitDemo(opts) {
3022
3111
  artifactId: idFor("record", recordPath),
3023
3112
  caption: `Demo record: ${clips.length} chapter${clips.length === 1 ? "" : "s"}, ${clips.filter((clip) => clip.bound).length} bound to a criterion`,
3024
3113
  mediaType: DEMO_RECORD_MEDIA_TYPE,
3025
- blobOptional: true
3114
+ blobOptional: true,
3115
+ ...replaceOption(replacing?.record)
3026
3116
  });
3027
3117
  const recordArtifactId = artifactIdOf(recorded);
3028
3118
  const exitCode = failures.length > 0 ? 1 : 0;
@@ -3034,14 +3124,16 @@ async function runEmitDemo(opts) {
3034
3124
  });
3035
3125
  const compared = comparisons.filter((comparison) => comparison.comparable !== "not checked").length;
3036
3126
  const boundCount = clips.filter((clip) => clip.bound).length;
3037
- const what = wholeFits ? `1 video, ${clips.length} chapter${clips.length === 1 ? "" : "s"}, ${boundCount} bound to a criterion` : `whole video left out for its size (${wholeBytes} bytes) ${C.dim}\xB7${C.reset} ${clips.length} clip${clips.length === 1 ? "" : "s"}, ${boundCount} bound to a criterion`;
3127
+ const frameCount = screenshots.filter((entry) => entry.artifactId !== void 0).length;
3128
+ const frameNote = frameCount === 0 ? "" : `, ${frameCount} screenshot${frameCount === 1 ? "" : "s"}`;
3129
+ const what = wholeFits ? `1 video, ${clips.length} chapter${clips.length === 1 ? "" : "s"}, ${boundCount} bound to a criterion${frameNote}` : `whole video left out for its size (${wholeBytes} bytes) ${C.dim}\xB7${C.reset} ${clips.length} clip${clips.length === 1 ? "" : "s"}, ${boundCount} bound to a criterion${frameNote}`;
3038
3130
  const summary = `${C.green}\u2713${C.reset} demo emitted ${C.dim}\xB7${C.reset} ${what} ${C.dim}\xB7${C.reset} record ${recordArtifactId}`;
3039
- const output = opts.json ? JSON.stringify({ recordArtifactId, video, clips, failures, differences, exitCode }) : [
3131
+ const output = opts.json ? JSON.stringify({ recordArtifactId, video, clips, screenshots, failures, differences, exitCode }) : [
3040
3132
  ...differences.map((line) => `${C.yellow}!${C.reset} ${line}`),
3041
3133
  summary + (opts.compare === void 0 ? "" : ` ${C.dim}\xB7${C.reset} ${compared} of ${clips.length} chapter${clips.length === 1 ? "" : "s"} compared, ${comparisons.filter((comparison) => comparison.comparable === "yes").length} comparable`)
3042
3134
  ].join("\n");
3043
3135
  if (!opts.quiet) process.stdout.write(output + "\n");
3044
- return { exitCode, output, failures, recordArtifactId, video, clips, differences };
3136
+ return { exitCode, output, failures, recordArtifactId, video, clips, screenshots, differences };
3045
3137
  } finally {
3046
3138
  rmSync(work, { recursive: true, force: true });
3047
3139
  }
@@ -3087,29 +3179,35 @@ async function emitOrExplain(emit, opts, emitted, total, unit) {
3087
3179
  );
3088
3180
  }
3089
3181
  }
3182
+ function resolveItem(params) {
3183
+ const { opts, env, cwd, home } = params;
3184
+ if (opts.item !== void 0) return opts.item;
3185
+ const identity = resolveRepoIdentity(cwd);
3186
+ const sessionId = detectActiveSession({
3187
+ env,
3188
+ home,
3189
+ cwds: identity.repoRoot !== void 0 ? [identity.repoRoot, cwd] : [cwd],
3190
+ nowMs: Date.now()
3191
+ });
3192
+ return sessionId === void 0 ? void 0 : launchedItemForSession(sessionId, home);
3193
+ }
3194
+ async function gatewayFor(params) {
3195
+ const { opts, env, cwd, home } = params;
3196
+ const refusal = await autoConnect({ url: opts.url, apiKey: opts.apiKey, appId: opts.appId, cwd, home, env, fetchImpl: opts.fetchImpl });
3197
+ if (refusal !== void 0) throw new Error(refusal);
3198
+ const resolved = resolveGatewayCredentials({ url: opts.url, apiKey: opts.apiKey, appId: opts.appId, cwd, home, env });
3199
+ if (!resolved.ok) throw new Error(resolved.message);
3200
+ return { url: resolved.url, apiKey: resolved.credential, appId: resolved.appId };
3201
+ }
3090
3202
  async function recordedCriteria(params) {
3091
- const { opts, env, cwd, home, fetchImpl, say } = params;
3092
- let item = opts.item;
3093
- if (item === void 0) {
3094
- const identity = resolveRepoIdentity(cwd);
3095
- const sessionId = detectActiveSession({
3096
- env,
3097
- home,
3098
- cwds: identity.repoRoot !== void 0 ? [identity.repoRoot, cwd] : [cwd],
3099
- nowMs: Date.now()
3100
- });
3101
- item = sessionId === void 0 ? void 0 : launchedItemForSession(sessionId, home);
3102
- }
3203
+ const { opts, item, env, cwd, home, fetchImpl, say } = params;
3103
3204
  if (item === void 0) {
3104
3205
  say(`${C.yellow}!${C.reset} no work item, so the chapters' criterion ids are not checked against the recorded criteria (pass --item <number>)`);
3105
3206
  return void 0;
3106
3207
  }
3107
3208
  try {
3108
- const refusal = await autoConnect({ url: opts.url, apiKey: opts.apiKey, appId: opts.appId, cwd, home, env, fetchImpl: opts.fetchImpl });
3109
- if (refusal !== void 0) throw new Error(refusal);
3110
- const resolved = resolveGatewayCredentials({ url: opts.url, apiKey: opts.apiKey, appId: opts.appId, cwd, home, env });
3111
- if (!resolved.ok) throw new Error(resolved.message);
3112
- const ids = await readRecordedCriteriaIds({ url: resolved.url, apiKey: resolved.credential, appId: resolved.appId, item, fetchImpl });
3209
+ const gateway = await gatewayFor({ opts, env, cwd, home });
3210
+ const ids = await readRecordedCriteria({ url: gateway.url, apiKey: gateway.apiKey, appId: gateway.appId, item, fetchImpl });
3113
3211
  if (ids === void 0) say(`${C.yellow}!${C.reset} item ${item} has no recorded criteria, so the chapters' criterion ids are not checked`);
3114
3212
  return ids;
3115
3213
  } catch (err) {
@@ -3117,6 +3215,69 @@ async function recordedCriteria(params) {
3117
3215
  return void 0;
3118
3216
  }
3119
3217
  }
3218
+ async function readRetiring(params) {
3219
+ const { opts, item, env, cwd, home, fetchImpl } = params;
3220
+ const replaces = opts.replaces;
3221
+ if (item === void 0) throw new EmitDemoError("--replaces needs the work item whose demo it replaces; run in a recorded session or pass --item <number>");
3222
+ let newest;
3223
+ try {
3224
+ const gateway = await gatewayFor({ opts, env, cwd, home });
3225
+ newest = await readNewestDemo({ ...gateway, item, fetchImpl });
3226
+ } catch (err) {
3227
+ throw new EmitDemoError(`could not read the demo of item ${item} to replace it: ${err instanceof Error ? err.message : String(err)}`);
3228
+ }
3229
+ if (newest === null) throw new EmitDemoError(`item ${item} has no demo to replace; leave out --replaces`);
3230
+ if (newest.artifactId !== replaces) {
3231
+ throw new EmitDemoError(`--replaces ${replaces} is not the newest demo record of item ${item}; the newest is ${newest.artifactId}`);
3232
+ }
3233
+ const record = newest.record;
3234
+ if (record === null) {
3235
+ throw new EmitDemoError(
3236
+ `the stored record ${newest.artifactId} of item ${item} cannot be read, so the artifacts it names cannot be replaced; retire them with emit artifact --replaces, or leave out --replaces`
3237
+ );
3238
+ }
3239
+ const live = newest.liveArtifactIds === void 0 ? void 0 : new Set(newest.liveArtifactIds);
3240
+ const isLive = (id) => live === void 0 || live.has(id);
3241
+ const videoId = record.schemaVersion === 3 && "artifactId" in record.video ? record.video.artifactId : void 0;
3242
+ return {
3243
+ recordId: newest.artifactId,
3244
+ videoId: videoId !== void 0 && isLive(videoId) ? videoId : void 0,
3245
+ chapters: record.chapters.map((chapter) => {
3246
+ const clipId = "artifactId" in chapter ? chapter.artifactId : chapter.clipArtifactId;
3247
+ const frameId = "screenshot" in chapter ? chapter.screenshot.artifactId : void 0;
3248
+ return {
3249
+ criterionId: chapter.criterionId,
3250
+ ...isLive(clipId) ? { artifactId: clipId } : {},
3251
+ ...frameId !== void 0 && isLive(frameId) ? { screenshotId: frameId } : {}
3252
+ };
3253
+ }).filter((chapter) => chapter.artifactId !== void 0 || chapter.screenshotId !== void 0)
3254
+ };
3255
+ }
3256
+ function planReplaces(old, manifest, wholeFits, storesFrame) {
3257
+ const taken = /* @__PURE__ */ new Set();
3258
+ const take = (ids) => {
3259
+ for (const id of ids) taken.add(id);
3260
+ return ids;
3261
+ };
3262
+ const video = wholeFits && old.videoId !== void 0 ? take([old.videoId]) : [];
3263
+ const named = (pick) => (chapter) => chapter.criterionId === null ? [] : take(old.chapters.filter((entry) => entry.criterionId === chapter.criterionId).flatMap((entry) => pick(entry) ?? []));
3264
+ const chapters = manifest.chapters.map(named((entry) => entry.artifactId));
3265
+ const screenshots = manifest.chapters.map((chapter, index) => storesFrame[index] === true ? named((entry) => entry.screenshotId)(chapter) : []);
3266
+ const left = [
3267
+ ...old.videoId === void 0 ? [] : [old.videoId],
3268
+ ...old.chapters.flatMap((entry) => [entry.artifactId, entry.screenshotId].filter((id) => id !== void 0))
3269
+ ];
3270
+ const record = [old.recordId, ...new Set(left.filter((id) => !taken.has(id)))];
3271
+ for (const targets of [video, ...chapters, ...screenshots, record]) {
3272
+ if (targets.length > ARTIFACT_MAX_REPLACES_TARGETS) {
3273
+ throw new EmitDemoError(
3274
+ `the old demo leaves ${targets.length} artifacts to retire in one emit, over the limit of ${ARTIFACT_MAX_REPLACES_TARGETS} \u2014 record the demo with fewer chapters, or retire the old artifacts with emit artifact --replaces`
3275
+ );
3276
+ }
3277
+ }
3278
+ return { video, chapters, screenshots, record };
3279
+ }
3280
+ var replaceOption = (targets) => targets === void 0 || targets.length === 0 ? {} : { replaces: targets.join(",") };
3120
3281
  async function realSpeaker(params) {
3121
3282
  const { env, home, work, say, installedRoot } = params;
3122
3283
  try {
@@ -3129,5 +3290,36 @@ async function realSpeaker(params) {
3129
3290
  throw err;
3130
3291
  }
3131
3292
  }
3293
+ function withFrames(entries, frameIds) {
3294
+ return entries.map((entry, index) => frameIds[index] === void 0 ? entry : { ...entry, screenshot: { artifactId: frameIds[index] } });
3295
+ }
3296
+ function decideFrames(params) {
3297
+ const { manifest, proofs, dir, say } = params;
3298
+ const decisions = planScreenshots({ manifest, proofs });
3299
+ return decisions.map((decision, index) => {
3300
+ if (decision === void 0) return { kind: "none" };
3301
+ const chapter = manifest.chapters[index];
3302
+ const skip = (reason) => {
3303
+ say(`${C.yellow}!${C.reset} ${chapterLabel(index, chapter.title)}: ${reason}`);
3304
+ return { kind: "skip", reason };
3305
+ };
3306
+ if ("skip" in decision) return skip(decision.skip);
3307
+ const inside = relative(dir, resolve(dir, decision.bind.file));
3308
+ if (inside === ".." || inside.startsWith(`..${sep}`) || isAbsolute(inside)) {
3309
+ throw new EmitDemoError(`${chapterLabel(index, chapter.title)}: the frame "${decision.bind.file}" is outside the manifest's folder`);
3310
+ }
3311
+ let bytes;
3312
+ try {
3313
+ bytes = readStill(dir, decision.bind.file, decision.bind.sha256, "frame");
3314
+ } catch (err) {
3315
+ if (err instanceof StillError) throw new EmitDemoError(`${chapterLabel(index, chapter.title)}: ${err.message}`);
3316
+ throw err;
3317
+ }
3318
+ if (bytes.length > ARTIFACT_MAX_BYTES) {
3319
+ return skip(`the frame is ${(bytes.length / MIB).toFixed(1)} MiB, over the ${ARTIFACT_MAX_BYTES / MIB} MiB limit, so it is not stored`);
3320
+ }
3321
+ return { kind: "bind", index, frame: decision.bind, bytes };
3322
+ });
3323
+ }
3132
3324
 
3133
3325
  export { EmitDemoError, runEmitDemo };
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { EmitFindingError, detectUploadSessionId, refuseRemovedFindingFlags, resolveUploadTarget, runEmitFinding, runEmitFindings } from './chunk-BKADJZ7F.js';
3
+ export { EmitFindingError, detectUploadSessionId, refuseRemovedFindingFlags, resolveUploadTarget, runEmitFinding, runEmitFindings } from './chunk-6SPD266O.js';
4
4
  import './chunk-ESVW4MJY.js';
5
5
  import './chunk-IP7BIBXJ.js';
6
- import './chunk-B2JURP6A.js';
7
- import './chunk-2WMZPJVE.js';
8
- import './chunk-EWVYQLD3.js';
9
- import './chunk-5DNCFOXA.js';
10
- import './chunk-HJYBWJAS.js';
11
- import './chunk-NSPRS7WK.js';
6
+ import './chunk-HLZMAJJD.js';
7
+ import './chunk-S5CNYXUA.js';
8
+ import './chunk-MPC2UAW2.js';
9
+ import './chunk-NIY2UBT6.js';
10
+ import './chunk-LYGI3T66.js';
11
+ import './chunk-7V5GUEDU.js';
12
12
  import './chunk-G2JWZDFA.js';
13
13
  import './chunk-ANPNT6PM.js';
14
14
  import './chunk-6RKD7YZ6.js';
@@ -18,15 +18,15 @@ import './chunk-PA6CK6WQ.js';
18
18
  import './chunk-BALIE3BA.js';
19
19
  import './chunk-ZJSNLVCE.js';
20
20
  import './chunk-BJ3KTMDH.js';
21
- import './chunk-G63KT5I5.js';
21
+ import './chunk-44V5SD4G.js';
22
22
  import './chunk-5BHIBJDA.js';
23
23
  import './chunk-CDDED64E.js';
24
24
  import './chunk-RA3O54FC.js';
25
25
  import './chunk-T2Q7ISPE.js';
26
26
  import './chunk-WZBHBH3J.js';
27
27
  import './chunk-CRB3POP4.js';
28
- import './chunk-LJG6EMLJ.js';
29
- import './chunk-E6CO3MJE.js';
28
+ import './chunk-6CXNWKWD.js';
29
+ import './chunk-F2D5BSXS.js';
30
30
  import './chunk-VNVZDWO3.js';
31
31
  import './chunk-HACGUL52.js';
32
32
  import './chunk-MESOOLF4.js';
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { zodProblem } from './chunk-I3LTIAOR.js';
4
- import { detectCi } from './chunk-2N67C6IV.js';
5
- import './chunk-AU346ENF.js';
4
+ import { detectCi } from './chunk-D3EDZPJR.js';
5
+ import './chunk-7UPMYRPS.js';
6
6
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
7
7
  import './chunk-TBT347UY.js';
8
8
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
9
- import { autoConnect } from './chunk-B2JURP6A.js';
10
- import './chunk-2WMZPJVE.js';
11
- import './chunk-EWVYQLD3.js';
12
- import { resolveRepoIdentity } from './chunk-5DNCFOXA.js';
13
- import './chunk-HJYBWJAS.js';
14
- import './chunk-NSPRS7WK.js';
9
+ import { autoConnect } from './chunk-HLZMAJJD.js';
10
+ import './chunk-S5CNYXUA.js';
11
+ import './chunk-MPC2UAW2.js';
12
+ import { resolveRepoIdentity } from './chunk-NIY2UBT6.js';
13
+ import './chunk-LYGI3T66.js';
14
+ import './chunk-7V5GUEDU.js';
15
15
  import './chunk-G2JWZDFA.js';
16
16
  import { C } from './chunk-ANPNT6PM.js';
17
17
  import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-6RKD7YZ6.js';
@@ -19,13 +19,13 @@ import './chunk-PJDQPF5N.js';
19
19
  import './chunk-SOI6K5DY.js';
20
20
  import './chunk-PA6CK6WQ.js';
21
21
  import './chunk-BALIE3BA.js';
22
- import './chunk-QPWFVE3X.js';
22
+ import './chunk-UK4RGH46.js';
23
23
  import './chunk-ZJSNLVCE.js';
24
24
  import './chunk-2O5KA67H.js';
25
25
  import './chunk-BKO6JEZI.js';
26
26
  import './chunk-HCVLP7XA.js';
27
27
  import './chunk-BJ3KTMDH.js';
28
- import './chunk-G63KT5I5.js';
28
+ import './chunk-44V5SD4G.js';
29
29
  import './chunk-5BHIBJDA.js';
30
30
  import './chunk-CDDED64E.js';
31
31
  import './chunk-RA3O54FC.js';
@@ -34,8 +34,8 @@ import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
34
34
  import './chunk-CRB3POP4.js';
35
35
  import './chunk-URIZRCRY.js';
36
36
  import './chunk-TUSYOL2O.js';
37
- import './chunk-LJG6EMLJ.js';
38
- import { EmittedNameSchema, EMITTED_RESULT_MAX_LINK_LENGTH, EMITTED_RESULTS, itemsAllowResult, EMITTED_RESULT_MAX_BODY_LENGTH, CheckItemsSchema } from './chunk-E6CO3MJE.js';
37
+ import './chunk-6CXNWKWD.js';
38
+ import { EmittedNameSchema, EMITTED_RESULT_MAX_LINK_LENGTH, EMITTED_RESULTS, itemsAllowResult, EMITTED_RESULT_MAX_BODY_LENGTH, CheckItemsSchema } from './chunk-F2D5BSXS.js';
39
39
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
40
40
  import './chunk-HACGUL52.js';
41
41
  import './chunk-MESOOLF4.js';
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { EmitStepError, runEmitStep, uploadSpooledSteps } from './chunk-AU346ENF.js';
3
+ export { EmitStepError, runEmitStep, uploadSpooledSteps } from './chunk-7UPMYRPS.js';
4
4
  import './chunk-ESVW4MJY.js';
5
5
  import './chunk-IP7BIBXJ.js';
6
- import './chunk-B2JURP6A.js';
7
- import './chunk-2WMZPJVE.js';
8
- import './chunk-EWVYQLD3.js';
9
- import './chunk-5DNCFOXA.js';
10
- import './chunk-HJYBWJAS.js';
11
- import './chunk-NSPRS7WK.js';
6
+ import './chunk-HLZMAJJD.js';
7
+ import './chunk-S5CNYXUA.js';
8
+ import './chunk-MPC2UAW2.js';
9
+ import './chunk-NIY2UBT6.js';
10
+ import './chunk-LYGI3T66.js';
11
+ import './chunk-7V5GUEDU.js';
12
12
  import './chunk-G2JWZDFA.js';
13
13
  import './chunk-ANPNT6PM.js';
14
14
  import './chunk-6RKD7YZ6.js';
@@ -17,15 +17,15 @@ import './chunk-SOI6K5DY.js';
17
17
  import './chunk-PA6CK6WQ.js';
18
18
  import './chunk-BALIE3BA.js';
19
19
  import './chunk-BJ3KTMDH.js';
20
- import './chunk-G63KT5I5.js';
20
+ import './chunk-44V5SD4G.js';
21
21
  import './chunk-5BHIBJDA.js';
22
22
  import './chunk-CDDED64E.js';
23
23
  import './chunk-RA3O54FC.js';
24
24
  import './chunk-T2Q7ISPE.js';
25
25
  import './chunk-WZBHBH3J.js';
26
26
  import './chunk-CRB3POP4.js';
27
- import './chunk-LJG6EMLJ.js';
28
- import './chunk-E6CO3MJE.js';
27
+ import './chunk-6CXNWKWD.js';
28
+ import './chunk-F2D5BSXS.js';
29
29
  import './chunk-VNVZDWO3.js';
30
30
  import './chunk-HACGUL52.js';
31
31
  import './chunk-MESOOLF4.js';