@hawkeyexl/manni 4.5.0 → 4.6.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 (215) hide show
  1. package/README.md +1 -1
  2. package/dist/batch-OZOACN4G.js +41 -0
  3. package/dist/build-Z5VOVADH.js +32 -0
  4. package/dist/calibrate-TZYT42DR.js +36 -0
  5. package/dist/capture-SL4MNDDP.js +34 -0
  6. package/dist/check-5OMA42Y6.js +26 -0
  7. package/dist/{check-ESNS7ZBC.js → check-OAJWC3WD.js} +7 -5
  8. package/dist/{check-RQIIIURI.js → check-PKY7KTQE.js} +13 -14
  9. package/dist/check-WB2QDHJQ.js +880 -0
  10. package/dist/check-WB2QDHJQ.js.map +1 -0
  11. package/dist/{chunk-F2OVHJNC.js → chunk-2JFPBZJK.js} +11 -11
  12. package/dist/{chunk-CP4ZM43V.js → chunk-2KRB3EG7.js} +2 -2
  13. package/dist/{chunk-QLUMKWQQ.js → chunk-2M6DVNI5.js} +10 -6
  14. package/dist/{chunk-QLUMKWQQ.js.map → chunk-2M6DVNI5.js.map} +1 -1
  15. package/dist/{chunk-HQFVJDEN.js → chunk-3NWX34ZI.js} +19 -19
  16. package/dist/{chunk-TCC737IS.js → chunk-5G53XATW.js} +4 -4
  17. package/dist/{chunk-B7XUEQF3.js → chunk-6KKZXB2O.js} +7 -5
  18. package/dist/{chunk-B7XUEQF3.js.map → chunk-6KKZXB2O.js.map} +1 -1
  19. package/dist/{chunk-SNEHX4VE.js → chunk-733Y2STG.js} +2 -2
  20. package/dist/{chunk-ELZ2IIOF.js → chunk-73TC4DYH.js} +2 -2
  21. package/dist/{chunk-QY3DOZMS.js → chunk-7WRP5FFP.js} +4 -4
  22. package/dist/{chunk-3R5Y3XOL.js → chunk-APKH2T6E.js} +29 -591
  23. package/dist/chunk-APKH2T6E.js.map +1 -0
  24. package/dist/{chunk-FLF6AECQ.js → chunk-B3TS4WRM.js} +17 -15
  25. package/dist/{chunk-FLF6AECQ.js.map → chunk-B3TS4WRM.js.map} +1 -1
  26. package/dist/chunk-BWCWTHYS.js +146 -0
  27. package/dist/chunk-BWCWTHYS.js.map +1 -0
  28. package/dist/{chunk-C6HZ6C5T.js → chunk-C3B2VJNC.js} +2 -2
  29. package/dist/{chunk-NN4ASVTY.js → chunk-C73RSUIC.js} +4 -4
  30. package/dist/chunk-CU57HT2E.js +116 -0
  31. package/dist/chunk-CU57HT2E.js.map +1 -0
  32. package/dist/chunk-CWXZ2MRT.js +222 -0
  33. package/dist/chunk-CWXZ2MRT.js.map +1 -0
  34. package/dist/{chunk-GAZFKZHM.js → chunk-DC5DDJVE.js} +6 -6
  35. package/dist/{chunk-52PDIZKV.js → chunk-ECVQNGTH.js} +3 -3
  36. package/dist/chunk-FLAO4ZS3.js +502 -0
  37. package/dist/chunk-FLAO4ZS3.js.map +1 -0
  38. package/dist/chunk-FQGLRJGX.js +174 -0
  39. package/dist/chunk-FQGLRJGX.js.map +1 -0
  40. package/dist/{chunk-XWFNO5PO.js → chunk-GAJIJKET.js} +3 -3
  41. package/dist/{chunk-QCBICNKC.js → chunk-GREQKO6M.js} +202 -54
  42. package/dist/chunk-GREQKO6M.js.map +1 -0
  43. package/dist/chunk-HX44GB4Z.js +30 -0
  44. package/dist/chunk-HX44GB4Z.js.map +1 -0
  45. package/dist/{chunk-7ZUCEMCY.js → chunk-IY7NYNPZ.js} +9 -11
  46. package/dist/{chunk-7ZUCEMCY.js.map → chunk-IY7NYNPZ.js.map} +1 -1
  47. package/dist/{chunk-527HHQPS.js → chunk-KCOFEWV5.js} +6 -4
  48. package/dist/{chunk-527HHQPS.js.map → chunk-KCOFEWV5.js.map} +1 -1
  49. package/dist/chunk-M2RLHZ4J.js +849 -0
  50. package/dist/chunk-M2RLHZ4J.js.map +1 -0
  51. package/dist/{chunk-K3U5F2QT.js → chunk-M6GSS72T.js} +12 -12
  52. package/dist/{chunk-UK2I3ACY.js → chunk-MHM4QEBV.js} +4 -4
  53. package/dist/{chunk-EL2BZTDL.js → chunk-MOWMCEOJ.js} +13 -11
  54. package/dist/{chunk-EL2BZTDL.js.map → chunk-MOWMCEOJ.js.map} +1 -1
  55. package/dist/{chunk-OIZ3XMKB.js → chunk-MWBJ3KTF.js} +4 -4
  56. package/dist/chunk-N7JSEDSC.js +233 -0
  57. package/dist/chunk-N7JSEDSC.js.map +1 -0
  58. package/dist/{chunk-MZC62HPZ.js → chunk-NBMPHD4I.js} +2 -2
  59. package/dist/{chunk-YA63PVWI.js → chunk-NHHOPZRA.js} +12 -10
  60. package/dist/{chunk-YA63PVWI.js.map → chunk-NHHOPZRA.js.map} +1 -1
  61. package/dist/{chunk-DX32P2DT.js → chunk-NTWW7J76.js} +2 -2
  62. package/dist/{chunk-6XTQDFGP.js → chunk-PCFG7E6B.js} +3 -3
  63. package/dist/{chunk-6XTQDFGP.js.map → chunk-PCFG7E6B.js.map} +1 -1
  64. package/dist/{chunk-SJO2FTPG.js → chunk-PL4UAF4S.js} +73 -1304
  65. package/dist/chunk-PL4UAF4S.js.map +1 -0
  66. package/dist/chunk-QCHVR4ZM.js +286 -0
  67. package/dist/chunk-QCHVR4ZM.js.map +1 -0
  68. package/dist/{chunk-JQU7FHYH.js → chunk-QW77LCOU.js} +10 -10
  69. package/dist/{chunk-IA7BMIPE.js → chunk-SM6NOMJS.js} +2 -2
  70. package/dist/{chunk-DE7JSWXV.js → chunk-SWSTHZBI.js} +8 -6
  71. package/dist/{chunk-DE7JSWXV.js.map → chunk-SWSTHZBI.js.map} +1 -1
  72. package/dist/{chunk-NGK3N6F2.js → chunk-T6SYGLWR.js} +3 -3
  73. package/dist/chunk-TH4JVQPF.js +133 -0
  74. package/dist/chunk-TH4JVQPF.js.map +1 -0
  75. package/dist/{chunk-TVIX653Q.js → chunk-TLXE7LYK.js} +4 -4
  76. package/dist/{chunk-HVFR66GQ.js → chunk-TUAAR3MM.js} +3280 -283
  77. package/dist/chunk-TUAAR3MM.js.map +1 -0
  78. package/dist/{chunk-TA42STP7.js → chunk-UAKNZVCD.js} +4 -4
  79. package/dist/{chunk-C3KI45RF.js → chunk-UJSGS2Y5.js} +4 -4
  80. package/dist/{chunk-ZX43SRZR.js → chunk-UWQ2UVHE.js} +8 -6
  81. package/dist/{chunk-ZX43SRZR.js.map → chunk-UWQ2UVHE.js.map} +1 -1
  82. package/dist/chunk-WQWKYAAK.js +86 -0
  83. package/dist/chunk-WQWKYAAK.js.map +1 -0
  84. package/dist/{chunk-LJ2RDH3F.js → chunk-XG6PVB5S.js} +1 -23
  85. package/dist/chunk-XG6PVB5S.js.map +1 -0
  86. package/dist/{chunk-Q35YIDBV.js → chunk-XKBEHKWO.js} +29 -264
  87. package/dist/chunk-XKBEHKWO.js.map +1 -0
  88. package/dist/chunk-XPEWUK7J.js +532 -0
  89. package/dist/chunk-XPEWUK7J.js.map +1 -0
  90. package/dist/{chunk-BOIF2XGG.js → chunk-XXDXIIQ4.js} +2 -2
  91. package/dist/chunk-YLK2J5YK.js +610 -0
  92. package/dist/chunk-YLK2J5YK.js.map +1 -0
  93. package/dist/{chunk-7OQAU4EA.js → chunk-Z4IZGEM3.js} +16 -12
  94. package/dist/{chunk-7OQAU4EA.js.map → chunk-Z4IZGEM3.js.map} +1 -1
  95. package/dist/{cli-E3H6ZP4I.js → cli-6EWVMEN6.js} +5 -3
  96. package/dist/{cli-E3H6ZP4I.js.map → cli-6EWVMEN6.js.map} +1 -1
  97. package/dist/{cli-MHTYPVOD.js → cli-6H7HVDMQ.js} +113 -20
  98. package/dist/{cli-MHTYPVOD.js.map → cli-6H7HVDMQ.js.map} +1 -1
  99. package/dist/{cli-HUIMNJT6.js → cli-EPVZHAZS.js} +19 -20
  100. package/dist/{cli-HUIMNJT6.js.map → cli-EPVZHAZS.js.map} +1 -1
  101. package/dist/{cli-6PGVHP7Y.js → cli-LUCSGTVI.js} +17 -19
  102. package/dist/{cli-6PGVHP7Y.js.map → cli-LUCSGTVI.js.map} +1 -1
  103. package/dist/{cli-PRZHQ3QB.js → cli-NIG4N3XM.js} +14 -15
  104. package/dist/{cli-PRZHQ3QB.js.map → cli-NIG4N3XM.js.map} +1 -1
  105. package/dist/{cli-TYGOHJOJ.js → cli-PSKNB66T.js} +225 -58
  106. package/dist/cli-PSKNB66T.js.map +1 -0
  107. package/dist/{cli-QKIJOXGW.js → cli-UO4NHIB3.js} +17 -17
  108. package/dist/{cli-AAG3N4NB.js → cli-UQ7A3YA2.js} +17 -18
  109. package/dist/{cli-AAG3N4NB.js.map → cli-UQ7A3YA2.js.map} +1 -1
  110. package/dist/{cli-YW6VWBHX.js → cli-YHYDLQAF.js} +10 -10
  111. package/dist/cli.js +11 -11
  112. package/dist/config-P4HDNTYD.js +26 -0
  113. package/dist/conformance-ZFCMKM6M.js +18 -0
  114. package/dist/docmeta.js +9 -9
  115. package/dist/github-7ZCH5PSO.js +26 -0
  116. package/dist/github-POT6724K.js +31 -0
  117. package/dist/host-6GURH5HE.js +23 -0
  118. package/dist/index.d.ts +72 -4
  119. package/dist/index.js +176 -166
  120. package/dist/index.js.map +1 -1
  121. package/dist/{json-4DCKDGUV.js → json-KT2K62L5.js} +12 -13
  122. package/dist/lint-5AQ5C2BV.js +29 -0
  123. package/dist/list-5JZKX2NK.js +28 -0
  124. package/dist/list-SWPFXQMU.js +30 -0
  125. package/dist/{page-QEDB7EVU.js → page-UPSXRP75.js} +11 -12
  126. package/dist/prepare-6GNEWCNH.js +155 -0
  127. package/dist/prepare-6GNEWCNH.js.map +1 -0
  128. package/dist/{pretty-SQX33UM2.js → pretty-Q6FQAOK4.js} +13 -14
  129. package/dist/{pretty-5DGEBZSV.js → pretty-SQRPFPSQ.js} +12 -13
  130. package/dist/provider-AMGRDY6V.js +34 -0
  131. package/dist/release-IECYCLTD.js +36 -0
  132. package/dist/release-IECYCLTD.js.map +1 -0
  133. package/dist/{reporters-OHSI3RMV.js → reporters-45MMC2ID.js} +11 -12
  134. package/dist/{reporters-YELDDYJD.js → reporters-XUV4MM64.js} +7 -5
  135. package/dist/reporters-XUV4MM64.js.map +1 -0
  136. package/dist/run-KMWY2IAN.js +32 -0
  137. package/dist/run-KMWY2IAN.js.map +1 -0
  138. package/dist/{term-2WMDZ4PY.js → term-PCJUCWNF.js} +16 -17
  139. package/dist/{term-2WMDZ4PY.js.map → term-PCJUCWNF.js.map} +1 -1
  140. package/dist/validate-IMNCZNWG.js +17 -0
  141. package/dist/validate-IMNCZNWG.js.map +1 -0
  142. package/package.json +2 -2
  143. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  144. package/plugin/manni/hooks/hooks.json +47 -0
  145. package/dist/batch-GOE3UXOD.js +0 -36
  146. package/dist/build-M7BMEHL2.js +0 -33
  147. package/dist/calibrate-6RRAILUY.js +0 -31
  148. package/dist/capture-RJPQ6B4N.js +0 -32
  149. package/dist/check-BQD64X3N.js +0 -27
  150. package/dist/chunk-3R5Y3XOL.js.map +0 -1
  151. package/dist/chunk-3YHAYXBC.js +0 -164
  152. package/dist/chunk-3YHAYXBC.js.map +0 -1
  153. package/dist/chunk-HVFR66GQ.js.map +0 -1
  154. package/dist/chunk-LJ2RDH3F.js.map +0 -1
  155. package/dist/chunk-NAZRLJAK.js +0 -3090
  156. package/dist/chunk-NAZRLJAK.js.map +0 -1
  157. package/dist/chunk-Q35YIDBV.js.map +0 -1
  158. package/dist/chunk-QCBICNKC.js.map +0 -1
  159. package/dist/chunk-SJO2FTPG.js.map +0 -1
  160. package/dist/chunk-TU2WUBVZ.js +0 -2
  161. package/dist/cli-TYGOHJOJ.js.map +0 -1
  162. package/dist/github-3WMSTNTK.js +0 -32
  163. package/dist/github-OXSJQ4PS.js +0 -27
  164. package/dist/lint-YDHVVZHT.js +0 -30
  165. package/dist/list-3ZO2NIYO.js +0 -31
  166. package/dist/list-EJH6VAOW.js +0 -29
  167. package/dist/run-IP6NZHAG.js +0 -33
  168. package/dist/validate-G6HH3YXL.js +0 -16
  169. /package/dist/{batch-GOE3UXOD.js.map → batch-OZOACN4G.js.map} +0 -0
  170. /package/dist/{build-M7BMEHL2.js.map → build-Z5VOVADH.js.map} +0 -0
  171. /package/dist/{calibrate-6RRAILUY.js.map → calibrate-TZYT42DR.js.map} +0 -0
  172. /package/dist/{capture-RJPQ6B4N.js.map → capture-SL4MNDDP.js.map} +0 -0
  173. /package/dist/{check-BQD64X3N.js.map → check-5OMA42Y6.js.map} +0 -0
  174. /package/dist/{check-ESNS7ZBC.js.map → check-OAJWC3WD.js.map} +0 -0
  175. /package/dist/{check-RQIIIURI.js.map → check-PKY7KTQE.js.map} +0 -0
  176. /package/dist/{chunk-F2OVHJNC.js.map → chunk-2JFPBZJK.js.map} +0 -0
  177. /package/dist/{chunk-CP4ZM43V.js.map → chunk-2KRB3EG7.js.map} +0 -0
  178. /package/dist/{chunk-HQFVJDEN.js.map → chunk-3NWX34ZI.js.map} +0 -0
  179. /package/dist/{chunk-TCC737IS.js.map → chunk-5G53XATW.js.map} +0 -0
  180. /package/dist/{chunk-SNEHX4VE.js.map → chunk-733Y2STG.js.map} +0 -0
  181. /package/dist/{chunk-ELZ2IIOF.js.map → chunk-73TC4DYH.js.map} +0 -0
  182. /package/dist/{chunk-QY3DOZMS.js.map → chunk-7WRP5FFP.js.map} +0 -0
  183. /package/dist/{chunk-C6HZ6C5T.js.map → chunk-C3B2VJNC.js.map} +0 -0
  184. /package/dist/{chunk-NN4ASVTY.js.map → chunk-C73RSUIC.js.map} +0 -0
  185. /package/dist/{chunk-GAZFKZHM.js.map → chunk-DC5DDJVE.js.map} +0 -0
  186. /package/dist/{chunk-52PDIZKV.js.map → chunk-ECVQNGTH.js.map} +0 -0
  187. /package/dist/{chunk-XWFNO5PO.js.map → chunk-GAJIJKET.js.map} +0 -0
  188. /package/dist/{chunk-K3U5F2QT.js.map → chunk-M6GSS72T.js.map} +0 -0
  189. /package/dist/{chunk-UK2I3ACY.js.map → chunk-MHM4QEBV.js.map} +0 -0
  190. /package/dist/{chunk-OIZ3XMKB.js.map → chunk-MWBJ3KTF.js.map} +0 -0
  191. /package/dist/{chunk-MZC62HPZ.js.map → chunk-NBMPHD4I.js.map} +0 -0
  192. /package/dist/{chunk-DX32P2DT.js.map → chunk-NTWW7J76.js.map} +0 -0
  193. /package/dist/{chunk-JQU7FHYH.js.map → chunk-QW77LCOU.js.map} +0 -0
  194. /package/dist/{chunk-IA7BMIPE.js.map → chunk-SM6NOMJS.js.map} +0 -0
  195. /package/dist/{chunk-NGK3N6F2.js.map → chunk-T6SYGLWR.js.map} +0 -0
  196. /package/dist/{chunk-TVIX653Q.js.map → chunk-TLXE7LYK.js.map} +0 -0
  197. /package/dist/{chunk-TA42STP7.js.map → chunk-UAKNZVCD.js.map} +0 -0
  198. /package/dist/{chunk-C3KI45RF.js.map → chunk-UJSGS2Y5.js.map} +0 -0
  199. /package/dist/{chunk-BOIF2XGG.js.map → chunk-XXDXIIQ4.js.map} +0 -0
  200. /package/dist/{cli-QKIJOXGW.js.map → cli-UO4NHIB3.js.map} +0 -0
  201. /package/dist/{chunk-TU2WUBVZ.js.map → cli-YHYDLQAF.js.map} +0 -0
  202. /package/dist/{cli-YW6VWBHX.js.map → config-P4HDNTYD.js.map} +0 -0
  203. /package/dist/{github-3WMSTNTK.js.map → conformance-ZFCMKM6M.js.map} +0 -0
  204. /package/dist/{github-OXSJQ4PS.js.map → github-7ZCH5PSO.js.map} +0 -0
  205. /package/dist/{json-4DCKDGUV.js.map → github-POT6724K.js.map} +0 -0
  206. /package/dist/{lint-YDHVVZHT.js.map → host-6GURH5HE.js.map} +0 -0
  207. /package/dist/{list-3ZO2NIYO.js.map → json-KT2K62L5.js.map} +0 -0
  208. /package/dist/{list-EJH6VAOW.js.map → lint-5AQ5C2BV.js.map} +0 -0
  209. /package/dist/{page-QEDB7EVU.js.map → list-5JZKX2NK.js.map} +0 -0
  210. /package/dist/{pretty-5DGEBZSV.js.map → list-SWPFXQMU.js.map} +0 -0
  211. /package/dist/{pretty-SQX33UM2.js.map → page-UPSXRP75.js.map} +0 -0
  212. /package/dist/{reporters-OHSI3RMV.js.map → pretty-Q6FQAOK4.js.map} +0 -0
  213. /package/dist/{reporters-YELDDYJD.js.map → pretty-SQRPFPSQ.js.map} +0 -0
  214. /package/dist/{run-IP6NZHAG.js.map → provider-AMGRDY6V.js.map} +0 -0
  215. /package/dist/{validate-G6HH3YXL.js.map → reporters-45MMC2ID.js.map} +0 -0
@@ -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 `conformance.plans` names. None is known\n * at session start, so only a turn resolves them, and none declares evals.\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 { 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\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 and a plan given only as input. */\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}\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 /** `conformance.include`: globs, relative to the project root, in scope once read. */\n include?: string[];\n /** `conformance.exclude`: globs never treated as sources, in any row. */\n exclude?: string[];\n /** `conformance.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\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 }\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 };\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. These never declare\n * evals. With no file, its display path is its format, and no glob removes it.\n */\n addRequest(file: string | null, content: string, format: RuleFormat, trigger: string): void {\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 });\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 return { sources: c.sources, warnings: c.warnings };\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 `conformance.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 conformance.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":"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","names":[]}
@@ -2,9 +2,8 @@
2
2
  import {
3
3
  isTurnBudgetSkip,
4
4
  outputTail,
5
- parseDuration,
6
5
  realExec
7
- } from "./chunk-LJ2RDH3F.js";
6
+ } from "./chunk-XG6PVB5S.js";
8
7
  import {
9
8
  EXECUTION_GRANTS,
10
9
  NOT_GRANTED_REASON,
@@ -18,33 +17,38 @@ import {
18
17
  } from "./chunk-SE4JN5XN.js";
19
18
  import {
20
19
  declaredAt
21
- } from "./chunk-TVIX653Q.js";
20
+ } from "./chunk-TLXE7LYK.js";
22
21
  import {
23
22
  metaProvenanceEntries
24
- } from "./chunk-3YHAYXBC.js";
23
+ } from "./chunk-GREQKO6M.js";
25
24
  import {
26
25
  familyMarks,
27
26
  loadExternalMetadata,
28
27
  memberOf,
29
28
  mergeWithMarks,
30
29
  provenanceEntries
31
- } from "./chunk-HVFR66GQ.js";
30
+ } from "./chunk-TUAAR3MM.js";
32
31
  import {
33
32
  __default,
34
33
  classifyRef,
35
34
  extractFrontmatter
36
- } from "./chunk-527HHQPS.js";
35
+ } from "./chunk-KCOFEWV5.js";
37
36
  import {
38
- PROVIDERS_KEY,
39
- assertKnownProvider,
40
37
  findConfigFileSync,
41
38
  ownsKey,
42
39
  parseCollections,
43
- parseProviders,
44
40
  readConfigFileSync,
45
- selectCollections,
41
+ selectCollections
42
+ } from "./chunk-XKBEHKWO.js";
43
+ import {
46
44
  warn
47
- } from "./chunk-Q35YIDBV.js";
45
+ } from "./chunk-HX44GB4Z.js";
46
+ import {
47
+ PROVIDERS_KEY,
48
+ assertKnownProvider,
49
+ parseDuration,
50
+ parseProviders
51
+ } from "./chunk-QCHVR4ZM.js";
48
52
  import {
49
53
  errorMessage
50
54
  } from "./chunk-G3T47CFV.js";
@@ -2954,4 +2958,4 @@ export {
2954
2958
  applySelection,
2955
2959
  runEvals
2956
2960
  };
2957
- //# sourceMappingURL=chunk-7OQAU4EA.js.map
2961
+ //# sourceMappingURL=chunk-Z4IZGEM3.js.map