@hawkeyexl/manni 4.6.0 → 4.8.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 (172) hide show
  1. package/README.md +1 -1
  2. package/dist/{batch-OZOACN4G.js → batch-6LJJZTT7.js} +12 -12
  3. package/dist/{build-Z5VOVADH.js → build-QKFXKAXT.js} +9 -9
  4. package/dist/{calibrate-TZYT42DR.js → calibrate-UQJR3WCU.js} +13 -13
  5. package/dist/{capture-SL4MNDDP.js → capture-HQ2PGM5Z.js} +12 -12
  6. package/dist/{check-PKY7KTQE.js → check-3DZOMJ7R.js} +10 -10
  7. package/dist/{check-5OMA42Y6.js → check-BF56QRWL.js} +9 -9
  8. package/dist/{check-WB2QDHJQ.js → check-NSDC5LSE.js} +39 -33
  9. package/dist/check-NSDC5LSE.js.map +1 -0
  10. package/dist/{chunk-TLXE7LYK.js → chunk-22G33NL2.js} +3 -3
  11. package/dist/{chunk-2KRB3EG7.js → chunk-2QEHLWYM.js} +2 -2
  12. package/dist/{chunk-QW77LCOU.js → chunk-426TGC2Q.js} +5 -5
  13. package/dist/{chunk-Z4IZGEM3.js → chunk-77WI6LJW.js} +5 -5
  14. package/dist/{chunk-KCOFEWV5.js → chunk-A36QDIXZ.js} +2 -2
  15. package/dist/{chunk-73TC4DYH.js → chunk-ALAH6HNY.js} +2 -2
  16. package/dist/{chunk-GREQKO6M.js → chunk-AZXCL5WH.js} +4 -4
  17. package/dist/{chunk-MHM4QEBV.js → chunk-BMRZFTAD.js} +3 -3
  18. package/dist/{chunk-IY7NYNPZ.js → chunk-BP7LGVF3.js} +7 -7
  19. package/dist/{chunk-PCFG7E6B.js → chunk-CGO5MNRD.js} +2 -2
  20. package/dist/{chunk-PCFG7E6B.js.map → chunk-CGO5MNRD.js.map} +1 -1
  21. package/dist/{chunk-7WRP5FFP.js → chunk-CHDADR7F.js} +4 -4
  22. package/dist/{chunk-NBMPHD4I.js → chunk-EOGF6VCA.js} +2 -2
  23. package/dist/{chunk-SM6NOMJS.js → chunk-G4T6SF3C.js} +2 -2
  24. package/dist/{chunk-733Y2STG.js → chunk-GEX2HDAT.js} +2 -2
  25. package/dist/{chunk-NHHOPZRA.js → chunk-GWGR7BDP.js} +5 -5
  26. package/dist/{chunk-UAKNZVCD.js → chunk-H3LM7D6K.js} +4 -4
  27. package/dist/{chunk-TH4JVQPF.js → chunk-HNMXL2OE.js} +6 -5
  28. package/dist/chunk-HNMXL2OE.js.map +1 -0
  29. package/dist/{chunk-C73RSUIC.js → chunk-HOE2C42K.js} +3 -3
  30. package/dist/{chunk-B3TS4WRM.js → chunk-HYT242KI.js} +8 -8
  31. package/dist/{chunk-C3B2VJNC.js → chunk-J3IK5IGO.js} +2 -2
  32. package/dist/{chunk-M6GSS72T.js → chunk-JUN4DUHG.js} +6 -6
  33. package/dist/{chunk-XPEWUK7J.js → chunk-KPXOJMQ6.js} +17 -14
  34. package/dist/chunk-KPXOJMQ6.js.map +1 -0
  35. package/dist/{chunk-TUAAR3MM.js → chunk-KRSLDZ7N.js} +2 -2
  36. package/dist/{chunk-UJSGS2Y5.js → chunk-KWAXJCKS.js} +4 -4
  37. package/dist/{chunk-2M6DVNI5.js → chunk-LRU5BK3L.js} +4 -4
  38. package/dist/{chunk-T6SYGLWR.js → chunk-LXFY64QR.js} +3 -3
  39. package/dist/{chunk-BWCWTHYS.js → chunk-NGTVREIH.js} +4 -4
  40. package/dist/chunk-NGTVREIH.js.map +1 -0
  41. package/dist/{chunk-NTWW7J76.js → chunk-OA2GKJVM.js} +2 -2
  42. package/dist/{chunk-DC5DDJVE.js → chunk-QRAKST62.js} +4 -4
  43. package/dist/{chunk-YLK2J5YK.js → chunk-RGB7WBFD.js} +73 -9
  44. package/dist/chunk-RGB7WBFD.js.map +1 -0
  45. package/dist/{chunk-APKH2T6E.js → chunk-TKVGEFMH.js} +3 -3
  46. package/dist/{chunk-2JFPBZJK.js → chunk-TVKYNKB3.js} +10 -10
  47. package/dist/{chunk-GAJIJKET.js → chunk-UMGAACCP.js} +3 -3
  48. package/dist/{chunk-MWBJ3KTF.js → chunk-UZGSFQLT.js} +4 -4
  49. package/dist/{chunk-SWSTHZBI.js → chunk-VCQOUFTZ.js} +4 -4
  50. package/dist/{chunk-FLAO4ZS3.js → chunk-VQK4VHLF.js} +8 -8
  51. package/dist/chunk-VQK4VHLF.js.map +1 -0
  52. package/dist/{chunk-N7JSEDSC.js → chunk-W6AZHTGB.js} +2 -2
  53. package/dist/{chunk-M2RLHZ4J.js → chunk-W7RSTW55.js} +2 -2
  54. package/dist/{chunk-3NWX34ZI.js → chunk-WZFA33SD.js} +6 -6
  55. package/dist/{chunk-5G53XATW.js → chunk-ZDYW7XTS.js} +3 -3
  56. package/dist/{chunk-PL4UAF4S.js → chunk-ZH3VTIBL.js} +9 -9
  57. package/dist/{chunk-UWQ2UVHE.js → chunk-ZJNE4BKG.js} +4 -4
  58. package/dist/{chunk-MOWMCEOJ.js → chunk-ZYRHDBVS.js} +5 -5
  59. package/dist/{cli-PSKNB66T.js → cli-7OIV7UXF.js} +35 -34
  60. package/dist/cli-7OIV7UXF.js.map +1 -0
  61. package/dist/{cli-UQ7A3YA2.js → cli-CSXPJZVM.js} +14 -14
  62. package/dist/{cli-EPVZHAZS.js → cli-EOSY3WVX.js} +10 -10
  63. package/dist/{cli-6EWVMEN6.js → cli-IX3WSFV4.js} +2 -2
  64. package/dist/{cli-LUCSGTVI.js → cli-IYC7F5OJ.js} +13 -13
  65. package/dist/{cli-6H7HVDMQ.js → cli-JER6KIUJ.js} +20 -20
  66. package/dist/{cli-UO4NHIB3.js → cli-PNK2HTIC.js} +11 -11
  67. package/dist/{cli-YHYDLQAF.js → cli-WGONI6PJ.js} +7 -7
  68. package/dist/{cli-NIG4N3XM.js → cli-X24QGW6Y.js} +11 -11
  69. package/dist/cli.js +11 -11
  70. package/dist/{config-P4HDNTYD.js → config-YWSNBFEE.js} +3 -3
  71. package/dist/docmeta.js +6 -6
  72. package/dist/{github-7ZCH5PSO.js → github-GFTLEZ3D.js} +9 -9
  73. package/dist/{github-POT6724K.js → github-LL5LHQFG.js} +11 -11
  74. package/dist/index.d.ts +5 -5
  75. package/dist/index.js +32 -32
  76. package/dist/{json-KT2K62L5.js → json-XDV4CZEU.js} +9 -9
  77. package/dist/{lint-5AQ5C2BV.js → lint-NO4GIR3Z.js} +9 -9
  78. package/dist/{list-5JZKX2NK.js → list-4G6F5BX2.js} +9 -9
  79. package/dist/{list-SWPFXQMU.js → list-4GJ6KI4U.js} +9 -9
  80. package/dist/{page-UPSXRP75.js → page-4VJQELH5.js} +8 -8
  81. package/dist/{prepare-6GNEWCNH.js → prepare-TGHFPUYE.js} +17 -17
  82. package/dist/prepare-TGHFPUYE.js.map +1 -0
  83. package/dist/{pretty-Q6FQAOK4.js → pretty-HFA6ITJY.js} +10 -10
  84. package/dist/{pretty-SQRPFPSQ.js → pretty-ZMKG3AJR.js} +9 -9
  85. package/dist/{provider-AMGRDY6V.js → provider-527CO4DM.js} +2 -2
  86. package/dist/{release-IECYCLTD.js → release-3D5PK6M7.js} +2 -2
  87. package/dist/release-3D5PK6M7.js.map +1 -0
  88. package/dist/{reporters-45MMC2ID.js → reporters-DZTHBJEA.js} +8 -8
  89. package/dist/{reporters-XUV4MM64.js → reporters-FRM5BHPL.js} +4 -4
  90. package/dist/{run-KMWY2IAN.js → run-BRC64Y7B.js} +9 -9
  91. package/dist/{conformance-ZFCMKM6M.js → runtime-7QE3DW6S.js} +2 -2
  92. package/dist/{term-PCJUCWNF.js → term-PNWS7F5B.js} +13 -13
  93. package/dist/{validate-IMNCZNWG.js → validate-ULPJI4GQ.js} +4 -4
  94. package/package.json +1 -1
  95. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  96. package/dist/check-WB2QDHJQ.js.map +0 -1
  97. package/dist/chunk-BWCWTHYS.js.map +0 -1
  98. package/dist/chunk-FLAO4ZS3.js.map +0 -1
  99. package/dist/chunk-TH4JVQPF.js.map +0 -1
  100. package/dist/chunk-XPEWUK7J.js.map +0 -1
  101. package/dist/chunk-YLK2J5YK.js.map +0 -1
  102. package/dist/cli-PSKNB66T.js.map +0 -1
  103. package/dist/prepare-6GNEWCNH.js.map +0 -1
  104. package/dist/release-IECYCLTD.js.map +0 -1
  105. /package/dist/{batch-OZOACN4G.js.map → batch-6LJJZTT7.js.map} +0 -0
  106. /package/dist/{build-Z5VOVADH.js.map → build-QKFXKAXT.js.map} +0 -0
  107. /package/dist/{calibrate-TZYT42DR.js.map → calibrate-UQJR3WCU.js.map} +0 -0
  108. /package/dist/{capture-SL4MNDDP.js.map → capture-HQ2PGM5Z.js.map} +0 -0
  109. /package/dist/{check-5OMA42Y6.js.map → check-3DZOMJ7R.js.map} +0 -0
  110. /package/dist/{check-PKY7KTQE.js.map → check-BF56QRWL.js.map} +0 -0
  111. /package/dist/{chunk-TLXE7LYK.js.map → chunk-22G33NL2.js.map} +0 -0
  112. /package/dist/{chunk-2KRB3EG7.js.map → chunk-2QEHLWYM.js.map} +0 -0
  113. /package/dist/{chunk-QW77LCOU.js.map → chunk-426TGC2Q.js.map} +0 -0
  114. /package/dist/{chunk-Z4IZGEM3.js.map → chunk-77WI6LJW.js.map} +0 -0
  115. /package/dist/{chunk-KCOFEWV5.js.map → chunk-A36QDIXZ.js.map} +0 -0
  116. /package/dist/{chunk-73TC4DYH.js.map → chunk-ALAH6HNY.js.map} +0 -0
  117. /package/dist/{chunk-GREQKO6M.js.map → chunk-AZXCL5WH.js.map} +0 -0
  118. /package/dist/{chunk-MHM4QEBV.js.map → chunk-BMRZFTAD.js.map} +0 -0
  119. /package/dist/{chunk-IY7NYNPZ.js.map → chunk-BP7LGVF3.js.map} +0 -0
  120. /package/dist/{chunk-7WRP5FFP.js.map → chunk-CHDADR7F.js.map} +0 -0
  121. /package/dist/{chunk-NBMPHD4I.js.map → chunk-EOGF6VCA.js.map} +0 -0
  122. /package/dist/{chunk-SM6NOMJS.js.map → chunk-G4T6SF3C.js.map} +0 -0
  123. /package/dist/{chunk-733Y2STG.js.map → chunk-GEX2HDAT.js.map} +0 -0
  124. /package/dist/{chunk-NHHOPZRA.js.map → chunk-GWGR7BDP.js.map} +0 -0
  125. /package/dist/{chunk-UAKNZVCD.js.map → chunk-H3LM7D6K.js.map} +0 -0
  126. /package/dist/{chunk-C73RSUIC.js.map → chunk-HOE2C42K.js.map} +0 -0
  127. /package/dist/{chunk-B3TS4WRM.js.map → chunk-HYT242KI.js.map} +0 -0
  128. /package/dist/{chunk-C3B2VJNC.js.map → chunk-J3IK5IGO.js.map} +0 -0
  129. /package/dist/{chunk-M6GSS72T.js.map → chunk-JUN4DUHG.js.map} +0 -0
  130. /package/dist/{chunk-TUAAR3MM.js.map → chunk-KRSLDZ7N.js.map} +0 -0
  131. /package/dist/{chunk-UJSGS2Y5.js.map → chunk-KWAXJCKS.js.map} +0 -0
  132. /package/dist/{chunk-2M6DVNI5.js.map → chunk-LRU5BK3L.js.map} +0 -0
  133. /package/dist/{chunk-T6SYGLWR.js.map → chunk-LXFY64QR.js.map} +0 -0
  134. /package/dist/{chunk-NTWW7J76.js.map → chunk-OA2GKJVM.js.map} +0 -0
  135. /package/dist/{chunk-DC5DDJVE.js.map → chunk-QRAKST62.js.map} +0 -0
  136. /package/dist/{chunk-APKH2T6E.js.map → chunk-TKVGEFMH.js.map} +0 -0
  137. /package/dist/{chunk-2JFPBZJK.js.map → chunk-TVKYNKB3.js.map} +0 -0
  138. /package/dist/{chunk-GAJIJKET.js.map → chunk-UMGAACCP.js.map} +0 -0
  139. /package/dist/{chunk-MWBJ3KTF.js.map → chunk-UZGSFQLT.js.map} +0 -0
  140. /package/dist/{chunk-SWSTHZBI.js.map → chunk-VCQOUFTZ.js.map} +0 -0
  141. /package/dist/{chunk-N7JSEDSC.js.map → chunk-W6AZHTGB.js.map} +0 -0
  142. /package/dist/{chunk-M2RLHZ4J.js.map → chunk-W7RSTW55.js.map} +0 -0
  143. /package/dist/{chunk-3NWX34ZI.js.map → chunk-WZFA33SD.js.map} +0 -0
  144. /package/dist/{chunk-5G53XATW.js.map → chunk-ZDYW7XTS.js.map} +0 -0
  145. /package/dist/{chunk-PL4UAF4S.js.map → chunk-ZH3VTIBL.js.map} +0 -0
  146. /package/dist/{chunk-UWQ2UVHE.js.map → chunk-ZJNE4BKG.js.map} +0 -0
  147. /package/dist/{chunk-MOWMCEOJ.js.map → chunk-ZYRHDBVS.js.map} +0 -0
  148. /package/dist/{cli-UQ7A3YA2.js.map → cli-CSXPJZVM.js.map} +0 -0
  149. /package/dist/{cli-EPVZHAZS.js.map → cli-EOSY3WVX.js.map} +0 -0
  150. /package/dist/{cli-6EWVMEN6.js.map → cli-IX3WSFV4.js.map} +0 -0
  151. /package/dist/{cli-LUCSGTVI.js.map → cli-IYC7F5OJ.js.map} +0 -0
  152. /package/dist/{cli-6H7HVDMQ.js.map → cli-JER6KIUJ.js.map} +0 -0
  153. /package/dist/{cli-UO4NHIB3.js.map → cli-PNK2HTIC.js.map} +0 -0
  154. /package/dist/{cli-YHYDLQAF.js.map → cli-WGONI6PJ.js.map} +0 -0
  155. /package/dist/{cli-NIG4N3XM.js.map → cli-X24QGW6Y.js.map} +0 -0
  156. /package/dist/{config-P4HDNTYD.js.map → config-YWSNBFEE.js.map} +0 -0
  157. /package/dist/{conformance-ZFCMKM6M.js.map → github-GFTLEZ3D.js.map} +0 -0
  158. /package/dist/{github-7ZCH5PSO.js.map → github-LL5LHQFG.js.map} +0 -0
  159. /package/dist/{github-POT6724K.js.map → json-XDV4CZEU.js.map} +0 -0
  160. /package/dist/{json-KT2K62L5.js.map → lint-NO4GIR3Z.js.map} +0 -0
  161. /package/dist/{lint-5AQ5C2BV.js.map → list-4G6F5BX2.js.map} +0 -0
  162. /package/dist/{list-5JZKX2NK.js.map → list-4GJ6KI4U.js.map} +0 -0
  163. /package/dist/{list-SWPFXQMU.js.map → page-4VJQELH5.js.map} +0 -0
  164. /package/dist/{page-UPSXRP75.js.map → pretty-HFA6ITJY.js.map} +0 -0
  165. /package/dist/{pretty-Q6FQAOK4.js.map → pretty-ZMKG3AJR.js.map} +0 -0
  166. /package/dist/{pretty-SQRPFPSQ.js.map → provider-527CO4DM.js.map} +0 -0
  167. /package/dist/{provider-AMGRDY6V.js.map → reporters-DZTHBJEA.js.map} +0 -0
  168. /package/dist/{reporters-45MMC2ID.js.map → reporters-FRM5BHPL.js.map} +0 -0
  169. /package/dist/{reporters-XUV4MM64.js.map → run-BRC64Y7B.js.map} +0 -0
  170. /package/dist/{run-KMWY2IAN.js.map → runtime-7QE3DW6S.js.map} +0 -0
  171. /package/dist/{term-PCJUCWNF.js.map → term-PNWS7F5B.js.map} +0 -0
  172. /package/dist/{validate-IMNCZNWG.js.map → validate-ULPJI4GQ.js.map} +0 -0
@@ -22,7 +22,7 @@ import {
22
22
  updateConfigEval,
23
23
  updateManifestEval,
24
24
  updatePageEval
25
- } from "./chunk-NHHOPZRA.js";
25
+ } from "./chunk-GWGR7BDP.js";
26
26
  import {
27
27
  DEFAULT_CONFIG_FILENAME,
28
28
  assertRegisteredGraders,
@@ -41,7 +41,7 @@ import {
41
41
  sha256,
42
42
  splitBody,
43
43
  withExternalMetadata
44
- } from "./chunk-Z4IZGEM3.js";
44
+ } from "./chunk-77WI6LJW.js";
45
45
  import {
46
46
  isTurnBudgetSkip
47
47
  } from "./chunk-XG6PVB5S.js";
@@ -57,7 +57,7 @@ import {
57
57
  } from "./chunk-77AINBYM.js";
58
58
  import {
59
59
  mergeMetaProvenance
60
- } from "./chunk-GREQKO6M.js";
60
+ } from "./chunk-AZXCL5WH.js";
61
61
  import {
62
62
  palette
63
63
  } from "./chunk-RNVYGWIC.js";
@@ -1284,4 +1284,4 @@ export {
1284
1284
  renderCalibration,
1285
1285
  runInit
1286
1286
  };
1287
- //# sourceMappingURL=chunk-DC5DDJVE.js.map
1287
+ //# sourceMappingURL=chunk-QRAKST62.js.map
@@ -10,13 +10,16 @@ import {
10
10
  listInTree,
11
11
  resolveArtifacts,
12
12
  safeRead
13
- } from "./chunk-APKH2T6E.js";
13
+ } from "./chunk-TKVGEFMH.js";
14
14
  import {
15
15
  configDir
16
16
  } from "./chunk-4TSWU2SU.js";
17
+ import {
18
+ makeRedactor
19
+ } from "./chunk-CU57HT2E.js";
17
20
  import {
18
21
  extractFrontmatter
19
- } from "./chunk-KCOFEWV5.js";
22
+ } from "./chunk-A36QDIXZ.js";
20
23
 
21
24
  // src/tracevals/rules/turn.ts
22
25
  var INJECTED = /<(system-reminder|task-notification|ci-monitor-event|local-command-stdout|local-command-stderr|local-command-caveat)>[\s\S]*?<\/\1>/g;
@@ -102,6 +105,7 @@ var Collector = class {
102
105
  this.home = home;
103
106
  const match = exclude.length > 0 ? picomatch(exclude, { dot: true }) : null;
104
107
  this.excluded = (path) => match !== null && match(this.display(path));
108
+ this.excludedName = (name) => exclude.includes(name);
105
109
  }
106
110
  cwd;
107
111
  root;
@@ -111,6 +115,8 @@ var Collector = class {
111
115
  seen = /* @__PURE__ */ new Set();
112
116
  parsed = /* @__PURE__ */ new Map();
113
117
  excluded;
118
+ /** Whether `exclude` lists, as it is, the name of a source with no file, such as `prompt`. */
119
+ excludedName;
114
120
  display(path) {
115
121
  const inRoot = relPosix(this.root, path);
116
122
  if (inRoot !== null) return inRoot;
@@ -153,7 +159,8 @@ var Collector = class {
153
159
  format,
154
160
  trigger,
155
161
  content,
156
- sha256: createHash("sha256").update(content).digest("hex")
162
+ sha256: createHash("sha256").update(content).digest("hex"),
163
+ blocks: true
157
164
  };
158
165
  if (skill !== void 0) source.skill = skill;
159
166
  const declared = this.declared(path, content);
@@ -162,10 +169,12 @@ var Collector = class {
162
169
  return source;
163
170
  }
164
171
  /**
165
- * Adds a source that says what the session was asked. These never declare
166
- * evals. With no file, its display path is its format, and no glob removes it.
172
+ * Adds a source that says what the session was asked, or one the transcript
173
+ * recorded. These never declare evals. With no file, its display path is its
174
+ * format, and `exclude` matches that name.
167
175
  */
168
- addRequest(file, content, format, trigger) {
176
+ addRequest(file, content, format, trigger, blocks = true) {
177
+ if (EXCLUDABLE_BY_NAME.has(format) && this.excludedName(format)) return;
169
178
  if (file !== null) {
170
179
  if (this.has(file) || this.excluded(file)) return;
171
180
  this.seen.add(key(file));
@@ -176,7 +185,8 @@ var Collector = class {
176
185
  format,
177
186
  trigger,
178
187
  content,
179
- sha256: createHash("sha256").update(content).digest("hex")
188
+ sha256: createHash("sha256").update(content).digest("hex"),
189
+ blocks
180
190
  });
181
191
  }
182
192
  declared(path, content) {
@@ -255,8 +265,62 @@ async function resolveTurnSources(trace, turn, opts) {
255
265
  addPrompts(c, trace, turn);
256
266
  await addPlan(c, trace, turn, opts);
257
267
  await addSpecs(c, touches, opts.plans ?? []);
268
+ await addSystemPrompt(c, trace, turn, opts);
258
269
  return { sources: c.sources, warnings: c.warnings };
259
270
  }
271
+ var EXCLUDABLE_BY_NAME = /* @__PURE__ */ new Set(["prompt", "plan", "system-prompt"]);
272
+ var BOUNDARY_MARKER = "__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__";
273
+ function lastAttachment(trace, turn, type) {
274
+ for (let i = trace.events.length - 1; i >= 0; i -= 1) {
275
+ const event = trace.events[i];
276
+ if (event === void 0 || event.kind !== "meta" || event.index > turn.to) continue;
277
+ const attachment = event.raw.attachment;
278
+ if (event.raw.type === "attachment" && isRecord(attachment) && attachment.type === type) {
279
+ return { index: event.index, record: event.raw, attachment };
280
+ }
281
+ }
282
+ return void 0;
283
+ }
284
+ async function addSystemPrompt(c, trace, turn, opts) {
285
+ const scrub = makeRedactor(opts.redact ?? []);
286
+ const style = lastAttachment(trace, turn, "output_style_instructions")?.attachment.style;
287
+ const styleName = isRecord(style) && typeof style.name === "string" ? style.name : void 0;
288
+ const stylePrompt = isRecord(style) && typeof style.prompt === "string" ? style.prompt : void 0;
289
+ let builtIn;
290
+ if (styleName !== void 0 && stylePrompt !== void 0) {
291
+ const file = await userStyleFile(c, opts, styleName);
292
+ if (file === void 0) builtIn = stylePrompt;
293
+ else c.addRequest(file, scrub(stylePrompt), "output-style", `style ${styleName}`);
294
+ }
295
+ const snapshot = lastAttachment(trace, turn, "prompt_snapshot");
296
+ const recorded = snapshot?.attachment.systemPrompt;
297
+ if (snapshot === void 0 || !Array.isArray(recorded)) return;
298
+ const blocks = recorded.filter((b) => typeof b === "string");
299
+ const custom = !blocks.includes(BOUNDARY_MARKER);
300
+ const content = scrub([...blocks, ...builtIn !== void 0 ? [builtIn] : []].join("\n\n"));
301
+ const { version } = snapshot.record;
302
+ const by = typeof version === "string" ? `, Claude Code ${version}` : "";
303
+ const trigger = `recorded at turn ${String(snapshot.index)}${by}${custom ? ", custom" : ""}`;
304
+ c.addRequest(
305
+ null,
306
+ content,
307
+ "system-prompt",
308
+ trigger,
309
+ /* blocks= */
310
+ custom
311
+ );
312
+ }
313
+ async function userStyleFile(c, opts, name) {
314
+ const dirs = [.../* @__PURE__ */ new Set([c.cwd, c.root])].map((b) => join(b, ".claude", "output-styles"));
315
+ dirs.push(join(configDir(opts.env), "output-styles"));
316
+ for (const dir of dirs) {
317
+ for (const path of await listInTree(dir, (p) => p.endsWith(".md"), { maxDepth: 0 })) {
318
+ const declared = (await frontOf(c, path))?.name;
319
+ if ((typeof declared === "string" ? declared : basename(path, ".md")) === name) return path;
320
+ }
321
+ }
322
+ return void 0;
323
+ }
260
324
  function addPrompts(c, trace, turn) {
261
325
  const typed = trace.events.filter((e) => e.index <= turn.to && isTypedPrompt(e));
262
326
  const main = typed.filter((e) => e.sidechain !== true);
@@ -349,7 +413,7 @@ async function addDesignated(c, opts) {
349
413
  if (c.has(abs)) continue;
350
414
  const content = await safeRead(abs);
351
415
  if (content === null) {
352
- c.warnings.push(`${c.display(abs)}: matched conformance.include but could not be read`);
416
+ c.warnings.push(`${c.display(abs)}: matched runtime.include but could not be read`);
353
417
  continue;
354
418
  }
355
419
  c.add(abs, content, "designated", "always");
@@ -607,4 +671,4 @@ export {
607
671
  resolveTurnSources,
608
672
  pathKey
609
673
  };
610
- //# sourceMappingURL=chunk-YLK2J5YK.js.map
674
+ //# sourceMappingURL=chunk-RGB7WBFD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tracevals/rules/turn.ts","../src/tracevals/rules/sources.ts"],"sourcesContent":["/**\n * The turn a Stop or SubagentStop judges (proposal 0079). A turn starts at the\n * last prompt the user typed; tool results and hook feedback do not start one.\n * Under SubagentStop the turn is the subagent's whole run.\n *\n * Which user records are typed prompts is read from the record shape Claude\n * Code writes, not guessed from wording alone:\n *\n * - `isMeta: true` marks harness injections: a skill's \"Base directory\" body,\n * `<local-command-caveat>`, peer and scheduled messages, hook feedback.\n * - `isCompactSummary: true` is the \"session is being continued\" summary.\n * - `origin.kind` is `human` for a typed prompt and `task-notification` or\n * `peer` otherwise. Older records carry only `turnOrigin`, whose non-typed\n * values are `task_notification`, `scheduled` and `peer`.\n * - A record whose text is nothing but `<system-reminder>`,\n * `<task-notification>`, `<ci-monitor-event>` or `<local-command-*>` blocks\n * is an injection. A typed prompt Claude Code prefixed with a reminder keeps\n * the text after it, so it still counts.\n * - `Stop hook feedback:` and `[Request interrupted by user…]` are markers,\n * never prompts.\n *\n * A `<command-name>` record is a slash command someone typed, so it counts.\n */\nimport {\n emptyWindow,\n materialize,\n type TraceWindow,\n} from \"../graders/util.js\";\nimport type { Trace, TraceEvent } from \"../trace/types.js\";\n\nexport interface TurnSlice {\n window: TraceWindow;\n /** Ordinal in `trace.events` of the turn's first event. */\n from: number;\n /** Ordinal of its last event, inclusive. Less than `from` when there is no turn. */\n to: number;\n /** Typed prompts in the whole session, which `turn-count-above` reads. */\n sessionTurnCount: number;\n}\n\nconst INJECTED =\n /<(system-reminder|task-notification|ci-monitor-event|local-command-stdout|local-command-stderr|local-command-caveat)>[\\s\\S]*?<\\/\\1>/g;\nconst MARKER =\n /^(?:Stop hook feedback:|SubagentStop hook feedback:|\\[Request interrupted by user)/;\n/**\n * Origins of a prompt a person sent: typed in the CLI, or sent through the SDK.\n * Both record formats name it, as `origin.kind` or the older `turnOrigin`,\n * and both are read against this one set.\n */\nconst TYPED_TURN_ORIGINS = new Set([\"human\", \"sdk\"]);\nconst WORK = new Set<TraceEvent[\"kind\"]>([\"assistant\", \"tool_call\", \"tool_result\"]);\n\nexport function isTypedPrompt(event: TraceEvent): boolean {\n if (event.kind !== \"user\" || event.text === undefined) return false;\n const { raw } = event;\n if (raw.isMeta === true || raw.isCompactSummary === true) return false;\n const origin = raw.origin;\n if (\n typeof origin === \"object\" &&\n origin !== null &&\n \"kind\" in origin &&\n typeof origin.kind === \"string\"\n ) {\n if (!TYPED_TURN_ORIGINS.has(origin.kind)) return false;\n } else if (\n typeof raw.turnOrigin === \"string\" &&\n !TYPED_TURN_ORIGINS.has(raw.turnOrigin)\n ) {\n return false;\n }\n const rest = event.text.replace(INJECTED, \"\").trim();\n return rest !== \"\" && !MARKER.test(rest);\n}\n\n/** The last turn of a session: its last typed prompt to the end of the trace. */\nexport function lastTurn(trace: Trace): TurnSlice {\n const prompts = trace.events.filter((e) => e.sidechain !== true && isTypedPrompt(e));\n const sessionTurnCount = prompts.length;\n const to = trace.events.length - 1;\n const last = prompts.at(-1);\n if (last === undefined) {\n return {\n window: emptyWindow(\"turn\", \"last turn\", \"the trace holds no prompt the user typed\"),\n from: to + 1,\n to,\n sessionTurnCount,\n };\n }\n return slice(trace, last.index, [last], new Set([undefined]), sessionTurnCount, {\n label: \"last turn\",\n reason: \"nothing happened after the last prompt the user typed\",\n });\n}\n\n/**\n * A subagent's sidecar transcript parsed alone. Every record is a sidechain,\n * so the parser keeps no prompts; the turn is the whole run, and its prompts\n * are the task the subagent was given.\n */\nexport function subagentTurn(trace: Trace): TurnSlice {\n const prompts = trace.events.filter(isTypedPrompt);\n return slice(\n trace,\n 0,\n prompts,\n new Set(trace.events.map((e) => e.branchId)),\n prompts.length,\n { label: \"subagent run\", reason: \"the subagent recorded no work\" },\n );\n}\n\nfunction slice(\n trace: Trace,\n from: number,\n prompts: TraceEvent[],\n own: Set<string | undefined>,\n sessionTurnCount: number,\n words: { label: string; reason: string },\n): TurnSlice {\n const to = trace.events.length - 1;\n const worked = trace.events.some((e) => e.index > from && WORK.has(e.kind));\n if (!worked) {\n return {\n window: emptyWindow(\"turn\", words.label, words.reason),\n from,\n to,\n sessionTurnCount,\n };\n }\n const window = materialize(\n trace,\n \"turn\",\n words.label,\n [{ start: from, end: Number.POSITIVE_INFINITY }],\n undefined,\n own,\n );\n // Only typed prompts are prompts here, and `turnCount` is the session's,\n // because the one condition that reads it counts session turns.\n window.userMessages = prompts.map((p) => p.text ?? \"\");\n window.turnCount = sessionTurnCount;\n return { window, from, to, sessionTurnCount };\n}\n","/**\n * Which files govern the agent in a turn (proposal 0079, \"Rule sources and\n * their triggers\"). Resolution is deterministic, from the filesystem and the\n * trace; no model decides which files count.\n *\n * The list of formats is closed. Reading a file never makes it a source: a\n * README or a product docs page describes other systems, so only the known\n * formats, files named by `include`, and what a skill or an `@path` import\n * pulls in are ever returned. `exclude` removes a file from every row.\n *\n * To touch a file is to Read, Write or Edit it, anywhere in the session up to\n * the turn's end, which is Claude Code's own trigger for path-scoped rules.\n *\n * Six more formats say what the session was asked (proposal 0080): the typed\n * prompts, the approved plan, a touched Spec Kit feature, Kiro spec or live\n * OpenSpec change, and a touched file `runtime.plans` names. None is known\n * at session start, so only a turn resolves them, and none declares evals.\n *\n * Two are read from the transcript itself (proposal 0081): the system prompt\n * of the last prompt snapshot, and a user output style. Claude Code's own\n * prompt is reported and never blocks; a prompt the user wrote blocks.\n */\nimport { createHash } from \"node:crypto\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport picomatch from \"picomatch\";\nimport { extractFrontmatter } from \"../../meta/extractors/frontmatter.js\";\nimport type { ExtractedMetadata } from \"../../meta/types.js\";\nimport { resolveArtifacts } from \"../artifacts/resolve.js\";\nimport { findGitRoot, listInTree, safeRead } from \"../artifacts/fs.js\";\nimport { extractEvals } from \"../evals/extract.js\";\nimport { windowOf } from \"../graders/util.js\";\nimport { makeRedactor } from \"../judge/redact.js\";\nimport { configDir } from \"../trace/discover.js\";\nimport type { Trace } from \"../trace/types.js\";\nimport { isTypedPrompt } from \"./turn.js\";\n\nexport type RuleFormat =\n | \"claude-md\"\n | \"claude-rule\"\n | \"agents-md\"\n | \"gemini-md\"\n | \"cursor-rule\"\n | \"kiro-steering\"\n | \"speckit-constitution\"\n | \"openspec-project\"\n | \"import\"\n | \"skill\"\n | \"slash-command\"\n | \"agent\"\n | \"designated\"\n | \"prompt\"\n | \"plan\"\n | \"speckit-spec\"\n | \"kiro-spec\"\n | \"openspec-change\"\n | \"plans\"\n | \"system-prompt\"\n | \"output-style\";\n\n/** An `ai` eval a source declares; its assertion is the rule (proposal 0079). */\nexport interface DeclaredRule {\n id: string;\n text: string;\n when?: Record<string, unknown>;\n}\n\nexport interface RuleSource {\n /** Absolute path on disk, or `\"\"` for the typed prompts, an inline plan and the system prompt. */\n path: string;\n /** Relative to the project root with forward slashes, or `~/…` under home. */\n displayPath: string;\n format: RuleFormat;\n /** Why the file is in scope, in words: `always`, `read`, `touched src/a.ts`. */\n trigger: string;\n content: string;\n /** sha256 of `content`, hex. */\n sha256: string;\n /** The skill a `skill` source belongs to. */\n skill?: string;\n /** Present when the file declares `ai` evals; they replace extraction. */\n declaredRules?: DeclaredRule[];\n /** False for Claude Code's default system prompt, whose rules are reported and never block. */\n blocks: boolean;\n}\n\nexport interface SourceOptions {\n /** The session's working directory, where the ancestor walk starts. */\n projectDir: string;\n /** Ceiling for the ancestor walk and base of `displayPath`; default the git root. */\n projectRoot?: string;\n /** `CLAUDE_CONFIG_DIR` finds `~/.claude`; `HOME` / `USERPROFILE` find `~/.gemini` and `~/.kiro`. */\n env?: Record<string, string | undefined>;\n /** `runtime.include`: globs, relative to the project root, in scope once read. */\n include?: string[];\n /** `runtime.exclude`: globs never treated as sources, in any row, and source names. */\n exclude?: string[];\n /** `judge.redact`: patterns scrubbed from what the transcript records of the system prompt. */\n redact?: string[];\n /** `runtime.plans`: globs, relative to the project root, in scope once touched. */\n plans?: string[];\n /** Set under SubagentStop: the subagent type whose definition governs the run. */\n agentType?: string;\n}\n\nexport interface ResolvedSources {\n sources: RuleSource[];\n warnings: string[];\n}\n\n/** The turn's ordinal bounds in `trace.events`, inclusive. `lastTurn` returns them. */\nexport interface TurnBounds {\n from: number;\n to: number;\n}\n\n/** Imports followed from a `claude-md` or `gemini-md` file, as Claude Code does. */\nconst MAX_IMPORT_HOPS = 4;\n\ntype Trigger =\n | { kind: \"always\" }\n | { kind: \"read\" }\n | { kind: \"globs\"; key: string; patterns: string[] };\n\ninterface Candidate {\n path: string;\n format: RuleFormat;\n trigger: Trigger;\n}\n\ninterface Touch {\n abs: string;\n rel: string | null;\n read: boolean;\n}\n\nclass Collector {\n readonly sources: RuleSource[] = [];\n readonly warnings: string[] = [];\n private readonly seen = new Set<string>();\n private readonly parsed = new Map<string, ExtractedMetadata | null>();\n private readonly excluded: (path: string) => boolean;\n /** Whether `exclude` lists, as it is, the name of a source with no file, such as `prompt`. */\n readonly excludedName: (name: string) => boolean;\n\n constructor(\n readonly cwd: string,\n readonly root: string,\n readonly home: string,\n exclude: string[],\n ) {\n const match = exclude.length > 0 ? picomatch(exclude, { dot: true }) : null;\n this.excluded = (path) => match !== null && match(this.display(path));\n // The whole name, never a glob: `**` names files, and keeps the prompt.\n this.excludedName = (name) => exclude.includes(name);\n }\n\n display(path: string): string {\n const inRoot = relPosix(this.root, path);\n if (inRoot !== null) return inRoot;\n const inHome = relPosix(this.home, path);\n if (inHome !== null) return `~/${inHome}`;\n return path.split(sep).join(\"/\");\n }\n\n has(path: string): boolean {\n return this.seen.has(key(path));\n }\n\n /** The file's front matter, or null when it has none or it does not parse. */\n front(path: string, content: string): ExtractedMetadata | null {\n const k = key(path);\n if (this.parsed.has(k)) return this.parsed.get(k) ?? null;\n let parsed: ExtractedMetadata | null = null;\n try {\n const fm = extractFrontmatter(content, \"markdown\");\n parsed = fm.present ? fm : null;\n } catch (err) {\n const loose = isCursorRule(path) ? cursorFront(content) : null;\n if (loose !== null) {\n this.parsed.set(k, loose);\n return loose;\n }\n const first = (err instanceof Error ? err.message : String(err)).split(\"\\n\")[0] ?? \"\";\n this.warnings.push(\n `${this.display(path)}: front matter does not parse (${first}), so it is read as having none`,\n );\n }\n this.parsed.set(k, parsed);\n return parsed;\n }\n\n /** Adds a source once. Returns it, or null when excluded or already listed. */\n add(\n path: string,\n content: string,\n format: RuleFormat,\n trigger: string,\n skill?: string,\n ): RuleSource | null {\n if (this.has(path) || this.excluded(path)) return null;\n this.seen.add(key(path));\n const source: RuleSource = {\n path,\n displayPath: this.display(path),\n format,\n trigger,\n content,\n sha256: createHash(\"sha256\").update(content).digest(\"hex\"),\n blocks: true,\n };\n if (skill !== undefined) source.skill = skill;\n const declared = this.declared(path, content);\n if (declared !== undefined) source.declaredRules = declared;\n this.sources.push(source);\n return source;\n }\n\n /**\n * Adds a source that says what the session was asked, or one the transcript\n * recorded. These never declare evals. With no file, its display path is its\n * format, and `exclude` matches that name.\n */\n addRequest(\n file: string | null,\n content: string,\n format: RuleFormat,\n trigger: string,\n blocks = true,\n ): void {\n // A named source goes by its name whether or not a file holds it, so\n // `exclude: [plan]` drops a plan file as it drops an inline plan.\n if (EXCLUDABLE_BY_NAME.has(format) && this.excludedName(format)) return;\n if (file !== null) {\n if (this.has(file) || this.excluded(file)) return;\n this.seen.add(key(file));\n }\n this.sources.push({\n path: file ?? \"\",\n displayPath: file === null ? format : this.display(file),\n format,\n trigger,\n content,\n sha256: createHash(\"sha256\").update(content).digest(\"hex\"),\n blocks,\n });\n }\n\n private declared(path: string, content: string): DeclaredRule[] | undefined {\n const fm = this.front(path, content);\n if (fm === null) return undefined;\n const extracted = extractEvals(\n { name: basename(path), type: \"project-rules\", path, content, origin: \"project\" },\n fm,\n );\n if (extracted.errors.length > 0) {\n this.warnings.push(\n `${this.display(path)}: metadata.evals does not validate (${extracted.errors[0]?.message ?? \"invalid\"}), so it declares no rules`,\n );\n return undefined;\n }\n const rules: DeclaredRule[] = [];\n for (const entry of extracted.evals) {\n if (entry.grader !== \"ai\" || entry.assertion === undefined) continue;\n const rule: DeclaredRule = { id: entry.id, text: entry.assertion };\n const when = entry.options?.when;\n if (isRecord(when)) rule.when = when;\n rules.push(rule);\n }\n return rules.length > 0 ? rules : undefined;\n }\n}\n\n/** Every source whose trigger is \"always\", without a trace (for `prepare`). */\nexport async function resolveAlwaysSources(opts: SourceOptions): Promise<ResolvedSources> {\n const c = await collector(opts);\n for (const candidate of await catalog(c, opts)) {\n if (candidate.trigger.kind === \"always\") await addWithImports(c, candidate, \"always\");\n }\n await addDesignated(c, opts);\n return { sources: c.sources, warnings: c.warnings };\n}\n\n/** Every source in scope for one turn of `trace`. */\nexport async function resolveTurnSources(\n trace: Trace,\n turn: TurnBounds,\n opts: SourceOptions,\n): Promise<ResolvedSources> {\n const c = await collector(opts);\n const touches: Touch[] = trace.fileAccesses\n .filter((a) => a.index <= turn.to)\n .map((a) => {\n const abs = resolve(c.cwd, a.path);\n return { abs, rel: relPosix(c.root, abs), read: a.op === \"read\" };\n });\n const wasRead = new Set(touches.filter((t) => t.read).map((t) => key(t.abs)));\n\n for (const candidate of await catalog(c, opts)) {\n const { trigger } = candidate;\n if (trigger.kind === \"always\") {\n await addWithImports(c, candidate, \"always\");\n } else if (trigger.kind === \"read\") {\n if (wasRead.has(key(candidate.path))) await addWithImports(c, candidate, \"read\");\n } else {\n const match = picomatch(trigger.patterns, { dot: true });\n const hit = touches.find((t) => t.rel !== null && match(t.rel));\n if (hit !== undefined && hit.rel !== null) {\n await addWithImports(c, candidate, `${trigger.key} matched ${hit.rel}`);\n }\n }\n }\n\n // A subdirectory's memory file applies once a file under it is touched.\n // Farther directories come first, so the nearest file reads last.\n const nested = new Map<string, string>();\n for (const touch of touches) {\n if (touch.rel === null) continue;\n for (const dir of dirsBelowCwd(c, dirname(touch.abs))) {\n if (!nested.has(dir)) nested.set(dir, touch.rel);\n }\n }\n const dirs = [...nested.keys()].sort((a, b) => a.length - b.length);\n for (const dir of dirs) {\n const touched = nested.get(dir) ?? \"\";\n for (const [name, format] of NESTED_FILES) {\n const path = join(dir, name);\n const content = await safeRead(path);\n if (content !== null) {\n await addWithImports(c, { path, format, trigger: { kind: \"always\" } }, `touched ${touched}`, content);\n }\n }\n }\n\n await addWindowed(c, trace, turn, touches, opts);\n\n await addDesignated(c, opts);\n\n addPrompts(c, trace, turn);\n await addPlan(c, trace, turn, opts);\n await addSpecs(c, touches, opts.plans ?? []);\n await addSystemPrompt(c, trace, turn, opts);\n return { sources: c.sources, warnings: c.warnings };\n}\n\n// ── What the transcript recorded of the prompt ───────────────────\n\n/** The sources `runtime.exclude` matches by name (proposals 0080 and 0081). */\nconst EXCLUDABLE_BY_NAME: ReadonlySet<RuleFormat> = new Set<RuleFormat>([\"prompt\", \"plan\", \"system-prompt\"]);\n\n/** Claude Code's own block in its default prompt; a replaced prompt has none. */\nconst BOUNDARY_MARKER = \"__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__\";\n\ninterface Recorded {\n index: number;\n record: Record<string, unknown>;\n attachment: Record<string, unknown>;\n}\n\n/** The last attachment of `type` at or before the turn's end, with its record. */\nfunction lastAttachment(trace: Trace, turn: TurnBounds, type: string): Recorded | undefined {\n for (let i = trace.events.length - 1; i >= 0; i -= 1) {\n const event = trace.events[i];\n if (event === undefined || event.kind !== \"meta\" || event.index > turn.to) continue;\n const attachment = event.raw.attachment;\n if (event.raw.type === \"attachment\" && isRecord(attachment) && attachment.type === type) {\n return { index: event.index, record: event.raw, attachment };\n }\n }\n return undefined;\n}\n\n/**\n * The system prompt of the last `prompt_snapshot`, and the last output style.\n * A style a user file defines is its own source, holding the text the agent\n * saw; a built-in style's text joins the system prompt. The prompt is custom,\n * and blocks, when Claude Code's boundary marker is missing.\n */\nasync function addSystemPrompt(c: Collector, trace: Trace, turn: TurnBounds, opts: SourceOptions): Promise<void> {\n const scrub = makeRedactor(opts.redact ?? []);\n const style = lastAttachment(trace, turn, \"output_style_instructions\")?.attachment.style;\n const styleName = isRecord(style) && typeof style.name === \"string\" ? style.name : undefined;\n const stylePrompt = isRecord(style) && typeof style.prompt === \"string\" ? style.prompt : undefined;\n let builtIn: string | undefined;\n if (styleName !== undefined && stylePrompt !== undefined) {\n const file = await userStyleFile(c, opts, styleName);\n if (file === undefined) builtIn = stylePrompt;\n else c.addRequest(file, scrub(stylePrompt), \"output-style\", `style ${styleName}`);\n }\n\n const snapshot = lastAttachment(trace, turn, \"prompt_snapshot\");\n const recorded: unknown = snapshot?.attachment.systemPrompt;\n if (snapshot === undefined || !Array.isArray(recorded)) return;\n const blocks = recorded.filter((b): b is string => typeof b === \"string\");\n const custom = !blocks.includes(BOUNDARY_MARKER);\n const content = scrub([...blocks, ...(builtIn !== undefined ? [builtIn] : [])].join(\"\\n\\n\"));\n const { version } = snapshot.record;\n const by = typeof version === \"string\" ? `, Claude Code ${version}` : \"\";\n const trigger = `recorded at turn ${String(snapshot.index)}${by}${custom ? \", custom\" : \"\"}`;\n // A prompt the user replaced blocks; Claude Code's own default only reports.\n c.addRequest(null, content, \"system-prompt\", trigger, /* blocks= */ custom);\n}\n\n/**\n * The user file that defines output style `name`: under the project's\n * `.claude/output-styles/`, then the user's. Its front matter `name`, or\n * its base name, matches.\n */\nasync function userStyleFile(c: Collector, opts: SourceOptions, name: string): Promise<string | undefined> {\n // Where Claude Code reads styles: the project (cwd first, then the git root)\n // and the user. No ancestor walk, since Claude Code does none for styles.\n const dirs = [...new Set([c.cwd, c.root])].map((b) => join(b, \".claude\", \"output-styles\"));\n dirs.push(join(configDir(opts.env), \"output-styles\"));\n for (const dir of dirs) {\n for (const path of await listInTree(dir, (p) => p.endsWith(\".md\"), { maxDepth: 0 })) {\n const declared = (await frontOf(c, path))?.name;\n if ((typeof declared === \"string\" ? declared : basename(path, \".md\")) === name) return path;\n }\n }\n return undefined;\n}\n\n// ── What the session was asked ───────────────────────────────────\n\n/**\n * Every prompt typed up to the turn's end, as one numbered sequence. A\n * subagent's own run has only sidechain prompts, and its task is its request.\n */\nfunction addPrompts(c: Collector, trace: Trace, turn: TurnBounds): void {\n const typed = trace.events.filter((e) => e.index <= turn.to && isTypedPrompt(e));\n const main = typed.filter((e) => e.sidechain !== true);\n const prompts = main.length > 0 ? main : typed;\n if (prompts.length === 0) return;\n const content = prompts\n .map((p, i) => `${String(i + 1)}. ${(p.text ?? \"\").trim()}`)\n .join(\"\\n\\n\");\n c.addRequest(null, content, \"prompt\", `typed prompts 1-${String(prompts.length)}`);\n}\n\n/**\n * The plan of the last approved `ExitPlanMode` at or before the turn's end.\n * A call is approved when its result is not an error. The plan is the call's\n * `plan` input, or else the file the session last wrote under the user's\n * `plans/` directory before the call.\n */\nasync function addPlan(c: Collector, trace: Trace, turn: TurnBounds, opts: SourceOptions): Promise<void> {\n const approved = trace.toolCalls\n .filter((call) => call.name === \"ExitPlanMode\" && call.index <= turn.to)\n .filter((call) => isApproved(trace, call.index, turn.to))\n .at(-1);\n if (approved === undefined) return;\n const trigger = `approved at turn ${String(approved.index)}`;\n const plan = approved.input.plan;\n if (typeof plan === \"string\" && plan.trim() !== \"\") {\n c.addRequest(null, plan, \"plan\", trigger);\n return;\n }\n const plansDir = join(configDir(opts.env), \"plans\");\n const file = trace.fileAccesses\n .filter((a) => a.op !== \"read\" && a.index < approved.index)\n .map((a) => resolve(c.cwd, a.path))\n .filter((abs) => relPosix(plansDir, abs) !== null)\n .at(-1);\n if (file === undefined) return;\n const content = await safeRead(file);\n if (content !== null) c.addRequest(file, content, \"plan\", trigger);\n}\n\n/**\n * Whether the tool call at `index` has a result by `to` that is not an error.\n * A plan approved only after the turn ends is not yet a source; the next turn,\n * whose bounds include the result, picks it up.\n */\nfunction isApproved(trace: Trace, index: number, to: number): boolean {\n const id = trace.events.find((e) => e.index === index)?.raw.id;\n if (typeof id !== \"string\") return false;\n for (const event of trace.events) {\n if (event.kind !== \"tool_result\" || event.index <= index || event.index > to) continue;\n const message = event.raw.message;\n const blocks: unknown = isRecord(message) ? message.content : undefined;\n if (!Array.isArray(blocks)) continue;\n for (const block of blocks as unknown[]) {\n if (isRecord(block) && block.type === \"tool_result\" && block.tool_use_id === id) {\n return block.is_error !== true;\n }\n }\n }\n return false;\n}\n\n/** The files each spec format reads from a touched directory. */\nconst SPEC_FILES: Record<\"speckit-spec\" | \"kiro-spec\", string[]> = {\n \"speckit-spec\": [\"spec.md\", \"plan.md\", \"tasks.md\"],\n \"kiro-spec\": [\"requirements.md\", \"design.md\", \"tasks.md\"],\n};\n\n/** The spec directory a project-relative path lies under, and its format. */\nfunction specDirOf(rel: string): { dir: string; format: \"speckit-spec\" | \"kiro-spec\" | \"openspec-change\" } | null {\n const parts = rel.split(\"/\");\n const [first, second, third] = parts;\n if (first === \"specs\" && second !== undefined && parts.length > 2) {\n return { dir: `specs/${second}`, format: \"speckit-spec\" };\n }\n if (first === \".kiro\" && second === \"specs\" && third !== undefined && parts.length > 3) {\n return { dir: `.kiro/specs/${third}`, format: \"kiro-spec\" };\n }\n // An archived change is done, so it never counts.\n if (first === \"openspec\" && second === \"changes\" && third !== undefined && third !== \"archive\" && parts.length > 3) {\n return { dir: `openspec/changes/${third}`, format: \"openspec-change\" };\n }\n return null;\n}\n\n/** A touched spec brings in its directory's files; a touched `plans` file brings in itself. */\nasync function addSpecs(c: Collector, touches: Touch[], plans: string[]): Promise<void> {\n const isPlan = plans.length > 0 ? picomatch(plans, { dot: true }) : null;\n const done = new Set<string>();\n for (const touch of touches) {\n const { rel } = touch;\n if (rel === null) continue;\n const trigger = `touched ${rel}`;\n const spec = specDirOf(rel);\n if (spec !== null && !done.has(spec.dir)) {\n done.add(spec.dir);\n const dir = join(c.root, ...spec.dir.split(\"/\"));\n const files =\n spec.format === \"openspec-change\"\n ? await listInTree(dir, (p) => p.endsWith(\".md\"))\n : SPEC_FILES[spec.format].map((name) => join(dir, name));\n for (const file of files) {\n const content = await safeRead(file);\n if (content !== null) c.addRequest(file, content, spec.format, trigger);\n }\n }\n if (isPlan?.(rel) === true) {\n const content = await safeRead(touch.abs);\n if (content !== null) c.addRequest(touch.abs, content, \"plans\", trigger);\n }\n }\n}\n\n/**\n * Files named in `runtime.include`. A person chose each one to govern the\n * agent, so it applies to every turn, as a `CLAUDE.md` does. Waiting for the\n * agent to read one would let a turn that skipped it escape its rules.\n */\nasync function addDesignated(c: Collector, opts: SourceOptions): Promise<void> {\n const include = opts.include ?? [];\n if (include.length === 0) return;\n const match = picomatch(include, { dot: true });\n const found = await listInTree(c.root, (abs) => {\n const rel = relPosix(c.root, abs);\n return rel !== null && match(rel);\n });\n for (const abs of found) {\n if (c.has(abs)) continue;\n const content = await safeRead(abs);\n if (content === null) {\n c.warnings.push(`${c.display(abs)}: matched runtime.include but could not be read`);\n continue;\n }\n c.add(abs, content, \"designated\", \"always\");\n }\n}\n\n// ── Skills, slash commands and the agent ─────────────────────────\n\nasync function addWindowed(\n c: Collector,\n trace: Trace,\n turn: TurnBounds,\n touches: Touch[],\n opts: SourceOptions,\n): Promise<void> {\n // The existing resolver settles which file a skill, command or agent names.\n // Agents spawned in a main session govern their own runs, not this turn, so\n // only the agent this run is (under SubagentStop) is asked for.\n const { artifacts } = await resolveArtifacts(\n {\n ...trace,\n agentSpawns:\n opts.agentType === undefined ? [] : [{ subagentType: opts.agentType, index: 0 }],\n },\n { projectDir: c.cwd, projectRoot: c.root, ...(opts.env ? { env: opts.env } : {}) },\n );\n for (const artifact of artifacts) {\n if (artifact.type === \"agent\") {\n c.add(artifact.path, artifact.content, \"agent\", \"subagent run\");\n continue;\n }\n if (artifact.type !== \"skill\" && artifact.type !== \"slash-command\") continue;\n // In scope from the first invocation to the end of the session (proposal\n // 0080): a skill's procedure spans the turns after it, and the skills it\n // calls partway through do not end it. Batch `run` keeps ADR 01015's window.\n const window = windowOf(trace, artifact);\n if (!window.events.some((e) => e.index <= turn.to)) continue;\n if (artifact.type === \"slash-command\") {\n c.add(artifact.path, artifact.content, \"slash-command\", \"slash command window\");\n continue;\n }\n c.add(artifact.path, artifact.content, \"skill\", \"skill window\", artifact.name);\n const skillDir = dirname(artifact.path);\n for (const touch of touches) {\n if (!touch.read || relPosix(skillDir, touch.abs) === null || c.has(touch.abs)) continue;\n const content = await safeRead(touch.abs);\n if (content !== null) {\n c.add(touch.abs, content, \"skill\", `read under skill ${artifact.name}`, artifact.name);\n }\n }\n }\n}\n\n// ── The catalog of known formats ─────────────────────────────────\n\n/** Memory files read at cwd, each ancestor up to the root, and in their `.claude/`. */\nconst ANCESTOR_FILES: [string, RuleFormat][] = [\n [\"CLAUDE.md\", \"claude-md\"],\n [\"CLAUDE.local.md\", \"claude-md\"],\n [join(\".claude\", \"CLAUDE.md\"), \"claude-md\"],\n [\"AGENTS.md\", \"agents-md\"],\n [join(\".claude\", \"AGENTS.md\"), \"agents-md\"],\n [\"GEMINI.md\", \"gemini-md\"],\n];\n\n/** Memory files a touch under a subdirectory brings in. */\nconst NESTED_FILES: [string, RuleFormat][] = [\n [\"CLAUDE.md\", \"claude-md\"],\n [\"AGENTS.md\", \"agents-md\"],\n [\"GEMINI.md\", \"gemini-md\"],\n];\n\nasync function catalog(c: Collector, opts: SourceOptions): Promise<Candidate[]> {\n const out: Candidate[] = [];\n const userClaude = configDir(opts.env);\n const always: Trigger = { kind: \"always\" };\n\n out.push({ path: join(userClaude, \"CLAUDE.md\"), format: \"claude-md\", trigger: always });\n out.push({ path: join(c.home, \".gemini\", \"GEMINI.md\"), format: \"gemini-md\", trigger: always });\n for (const dir of ancestors(c.cwd, c.root).reverse()) {\n for (const [name, format] of ANCESTOR_FILES) {\n out.push({ path: join(dir, name), format, trigger: always });\n }\n }\n\n // Project-level directories live at the root; a cwd below it is checked too.\n const bases = c.cwd === c.root ? [c.root] : [c.root, c.cwd];\n\n for (const dir of [join(userClaude, \"rules\"), ...bases.map((b) => join(b, \".claude\", \"rules\"))]) {\n for (const path of await listInTree(dir, (p) => p.endsWith(\".md\"))) {\n out.push({ path, format: \"claude-rule\", trigger: await claudeRuleTrigger(c, path) });\n }\n }\n\n for (const base of bases) {\n const dir = join(base, \".cursor\", \"rules\");\n for (const path of await listInTree(dir, (p) => p.endsWith(\".mdc\") || p.endsWith(\".md\"))) {\n const trigger = await cursorTrigger(c, path);\n if (trigger !== null) out.push({ path, format: \"cursor-rule\", trigger });\n }\n }\n\n for (const dir of [join(c.home, \".kiro\", \"steering\"), ...bases.map((b) => join(b, \".kiro\", \"steering\"))]) {\n for (const path of await listInTree(dir, (p) => p.endsWith(\".md\"), { maxDepth: 0 })) {\n out.push({ path, format: \"kiro-steering\", trigger: await kiroTrigger(c, path) });\n }\n }\n\n for (const base of bases) {\n out.push({\n path: join(base, \".specify\", \"memory\", \"constitution.md\"),\n format: \"speckit-constitution\",\n trigger: always,\n });\n out.push({ path: join(base, \"openspec\", \"project.md\"), format: \"openspec-project\", trigger: { kind: \"read\" } });\n }\n return out;\n}\n\nasync function frontOf(c: Collector, path: string): Promise<Record<string, unknown> | null> {\n const content = await safeRead(path);\n if (content === null) return null;\n return c.front(path, content)?.data ?? null;\n}\n\nasync function claudeRuleTrigger(c: Collector, path: string): Promise<Trigger> {\n const patterns = globList((await frontOf(c, path))?.paths);\n return patterns.length > 0 ? { kind: \"globs\", key: \"paths\", patterns } : { kind: \"always\" };\n}\n\n/** Null for a `.md` file with no front matter, which Cursor does not read as a rule. */\nasync function cursorTrigger(c: Collector, path: string): Promise<Trigger | null> {\n const fm = await frontOf(c, path);\n if (fm === null && !path.endsWith(\".mdc\")) return null;\n if (fm?.alwaysApply === true) return { kind: \"always\" };\n const patterns = globList(fm?.globs);\n return patterns.length > 0 ? { kind: \"globs\", key: \"globs\", patterns } : { kind: \"read\" };\n}\n\nasync function kiroTrigger(c: Collector, path: string): Promise<Trigger> {\n const fm = await frontOf(c, path);\n const inclusion = fm?.inclusion;\n if (inclusion === undefined || inclusion === \"always\") return { kind: \"always\" };\n if (inclusion === \"fileMatch\") {\n const patterns = globList(fm?.fileMatchPattern);\n if (patterns.length > 0) return { kind: \"globs\", key: \"fileMatchPattern\", patterns };\n }\n return { kind: \"read\" };\n}\n\n// ── Imports ──────────────────────────────────────────────────────\n\n/** Adds a candidate and, for a memory file, what its `@path` lines import. */\nasync function addWithImports(\n c: Collector,\n candidate: Candidate,\n trigger: string,\n known?: string,\n): Promise<void> {\n if (c.has(candidate.path)) return;\n const content = known ?? (await safeRead(candidate.path));\n if (content === null) return;\n const added = c.add(candidate.path, content, candidate.format, trigger);\n if (added === null || (candidate.format !== \"claude-md\" && candidate.format !== \"gemini-md\")) {\n return;\n }\n let frontier = [added];\n for (let hop = 1; hop <= MAX_IMPORT_HOPS && frontier.length > 0; hop += 1) {\n const next: RuleSource[] = [];\n for (const importer of frontier) {\n for (const ref of importsOf(importer.content)) {\n const path = ref.startsWith(\"~/\")\n ? join(c.home, ref.slice(2))\n : resolve(dirname(importer.path), ref);\n if (c.has(path)) continue;\n const body = await safeRead(path);\n if (body === null) continue;\n const source = c.add(path, body, \"import\", `imported by ${importer.displayPath}`);\n if (source !== null) next.push(source);\n }\n }\n frontier = next;\n }\n}\n\n/** `@path` references outside code fences and code spans. */\nfunction importsOf(content: string): string[] {\n const refs: string[] = [];\n // The open fence's character and length: CommonMark closes a fence only\n // with the same character, at least as long, so a backtick line inside a\n // tilde fence is text.\n let fence: { char: string; length: number } | null = null;\n for (const line of content.split(/\\r?\\n/)) {\n const marker = /^\\s*(`{3,}|~{3,})/.exec(line)?.[1];\n if (marker !== undefined) {\n const char = marker.charAt(0);\n if (fence === null) {\n fence = { char, length: marker.length };\n continue;\n }\n if (char === fence.char && marker.length >= fence.length && line.trim() === marker) {\n fence = null;\n continue;\n }\n }\n if (fence !== null) continue;\n const prose = line.replace(/`[^`]*`/g, \"\");\n for (const m of prose.matchAll(/(?:^|\\s)@([^\\s`]+)/g)) {\n const ref = m[1]?.replace(/[.,;:!?)\\]]+$/, \"\");\n if (ref) refs.push(ref);\n }\n }\n return refs;\n}\n\n// ── Helpers ──────────────────────────────────────────────────────\n\nasync function collector(opts: SourceOptions): Promise<Collector> {\n const cwd = resolve(opts.projectDir);\n const root = resolve(opts.projectRoot ?? (await findGitRoot(cwd)) ?? cwd);\n return new Collector(cwd, root, homeDir(opts.env), opts.exclude ?? []);\n}\n\nfunction homeDir(env: Record<string, string | undefined> = process.env): string {\n const set = process.platform === \"win32\" ? (env.USERPROFILE ?? env.HOME) : env.HOME;\n return resolve(set ?? homedir());\n}\n\n/** cwd and each ancestor up to the root, nearest first. */\nfunction ancestors(cwd: string, root: string): string[] {\n const dirs: string[] = [];\n let current = cwd;\n for (let depth = 0; depth < 32; depth += 1) {\n dirs.push(current);\n if (current === root) break;\n const parent = dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return dirs;\n}\n\n/** `dir` and its ancestors inside the root that are not cwd or above it. */\nfunction dirsBelowCwd(c: Collector, dir: string): string[] {\n const dirs: string[] = [];\n let current = dir;\n for (let depth = 0; depth < 64; depth += 1) {\n if (relPosix(c.root, current) === null || relPosix(current, c.cwd) !== null) break;\n dirs.push(current);\n const parent = dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return dirs;\n}\n\n/** One glob, a comma-separated string, or a list. Commas inside braces stay. */\nfunction isCursorRule(path: string): boolean {\n return path.split(sep).join(\"/\").includes(\"/.cursor/rules/\");\n}\n\n/**\n * Cursor reads its front matter line by line, so `globs: **\\/*.ts` is a rule\n * there and invalid YAML (an alias) here. This reads the three keys Cursor\n * defines the way Cursor does, as `key: rest of line`.\n */\nfunction cursorFront(content: string): ExtractedMetadata | null {\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/.exec(content)?.[1];\n if (block === undefined) return null;\n const data: Record<string, unknown> = {};\n for (const line of block.split(/\\r?\\n/)) {\n const m = /^(description|globs|alwaysApply):\\s*(.*)$/.exec(line);\n const name = m?.[1];\n const value = m?.[2]?.trim();\n if (name === undefined || value === undefined) continue;\n data[name] = name === \"alwaysApply\" ? value === \"true\" : value;\n }\n if (Object.keys(data).length === 0) return null;\n return { data, present: true, format: \"markdown\", lineFor: () => undefined };\n}\n\nfunction globList(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.filter((v): v is string => typeof v === \"string\" && v.trim() !== \"\").map((v) => v.trim());\n }\n if (typeof value !== \"string\") return [];\n const out: string[] = [];\n let depth = 0;\n let current = \"\";\n for (const ch of value) {\n if (ch === \"{\") depth += 1;\n if (ch === \"}\") depth = Math.max(0, depth - 1);\n if (ch === \",\" && depth === 0) {\n out.push(current);\n current = \"\";\n } else {\n current += ch;\n }\n }\n out.push(current);\n return out.map((p) => p.trim()).filter((p) => p !== \"\");\n}\n\n/** `path` relative to `base` with forward slashes, or null when outside it. */\nfunction relPosix(base: string, path: string): string | null {\n const rel = relative(base, path);\n if (rel === \"\") return \"\";\n if (rel.startsWith(\"..\") || isAbsolute(rel)) return null;\n return rel.split(sep).join(\"/\");\n}\n\nfunction key(path: string): string {\n const abs = resolve(path);\n return process.platform === \"win32\" ? abs.toLowerCase() : abs;\n}\n\n/** A path as sources compare it: absolute, and case-folded on Windows. */\nexport const pathKey = key;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwCA,IAAM,WACJ;AACF,IAAM,SACJ;AAMF,IAAM,qBAAqB,oBAAI,IAAI,CAAC,SAAS,KAAK,CAAC;AACnD,IAAM,OAAO,oBAAI,IAAwB,CAAC,aAAa,aAAa,aAAa,CAAC;AAE3E,SAAS,cAAc,OAA4B;AACxD,MAAI,MAAM,SAAS,UAAU,MAAM,SAAS,OAAW,QAAO;AAC9D,QAAM,EAAE,IAAI,IAAI;AAChB,MAAI,IAAI,WAAW,QAAQ,IAAI,qBAAqB,KAAM,QAAO;AACjE,QAAM,SAAS,IAAI;AACnB,MACE,OAAO,WAAW,YAClB,WAAW,QACX,UAAU,UACV,OAAO,OAAO,SAAS,UACvB;AACA,QAAI,CAAC,mBAAmB,IAAI,OAAO,IAAI,EAAG,QAAO;AAAA,EACnD,WACE,OAAO,IAAI,eAAe,YAC1B,CAAC,mBAAmB,IAAI,IAAI,UAAU,GACtC;AACA,WAAO;AAAA,EACT;AACA,QAAM,OAAO,MAAM,KAAK,QAAQ,UAAU,EAAE,EAAE,KAAK;AACnD,SAAO,SAAS,MAAM,CAAC,OAAO,KAAK,IAAI;AACzC;AAGO,SAAS,SAAS,OAAyB;AAChD,QAAM,UAAU,MAAM,OAAO,OAAO,CAAC,MAAM,EAAE,cAAc,QAAQ,cAAc,CAAC,CAAC;AACnF,QAAM,mBAAmB,QAAQ;AACjC,QAAM,KAAK,MAAM,OAAO,SAAS;AACjC,QAAM,OAAO,QAAQ,GAAG,EAAE;AAC1B,MAAI,SAAS,QAAW;AACtB,WAAO;AAAA,MACL,QAAQ,YAAY,QAAQ,aAAa,0CAA0C;AAAA,MACnF,MAAM,KAAK;AAAA,MACX;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,MAAM,OAAO,KAAK,OAAO,CAAC,IAAI,GAAG,oBAAI,IAAI,CAAC,MAAS,CAAC,GAAG,kBAAkB;AAAA,IAC9E,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AACH;AAOO,SAAS,aAAa,OAAyB;AACpD,QAAM,UAAU,MAAM,OAAO,OAAO,aAAa;AACjD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,IAAI,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;AAAA,IAC3C,QAAQ;AAAA,IACR,EAAE,OAAO,gBAAgB,QAAQ,gCAAgC;AAAA,EACnE;AACF;AAEA,SAAS,MACP,OACA,MACA,SACA,KACA,kBACA,OACW;AACX,QAAM,KAAK,MAAM,OAAO,SAAS;AACjC,QAAM,SAAS,MAAM,OAAO,KAAK,CAAC,MAAM,EAAE,QAAQ,QAAQ,KAAK,IAAI,EAAE,IAAI,CAAC;AAC1E,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,MACL,QAAQ,YAAY,QAAQ,MAAM,OAAO,MAAM,MAAM;AAAA,MACrD;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,CAAC,EAAE,OAAO,MAAM,KAAK,OAAO,kBAAkB,CAAC;AAAA,IAC/C;AAAA,IACA;AAAA,EACF;AAGA,SAAO,eAAe,QAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;AACrD,SAAO,YAAY;AACnB,SAAO,EAAE,QAAQ,MAAM,IAAI,iBAAiB;AAC9C;;;ACxHA,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,UAAU,SAAS,YAAY,MAAM,UAAU,SAAS,WAAW;AAC5E,OAAO,eAAe;AA4FtB,IAAM,kBAAkB;AAmBxB,IAAM,YAAN,MAAgB;AAAA,EASd,YACW,KACA,MACA,MACT,SACA;AAJS;AACA;AACA;AAGT,UAAM,QAAQ,QAAQ,SAAS,IAAI,UAAU,SAAS,EAAE,KAAK,KAAK,CAAC,IAAI;AACvE,SAAK,WAAW,CAAC,SAAS,UAAU,QAAQ,MAAM,KAAK,QAAQ,IAAI,CAAC;AAEpE,SAAK,eAAe,CAAC,SAAS,QAAQ,SAAS,IAAI;AAAA,EACrD;AAAA,EATW;AAAA,EACA;AAAA,EACA;AAAA,EAXF,UAAwB,CAAC;AAAA,EACzB,WAAqB,CAAC;AAAA,EACd,OAAO,oBAAI,IAAY;AAAA,EACvB,SAAS,oBAAI,IAAsC;AAAA,EACnD;AAAA;AAAA,EAER;AAAA,EAcT,QAAQ,MAAsB;AAC5B,UAAM,SAAS,SAAS,KAAK,MAAM,IAAI;AACvC,QAAI,WAAW,KAAM,QAAO;AAC5B,UAAM,SAAS,SAAS,KAAK,MAAM,IAAI;AACvC,QAAI,WAAW,KAAM,QAAO,KAAK,MAAM;AACvC,WAAO,KAAK,MAAM,GAAG,EAAE,KAAK,GAAG;AAAA,EACjC;AAAA,EAEA,IAAI,MAAuB;AACzB,WAAO,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAAA,EAChC;AAAA;AAAA,EAGA,MAAM,MAAc,SAA2C;AAC7D,UAAM,IAAI,IAAI,IAAI;AAClB,QAAI,KAAK,OAAO,IAAI,CAAC,EAAG,QAAO,KAAK,OAAO,IAAI,CAAC,KAAK;AACrD,QAAI,SAAmC;AACvC,QAAI;AACF,YAAM,KAAK,mBAAmB,SAAS,UAAU;AACjD,eAAS,GAAG,UAAU,KAAK;AAAA,IAC7B,SAAS,KAAK;AACZ,YAAM,QAAQ,aAAa,IAAI,IAAI,YAAY,OAAO,IAAI;AAC1D,UAAI,UAAU,MAAM;AAClB,aAAK,OAAO,IAAI,GAAG,KAAK;AACxB,eAAO;AAAA,MACT;AACA,YAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC,KAAK;AACnF,WAAK,SAAS;AAAA,QACZ,GAAG,KAAK,QAAQ,IAAI,CAAC,kCAAkC,KAAK;AAAA,MAC9D;AAAA,IACF;AACA,SAAK,OAAO,IAAI,GAAG,MAAM;AACzB,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IACE,MACA,SACA,QACA,SACA,OACmB;AACnB,QAAI,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,EAAG,QAAO;AAClD,SAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AACvB,UAAM,SAAqB;AAAA,MACzB;AAAA,MACA,aAAa,KAAK,QAAQ,IAAI;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,WAAW,QAAQ,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AAAA,MACzD,QAAQ;AAAA,IACV;AACA,QAAI,UAAU,OAAW,QAAO,QAAQ;AACxC,UAAM,WAAW,KAAK,SAAS,MAAM,OAAO;AAC5C,QAAI,aAAa,OAAW,QAAO,gBAAgB;AACnD,SAAK,QAAQ,KAAK,MAAM;AACxB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WACE,MACA,SACA,QACA,SACA,SAAS,MACH;AAGN,QAAI,mBAAmB,IAAI,MAAM,KAAK,KAAK,aAAa,MAAM,EAAG;AACjE,QAAI,SAAS,MAAM;AACjB,UAAI,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,EAAG;AAC3C,WAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAAA,IACzB;AACA,SAAK,QAAQ,KAAK;AAAA,MAChB,MAAM,QAAQ;AAAA,MACd,aAAa,SAAS,OAAO,SAAS,KAAK,QAAQ,IAAI;AAAA,MACvD;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,WAAW,QAAQ,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AAAA,MACzD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,SAAS,MAAc,SAA6C;AAC1E,UAAM,KAAK,KAAK,MAAM,MAAM,OAAO;AACnC,QAAI,OAAO,KAAM,QAAO;AACxB,UAAM,YAAY;AAAA,MAChB,EAAE,MAAM,SAAS,IAAI,GAAG,MAAM,iBAAiB,MAAM,SAAS,QAAQ,UAAU;AAAA,MAChF;AAAA,IACF;AACA,QAAI,UAAU,OAAO,SAAS,GAAG;AAC/B,WAAK,SAAS;AAAA,QACZ,GAAG,KAAK,QAAQ,IAAI,CAAC,uCAAuC,UAAU,OAAO,CAAC,GAAG,WAAW,SAAS;AAAA,MACvG;AACA,aAAO;AAAA,IACT;AACA,UAAM,QAAwB,CAAC;AAC/B,eAAW,SAAS,UAAU,OAAO;AACnC,UAAI,MAAM,WAAW,QAAQ,MAAM,cAAc,OAAW;AAC5D,YAAM,OAAqB,EAAE,IAAI,MAAM,IAAI,MAAM,MAAM,UAAU;AACjE,YAAM,OAAO,MAAM,SAAS;AAC5B,UAAI,SAAS,IAAI,EAAG,MAAK,OAAO;AAChC,YAAM,KAAK,IAAI;AAAA,IACjB;AACA,WAAO,MAAM,SAAS,IAAI,QAAQ;AAAA,EACpC;AACF;AAGA,eAAsB,qBAAqB,MAA+C;AACxF,QAAM,IAAI,MAAM,UAAU,IAAI;AAC9B,aAAW,aAAa,MAAM,QAAQ,GAAG,IAAI,GAAG;AAC9C,QAAI,UAAU,QAAQ,SAAS,SAAU,OAAM,eAAe,GAAG,WAAW,QAAQ;AAAA,EACtF;AACA,QAAM,cAAc,GAAG,IAAI;AAC3B,SAAO,EAAE,SAAS,EAAE,SAAS,UAAU,EAAE,SAAS;AACpD;AAGA,eAAsB,mBACpB,OACA,MACA,MAC0B;AAC1B,QAAM,IAAI,MAAM,UAAU,IAAI;AAC9B,QAAM,UAAmB,MAAM,aAC5B,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,EAChC,IAAI,CAAC,MAAM;AACV,UAAM,MAAM,QAAQ,EAAE,KAAK,EAAE,IAAI;AACjC,WAAO,EAAE,KAAK,KAAK,SAAS,EAAE,MAAM,GAAG,GAAG,MAAM,EAAE,OAAO,OAAO;AAAA,EAClE,CAAC;AACH,QAAM,UAAU,IAAI,IAAI,QAAQ,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC;AAE5E,aAAW,aAAa,MAAM,QAAQ,GAAG,IAAI,GAAG;AAC9C,UAAM,EAAE,QAAQ,IAAI;AACpB,QAAI,QAAQ,SAAS,UAAU;AAC7B,YAAM,eAAe,GAAG,WAAW,QAAQ;AAAA,IAC7C,WAAW,QAAQ,SAAS,QAAQ;AAClC,UAAI,QAAQ,IAAI,IAAI,UAAU,IAAI,CAAC,EAAG,OAAM,eAAe,GAAG,WAAW,MAAM;AAAA,IACjF,OAAO;AACL,YAAM,QAAQ,UAAU,QAAQ,UAAU,EAAE,KAAK,KAAK,CAAC;AACvD,YAAM,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,QAAQ,MAAM,EAAE,GAAG,CAAC;AAC9D,UAAI,QAAQ,UAAa,IAAI,QAAQ,MAAM;AACzC,cAAM,eAAe,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,IAAI,GAAG,EAAE;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AAIA,QAAM,SAAS,oBAAI,IAAoB;AACvC,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,QAAQ,KAAM;AACxB,eAAW,OAAO,aAAa,GAAG,QAAQ,MAAM,GAAG,CAAC,GAAG;AACrD,UAAI,CAAC,OAAO,IAAI,GAAG,EAAG,QAAO,IAAI,KAAK,MAAM,GAAG;AAAA,IACjD;AAAA,EACF;AACA,QAAM,OAAO,CAAC,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM;AAClE,aAAW,OAAO,MAAM;AACtB,UAAM,UAAU,OAAO,IAAI,GAAG,KAAK;AACnC,eAAW,CAAC,MAAM,MAAM,KAAK,cAAc;AACzC,YAAM,OAAO,KAAK,KAAK,IAAI;AAC3B,YAAM,UAAU,MAAM,SAAS,IAAI;AACnC,UAAI,YAAY,MAAM;AACpB,cAAM,eAAe,GAAG,EAAE,MAAM,QAAQ,SAAS,EAAE,MAAM,SAAS,EAAE,GAAG,WAAW,OAAO,IAAI,OAAO;AAAA,MACtG;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,GAAG,OAAO,MAAM,SAAS,IAAI;AAE/C,QAAM,cAAc,GAAG,IAAI;AAE3B,aAAW,GAAG,OAAO,IAAI;AACzB,QAAM,QAAQ,GAAG,OAAO,MAAM,IAAI;AAClC,QAAM,SAAS,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC;AAC3C,QAAM,gBAAgB,GAAG,OAAO,MAAM,IAAI;AAC1C,SAAO,EAAE,SAAS,EAAE,SAAS,UAAU,EAAE,SAAS;AACpD;AAKA,IAAM,qBAA8C,oBAAI,IAAgB,CAAC,UAAU,QAAQ,eAAe,CAAC;AAG3G,IAAM,kBAAkB;AASxB,SAAS,eAAe,OAAc,MAAkB,MAAoC;AAC1F,WAAS,IAAI,MAAM,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG;AACpD,UAAM,QAAQ,MAAM,OAAO,CAAC;AAC5B,QAAI,UAAU,UAAa,MAAM,SAAS,UAAU,MAAM,QAAQ,KAAK,GAAI;AAC3E,UAAM,aAAa,MAAM,IAAI;AAC7B,QAAI,MAAM,IAAI,SAAS,gBAAgB,SAAS,UAAU,KAAK,WAAW,SAAS,MAAM;AACvF,aAAO,EAAE,OAAO,MAAM,OAAO,QAAQ,MAAM,KAAK,WAAW;AAAA,IAC7D;AAAA,EACF;AACA,SAAO;AACT;AAQA,eAAe,gBAAgB,GAAc,OAAc,MAAkB,MAAoC;AAC/G,QAAM,QAAQ,aAAa,KAAK,UAAU,CAAC,CAAC;AAC5C,QAAM,QAAQ,eAAe,OAAO,MAAM,2BAA2B,GAAG,WAAW;AACnF,QAAM,YAAY,SAAS,KAAK,KAAK,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AACnF,QAAM,cAAc,SAAS,KAAK,KAAK,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AACzF,MAAI;AACJ,MAAI,cAAc,UAAa,gBAAgB,QAAW;AACxD,UAAM,OAAO,MAAM,cAAc,GAAG,MAAM,SAAS;AACnD,QAAI,SAAS,OAAW,WAAU;AAAA,QAC7B,GAAE,WAAW,MAAM,MAAM,WAAW,GAAG,gBAAgB,SAAS,SAAS,EAAE;AAAA,EAClF;AAEA,QAAM,WAAW,eAAe,OAAO,MAAM,iBAAiB;AAC9D,QAAM,WAAoB,UAAU,WAAW;AAC/C,MAAI,aAAa,UAAa,CAAC,MAAM,QAAQ,QAAQ,EAAG;AACxD,QAAM,SAAS,SAAS,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ;AACxE,QAAM,SAAS,CAAC,OAAO,SAAS,eAAe;AAC/C,QAAM,UAAU,MAAM,CAAC,GAAG,QAAQ,GAAI,YAAY,SAAY,CAAC,OAAO,IAAI,CAAC,CAAE,EAAE,KAAK,MAAM,CAAC;AAC3F,QAAM,EAAE,QAAQ,IAAI,SAAS;AAC7B,QAAM,KAAK,OAAO,YAAY,WAAW,iBAAiB,OAAO,KAAK;AACtE,QAAM,UAAU,oBAAoB,OAAO,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,aAAa,EAAE;AAE1F,IAAE;AAAA,IAAW;AAAA,IAAM;AAAA,IAAS;AAAA,IAAiB;AAAA;AAAA,IAAuB;AAAA,EAAM;AAC5E;AAOA,eAAe,cAAc,GAAc,MAAqB,MAA2C;AAGzG,QAAM,OAAO,CAAC,GAAG,oBAAI,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,GAAG,WAAW,eAAe,CAAC;AACzF,OAAK,KAAK,KAAK,UAAU,KAAK,GAAG,GAAG,eAAe,CAAC;AACpD,aAAW,OAAO,MAAM;AACtB,eAAW,QAAQ,MAAM,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG;AACnF,YAAM,YAAY,MAAM,QAAQ,GAAG,IAAI,IAAI;AAC3C,WAAK,OAAO,aAAa,WAAW,WAAW,SAAS,MAAM,KAAK,OAAO,KAAM,QAAO;AAAA,IACzF;AAAA,EACF;AACA,SAAO;AACT;AAQA,SAAS,WAAW,GAAc,OAAc,MAAwB;AACtE,QAAM,QAAQ,MAAM,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,cAAc,CAAC,CAAC;AAC/E,QAAM,OAAO,MAAM,OAAO,CAAC,MAAM,EAAE,cAAc,IAAI;AACrD,QAAM,UAAU,KAAK,SAAS,IAAI,OAAO;AACzC,MAAI,QAAQ,WAAW,EAAG;AAC1B,QAAM,UAAU,QACb,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,IAAI,KAAK,CAAC,EAAE,EAC1D,KAAK,MAAM;AACd,IAAE,WAAW,MAAM,SAAS,UAAU,mBAAmB,OAAO,QAAQ,MAAM,CAAC,EAAE;AACnF;AAQA,eAAe,QAAQ,GAAc,OAAc,MAAkB,MAAoC;AACvG,QAAM,WAAW,MAAM,UACpB,OAAO,CAAC,SAAS,KAAK,SAAS,kBAAkB,KAAK,SAAS,KAAK,EAAE,EACtE,OAAO,CAAC,SAAS,WAAW,OAAO,KAAK,OAAO,KAAK,EAAE,CAAC,EACvD,GAAG,EAAE;AACR,MAAI,aAAa,OAAW;AAC5B,QAAM,UAAU,oBAAoB,OAAO,SAAS,KAAK,CAAC;AAC1D,QAAM,OAAO,SAAS,MAAM;AAC5B,MAAI,OAAO,SAAS,YAAY,KAAK,KAAK,MAAM,IAAI;AAClD,MAAE,WAAW,MAAM,MAAM,QAAQ,OAAO;AACxC;AAAA,EACF;AACA,QAAM,WAAW,KAAK,UAAU,KAAK,GAAG,GAAG,OAAO;AAClD,QAAM,OAAO,MAAM,aAChB,OAAO,CAAC,MAAM,EAAE,OAAO,UAAU,EAAE,QAAQ,SAAS,KAAK,EACzD,IAAI,CAAC,MAAM,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EACjC,OAAO,CAAC,QAAQ,SAAS,UAAU,GAAG,MAAM,IAAI,EAChD,GAAG,EAAE;AACR,MAAI,SAAS,OAAW;AACxB,QAAM,UAAU,MAAM,SAAS,IAAI;AACnC,MAAI,YAAY,KAAM,GAAE,WAAW,MAAM,SAAS,QAAQ,OAAO;AACnE;AAOA,SAAS,WAAW,OAAc,OAAe,IAAqB;AACpE,QAAM,KAAK,MAAM,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,GAAG,IAAI;AAC5D,MAAI,OAAO,OAAO,SAAU,QAAO;AACnC,aAAW,SAAS,MAAM,QAAQ;AAChC,QAAI,MAAM,SAAS,iBAAiB,MAAM,SAAS,SAAS,MAAM,QAAQ,GAAI;AAC9E,UAAM,UAAU,MAAM,IAAI;AAC1B,UAAM,SAAkB,SAAS,OAAO,IAAI,QAAQ,UAAU;AAC9D,QAAI,CAAC,MAAM,QAAQ,MAAM,EAAG;AAC5B,eAAW,SAAS,QAAqB;AACvC,UAAI,SAAS,KAAK,KAAK,MAAM,SAAS,iBAAiB,MAAM,gBAAgB,IAAI;AAC/E,eAAO,MAAM,aAAa;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,IAAM,aAA6D;AAAA,EACjE,gBAAgB,CAAC,WAAW,WAAW,UAAU;AAAA,EACjD,aAAa,CAAC,mBAAmB,aAAa,UAAU;AAC1D;AAGA,SAAS,UAAU,KAA+F;AAChH,QAAM,QAAQ,IAAI,MAAM,GAAG;AAC3B,QAAM,CAAC,OAAO,QAAQ,KAAK,IAAI;AAC/B,MAAI,UAAU,WAAW,WAAW,UAAa,MAAM,SAAS,GAAG;AACjE,WAAO,EAAE,KAAK,SAAS,MAAM,IAAI,QAAQ,eAAe;AAAA,EAC1D;AACA,MAAI,UAAU,WAAW,WAAW,WAAW,UAAU,UAAa,MAAM,SAAS,GAAG;AACtF,WAAO,EAAE,KAAK,eAAe,KAAK,IAAI,QAAQ,YAAY;AAAA,EAC5D;AAEA,MAAI,UAAU,cAAc,WAAW,aAAa,UAAU,UAAa,UAAU,aAAa,MAAM,SAAS,GAAG;AAClH,WAAO,EAAE,KAAK,oBAAoB,KAAK,IAAI,QAAQ,kBAAkB;AAAA,EACvE;AACA,SAAO;AACT;AAGA,eAAe,SAAS,GAAc,SAAkB,OAAgC;AACtF,QAAM,SAAS,MAAM,SAAS,IAAI,UAAU,OAAO,EAAE,KAAK,KAAK,CAAC,IAAI;AACpE,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,SAAS,SAAS;AAC3B,UAAM,EAAE,IAAI,IAAI;AAChB,QAAI,QAAQ,KAAM;AAClB,UAAM,UAAU,WAAW,GAAG;AAC9B,UAAM,OAAO,UAAU,GAAG;AAC1B,QAAI,SAAS,QAAQ,CAAC,KAAK,IAAI,KAAK,GAAG,GAAG;AACxC,WAAK,IAAI,KAAK,GAAG;AACjB,YAAM,MAAM,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,CAAC;AAC/C,YAAM,QACJ,KAAK,WAAW,oBACZ,MAAM,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,IAC9C,WAAW,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC;AAC3D,iBAAW,QAAQ,OAAO;AACxB,cAAM,UAAU,MAAM,SAAS,IAAI;AACnC,YAAI,YAAY,KAAM,GAAE,WAAW,MAAM,SAAS,KAAK,QAAQ,OAAO;AAAA,MACxE;AAAA,IACF;AACA,QAAI,SAAS,GAAG,MAAM,MAAM;AAC1B,YAAM,UAAU,MAAM,SAAS,MAAM,GAAG;AACxC,UAAI,YAAY,KAAM,GAAE,WAAW,MAAM,KAAK,SAAS,SAAS,OAAO;AAAA,IACzE;AAAA,EACF;AACF;AAOA,eAAe,cAAc,GAAc,MAAoC;AAC7E,QAAM,UAAU,KAAK,WAAW,CAAC;AACjC,MAAI,QAAQ,WAAW,EAAG;AAC1B,QAAM,QAAQ,UAAU,SAAS,EAAE,KAAK,KAAK,CAAC;AAC9C,QAAM,QAAQ,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ;AAC9C,UAAM,MAAM,SAAS,EAAE,MAAM,GAAG;AAChC,WAAO,QAAQ,QAAQ,MAAM,GAAG;AAAA,EAClC,CAAC;AACD,aAAW,OAAO,OAAO;AACvB,QAAI,EAAE,IAAI,GAAG,EAAG;AAChB,UAAM,UAAU,MAAM,SAAS,GAAG;AAClC,QAAI,YAAY,MAAM;AACpB,QAAE,SAAS,KAAK,GAAG,EAAE,QAAQ,GAAG,CAAC,iDAAiD;AAClF;AAAA,IACF;AACA,MAAE,IAAI,KAAK,SAAS,cAAc,QAAQ;AAAA,EAC5C;AACF;AAIA,eAAe,YACb,GACA,OACA,MACA,SACA,MACe;AAIf,QAAM,EAAE,UAAU,IAAI,MAAM;AAAA,IAC1B;AAAA,MACE,GAAG;AAAA,MACH,aACE,KAAK,cAAc,SAAY,CAAC,IAAI,CAAC,EAAE,cAAc,KAAK,WAAW,OAAO,EAAE,CAAC;AAAA,IACnF;AAAA,IACA,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,GAAI,KAAK,MAAM,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,EAAG;AAAA,EACnF;AACA,aAAW,YAAY,WAAW;AAChC,QAAI,SAAS,SAAS,SAAS;AAC7B,QAAE,IAAI,SAAS,MAAM,SAAS,SAAS,SAAS,cAAc;AAC9D;AAAA,IACF;AACA,QAAI,SAAS,SAAS,WAAW,SAAS,SAAS,gBAAiB;AAIpE,UAAM,SAAS,SAAS,OAAO,QAAQ;AACvC,QAAI,CAAC,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,EAAG;AACpD,QAAI,SAAS,SAAS,iBAAiB;AACrC,QAAE,IAAI,SAAS,MAAM,SAAS,SAAS,iBAAiB,sBAAsB;AAC9E;AAAA,IACF;AACA,MAAE,IAAI,SAAS,MAAM,SAAS,SAAS,SAAS,gBAAgB,SAAS,IAAI;AAC7E,UAAM,WAAW,QAAQ,SAAS,IAAI;AACtC,eAAW,SAAS,SAAS;AAC3B,UAAI,CAAC,MAAM,QAAQ,SAAS,UAAU,MAAM,GAAG,MAAM,QAAQ,EAAE,IAAI,MAAM,GAAG,EAAG;AAC/E,YAAM,UAAU,MAAM,SAAS,MAAM,GAAG;AACxC,UAAI,YAAY,MAAM;AACpB,UAAE,IAAI,MAAM,KAAK,SAAS,SAAS,oBAAoB,SAAS,IAAI,IAAI,SAAS,IAAI;AAAA,MACvF;AAAA,IACF;AAAA,EACF;AACF;AAKA,IAAM,iBAAyC;AAAA,EAC7C,CAAC,aAAa,WAAW;AAAA,EACzB,CAAC,mBAAmB,WAAW;AAAA,EAC/B,CAAC,KAAK,WAAW,WAAW,GAAG,WAAW;AAAA,EAC1C,CAAC,aAAa,WAAW;AAAA,EACzB,CAAC,KAAK,WAAW,WAAW,GAAG,WAAW;AAAA,EAC1C,CAAC,aAAa,WAAW;AAC3B;AAGA,IAAM,eAAuC;AAAA,EAC3C,CAAC,aAAa,WAAW;AAAA,EACzB,CAAC,aAAa,WAAW;AAAA,EACzB,CAAC,aAAa,WAAW;AAC3B;AAEA,eAAe,QAAQ,GAAc,MAA2C;AAC9E,QAAM,MAAmB,CAAC;AAC1B,QAAM,aAAa,UAAU,KAAK,GAAG;AACrC,QAAM,SAAkB,EAAE,MAAM,SAAS;AAEzC,MAAI,KAAK,EAAE,MAAM,KAAK,YAAY,WAAW,GAAG,QAAQ,aAAa,SAAS,OAAO,CAAC;AACtF,MAAI,KAAK,EAAE,MAAM,KAAK,EAAE,MAAM,WAAW,WAAW,GAAG,QAAQ,aAAa,SAAS,OAAO,CAAC;AAC7F,aAAW,OAAO,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG;AACpD,eAAW,CAAC,MAAM,MAAM,KAAK,gBAAgB;AAC3C,UAAI,KAAK,EAAE,MAAM,KAAK,KAAK,IAAI,GAAG,QAAQ,SAAS,OAAO,CAAC;AAAA,IAC7D;AAAA,EACF;AAGA,QAAM,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG;AAE1D,aAAW,OAAO,CAAC,KAAK,YAAY,OAAO,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,KAAK,GAAG,WAAW,OAAO,CAAC,CAAC,GAAG;AAC/F,eAAW,QAAQ,MAAM,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,GAAG;AAClE,UAAI,KAAK,EAAE,MAAM,QAAQ,eAAe,SAAS,MAAM,kBAAkB,GAAG,IAAI,EAAE,CAAC;AAAA,IACrF;AAAA,EACF;AAEA,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,KAAK,MAAM,WAAW,OAAO;AACzC,eAAW,QAAQ,MAAM,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,KAAK,EAAE,SAAS,KAAK,CAAC,GAAG;AACxF,YAAM,UAAU,MAAM,cAAc,GAAG,IAAI;AAC3C,UAAI,YAAY,KAAM,KAAI,KAAK,EAAE,MAAM,QAAQ,eAAe,QAAQ,CAAC;AAAA,IACzE;AAAA,EACF;AAEA,aAAW,OAAO,CAAC,KAAK,EAAE,MAAM,SAAS,UAAU,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,KAAK,GAAG,SAAS,UAAU,CAAC,CAAC,GAAG;AACxG,eAAW,QAAQ,MAAM,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG;AACnF,UAAI,KAAK,EAAE,MAAM,QAAQ,iBAAiB,SAAS,MAAM,YAAY,GAAG,IAAI,EAAE,CAAC;AAAA,IACjF;AAAA,EACF;AAEA,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK;AAAA,MACP,MAAM,KAAK,MAAM,YAAY,UAAU,iBAAiB;AAAA,MACxD,QAAQ;AAAA,MACR,SAAS;AAAA,IACX,CAAC;AACD,QAAI,KAAK,EAAE,MAAM,KAAK,MAAM,YAAY,YAAY,GAAG,QAAQ,oBAAoB,SAAS,EAAE,MAAM,OAAO,EAAE,CAAC;AAAA,EAChH;AACA,SAAO;AACT;AAEA,eAAe,QAAQ,GAAc,MAAuD;AAC1F,QAAM,UAAU,MAAM,SAAS,IAAI;AACnC,MAAI,YAAY,KAAM,QAAO;AAC7B,SAAO,EAAE,MAAM,MAAM,OAAO,GAAG,QAAQ;AACzC;AAEA,eAAe,kBAAkB,GAAc,MAAgC;AAC7E,QAAM,WAAW,UAAU,MAAM,QAAQ,GAAG,IAAI,IAAI,KAAK;AACzD,SAAO,SAAS,SAAS,IAAI,EAAE,MAAM,SAAS,KAAK,SAAS,SAAS,IAAI,EAAE,MAAM,SAAS;AAC5F;AAGA,eAAe,cAAc,GAAc,MAAuC;AAChF,QAAM,KAAK,MAAM,QAAQ,GAAG,IAAI;AAChC,MAAI,OAAO,QAAQ,CAAC,KAAK,SAAS,MAAM,EAAG,QAAO;AAClD,MAAI,IAAI,gBAAgB,KAAM,QAAO,EAAE,MAAM,SAAS;AACtD,QAAM,WAAW,SAAS,IAAI,KAAK;AACnC,SAAO,SAAS,SAAS,IAAI,EAAE,MAAM,SAAS,KAAK,SAAS,SAAS,IAAI,EAAE,MAAM,OAAO;AAC1F;AAEA,eAAe,YAAY,GAAc,MAAgC;AACvE,QAAM,KAAK,MAAM,QAAQ,GAAG,IAAI;AAChC,QAAM,YAAY,IAAI;AACtB,MAAI,cAAc,UAAa,cAAc,SAAU,QAAO,EAAE,MAAM,SAAS;AAC/E,MAAI,cAAc,aAAa;AAC7B,UAAM,WAAW,SAAS,IAAI,gBAAgB;AAC9C,QAAI,SAAS,SAAS,EAAG,QAAO,EAAE,MAAM,SAAS,KAAK,oBAAoB,SAAS;AAAA,EACrF;AACA,SAAO,EAAE,MAAM,OAAO;AACxB;AAKA,eAAe,eACb,GACA,WACA,SACA,OACe;AACf,MAAI,EAAE,IAAI,UAAU,IAAI,EAAG;AAC3B,QAAM,UAAU,SAAU,MAAM,SAAS,UAAU,IAAI;AACvD,MAAI,YAAY,KAAM;AACtB,QAAM,QAAQ,EAAE,IAAI,UAAU,MAAM,SAAS,UAAU,QAAQ,OAAO;AACtE,MAAI,UAAU,QAAS,UAAU,WAAW,eAAe,UAAU,WAAW,aAAc;AAC5F;AAAA,EACF;AACA,MAAI,WAAW,CAAC,KAAK;AACrB,WAAS,MAAM,GAAG,OAAO,mBAAmB,SAAS,SAAS,GAAG,OAAO,GAAG;AACzE,UAAM,OAAqB,CAAC;AAC5B,eAAW,YAAY,UAAU;AAC/B,iBAAW,OAAO,UAAU,SAAS,OAAO,GAAG;AAC7C,cAAM,OAAO,IAAI,WAAW,IAAI,IAC5B,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,CAAC,IACzB,QAAQ,QAAQ,SAAS,IAAI,GAAG,GAAG;AACvC,YAAI,EAAE,IAAI,IAAI,EAAG;AACjB,cAAM,OAAO,MAAM,SAAS,IAAI;AAChC,YAAI,SAAS,KAAM;AACnB,cAAM,SAAS,EAAE,IAAI,MAAM,MAAM,UAAU,eAAe,SAAS,WAAW,EAAE;AAChF,YAAI,WAAW,KAAM,MAAK,KAAK,MAAM;AAAA,MACvC;AAAA,IACF;AACA,eAAW;AAAA,EACb;AACF;AAGA,SAAS,UAAU,SAA2B;AAC5C,QAAM,OAAiB,CAAC;AAIxB,MAAI,QAAiD;AACrD,aAAW,QAAQ,QAAQ,MAAM,OAAO,GAAG;AACzC,UAAM,SAAS,oBAAoB,KAAK,IAAI,IAAI,CAAC;AACjD,QAAI,WAAW,QAAW;AACxB,YAAM,OAAO,OAAO,OAAO,CAAC;AAC5B,UAAI,UAAU,MAAM;AAClB,gBAAQ,EAAE,MAAM,QAAQ,OAAO,OAAO;AACtC;AAAA,MACF;AACA,UAAI,SAAS,MAAM,QAAQ,OAAO,UAAU,MAAM,UAAU,KAAK,KAAK,MAAM,QAAQ;AAClF,gBAAQ;AACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,UAAU,KAAM;AACpB,UAAM,QAAQ,KAAK,QAAQ,YAAY,EAAE;AACzC,eAAW,KAAK,MAAM,SAAS,qBAAqB,GAAG;AACrD,YAAM,MAAM,EAAE,CAAC,GAAG,QAAQ,iBAAiB,EAAE;AAC7C,UAAI,IAAK,MAAK,KAAK,GAAG;AAAA,IACxB;AAAA,EACF;AACA,SAAO;AACT;AAIA,eAAe,UAAU,MAAyC;AAChE,QAAM,MAAM,QAAQ,KAAK,UAAU;AACnC,QAAM,OAAO,QAAQ,KAAK,eAAgB,MAAM,YAAY,GAAG,KAAM,GAAG;AACxE,SAAO,IAAI,UAAU,KAAK,MAAM,QAAQ,KAAK,GAAG,GAAG,KAAK,WAAW,CAAC,CAAC;AACvE;AAEA,SAAS,QAAQ,MAA0C,QAAQ,KAAa;AAC9E,QAAM,MAAM,QAAQ,aAAa,UAAW,IAAI,eAAe,IAAI,OAAQ,IAAI;AAC/E,SAAO,QAAQ,OAAO,QAAQ,CAAC;AACjC;AAGA,SAAS,UAAU,KAAa,MAAwB;AACtD,QAAM,OAAiB,CAAC;AACxB,MAAI,UAAU;AACd,WAAS,QAAQ,GAAG,QAAQ,IAAI,SAAS,GAAG;AAC1C,SAAK,KAAK,OAAO;AACjB,QAAI,YAAY,KAAM;AACtB,UAAM,SAAS,QAAQ,OAAO;AAC9B,QAAI,WAAW,QAAS;AACxB,cAAU;AAAA,EACZ;AACA,SAAO;AACT;AAGA,SAAS,aAAa,GAAc,KAAuB;AACzD,QAAM,OAAiB,CAAC;AACxB,MAAI,UAAU;AACd,WAAS,QAAQ,GAAG,QAAQ,IAAI,SAAS,GAAG;AAC1C,QAAI,SAAS,EAAE,MAAM,OAAO,MAAM,QAAQ,SAAS,SAAS,EAAE,GAAG,MAAM,KAAM;AAC7E,SAAK,KAAK,OAAO;AACjB,UAAM,SAAS,QAAQ,OAAO;AAC9B,QAAI,WAAW,QAAS;AACxB,cAAU;AAAA,EACZ;AACA,SAAO;AACT;AAGA,SAAS,aAAa,MAAuB;AAC3C,SAAO,KAAK,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,SAAS,iBAAiB;AAC7D;AAOA,SAAS,YAAY,SAA2C;AAC9D,QAAM,QAAQ,yCAAyC,KAAK,OAAO,IAAI,CAAC;AACxE,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,OAAgC,CAAC;AACvC,aAAW,QAAQ,MAAM,MAAM,OAAO,GAAG;AACvC,UAAM,IAAI,4CAA4C,KAAK,IAAI;AAC/D,UAAM,OAAO,IAAI,CAAC;AAClB,UAAM,QAAQ,IAAI,CAAC,GAAG,KAAK;AAC3B,QAAI,SAAS,UAAa,UAAU,OAAW;AAC/C,SAAK,IAAI,IAAI,SAAS,gBAAgB,UAAU,SAAS;AAAA,EAC3D;AACA,MAAI,OAAO,KAAK,IAAI,EAAE,WAAW,EAAG,QAAO;AAC3C,SAAO,EAAE,MAAM,SAAS,MAAM,QAAQ,YAAY,SAAS,MAAM,OAAU;AAC7E;AAEA,SAAS,SAAS,OAA0B;AAC1C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,OAAO,CAAC,MAAmB,OAAO,MAAM,YAAY,EAAE,KAAK,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAAA,EACvG;AACA,MAAI,OAAO,UAAU,SAAU,QAAO,CAAC;AACvC,QAAM,MAAgB,CAAC;AACvB,MAAI,QAAQ;AACZ,MAAI,UAAU;AACd,aAAW,MAAM,OAAO;AACtB,QAAI,OAAO,IAAK,UAAS;AACzB,QAAI,OAAO,IAAK,SAAQ,KAAK,IAAI,GAAG,QAAQ,CAAC;AAC7C,QAAI,OAAO,OAAO,UAAU,GAAG;AAC7B,UAAI,KAAK,OAAO;AAChB,gBAAU;AAAA,IACZ,OAAO;AACL,iBAAW;AAAA,IACb;AAAA,EACF;AACA,MAAI,KAAK,OAAO;AAChB,SAAO,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,MAAM,EAAE;AACxD;AAGA,SAAS,SAAS,MAAc,MAA6B;AAC3D,QAAM,MAAM,SAAS,MAAM,IAAI;AAC/B,MAAI,QAAQ,GAAI,QAAO;AACvB,MAAI,IAAI,WAAW,IAAI,KAAK,WAAW,GAAG,EAAG,QAAO;AACpD,SAAO,IAAI,MAAM,GAAG,EAAE,KAAK,GAAG;AAChC;AAEA,SAAS,IAAI,MAAsB;AACjC,QAAM,MAAM,QAAQ,IAAI;AACxB,SAAO,QAAQ,aAAa,UAAU,IAAI,YAAY,IAAI;AAC5D;AAGO,IAAM,UAAU;AAEvB,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;","names":[]}
@@ -7,11 +7,11 @@ import {
7
7
  } from "./chunk-CU57HT2E.js";
8
8
  import {
9
9
  metaProvenanceEntries
10
- } from "./chunk-GREQKO6M.js";
10
+ } from "./chunk-AZXCL5WH.js";
11
11
  import {
12
12
  __default4 as __default,
13
13
  extractFrontmatter
14
- } from "./chunk-KCOFEWV5.js";
14
+ } from "./chunk-A36QDIXZ.js";
15
15
 
16
16
  // src/tracevals/capture/manifest.ts
17
17
  import { createHash } from "node:crypto";
@@ -1168,4 +1168,4 @@ export {
1168
1168
  ARTIFACT_EVALS_SCHEMA_ID,
1169
1169
  extractEvals
1170
1170
  };
1171
- //# sourceMappingURL=chunk-APKH2T6E.js.map
1171
+ //# sourceMappingURL=chunk-TKVGEFMH.js.map
@@ -16,7 +16,7 @@ import {
16
16
  spliceEntryField,
17
17
  unifiedDiff,
18
18
  withClaimLines
19
- } from "./chunk-IY7NYNPZ.js";
19
+ } from "./chunk-BP7LGVF3.js";
20
20
  import {
21
21
  CITATIONS_KEY,
22
22
  CITE_SECTION,
@@ -54,10 +54,10 @@ import {
54
54
  stripMarkers,
55
55
  twoManifestsRefusal,
56
56
  urlManifestRefusal
57
- } from "./chunk-QW77LCOU.js";
57
+ } from "./chunk-426TGC2Q.js";
58
58
  import {
59
59
  renderCheckGithub
60
- } from "./chunk-GAJIJKET.js";
60
+ } from "./chunk-UMGAACCP.js";
61
61
  import {
62
62
  refusalLine,
63
63
  removalLine,
@@ -65,7 +65,7 @@ import {
65
65
  renderRemovePretty,
66
66
  renderUpdatePretty,
67
67
  rewriteLine
68
- } from "./chunk-T6SYGLWR.js";
68
+ } from "./chunk-LXFY64QR.js";
69
69
  import {
70
70
  blockMatches,
71
71
  claimEnd,
@@ -94,7 +94,7 @@ import {
94
94
  toValidationResult,
95
95
  unitAt,
96
96
  unitText
97
- } from "./chunk-UAKNZVCD.js";
97
+ } from "./chunk-H3LM7D6K.js";
98
98
  import {
99
99
  renderCheckJson,
100
100
  renderRemoveJson,
@@ -140,11 +140,11 @@ import {
140
140
  spellSource,
141
141
  statementForms,
142
142
  validateEntry
143
- } from "./chunk-MHM4QEBV.js";
143
+ } from "./chunk-BMRZFTAD.js";
144
144
  import {
145
145
  reencryptData,
146
146
  reencryptMetadata
147
- } from "./chunk-TLXE7LYK.js";
147
+ } from "./chunk-22G33NL2.js";
148
148
  import {
149
149
  ENCRYPTION_KEY_ENV,
150
150
  MAX_RANGE_LINES,
@@ -170,7 +170,7 @@ import {
170
170
  toBodyLines,
171
171
  toFileLines,
172
172
  writeEncryptionKey
173
- } from "./chunk-TUAAR3MM.js";
173
+ } from "./chunk-KRSLDZ7N.js";
174
174
  import {
175
175
  LEGACY_CONFIG_NAMES,
176
176
  STDIN_TOKEN,
@@ -181,7 +181,7 @@ import {
181
181
  resolveTargetSet,
182
182
  supportedExtensions,
183
183
  writeFileAtomic
184
- } from "./chunk-KCOFEWV5.js";
184
+ } from "./chunk-A36QDIXZ.js";
185
185
  import {
186
186
  findConfigFile,
187
187
  findFamilyConfigFile,
@@ -931,4 +931,4 @@ export {
931
931
  runKeyRotate,
932
932
  runKeySet
933
933
  };
934
- //# sourceMappingURL=chunk-2JFPBZJK.js.map
934
+ //# sourceMappingURL=chunk-TVKYNKB3.js.map
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  resultFor,
4
4
  splitBaselined
5
- } from "./chunk-T6SYGLWR.js";
5
+ } from "./chunk-LXFY64QR.js";
6
6
  import {
7
7
  errorSite
8
- } from "./chunk-UAKNZVCD.js";
8
+ } from "./chunk-H3LM7D6K.js";
9
9
  import {
10
10
  escapeWorkflowCommandMessage,
11
11
  escapeWorkflowCommandProperty
@@ -51,4 +51,4 @@ export {
51
51
  findingMessage,
52
52
  renderCheckGithub
53
53
  };
54
- //# sourceMappingURL=chunk-GAJIJKET.js.map
54
+ //# sourceMappingURL=chunk-UMGAACCP.js.map
@@ -5,12 +5,12 @@ import {
5
5
  loadTemplateFile,
6
6
  resolveLintRun,
7
7
  resolveStructureTool
8
- } from "./chunk-SWSTHZBI.js";
8
+ } from "./chunk-VCQOUFTZ.js";
9
9
  import {
10
10
  parserByName,
11
11
  parserForExtension,
12
12
  unsupportedFormatMessage
13
- } from "./chunk-73TC4DYH.js";
13
+ } from "./chunk-ALAH6HNY.js";
14
14
  import {
15
15
  BLOCK_KINDS,
16
16
  BLOCK_KIND_NODE
@@ -20,7 +20,7 @@ import {
20
20
  } from "./chunk-YGFIQ6Y5.js";
21
21
  import {
22
22
  writeTextAtomic
23
- } from "./chunk-TUAAR3MM.js";
23
+ } from "./chunk-KRSLDZ7N.js";
24
24
  import {
25
25
  ToolError,
26
26
  errorMessage
@@ -298,4 +298,4 @@ export {
298
298
  BUILT_IN_DEFAULTS,
299
299
  runTools
300
300
  };
301
- //# sourceMappingURL=chunk-MWBJ3KTF.js.map
301
+ //# sourceMappingURL=chunk-UZGSFQLT.js.map
@@ -5,7 +5,7 @@ import {
5
5
  parserForExtension,
6
6
  supportedExtensions,
7
7
  unsupportedFormatMessage
8
- } from "./chunk-73TC4DYH.js";
8
+ } from "./chunk-ALAH6HNY.js";
9
9
  import {
10
10
  packageRoot
11
11
  } from "./chunk-TIUTIOFB.js";
@@ -30,7 +30,7 @@ import {
30
30
  gitignoreOptions,
31
31
  isErrorSeverity,
32
32
  resolveTargetSet
33
- } from "./chunk-KCOFEWV5.js";
33
+ } from "./chunk-A36QDIXZ.js";
34
34
  import {
35
35
  ditaOtHome,
36
36
  findConfigFile,
@@ -42,7 +42,7 @@ import {
42
42
  } from "./chunk-HX44GB4Z.js";
43
43
  import {
44
44
  package_default
45
- } from "./chunk-PCFG7E6B.js";
45
+ } from "./chunk-CGO5MNRD.js";
46
46
  import {
47
47
  ToolError,
48
48
  errorMessage
@@ -2461,4 +2461,4 @@ export {
2461
2461
  STDIN_LABEL,
2462
2462
  runLint
2463
2463
  };
2464
- //# sourceMappingURL=chunk-SWSTHZBI.js.map
2464
+ //# sourceMappingURL=chunk-VCQOUFTZ.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  GB
4
- } from "./chunk-TH4JVQPF.js";
4
+ } from "./chunk-HNMXL2OE.js";
5
5
  import {
6
6
  validateWhen
7
7
  } from "./chunk-FQGLRJGX.js";
@@ -10,7 +10,7 @@ import {
10
10
  constructProvider,
11
11
  resolveSelectionIdentity,
12
12
  selectProvider
13
- } from "./chunk-BWCWTHYS.js";
13
+ } from "./chunk-NGTVREIH.js";
14
14
  import {
15
15
  TracevalsError
16
16
  } from "./chunk-UKZNLVJW.js";
@@ -83,7 +83,7 @@ function mockTurnJudge(model, name = "mock") {
83
83
  };
84
84
  }
85
85
 
86
- // src/tracevals/commands/conformance.ts
86
+ // src/tracevals/commands/runtime.ts
87
87
  import { resolve } from "node:path";
88
88
 
89
89
  // src/tracevals/rules/cache.ts
@@ -371,7 +371,7 @@ async function extractRules(source, deps) {
371
371
  return { ...gated, cached: false };
372
372
  }
373
373
 
374
- // src/tracevals/commands/conformance.ts
374
+ // src/tracevals/commands/runtime.ts
375
375
  var JUDGE_ENV = "MANNI_TRACEVALS_JUDGE";
376
376
  function markJudgeProcess() {
377
377
  process.env[JUDGE_ENV] = "1";
@@ -388,8 +388,8 @@ function offlineRefusal(role, identity) {
388
388
  function firstLine(err) {
389
389
  return errorMessage(err).split("\n")[0] ?? "";
390
390
  }
391
- function conformanceOf(config) {
392
- return config.conformance ?? {
391
+ function runtimeOf(config) {
392
+ return config.runtime ?? {
393
393
  hook: { provider: null, model: null, runs: 1 },
394
394
  include: [],
395
395
  exclude: [],
@@ -493,10 +493,10 @@ export {
493
493
  isNetworkProvider,
494
494
  offlineRefusal,
495
495
  firstLine,
496
- conformanceOf,
496
+ runtimeOf,
497
497
  rulesCacheFor,
498
498
  extraction,
499
499
  localGate,
500
500
  assertDownloaded
501
501
  };
502
- //# sourceMappingURL=chunk-FLAO4ZS3.js.map
502
+ //# sourceMappingURL=chunk-VQK4VHLF.js.map