@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tracevals/rules/mock.ts","../src/tracevals/commands/runtime.ts","../src/tracevals/rules/cache.ts","../src/tracevals/rules/prompt.ts","../src/tracevals/rules/requests-prompt.ts","../src/tracevals/rules/extract.ts"],"sourcesContent":["/**\n * A deterministic, schema-valid extraction for `--provider mock`.\n *\n * It reads the file the way the real prompt asks a model to, crudely: a bullet\n * that opens with an imperative verb is a rule, everything else is not. That\n * gives offline tests and the CI dogfood path rules they can predict from the\n * fixture alone.\n */\nimport type { InferenceProvider } from \"@hawkeyexl/inference\";\n\nconst IMPERATIVE =\n /^(?:run|use|never|always|do|don't|keep|write|read|prefer|add|avoid|ask|check|make|follow|commit|test|update|stop|ensure)\\b/i;\n\nfunction kebab(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .split(\"-\")\n .filter((w) => w !== \"\")\n .slice(0, 5)\n .join(\"-\");\n}\n\nexport function mockRulesResponse(content: string): {\n json: { rules: { id: string; text: string }[] };\n} {\n const rules: { id: string; text: string }[] = [];\n for (const line of content.split(/\\r?\\n/)) {\n const bullet = /^\\s*[-*]\\s+(.+)$/.exec(line);\n const text = bullet?.[1]?.trim();\n if (text === undefined || !IMPERATIVE.test(text)) continue;\n const id = kebab(text);\n if (id !== \"\") rules.push({ id, text });\n }\n return { json: { rules } };\n}\n\nconst ITEM = /^\\s*(?:[-*]|\\d+\\.)\\s+(?:\\[[ xX]\\]\\s+)?(.+)$/;\nconst SPEC_ITEM = /^(?:\\*\\*)?([A-Z]+-\\d+|T\\d+|\\d+(?:\\.\\d+)+)(?:\\*\\*)?:?\\s+(.+)$/;\n\n/**\n * The same crude reading for a source that says what the session was asked.\n * A bullet, a numbered prompt or a task checkbox is an item. One that opens\n * with a spec's own id (`FR-001`, `T014`, `1.2`) keeps that id, and any other\n * is a rule only when it opens with an imperative verb.\n */\nexport function mockRequestsResponse(content: string): {\n json: { rules: { id: string; text: string }[] };\n} {\n const rules: { id: string; text: string }[] = [];\n for (const line of content.split(/\\r?\\n/)) {\n const item = ITEM.exec(line)?.[1]?.trim();\n if (item === undefined) continue;\n const spec = SPEC_ITEM.exec(item);\n const specId = spec?.[1];\n const specText = spec?.[2]?.trim();\n if (specId !== undefined && specText !== undefined) {\n rules.push({ id: specId, text: specText });\n } else if (IMPERATIVE.test(item)) {\n const id = kebab(item);\n if (id !== \"\") rules.push({ id, text: item });\n }\n }\n return { json: { rules } };\n}\n\nconst PROHIBITION =/^(?:never|don't|do not|avoid)\\b/i;\n\n/**\n * A deterministic turn answer for `--provider mock`, read from the rule's\n * first code span as crudely as `mockRulesResponse` reads a file. A\n * prohibition is not followed when the turn shows its span, and followed\n * otherwise. Any other rule is followed when the turn shows its span. When it\n * does not, every score is 0, which the block bar sends to review. A rule with\n * no code span is followed. The reasoning says which it found.\n */\nexport function mockTurnScores(user: string): Record<string, string | number> {\n const marker = user.lastIndexOf(\"# The rule\\n\\n\");\n // The turn alone: what earlier turns did is not this turn's evidence.\n const turn = user.slice(Math.max(0, user.indexOf(\"# The turn\\n\\n\")), marker);\n const line = user.slice(marker).split(\"\\n\")[2] ?? \"\";\n const text = line.slice(line.indexOf(\": \") + 2);\n const span = /`([^`]+)`/.exec(text)?.[1];\n const answer = (reasoning: string, followed: number, notFollowed: number) => ({\n reasoning,\n \"not-applicable\": 0,\n followed,\n \"not-followed\": notFollowed,\n });\n if (span === undefined) return answer(\"The rule names nothing to look for.\", 100, 0);\n const shown = turn.includes(span);\n const reasoning = shown ? `The turn shows \\`${span}\\`.` : `The turn does not show \\`${span}\\`.`;\n if (PROHIBITION.test(text.trim())) return shown ? answer(reasoning, 0, 100) : answer(reasoning, 100, 0);\n return shown ? answer(reasoning, 100, 0) : answer(reasoning, 0, 0);\n}\n\n/** The turn judge under `--provider mock`: answers from `mockTurnScores`. */\nexport function mockTurnJudge(model: string, name = \"mock\"): InferenceProvider {\n return {\n provider: () => name,\n modelName: () => model,\n completeJSON: (req) => Promise.resolve({ json: mockTurnScores(req.user) }),\n };\n}\n","/**\n * What `prepare` and `check` share (proposal 0079): the two model roles,\n * extraction through the rules cache, and the local-model gates. Free of CLI\n * and IO plumbing, like every command core.\n */\nimport { resolve } from \"node:path\";\nimport type { InferenceProvider, ProviderName } from \"@hawkeyexl/inference\";\nimport { errorMessage } from \"../../shared/errors.js\";\nimport type { TracevalsConfig } from \"../core/config.js\";\nimport {\n assertProviderSelection,\n constructProvider,\n resolveSelectionIdentity,\n selectProvider,\n} from \"../judge/provider.js\";\nimport { RulesCache, rulesCacheKey } from \"../rules/cache.js\";\nimport type { HostSetting } from \"../rules/host.js\";\nimport { extractRules, promptFor, type Rule } from \"../rules/extract.js\";\nimport { GB, type LocalModels } from \"../rules/local.js\";\nimport { mockRequestsResponse, mockRulesResponse } from \"../rules/mock.js\";\nimport type { RuleSource } from \"../rules/sources.js\";\nimport { TracevalsError } from \"../types.js\";\n\nexport interface Identity {\n provider: ProviderName;\n model: string;\n}\n\n/**\n * Set on this process before any provider is built, so a judge it spawns\n * (`claude-cli`) runs its own hooks under gate 2 and never judges itself.\n */\nexport const JUDGE_ENV = \"MANNI_TRACEVALS_JUDGE\";\n\nexport function markJudgeProcess(): void {\n process.env[JUDGE_ENV] = \"1\";\n}\n\n/** Providers that never leave the machine, which `--offline` admits. */\nconst LOCAL_PROVIDERS: ReadonlySet<string> = new Set([\"llama-cpp\", \"mock\"]);\n\nexport function isNetworkProvider(provider: string): boolean {\n return !LOCAL_PROVIDERS.has(provider);\n}\n\n/** `--offline` met a role whose provider would leave the machine. */\nexport function offlineRefusal(role: string, identity: Identity): TracevalsError {\n return new TracevalsError(\n `--offline runs no network provider, and ${role} uses ${identity.provider}`,\n );\n}\n\n/** The first line of an error, as every message quoting one shows it. */\nexport function firstLine(err: unknown): string {\n return errorMessage(err).split(\"\\n\")[0] ?? \"\";\n}\n\n/** Defaults filled for a run by hand, where the section may be absent. */\nexport function runtimeOf(config: TracevalsConfig): NonNullable<TracevalsConfig[\"runtime\"]> {\n return (\n config.runtime ?? {\n hook: { provider: null, model: null, runs: 1 },\n include: [],\n exclude: [],\n plans: [],\n }\n );\n}\n\n/** The rules cache, beside the judge's, resolved as `run` resolves it. */\nexport function rulesCacheFor(\n config: TracevalsConfig,\n configDir: string,\n noCache: boolean,\n): RulesCache {\n return new RulesCache(resolve(configDir, config.judge.cacheDir, \"rules\"), !noCache);\n}\n\nexport interface Extraction {\n identity: Identity;\n cache: RulesCache;\n /** Whether a source still needs the model: not declared, not cached. */\n needs(source: RuleSource): boolean;\n /** A source's rules, declared or extracted. */\n rulesOf(source: RuleSource): Promise<{ rules: Rule[]; origin: \"declared\" | \"extracted\" }>;\n}\n\n/**\n * The out-of-loop model as extraction uses it: `tracevals.provider`/`model`,\n * then the family's `providers:`, then `auto`. No flag reaches it, so\n * `prepare`, the hook and `check` share one cache. jev is refused, because\n * extraction generates.\n *\n * The provider is built on the first uncached source, so a fully cached run\n * needs no API key. Under `mock` each source gets a scripted reading of its\n * own text.\n */\nexport async function extraction(\n config: TracevalsConfig,\n cache: RulesCache,\n injected?: InferenceProvider,\n host?: HostSetting,\n): Promise<Extraction> {\n let identity: Identity;\n if (injected !== undefined) {\n identity = { provider: injected.provider() as ProviderName, model: injected.modelName() };\n } else {\n const selection = selectProvider(config);\n assertProviderSelection(selection);\n identity = await resolveSelectionIdentity(config, selection);\n }\n let built: InferenceProvider | undefined = injected;\n const providerFor = (source: RuleSource): InferenceProvider => {\n // Under `mock` each source gets a scripted reading of its own text, so a\n // provider is built per source and never kept.\n if (built === undefined && identity.provider === \"mock\") {\n markJudgeProcess();\n const scripted =\n promptFor(source.format) === \"requests\"\n ? mockRequestsResponse(source.content)\n : mockRulesResponse(source.content);\n return constructProvider(config, identity, { mockResponses: [scripted] });\n }\n // Every other provider is built once, on the first uncached source.\n if (built === undefined) {\n markJudgeProcess();\n built = constructProvider(config, identity, host === undefined ? {} : { host });\n }\n return built;\n };\n const keyOf = (source: RuleSource): string =>\n rulesCacheKey({\n provider: identity.provider,\n model: identity.model,\n prompt: promptFor(source.format),\n temperature: config.judge.temperature,\n sha256: source.sha256,\n });\n return {\n identity,\n cache,\n needs: (source) =>\n source.declaredRules === undefined && cache.get(keyOf(source)) === undefined,\n rulesOf: async (source) => {\n if (source.declaredRules !== undefined) {\n return { rules: source.declaredRules, origin: \"declared\" };\n }\n const hit = cache.get(keyOf(source));\n if (hit !== undefined) return { rules: hit, origin: \"extracted\" };\n try {\n const extracted = await extractRules(\n {\n path: source.displayPath,\n format: source.format,\n content: source.content,\n sha256: source.sha256,\n },\n { provider: providerFor(source), cache, temperature: config.judge.temperature },\n );\n return { rules: extracted.rules, origin: \"extracted\" };\n } catch (err) {\n if (err instanceof TracevalsError) throw err;\n throw new TracevalsError(\n `could not extract rules from ${source.displayPath}: ${firstLine(err)}`,\n );\n }\n },\n };\n}\n\nexport type LocalGate = \"downloading\" | \"not-downloaded\" | \"memory\";\n\nexport interface GateSkip<G extends string = string> {\n gate: G;\n message: string;\n}\n\nconst wholeGb = (bytes: number): number => Math.round(bytes / GB);\n\n/**\n * Gates 5, 7 and 8 for one local model, in that order, each asked only when\n * listed. Nothing here loads or fetches a model: a runtime that is absent is\n * gate 7, and the memory probe is asked only once the runtime is there.\n *\n * The probe forks a worker and initializes the GPU to read free memory, which\n * costs most of a second. `memoryUnneeded` is asked first and, when it says so,\n * the probe is not run: memory only matters to a model about to be loaded.\n */\nexport async function localGate(\n local: LocalModels,\n model: string,\n gates: readonly LocalGate[],\n memoryUnneeded?: () => boolean | Promise<boolean>,\n): Promise<GateSkip<LocalGate> | undefined> {\n const state = await local.state(model);\n if (gates.includes(\"downloading\") && state === \"downloading\") {\n return { gate: \"downloading\", message: `tracevals skipped this turn: ${model} is still downloading.` };\n }\n if (gates.includes(\"not-downloaded\") && (state !== \"ready\" || !(await local.runtimePresent()))) {\n return {\n gate: \"not-downloaded\",\n message: `tracevals skipped this turn: ${model} is not downloaded yet. Run manni tracevals prepare to fetch it.`,\n };\n }\n if (gates.includes(\"memory\") && !(await memoryUnneeded?.())) {\n const fit = await local.fits(model);\n if (!fit.fits) {\n return {\n gate: \"memory\",\n message: `tracevals skipped this turn: ${model} needs about ${String(wholeGb(fit.needBytes))} GB and ${String(wholeGb(fit.freeBytes))} GB is free.`,\n };\n }\n }\n return undefined;\n}\n\n/** By hand a missing local model is an error, and nothing downloads. */\nexport async function assertDownloaded(local: LocalModels, model: string): Promise<void> {\n if ((await local.state(model)) === \"ready\" && (await local.runtimePresent())) return;\n throw new TracevalsError(`${model} is not downloaded; run manni tracevals prepare`);\n}\n","/**\n * Extracted-rules cache: content-addressed JSON holding the *gated* rules for\n * one rule-source file (proposal 0079, \"Extraction and its cache\").\n *\n * The key is the provider, the model, the prompt and its version, and the\n * sha256 of the whole file. The rules prompt and the requirements prompt read\n * one content differently, so each has entries of its own (proposal 0080).\n * The path is deliberately absent: identical content anywhere shares one\n * entry, so a vendored or copied rules file pays once.\n *\n * Reads go through the inference library's `JsonCache`. Writes do not: the\n * library writes in place, so a reader racing a writer could see half an\n * entry. A hook and a `check` run can overlap, so each entry is written to a\n * temporary file and renamed into place.\n */\nimport { mkdirSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { JsonCache, buildCacheKey } from \"@hawkeyexl/inference\";\nimport { warn } from \"../../shared/warn.js\";\nimport type { Rule } from \"./extract.js\";\nimport { RULES_PROMPT_VERSION } from \"./prompt.js\";\nimport { REQUIREMENTS_PROMPT_VERSION } from \"./requests-prompt.js\";\n\n/** Default location, under the tool's per-project cache directory. */\nexport const DEFAULT_RULES_CACHE_DIR = \".manni/tracevals/cache/rules\";\n\nexport interface RulesCacheKeyParts {\n provider: string;\n model: string;\n /** Which extraction prompt read the file. */\n prompt: \"rules\" | \"requests\";\n /** The extraction temperature, `judge.temperature`: another reading of one file. */\n temperature: number;\n /** sha256 of the whole source file. */\n sha256: string;\n}\n\nexport function rulesCacheKey(parts: RulesCacheKeyParts): string {\n return buildCacheKey([\n parts.provider,\n parts.model,\n // The rules prompt keeps the slot's old spelling, so rule files keep\n // their entries.\n parts.prompt === \"rules\"\n ? `rules-v${String(RULES_PROMPT_VERSION)}`\n : `requests-v${String(REQUIREMENTS_PROMPT_VERSION)}`,\n `t${String(parts.temperature)}`,\n parts.sha256,\n ]);\n}\n\nfunction isRule(value: unknown): value is Rule {\n if (typeof value !== \"object\" || value === null) return false;\n const r = value as Record<string, unknown>;\n return (\n typeof r.id === \"string\" &&\n typeof r.text === \"string\" &&\n (r.when === undefined ||\n (typeof r.when === \"object\" && r.when !== null && !Array.isArray(r.when)))\n );\n}\n\nexport class RulesCache {\n private readonly store: JsonCache<unknown>;\n private warned = false;\n\n constructor(\n private readonly dir: string = DEFAULT_RULES_CACHE_DIR,\n private readonly enabled: boolean = true,\n ) {\n this.store = new JsonCache<unknown>(dir, enabled, \"manni-tracevals\");\n }\n\n /** An entry that is not a list of rules, from an older shape, is a miss. */\n get(key: string): Rule[] | undefined {\n const value = this.store.get(key);\n if (!Array.isArray(value) || !value.every(isRule)) return undefined;\n return value;\n }\n\n set(key: string, rules: Rule[]): void {\n if (!this.enabled) return;\n const tmp = join(this.dir, `${key}.${process.pid}.${Date.now()}.tmp`);\n try {\n mkdirSync(this.dir, { recursive: true });\n writeFileSync(tmp, JSON.stringify(rules, null, 2));\n renameSync(tmp, join(this.dir, `${key}.json`));\n } catch (err) {\n rmSync(tmp, { force: true });\n if (!this.warned) {\n this.warned = true;\n warn(\n `could not write the rules cache at ${this.dir} (${err instanceof Error ? err.message : String(err)}). Continuing without caching.`,\n );\n }\n }\n }\n}\n","/**\n * Rule extraction prompt: asks the provider to read ONE rule-source file and\n * return only the directives a session transcript could show followed or\n * broken (proposal 0079, \"Only files that govern an agent\").\n *\n * The whole file goes in, uncapped. A cache keyed on slices would rarely hit,\n * and a partial read would let the agent off for sentences it never saw.\n */\nimport { Ajv2020 } from \"ajv/dist/2020.js\";\n\n/**\n * Part of the cache key: bump whenever the prompt or schema changes.\n *\n * A prompt edit that leaves this alone makes every cached extraction replay the\n * *old* prompt's output, silently, for as long as the cache lives.\n * `test/tracevals/unit/rules-prompt.test.ts` pins this to a digest of the\n * prompt surface so the pair has to move together.\n */\nexport const RULES_PROMPT_VERSION = 2;\n\n/** The `when` field and its conditions, which the requirements prompt shares. */\nexport const WHEN_GUIDE: readonly string[] = [\n \"- `when` (optional): a trigger saying which turns the rule concerns. Every\",\n \" listed condition must hold. The only conditions are:\",\n \" - `file-access`: a glob. The turn read, wrote or edited a matching file.\",\n \" - `tool-used`: a tool name. The turn called that tool.\",\n \" - `prompt-matches`: a regular expression. A prompt the user typed matches.\",\n \" - `turn-count-above`: a whole number. The session has more turns than that.\",\n \" - `command-matches`: a regular expression. A Bash command in the turn matches.\",\n \"\",\n \"Omit `when` unless the rule clearly concerns only certain files, tools or\",\n \"commands. A trigger that is too narrow hides violations, and a rule with no\",\n \"`when` is simply checked on every turn. When in doubt, leave it out.\",\n];\n\nexport const RULES_SYSTEM_PROMPT = [\n \"You extract rules from a file that governs an AI agent working in a repository.\",\n \"\",\n \"A rule is a directive addressed to the AI agent, which a recorded session\",\n \"transcript could show it following or breaking. The transcript holds the\",\n \"agent's prompts, its tool calls (with their inputs), the files it read or\",\n \"wrote, and its replies. Nothing else is observable.\",\n \"\",\n \"Return a rule only when the file tells the agent to do, or not to do,\",\n \"something. Return nothing for:\",\n \"- descriptions of how a system, tool or codebase behaves;\",\n \"- instructions written for end users or readers rather than the agent;\",\n \"- examples, sample output and code listings;\",\n \"- rules the file quotes from somewhere else, or reports as another party's.\",\n \"\",\n \"Keep a procedure's rules too, which a session shows across many turns:\",\n \"the order of steps, a gate that one step must pass before another, a route\",\n \"that a step's result chooses, a condition that calls for a step, a required\",\n \"step, and the step that comes last. Write each as its own rule.\",\n \"\",\n 'Drop a directive a transcript cannot show, such as \"prefer boring code\" or',\n '\"keep things simple\". If you cannot say what a violation would look like in',\n \"a transcript, it does not qualify.\",\n \"\",\n \"Each rule has:\",\n \"- `id`: a short kebab-case identifier, unique within this file.\",\n \"- `text`: one imperative sentence, faithful to the file. Do not strengthen,\",\n \" soften or merge directives, and do not invent ones the file lacks.\",\n ...WHEN_GUIDE,\n \"\",\n \"Return none at all when nothing qualifies.\",\n].join(\"\\n\");\n\nexport const RULES_SCHEMA = {\n type: \"object\",\n required: [\"rules\"],\n additionalProperties: false,\n properties: {\n rules: {\n type: \"array\",\n items: {\n type: \"object\",\n required: [\"id\", \"text\"],\n additionalProperties: false,\n properties: {\n id: { type: \"string\" },\n text: { type: \"string\", minLength: 1 },\n // Open on purpose: `extractRules` gates each `when` with `validateWhen`\n // and drops the one rule, where a schema miss would void the whole file.\n when: { type: \"object\" },\n },\n },\n },\n },\n} as const;\n\nconst ajv = new Ajv2020({ allErrors: true });\nconst validateRules = ajv.compile(\n RULES_SCHEMA as unknown as Record<string, unknown>,\n);\n\nexport function isValidRules(value: unknown): boolean {\n return validateRules(value);\n}\n\nexport interface RulesUserOptions {\n path: string;\n format: string;\n content: string;\n}\n\nexport function buildRulesUser(options: RulesUserOptions): string {\n return [\n \"# Rule source\",\n `path: ${options.path}`,\n `format: ${options.format}`,\n \"\",\n \"# File content\",\n \"\",\n options.content,\n ].join(\"\\n\");\n}\n","/**\n * Requirements extraction prompt: asks the provider to read ONE source that\n * says what the session was asked to build or keep, and return each item as a\n * rule in 0079's shape (proposal 0080, \"What the session was asked\").\n *\n * The sources are the typed prompts, an approved plan, and spec files. The\n * response schema and the `when` grammar are the rules prompt's, so a\n * requirement is judged like any other rule.\n */\nimport { WHEN_GUIDE } from \"./prompt.js\";\n\n/**\n * Part of the cache key: bump whenever the prompt changes.\n * `test/tracevals/unit/requests-prompt.test.ts` pins this to a digest of the\n * prompt surface so the pair has to move together.\n */\nexport const REQUIREMENTS_PROMPT_VERSION = 1;\n\n/** The source formats that say what the session was asked, which this prompt reads. */\nconst REQUEST_FORMATS: ReadonlySet<string> = new Set([\n \"prompt\",\n \"plan\",\n \"speckit-spec\",\n \"kiro-spec\",\n \"openspec-change\",\n \"plans\",\n]);\n\nexport function isRequestFormat(format: string): boolean {\n return REQUEST_FORMATS.has(format);\n}\n\nexport const REQUIREMENTS_SYSTEM_PROMPT = [\n \"You read what an AI agent working in a repository was asked to build or keep,\",\n \"and return each item as a rule.\",\n \"\",\n \"The source is one of three things: the prompts a person typed in the\",\n \"session, numbered in order; a plan the person approved; or a spec file,\",\n \"such as a feature spec, a design, a task list or a change proposal.\",\n \"\",\n \"A rule is something the work must deliver or keep, which a recorded session\",\n \"transcript could show met or broken. The transcript holds the agent's\",\n \"prompts, its tool calls (with their inputs), the files it read or wrote, and\",\n \"its replies. Nothing else is observable.\",\n \"\",\n \"Typed prompts are one sequence. Return the set that stands after the last\",\n \"prompt: a later prompt can add an item, change an earlier one, or drop it.\",\n \"A question with nothing to build yields nothing. Never return chat, such as\",\n \"greetings, thanks, or remarks about the work.\",\n \"\",\n \"A spec's items keep the spec's own ids, exactly as written, such as\",\n \"`FR-001`, `T014` or `1.2`. A task the file marks done is still a rule:\",\n \"ticking it says that task is done.\",\n \"\",\n \"Return nothing for background, rationale, examples, open questions, or\",\n \"items the source marks out of scope.\",\n \"\",\n \"Each rule has:\",\n \"- `id`: the source's own id for the item when it gives one, exactly as\",\n \" written. Otherwise a short kebab-case identifier. Unique within this source.\",\n \"- `text`: one imperative sentence, faithful to the source. Do not strengthen,\",\n \" soften or merge items, and do not invent ones the source lacks.\",\n ...WHEN_GUIDE,\n \"\",\n \"Return none at all when nothing qualifies.\",\n].join(\"\\n\");\n\nexport interface RequirementsUserOptions {\n path: string;\n format: string;\n content: string;\n}\n\nexport function buildRequirementsUser(options: RequirementsUserOptions): string {\n return [\n \"# Request source\",\n // Callers pass the display path (`prompt`, `plan`); a blank one names the format.\n `path: ${options.path !== \"\" ? options.path : options.format}`,\n `format: ${options.format}`,\n \"\",\n \"# Content\",\n \"\",\n options.content,\n ].join(\"\\n\");\n}\n","/**\n * Extract the rules one rule-source file declares for the agent, then gate\n * them (proposal 0079). The model proposes; the gate decides what survives, and\n * a rule it drops is reported with a reason rather than lost.\n *\n * A source that says what the session was asked, such as the typed prompts, a\n * plan or a spec, is read by the requirements prompt instead (proposal 0080).\n * Its gate keeps a spec's own ids as written, so `T014` and `1.2` survive.\n */\nimport {\n completeValidatedJSON,\n type InferenceProvider,\n} from \"@hawkeyexl/inference\";\nimport { validateWhen } from \"../graders/when.js\";\nimport { type RulesCache, rulesCacheKey } from \"./cache.js\";\nimport {\n RULES_SCHEMA,\n RULES_SYSTEM_PROMPT,\n buildRulesUser,\n isValidRules,\n} from \"./prompt.js\";\nimport {\n REQUIREMENTS_SYSTEM_PROMPT,\n buildRequirementsUser,\n isRequestFormat,\n} from \"./requests-prompt.js\";\n\nexport interface Rule {\n id: string;\n text: string;\n when?: Record<string, unknown>;\n}\n\nexport interface ExtractSource {\n path: string;\n format: string;\n content: string;\n /** sha256 of `content`; the cache key, so the path never enters it. */\n sha256: string;\n}\n\nexport interface ExtractDeps {\n provider: InferenceProvider;\n cache?: RulesCache;\n temperature?: number;\n}\n\nexport interface ExtractedRules {\n rules: Rule[];\n cached: boolean;\n dropped: { id?: string; reason: string }[];\n}\n\nconst KEBAB = /^[a-z0-9][a-z0-9-]*$/;\n/** A spec's own id, such as `FR-001`, `T014` or `1.2`, or a kebab-case one. */\nconst SPEC_ID = /^[A-Za-z0-9][A-Za-z0-9.-]*$/;\n\n/** Each extraction prompt, and the ids its gate accepts. */\nconst PROMPTS = {\n rules: {\n system: RULES_SYSTEM_PROMPT,\n user: buildRulesUser,\n id: KEBAB,\n idReason: \"id is not kebab-case\",\n },\n requests: {\n system: REQUIREMENTS_SYSTEM_PROMPT,\n user: buildRequirementsUser,\n id: SPEC_ID,\n idReason: \"id is neither a spec's own id nor kebab-case\",\n },\n} as const;\n\nexport type ExtractionPrompt = keyof typeof PROMPTS;\n\n/** The prompt a source of this format is read with. */\nexport function promptFor(format: string): ExtractionPrompt {\n return isRequestFormat(format) ? \"requests\" : \"rules\";\n}\n\n/** Gate the model's rules: valid id, text, unique id, grounded `when`. */\nexport function gateRules(\n proposed: Rule[],\n prompt: ExtractionPrompt = \"rules\",\n): Pick<ExtractedRules, \"rules\" | \"dropped\"> {\n const { id: idPattern, idReason } = PROMPTS[prompt];\n const rules: Rule[] = [];\n const dropped: ExtractedRules[\"dropped\"] = [];\n const seen = new Set<string>();\n for (const proposedRule of proposed) {\n // An empty `when` names no condition, which is what an absent one means.\n // Local models write it that way, so it is read as absent, not refused.\n const { when, ...bare } = proposedRule;\n const rule: Rule = when === undefined || Object.keys(when).length === 0 ? bare : proposedRule;\n if (!idPattern.test(rule.id)) {\n dropped.push({ id: rule.id, reason: idReason });\n } else if (rule.text.trim() === \"\") {\n dropped.push({ id: rule.id, reason: \"text is empty\" });\n } else if (seen.has(rule.id)) {\n dropped.push({ id: rule.id, reason: \"id repeats an earlier rule\" });\n } else {\n const invalid =\n rule.when === undefined ? undefined : validateWhen({ when: rule.when });\n if (invalid !== undefined) {\n dropped.push({ id: rule.id, reason: invalid });\n } else {\n seen.add(rule.id);\n rules.push(rule);\n }\n }\n }\n return { rules, dropped };\n}\n\n/**\n * Throws when the provider errors or returns a shape the schema rejects, so a\n * caller can tell \"this file yielded no rules\" (an empty list) from \"the model\n * never answered\".\n */\nexport async function extractRules(\n source: ExtractSource,\n deps: ExtractDeps,\n): Promise<ExtractedRules> {\n const { provider, cache } = deps;\n const prompt = promptFor(source.format);\n const key = rulesCacheKey({\n provider: provider.provider(),\n model: provider.modelName(),\n prompt,\n temperature: deps.temperature ?? 0,\n sha256: source.sha256,\n });\n\n const hit = cache?.get(key);\n if (hit !== undefined) return { rules: hit, cached: true, dropped: [] };\n\n const run = await completeValidatedJSON<{ rules: Rule[] }>({\n provider,\n system: PROMPTS[prompt].system,\n user: PROMPTS[prompt].user(source),\n schema: RULES_SCHEMA,\n ...(deps.temperature !== undefined ? { temperature: deps.temperature } : {}),\n });\n if (run.result === undefined || !isValidRules(run.result)) {\n throw new Error(\n run.error ?? \"provider returned rules that do not match the schema\",\n );\n }\n\n const gated = gateRules(run.result.rules, prompt);\n cache?.set(key, gated.rules);\n return { ...gated, cached: false };\n}\n"],"mappings":"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","names":["reasoning"]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  pathKey
4
- } from "./chunk-YLK2J5YK.js";
4
+ } from "./chunk-RGB7WBFD.js";
5
5
  import {
6
6
  DEFAULT_CAPTURE_DIR,
7
7
  makeRedactor
@@ -230,4 +230,4 @@ export {
230
230
  rollup,
231
231
  writeLedger
232
232
  };
233
- //# sourceMappingURL=chunk-N7JSEDSC.js.map
233
+ //# sourceMappingURL=chunk-W6AZHTGB.js.map
@@ -8,7 +8,7 @@ import {
8
8
  newAvailability,
9
9
  newReplay,
10
10
  remapAvailability
11
- } from "./chunk-APKH2T6E.js";
11
+ } from "./chunk-TKVGEFMH.js";
12
12
  import {
13
13
  makeRedactor
14
14
  } from "./chunk-CU57HT2E.js";
@@ -846,4 +846,4 @@ export {
846
846
  parseTraceContent,
847
847
  renderTrace
848
848
  };
849
- //# sourceMappingURL=chunk-M2RLHZ4J.js.map
849
+ //# sourceMappingURL=chunk-W7RSTW55.js.map
@@ -22,7 +22,7 @@ import {
22
22
  runRelocate,
23
23
  runVendorSchema,
24
24
  terminalConfirm
25
- } from "./chunk-GREQKO6M.js";
25
+ } from "./chunk-AZXCL5WH.js";
26
26
  import {
27
27
  LOCATION_EXTERNAL_SCHEMA,
28
28
  LOCATION_PAGE_SCHEMA,
@@ -42,7 +42,7 @@ import {
42
42
  rowsToFindings,
43
43
  runValidate,
44
44
  splitList
45
- } from "./chunk-TUAAR3MM.js";
45
+ } from "./chunk-KRSLDZ7N.js";
46
46
  import {
47
47
  COMMON_FORMATS,
48
48
  COMMON_FORMAT_LIST,
@@ -58,7 +58,7 @@ import {
58
58
  isQueryFormat,
59
59
  isReportFormat,
60
60
  render
61
- } from "./chunk-5G53XATW.js";
61
+ } from "./chunk-ZDYW7XTS.js";
62
62
  import {
63
63
  DocmetaError,
64
64
  STDIN_LABEL,
@@ -68,7 +68,7 @@ import {
68
68
  schemaLoadOptions,
69
69
  supportedExtensions,
70
70
  toJsonText
71
- } from "./chunk-KCOFEWV5.js";
71
+ } from "./chunk-A36QDIXZ.js";
72
72
  import {
73
73
  fail
74
74
  } from "./chunk-YEUYKR62.js";
@@ -85,7 +85,7 @@ import {
85
85
  } from "./chunk-QCHVR4ZM.js";
86
86
  import {
87
87
  package_default
88
- } from "./chunk-PCFG7E6B.js";
88
+ } from "./chunk-CGO5MNRD.js";
89
89
  import {
90
90
  programName
91
91
  } from "./chunk-OWBRDNRZ.js";
@@ -1523,4 +1523,4 @@ export {
1523
1523
  parseQueryParams,
1524
1524
  buildProgram
1525
1525
  };
1526
- //# sourceMappingURL=chunk-3NWX34ZI.js.map
1526
+ //# sourceMappingURL=chunk-WZFA33SD.js.map
@@ -6,7 +6,7 @@ import {
6
6
  canonicalSchemaRef,
7
7
  fingerprint,
8
8
  isErrorSeverity
9
- } from "./chunk-KCOFEWV5.js";
9
+ } from "./chunk-A36QDIXZ.js";
10
10
  import {
11
11
  palette
12
12
  } from "./chunk-RNVYGWIC.js";
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-XKBEHKWO.js";
20
20
  import {
21
21
  package_default
22
- } from "./chunk-PCFG7E6B.js";
22
+ } from "./chunk-CGO5MNRD.js";
23
23
 
24
24
  // src/meta/reporters/rule-id.ts
25
25
  var SYNTHETIC_SCHEMA = "(parse)";
@@ -385,4 +385,4 @@ export {
385
385
  renderGithub,
386
386
  render
387
387
  };
388
- //# sourceMappingURL=chunk-5G53XATW.js.map
388
+ //# sourceMappingURL=chunk-ZDYW7XTS.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  parseTraceFile,
4
4
  renderTrace
5
- } from "./chunk-M2RLHZ4J.js";
5
+ } from "./chunk-W7RSTW55.js";
6
6
  import {
7
7
  evaluateWhen,
8
8
  matchesGlob,
@@ -30,20 +30,20 @@ import {
30
30
  extractEvals,
31
31
  findManifest,
32
32
  resolveArtifacts
33
- } from "./chunk-APKH2T6E.js";
33
+ } from "./chunk-TKVGEFMH.js";
34
34
  import {
35
35
  discoverTraces
36
36
  } from "./chunk-4TSWU2SU.js";
37
37
  import {
38
38
  discoverConfig
39
- } from "./chunk-XPEWUK7J.js";
39
+ } from "./chunk-KPXOJMQ6.js";
40
40
  import {
41
41
  announceSelection,
42
42
  assertProviderSelection,
43
43
  constructProvider,
44
44
  resolveProviderIdentity,
45
45
  selectProvider
46
- } from "./chunk-BWCWTHYS.js";
46
+ } from "./chunk-NGTVREIH.js";
47
47
  import {
48
48
  TracevalsError
49
49
  } from "./chunk-UKZNLVJW.js";
@@ -68,7 +68,7 @@ import {
68
68
  } from "./chunk-GLP5PSXB.js";
69
69
  import {
70
70
  declaredAt
71
- } from "./chunk-TLXE7LYK.js";
71
+ } from "./chunk-22G33NL2.js";
72
72
  import {
73
73
  PATH_JOIN,
74
74
  externalMetadataJoin,
@@ -76,15 +76,15 @@ import {
76
76
  loadExternalMetadata,
77
77
  memberOf,
78
78
  mergeWithMarks
79
- } from "./chunk-TUAAR3MM.js";
79
+ } from "./chunk-KRSLDZ7N.js";
80
80
  import {
81
81
  xmlEscape
82
- } from "./chunk-5G53XATW.js";
82
+ } from "./chunk-ZDYW7XTS.js";
83
83
  import {
84
84
  DocmetaError,
85
85
  classifyRef,
86
86
  extractFrontmatter
87
- } from "./chunk-KCOFEWV5.js";
87
+ } from "./chunk-A36QDIXZ.js";
88
88
  import {
89
89
  palette
90
90
  } from "./chunk-RNVYGWIC.js";
@@ -3132,4 +3132,4 @@ export {
3132
3132
  resolveBatchTraces,
3133
3133
  runBatch
3134
3134
  };
3135
- //# sourceMappingURL=chunk-PL4UAF4S.js.map
3135
+ //# sourceMappingURL=chunk-ZH3VTIBL.js.map
@@ -3,16 +3,16 @@ import {
3
3
  renderCalibration,
4
4
  resolveBatchTraces,
5
5
  runBatch
6
- } from "./chunk-PL4UAF4S.js";
6
+ } from "./chunk-ZH3VTIBL.js";
7
7
  import {
8
8
  discoverConfig,
9
9
  labelKey,
10
10
  loadLabels
11
- } from "./chunk-XPEWUK7J.js";
11
+ } from "./chunk-KPXOJMQ6.js";
12
12
  import {
13
13
  assertProviderSelection,
14
14
  selectProvider
15
- } from "./chunk-BWCWTHYS.js";
15
+ } from "./chunk-NGTVREIH.js";
16
16
  import {
17
17
  TracevalsError
18
18
  } from "./chunk-UKZNLVJW.js";
@@ -378,4 +378,4 @@ export {
378
378
  score,
379
379
  runCalibrate
380
380
  };
381
- //# sourceMappingURL=chunk-UWQ2UVHE.js.map
381
+ //# sourceMappingURL=chunk-ZJNE4BKG.js.map
@@ -24,7 +24,7 @@ import {
24
24
  routesFrom,
25
25
  searchIndexFilename,
26
26
  vectorIndexFilename
27
- } from "./chunk-M6GSS72T.js";
27
+ } from "./chunk-JUN4DUHG.js";
28
28
  import {
29
29
  bundledShapesPath,
30
30
  compactIri,
@@ -75,16 +75,16 @@ import {
75
75
  } from "./chunk-6KKZXB2O.js";
76
76
  import {
77
77
  mergeMetaProvenance
78
- } from "./chunk-GREQKO6M.js";
78
+ } from "./chunk-AZXCL5WH.js";
79
79
  import {
80
80
  isMissing,
81
81
  spliceManifestValue
82
- } from "./chunk-TUAAR3MM.js";
82
+ } from "./chunk-KRSLDZ7N.js";
83
83
  import {
84
84
  DocmetaError,
85
85
  urlManifestMessage,
86
86
  writeFileAtomic
87
- } from "./chunk-KCOFEWV5.js";
87
+ } from "./chunk-A36QDIXZ.js";
88
88
  import {
89
89
  noticeOnce,
90
90
  warn
@@ -3958,4 +3958,4 @@ export {
3958
3958
  runTraverse,
3959
3959
  renderTraverse
3960
3960
  };
3961
- //# sourceMappingURL=chunk-MOWMCEOJ.js.map
3961
+ //# sourceMappingURL=chunk-ZYRHDBVS.js.map
@@ -1,31 +1,31 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  idHash
4
- } from "./chunk-N7JSEDSC.js";
5
- import "./chunk-YLK2J5YK.js";
4
+ } from "./chunk-W6AZHTGB.js";
5
+ import "./chunk-RGB7WBFD.js";
6
6
  import {
7
7
  readStdin
8
8
  } from "./chunk-TZOYZK2E.js";
9
9
  import "./chunk-CWXZ2MRT.js";
10
- import "./chunk-APKH2T6E.js";
10
+ import "./chunk-TKVGEFMH.js";
11
11
  import "./chunk-4TSWU2SU.js";
12
12
  import {
13
13
  DEFAULT_CAPTURE_DIR
14
14
  } from "./chunk-CU57HT2E.js";
15
15
  import "./chunk-UKZNLVJW.js";
16
- import "./chunk-TLXE7LYK.js";
17
- import "./chunk-GREQKO6M.js";
16
+ import "./chunk-22G33NL2.js";
17
+ import "./chunk-AZXCL5WH.js";
18
18
  import {
19
19
  memberOf,
20
20
  retainMembers
21
- } from "./chunk-TUAAR3MM.js";
22
- import "./chunk-5G53XATW.js";
21
+ } from "./chunk-KRSLDZ7N.js";
22
+ import "./chunk-ZDYW7XTS.js";
23
23
  import {
24
24
  extractorForExtension,
25
25
  resolveTargetSet,
26
26
  supportedExtensions,
27
27
  withSharedWalks
28
- } from "./chunk-KCOFEWV5.js";
28
+ } from "./chunk-A36QDIXZ.js";
29
29
  import {
30
30
  fail
31
31
  } from "./chunk-YEUYKR62.js";
@@ -44,7 +44,7 @@ import {
44
44
  import "./chunk-QCHVR4ZM.js";
45
45
  import {
46
46
  package_default
47
- } from "./chunk-PCFG7E6B.js";
47
+ } from "./chunk-CGO5MNRD.js";
48
48
  import {
49
49
  programName
50
50
  } from "./chunk-OWBRDNRZ.js";
@@ -165,8 +165,9 @@ async function loadFamily(cwd, configPath) {
165
165
  const doc = parseYaml(file.text);
166
166
  const top = record2(doc);
167
167
  const sections = new Set(top === void 0 ? [] : Object.keys(top));
168
- const conformance = record2(top?.tracevals)?.conformance !== void 0;
169
- return { file, configPath: configPath ?? file.source, sections, conformance, collections: file.collections };
168
+ const tracevals = record2(top?.tracevals);
169
+ const runtime = tracevals?.runtime !== void 0 || tracevals?.conformance !== void 0;
170
+ return { file, configPath: configPath ?? file.source, sections, runtime, collections: file.collections };
170
171
  }
171
172
  function record2(value) {
172
173
  return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
@@ -260,8 +261,8 @@ async function runDomain(domain, ctx) {
260
261
  switch (domain) {
261
262
  case "meta": {
262
263
  const [{ runValidate }, { render: renderMeta }] = await Promise.all([
263
- import("./validate-IMNCZNWG.js"),
264
- import("./reporters-XUV4MM64.js")
264
+ import("./validate-ULPJI4GQ.js"),
265
+ import("./reporters-FRM5BHPL.js")
265
266
  ]);
266
267
  const run2 = await runValidate({ inputs, configPath, cwd, skipDefaultOnly: true, onNotice });
267
268
  if (run2.results.length === 0) {
@@ -274,10 +275,10 @@ async function runDomain(domain, ctx) {
274
275
  }
275
276
  case "cite": {
276
277
  const [{ runCheck: runCite }, { renderCheckPretty: citePretty }, { renderCheckJson: citeJson }, { renderCheckGithub: citeGithub }] = await Promise.all([
277
- import("./check-PKY7KTQE.js"),
278
- import("./pretty-Q6FQAOK4.js"),
278
+ import("./check-3DZOMJ7R.js"),
279
+ import("./pretty-HFA6ITJY.js"),
279
280
  import("./json-7WV7KL6H.js"),
280
- import("./github-POT6724K.js")
281
+ import("./github-LL5LHQFG.js")
281
282
  ]);
282
283
  const run2 = await runCite({ inputs, configPath, cwd, onNotice });
283
284
  if (!run2.pages.some((p) => p.citations.length > 0 || p.findings.length > 0)) {
@@ -291,8 +292,8 @@ async function runDomain(domain, ctx) {
291
292
  case "lint": {
292
293
  if (!family.sections.has("lint")) return { skipped: NOT_SET_UP.lint };
293
294
  const [{ runLint }, { render: renderLint }] = await Promise.all([
294
- import("./lint-5AQ5C2BV.js"),
295
- import("./reporters-45MMC2ID.js")
295
+ import("./lint-NO4GIR3Z.js"),
296
+ import("./reporters-DZTHBJEA.js")
296
297
  ]);
297
298
  const run2 = await runLint({ inputs, configPath, cwd, onNotice });
298
299
  return {
@@ -302,7 +303,7 @@ async function runDomain(domain, ctx) {
302
303
  }
303
304
  case "docevals": {
304
305
  const [{ runRun: runDocevals }, { render: renderDocevals }, { DocevalsError }] = await Promise.all([
305
- import("./run-KMWY2IAN.js"),
306
+ import("./run-BRC64Y7B.js"),
306
307
  import("./reporters-M6LJ2IYU.js"),
307
308
  import("./types-Y6TXHM7M.js")
308
309
  ]);
@@ -329,10 +330,10 @@ async function runDomain(domain, ctx) {
329
330
  }
330
331
  case "term": {
331
332
  const [{ runCheck: runTerm }, { renderFindingsPretty: termPretty }, { renderFindingsJson: termJson }, { renderFindingsGithub: termGithub }] = await Promise.all([
332
- import("./check-5OMA42Y6.js"),
333
- import("./pretty-SQRPFPSQ.js"),
334
- import("./json-KT2K62L5.js"),
335
- import("./github-7ZCH5PSO.js")
333
+ import("./check-BF56QRWL.js"),
334
+ import("./pretty-ZMKG3AJR.js"),
335
+ import("./json-XDV4CZEU.js"),
336
+ import("./github-GFTLEZ3D.js")
336
337
  ]);
337
338
  const report = await runTerm({ inputs, configPath, cwd, allowEmpty: true, onNotice });
338
339
  if (report.terms === 0) return { skipped: NOT_SET_UP.term };
@@ -344,7 +345,7 @@ async function runDomain(domain, ctx) {
344
345
  case "graph": {
345
346
  if (!family.sections.has("graph")) return { skipped: NOT_SET_UP.graph };
346
347
  const [{ buildGraph }, { runCheck: runGraph, renderCheck: renderGraph }] = await Promise.all([
347
- import("./build-Z5VOVADH.js"),
348
+ import("./build-QKFXKAXT.js"),
348
349
  import("./check-OAJWC3WD.js")
349
350
  ]);
350
351
  const built = await buildGraph({ config: configPath, cwd });
@@ -558,8 +559,8 @@ async function runTurnCheck(envelope, cwd, seams = {}) {
558
559
  let renderTurn;
559
560
  try {
560
561
  const [{ checkTurn }, reporters] = await Promise.all([
561
- import("./check-WB2QDHJQ.js"),
562
- import("./conformance-ZFCMKM6M.js")
562
+ import("./check-NSDC5LSE.js"),
563
+ import("./runtime-7QE3DW6S.js")
563
564
  ]);
564
565
  renderTurn = reporters.renderCheck;
565
566
  result = await checkTurn({
@@ -611,8 +612,8 @@ async function tracevalsRow(cwd, opts) {
611
612
  { assertProviderSelection, resolveSelectionIdentity, selectHookProvider, selectProvider },
612
613
  { hostStatus }
613
614
  ] = await Promise.all([
614
- import("./config-P4HDNTYD.js"),
615
- import("./provider-AMGRDY6V.js"),
615
+ import("./config-YWSNBFEE.js"),
616
+ import("./provider-527CO4DM.js"),
616
617
  import("./host-6GURH5HE.js")
617
618
  ]);
618
619
  const { config } = await discoverConfig(cwd, opts.configPath === void 0 ? {} : { configPath: opts.configPath });
@@ -653,8 +654,8 @@ function ownSchemaCount(cwd, members) {
653
654
  return n;
654
655
  }
655
656
  async function citedPages(cwd, configPath) {
656
- const { prepareRun, readTarget } = await import("./check-PKY7KTQE.js");
657
- const { readPage } = await import("./page-UPSXRP75.js");
657
+ const { prepareRun, readTarget } = await import("./check-3DZOMJ7R.js");
658
+ const { readPage } = await import("./page-4VJQELH5.js");
658
659
  const prepared = await prepareRun({ inputs: [], configPath, cwd, checkSources: false }, "checked", "check");
659
660
  let n = 0;
660
661
  for (const file of prepared.files) {
@@ -681,14 +682,14 @@ async function row(domain, family, cwd, members) {
681
682
  return n > 0 ? inPlay(pages(n, "carries citations", "carry citations")) : notSetUp;
682
683
  }
683
684
  case "docevals": {
684
- const { runList: listEvals } = await import("./list-SWPFXQMU.js");
685
+ const { runList: listEvals } = await import("./list-4GJ6KI4U.js");
685
686
  const { plans } = await listEvals([], { config: configPath, cwd });
686
687
  const n = plans.filter((p) => !p.skip && p.evals.length > 0).length;
687
688
  if (n === 0) return notSetUp;
688
689
  return inPlay(section ? "docevals: section" : pages(n, "declares evals", "declare evals"));
689
690
  }
690
691
  case "term": {
691
- const { runList: listTerms } = await import("./list-5JZKX2NK.js");
692
+ const { runList: listTerms } = await import("./list-4G6F5BX2.js");
692
693
  const { terms } = await listTerms({ inputs: [], configPath, cwd, allowEmpty: true });
693
694
  return terms.length > 0 ? inPlay(plural(terms.length, "term")) : notSetUp;
694
695
  }
@@ -719,7 +720,7 @@ async function statusUnshared(opts) {
719
720
  }
720
721
  for (const [name, reason] of NOT_CHECKED) {
721
722
  domains.push(
722
- name === "tracevals" && family.conformance ? await tracevalsRow(cwd, opts) : { name, status: "not-checked", reason }
723
+ name === "tracevals" && family.runtime ? await tracevalsRow(cwd, opts) : { name, status: "not-checked", reason }
723
724
  );
724
725
  }
725
726
  return {
@@ -903,4 +904,4 @@ export {
903
904
  buildStatus,
904
905
  hookScope
905
906
  };
906
- //# sourceMappingURL=cli-PSKNB66T.js.map
907
+ //# sourceMappingURL=cli-7OIV7UXF.js.map