@hawkeyexl/manni 4.6.0 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/README.md +1 -1
  2. package/dist/{batch-OZOACN4G.js → batch-U6S2JUUN.js} +11 -11
  3. package/dist/{build-Z5VOVADH.js → build-4RN6WBCP.js} +9 -9
  4. package/dist/{calibrate-TZYT42DR.js → calibrate-6VIZYR4L.js} +12 -12
  5. package/dist/{capture-SL4MNDDP.js → capture-DP3NXAZE.js} +11 -11
  6. package/dist/{check-PKY7KTQE.js → check-ERVNGKLC.js} +10 -10
  7. package/dist/{check-WB2QDHJQ.js → check-IWHUPAZM.js} +27 -21
  8. package/dist/check-IWHUPAZM.js.map +1 -0
  9. package/dist/{check-5OMA42Y6.js → check-STHXZIZO.js} +9 -9
  10. package/dist/{chunk-UAKNZVCD.js → chunk-2ZWTSRE5.js} +4 -4
  11. package/dist/{chunk-2JFPBZJK.js → chunk-4Z2MN5FR.js} +10 -10
  12. package/dist/{chunk-TUAAR3MM.js → chunk-5UB47BEV.js} +2 -2
  13. package/dist/{chunk-5G53XATW.js → chunk-5VWDIWOH.js} +3 -3
  14. package/dist/{chunk-73TC4DYH.js → chunk-6URSCTTX.js} +2 -2
  15. package/dist/{chunk-M6GSS72T.js → chunk-6VDBP5UV.js} +6 -6
  16. package/dist/{chunk-N7JSEDSC.js → chunk-7EL5LLKD.js} +2 -2
  17. package/dist/{chunk-UJSGS2Y5.js → chunk-7XZ6INKO.js} +4 -4
  18. package/dist/{chunk-UWQ2UVHE.js → chunk-AMEILOVV.js} +3 -3
  19. package/dist/{chunk-733Y2STG.js → chunk-B5CMM57M.js} +2 -2
  20. package/dist/{chunk-2M6DVNI5.js → chunk-C2TJG5KV.js} +4 -4
  21. package/dist/{chunk-DC5DDJVE.js → chunk-CEVU3GFF.js} +4 -4
  22. package/dist/{chunk-FLAO4ZS3.js → chunk-CI55ABCK.js} +2 -2
  23. package/dist/{chunk-GREQKO6M.js → chunk-CR3HZERW.js} +4 -4
  24. package/dist/{chunk-TH4JVQPF.js → chunk-D2LBN44V.js} +4 -3
  25. package/dist/chunk-D2LBN44V.js.map +1 -0
  26. package/dist/{chunk-YLK2J5YK.js → chunk-D6RO54QD.js} +72 -8
  27. package/dist/chunk-D6RO54QD.js.map +1 -0
  28. package/dist/{chunk-T6SYGLWR.js → chunk-GCC52YZD.js} +3 -3
  29. package/dist/{chunk-C73RSUIC.js → chunk-IIFADWWI.js} +3 -3
  30. package/dist/{chunk-MWBJ3KTF.js → chunk-IOL74S4J.js} +4 -4
  31. package/dist/{chunk-MHM4QEBV.js → chunk-IZBBXKMJ.js} +3 -3
  32. package/dist/{chunk-NHHOPZRA.js → chunk-K52CS4KT.js} +5 -5
  33. package/dist/{chunk-Z4IZGEM3.js → chunk-LDKIIZDW.js} +5 -5
  34. package/dist/{chunk-7WRP5FFP.js → chunk-LONRQBGV.js} +4 -4
  35. package/dist/{chunk-MOWMCEOJ.js → chunk-LXJEAV2V.js} +5 -5
  36. package/dist/{chunk-GAJIJKET.js → chunk-MIBWI5H7.js} +3 -3
  37. package/dist/{chunk-KCOFEWV5.js → chunk-MSMB6XOS.js} +2 -2
  38. package/dist/{chunk-C3B2VJNC.js → chunk-NIFEEIGQ.js} +2 -2
  39. package/dist/{chunk-QW77LCOU.js → chunk-NZ6TNSCU.js} +5 -5
  40. package/dist/{chunk-APKH2T6E.js → chunk-OOEMKOX6.js} +3 -3
  41. package/dist/{chunk-NBMPHD4I.js → chunk-PAOVVHQX.js} +2 -2
  42. package/dist/{chunk-M2RLHZ4J.js → chunk-PNX43DYW.js} +2 -2
  43. package/dist/{chunk-PL4UAF4S.js → chunk-QP5X66TO.js} +8 -8
  44. package/dist/{chunk-3NWX34ZI.js → chunk-QQNPVW3J.js} +6 -6
  45. package/dist/{chunk-XPEWUK7J.js → chunk-TPVOOTMN.js} +2 -2
  46. package/dist/{chunk-XPEWUK7J.js.map → chunk-TPVOOTMN.js.map} +1 -1
  47. package/dist/{chunk-SM6NOMJS.js → chunk-UZKQSWHJ.js} +2 -2
  48. package/dist/{chunk-2KRB3EG7.js → chunk-WTEILBKC.js} +2 -2
  49. package/dist/{chunk-PCFG7E6B.js → chunk-YSCZL4U5.js} +2 -2
  50. package/dist/{chunk-PCFG7E6B.js.map → chunk-YSCZL4U5.js.map} +1 -1
  51. package/dist/{chunk-IY7NYNPZ.js → chunk-ZEXGGGLW.js} +7 -7
  52. package/dist/{chunk-NTWW7J76.js → chunk-ZKAKA54B.js} +2 -2
  53. package/dist/{chunk-TLXE7LYK.js → chunk-ZKCNPKUO.js} +3 -3
  54. package/dist/{chunk-SWSTHZBI.js → chunk-ZNE25EAR.js} +4 -4
  55. package/dist/{chunk-B3TS4WRM.js → chunk-ZPP75QWG.js} +7 -7
  56. package/dist/{cli-NIG4N3XM.js → cli-37SRAYNE.js} +11 -11
  57. package/dist/{cli-PSKNB66T.js → cli-HXWYUKGJ.js} +30 -30
  58. package/dist/{cli-EPVZHAZS.js → cli-IRHPPUFJ.js} +10 -10
  59. package/dist/{cli-LUCSGTVI.js → cli-KIID535Y.js} +13 -13
  60. package/dist/{cli-UQ7A3YA2.js → cli-MTDGQIIV.js} +14 -14
  61. package/dist/{cli-6EWVMEN6.js → cli-NM6FZ54R.js} +2 -2
  62. package/dist/{cli-6H7HVDMQ.js → cli-XIODOEUG.js} +19 -19
  63. package/dist/{cli-YHYDLQAF.js → cli-YL3IDR52.js} +7 -7
  64. package/dist/{cli-UO4NHIB3.js → cli-ZQUJYQBA.js} +11 -11
  65. package/dist/cli.js +11 -11
  66. package/dist/{config-P4HDNTYD.js → config-O6UBGEDK.js} +2 -2
  67. package/dist/{conformance-ZFCMKM6M.js → conformance-ALLPNGEQ.js} +2 -2
  68. package/dist/docmeta.js +6 -6
  69. package/dist/{github-7ZCH5PSO.js → github-UCYLM3DR.js} +9 -9
  70. package/dist/{github-POT6724K.js → github-VEJFO6JJ.js} +11 -11
  71. package/dist/index.js +31 -31
  72. package/dist/{json-KT2K62L5.js → json-6F52FSXZ.js} +9 -9
  73. package/dist/{lint-5AQ5C2BV.js → lint-X2GNINK6.js} +9 -9
  74. package/dist/{list-SWPFXQMU.js → list-DP3O3CWB.js} +9 -9
  75. package/dist/{list-5JZKX2NK.js → list-P77RZFZF.js} +9 -9
  76. package/dist/{page-UPSXRP75.js → page-WQCMBNRD.js} +8 -8
  77. package/dist/{prepare-6GNEWCNH.js → prepare-52QOK7M4.js} +12 -12
  78. package/dist/{pretty-Q6FQAOK4.js → pretty-5MMMNSWF.js} +10 -10
  79. package/dist/{pretty-SQRPFPSQ.js → pretty-H4DQREMW.js} +9 -9
  80. package/dist/{release-IECYCLTD.js → release-CTYRHZL4.js} +2 -2
  81. package/dist/{reporters-XUV4MM64.js → reporters-SU3VUKKX.js} +4 -4
  82. package/dist/{reporters-45MMC2ID.js → reporters-WIHBEMPG.js} +8 -8
  83. package/dist/{run-KMWY2IAN.js → run-L2DWJ26K.js} +9 -9
  84. package/dist/{term-PCJUCWNF.js → term-PJIJQZNF.js} +13 -13
  85. package/dist/{validate-IMNCZNWG.js → validate-XCDSPURG.js} +4 -4
  86. package/package.json +1 -1
  87. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  88. package/dist/check-WB2QDHJQ.js.map +0 -1
  89. package/dist/chunk-TH4JVQPF.js.map +0 -1
  90. package/dist/chunk-YLK2J5YK.js.map +0 -1
  91. /package/dist/{batch-OZOACN4G.js.map → batch-U6S2JUUN.js.map} +0 -0
  92. /package/dist/{build-Z5VOVADH.js.map → build-4RN6WBCP.js.map} +0 -0
  93. /package/dist/{calibrate-TZYT42DR.js.map → calibrate-6VIZYR4L.js.map} +0 -0
  94. /package/dist/{capture-SL4MNDDP.js.map → capture-DP3NXAZE.js.map} +0 -0
  95. /package/dist/{check-5OMA42Y6.js.map → check-ERVNGKLC.js.map} +0 -0
  96. /package/dist/{check-PKY7KTQE.js.map → check-STHXZIZO.js.map} +0 -0
  97. /package/dist/{chunk-UAKNZVCD.js.map → chunk-2ZWTSRE5.js.map} +0 -0
  98. /package/dist/{chunk-2JFPBZJK.js.map → chunk-4Z2MN5FR.js.map} +0 -0
  99. /package/dist/{chunk-TUAAR3MM.js.map → chunk-5UB47BEV.js.map} +0 -0
  100. /package/dist/{chunk-5G53XATW.js.map → chunk-5VWDIWOH.js.map} +0 -0
  101. /package/dist/{chunk-73TC4DYH.js.map → chunk-6URSCTTX.js.map} +0 -0
  102. /package/dist/{chunk-M6GSS72T.js.map → chunk-6VDBP5UV.js.map} +0 -0
  103. /package/dist/{chunk-N7JSEDSC.js.map → chunk-7EL5LLKD.js.map} +0 -0
  104. /package/dist/{chunk-UJSGS2Y5.js.map → chunk-7XZ6INKO.js.map} +0 -0
  105. /package/dist/{chunk-UWQ2UVHE.js.map → chunk-AMEILOVV.js.map} +0 -0
  106. /package/dist/{chunk-733Y2STG.js.map → chunk-B5CMM57M.js.map} +0 -0
  107. /package/dist/{chunk-2M6DVNI5.js.map → chunk-C2TJG5KV.js.map} +0 -0
  108. /package/dist/{chunk-DC5DDJVE.js.map → chunk-CEVU3GFF.js.map} +0 -0
  109. /package/dist/{chunk-FLAO4ZS3.js.map → chunk-CI55ABCK.js.map} +0 -0
  110. /package/dist/{chunk-GREQKO6M.js.map → chunk-CR3HZERW.js.map} +0 -0
  111. /package/dist/{chunk-T6SYGLWR.js.map → chunk-GCC52YZD.js.map} +0 -0
  112. /package/dist/{chunk-C73RSUIC.js.map → chunk-IIFADWWI.js.map} +0 -0
  113. /package/dist/{chunk-MWBJ3KTF.js.map → chunk-IOL74S4J.js.map} +0 -0
  114. /package/dist/{chunk-MHM4QEBV.js.map → chunk-IZBBXKMJ.js.map} +0 -0
  115. /package/dist/{chunk-NHHOPZRA.js.map → chunk-K52CS4KT.js.map} +0 -0
  116. /package/dist/{chunk-Z4IZGEM3.js.map → chunk-LDKIIZDW.js.map} +0 -0
  117. /package/dist/{chunk-7WRP5FFP.js.map → chunk-LONRQBGV.js.map} +0 -0
  118. /package/dist/{chunk-MOWMCEOJ.js.map → chunk-LXJEAV2V.js.map} +0 -0
  119. /package/dist/{chunk-GAJIJKET.js.map → chunk-MIBWI5H7.js.map} +0 -0
  120. /package/dist/{chunk-KCOFEWV5.js.map → chunk-MSMB6XOS.js.map} +0 -0
  121. /package/dist/{chunk-C3B2VJNC.js.map → chunk-NIFEEIGQ.js.map} +0 -0
  122. /package/dist/{chunk-QW77LCOU.js.map → chunk-NZ6TNSCU.js.map} +0 -0
  123. /package/dist/{chunk-APKH2T6E.js.map → chunk-OOEMKOX6.js.map} +0 -0
  124. /package/dist/{chunk-NBMPHD4I.js.map → chunk-PAOVVHQX.js.map} +0 -0
  125. /package/dist/{chunk-M2RLHZ4J.js.map → chunk-PNX43DYW.js.map} +0 -0
  126. /package/dist/{chunk-PL4UAF4S.js.map → chunk-QP5X66TO.js.map} +0 -0
  127. /package/dist/{chunk-3NWX34ZI.js.map → chunk-QQNPVW3J.js.map} +0 -0
  128. /package/dist/{chunk-SM6NOMJS.js.map → chunk-UZKQSWHJ.js.map} +0 -0
  129. /package/dist/{chunk-2KRB3EG7.js.map → chunk-WTEILBKC.js.map} +0 -0
  130. /package/dist/{chunk-IY7NYNPZ.js.map → chunk-ZEXGGGLW.js.map} +0 -0
  131. /package/dist/{chunk-NTWW7J76.js.map → chunk-ZKAKA54B.js.map} +0 -0
  132. /package/dist/{chunk-TLXE7LYK.js.map → chunk-ZKCNPKUO.js.map} +0 -0
  133. /package/dist/{chunk-SWSTHZBI.js.map → chunk-ZNE25EAR.js.map} +0 -0
  134. /package/dist/{chunk-B3TS4WRM.js.map → chunk-ZPP75QWG.js.map} +0 -0
  135. /package/dist/{cli-NIG4N3XM.js.map → cli-37SRAYNE.js.map} +0 -0
  136. /package/dist/{cli-PSKNB66T.js.map → cli-HXWYUKGJ.js.map} +0 -0
  137. /package/dist/{cli-EPVZHAZS.js.map → cli-IRHPPUFJ.js.map} +0 -0
  138. /package/dist/{cli-LUCSGTVI.js.map → cli-KIID535Y.js.map} +0 -0
  139. /package/dist/{cli-UQ7A3YA2.js.map → cli-MTDGQIIV.js.map} +0 -0
  140. /package/dist/{cli-6EWVMEN6.js.map → cli-NM6FZ54R.js.map} +0 -0
  141. /package/dist/{cli-6H7HVDMQ.js.map → cli-XIODOEUG.js.map} +0 -0
  142. /package/dist/{cli-YHYDLQAF.js.map → cli-YL3IDR52.js.map} +0 -0
  143. /package/dist/{cli-UO4NHIB3.js.map → cli-ZQUJYQBA.js.map} +0 -0
  144. /package/dist/{config-P4HDNTYD.js.map → config-O6UBGEDK.js.map} +0 -0
  145. /package/dist/{conformance-ZFCMKM6M.js.map → conformance-ALLPNGEQ.js.map} +0 -0
  146. /package/dist/{github-7ZCH5PSO.js.map → github-UCYLM3DR.js.map} +0 -0
  147. /package/dist/{github-POT6724K.js.map → github-VEJFO6JJ.js.map} +0 -0
  148. /package/dist/{json-KT2K62L5.js.map → json-6F52FSXZ.js.map} +0 -0
  149. /package/dist/{lint-5AQ5C2BV.js.map → lint-X2GNINK6.js.map} +0 -0
  150. /package/dist/{list-5JZKX2NK.js.map → list-DP3O3CWB.js.map} +0 -0
  151. /package/dist/{list-SWPFXQMU.js.map → list-P77RZFZF.js.map} +0 -0
  152. /package/dist/{page-UPSXRP75.js.map → page-WQCMBNRD.js.map} +0 -0
  153. /package/dist/{prepare-6GNEWCNH.js.map → prepare-52QOK7M4.js.map} +0 -0
  154. /package/dist/{pretty-Q6FQAOK4.js.map → pretty-5MMMNSWF.js.map} +0 -0
  155. /package/dist/{pretty-SQRPFPSQ.js.map → pretty-H4DQREMW.js.map} +0 -0
  156. /package/dist/{release-IECYCLTD.js.map → release-CTYRHZL4.js.map} +0 -0
  157. /package/dist/{reporters-45MMC2ID.js.map → reporters-SU3VUKKX.js.map} +0 -0
  158. /package/dist/{reporters-XUV4MM64.js.map → reporters-WIHBEMPG.js.map} +0 -0
  159. /package/dist/{run-KMWY2IAN.js.map → run-L2DWJ26K.js.map} +0 -0
  160. /package/dist/{term-PCJUCWNF.js.map → term-PJIJQZNF.js.map} +0 -0
  161. /package/dist/{validate-IMNCZNWG.js.map → validate-XCDSPURG.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tracevals/core/config.ts","../src/tracevals/core/config-schema.json","../src/tracevals/calibrate/labels.ts","../src/tracevals/calibrate/labels-schema.json"],"sourcesContent":["/**\n * Config loading. Every knob flows config → Ajv validate → defaults → CLI\n * override (`??` at the read site) → runtime; parseConfig() fills every\n * default so downstream code never re-applies one.\n *\n * Settings live under a `tracevals:` key in `manni.config.yaml`, one file\n * shared by the whole manni family. Sibling keys belong to other tools and are\n * ignored here, so parseConfig() validates the section — never the file root.\n * Finding the file is the shared loader's job (`src/shared/config-file.ts`).\n */\nimport { Ajv2020 } from \"ajv/dist/2020.js\";\nimport configSchemaJson from \"./config-schema.json\" with { type: \"json\" };\nimport {\n FAMILY_CONFIG_NAMES,\n findConfigFileSync,\n readConfigFileSync,\n type ConfigFileOptions,\n} from \"../../shared/config-file.js\";\nimport type { CollectionConfig } from \"../../shared/collections.js\";\nimport {\n assertKnownProvider,\n type ProvidersConfig,\n} from \"../../shared/providers.js\";\nimport { compileRedactPatterns } from \"../judge/redact.js\";\nimport { JEV, JEV_OUT_OF_LOOP } from \"../judge/provider.js\";\nimport { DEFAULT_CAPTURE_DIR } from \"../capture/types.js\";\nimport { DEFAULT_LABELS_FILE } from \"../calibrate/labels.js\";\nimport { TracevalsError } from \"../types.js\";\nimport {\n configuredGrants,\n EXECUTION_GRANTS,\n isExecutionGrant,\n unknownGrantsMessage,\n type ExecutionGrant,\n} from \"../../shared/execution.js\";\n\nconst configSchema = configSchemaJson as Record<string, unknown>;\n\nexport const DEFAULT_CONFIG_FILENAME =\n FAMILY_CONFIG_NAMES[0] ?? \"manni.config.yaml\";\n\n/**\n * Top-level key holding this tool's settings inside the shared family config.\n * Sibling tools (meta, docevals) own their own keys in the same file.\n */\nexport const CONFIG_SECTION_KEY = \"tracevals\";\n\n/**\n * The section key as an error's instance path spells it. The schema describes\n * the section rather than the file, so Ajv's own paths start below it; a\n * message that said `/provider` would name a key nobody writes at the root.\n */\nconst CONFIG_SECTION_KEY_PATH = `/${CONFIG_SECTION_KEY}`;\n\n/**\n * No legacy filename. The family file is the only one read, so a file named\n * for the tool is not config however it is spelled, and nothing warns about\n * one because nothing looks for it.\n */\nconst CONFIG_FILE: ConfigFileOptions = {\n section: CONFIG_SECTION_KEY,\n legacyNames: [],\n toError: (message) => new TracevalsError(message),\n};\n\nexport interface TracevalsConfig {\n /**\n * Which provider judges, as `tracevals.provider` names it. `null` when the\n * key is absent, which defers to the family's `providers.provider`. The\n * connection settings are never here: they are `providers` below.\n */\n provider: string | null;\n /** The model within `provider`; `null` when unset. manni pins none. */\n model: string | null;\n /** The family's top-level `providers:` map, parsed by the shared loader. */\n providers: ProvidersConfig;\n /** The file as the user would name it, for messages. */\n configSource: string;\n judge: {\n ensembleRuns: number;\n temperature: number;\n zones: { autoPass: number; autoFail: number };\n cacheDir: string;\n /**\n * Ensemble runs this invocation may spend, or `null` for unbounded. A\n * cached ensemble spends none, and an eval the budget cannot cover is\n * `skipped` with the `turn budget` reason rather than dropped.\n */\n maxTurns: number | null;\n /**\n * Extra patterns scrubbed from the session digest before it reaches a\n * provider, applied *on top of* the built-in secret shapes (ADR 01020).\n * Always a list; validated for compilability at load time.\n */\n redact: string[];\n };\n render: {\n maxBlockChars: number;\n maxTotalChars: number;\n };\n /**\n * What content-authored code a run may execute: the grants it holds, every\n * one unless the operator narrows it (proposal 0075). A `command` eval runs\n * only under `frontmatter-commands`; `[]` runs none and reports them\n * `skipped`.\n */\n execution: { allow: ExecutionGrant[] };\n history: {\n file: string;\n };\n /**\n * Session manifests (ADR 01024). `capture` writes one here; `run` looks here\n * for the trace's own, and reports a `skipped` hash check when there is none.\n */\n capture: {\n /** Resolved against the project root, not the working directory. */\n dir: string;\n };\n fill: {\n /** Minimum self-reported confidence a proposal needs to be written. */\n confidenceThreshold: number;\n maxEvalsPerArtifact: number;\n temperature: number;\n cacheDir: string;\n /** Inference calls this invocation may spend, or `null` for unbounded. */\n maxTurns: number | null;\n };\n /**\n * `calibrate` — measuring the judge against a human's answers (ADR 01022).\n * The sweep grid lives here rather than behind flags because the useful\n * range is a property of a corpus, and a corpus outlives an invocation.\n */\n calibrate: {\n /** Labels sidecar, resolved against the config file's directory. */\n labels: string;\n /** Thresholds. Unset means the run measures without gating. */\n maxFalsePass?: number;\n maxFalseFail?: number;\n maxReview?: number;\n sweep: {\n ensembleRuns: number[];\n autoPass: number[];\n autoFail: number[];\n };\n };\n failOnReview: boolean;\n /**\n * Module specifiers imported before evals are planned, so a `registerGrader`\n * call from outside this package lands in time (ADR 01017). Resolved against\n * the config file's directory, in order — a later entry wins a colliding\n * kind. `--require` appends to this list rather than replacing it.\n */\n plugins: string[];\n /** List offered-but-unused artifacts in coverage, not just count them. */\n reportUnusedArtifacts: boolean;\n /**\n * Checking each turn against its rule sources (proposal 0079). `null` when\n * the section is absent, which keeps tracevals out of every hook; `{}` puts\n * it in play with these defaults.\n */\n conformance: ConformanceConfig | null;\n}\n\nexport interface ConformanceConfig {\n /** The in-loop judge. `null` falls back to `tracevals.provider` / `model`. */\n hook: { provider: string | null; model: string | null; runs: number };\n /** Globs of designated rule sources, in scope once read. */\n include: string[];\n /** Globs never treated as rule sources. */\n exclude: string[];\n /** Globs of files that say what to build, in scope once touched (proposal 0080). */\n plans: string[];\n}\n\n// `verbose` puts the parent schema on each error, so an unknown key can be\n// checked against the keys its section does have.\nconst ajv = new Ajv2020({ allErrors: true, verbose: true });\nconst validate = ajv.compile(configSchema);\n\n/**\n * `; did you mean \"ensembleRuns\"?` when `key` is the kebab spelling of a key\n * its section has. Only the exact counterpart: a guess at a near miss is\n * advice that can be wrong, and the kebab spelling is the one mistake a\n * reader of the frontmatter vocabulary is likely to make here.\n */\nfunction camelCaseHint(key: string, parentSchema: unknown): string {\n const camel = key.replace(/-([a-z0-9])/g, (_, c: string) => c.toUpperCase());\n if (camel === key || parentSchema === null || typeof parentSchema !== \"object\") {\n return \"\";\n }\n const properties = (parentSchema as { properties?: unknown }).properties;\n return properties !== null &&\n typeof properties === \"object\" &&\n Object.hasOwn(properties, camel)\n ? `; did you mean \"${camel}\"?`\n : \"\";\n}\n\n/**\n * The hint on an old `provider:` object. The key used to hold a `default` and\n * a section per provider; it is now the provider's name, as `docevals.provider`\n * and `fill.provider` are, and the connection settings moved to the family's\n * top-level `providers:` map, which every tool reads. Ajv's own message says\n * it must be a string, which is true and leaves the reader to find out where\n * the settings went.\n */\nfunction movedProviderHint(instancePath: string, keyword: string): string {\n return instancePath === \"/provider\" && keyword === \"type\"\n ? `; \"provider\" is now a provider name; per-provider settings moved to the top-level providers: map`\n : \"\";\n}\n\n/**\n * The section as the schema admits it: every key optional, because\n * `parseConfig` supplies the defaults. Ajv has checked the document against\n * `config-schema.json` before it is read as this, so the one cast below is\n * where the validated document becomes a typed one.\n */\ninterface RawConfig {\n provider?: string;\n model?: string;\n judge?: {\n ensembleRuns?: number;\n temperature?: number;\n zones?: { autoPass?: number; autoFail?: number };\n cacheDir?: string;\n maxTurns?: number;\n redact?: string[];\n };\n render?: { maxBlockChars?: number; maxTotalChars?: number };\n execution?: { allow?: ExecutionGrant[] };\n history?: { file?: string };\n capture?: { dir?: string };\n fill?: {\n confidenceThreshold?: number;\n maxEvalsPerArtifact?: number;\n temperature?: number;\n cacheDir?: string;\n maxTurns?: number;\n };\n calibrate?: {\n labels?: string;\n maxFalsePass?: number;\n maxFalseFail?: number;\n maxReview?: number;\n sweep?: { ensembleRuns?: number[]; autoPass?: number[]; autoFail?: number[] };\n };\n failOnReview?: boolean;\n plugins?: string[];\n reportUnusedArtifacts?: boolean;\n conformance?: {\n hook?: { provider?: string; model?: string; runs?: number };\n include?: string[];\n exclude?: string[];\n plans?: string[];\n };\n}\n\n/** What the file the section came from carries beside it. */\nexport interface ConfigFileContext {\n /** The file as the user would name it, for messages. */\n source?: string;\n /** The file's top-level `providers:`; `{}` when it declares none. */\n providers?: ProvidersConfig;\n}\n\nexport function parseConfig(\n raw: unknown,\n file: ConfigFileContext = {},\n): TracevalsConfig {\n const source = file.source ?? DEFAULT_CONFIG_FILENAME;\n // Before the schema: Ajv's enum error names neither the value nor the\n // grants that exist, and a grant is the key where a misreading costs most.\n const unknownGrants = configuredGrants(raw).filter((g) => !isExecutionGrant(g));\n if (unknownGrants.length > 0) {\n throw new TracevalsError(`${source}: ${unknownGrantsMessage(unknownGrants)}`);\n }\n if (!validate(raw)) {\n const detail = (validate.errors ?? [])\n .map((e) => {\n // Ajv reports an unknown key against the *parent* object, so the bare\n // message (\"must NOT have additional properties\") leaves the reader to\n // diff their file against the schema to find which key it meant. Name\n // it: the common case is a removed key in an unmigrated config —\n // `judge.maxCostUsd` after the turn budget landed, say — and a\n // migration error that makes you guess is one people work around.\n const extra =\n e.keyword === \"additionalProperties\"\n ? (e.params as { additionalProperty?: string }).additionalProperty\n : undefined;\n return extra !== undefined\n ? `unknown key \"${extra}\"${camelCaseHint(extra, e.parentSchema)}`\n : `${CONFIG_SECTION_KEY_PATH}${e.instancePath} ${e.message ?? \"is invalid\"}` +\n movedProviderHint(e.instancePath, e.keyword);\n })\n .join(\"; \");\n throw new TracevalsError(`${source}: ${detail}`);\n }\n const r = raw as RawConfig;\n // Checked here, with the message every other tool in the family gives, so a\n // typo is caught by every verb and not only the ones that reach a model.\n // Whether a model has a provider to own it waits for the flags: a\n // `--provider`, or the family's `providers.provider`, can supply the\n // provider a configured model needs.\n const provider = r.provider ?? null;\n if (provider !== null) {\n // jev only decides. Out of the loop a provider extracts rules and writes\n // verdicts, which are generations.\n if (provider === JEV) throw new TracevalsError(JEV_OUT_OF_LOOP);\n assertKnownProvider(provider, (message) => new TracevalsError(message));\n }\n const hookProvider = r.conformance?.hook?.provider ?? null;\n if (hookProvider !== null) {\n assertKnownProvider(hookProvider, (message) => new TracevalsError(message), { decisions: true });\n }\n const config: TracevalsConfig = {\n provider,\n model: r.model ?? null,\n providers: file.providers ?? {},\n configSource: source,\n judge: {\n ensembleRuns: r.judge?.ensembleRuns ?? 3,\n temperature: r.judge?.temperature ?? 0,\n zones: {\n autoPass: r.judge?.zones?.autoPass ?? 0.8,\n autoFail: r.judge?.zones?.autoFail ?? 0.8,\n },\n cacheDir: r.judge?.cacheDir ?? \".manni/tracevals/cache\",\n // `null`, not a number: unbounded is a state, and any number here would\n // be a ceiling nobody asked for.\n maxTurns: r.judge?.maxTurns ?? null,\n // Always a list: the render site concatenates nothing onto it, but a\n // hole here would be a special case in every consumer.\n redact: [...(r.judge?.redact ?? [])],\n },\n render: {\n maxBlockChars: r.render?.maxBlockChars ?? 2000,\n maxTotalChars: r.render?.maxTotalChars ?? 150000,\n },\n execution: { allow: [...(r.execution?.allow ?? EXECUTION_GRANTS)] },\n history: {\n file: r.history?.file ?? \".manni/tracevals/history.jsonl\",\n },\n capture: {\n // Beside the judge cache, under the state directory that already travels\n // with the project — which is what puts a manifest next to its trace in\n // the CI patterns the docs describe.\n dir: r.capture?.dir ?? DEFAULT_CAPTURE_DIR,\n },\n fill: {\n // 0.7 matches the manuscript's calibration bar for judged agreement.\n confidenceThreshold: r.fill?.confidenceThreshold ?? 0.7,\n maxEvalsPerArtifact: r.fill?.maxEvalsPerArtifact ?? 8,\n temperature: r.fill?.temperature ?? 0,\n // Separate from the judge cache: different key scheme and value shape.\n cacheDir: r.fill?.cacheDir ?? \".manni/tracevals/cache/fill\",\n maxTurns: r.fill?.maxTurns ?? null,\n },\n calibrate: {\n labels: r.calibrate?.labels ?? DEFAULT_LABELS_FILE,\n sweep: {\n // Spans the range rather than filling it: the first sweep judges the\n // corpus at the largest value here, so a wide grid is the one part of\n // calibration that does cost money.\n ensembleRuns: [...(r.calibrate?.sweep?.ensembleRuns ?? [1, 3, 5])],\n autoPass: [\n ...(r.calibrate?.sweep?.autoPass ?? [0.5, 0.6, 0.7, 0.8, 0.9, 0.95]),\n ],\n autoFail: [\n ...(r.calibrate?.sweep?.autoFail ?? [0.5, 0.6, 0.7, 0.8, 0.9, 0.95]),\n ],\n },\n },\n failOnReview: r.failOnReview ?? true,\n // Always a list, never undefined: the read site concatenates `--require`\n // onto it, and a hole there would be a special case in every caller.\n plugins: [...(r.plugins ?? [])],\n // An observation, not a gate: listing it is opt-in because a real roster\n // runs to hundreds of skills (ADR 01016).\n reportUnusedArtifacts: r.reportUnusedArtifacts ?? false,\n conformance:\n r.conformance === undefined\n ? null\n : {\n hook: {\n provider: hookProvider,\n model: r.conformance.hook?.model ?? null,\n runs: r.conformance.hook?.runs ?? 1,\n },\n include: [...(r.conformance.include ?? [])],\n exclude: [...(r.conformance.exclude ?? [])],\n plans: [...(r.conformance.plans ?? [])],\n },\n };\n // Compilability is not expressible in JSON Schema, and a pattern that cannot\n // compile must fail here rather than at the moment a digest is about to be\n // sent — a dropped redaction pattern is a silent leak.\n compileRedactPatterns(config.judge.redact);\n // Left absent rather than defaulted to a number: `0` is a meaningful limit\n // (\"no false pass at all\"), so it cannot double as \"unset\".\n for (const key of [\"maxFalsePass\", \"maxFalseFail\", \"maxReview\"] as const) {\n if (typeof r.calibrate?.[key] === \"number\") {\n config.calibrate[key] = r.calibrate[key];\n }\n }\n return config;\n}\n\n/** This tool's config, and the directory its relative paths resolve from. */\nexport interface LoadedConfig {\n config: TracevalsConfig;\n /**\n * The directory holding the config file, or `dir` when none was found.\n * Plugin specifiers and the labels default resolve against it, so a\n * committed config means the same thing from any working directory.\n */\n dir: string;\n /**\n * The file's top-level `collections:` (proposal 0041); `[]` with no config.\n *\n * Collections never choose tracevals' inputs — `run` and `calibrate` take\n * traces, `fill` detects artifacts under `--project` — and there is no\n * `--collection`. What they say is *where a relocated `metadata` block\n * lives*, so a declared manifest is read for the evals an artifact no longer\n * carries inline (proposals 0047 and 0049 §1).\n */\n collections: CollectionConfig[];\n /**\n * The config file's absolute path; absent when there is none. A keyless\n * manifest owns what an artifact's schemas mark external (proposal 0068),\n * and those schemas are read from meta's section of this same file.\n */\n path?: string;\n}\n\n/** How a command was told to find its config: `-c` and `--no-config`. */\nexport interface ConfigLookup {\n /** `-c/--config`: read this file instead of discovering one. */\n configPath?: string;\n /** `--no-config`: skip discovery and run on the built-in defaults. */\n noConfig?: boolean;\n}\n\n/**\n * Discover the family config from `dir` (cwd by default) upward to the\n * repository root and return this tool's section (`src/shared/config-file.ts`:\n * `manni.config.yaml` read at its `tracevals:` key, with the family's\n * top-level `providers:` beside it). An absent file — or one that carries only\n * other tools' sections — yields defaults.\n *\n * `-c` names a file and skips the walk; `--no-config` skips the file\n * altogether and runs on the built-in defaults, with `dir` still anchoring\n * whatever the config would otherwise have anchored.\n */\nexport async function discoverConfig(\n dir = process.cwd(),\n lookup: ConfigLookup = {},\n): Promise<LoadedConfig> {\n if (lookup.noConfig === true) {\n // No config means no collections, so no manifest owns anything and every\n // artifact's evals are its own front matter's — the same rule cite states.\n return { config: parseConfig({}), dir, collections: [] };\n }\n const file = await Promise.resolve().then(() =>\n lookup.configPath === undefined\n ? findConfigFileSync(dir, CONFIG_FILE)\n : readConfigFileSync(lookup.configPath, dir, CONFIG_FILE),\n );\n if (file === null) return { config: parseConfig({}), dir, collections: [] };\n return {\n config: parseConfig(file.value ?? {}, {\n source: file.source,\n ...(file.providers !== undefined ? { providers: file.providers } : {}),\n }),\n dir: file.dir,\n collections: file.collections,\n path: file.path,\n };\n}\n\n/** `discoverConfig`, for callers that only want the settings. */\nexport async function loadConfig(\n dir = process.cwd(),\n lookup: ConfigLookup = {},\n): Promise<TracevalsConfig> {\n return (await discoverConfig(dir, lookup)).config;\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"manni:tracevals:config\",\n \"title\": \"tracevals section of manni.config.yaml\",\n \"description\": \"Settings for manni tracevals, held under the `tracevals` key of the config file shared by the manni family of tools. Sibling keys belong to other tools and are not validated here.\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"provider\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Which provider judges out of the loop, and extracts rules: auto, anthropic, openai, claude-cli, or llama-cpp. jev only decides, so it is refused here; name it as conformance.hook.provider. Overrides the family's top-level `providers.provider` for tracevals only. Connection settings — an endpoint, an API key's environment variable, the Claude CLI command — live in that top-level `providers:` map, never here.\"\n },\n \"model\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The model within `provider`, which must be named at this level. Unset, the inference library's default for the winning provider is used; manni pins no model id of its own.\"\n },\n \"judge\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"ensembleRuns\": { \"type\": \"integer\", \"minimum\": 1 },\n \"temperature\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 2 },\n \"zones\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"autoPass\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 },\n \"autoFail\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 }\n }\n },\n \"cacheDir\": { \"type\": \"string\" },\n \"maxTurns\": { \"type\": \"integer\", \"minimum\": 1, \"description\": \"Stop after this many ensemble runs. A cached ensemble spends none. Unset means unbounded; the remaining evals report `skipped` with the reason `turn budget` rather than aborting the run.\" },\n \"redact\": {\n \"type\": \"array\",\n \"description\": \"Extra regular expressions scrubbed from the session digest before it is sent to a judge provider. Applied on top of the built-in secret shapes, never instead of them; each source is compiled with the `g` flag, and a match is replaced with `[redacted]`. Pattern matching is best-effort — --deterministic-only is the only setting that guarantees nothing leaves the machine.\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 }\n }\n }\n },\n \"execution\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Operator grant for executing content-authored code.\",\n \"properties\": {\n \"allow\": {\n \"type\": \"array\",\n \"items\": { \"enum\": [\"frontmatter-commands\"] },\n \"default\": [\"frontmatter-commands\"],\n \"description\": \"Which content-authored code a run may execute. Absent, every grant holds; list fewer to narrow it, or write [] to run none. frontmatter-commands lets `command` evals declared in an artifact's front matter run; without it they report `skipped` with a reason, never `pass`.\"\n }\n }\n },\n \"render\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"maxBlockChars\": { \"type\": \"integer\", \"minimum\": 100 },\n \"maxTotalChars\": {\n \"type\": \"integer\",\n \"minimum\": 1000,\n \"description\": \"Upper bound on the rendered digest, in characters. The timeline always keeps at least 200 characters, so a very long header can push the digest past this bound by up to 200.\"\n }\n }\n },\n \"history\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"file\": { \"type\": \"string\" }\n }\n },\n \"capture\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Session manifests — sha256 of every instruction artifact plus the git SHA, recorded at session start by `manni tracevals capture` and read back by `run` to make staleness exact instead of an mtime guess. See ADR 01024.\",\n \"properties\": {\n \"dir\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Directory manifests are written to and looked for, resolved against the project root. `run` also accepts one placed beside the trace as `<trace>.manifest.json`, and --manifest names one outright.\"\n }\n }\n },\n \"fill\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"confidenceThreshold\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 },\n \"maxEvalsPerArtifact\": { \"type\": \"integer\", \"minimum\": 1 },\n \"temperature\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 2 },\n \"cacheDir\": { \"type\": \"string\" },\n \"maxTurns\": { \"type\": \"integer\", \"minimum\": 1, \"description\": \"Stop after this many inference calls, one per artifact filled. A cached artifact spends none. Unset means unbounded.\" }\n }\n },\n \"calibrate\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Settings for `manni tracevals calibrate` — measuring the tool's verdicts against a human's answers. See ADR 01022.\",\n \"properties\": {\n \"labels\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Default labels sidecar, resolved against this config file's directory. Overridden by --labels.\"\n },\n \"maxFalsePass\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"description\": \"Fail the calibration run (exit 1) above this many false passes — labelled fail, judged pass. Unset by default: a calibration run is a measurement, not a gate.\"\n },\n \"maxFalseFail\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"description\": \"Fail the calibration run above this many false fails — labelled pass, judged fail.\"\n },\n \"maxReview\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"description\": \"Fail the calibration run above this many needs-review outcomes across the whole corpus.\"\n },\n \"sweep\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Values --sweep tries on each axis, one axis at a time with the others held at their configured value. The corpus is judged once at the largest ensembleRuns here and every cell is re-scored from those cached runs, so the grid costs nothing beyond that one run.\",\n \"properties\": {\n \"ensembleRuns\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": { \"type\": \"integer\", \"minimum\": 1 }\n },\n \"autoPass\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 }\n },\n \"autoFail\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 }\n }\n }\n }\n }\n },\n \"conformance\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Checking each turn against the rules the files that govern the agent declare. Present, even as {}, it puts tracevals in play under Claude Code hooks; absent, tracevals stays out of them.\",\n \"properties\": {\n \"hook\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"The judge inside a Stop or SubagentStop hook. Each key falls back to the top-level one of the same name.\",\n \"properties\": {\n \"provider\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The provider that judges inside a hook. Default: tracevals.provider. jev is accepted here, and only here.\"\n },\n \"model\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The model that judges inside a hook. Default: tracevals.model.\"\n },\n \"runs\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"Judge calls per rule inside a hook. A rule blocks only when every run scores it not followed at the bar. jev makes one call and ignores it. Default 1.\"\n }\n }\n },\n \"include\": {\n \"type\": \"array\",\n \"description\": \"Globs, relative to the project root, naming files that govern agents beyond the known formats. Each applies to every turn.\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 }\n },\n \"exclude\": {\n \"type\": \"array\",\n \"description\": \"Globs, relative to the project root, naming files never treated as rule sources, in any format. It removes plan and spec files too.\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 }\n },\n \"plans\": {\n \"type\": \"array\",\n \"default\": [],\n \"description\": \"Globs, relative to the project root, naming files that say what to build, beyond the known spec formats. Each is a rule source once the session touches it.\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 }\n }\n }\n },\n \"failOnReview\": { \"type\": \"boolean\" },\n \"plugins\": {\n \"type\": \"array\",\n \"description\": \"Modules imported before evals are planned, so one calling registerGrader() can add a grader kind the built-ins do not cover. A relative or absolute path resolves against this file's directory, not the working directory; a bare package name resolves the way an import from this file's directory would. Load order is significant: a later entry wins a colliding kind.\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 }\n },\n \"reportUnusedArtifacts\": {\n \"type\": \"boolean\",\n \"description\": \"List every skill and agent the session was offered and never used, rather than only counting them. Off by default: a real roster runs to hundreds of skills.\"\n }\n }\n}\n","/**\n * The calibration labels sidecar (ADR 01022).\n *\n * A label is a human's answer for one `(trace, artifact, eval)`. It lives in\n * its own file rather than in the eval entry for two reasons: the vendored\n * `artifact-evals` vocabulary is docmeta's and `inlineEval` is closed to\n * additions (ADR 01010), and — more importantly — a label is a property of a\n * *corpus and a reviewer*, not of the artifact. Two teams calibrating the same\n * skill against different sessions hold different ground truth, and neither\n * belongs in the SKILL.md.\n */\nimport { readFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { Ajv2020 } from \"ajv/dist/2020.js\";\nimport { parse as parseYaml } from \"yaml\";\nimport labelsSchemaJson from \"./labels-schema.json\" with { type: \"json\" };\nimport { errorMessage } from \"../../shared/errors.js\";\nimport { TracevalsError } from \"../types.js\";\nimport type { ArtifactType } from \"../artifacts/types.js\";\n\nconst labelsSchema = labelsSchemaJson as Record<string, unknown>;\n\n/** Conventional location inside a project; overridable with `--labels`. */\nexport const DEFAULT_LABELS_FILE = \"tracevals/labels.yaml\";\n\n/**\n * What a human decided. `needs-review` is a legitimate label, not a cop-out:\n * an eval you found genuinely ambiguous is the one that tells you whether the\n * review band is set sensibly, and the docs have always asked for a couple.\n */\nexport type LabelOutcome = \"pass\" | \"fail\" | \"needs-review\";\n\nexport interface EvalLabel {\n /** Path exactly as written in the file, for error messages. */\n trace: string;\n /** Resolved absolute path — the join key against the batch corpus. */\n traceFile: string;\n artifact: string;\n /** Only when the file disambiguates a name shared by two artifact kinds. */\n type?: ArtifactType;\n eval: string;\n expected: LabelOutcome;\n note?: string;\n}\n\nconst ajv = new Ajv2020({ allErrors: true });\nconst validate = ajv.compile(labelsSchema);\n\n/**\n * Stable identity for one label, and the duplicate-detection key.\n *\n * The separator is written as a backslash-u escape, never as a literal NUL:\n * the runtime value is identical, but a literal one makes git call the file\n * binary — its diff renders as `Bin 0 -> N bytes` and cannot be reviewed or\n * three-way merged, and `grep` answers `Binary file … matches` and stops.\n * `test/unit/source-text-safety.test.ts` holds the whole tree to this.\n */\nexport const labelKey = (\n traceFile: string,\n artifact: string,\n evalName: string,\n type?: ArtifactType,\n): string => `${traceFile}\\u0000${type ?? \"\"}\\u0000${artifact}\\u0000${evalName}`;\n\n/**\n * Validate a labels document and resolve its trace paths.\n *\n * `file` is the path the text came from; trace paths resolve against **its**\n * directory rather than the working directory, matching how `plugins` resolves\n * against the config file that names them. A labels file travels with its\n * corpus, so it must mean the same thing from any cwd.\n */\nexport function parseLabels(text: string, file: string): EvalLabel[] {\n let raw: unknown;\n try {\n raw = parseYaml(text);\n } catch (err) {\n throw new TracevalsError(\n `could not parse ${file}: ${errorMessage(err)}`,\n );\n }\n if (raw === null || raw === undefined) {\n throw new TracevalsError(`invalid labels file ${file}: it is empty`);\n }\n if (!validate(raw)) {\n const detail = (validate.errors ?? [])\n .map((e) => `${e.instancePath || \"/\"} ${e.message ?? \"invalid\"}`)\n .join(\"; \");\n // The empty-list case gets its own wording: \"must NOT have fewer than 1\n // items\" describes the schema, not the mistake.\n const empty = (validate.errors ?? []).some(\n (e) => e.instancePath === \"/labels\" && e.keyword === \"minItems\",\n );\n throw new TracevalsError(\n empty\n ? `invalid labels file ${file}: it must carry at least one label — an empty one measures nothing`\n : `invalid labels file ${file}: ${detail}`,\n );\n }\n\n const base = dirname(resolve(file));\n const labels: EvalLabel[] = [];\n const seen = new Set<string>();\n for (const entry of (raw as { labels: Record<string, string>[] }).labels) {\n const traceFile = resolve(base, entry.trace as string);\n const type = entry.type as ArtifactType | undefined;\n const key = labelKey(\n traceFile,\n entry.artifact as string,\n entry.eval as string,\n type,\n );\n if (seen.has(key)) {\n // Two answers for one question is not a merge problem to resolve at run\n // time — whichever won would silently decide the measurement.\n throw new TracevalsError(\n `invalid labels file ${file}: duplicate label for ${entry.artifact ?? \"?\"} › ${entry.eval ?? \"?\"} on ${entry.trace ?? \"?\"}`,\n );\n }\n seen.add(key);\n labels.push({\n trace: entry.trace as string,\n traceFile,\n artifact: entry.artifact as string,\n ...(type !== undefined ? { type } : {}),\n eval: entry.eval as string,\n expected: entry.expected as LabelOutcome,\n ...(entry.note !== undefined ? { note: entry.note } : {}),\n });\n }\n return labels;\n}\n\nexport async function loadLabels(file: string): Promise<EvalLabel[]> {\n let text: string;\n try {\n text = await readFile(file, \"utf-8\");\n } catch (err) {\n throw new TracevalsError(\n `could not read labels file ${file}: ${errorMessage(err)}`,\n );\n }\n return parseLabels(text, file);\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"manni:tracevals:calibration-labels\",\n \"title\": \"manni tracevals calibration labels\",\n \"description\": \"Ground truth for `manni tracevals calibrate`: what a human decided a given eval should have produced on a given trace. A sidecar rather than an eval field, because a label belongs to a corpus and a reviewer, not to the artifact — and because the eval vocabulary is docmeta's, vendored byte-identical, with `inlineEval` closed to additions (ADR 01010).\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"version\", \"labels\"],\n \"properties\": {\n \"version\": {\n \"const\": 1,\n \"description\": \"Format version. Pinned so a future shape change is an explicit migration rather than a silently-reinterpreted file.\"\n },\n \"labels\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"description\": \"One entry per (trace, artifact, eval) you have judged by hand.\",\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"trace\", \"artifact\", \"eval\", \"expected\"],\n \"properties\": {\n \"trace\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Path to the trace file, resolved against this file's own directory — not the working directory.\"\n },\n \"artifact\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Artifact name as the report shows it: a skill name, a subagent_type, or a project-rules filename such as CLAUDE.md.\"\n },\n \"type\": {\n \"enum\": [\"skill\", \"agent\", \"project-rules\", \"slash-command\"],\n \"description\": \"Optional disambiguator, needed when one name resolves to two kinds of artifact — a skill and an agent, or a skill and the slash command that types it. Every `ArtifactType` the resolver can produce belongs here: a label whose type this rejects has no way to name the artifact it means.\"\n },\n \"eval\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The eval's id. Shorthand entries with no declared id get a positional one (eval-1, eval-2, ...), so labelling those is only as stable as the order they are written in.\"\n },\n \"expected\": {\n \"enum\": [\"pass\", \"fail\", \"needs-review\"],\n \"description\": \"What you decided. `needs-review` means you found it genuinely ambiguous and want the tool to defer too.\"\n },\n \"note\": {\n \"type\": \"string\",\n \"description\": \"Why you decided that. Carried into the disagreement report, where it is the whole reason a disagreement is actionable.\"\n }\n }\n }\n }\n }\n}\n"],"mappings":"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","names":["Ajv2020","ajv","Ajv2020","validate"]}
1
+ {"version":3,"sources":["../src/tracevals/core/config.ts","../src/tracevals/core/config-schema.json","../src/tracevals/calibrate/labels.ts","../src/tracevals/calibrate/labels-schema.json"],"sourcesContent":["/**\n * Config loading. Every knob flows config → Ajv validate → defaults → CLI\n * override (`??` at the read site) → runtime; parseConfig() fills every\n * default so downstream code never re-applies one.\n *\n * Settings live under a `tracevals:` key in `manni.config.yaml`, one file\n * shared by the whole manni family. Sibling keys belong to other tools and are\n * ignored here, so parseConfig() validates the section — never the file root.\n * Finding the file is the shared loader's job (`src/shared/config-file.ts`).\n */\nimport { Ajv2020 } from \"ajv/dist/2020.js\";\nimport configSchemaJson from \"./config-schema.json\" with { type: \"json\" };\nimport {\n FAMILY_CONFIG_NAMES,\n findConfigFileSync,\n readConfigFileSync,\n type ConfigFileOptions,\n} from \"../../shared/config-file.js\";\nimport type { CollectionConfig } from \"../../shared/collections.js\";\nimport {\n assertKnownProvider,\n type ProvidersConfig,\n} from \"../../shared/providers.js\";\nimport { compileRedactPatterns } from \"../judge/redact.js\";\nimport { JEV, JEV_OUT_OF_LOOP } from \"../judge/provider.js\";\nimport { DEFAULT_CAPTURE_DIR } from \"../capture/types.js\";\nimport { DEFAULT_LABELS_FILE } from \"../calibrate/labels.js\";\nimport { TracevalsError } from \"../types.js\";\nimport {\n configuredGrants,\n EXECUTION_GRANTS,\n isExecutionGrant,\n unknownGrantsMessage,\n type ExecutionGrant,\n} from \"../../shared/execution.js\";\n\nconst configSchema = configSchemaJson as Record<string, unknown>;\n\nexport const DEFAULT_CONFIG_FILENAME =\n FAMILY_CONFIG_NAMES[0] ?? \"manni.config.yaml\";\n\n/**\n * Top-level key holding this tool's settings inside the shared family config.\n * Sibling tools (meta, docevals) own their own keys in the same file.\n */\nexport const CONFIG_SECTION_KEY = \"tracevals\";\n\n/**\n * The section key as an error's instance path spells it. The schema describes\n * the section rather than the file, so Ajv's own paths start below it; a\n * message that said `/provider` would name a key nobody writes at the root.\n */\nconst CONFIG_SECTION_KEY_PATH = `/${CONFIG_SECTION_KEY}`;\n\n/**\n * No legacy filename. The family file is the only one read, so a file named\n * for the tool is not config however it is spelled, and nothing warns about\n * one because nothing looks for it.\n */\nconst CONFIG_FILE: ConfigFileOptions = {\n section: CONFIG_SECTION_KEY,\n legacyNames: [],\n toError: (message) => new TracevalsError(message),\n};\n\nexport interface TracevalsConfig {\n /**\n * Which provider judges, as `tracevals.provider` names it. `null` when the\n * key is absent, which defers to the family's `providers.provider`. The\n * connection settings are never here: they are `providers` below.\n */\n provider: string | null;\n /** The model within `provider`; `null` when unset. manni pins none. */\n model: string | null;\n /** The family's top-level `providers:` map, parsed by the shared loader. */\n providers: ProvidersConfig;\n /** The file as the user would name it, for messages. */\n configSource: string;\n judge: {\n ensembleRuns: number;\n temperature: number;\n zones: { autoPass: number; autoFail: number };\n cacheDir: string;\n /**\n * Ensemble runs this invocation may spend, or `null` for unbounded. A\n * cached ensemble spends none, and an eval the budget cannot cover is\n * `skipped` with the `turn budget` reason rather than dropped.\n */\n maxTurns: number | null;\n /**\n * Extra patterns scrubbed from the session digest before it reaches a\n * provider, applied *on top of* the built-in secret shapes (ADR 01020).\n * Always a list; validated for compilability at load time.\n */\n redact: string[];\n };\n render: {\n maxBlockChars: number;\n maxTotalChars: number;\n };\n /**\n * What content-authored code a run may execute: the grants it holds, every\n * one unless the operator narrows it (proposal 0075). A `command` eval runs\n * only under `frontmatter-commands`; `[]` runs none and reports them\n * `skipped`.\n */\n execution: { allow: ExecutionGrant[] };\n history: {\n file: string;\n };\n /**\n * Session manifests (ADR 01024). `capture` writes one here; `run` looks here\n * for the trace's own, and reports a `skipped` hash check when there is none.\n */\n capture: {\n /** Resolved against the project root, not the working directory. */\n dir: string;\n };\n fill: {\n /** Minimum self-reported confidence a proposal needs to be written. */\n confidenceThreshold: number;\n maxEvalsPerArtifact: number;\n temperature: number;\n cacheDir: string;\n /** Inference calls this invocation may spend, or `null` for unbounded. */\n maxTurns: number | null;\n };\n /**\n * `calibrate` — measuring the judge against a human's answers (ADR 01022).\n * The sweep grid lives here rather than behind flags because the useful\n * range is a property of a corpus, and a corpus outlives an invocation.\n */\n calibrate: {\n /** Labels sidecar, resolved against the config file's directory. */\n labels: string;\n /** Thresholds. Unset means the run measures without gating. */\n maxFalsePass?: number;\n maxFalseFail?: number;\n maxReview?: number;\n sweep: {\n ensembleRuns: number[];\n autoPass: number[];\n autoFail: number[];\n };\n };\n failOnReview: boolean;\n /**\n * Module specifiers imported before evals are planned, so a `registerGrader`\n * call from outside this package lands in time (ADR 01017). Resolved against\n * the config file's directory, in order — a later entry wins a colliding\n * kind. `--require` appends to this list rather than replacing it.\n */\n plugins: string[];\n /** List offered-but-unused artifacts in coverage, not just count them. */\n reportUnusedArtifacts: boolean;\n /**\n * Checking each turn against its rule sources (proposal 0079). `null` when\n * the section is absent, which keeps tracevals out of every hook; `{}` puts\n * it in play with these defaults.\n */\n conformance: ConformanceConfig | null;\n}\n\nexport interface ConformanceConfig {\n /** The in-loop judge. `null` falls back to `tracevals.provider` / `model`. */\n hook: { provider: string | null; model: string | null; runs: number };\n /** Globs of designated rule sources, in scope once read. */\n include: string[];\n /** Globs never treated as rule sources. */\n exclude: string[];\n /** Globs of files that say what to build, in scope once touched (proposal 0080). */\n plans: string[];\n}\n\n// `verbose` puts the parent schema on each error, so an unknown key can be\n// checked against the keys its section does have.\nconst ajv = new Ajv2020({ allErrors: true, verbose: true });\nconst validate = ajv.compile(configSchema);\n\n/**\n * `; did you mean \"ensembleRuns\"?` when `key` is the kebab spelling of a key\n * its section has. Only the exact counterpart: a guess at a near miss is\n * advice that can be wrong, and the kebab spelling is the one mistake a\n * reader of the frontmatter vocabulary is likely to make here.\n */\nfunction camelCaseHint(key: string, parentSchema: unknown): string {\n const camel = key.replace(/-([a-z0-9])/g, (_, c: string) => c.toUpperCase());\n if (camel === key || parentSchema === null || typeof parentSchema !== \"object\") {\n return \"\";\n }\n const properties = (parentSchema as { properties?: unknown }).properties;\n return properties !== null &&\n typeof properties === \"object\" &&\n Object.hasOwn(properties, camel)\n ? `; did you mean \"${camel}\"?`\n : \"\";\n}\n\n/**\n * The hint on an old `provider:` object. The key used to hold a `default` and\n * a section per provider; it is now the provider's name, as `docevals.provider`\n * and `fill.provider` are, and the connection settings moved to the family's\n * top-level `providers:` map, which every tool reads. Ajv's own message says\n * it must be a string, which is true and leaves the reader to find out where\n * the settings went.\n */\nfunction movedProviderHint(instancePath: string, keyword: string): string {\n return instancePath === \"/provider\" && keyword === \"type\"\n ? `; \"provider\" is now a provider name; per-provider settings moved to the top-level providers: map`\n : \"\";\n}\n\n/**\n * The section as the schema admits it: every key optional, because\n * `parseConfig` supplies the defaults. Ajv has checked the document against\n * `config-schema.json` before it is read as this, so the one cast below is\n * where the validated document becomes a typed one.\n */\ninterface RawConfig {\n provider?: string;\n model?: string;\n judge?: {\n ensembleRuns?: number;\n temperature?: number;\n zones?: { autoPass?: number; autoFail?: number };\n cacheDir?: string;\n maxTurns?: number;\n redact?: string[];\n };\n render?: { maxBlockChars?: number; maxTotalChars?: number };\n execution?: { allow?: ExecutionGrant[] };\n history?: { file?: string };\n capture?: { dir?: string };\n fill?: {\n confidenceThreshold?: number;\n maxEvalsPerArtifact?: number;\n temperature?: number;\n cacheDir?: string;\n maxTurns?: number;\n };\n calibrate?: {\n labels?: string;\n maxFalsePass?: number;\n maxFalseFail?: number;\n maxReview?: number;\n sweep?: { ensembleRuns?: number[]; autoPass?: number[]; autoFail?: number[] };\n };\n failOnReview?: boolean;\n plugins?: string[];\n reportUnusedArtifacts?: boolean;\n conformance?: {\n hook?: { provider?: string; model?: string; runs?: number };\n include?: string[];\n exclude?: string[];\n plans?: string[];\n };\n}\n\n/** What the file the section came from carries beside it. */\nexport interface ConfigFileContext {\n /** The file as the user would name it, for messages. */\n source?: string;\n /** The file's top-level `providers:`; `{}` when it declares none. */\n providers?: ProvidersConfig;\n}\n\nexport function parseConfig(\n raw: unknown,\n file: ConfigFileContext = {},\n): TracevalsConfig {\n const source = file.source ?? DEFAULT_CONFIG_FILENAME;\n // Before the schema: Ajv's enum error names neither the value nor the\n // grants that exist, and a grant is the key where a misreading costs most.\n const unknownGrants = configuredGrants(raw).filter((g) => !isExecutionGrant(g));\n if (unknownGrants.length > 0) {\n throw new TracevalsError(`${source}: ${unknownGrantsMessage(unknownGrants)}`);\n }\n if (!validate(raw)) {\n const detail = (validate.errors ?? [])\n .map((e) => {\n // Ajv reports an unknown key against the *parent* object, so the bare\n // message (\"must NOT have additional properties\") leaves the reader to\n // diff their file against the schema to find which key it meant. Name\n // it: the common case is a removed key in an unmigrated config —\n // `judge.maxCostUsd` after the turn budget landed, say — and a\n // migration error that makes you guess is one people work around.\n const extra =\n e.keyword === \"additionalProperties\"\n ? (e.params as { additionalProperty?: string }).additionalProperty\n : undefined;\n return extra !== undefined\n ? `unknown key \"${extra}\"${camelCaseHint(extra, e.parentSchema)}`\n : `${CONFIG_SECTION_KEY_PATH}${e.instancePath} ${e.message ?? \"is invalid\"}` +\n movedProviderHint(e.instancePath, e.keyword);\n })\n .join(\"; \");\n throw new TracevalsError(`${source}: ${detail}`);\n }\n const r = raw as RawConfig;\n // Checked here, with the message every other tool in the family gives, so a\n // typo is caught by every verb and not only the ones that reach a model.\n // Whether a model has a provider to own it waits for the flags: a\n // `--provider`, or the family's `providers.provider`, can supply the\n // provider a configured model needs.\n const provider = r.provider ?? null;\n if (provider !== null) {\n // jev only decides. Out of the loop a provider extracts rules and writes\n // verdicts, which are generations.\n if (provider === JEV) throw new TracevalsError(JEV_OUT_OF_LOOP);\n assertKnownProvider(provider, (message) => new TracevalsError(message));\n }\n const hookProvider = r.conformance?.hook?.provider ?? null;\n if (hookProvider !== null) {\n assertKnownProvider(hookProvider, (message) => new TracevalsError(message), { decisions: true });\n }\n const config: TracevalsConfig = {\n provider,\n model: r.model ?? null,\n providers: file.providers ?? {},\n configSource: source,\n judge: {\n ensembleRuns: r.judge?.ensembleRuns ?? 3,\n temperature: r.judge?.temperature ?? 0,\n zones: {\n autoPass: r.judge?.zones?.autoPass ?? 0.8,\n autoFail: r.judge?.zones?.autoFail ?? 0.8,\n },\n cacheDir: r.judge?.cacheDir ?? \".manni/tracevals/cache\",\n // `null`, not a number: unbounded is a state, and any number here would\n // be a ceiling nobody asked for.\n maxTurns: r.judge?.maxTurns ?? null,\n // Always a list: the render site concatenates nothing onto it, but a\n // hole here would be a special case in every consumer.\n redact: [...(r.judge?.redact ?? [])],\n },\n render: {\n maxBlockChars: r.render?.maxBlockChars ?? 2000,\n maxTotalChars: r.render?.maxTotalChars ?? 150000,\n },\n execution: { allow: [...(r.execution?.allow ?? EXECUTION_GRANTS)] },\n history: {\n file: r.history?.file ?? \".manni/tracevals/history.jsonl\",\n },\n capture: {\n // Beside the judge cache, under the state directory that already travels\n // with the project — which is what puts a manifest next to its trace in\n // the CI patterns the docs describe.\n dir: r.capture?.dir ?? DEFAULT_CAPTURE_DIR,\n },\n fill: {\n // 0.7 matches the manuscript's calibration bar for judged agreement.\n confidenceThreshold: r.fill?.confidenceThreshold ?? 0.7,\n maxEvalsPerArtifact: r.fill?.maxEvalsPerArtifact ?? 8,\n temperature: r.fill?.temperature ?? 0,\n // Separate from the judge cache: different key scheme and value shape.\n cacheDir: r.fill?.cacheDir ?? \".manni/tracevals/cache/fill\",\n maxTurns: r.fill?.maxTurns ?? null,\n },\n calibrate: {\n labels: r.calibrate?.labels ?? DEFAULT_LABELS_FILE,\n sweep: {\n // Spans the range rather than filling it: the first sweep judges the\n // corpus at the largest value here, so a wide grid is the one part of\n // calibration that does cost money.\n ensembleRuns: [...(r.calibrate?.sweep?.ensembleRuns ?? [1, 3, 5])],\n autoPass: [\n ...(r.calibrate?.sweep?.autoPass ?? [0.5, 0.6, 0.7, 0.8, 0.9, 0.95]),\n ],\n autoFail: [\n ...(r.calibrate?.sweep?.autoFail ?? [0.5, 0.6, 0.7, 0.8, 0.9, 0.95]),\n ],\n },\n },\n failOnReview: r.failOnReview ?? true,\n // Always a list, never undefined: the read site concatenates `--require`\n // onto it, and a hole there would be a special case in every caller.\n plugins: [...(r.plugins ?? [])],\n // An observation, not a gate: listing it is opt-in because a real roster\n // runs to hundreds of skills (ADR 01016).\n reportUnusedArtifacts: r.reportUnusedArtifacts ?? false,\n conformance:\n r.conformance === undefined\n ? null\n : {\n hook: {\n provider: hookProvider,\n model: r.conformance.hook?.model ?? null,\n runs: r.conformance.hook?.runs ?? 1,\n },\n include: [...(r.conformance.include ?? [])],\n exclude: [...(r.conformance.exclude ?? [])],\n plans: [...(r.conformance.plans ?? [])],\n },\n };\n // Compilability is not expressible in JSON Schema, and a pattern that cannot\n // compile must fail here rather than at the moment a digest is about to be\n // sent — a dropped redaction pattern is a silent leak.\n compileRedactPatterns(config.judge.redact);\n // Left absent rather than defaulted to a number: `0` is a meaningful limit\n // (\"no false pass at all\"), so it cannot double as \"unset\".\n for (const key of [\"maxFalsePass\", \"maxFalseFail\", \"maxReview\"] as const) {\n if (typeof r.calibrate?.[key] === \"number\") {\n config.calibrate[key] = r.calibrate[key];\n }\n }\n return config;\n}\n\n/** This tool's config, and the directory its relative paths resolve from. */\nexport interface LoadedConfig {\n config: TracevalsConfig;\n /**\n * The directory holding the config file, or `dir` when none was found.\n * Plugin specifiers and the labels default resolve against it, so a\n * committed config means the same thing from any working directory.\n */\n dir: string;\n /**\n * The file's top-level `collections:` (proposal 0041); `[]` with no config.\n *\n * Collections never choose tracevals' inputs — `run` and `calibrate` take\n * traces, `fill` detects artifacts under `--project` — and there is no\n * `--collection`. What they say is *where a relocated `metadata` block\n * lives*, so a declared manifest is read for the evals an artifact no longer\n * carries inline (proposals 0047 and 0049 §1).\n */\n collections: CollectionConfig[];\n /**\n * The config file's absolute path; absent when there is none. A keyless\n * manifest owns what an artifact's schemas mark external (proposal 0068),\n * and those schemas are read from meta's section of this same file.\n */\n path?: string;\n}\n\n/** How a command was told to find its config: `-c` and `--no-config`. */\nexport interface ConfigLookup {\n /** `-c/--config`: read this file instead of discovering one. */\n configPath?: string;\n /** `--no-config`: skip discovery and run on the built-in defaults. */\n noConfig?: boolean;\n}\n\n/**\n * Discover the family config from `dir` (cwd by default) upward to the\n * repository root and return this tool's section (`src/shared/config-file.ts`:\n * `manni.config.yaml` read at its `tracevals:` key, with the family's\n * top-level `providers:` beside it). An absent file — or one that carries only\n * other tools' sections — yields defaults.\n *\n * `-c` names a file and skips the walk; `--no-config` skips the file\n * altogether and runs on the built-in defaults, with `dir` still anchoring\n * whatever the config would otherwise have anchored.\n */\nexport async function discoverConfig(\n dir = process.cwd(),\n lookup: ConfigLookup = {},\n): Promise<LoadedConfig> {\n if (lookup.noConfig === true) {\n // No config means no collections, so no manifest owns anything and every\n // artifact's evals are its own front matter's — the same rule cite states.\n return { config: parseConfig({}), dir, collections: [] };\n }\n const file = await Promise.resolve().then(() =>\n lookup.configPath === undefined\n ? findConfigFileSync(dir, CONFIG_FILE)\n : readConfigFileSync(lookup.configPath, dir, CONFIG_FILE),\n );\n if (file === null) return { config: parseConfig({}), dir, collections: [] };\n return {\n config: parseConfig(file.value ?? {}, {\n source: file.source,\n ...(file.providers !== undefined ? { providers: file.providers } : {}),\n }),\n dir: file.dir,\n collections: file.collections,\n path: file.path,\n };\n}\n\n/** `discoverConfig`, for callers that only want the settings. */\nexport async function loadConfig(\n dir = process.cwd(),\n lookup: ConfigLookup = {},\n): Promise<TracevalsConfig> {\n return (await discoverConfig(dir, lookup)).config;\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"manni:tracevals:config\",\n \"title\": \"tracevals section of manni.config.yaml\",\n \"description\": \"Settings for manni tracevals, held under the `tracevals` key of the config file shared by the manni family of tools. Sibling keys belong to other tools and are not validated here.\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"provider\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Which provider judges out of the loop, and extracts rules: auto, anthropic, openai, claude-cli, or llama-cpp. jev only decides, so it is refused here; name it as conformance.hook.provider. Overrides the family's top-level `providers.provider` for tracevals only. Connection settings — an endpoint, an API key's environment variable, the Claude CLI command — live in that top-level `providers:` map, never here.\"\n },\n \"model\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The model within `provider`, which must be named at this level. Unset, the inference library's default for the winning provider is used; manni pins no model id of its own.\"\n },\n \"judge\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"ensembleRuns\": { \"type\": \"integer\", \"minimum\": 1 },\n \"temperature\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 2 },\n \"zones\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"autoPass\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 },\n \"autoFail\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 }\n }\n },\n \"cacheDir\": { \"type\": \"string\" },\n \"maxTurns\": { \"type\": \"integer\", \"minimum\": 1, \"description\": \"Stop after this many ensemble runs. A cached ensemble spends none. Unset means unbounded; the remaining evals report `skipped` with the reason `turn budget` rather than aborting the run.\" },\n \"redact\": {\n \"type\": \"array\",\n \"description\": \"Extra regular expressions scrubbed from the session digest before it is sent to a judge provider. Applied on top of the built-in secret shapes, never instead of them; each source is compiled with the `g` flag, and a match is replaced with `[redacted]`. Pattern matching is best-effort — --deterministic-only is the only setting that guarantees nothing leaves the machine.\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 }\n }\n }\n },\n \"execution\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Operator grant for executing content-authored code.\",\n \"properties\": {\n \"allow\": {\n \"type\": \"array\",\n \"items\": { \"enum\": [\"frontmatter-commands\"] },\n \"default\": [\"frontmatter-commands\"],\n \"description\": \"Which content-authored code a run may execute. Absent, every grant holds; list fewer to narrow it, or write [] to run none. frontmatter-commands lets `command` evals declared in an artifact's front matter run; without it they report `skipped` with a reason, never `pass`.\"\n }\n }\n },\n \"render\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"maxBlockChars\": { \"type\": \"integer\", \"minimum\": 100 },\n \"maxTotalChars\": {\n \"type\": \"integer\",\n \"minimum\": 1000,\n \"description\": \"Upper bound on the rendered digest, in characters. The timeline always keeps at least 200 characters, so a very long header can push the digest past this bound by up to 200.\"\n }\n }\n },\n \"history\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"file\": { \"type\": \"string\" }\n }\n },\n \"capture\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Session manifests — sha256 of every instruction artifact plus the git SHA, recorded at session start by `manni tracevals capture` and read back by `run` to make staleness exact instead of an mtime guess. See ADR 01024.\",\n \"properties\": {\n \"dir\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Directory manifests are written to and looked for, resolved against the project root. `run` also accepts one placed beside the trace as `<trace>.manifest.json`, and --manifest names one outright.\"\n }\n }\n },\n \"fill\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"confidenceThreshold\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 },\n \"maxEvalsPerArtifact\": { \"type\": \"integer\", \"minimum\": 1 },\n \"temperature\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 2 },\n \"cacheDir\": { \"type\": \"string\" },\n \"maxTurns\": { \"type\": \"integer\", \"minimum\": 1, \"description\": \"Stop after this many inference calls, one per artifact filled. A cached artifact spends none. Unset means unbounded.\" }\n }\n },\n \"calibrate\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Settings for `manni tracevals calibrate` — measuring the tool's verdicts against a human's answers. See ADR 01022.\",\n \"properties\": {\n \"labels\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Default labels sidecar, resolved against this config file's directory. Overridden by --labels.\"\n },\n \"maxFalsePass\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"description\": \"Fail the calibration run (exit 1) above this many false passes — labelled fail, judged pass. Unset by default: a calibration run is a measurement, not a gate.\"\n },\n \"maxFalseFail\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"description\": \"Fail the calibration run above this many false fails — labelled pass, judged fail.\"\n },\n \"maxReview\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"description\": \"Fail the calibration run above this many needs-review outcomes across the whole corpus.\"\n },\n \"sweep\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Values --sweep tries on each axis, one axis at a time with the others held at their configured value. The corpus is judged once at the largest ensembleRuns here and every cell is re-scored from those cached runs, so the grid costs nothing beyond that one run.\",\n \"properties\": {\n \"ensembleRuns\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": { \"type\": \"integer\", \"minimum\": 1 }\n },\n \"autoPass\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 }\n },\n \"autoFail\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 }\n }\n }\n }\n }\n },\n \"conformance\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"Checking each turn against the rules the files that govern the agent declare. Present, even as {}, it puts tracevals in play under Claude Code hooks; absent, tracevals stays out of them.\",\n \"properties\": {\n \"hook\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"description\": \"The judge inside a Stop or SubagentStop hook. Each key falls back to the top-level one of the same name.\",\n \"properties\": {\n \"provider\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The provider that judges inside a hook. Default: tracevals.provider. jev is accepted here, and only here.\"\n },\n \"model\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The model that judges inside a hook. Default: tracevals.model.\"\n },\n \"runs\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"Judge calls per rule inside a hook. A rule blocks only when every run scores it not followed at the bar. jev makes one call and ignores it. Default 1.\"\n }\n }\n },\n \"include\": {\n \"type\": \"array\",\n \"description\": \"Globs, relative to the project root, naming files that govern agents beyond the known formats. Each applies to every turn.\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 }\n },\n \"exclude\": {\n \"type\": \"array\",\n \"description\": \"Globs, relative to the project root, naming files never treated as rule sources, in any format. It removes plan, spec and output style files too. It also matches the sources `prompt`, `plan` and `system-prompt` by name.\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 }\n },\n \"plans\": {\n \"type\": \"array\",\n \"default\": [],\n \"description\": \"Globs, relative to the project root, naming files that say what to build, beyond the known spec formats. Each is a rule source once the session touches it.\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 }\n }\n }\n },\n \"failOnReview\": { \"type\": \"boolean\" },\n \"plugins\": {\n \"type\": \"array\",\n \"description\": \"Modules imported before evals are planned, so one calling registerGrader() can add a grader kind the built-ins do not cover. A relative or absolute path resolves against this file's directory, not the working directory; a bare package name resolves the way an import from this file's directory would. Load order is significant: a later entry wins a colliding kind.\",\n \"items\": { \"type\": \"string\", \"minLength\": 1 }\n },\n \"reportUnusedArtifacts\": {\n \"type\": \"boolean\",\n \"description\": \"List every skill and agent the session was offered and never used, rather than only counting them. Off by default: a real roster runs to hundreds of skills.\"\n }\n }\n}\n","/**\n * The calibration labels sidecar (ADR 01022).\n *\n * A label is a human's answer for one `(trace, artifact, eval)`. It lives in\n * its own file rather than in the eval entry for two reasons: the vendored\n * `artifact-evals` vocabulary is docmeta's and `inlineEval` is closed to\n * additions (ADR 01010), and — more importantly — a label is a property of a\n * *corpus and a reviewer*, not of the artifact. Two teams calibrating the same\n * skill against different sessions hold different ground truth, and neither\n * belongs in the SKILL.md.\n */\nimport { readFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { Ajv2020 } from \"ajv/dist/2020.js\";\nimport { parse as parseYaml } from \"yaml\";\nimport labelsSchemaJson from \"./labels-schema.json\" with { type: \"json\" };\nimport { errorMessage } from \"../../shared/errors.js\";\nimport { TracevalsError } from \"../types.js\";\nimport type { ArtifactType } from \"../artifacts/types.js\";\n\nconst labelsSchema = labelsSchemaJson as Record<string, unknown>;\n\n/** Conventional location inside a project; overridable with `--labels`. */\nexport const DEFAULT_LABELS_FILE = \"tracevals/labels.yaml\";\n\n/**\n * What a human decided. `needs-review` is a legitimate label, not a cop-out:\n * an eval you found genuinely ambiguous is the one that tells you whether the\n * review band is set sensibly, and the docs have always asked for a couple.\n */\nexport type LabelOutcome = \"pass\" | \"fail\" | \"needs-review\";\n\nexport interface EvalLabel {\n /** Path exactly as written in the file, for error messages. */\n trace: string;\n /** Resolved absolute path — the join key against the batch corpus. */\n traceFile: string;\n artifact: string;\n /** Only when the file disambiguates a name shared by two artifact kinds. */\n type?: ArtifactType;\n eval: string;\n expected: LabelOutcome;\n note?: string;\n}\n\nconst ajv = new Ajv2020({ allErrors: true });\nconst validate = ajv.compile(labelsSchema);\n\n/**\n * Stable identity for one label, and the duplicate-detection key.\n *\n * The separator is written as a backslash-u escape, never as a literal NUL:\n * the runtime value is identical, but a literal one makes git call the file\n * binary — its diff renders as `Bin 0 -> N bytes` and cannot be reviewed or\n * three-way merged, and `grep` answers `Binary file … matches` and stops.\n * `test/unit/source-text-safety.test.ts` holds the whole tree to this.\n */\nexport const labelKey = (\n traceFile: string,\n artifact: string,\n evalName: string,\n type?: ArtifactType,\n): string => `${traceFile}\\u0000${type ?? \"\"}\\u0000${artifact}\\u0000${evalName}`;\n\n/**\n * Validate a labels document and resolve its trace paths.\n *\n * `file` is the path the text came from; trace paths resolve against **its**\n * directory rather than the working directory, matching how `plugins` resolves\n * against the config file that names them. A labels file travels with its\n * corpus, so it must mean the same thing from any cwd.\n */\nexport function parseLabels(text: string, file: string): EvalLabel[] {\n let raw: unknown;\n try {\n raw = parseYaml(text);\n } catch (err) {\n throw new TracevalsError(\n `could not parse ${file}: ${errorMessage(err)}`,\n );\n }\n if (raw === null || raw === undefined) {\n throw new TracevalsError(`invalid labels file ${file}: it is empty`);\n }\n if (!validate(raw)) {\n const detail = (validate.errors ?? [])\n .map((e) => `${e.instancePath || \"/\"} ${e.message ?? \"invalid\"}`)\n .join(\"; \");\n // The empty-list case gets its own wording: \"must NOT have fewer than 1\n // items\" describes the schema, not the mistake.\n const empty = (validate.errors ?? []).some(\n (e) => e.instancePath === \"/labels\" && e.keyword === \"minItems\",\n );\n throw new TracevalsError(\n empty\n ? `invalid labels file ${file}: it must carry at least one label — an empty one measures nothing`\n : `invalid labels file ${file}: ${detail}`,\n );\n }\n\n const base = dirname(resolve(file));\n const labels: EvalLabel[] = [];\n const seen = new Set<string>();\n for (const entry of (raw as { labels: Record<string, string>[] }).labels) {\n const traceFile = resolve(base, entry.trace as string);\n const type = entry.type as ArtifactType | undefined;\n const key = labelKey(\n traceFile,\n entry.artifact as string,\n entry.eval as string,\n type,\n );\n if (seen.has(key)) {\n // Two answers for one question is not a merge problem to resolve at run\n // time — whichever won would silently decide the measurement.\n throw new TracevalsError(\n `invalid labels file ${file}: duplicate label for ${entry.artifact ?? \"?\"} › ${entry.eval ?? \"?\"} on ${entry.trace ?? \"?\"}`,\n );\n }\n seen.add(key);\n labels.push({\n trace: entry.trace as string,\n traceFile,\n artifact: entry.artifact as string,\n ...(type !== undefined ? { type } : {}),\n eval: entry.eval as string,\n expected: entry.expected as LabelOutcome,\n ...(entry.note !== undefined ? { note: entry.note } : {}),\n });\n }\n return labels;\n}\n\nexport async function loadLabels(file: string): Promise<EvalLabel[]> {\n let text: string;\n try {\n text = await readFile(file, \"utf-8\");\n } catch (err) {\n throw new TracevalsError(\n `could not read labels file ${file}: ${errorMessage(err)}`,\n );\n }\n return parseLabels(text, file);\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"manni:tracevals:calibration-labels\",\n \"title\": \"manni tracevals calibration labels\",\n \"description\": \"Ground truth for `manni tracevals calibrate`: what a human decided a given eval should have produced on a given trace. A sidecar rather than an eval field, because a label belongs to a corpus and a reviewer, not to the artifact — and because the eval vocabulary is docmeta's, vendored byte-identical, with `inlineEval` closed to additions (ADR 01010).\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"version\", \"labels\"],\n \"properties\": {\n \"version\": {\n \"const\": 1,\n \"description\": \"Format version. Pinned so a future shape change is an explicit migration rather than a silently-reinterpreted file.\"\n },\n \"labels\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"description\": \"One entry per (trace, artifact, eval) you have judged by hand.\",\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"trace\", \"artifact\", \"eval\", \"expected\"],\n \"properties\": {\n \"trace\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Path to the trace file, resolved against this file's own directory — not the working directory.\"\n },\n \"artifact\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Artifact name as the report shows it: a skill name, a subagent_type, or a project-rules filename such as CLAUDE.md.\"\n },\n \"type\": {\n \"enum\": [\"skill\", \"agent\", \"project-rules\", \"slash-command\"],\n \"description\": \"Optional disambiguator, needed when one name resolves to two kinds of artifact — a skill and an agent, or a skill and the slash command that types it. Every `ArtifactType` the resolver can produce belongs here: a label whose type this rejects has no way to name the artifact it means.\"\n },\n \"eval\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"The eval's id. Shorthand entries with no declared id get a positional one (eval-1, eval-2, ...), so labelling those is only as stable as the order they are written in.\"\n },\n \"expected\": {\n \"enum\": [\"pass\", \"fail\", \"needs-review\"],\n \"description\": \"What you decided. `needs-review` means you found it genuinely ambiguous and want the tool to defer too.\"\n },\n \"note\": {\n \"type\": \"string\",\n \"description\": \"Why you decided that. Carried into the disagreement report, where it is the whole reason a disagreement is actionable.\"\n }\n }\n }\n }\n }\n}\n"],"mappings":"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","names":["Ajv2020","ajv","Ajv2020","validate"]}
@@ -3,7 +3,7 @@ import {
3
3
  TERM_FIELDS,
4
4
  displayPath,
5
5
  plural
6
- } from "./chunk-C73RSUIC.js";
6
+ } from "./chunk-IIFADWWI.js";
7
7
  import {
8
8
  palette
9
9
  } from "./chunk-RNVYGWIC.js";
@@ -227,4 +227,4 @@ export {
227
227
  renderValeWiring,
228
228
  renderFormatsPretty
229
229
  };
230
- //# sourceMappingURL=chunk-SM6NOMJS.js.map
230
+ //# sourceMappingURL=chunk-UZKQSWHJ.js.map
@@ -5,7 +5,7 @@ import {
5
5
  listInTree,
6
6
  safeRead,
7
7
  segments
8
- } from "./chunk-APKH2T6E.js";
8
+ } from "./chunk-OOEMKOX6.js";
9
9
  import {
10
10
  TracevalsError
11
11
  } from "./chunk-UKZNLVJW.js";
@@ -171,4 +171,4 @@ async function discoverArtifacts(options) {
171
171
  export {
172
172
  discoverArtifacts
173
173
  };
174
- //# sourceMappingURL=chunk-2KRB3EG7.js.map
174
+ //# sourceMappingURL=chunk-WTEILBKC.js.map
@@ -3,7 +3,7 @@
3
3
  // package.json
4
4
  var package_default = {
5
5
  name: "@hawkeyexl/manni",
6
- version: "4.6.0",
6
+ version: "4.7.0",
7
7
  description: "One command line for documentation that is meant to be checked. `manni meta` validates the presence and format of document metadata (Markdown frontmatter and more) against JSON Schema, built for CI. Formerly docmeta.",
8
8
  type: "module",
9
9
  bin: {
@@ -175,4 +175,4 @@ var package_default = {
175
175
  export {
176
176
  package_default
177
177
  };
178
- //# sourceMappingURL=chunk-PCFG7E6B.js.map
178
+ //# sourceMappingURL=chunk-YSCZL4U5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@hawkeyexl/manni\",\n \"version\": \"4.6.0\",\n \"description\": \"One command line for documentation that is meant to be checked. `manni meta` validates the presence and format of document metadata (Markdown frontmatter and more) against JSON Schema, built for CI. Formerly docmeta.\",\n \"type\": \"module\",\n \"bin\": {\n \"manni\": \"dist/cli.js\",\n \"docmeta\": \"dist/docmeta.js\"\n },\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n },\n \"./graph/runtime\": {\n \"types\": \"./dist/graph/runtime.d.ts\",\n \"import\": \"./dist/graph/runtime.js\"\n },\n \"./graph/embed\": {\n \"types\": \"./dist/graph/embed.d.ts\",\n \"import\": \"./dist/graph/embed.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"schemas\",\n \"plugin\",\n \"shapes\",\n \"templates\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/hawkeyexl/manni.git\"\n },\n \"homepage\": \"https://hawkeyexl.github.io/manni/\",\n \"bugs\": {\n \"url\": \"https://github.com/hawkeyexl/manni/issues\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"engines\": {\n \"node\": \">=24\"\n },\n \"scripts\": {\n \"prebuild\": \"npm run check:deps\",\n \"build\": \"node scripts/clean-dist.mjs && tsup\",\n \"dev\": \"node scripts/clean-dist.mjs && tsup --watch\",\n \"pretest\": \"npm run check:deps\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:graph:real\": \"vitest run --config vitest.graph-real.config.ts\",\n \"test:coverage\": \"vitest run --coverage\",\n \"pretypecheck\": \"npm run check:deps\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint .\",\n \"check:deps\": \"node scripts/check-deps.mjs\",\n \"query:ui\": \"npm run build && node dist/cli.js meta query --db .manni/meta/query.db && node scripts/query-ui.mjs .manni/meta/query.db\",\n \"check:tgdp-pin\": \"node scripts/lint-check-tgdp-pin.mjs\",\n \"smoke:lint\": \"npm run build && node scripts/lint-smoke.mjs\",\n \"docs:check-cli\": \"node scripts/check-cli-reference.mjs\",\n \"docs:check-action\": \"node scripts/check-action-reference.mjs\",\n \"docs:check-api\": \"node scripts/check-api-reference.mjs\",\n \"docs:check-links\": \"node scripts/check-doc-links.mjs\",\n \"docs:check-docevals\": \"node dist/cli.js docevals run --deterministic-only --no-generate\",\n \"docs:check-graph\": \"node scripts/check-docs-graph.mjs\",\n \"docs:check-tables\": \"node scripts/check-table-rows.mjs\",\n \"docs:check-versions\": \"node scripts/check-versions.mjs\",\n \"docs:sync-versions\": \"node scripts/sync-versions.mjs\",\n \"schemas:sync\": \"node scripts/sync-builtin-schemas.mjs\",\n \"schemas:check\": \"node scripts/check-builtin-schemas.mjs\",\n \"schemas:check-published\": \"node scripts/check-published-schemas.mjs\",\n \"commitlint\": \"commitlint --edit\",\n \"semantic-release\": \"semantic-release\",\n \"prepare\": \"node scripts/prepare.mjs\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"keywords\": [\n \"frontmatter\",\n \"metadata\",\n \"json-schema\",\n \"markdown\",\n \"validation\",\n \"cli\",\n \"ci\",\n \"okf\"\n ],\n \"license\": \"MIT\",\n \"overrides\": {\n \"esbuild\": \"^0.28.2\"\n },\n \"dependencies\": {\n \"@apidevtools/json-schema-ref-parser\": \"^11.9.3\",\n \"@asciidoctor/core\": \"^3.0.4\",\n \"@axe-core/playwright\": \"^4.13.0\",\n \"@hawkeyexl/inference\": \"^0.5.0\",\n \"@inquirer/prompts\": \"^7.10.1\",\n \"@types/n3\": \"^1.26.3\",\n \"@xmldom/xmldom\": \"^0.9.12\",\n \"ajv\": \"^8.17.1\",\n \"ajv-draft-04\": \"^1.0.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"commander\": \"^15.0.0\",\n \"fast-glob\": \"^3.3.2\",\n \"github-slugger\": \"^2.0.0\",\n \"mdast-util-to-string\": \"^4.0.0\",\n \"minisearch\": \"^7.2.0\",\n \"n3\": \"^1.26.0\",\n \"parse5\": \"^8.0.1\",\n \"picocolors\": \"^1.1.1\",\n \"picomatch\": \"^4.0.7\",\n \"playwright-core\": \"^1.63.0\",\n \"rdf-validate-shacl\": \"^0.6.5\",\n \"remark-frontmatter\": \"^5.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n \"remark-mdx\": \"^3.1.1\",\n \"remark-parse\": \"^11.0.0\",\n \"smol-toml\": \"^1.8.0\",\n \"unified\": \"^11.0.5\",\n \"unist-util-visit\": \"^5.1.0\",\n \"yaml\": \"^2.6.1\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^21.2.2\",\n \"@commitlint/config-conventional\": \"^21.2.2\",\n \"@comunica/query-sparql-rdfjs-lite\": \"^5.3.0\",\n \"@eslint/js\": \"^10.0.1\",\n \"@rdfjs/types\": \"^2.0.1\",\n \"@semantic-release/changelog\": \"^6.0.3\",\n \"@semantic-release/commit-analyzer\": \"^13.0.1\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@semantic-release/github\": \"^12.0.8\",\n \"@semantic-release/npm\": \"^13.1.5\",\n \"@semantic-release/release-notes-generator\": \"^14.1.1\",\n \"@types/jsonld\": \"^1.5.15\",\n \"@types/mdast\": \"^4.0.4\",\n \"@types/node\": \"^26.3.0\",\n \"@types/picomatch\": \"^4.0.3\",\n \"@types/unist\": \"^3.0.3\",\n \"@types/yauzl\": \"^3.4.0\",\n \"@vitest/coverage-v8\": \"^4.1.11\",\n \"eslint\": \"^10.9.1\",\n \"globals\": \"^17.11.0\",\n \"husky\": \"^9.1.7\",\n \"jsonld\": \"^9.0.0\",\n \"rdfxml-streaming-parser\": \"^3.3.0\",\n \"semantic-release\": \"^25.0.9\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^6.0.3\",\n \"typescript-eslint\": \"^8.68.0\",\n \"vitest\": \"^4.1.11\",\n \"yauzl\": \"^3.4.0\"\n },\n \"peerDependencies\": {\n \"@huggingface/transformers\": \">=4\",\n \"node-llama-cpp\": \"^3.19.0\"\n },\n \"peerDependenciesMeta\": {\n \"@huggingface/transformers\": {\n \"optional\": true\n },\n \"node-llama-cpp\": {\n \"optional\": true\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@hawkeyexl/manni\",\n \"version\": \"4.7.0\",\n \"description\": \"One command line for documentation that is meant to be checked. `manni meta` validates the presence and format of document metadata (Markdown frontmatter and more) against JSON Schema, built for CI. Formerly docmeta.\",\n \"type\": \"module\",\n \"bin\": {\n \"manni\": \"dist/cli.js\",\n \"docmeta\": \"dist/docmeta.js\"\n },\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n },\n \"./graph/runtime\": {\n \"types\": \"./dist/graph/runtime.d.ts\",\n \"import\": \"./dist/graph/runtime.js\"\n },\n \"./graph/embed\": {\n \"types\": \"./dist/graph/embed.d.ts\",\n \"import\": \"./dist/graph/embed.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"schemas\",\n \"plugin\",\n \"shapes\",\n \"templates\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/hawkeyexl/manni.git\"\n },\n \"homepage\": \"https://hawkeyexl.github.io/manni/\",\n \"bugs\": {\n \"url\": \"https://github.com/hawkeyexl/manni/issues\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"engines\": {\n \"node\": \">=24\"\n },\n \"scripts\": {\n \"prebuild\": \"npm run check:deps\",\n \"build\": \"node scripts/clean-dist.mjs && tsup\",\n \"dev\": \"node scripts/clean-dist.mjs && tsup --watch\",\n \"pretest\": \"npm run check:deps\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:graph:real\": \"vitest run --config vitest.graph-real.config.ts\",\n \"test:coverage\": \"vitest run --coverage\",\n \"pretypecheck\": \"npm run check:deps\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint .\",\n \"check:deps\": \"node scripts/check-deps.mjs\",\n \"query:ui\": \"npm run build && node dist/cli.js meta query --db .manni/meta/query.db && node scripts/query-ui.mjs .manni/meta/query.db\",\n \"check:tgdp-pin\": \"node scripts/lint-check-tgdp-pin.mjs\",\n \"smoke:lint\": \"npm run build && node scripts/lint-smoke.mjs\",\n \"docs:check-cli\": \"node scripts/check-cli-reference.mjs\",\n \"docs:check-action\": \"node scripts/check-action-reference.mjs\",\n \"docs:check-api\": \"node scripts/check-api-reference.mjs\",\n \"docs:check-links\": \"node scripts/check-doc-links.mjs\",\n \"docs:check-docevals\": \"node dist/cli.js docevals run --deterministic-only --no-generate\",\n \"docs:check-graph\": \"node scripts/check-docs-graph.mjs\",\n \"docs:check-tables\": \"node scripts/check-table-rows.mjs\",\n \"docs:check-versions\": \"node scripts/check-versions.mjs\",\n \"docs:sync-versions\": \"node scripts/sync-versions.mjs\",\n \"schemas:sync\": \"node scripts/sync-builtin-schemas.mjs\",\n \"schemas:check\": \"node scripts/check-builtin-schemas.mjs\",\n \"schemas:check-published\": \"node scripts/check-published-schemas.mjs\",\n \"commitlint\": \"commitlint --edit\",\n \"semantic-release\": \"semantic-release\",\n \"prepare\": \"node scripts/prepare.mjs\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"keywords\": [\n \"frontmatter\",\n \"metadata\",\n \"json-schema\",\n \"markdown\",\n \"validation\",\n \"cli\",\n \"ci\",\n \"okf\"\n ],\n \"license\": \"MIT\",\n \"overrides\": {\n \"esbuild\": \"^0.28.2\"\n },\n \"dependencies\": {\n \"@apidevtools/json-schema-ref-parser\": \"^11.9.3\",\n \"@asciidoctor/core\": \"^3.0.4\",\n \"@axe-core/playwright\": \"^4.13.0\",\n \"@hawkeyexl/inference\": \"^0.5.0\",\n \"@inquirer/prompts\": \"^7.10.1\",\n \"@types/n3\": \"^1.26.3\",\n \"@xmldom/xmldom\": \"^0.9.12\",\n \"ajv\": \"^8.17.1\",\n \"ajv-draft-04\": \"^1.0.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"commander\": \"^15.0.0\",\n \"fast-glob\": \"^3.3.2\",\n \"github-slugger\": \"^2.0.0\",\n \"mdast-util-to-string\": \"^4.0.0\",\n \"minisearch\": \"^7.2.0\",\n \"n3\": \"^1.26.0\",\n \"parse5\": \"^8.0.1\",\n \"picocolors\": \"^1.1.1\",\n \"picomatch\": \"^4.0.7\",\n \"playwright-core\": \"^1.63.0\",\n \"rdf-validate-shacl\": \"^0.6.5\",\n \"remark-frontmatter\": \"^5.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n \"remark-mdx\": \"^3.1.1\",\n \"remark-parse\": \"^11.0.0\",\n \"smol-toml\": \"^1.8.0\",\n \"unified\": \"^11.0.5\",\n \"unist-util-visit\": \"^5.1.0\",\n \"yaml\": \"^2.6.1\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^21.2.2\",\n \"@commitlint/config-conventional\": \"^21.2.2\",\n \"@comunica/query-sparql-rdfjs-lite\": \"^5.3.0\",\n \"@eslint/js\": \"^10.0.1\",\n \"@rdfjs/types\": \"^2.0.1\",\n \"@semantic-release/changelog\": \"^6.0.3\",\n \"@semantic-release/commit-analyzer\": \"^13.0.1\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@semantic-release/github\": \"^12.0.8\",\n \"@semantic-release/npm\": \"^13.1.5\",\n \"@semantic-release/release-notes-generator\": \"^14.1.1\",\n \"@types/jsonld\": \"^1.5.15\",\n \"@types/mdast\": \"^4.0.4\",\n \"@types/node\": \"^26.3.0\",\n \"@types/picomatch\": \"^4.0.3\",\n \"@types/unist\": \"^3.0.3\",\n \"@types/yauzl\": \"^3.4.0\",\n \"@vitest/coverage-v8\": \"^4.1.11\",\n \"eslint\": \"^10.9.1\",\n \"globals\": \"^17.11.0\",\n \"husky\": \"^9.1.7\",\n \"jsonld\": \"^9.0.0\",\n \"rdfxml-streaming-parser\": \"^3.3.0\",\n \"semantic-release\": \"^25.0.9\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^6.0.3\",\n \"typescript-eslint\": \"^8.68.0\",\n \"vitest\": \"^4.1.11\",\n \"yauzl\": \"^3.4.0\"\n },\n \"peerDependencies\": {\n \"@huggingface/transformers\": \">=4\",\n \"node-llama-cpp\": \"^3.19.0\"\n },\n \"peerDependenciesMeta\": {\n \"@huggingface/transformers\": {\n \"optional\": true\n },\n \"node-llama-cpp\": {\n \"optional\": true\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -21,7 +21,7 @@ import {
21
21
  sidecarsFor,
22
22
  sourceIndexFor,
23
23
  wordShare
24
- } from "./chunk-QW77LCOU.js";
24
+ } from "./chunk-NZ6TNSCU.js";
25
25
  import {
26
26
  applyMarkerMoves,
27
27
  blockMatches,
@@ -34,7 +34,7 @@ import {
34
34
  spellAt,
35
35
  spellElsewhere,
36
36
  unitAt
37
- } from "./chunk-UAKNZVCD.js";
37
+ } from "./chunk-2ZWTSRE5.js";
38
38
  import {
39
39
  ANY_FENCE,
40
40
  CiteError,
@@ -62,10 +62,10 @@ import {
62
62
  spellSource,
63
63
  tooWide,
64
64
  unitHolding
65
- } from "./chunk-MHM4QEBV.js";
65
+ } from "./chunk-IZBBXKMJ.js";
66
66
  import {
67
67
  ensureEncryptionKey
68
- } from "./chunk-GREQKO6M.js";
68
+ } from "./chunk-CR3HZERW.js";
69
69
  import {
70
70
  ENCRYPTION_KEY_ENV,
71
71
  STDIN_REQUIRES_AS,
@@ -84,7 +84,7 @@ import {
84
84
  splitLines,
85
85
  toBodyLines,
86
86
  toFileLines
87
- } from "./chunk-TUAAR3MM.js";
87
+ } from "./chunk-5UB47BEV.js";
88
88
  import {
89
89
  DocmetaError,
90
90
  STDIN_LABEL,
@@ -92,7 +92,7 @@ import {
92
92
  extractorByName,
93
93
  locateFrontmatter,
94
94
  writeFileAtomic
95
- } from "./chunk-KCOFEWV5.js";
95
+ } from "./chunk-MSMB6XOS.js";
96
96
  import {
97
97
  isEncryptedValue
98
98
  } from "./chunk-XKBEHKWO.js";
@@ -2160,4 +2160,4 @@ export {
2160
2160
  runRemove,
2161
2161
  runUpdate
2162
2162
  };
2163
- //# sourceMappingURL=chunk-IY7NYNPZ.js.map
2163
+ //# sourceMappingURL=chunk-ZEXGGGLW.js.map
@@ -8,7 +8,7 @@ import {
8
8
  resolvePages,
9
9
  runConfigOptions,
10
10
  withExternalMetadata
11
- } from "./chunk-Z4IZGEM3.js";
11
+ } from "./chunk-LDKIIZDW.js";
12
12
  import {
13
13
  SUMMARY_FORMATS,
14
14
  parseFormat
@@ -93,4 +93,4 @@ export {
93
93
  runList,
94
94
  renderList
95
95
  };
96
- //# sourceMappingURL=chunk-NTWW7J76.js.map
96
+ //# sourceMappingURL=chunk-ZKAKA54B.js.map
@@ -10,7 +10,7 @@ import {
10
10
  pageMarks,
11
11
  pageSchemaSet,
12
12
  withValueAt
13
- } from "./chunk-TUAAR3MM.js";
13
+ } from "./chunk-5UB47BEV.js";
14
14
  import {
15
15
  DocmetaError,
16
16
  escapePointerSegment,
@@ -20,7 +20,7 @@ import {
20
20
  rebaseConfigSchemaRefs,
21
21
  schemaTrustRoot,
22
22
  supportedExtensions
23
- } from "./chunk-KCOFEWV5.js";
23
+ } from "./chunk-MSMB6XOS.js";
24
24
  import {
25
25
  decryptValue,
26
26
  encryptValue,
@@ -195,4 +195,4 @@ export {
195
195
  metaPageView,
196
196
  declaredAt
197
197
  };
198
- //# sourceMappingURL=chunk-TLXE7LYK.js.map
198
+ //# sourceMappingURL=chunk-ZKCNPKUO.js.map
@@ -5,7 +5,7 @@ import {
5
5
  parserForExtension,
6
6
  supportedExtensions,
7
7
  unsupportedFormatMessage
8
- } from "./chunk-73TC4DYH.js";
8
+ } from "./chunk-6URSCTTX.js";
9
9
  import {
10
10
  packageRoot
11
11
  } from "./chunk-TIUTIOFB.js";
@@ -30,7 +30,7 @@ import {
30
30
  gitignoreOptions,
31
31
  isErrorSeverity,
32
32
  resolveTargetSet
33
- } from "./chunk-KCOFEWV5.js";
33
+ } from "./chunk-MSMB6XOS.js";
34
34
  import {
35
35
  ditaOtHome,
36
36
  findConfigFile,
@@ -42,7 +42,7 @@ import {
42
42
  } from "./chunk-HX44GB4Z.js";
43
43
  import {
44
44
  package_default
45
- } from "./chunk-PCFG7E6B.js";
45
+ } from "./chunk-YSCZL4U5.js";
46
46
  import {
47
47
  ToolError,
48
48
  errorMessage
@@ -2461,4 +2461,4 @@ export {
2461
2461
  STDIN_LABEL,
2462
2462
  runLint
2463
2463
  };
2464
- //# sourceMappingURL=chunk-SWSTHZBI.js.map
2464
+ //# sourceMappingURL=chunk-ZNE25EAR.js.map
@@ -7,16 +7,16 @@ import {
7
7
  loadGraderPlugins,
8
8
  parseNewerThan,
9
9
  urlManifestRefusal
10
- } from "./chunk-PL4UAF4S.js";
10
+ } from "./chunk-QP5X66TO.js";
11
11
  import {
12
12
  discoverArtifacts
13
- } from "./chunk-2KRB3EG7.js";
13
+ } from "./chunk-WTEILBKC.js";
14
14
  import {
15
15
  discoverTraces
16
16
  } from "./chunk-4TSWU2SU.js";
17
17
  import {
18
18
  discoverConfig
19
- } from "./chunk-XPEWUK7J.js";
19
+ } from "./chunk-TPVOOTMN.js";
20
20
  import {
21
21
  assertProviderSelection,
22
22
  constructProvider,
@@ -36,7 +36,7 @@ import {
36
36
  externalWriteWarnings,
37
37
  mergeMetaProvenance,
38
38
  offerExternalHomes
39
- } from "./chunk-GREQKO6M.js";
39
+ } from "./chunk-CR3HZERW.js";
40
40
  import {
41
41
  keyHome,
42
42
  marksValidator,
@@ -44,12 +44,12 @@ import {
44
44
  readManifestOrEmpty,
45
45
  readManifestValue,
46
46
  spliceManifestValue
47
- } from "./chunk-TUAAR3MM.js";
47
+ } from "./chunk-5UB47BEV.js";
48
48
  import {
49
49
  DocmetaError,
50
50
  extractFrontmatter,
51
51
  writeFileAtomic
52
- } from "./chunk-KCOFEWV5.js";
52
+ } from "./chunk-MSMB6XOS.js";
53
53
  import {
54
54
  palette
55
55
  } from "./chunk-RNVYGWIC.js";
@@ -1191,4 +1191,4 @@ export {
1191
1191
  runFill,
1192
1192
  renderFill
1193
1193
  };
1194
- //# sourceMappingURL=chunk-B3TS4WRM.js.map
1194
+ //# sourceMappingURL=chunk-ZPP75QWG.js.map
@@ -5,7 +5,7 @@ import {
5
5
  runTemplates,
6
6
  runTemplatesInfer,
7
7
  runTools
8
- } from "./chunk-MWBJ3KTF.js";
8
+ } from "./chunk-IOL74S4J.js";
9
9
  import {
10
10
  LINT_JOBS,
11
11
  TOOLS_BY_JOB,
@@ -13,21 +13,21 @@ import {
13
13
  rebaseConfig,
14
14
  resolveStructureTool,
15
15
  runLint
16
- } from "./chunk-SWSTHZBI.js";
17
- import "./chunk-73TC4DYH.js";
16
+ } from "./chunk-ZNE25EAR.js";
17
+ import "./chunk-6URSCTTX.js";
18
18
  import "./chunk-TIUTIOFB.js";
19
19
  import {
20
20
  render,
21
21
  renderTemplates,
22
22
  renderTools
23
- } from "./chunk-UJSGS2Y5.js";
23
+ } from "./chunk-7XZ6INKO.js";
24
24
  import "./chunk-GLP5PSXB.js";
25
25
  import "./chunk-TBAMBLF3.js";
26
26
  import {
27
27
  LintError
28
28
  } from "./chunk-YGFIQ6Y5.js";
29
- import "./chunk-TLXE7LYK.js";
30
- import "./chunk-GREQKO6M.js";
29
+ import "./chunk-ZKCNPKUO.js";
30
+ import "./chunk-CR3HZERW.js";
31
31
  import {
32
32
  collect,
33
33
  configOption,
@@ -35,16 +35,16 @@ import {
35
35
  readStdin,
36
36
  reportConfig,
37
37
  splitList
38
- } from "./chunk-TUAAR3MM.js";
38
+ } from "./chunk-5UB47BEV.js";
39
39
  import {
40
40
  OMITTED_WHEN_CLEAN,
41
41
  REPORT_FORMATS,
42
42
  REPORT_FORMAT_LIST,
43
43
  isReportFormat
44
- } from "./chunk-5G53XATW.js";
44
+ } from "./chunk-5VWDIWOH.js";
45
45
  import {
46
46
  STDIN_TOKEN
47
- } from "./chunk-KCOFEWV5.js";
47
+ } from "./chunk-MSMB6XOS.js";
48
48
  import {
49
49
  fail
50
50
  } from "./chunk-YEUYKR62.js";
@@ -59,7 +59,7 @@ import {
59
59
  import "./chunk-QCHVR4ZM.js";
60
60
  import {
61
61
  package_default
62
- } from "./chunk-PCFG7E6B.js";
62
+ } from "./chunk-YSCZL4U5.js";
63
63
  import "./chunk-OWBRDNRZ.js";
64
64
  import "./chunk-G3T47CFV.js";
65
65
  import "./chunk-2H7UOFLK.js";
@@ -344,4 +344,4 @@ function buildProgram() {
344
344
  export {
345
345
  buildProgram
346
346
  };
347
- //# sourceMappingURL=cli-NIG4N3XM.js.map
347
+ //# sourceMappingURL=cli-37SRAYNE.js.map