@hawkeyexl/manni 4.5.0 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/README.md +1 -1
  2. package/dist/batch-OZOACN4G.js +41 -0
  3. package/dist/build-Z5VOVADH.js +32 -0
  4. package/dist/calibrate-TZYT42DR.js +36 -0
  5. package/dist/capture-SL4MNDDP.js +34 -0
  6. package/dist/check-5OMA42Y6.js +26 -0
  7. package/dist/{check-ESNS7ZBC.js → check-OAJWC3WD.js} +7 -5
  8. package/dist/{check-RQIIIURI.js → check-PKY7KTQE.js} +13 -14
  9. package/dist/check-WB2QDHJQ.js +880 -0
  10. package/dist/check-WB2QDHJQ.js.map +1 -0
  11. package/dist/{chunk-F2OVHJNC.js → chunk-2JFPBZJK.js} +11 -11
  12. package/dist/{chunk-CP4ZM43V.js → chunk-2KRB3EG7.js} +2 -2
  13. package/dist/{chunk-QLUMKWQQ.js → chunk-2M6DVNI5.js} +10 -6
  14. package/dist/{chunk-QLUMKWQQ.js.map → chunk-2M6DVNI5.js.map} +1 -1
  15. package/dist/{chunk-HQFVJDEN.js → chunk-3NWX34ZI.js} +19 -19
  16. package/dist/{chunk-TCC737IS.js → chunk-5G53XATW.js} +4 -4
  17. package/dist/{chunk-B7XUEQF3.js → chunk-6KKZXB2O.js} +7 -5
  18. package/dist/{chunk-B7XUEQF3.js.map → chunk-6KKZXB2O.js.map} +1 -1
  19. package/dist/{chunk-SNEHX4VE.js → chunk-733Y2STG.js} +2 -2
  20. package/dist/{chunk-ELZ2IIOF.js → chunk-73TC4DYH.js} +2 -2
  21. package/dist/{chunk-QY3DOZMS.js → chunk-7WRP5FFP.js} +4 -4
  22. package/dist/{chunk-3R5Y3XOL.js → chunk-APKH2T6E.js} +29 -591
  23. package/dist/chunk-APKH2T6E.js.map +1 -0
  24. package/dist/{chunk-FLF6AECQ.js → chunk-B3TS4WRM.js} +17 -15
  25. package/dist/{chunk-FLF6AECQ.js.map → chunk-B3TS4WRM.js.map} +1 -1
  26. package/dist/chunk-BWCWTHYS.js +146 -0
  27. package/dist/chunk-BWCWTHYS.js.map +1 -0
  28. package/dist/{chunk-C6HZ6C5T.js → chunk-C3B2VJNC.js} +2 -2
  29. package/dist/{chunk-NN4ASVTY.js → chunk-C73RSUIC.js} +4 -4
  30. package/dist/chunk-CU57HT2E.js +116 -0
  31. package/dist/chunk-CU57HT2E.js.map +1 -0
  32. package/dist/chunk-CWXZ2MRT.js +222 -0
  33. package/dist/chunk-CWXZ2MRT.js.map +1 -0
  34. package/dist/{chunk-GAZFKZHM.js → chunk-DC5DDJVE.js} +6 -6
  35. package/dist/{chunk-52PDIZKV.js → chunk-ECVQNGTH.js} +3 -3
  36. package/dist/chunk-FLAO4ZS3.js +502 -0
  37. package/dist/chunk-FLAO4ZS3.js.map +1 -0
  38. package/dist/chunk-FQGLRJGX.js +174 -0
  39. package/dist/chunk-FQGLRJGX.js.map +1 -0
  40. package/dist/{chunk-XWFNO5PO.js → chunk-GAJIJKET.js} +3 -3
  41. package/dist/{chunk-QCBICNKC.js → chunk-GREQKO6M.js} +202 -54
  42. package/dist/chunk-GREQKO6M.js.map +1 -0
  43. package/dist/chunk-HX44GB4Z.js +30 -0
  44. package/dist/chunk-HX44GB4Z.js.map +1 -0
  45. package/dist/{chunk-7ZUCEMCY.js → chunk-IY7NYNPZ.js} +9 -11
  46. package/dist/{chunk-7ZUCEMCY.js.map → chunk-IY7NYNPZ.js.map} +1 -1
  47. package/dist/{chunk-527HHQPS.js → chunk-KCOFEWV5.js} +6 -4
  48. package/dist/{chunk-527HHQPS.js.map → chunk-KCOFEWV5.js.map} +1 -1
  49. package/dist/chunk-M2RLHZ4J.js +849 -0
  50. package/dist/chunk-M2RLHZ4J.js.map +1 -0
  51. package/dist/{chunk-K3U5F2QT.js → chunk-M6GSS72T.js} +12 -12
  52. package/dist/{chunk-UK2I3ACY.js → chunk-MHM4QEBV.js} +4 -4
  53. package/dist/{chunk-EL2BZTDL.js → chunk-MOWMCEOJ.js} +13 -11
  54. package/dist/{chunk-EL2BZTDL.js.map → chunk-MOWMCEOJ.js.map} +1 -1
  55. package/dist/{chunk-OIZ3XMKB.js → chunk-MWBJ3KTF.js} +4 -4
  56. package/dist/chunk-N7JSEDSC.js +233 -0
  57. package/dist/chunk-N7JSEDSC.js.map +1 -0
  58. package/dist/{chunk-MZC62HPZ.js → chunk-NBMPHD4I.js} +2 -2
  59. package/dist/{chunk-YA63PVWI.js → chunk-NHHOPZRA.js} +12 -10
  60. package/dist/{chunk-YA63PVWI.js.map → chunk-NHHOPZRA.js.map} +1 -1
  61. package/dist/{chunk-DX32P2DT.js → chunk-NTWW7J76.js} +2 -2
  62. package/dist/{chunk-6XTQDFGP.js → chunk-PCFG7E6B.js} +3 -3
  63. package/dist/{chunk-6XTQDFGP.js.map → chunk-PCFG7E6B.js.map} +1 -1
  64. package/dist/{chunk-SJO2FTPG.js → chunk-PL4UAF4S.js} +73 -1304
  65. package/dist/chunk-PL4UAF4S.js.map +1 -0
  66. package/dist/chunk-QCHVR4ZM.js +286 -0
  67. package/dist/chunk-QCHVR4ZM.js.map +1 -0
  68. package/dist/{chunk-JQU7FHYH.js → chunk-QW77LCOU.js} +10 -10
  69. package/dist/{chunk-IA7BMIPE.js → chunk-SM6NOMJS.js} +2 -2
  70. package/dist/{chunk-DE7JSWXV.js → chunk-SWSTHZBI.js} +8 -6
  71. package/dist/{chunk-DE7JSWXV.js.map → chunk-SWSTHZBI.js.map} +1 -1
  72. package/dist/{chunk-NGK3N6F2.js → chunk-T6SYGLWR.js} +3 -3
  73. package/dist/chunk-TH4JVQPF.js +133 -0
  74. package/dist/chunk-TH4JVQPF.js.map +1 -0
  75. package/dist/{chunk-TVIX653Q.js → chunk-TLXE7LYK.js} +4 -4
  76. package/dist/{chunk-HVFR66GQ.js → chunk-TUAAR3MM.js} +3280 -283
  77. package/dist/chunk-TUAAR3MM.js.map +1 -0
  78. package/dist/{chunk-TA42STP7.js → chunk-UAKNZVCD.js} +4 -4
  79. package/dist/{chunk-C3KI45RF.js → chunk-UJSGS2Y5.js} +4 -4
  80. package/dist/{chunk-ZX43SRZR.js → chunk-UWQ2UVHE.js} +8 -6
  81. package/dist/{chunk-ZX43SRZR.js.map → chunk-UWQ2UVHE.js.map} +1 -1
  82. package/dist/chunk-WQWKYAAK.js +86 -0
  83. package/dist/chunk-WQWKYAAK.js.map +1 -0
  84. package/dist/{chunk-LJ2RDH3F.js → chunk-XG6PVB5S.js} +1 -23
  85. package/dist/chunk-XG6PVB5S.js.map +1 -0
  86. package/dist/{chunk-Q35YIDBV.js → chunk-XKBEHKWO.js} +29 -264
  87. package/dist/chunk-XKBEHKWO.js.map +1 -0
  88. package/dist/chunk-XPEWUK7J.js +532 -0
  89. package/dist/chunk-XPEWUK7J.js.map +1 -0
  90. package/dist/{chunk-BOIF2XGG.js → chunk-XXDXIIQ4.js} +2 -2
  91. package/dist/chunk-YLK2J5YK.js +610 -0
  92. package/dist/chunk-YLK2J5YK.js.map +1 -0
  93. package/dist/{chunk-7OQAU4EA.js → chunk-Z4IZGEM3.js} +16 -12
  94. package/dist/{chunk-7OQAU4EA.js.map → chunk-Z4IZGEM3.js.map} +1 -1
  95. package/dist/{cli-E3H6ZP4I.js → cli-6EWVMEN6.js} +5 -3
  96. package/dist/{cli-E3H6ZP4I.js.map → cli-6EWVMEN6.js.map} +1 -1
  97. package/dist/{cli-MHTYPVOD.js → cli-6H7HVDMQ.js} +113 -20
  98. package/dist/{cli-MHTYPVOD.js.map → cli-6H7HVDMQ.js.map} +1 -1
  99. package/dist/{cli-HUIMNJT6.js → cli-EPVZHAZS.js} +19 -20
  100. package/dist/{cli-HUIMNJT6.js.map → cli-EPVZHAZS.js.map} +1 -1
  101. package/dist/{cli-6PGVHP7Y.js → cli-LUCSGTVI.js} +17 -19
  102. package/dist/{cli-6PGVHP7Y.js.map → cli-LUCSGTVI.js.map} +1 -1
  103. package/dist/{cli-PRZHQ3QB.js → cli-NIG4N3XM.js} +14 -15
  104. package/dist/{cli-PRZHQ3QB.js.map → cli-NIG4N3XM.js.map} +1 -1
  105. package/dist/{cli-TYGOHJOJ.js → cli-PSKNB66T.js} +225 -58
  106. package/dist/cli-PSKNB66T.js.map +1 -0
  107. package/dist/{cli-QKIJOXGW.js → cli-UO4NHIB3.js} +17 -17
  108. package/dist/{cli-AAG3N4NB.js → cli-UQ7A3YA2.js} +17 -18
  109. package/dist/{cli-AAG3N4NB.js.map → cli-UQ7A3YA2.js.map} +1 -1
  110. package/dist/{cli-YW6VWBHX.js → cli-YHYDLQAF.js} +10 -10
  111. package/dist/cli.js +11 -11
  112. package/dist/config-P4HDNTYD.js +26 -0
  113. package/dist/conformance-ZFCMKM6M.js +18 -0
  114. package/dist/docmeta.js +9 -9
  115. package/dist/github-7ZCH5PSO.js +26 -0
  116. package/dist/github-POT6724K.js +31 -0
  117. package/dist/host-6GURH5HE.js +23 -0
  118. package/dist/index.d.ts +72 -4
  119. package/dist/index.js +176 -166
  120. package/dist/index.js.map +1 -1
  121. package/dist/{json-4DCKDGUV.js → json-KT2K62L5.js} +12 -13
  122. package/dist/lint-5AQ5C2BV.js +29 -0
  123. package/dist/list-5JZKX2NK.js +28 -0
  124. package/dist/list-SWPFXQMU.js +30 -0
  125. package/dist/{page-QEDB7EVU.js → page-UPSXRP75.js} +11 -12
  126. package/dist/prepare-6GNEWCNH.js +155 -0
  127. package/dist/prepare-6GNEWCNH.js.map +1 -0
  128. package/dist/{pretty-SQX33UM2.js → pretty-Q6FQAOK4.js} +13 -14
  129. package/dist/{pretty-5DGEBZSV.js → pretty-SQRPFPSQ.js} +12 -13
  130. package/dist/provider-AMGRDY6V.js +34 -0
  131. package/dist/release-IECYCLTD.js +36 -0
  132. package/dist/release-IECYCLTD.js.map +1 -0
  133. package/dist/{reporters-OHSI3RMV.js → reporters-45MMC2ID.js} +11 -12
  134. package/dist/{reporters-YELDDYJD.js → reporters-XUV4MM64.js} +7 -5
  135. package/dist/reporters-XUV4MM64.js.map +1 -0
  136. package/dist/run-KMWY2IAN.js +32 -0
  137. package/dist/run-KMWY2IAN.js.map +1 -0
  138. package/dist/{term-2WMDZ4PY.js → term-PCJUCWNF.js} +16 -17
  139. package/dist/{term-2WMDZ4PY.js.map → term-PCJUCWNF.js.map} +1 -1
  140. package/dist/validate-IMNCZNWG.js +17 -0
  141. package/dist/validate-IMNCZNWG.js.map +1 -0
  142. package/package.json +2 -2
  143. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  144. package/plugin/manni/hooks/hooks.json +47 -0
  145. package/dist/batch-GOE3UXOD.js +0 -36
  146. package/dist/build-M7BMEHL2.js +0 -33
  147. package/dist/calibrate-6RRAILUY.js +0 -31
  148. package/dist/capture-RJPQ6B4N.js +0 -32
  149. package/dist/check-BQD64X3N.js +0 -27
  150. package/dist/chunk-3R5Y3XOL.js.map +0 -1
  151. package/dist/chunk-3YHAYXBC.js +0 -164
  152. package/dist/chunk-3YHAYXBC.js.map +0 -1
  153. package/dist/chunk-HVFR66GQ.js.map +0 -1
  154. package/dist/chunk-LJ2RDH3F.js.map +0 -1
  155. package/dist/chunk-NAZRLJAK.js +0 -3090
  156. package/dist/chunk-NAZRLJAK.js.map +0 -1
  157. package/dist/chunk-Q35YIDBV.js.map +0 -1
  158. package/dist/chunk-QCBICNKC.js.map +0 -1
  159. package/dist/chunk-SJO2FTPG.js.map +0 -1
  160. package/dist/chunk-TU2WUBVZ.js +0 -2
  161. package/dist/cli-TYGOHJOJ.js.map +0 -1
  162. package/dist/github-3WMSTNTK.js +0 -32
  163. package/dist/github-OXSJQ4PS.js +0 -27
  164. package/dist/lint-YDHVVZHT.js +0 -30
  165. package/dist/list-3ZO2NIYO.js +0 -31
  166. package/dist/list-EJH6VAOW.js +0 -29
  167. package/dist/run-IP6NZHAG.js +0 -33
  168. package/dist/validate-G6HH3YXL.js +0 -16
  169. /package/dist/{batch-GOE3UXOD.js.map → batch-OZOACN4G.js.map} +0 -0
  170. /package/dist/{build-M7BMEHL2.js.map → build-Z5VOVADH.js.map} +0 -0
  171. /package/dist/{calibrate-6RRAILUY.js.map → calibrate-TZYT42DR.js.map} +0 -0
  172. /package/dist/{capture-RJPQ6B4N.js.map → capture-SL4MNDDP.js.map} +0 -0
  173. /package/dist/{check-BQD64X3N.js.map → check-5OMA42Y6.js.map} +0 -0
  174. /package/dist/{check-ESNS7ZBC.js.map → check-OAJWC3WD.js.map} +0 -0
  175. /package/dist/{check-RQIIIURI.js.map → check-PKY7KTQE.js.map} +0 -0
  176. /package/dist/{chunk-F2OVHJNC.js.map → chunk-2JFPBZJK.js.map} +0 -0
  177. /package/dist/{chunk-CP4ZM43V.js.map → chunk-2KRB3EG7.js.map} +0 -0
  178. /package/dist/{chunk-HQFVJDEN.js.map → chunk-3NWX34ZI.js.map} +0 -0
  179. /package/dist/{chunk-TCC737IS.js.map → chunk-5G53XATW.js.map} +0 -0
  180. /package/dist/{chunk-SNEHX4VE.js.map → chunk-733Y2STG.js.map} +0 -0
  181. /package/dist/{chunk-ELZ2IIOF.js.map → chunk-73TC4DYH.js.map} +0 -0
  182. /package/dist/{chunk-QY3DOZMS.js.map → chunk-7WRP5FFP.js.map} +0 -0
  183. /package/dist/{chunk-C6HZ6C5T.js.map → chunk-C3B2VJNC.js.map} +0 -0
  184. /package/dist/{chunk-NN4ASVTY.js.map → chunk-C73RSUIC.js.map} +0 -0
  185. /package/dist/{chunk-GAZFKZHM.js.map → chunk-DC5DDJVE.js.map} +0 -0
  186. /package/dist/{chunk-52PDIZKV.js.map → chunk-ECVQNGTH.js.map} +0 -0
  187. /package/dist/{chunk-XWFNO5PO.js.map → chunk-GAJIJKET.js.map} +0 -0
  188. /package/dist/{chunk-K3U5F2QT.js.map → chunk-M6GSS72T.js.map} +0 -0
  189. /package/dist/{chunk-UK2I3ACY.js.map → chunk-MHM4QEBV.js.map} +0 -0
  190. /package/dist/{chunk-OIZ3XMKB.js.map → chunk-MWBJ3KTF.js.map} +0 -0
  191. /package/dist/{chunk-MZC62HPZ.js.map → chunk-NBMPHD4I.js.map} +0 -0
  192. /package/dist/{chunk-DX32P2DT.js.map → chunk-NTWW7J76.js.map} +0 -0
  193. /package/dist/{chunk-JQU7FHYH.js.map → chunk-QW77LCOU.js.map} +0 -0
  194. /package/dist/{chunk-IA7BMIPE.js.map → chunk-SM6NOMJS.js.map} +0 -0
  195. /package/dist/{chunk-NGK3N6F2.js.map → chunk-T6SYGLWR.js.map} +0 -0
  196. /package/dist/{chunk-TVIX653Q.js.map → chunk-TLXE7LYK.js.map} +0 -0
  197. /package/dist/{chunk-TA42STP7.js.map → chunk-UAKNZVCD.js.map} +0 -0
  198. /package/dist/{chunk-C3KI45RF.js.map → chunk-UJSGS2Y5.js.map} +0 -0
  199. /package/dist/{chunk-BOIF2XGG.js.map → chunk-XXDXIIQ4.js.map} +0 -0
  200. /package/dist/{cli-QKIJOXGW.js.map → cli-UO4NHIB3.js.map} +0 -0
  201. /package/dist/{chunk-TU2WUBVZ.js.map → cli-YHYDLQAF.js.map} +0 -0
  202. /package/dist/{cli-YW6VWBHX.js.map → config-P4HDNTYD.js.map} +0 -0
  203. /package/dist/{github-3WMSTNTK.js.map → conformance-ZFCMKM6M.js.map} +0 -0
  204. /package/dist/{github-OXSJQ4PS.js.map → github-7ZCH5PSO.js.map} +0 -0
  205. /package/dist/{json-4DCKDGUV.js.map → github-POT6724K.js.map} +0 -0
  206. /package/dist/{lint-YDHVVZHT.js.map → host-6GURH5HE.js.map} +0 -0
  207. /package/dist/{list-3ZO2NIYO.js.map → json-KT2K62L5.js.map} +0 -0
  208. /package/dist/{list-EJH6VAOW.js.map → lint-5AQ5C2BV.js.map} +0 -0
  209. /package/dist/{page-QEDB7EVU.js.map → list-5JZKX2NK.js.map} +0 -0
  210. /package/dist/{pretty-5DGEBZSV.js.map → list-SWPFXQMU.js.map} +0 -0
  211. /package/dist/{pretty-SQX33UM2.js.map → page-UPSXRP75.js.map} +0 -0
  212. /package/dist/{reporters-OHSI3RMV.js.map → pretty-Q6FQAOK4.js.map} +0 -0
  213. /package/dist/{reporters-YELDDYJD.js.map → pretty-SQRPFPSQ.js.map} +0 -0
  214. /package/dist/{run-IP6NZHAG.js.map → provider-AMGRDY6V.js.map} +0 -0
  215. /package/dist/{validate-G6HH3YXL.js.map → reporters-45MMC2ID.js.map} +0 -0
@@ -6,10 +6,10 @@ import {
6
6
  shortPin,
7
7
  shortSrc,
8
8
  spellAt
9
- } from "./chunk-TA42STP7.js";
9
+ } from "./chunk-UAKNZVCD.js";
10
10
  import {
11
11
  parseSrc
12
- } from "./chunk-UK2I3ACY.js";
12
+ } from "./chunk-MHM4QEBV.js";
13
13
  import {
14
14
  palette
15
15
  } from "./chunk-RNVYGWIC.js";
@@ -452,4 +452,4 @@ export {
452
452
  removalLine,
453
453
  renderRemovePretty
454
454
  };
455
- //# sourceMappingURL=chunk-NGK3N6F2.js.map
455
+ //# sourceMappingURL=chunk-T6SYGLWR.js.map
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ palette
4
+ } from "./chunk-RNVYGWIC.js";
5
+
6
+ // src/tracevals/rules/local.ts
7
+ import {
8
+ ensureModel,
9
+ fits,
10
+ modelState,
11
+ nodeLlamaCppStatus
12
+ } from "@hawkeyexl/inference";
13
+ function libraryLocalModels(connections) {
14
+ const modelsDir = connections["llama-cpp"]?.modelsDir;
15
+ const options = modelsDir === void 0 ? {} : { modelsDirectory: modelsDir };
16
+ return {
17
+ runtimePresent: async () => (await nodeLlamaCppStatus()).state === "present",
18
+ state: (model) => modelState(model, options),
19
+ fits: (model) => fits(model, options),
20
+ ensure: (model) => ensureModel(model, options)
21
+ };
22
+ }
23
+ var GB = 1024 ** 3;
24
+
25
+ // src/tracevals/reporters/conformance.ts
26
+ var count = (n, one, many) => `${String(n)} ${n === 1 ? one : many}`;
27
+ function renderCheck(report, opts = {}) {
28
+ const pc = palette(opts.color === true);
29
+ const lines = [];
30
+ for (const source of report.sources) {
31
+ const findings = report.findings.filter((f) => f.source === source.path);
32
+ if (findings.length === 0) continue;
33
+ lines.push(source.path);
34
+ for (const f of findings) {
35
+ const mark = f.outcome === "fail" ? pc.red("\u2716") : pc.yellow("?");
36
+ lines.push(` ${mark} ${f.rule} ${f.text}`);
37
+ lines.push(` ${pc.dim(`${f.observed} (${f.confidence.toFixed(2)})`)}`);
38
+ }
39
+ }
40
+ lines.push(...sessionSoFar(report));
41
+ for (const warning of report.warnings) lines.push(`${pc.yellow("!")} ${warning}`);
42
+ if (lines.length > 0) lines.push("");
43
+ lines.push(closing(report));
44
+ return lines.join("\n");
45
+ }
46
+ function sessionSoFar(report) {
47
+ const rules = report.session?.rules ?? [];
48
+ if (rules.length === 0) return [];
49
+ const flagged = rules.filter((r) => r.broken > 0 || r.needsReview > 0);
50
+ const lines = flagged.map((r) => {
51
+ const counts = [
52
+ ["broken", r.broken],
53
+ ["repaired", r.repaired],
54
+ ["needs review", r.needsReview],
55
+ ["followed", r.followed]
56
+ ];
57
+ const said = counts.filter(([, n]) => n > 0).map(([word, n]) => `${word} ${String(n)}`);
58
+ return ` ${r.source}#${r.rule} ${said.join(", ")}`;
59
+ });
60
+ const held = rules.length - flagged.length;
61
+ if (held > 0) {
62
+ lines.push(` ${count(held, "rule", "rules")} held every turn ${held === 1 ? "it" : "they"} applied to.`);
63
+ }
64
+ return ["Session so far", ...lines];
65
+ }
66
+ function closing(report) {
67
+ const head = `Last turn of ${report.sessionId.slice(0, 8)}:`;
68
+ const { summary } = report;
69
+ const scope = `${count(summary.rules, "rule", "rules")} from ${count(summary.sources, "source", "sources")}`;
70
+ switch (report.skipped) {
71
+ case "empty-turn":
72
+ return `${head} nothing happened after the last prompt.`;
73
+ case "no-sources":
74
+ return `${head} no rule sources governed it.`;
75
+ case "not-applicable":
76
+ return `${head} ${scope}, none apply to this turn.`;
77
+ case null: {
78
+ const broken = summary.fail > 0 ? `${String(summary.fail)} broken` : "None broken";
79
+ const review = summary.needsReview > 0 ? `, ${String(summary.needsReview)} needs review` : "";
80
+ return `${head} ${scope}. ${broken}${review}.`;
81
+ }
82
+ }
83
+ }
84
+ var NOT_SET_UP = "tracevals conformance is not set up; nothing to prepare.";
85
+ function renderPrepare(report) {
86
+ const lines = [];
87
+ const said = /* @__PURE__ */ new Set();
88
+ for (const m of report.models) {
89
+ if (m.state === "hosted" || said.has(m.model)) continue;
90
+ said.add(m.model);
91
+ const name = `${m.model} (${m.provider})`;
92
+ lines.push(
93
+ m.state === "downloaded" ? `${name} downloaded, ${((m.bytes ?? 0) / GB).toFixed(2)} GB.` : `${name} is ${m.state}.`
94
+ );
95
+ }
96
+ const ex = report.extraction;
97
+ if (ex !== null) {
98
+ const files = (n) => `${count(n, "file", "files")} that ${n === 1 ? "applies" : "apply"} to every session`;
99
+ if (ex.extracted > 0) {
100
+ lines.push(
101
+ `Extracted ${count(ex.rules, "rule", "rules")} from ${files(ex.extracted)}.` + (ex.cached > 0 ? ` ${String(ex.cached)} more ${ex.cached === 1 ? "was" : "were"} cached.` : "")
102
+ );
103
+ } else if (ex.cached > 0) {
104
+ lines.push(`${files(ex.cached)} ${ex.cached === 1 ? "is" : "are"} cached. Nothing to extract.`);
105
+ } else {
106
+ lines.push("No file applies to every session. Nothing to extract.");
107
+ }
108
+ }
109
+ for (const warning of report.warnings) lines.push(warning);
110
+ return lines.join("\n");
111
+ }
112
+ var NO_HOST = "No model host is running.";
113
+ function renderRelease(report) {
114
+ if (!report.hostStopped && report.released.length === 0 && report.unloaded.length === 0) {
115
+ return NO_HOST;
116
+ }
117
+ const unloaded = report.unloaded.length > 0 ? `Unloaded ${report.unloaded.join(", ")}` : "";
118
+ const stopped = report.hostStopped ? "stopped the model host" : "";
119
+ const action = [unloaded, stopped].filter((s) => s !== "").join(" and ");
120
+ const held = count(report.released.length, "session", "sessions");
121
+ return `${action === "" ? "Released the lease" : action}. ${held} held it.`;
122
+ }
123
+
124
+ export {
125
+ libraryLocalModels,
126
+ GB,
127
+ renderCheck,
128
+ NOT_SET_UP,
129
+ renderPrepare,
130
+ NO_HOST,
131
+ renderRelease
132
+ };
133
+ //# sourceMappingURL=chunk-TH4JVQPF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tracevals/rules/local.ts","../src/tracevals/reporters/conformance.ts"],"sourcesContent":["/**\n * What tracevals asks of a local model without loading it (proposal 0079,\n * gates 5, 8 and 9, and `prepare`). The inference library owns every answer;\n * this is the one seam, so a test can say \"downloading\" without a runtime.\n */\nimport {\n ensureModel,\n fits,\n modelState,\n nodeLlamaCppStatus,\n type EnsureModelResult,\n type FitsResult,\n type LlamaModelState,\n} from \"@hawkeyexl/inference\";\nimport type { ProviderConnections } from \"../../shared/providers.js\";\n\nexport interface LocalModels {\n /** Whether the llama.cpp binding is importable now, installing nothing. */\n runtimePresent(): Promise<boolean>;\n /** `ready`, `downloading` or `missing`, read without loading or fetching. */\n state(model: string): Promise<LlamaModelState>;\n /** The memory probe `auto` tiering uses. */\n fits(model: string): Promise<FitsResult>;\n /** Fetch the runtime and the weights, without loading either. */\n ensure(model: string): Promise<EnsureModelResult>;\n}\n\n/** The library's lifecycle calls, pointed at the family's models directory. */\nexport function libraryLocalModels(connections: ProviderConnections): LocalModels {\n const modelsDir = connections[\"llama-cpp\"]?.modelsDir;\n const options = modelsDir === undefined ? {} : { modelsDirectory: modelsDir };\n return {\n runtimePresent: async () => (await nodeLlamaCppStatus()).state === \"present\",\n state: (model) => modelState(model, options),\n fits: (model) => fits(model, options),\n ensure: (model) => ensureModel(model, options),\n };\n}\n\n/** Bytes in a gigabyte as the messages count them. */\nexport const GB = 1024 ** 3;\n","/**\n * Pretty output for `check`, `prepare` and `release` (proposal 0079). JSON is\n * each report as it stands, so only prose lives here. Colour is the caller's\n * decision, made once by `colorFor`.\n */\nimport { palette } from \"../../shared/color.js\";\nimport type { CheckReport } from \"../commands/check.js\";\nimport type { PrepareReport } from \"../commands/prepare.js\";\nimport type { ReleaseReport } from \"../commands/release.js\";\nimport { GB } from \"../rules/local.js\";\n\nconst count = (n: number, one: string, many: string): string =>\n `${String(n)} ${n === 1 ? one : many}`;\n\n/** Findings grouped under their source, then the closing line. */\nexport function renderCheck(report: CheckReport, opts: { color?: boolean } = {}): string {\n const pc = palette(opts.color === true);\n const lines: string[] = [];\n for (const source of report.sources) {\n const findings = report.findings.filter((f) => f.source === source.path);\n if (findings.length === 0) continue;\n lines.push(source.path);\n for (const f of findings) {\n const mark = f.outcome === \"fail\" ? pc.red(\"✖\") : pc.yellow(\"?\");\n lines.push(` ${mark} ${f.rule} ${f.text}`);\n lines.push(` ${pc.dim(`${f.observed} (${f.confidence.toFixed(2)})`)}`);\n }\n }\n lines.push(...sessionSoFar(report));\n for (const warning of report.warnings) lines.push(`${pc.yellow(\"!\")} ${warning}`);\n if (lines.length > 0) lines.push(\"\");\n lines.push(closing(report));\n return lines.join(\"\\n\");\n}\n\n/** The ledger's rules that were ever broken or sent to review, and a count of the rest. */\nfunction sessionSoFar(report: CheckReport): string[] {\n const rules = report.session?.rules ?? [];\n if (rules.length === 0) return [];\n const flagged = rules.filter((r) => r.broken > 0 || r.needsReview > 0);\n const lines = flagged.map((r) => {\n const counts = [\n [\"broken\", r.broken],\n [\"repaired\", r.repaired],\n [\"needs review\", r.needsReview],\n [\"followed\", r.followed],\n ] as const;\n const said = counts.filter(([, n]) => n > 0).map(([word, n]) => `${word} ${String(n)}`);\n return ` ${r.source}#${r.rule} ${said.join(\", \")}`;\n });\n const held = rules.length - flagged.length;\n if (held > 0) {\n lines.push(` ${count(held, \"rule\", \"rules\")} held every turn ${held === 1 ? \"it\" : \"they\"} applied to.`);\n }\n return [\"Session so far\", ...lines];\n}\n\nfunction closing(report: CheckReport): string {\n const head = `Last turn of ${report.sessionId.slice(0, 8)}:`;\n const { summary } = report;\n // \"sources\", because a typed prompt is not a file (proposal 0080).\n const scope = `${count(summary.rules, \"rule\", \"rules\")} from ${count(summary.sources, \"source\", \"sources\")}`;\n switch (report.skipped) {\n case \"empty-turn\":\n return `${head} nothing happened after the last prompt.`;\n case \"no-sources\":\n return `${head} no rule sources governed it.`;\n case \"not-applicable\":\n return `${head} ${scope}, none apply to this turn.`;\n case null: {\n const broken = summary.fail > 0 ? `${String(summary.fail)} broken` : \"None broken\";\n const review = summary.needsReview > 0 ? `, ${String(summary.needsReview)} needs review` : \"\";\n return `${head} ${scope}. ${broken}${review}.`;\n }\n }\n}\n\nexport const NOT_SET_UP = \"tracevals conformance is not set up; nothing to prepare.\";\n\nexport function renderPrepare(report: PrepareReport): string {\n const lines: string[] = [];\n const said = new Set<string>();\n for (const m of report.models) {\n if (m.state === \"hosted\" || said.has(m.model)) continue;\n said.add(m.model);\n const name = `${m.model} (${m.provider})`;\n lines.push(\n m.state === \"downloaded\"\n ? `${name} downloaded, ${((m.bytes ?? 0) / GB).toFixed(2)} GB.`\n : `${name} is ${m.state}.`,\n );\n }\n const ex = report.extraction;\n if (ex !== null) {\n const files = (n: number): string =>\n `${count(n, \"file\", \"files\")} that ${n === 1 ? \"applies\" : \"apply\"} to every session`;\n if (ex.extracted > 0) {\n lines.push(\n `Extracted ${count(ex.rules, \"rule\", \"rules\")} from ${files(ex.extracted)}.` +\n (ex.cached > 0 ? ` ${String(ex.cached)} more ${ex.cached === 1 ? \"was\" : \"were\"} cached.` : \"\"),\n );\n } else if (ex.cached > 0) {\n lines.push(`${files(ex.cached)} ${ex.cached === 1 ? \"is\" : \"are\"} cached. Nothing to extract.`);\n } else {\n lines.push(\"No file applies to every session. Nothing to extract.\");\n }\n }\n for (const warning of report.warnings) lines.push(warning);\n return lines.join(\"\\n\");\n}\n\nexport const NO_HOST = \"No model host is running.\";\n\nexport function renderRelease(report: ReleaseReport): string {\n if (!report.hostStopped && report.released.length === 0 && report.unloaded.length === 0) {\n return NO_HOST;\n }\n const unloaded = report.unloaded.length > 0 ? `Unloaded ${report.unloaded.join(\", \")}` : \"\";\n const stopped = report.hostStopped ? \"stopped the model host\" : \"\";\n const action = [unloaded, stopped].filter((s) => s !== \"\").join(\" and \");\n const held = count(report.released.length, \"session\", \"sessions\");\n return `${action === \"\" ? \"Released the lease\" : action}. ${held} held it.`;\n}\n"],"mappings":"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","names":[]}
@@ -10,7 +10,7 @@ import {
10
10
  pageMarks,
11
11
  pageSchemaSet,
12
12
  withValueAt
13
- } from "./chunk-HVFR66GQ.js";
13
+ } from "./chunk-TUAAR3MM.js";
14
14
  import {
15
15
  DocmetaError,
16
16
  escapePointerSegment,
@@ -20,12 +20,12 @@ import {
20
20
  rebaseConfigSchemaRefs,
21
21
  schemaTrustRoot,
22
22
  supportedExtensions
23
- } from "./chunk-527HHQPS.js";
23
+ } from "./chunk-KCOFEWV5.js";
24
24
  import {
25
25
  decryptValue,
26
26
  encryptValue,
27
27
  isEncryptedValue
28
- } from "./chunk-Q35YIDBV.js";
28
+ } from "./chunk-XKBEHKWO.js";
29
29
  import {
30
30
  errorMessage
31
31
  } from "./chunk-G3T47CFV.js";
@@ -195,4 +195,4 @@ export {
195
195
  metaPageView,
196
196
  declaredAt
197
197
  };
198
- //# sourceMappingURL=chunk-TVIX653Q.js.map
198
+ //# sourceMappingURL=chunk-TLXE7LYK.js.map