@hawkeyexl/manni 4.4.1 → 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 (226) 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-HYNGXYJV.js → check-OAJWC3WD.js} +7 -5
  8. package/dist/{check-ASPIHA6B.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-MWJLZMBL.js → chunk-2JFPBZJK.js} +11 -11
  12. package/dist/{chunk-QQUKGCAJ.js → chunk-2KRB3EG7.js} +2 -2
  13. package/dist/{chunk-DXNZS72W.js → chunk-2M6DVNI5.js} +10 -6
  14. package/dist/{chunk-DXNZS72W.js.map → chunk-2M6DVNI5.js.map} +1 -1
  15. package/dist/{chunk-QZ6LRSNV.js → chunk-3NWX34ZI.js} +19 -19
  16. package/dist/{chunk-IDV6HJCB.js → chunk-5G53XATW.js} +4 -4
  17. package/dist/{chunk-M2JCK5F6.js → chunk-6KKZXB2O.js} +19 -6
  18. package/dist/chunk-6KKZXB2O.js.map +1 -0
  19. package/dist/{chunk-PNPQTHBT.js → chunk-733Y2STG.js} +2 -2
  20. package/dist/{chunk-WB3QM6PP.js → chunk-73TC4DYH.js} +332 -2522
  21. package/dist/chunk-73TC4DYH.js.map +1 -0
  22. package/dist/{chunk-EPH54CAY.js → chunk-7WRP5FFP.js} +4 -4
  23. package/dist/{chunk-NXV7WE2D.js → chunk-APKH2T6E.js} +29 -591
  24. package/dist/chunk-APKH2T6E.js.map +1 -0
  25. package/dist/{chunk-I2AH3CJJ.js → chunk-B3TS4WRM.js} +17 -15
  26. package/dist/{chunk-I2AH3CJJ.js.map → chunk-B3TS4WRM.js.map} +1 -1
  27. package/dist/chunk-BWCWTHYS.js +146 -0
  28. package/dist/chunk-BWCWTHYS.js.map +1 -0
  29. package/dist/{chunk-MMTSSTG7.js → chunk-C3B2VJNC.js} +2 -2
  30. package/dist/{chunk-PU6DFJMY.js → chunk-C73RSUIC.js} +4 -4
  31. package/dist/chunk-CU57HT2E.js +116 -0
  32. package/dist/chunk-CU57HT2E.js.map +1 -0
  33. package/dist/chunk-CWXZ2MRT.js +222 -0
  34. package/dist/chunk-CWXZ2MRT.js.map +1 -0
  35. package/dist/{chunk-GCQRPUSB.js → chunk-DC5DDJVE.js} +6 -6
  36. package/dist/{chunk-6OYEI2VV.js → chunk-ECVQNGTH.js} +3 -3
  37. package/dist/chunk-FLAO4ZS3.js +502 -0
  38. package/dist/chunk-FLAO4ZS3.js.map +1 -0
  39. package/dist/chunk-FQGLRJGX.js +174 -0
  40. package/dist/chunk-FQGLRJGX.js.map +1 -0
  41. package/dist/{chunk-7UKO3ASZ.js → chunk-GAJIJKET.js} +3 -3
  42. package/dist/{chunk-6JSSEWBG.js → chunk-GREQKO6M.js} +202 -54
  43. package/dist/chunk-GREQKO6M.js.map +1 -0
  44. package/dist/chunk-HX44GB4Z.js +30 -0
  45. package/dist/chunk-HX44GB4Z.js.map +1 -0
  46. package/dist/{chunk-4IUC2MNL.js → chunk-IY7NYNPZ.js} +9 -11
  47. package/dist/{chunk-4IUC2MNL.js.map → chunk-IY7NYNPZ.js.map} +1 -1
  48. package/dist/{chunk-57NEQRVO.js → chunk-KCOFEWV5.js} +8 -6
  49. package/dist/{chunk-57NEQRVO.js.map → chunk-KCOFEWV5.js.map} +1 -1
  50. package/dist/chunk-M2RLHZ4J.js +849 -0
  51. package/dist/chunk-M2RLHZ4J.js.map +1 -0
  52. package/dist/{chunk-NLXTXE5Y.js → chunk-M6GSS72T.js} +185 -33
  53. package/dist/chunk-M6GSS72T.js.map +1 -0
  54. package/dist/{chunk-YTURO7SI.js → chunk-MHM4QEBV.js} +4 -4
  55. package/dist/{chunk-RL5XWQOL.js → chunk-MOWMCEOJ.js} +143 -54
  56. package/dist/chunk-MOWMCEOJ.js.map +1 -0
  57. package/dist/{chunk-C4SQM22E.js → chunk-MWBJ3KTF.js} +13 -11
  58. package/dist/chunk-MWBJ3KTF.js.map +1 -0
  59. package/dist/chunk-N7JSEDSC.js +233 -0
  60. package/dist/chunk-N7JSEDSC.js.map +1 -0
  61. package/dist/{chunk-JCDXE76J.js → chunk-NBMPHD4I.js} +2 -2
  62. package/dist/{chunk-37LP5HMZ.js → chunk-NHHOPZRA.js} +12 -10
  63. package/dist/{chunk-37LP5HMZ.js.map → chunk-NHHOPZRA.js.map} +1 -1
  64. package/dist/{chunk-YB4IBW3M.js → chunk-NTWW7J76.js} +2 -2
  65. package/dist/{chunk-UJCVAWP7.js → chunk-PCFG7E6B.js} +3 -3
  66. package/dist/{chunk-UJCVAWP7.js.map → chunk-PCFG7E6B.js.map} +1 -1
  67. package/dist/{chunk-FBEQCK47.js → chunk-PL4UAF4S.js} +73 -1304
  68. package/dist/chunk-PL4UAF4S.js.map +1 -0
  69. package/dist/chunk-QCHVR4ZM.js +286 -0
  70. package/dist/chunk-QCHVR4ZM.js.map +1 -0
  71. package/dist/{chunk-PIKOVN6W.js → chunk-QW77LCOU.js} +10 -10
  72. package/dist/{chunk-2B7ZNTPV.js → chunk-SM6NOMJS.js} +2 -2
  73. package/dist/chunk-SWSTHZBI.js +2464 -0
  74. package/dist/chunk-SWSTHZBI.js.map +1 -0
  75. package/dist/{chunk-JXLTXMJ7.js → chunk-T6SYGLWR.js} +3 -3
  76. package/dist/{chunk-CK7SKVHR.js → chunk-TBAMBLF3.js} +3 -12
  77. package/dist/chunk-TBAMBLF3.js.map +1 -0
  78. package/dist/chunk-TH4JVQPF.js +133 -0
  79. package/dist/chunk-TH4JVQPF.js.map +1 -0
  80. package/dist/{chunk-QRWGPQKO.js → chunk-TLXE7LYK.js} +4 -4
  81. package/dist/{chunk-M3W7J6MU.js → chunk-TUAAR3MM.js} +3280 -283
  82. package/dist/chunk-TUAAR3MM.js.map +1 -0
  83. package/dist/{chunk-SKSDRUUK.js → chunk-UAKNZVCD.js} +4 -4
  84. package/dist/{chunk-YJOGUXGP.js → chunk-UJSGS2Y5.js} +8 -6
  85. package/dist/{chunk-YJOGUXGP.js.map → chunk-UJSGS2Y5.js.map} +1 -1
  86. package/dist/{chunk-UQISLDAV.js → chunk-UWQ2UVHE.js} +8 -6
  87. package/dist/{chunk-UQISLDAV.js.map → chunk-UWQ2UVHE.js.map} +1 -1
  88. package/dist/chunk-WQWKYAAK.js +86 -0
  89. package/dist/chunk-WQWKYAAK.js.map +1 -0
  90. package/dist/{chunk-LJ2RDH3F.js → chunk-XG6PVB5S.js} +1 -23
  91. package/dist/chunk-XG6PVB5S.js.map +1 -0
  92. package/dist/{chunk-Q35YIDBV.js → chunk-XKBEHKWO.js} +29 -264
  93. package/dist/chunk-XKBEHKWO.js.map +1 -0
  94. package/dist/chunk-XPEWUK7J.js +532 -0
  95. package/dist/chunk-XPEWUK7J.js.map +1 -0
  96. package/dist/{chunk-MYMBCTDE.js → chunk-XXDXIIQ4.js} +2 -2
  97. package/dist/chunk-YGFIQ6Y5.js +17 -0
  98. package/dist/chunk-YGFIQ6Y5.js.map +1 -0
  99. package/dist/chunk-YLK2J5YK.js +610 -0
  100. package/dist/chunk-YLK2J5YK.js.map +1 -0
  101. package/dist/{chunk-3VK37OR2.js → chunk-Z4IZGEM3.js} +16 -12
  102. package/dist/{chunk-3VK37OR2.js.map → chunk-Z4IZGEM3.js.map} +1 -1
  103. package/dist/{cli-6HIDIFVT.js → cli-6EWVMEN6.js} +5 -3
  104. package/dist/{cli-6HIDIFVT.js.map → cli-6EWVMEN6.js.map} +1 -1
  105. package/dist/{cli-VI7VHWNZ.js → cli-6H7HVDMQ.js} +113 -20
  106. package/dist/{cli-VI7VHWNZ.js.map → cli-6H7HVDMQ.js.map} +1 -1
  107. package/dist/{cli-RPM5PELX.js → cli-EPVZHAZS.js} +24 -20
  108. package/dist/cli-EPVZHAZS.js.map +1 -0
  109. package/dist/{cli-MN7PYMBI.js → cli-LUCSGTVI.js} +17 -19
  110. package/dist/{cli-MN7PYMBI.js.map → cli-LUCSGTVI.js.map} +1 -1
  111. package/dist/{cli-LFP5ZGYS.js → cli-NIG4N3XM.js} +16 -15
  112. package/dist/{cli-LFP5ZGYS.js.map → cli-NIG4N3XM.js.map} +1 -1
  113. package/dist/{cli-PYPX6O6E.js → cli-PSKNB66T.js} +225 -58
  114. package/dist/cli-PSKNB66T.js.map +1 -0
  115. package/dist/{cli-3BIBYHFK.js → cli-UO4NHIB3.js} +17 -17
  116. package/dist/{cli-6UB5N6CU.js → cli-UQ7A3YA2.js} +17 -18
  117. package/dist/{cli-6UB5N6CU.js.map → cli-UQ7A3YA2.js.map} +1 -1
  118. package/dist/{cli-673OTRGE.js → cli-YHYDLQAF.js} +10 -10
  119. package/dist/cli.js +11 -11
  120. package/dist/config-P4HDNTYD.js +26 -0
  121. package/dist/conformance-ZFCMKM6M.js +18 -0
  122. package/dist/docmeta.js +9 -9
  123. package/dist/github-7ZCH5PSO.js +26 -0
  124. package/dist/github-POT6724K.js +31 -0
  125. package/dist/host-6GURH5HE.js +23 -0
  126. package/dist/index.d.ts +102 -12
  127. package/dist/index.js +185 -171
  128. package/dist/index.js.map +1 -1
  129. package/dist/{json-SY7KLNC7.js → json-KT2K62L5.js} +12 -13
  130. package/dist/lint-5AQ5C2BV.js +29 -0
  131. package/dist/list-5JZKX2NK.js +28 -0
  132. package/dist/list-SWPFXQMU.js +30 -0
  133. package/dist/{page-KSGV5RD4.js → page-UPSXRP75.js} +11 -12
  134. package/dist/prepare-6GNEWCNH.js +155 -0
  135. package/dist/prepare-6GNEWCNH.js.map +1 -0
  136. package/dist/{pretty-CXSDXNAS.js → pretty-Q6FQAOK4.js} +13 -14
  137. package/dist/{pretty-A5EGTN35.js → pretty-SQRPFPSQ.js} +12 -13
  138. package/dist/provider-AMGRDY6V.js +34 -0
  139. package/dist/release-IECYCLTD.js +36 -0
  140. package/dist/release-IECYCLTD.js.map +1 -0
  141. package/dist/{reporters-HUY7UXFS.js → reporters-45MMC2ID.js} +13 -13
  142. package/dist/{reporters-K2VUKSAK.js → reporters-XUV4MM64.js} +7 -5
  143. package/dist/reporters-XUV4MM64.js.map +1 -0
  144. package/dist/run-KMWY2IAN.js +32 -0
  145. package/dist/run-KMWY2IAN.js.map +1 -0
  146. package/dist/{term-BIQUPMOR.js → term-PCJUCWNF.js} +16 -17
  147. package/dist/{term-BIQUPMOR.js.map → term-PCJUCWNF.js.map} +1 -1
  148. package/dist/validate-IMNCZNWG.js +17 -0
  149. package/dist/validate-IMNCZNWG.js.map +1 -0
  150. package/package.json +2 -2
  151. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  152. package/plugin/manni/hooks/hooks.json +47 -0
  153. package/dist/batch-GFNLTGOH.js +0 -36
  154. package/dist/build-COYIQ25L.js +0 -31
  155. package/dist/calibrate-MDBLJKEE.js +0 -31
  156. package/dist/capture-LRML2PKV.js +0 -32
  157. package/dist/check-EDLBYL5N.js +0 -27
  158. package/dist/chunk-6JSSEWBG.js.map +0 -1
  159. package/dist/chunk-A5ULMVHQ.js +0 -164
  160. package/dist/chunk-A5ULMVHQ.js.map +0 -1
  161. package/dist/chunk-C4SQM22E.js.map +0 -1
  162. package/dist/chunk-CK7SKVHR.js.map +0 -1
  163. package/dist/chunk-FBEQCK47.js.map +0 -1
  164. package/dist/chunk-LJ2RDH3F.js.map +0 -1
  165. package/dist/chunk-M2JCK5F6.js.map +0 -1
  166. package/dist/chunk-M3W7J6MU.js.map +0 -1
  167. package/dist/chunk-NLXTXE5Y.js.map +0 -1
  168. package/dist/chunk-NXV7WE2D.js.map +0 -1
  169. package/dist/chunk-Q35YIDBV.js.map +0 -1
  170. package/dist/chunk-RL5XWQOL.js.map +0 -1
  171. package/dist/chunk-TK3FC4RF.js +0 -3090
  172. package/dist/chunk-TK3FC4RF.js.map +0 -1
  173. package/dist/chunk-TU2WUBVZ.js +0 -2
  174. package/dist/chunk-WB3QM6PP.js.map +0 -1
  175. package/dist/cli-PYPX6O6E.js.map +0 -1
  176. package/dist/cli-RPM5PELX.js.map +0 -1
  177. package/dist/github-6QMYOHC3.js +0 -27
  178. package/dist/github-SXPGP5DB.js +0 -32
  179. package/dist/lint-ASMJLLPA.js +0 -28
  180. package/dist/list-KZNVTNVC.js +0 -31
  181. package/dist/list-Q57YTFUQ.js +0 -29
  182. package/dist/run-3DYJNRIG.js +0 -33
  183. package/dist/validate-53RKM2XG.js +0 -16
  184. /package/dist/{batch-GFNLTGOH.js.map → batch-OZOACN4G.js.map} +0 -0
  185. /package/dist/{build-COYIQ25L.js.map → build-Z5VOVADH.js.map} +0 -0
  186. /package/dist/{calibrate-MDBLJKEE.js.map → calibrate-TZYT42DR.js.map} +0 -0
  187. /package/dist/{capture-LRML2PKV.js.map → capture-SL4MNDDP.js.map} +0 -0
  188. /package/dist/{check-ASPIHA6B.js.map → check-5OMA42Y6.js.map} +0 -0
  189. /package/dist/{check-EDLBYL5N.js.map → check-OAJWC3WD.js.map} +0 -0
  190. /package/dist/{check-HYNGXYJV.js.map → check-PKY7KTQE.js.map} +0 -0
  191. /package/dist/{chunk-MWJLZMBL.js.map → chunk-2JFPBZJK.js.map} +0 -0
  192. /package/dist/{chunk-QQUKGCAJ.js.map → chunk-2KRB3EG7.js.map} +0 -0
  193. /package/dist/{chunk-QZ6LRSNV.js.map → chunk-3NWX34ZI.js.map} +0 -0
  194. /package/dist/{chunk-IDV6HJCB.js.map → chunk-5G53XATW.js.map} +0 -0
  195. /package/dist/{chunk-PNPQTHBT.js.map → chunk-733Y2STG.js.map} +0 -0
  196. /package/dist/{chunk-EPH54CAY.js.map → chunk-7WRP5FFP.js.map} +0 -0
  197. /package/dist/{chunk-MMTSSTG7.js.map → chunk-C3B2VJNC.js.map} +0 -0
  198. /package/dist/{chunk-PU6DFJMY.js.map → chunk-C73RSUIC.js.map} +0 -0
  199. /package/dist/{chunk-GCQRPUSB.js.map → chunk-DC5DDJVE.js.map} +0 -0
  200. /package/dist/{chunk-6OYEI2VV.js.map → chunk-ECVQNGTH.js.map} +0 -0
  201. /package/dist/{chunk-7UKO3ASZ.js.map → chunk-GAJIJKET.js.map} +0 -0
  202. /package/dist/{chunk-YTURO7SI.js.map → chunk-MHM4QEBV.js.map} +0 -0
  203. /package/dist/{chunk-JCDXE76J.js.map → chunk-NBMPHD4I.js.map} +0 -0
  204. /package/dist/{chunk-YB4IBW3M.js.map → chunk-NTWW7J76.js.map} +0 -0
  205. /package/dist/{chunk-PIKOVN6W.js.map → chunk-QW77LCOU.js.map} +0 -0
  206. /package/dist/{chunk-2B7ZNTPV.js.map → chunk-SM6NOMJS.js.map} +0 -0
  207. /package/dist/{chunk-JXLTXMJ7.js.map → chunk-T6SYGLWR.js.map} +0 -0
  208. /package/dist/{chunk-QRWGPQKO.js.map → chunk-TLXE7LYK.js.map} +0 -0
  209. /package/dist/{chunk-SKSDRUUK.js.map → chunk-UAKNZVCD.js.map} +0 -0
  210. /package/dist/{chunk-MYMBCTDE.js.map → chunk-XXDXIIQ4.js.map} +0 -0
  211. /package/dist/{cli-3BIBYHFK.js.map → cli-UO4NHIB3.js.map} +0 -0
  212. /package/dist/{chunk-TU2WUBVZ.js.map → cli-YHYDLQAF.js.map} +0 -0
  213. /package/dist/{cli-673OTRGE.js.map → config-P4HDNTYD.js.map} +0 -0
  214. /package/dist/{github-6QMYOHC3.js.map → conformance-ZFCMKM6M.js.map} +0 -0
  215. /package/dist/{github-SXPGP5DB.js.map → github-7ZCH5PSO.js.map} +0 -0
  216. /package/dist/{json-SY7KLNC7.js.map → github-POT6724K.js.map} +0 -0
  217. /package/dist/{lint-ASMJLLPA.js.map → host-6GURH5HE.js.map} +0 -0
  218. /package/dist/{list-KZNVTNVC.js.map → json-KT2K62L5.js.map} +0 -0
  219. /package/dist/{list-Q57YTFUQ.js.map → lint-5AQ5C2BV.js.map} +0 -0
  220. /package/dist/{page-KSGV5RD4.js.map → list-5JZKX2NK.js.map} +0 -0
  221. /package/dist/{pretty-A5EGTN35.js.map → list-SWPFXQMU.js.map} +0 -0
  222. /package/dist/{pretty-CXSDXNAS.js.map → page-UPSXRP75.js.map} +0 -0
  223. /package/dist/{reporters-HUY7UXFS.js.map → pretty-Q6FQAOK4.js.map} +0 -0
  224. /package/dist/{reporters-K2VUKSAK.js.map → pretty-SQRPFPSQ.js.map} +0 -0
  225. /package/dist/{run-3DYJNRIG.js.map → provider-AMGRDY6V.js.map} +0 -0
  226. /package/dist/{validate-53RKM2XG.js.map → reporters-45MMC2ID.js.map} +0 -0
@@ -0,0 +1,286 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ errorMessage
4
+ } from "./chunk-G3T47CFV.js";
5
+
6
+ // src/shared/duration.ts
7
+ var UNITS = {
8
+ m: 6e4,
9
+ h: 60 * 6e4,
10
+ d: 24 * 60 * 6e4,
11
+ w: 7 * 24 * 60 * 6e4
12
+ };
13
+ function durationMessage(value, label = "--newer-than") {
14
+ return `${label} must be a duration such as 30m, 24h, 7d or 2w, got "${value}"`;
15
+ }
16
+ function parseDuration(text, makeError, label) {
17
+ const match = /^(\d+(?:\.\d+)?)([mhdw])$/.exec(text.trim());
18
+ const count = match?.[1];
19
+ const unit = match?.[2];
20
+ const ms = unit === void 0 ? void 0 : UNITS[unit];
21
+ if (count === void 0 || ms === void 0) {
22
+ throw makeError(durationMessage(text, label));
23
+ }
24
+ return Number(count) * ms;
25
+ }
26
+
27
+ // src/shared/providers.ts
28
+ import { resolve } from "node:path";
29
+ import {
30
+ DEFAULT_JEV_BASE_URL,
31
+ DEFAULT_MODELS,
32
+ DEFAULT_OPENAI_BASE_URL,
33
+ InferenceError,
34
+ resolveProviderIdentityAsync
35
+ } from "@hawkeyexl/inference";
36
+ var DEFAULT_PROVIDER = "auto";
37
+ var DECISION_ONLY_PROVIDERS = /* @__PURE__ */ new Set(["jev"]);
38
+ var PROVIDERS = /* @__PURE__ */ new Set([
39
+ ...Object.keys(DEFAULT_MODELS).filter((name) => !DECISION_ONLY_PROVIDERS.has(name)),
40
+ DEFAULT_PROVIDER
41
+ ]);
42
+ var NAMEABLE_PROVIDERS = Object.keys(DEFAULT_MODELS).filter(
43
+ (name) => name !== "mock" && !DECISION_ONLY_PROVIDERS.has(name)
44
+ );
45
+ function assertKnownProvider(name, toError, options = {}) {
46
+ if (DECISION_ONLY_PROVIDERS.has(name)) {
47
+ if (options.decisions === true) return;
48
+ throw toError(
49
+ `Provider "${name}" answers decisions only, so it cannot generate. Available: ${[...NAMEABLE_PROVIDERS, DEFAULT_PROVIDER].join(", ")}.`
50
+ );
51
+ }
52
+ if (PROVIDERS.has(name)) return;
53
+ throw toError(
54
+ `Unknown provider "${name}". Available: ${[...NAMEABLE_PROVIDERS, DEFAULT_PROVIDER].join(", ")}.`
55
+ );
56
+ }
57
+ function assertModelHasProvider(name, model, configKey, toError) {
58
+ if (name !== DEFAULT_PROVIDER || model == null) return;
59
+ throw toError(
60
+ `Model "${model}" was given without a provider: a model name does not say which provider owns it. Set --provider or ${configKey} to one of ${NAMEABLE_PROVIDERS.join(", ")}, or drop the model to take the detected provider's default.`
61
+ );
62
+ }
63
+ var PROVIDERS_KEY = "providers";
64
+ var CONNECTION_KEYS = {
65
+ anthropic: ["apiKeyEnv"],
66
+ openai: ["baseUrl", "apiKeyEnv"],
67
+ "claude-cli": ["command"],
68
+ jev: ["apiKeyEnv", "baseUrl"],
69
+ "llama-cpp": ["modelsDir", "thoughtTokens", "keepAlive"]
70
+ };
71
+ var CONNECTION_NAMES = Object.keys(CONNECTION_KEYS);
72
+ var TOP_LEVEL_KEYS = ["provider", "model", ...CONNECTION_NAMES];
73
+ function isMapping(value) {
74
+ return typeof value === "object" && value !== null && !Array.isArray(value);
75
+ }
76
+ function rejectUnknown(raw, allowed, label, source, toError) {
77
+ for (const key of Object.keys(raw)) {
78
+ if (!allowed.includes(key)) {
79
+ throw toError(
80
+ `${source}: "${label}" has unknown key "${key}". Supported keys: ${allowed.join(", ")}.`
81
+ );
82
+ }
83
+ }
84
+ }
85
+ function parseProviders(value, source, dir, toError) {
86
+ if (value == null) return {};
87
+ if (!isMapping(value)) {
88
+ throw toError(`${source}: "${PROVIDERS_KEY}" must be a mapping.`);
89
+ }
90
+ rejectUnknown(value, TOP_LEVEL_KEYS, PROVIDERS_KEY, source, toError);
91
+ const string = (raw, key, label) => {
92
+ const v = raw[key];
93
+ if (v === void 0) return void 0;
94
+ if (typeof v !== "string") {
95
+ throw toError(`${source}: "${label}" must be a string.`);
96
+ }
97
+ return v;
98
+ };
99
+ const parsed = {};
100
+ const provider = string(value, "provider", `${PROVIDERS_KEY}.provider`);
101
+ if (provider !== void 0) {
102
+ assertKnownProvider(provider, (message) => toError(`${source}: ${message}`));
103
+ parsed.provider = provider;
104
+ }
105
+ const model = string(value, "model", `${PROVIDERS_KEY}.model`);
106
+ if (model !== void 0) {
107
+ if (provider === void 0 || provider === DEFAULT_PROVIDER) {
108
+ throw toError(
109
+ `${source}: "${PROVIDERS_KEY}.model" was given without a provider: a model name does not say which provider owns it. Set ${PROVIDERS_KEY}.provider to one of ${NAMEABLE_PROVIDERS.join(", ")}, or drop the model to take the detected provider's default.`
110
+ );
111
+ }
112
+ parsed.model = model;
113
+ }
114
+ for (const name of CONNECTION_NAMES) {
115
+ const section = value[name];
116
+ if (section == null) continue;
117
+ const label = `${PROVIDERS_KEY}.${name}`;
118
+ if (!isMapping(section)) {
119
+ throw toError(`${source}: "${label}" must be a mapping.`);
120
+ }
121
+ rejectUnknown(section, CONNECTION_KEYS[name], label, source, toError);
122
+ const field = (key) => string(section, key, `${label}.${key}`);
123
+ switch (name) {
124
+ case "anthropic": {
125
+ const apiKeyEnv = field("apiKeyEnv");
126
+ parsed.anthropic = apiKeyEnv === void 0 ? {} : { apiKeyEnv };
127
+ break;
128
+ }
129
+ case "openai": {
130
+ const baseUrl = field("baseUrl");
131
+ const apiKeyEnv = field("apiKeyEnv");
132
+ parsed.openai = {
133
+ ...baseUrl !== void 0 ? { baseUrl } : {},
134
+ ...apiKeyEnv !== void 0 ? { apiKeyEnv } : {}
135
+ };
136
+ break;
137
+ }
138
+ case "claude-cli": {
139
+ const command = field("command");
140
+ parsed["claude-cli"] = command === void 0 ? {} : { command };
141
+ break;
142
+ }
143
+ case "jev": {
144
+ const apiKeyEnv = field("apiKeyEnv");
145
+ const baseUrl = field("baseUrl");
146
+ parsed.jev = {
147
+ ...apiKeyEnv !== void 0 ? { apiKeyEnv } : {},
148
+ ...baseUrl !== void 0 ? { baseUrl } : {}
149
+ };
150
+ break;
151
+ }
152
+ case "llama-cpp": {
153
+ const modelsDir = field("modelsDir");
154
+ const thoughtTokens = section["thoughtTokens"];
155
+ if (thoughtTokens !== void 0 && (typeof thoughtTokens !== "number" || !Number.isInteger(thoughtTokens) || thoughtTokens < 0)) {
156
+ throw toError(
157
+ `${source}: "${label}.thoughtTokens" must be a whole number of 0 or more, got ${JSON.stringify(thoughtTokens)}.`
158
+ );
159
+ }
160
+ const keepAlive = keepAliveOf(section["keepAlive"], `${label}.keepAlive`, source, toError);
161
+ parsed["llama-cpp"] = {
162
+ ...modelsDir !== void 0 ? { modelsDir: resolve(dir, modelsDir) } : {},
163
+ ...thoughtTokens !== void 0 ? { thoughtTokens } : {},
164
+ ...keepAlive !== void 0 ? { keepAlive } : {}
165
+ };
166
+ break;
167
+ }
168
+ }
169
+ }
170
+ return parsed;
171
+ }
172
+ var DEFAULT_KEEP_ALIVE_MS = 10 * 6e4;
173
+ function keepAliveOf(value, label, source, toError) {
174
+ if (value === void 0) return void 0;
175
+ if (value === 0 || value === "0") return 0;
176
+ const refuse = () => toError(
177
+ `${source}: "${label}" must be 0 or a duration such as 30m, 24h, 7d or 2w, got "${typeof value === "string" ? value : JSON.stringify(value)}"`
178
+ );
179
+ if (typeof value !== "string") throw refuse();
180
+ return parseDuration(value, refuse);
181
+ }
182
+ var LOCAL_PROVIDER = "llama-cpp";
183
+ var LOCAL_FLAG_HELP = "run inference on this machine (llama-cpp); overrides any configured or eval-level provider";
184
+ var LOCAL_COMPATIBLE = /* @__PURE__ */ new Set([LOCAL_PROVIDER, DEFAULT_PROVIDER, "mock"]);
185
+ function assertLocalFlag(flag, toError) {
186
+ if (flag.local !== true || flag.provider === void 0) return;
187
+ assertKnownProvider(flag.provider, toError);
188
+ if (LOCAL_COMPATIBLE.has(flag.provider)) return;
189
+ throw toError(
190
+ `--local and --provider ${flag.provider} contradict each other: --local runs inference on this machine with ${LOCAL_PROVIDER}. Drop one of them.`
191
+ );
192
+ }
193
+ function selectProvider(flag, levels) {
194
+ if (flag.local === true) return selectLocal(flag, levels);
195
+ const provider = flag.provider ?? levels.find((level) => level.provider !== void 0)?.provider ?? DEFAULT_PROVIDER;
196
+ const model = flag.model ?? levels.find(
197
+ (level) => level.model !== void 0 && (level.provider === void 0 || level.provider === provider)
198
+ )?.model;
199
+ return { provider, model };
200
+ }
201
+ function selectLocal(flag, levels) {
202
+ const provider = flag.provider === "mock" ? "mock" : LOCAL_PROVIDER;
203
+ const model = flag.model ?? levels.find((level) => level.model !== void 0 && level.provider === provider)?.model;
204
+ const chosen = flag.provider === void 0 ? levels.find((level) => level.provider !== void 0) : void 0;
205
+ const replaced = chosen?.provider !== void 0 && chosen.origin !== void 0 && chosen.provider !== provider && chosen.provider !== DEFAULT_PROVIDER ? { provider: chosen.provider, source: chosen.origin } : void 0;
206
+ return replaced === void 0 ? { provider, model } : { provider, model, replaced };
207
+ }
208
+ function localNotice(selection) {
209
+ const { replaced } = selection;
210
+ if (replaced === void 0) return void 0;
211
+ return `--local: using ${LOCAL_PROVIDER} instead of "${replaced.provider}" from ${replaced.source}.`;
212
+ }
213
+ function providerSpecFor(connections, selection) {
214
+ const { provider, model } = selection;
215
+ const local = connections["llama-cpp"] ?? {};
216
+ const llamaCpp = {
217
+ thoughtTokens: local.thoughtTokens ?? 0,
218
+ ...local.modelsDir !== void 0 ? { modelsDirectory: local.modelsDir } : {}
219
+ };
220
+ switch (provider) {
221
+ case "anthropic":
222
+ return {
223
+ provider,
224
+ model,
225
+ apiKeyEnv: connections.anthropic?.apiKeyEnv ?? "ANTHROPIC_API_KEY"
226
+ };
227
+ case "openai":
228
+ return {
229
+ provider,
230
+ model,
231
+ apiKeyEnv: connections.openai?.apiKeyEnv ?? "OPENAI_API_KEY",
232
+ baseUrl: connections.openai?.baseUrl ?? DEFAULT_OPENAI_BASE_URL
233
+ };
234
+ case "claude-cli":
235
+ return { provider, model, command: connections["claude-cli"]?.command ?? "claude" };
236
+ case "jev":
237
+ return {
238
+ provider,
239
+ model,
240
+ apiKeyEnv: connections.jev?.apiKeyEnv ?? "TYPESAFE_API_KEY",
241
+ baseUrl: connections.jev?.baseUrl ?? DEFAULT_JEV_BASE_URL
242
+ };
243
+ case "llama-cpp":
244
+ return { provider, model, llamaCpp };
245
+ case "mock":
246
+ return { provider, model };
247
+ case "auto": {
248
+ const baseUrl = connections.openai?.baseUrl;
249
+ const command = connections["claude-cli"]?.command;
250
+ const configuredLocal = local.thoughtTokens !== void 0 || local.modelsDir !== void 0;
251
+ return {
252
+ provider,
253
+ model,
254
+ ...baseUrl !== void 0 ? { baseUrl } : {},
255
+ ...command !== void 0 ? { command } : {},
256
+ ...configuredLocal ? { llamaCpp } : {}
257
+ };
258
+ }
259
+ }
260
+ }
261
+ async function resolveIdentity(spec, toError) {
262
+ try {
263
+ return await resolveProviderIdentityAsync(spec);
264
+ } catch (err) {
265
+ throw toError(
266
+ err instanceof InferenceError ? err.message : `Could not resolve provider "${String(spec.provider)}": ${errorMessage(err)}`
267
+ );
268
+ }
269
+ }
270
+
271
+ export {
272
+ parseDuration,
273
+ DECISION_ONLY_PROVIDERS,
274
+ assertKnownProvider,
275
+ assertModelHasProvider,
276
+ PROVIDERS_KEY,
277
+ parseProviders,
278
+ DEFAULT_KEEP_ALIVE_MS,
279
+ LOCAL_FLAG_HELP,
280
+ assertLocalFlag,
281
+ selectProvider,
282
+ localNotice,
283
+ providerSpecFor,
284
+ resolveIdentity
285
+ };
286
+ //# sourceMappingURL=chunk-QCHVR4ZM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/duration.ts","../src/shared/providers.ts"],"sourcesContent":["/**\n * `--newer-than <duration>`: a window of time back from now, shared by every\n * domain that selects its inputs by age.\n *\n * Deliberately strict. A duration this refuses is a usage error, because the\n * alternative (reading `7y` as zero, or as \"everything\") silently changes what\n * a gate looked at.\n */\n\nconst UNITS: Readonly<Record<string, number>> = {\n m: 60_000,\n h: 60 * 60_000,\n d: 24 * 60 * 60_000,\n w: 7 * 24 * 60 * 60_000,\n};\n\n/**\n * The usage error for a value that is not a duration. `label` is what the\n * user wrote it under, a flag or a config key.\n */\nexport function durationMessage(value: string, label = \"--newer-than\"): string {\n return `${label} must be a duration such as 30m, 24h, 7d or 2w, got \"${value}\"`;\n}\n\n/**\n * `7d` to milliseconds. A count, which may carry a fraction, then one unit:\n * `m` minutes, `h` hours, `d` days or `w` weeks. `makeError` builds the\n * domain's own `ToolError` subclass, so the refusal exits 2 under its name.\n */\nexport function parseDuration(\n text: string,\n makeError: (message: string) => Error,\n label?: string,\n): number {\n const match = /^(\\d+(?:\\.\\d+)?)([mhdw])$/.exec(text.trim());\n const count = match?.[1];\n const unit = match?.[2];\n const ms = unit === undefined ? undefined : UNITS[unit];\n if (count === undefined || ms === undefined) {\n throw makeError(durationMessage(text, label));\n }\n return Number(count) * ms;\n}\n","/**\n * Choosing an inference provider and model, for every tool that sends content\n * to one: `manni meta fill` and `manni docevals`.\n *\n * The names a tool accepts, the refusals, what `--local` overrides and the\n * detection call are one implementation, so a provider added upstream reaches both tools on the same\n * day and a message reads the same in both. What differs is only what the\n * caller passes in: the config key its user writes, and its own error class,\n * which is what maps the refusal to exit 2.\n */\nimport { resolve } from \"node:path\";\nimport {\n DEFAULT_JEV_BASE_URL,\n DEFAULT_MODELS,\n DEFAULT_OPENAI_BASE_URL,\n InferenceError,\n resolveProviderIdentityAsync,\n type ProviderName,\n type ProviderSelector,\n type ProviderSpec,\n} from \"@hawkeyexl/inference\";\nimport { parseDuration } from \"./duration.js\";\nimport { errorMessage } from \"./errors.js\";\n\n/** Builds the caller's own error from a message. */\nexport type ToErrorFn = (message: string) => Error;\n\n/**\n * `auto` detects the highest-priority provider this machine can actually use —\n * an Anthropic key, then an OpenAI key, then the Claude CLI, then a local model\n * that needs no credentials at all. Defaulting to a named provider instead meant\n * a tool failed outright for anyone who did not happen to hold that vendor's\n * key.\n */\nexport const DEFAULT_PROVIDER = \"auto\";\n\n/**\n * Providers that answer decisions and never generate text. Every family tool\n * but one generates, so these are refused unless the caller asks for decisions,\n * as tracevals' in-loop judge does (proposal 0079).\n */\nexport const DECISION_ONLY_PROVIDERS: ReadonlySet<string> = new Set([\"jev\"]);\n\n/**\n * Provider names the inference layer accepts for generation, taken from the\n * library rather than copied. A hardcoded list silently went stale when `llama-cpp` was added\n * upstream; deriving it means a new provider works the day it ships.\n */\nexport const PROVIDERS: ReadonlySet<string> = new Set<string>([\n ...Object.keys(DEFAULT_MODELS).filter((name) => !DECISION_ONLY_PROVIDERS.has(name)),\n DEFAULT_PROVIDER,\n]);\n\n/**\n * The providers a user can name for a model, which is what every message lists.\n * `mock` is the library's test double: accepted when asked for by name, so the\n * suite and the docs' own tests can run without a provider, but never offered.\n */\nconst NAMEABLE_PROVIDERS: readonly string[] = Object.keys(DEFAULT_MODELS).filter(\n (name) => name !== \"mock\" && !DECISION_ONLY_PROVIDERS.has(name),\n);\n\n/**\n * Refuse a name the library does not offer, or a decision-only provider where\n * the caller generates.\n */\nexport function assertKnownProvider(\n name: string,\n toError: ToErrorFn,\n options: { decisions?: boolean } = {},\n): asserts name is ProviderSelector {\n if (DECISION_ONLY_PROVIDERS.has(name)) {\n if (options.decisions === true) return;\n throw toError(\n `Provider \"${name}\" answers decisions only, so it cannot generate. Available: ${[...NAMEABLE_PROVIDERS, DEFAULT_PROVIDER].join(\", \")}.`,\n );\n }\n if (PROVIDERS.has(name)) return;\n throw toError(\n `Unknown provider \"${name}\". Available: ${[...NAMEABLE_PROVIDERS, DEFAULT_PROVIDER].join(\", \")}.`,\n );\n}\n\n/**\n * A model name belongs to exactly one provider, so it cannot be handed to\n * whichever provider detection picks: `--model gpt-4o-mini` on a machine with an\n * Anthropic key selected anthropic and then 404'd mid-run, after file discovery\n * had already been paid for.\n *\n * The library enforces this too. It is repeated here to name the flag and the\n * config key rather than the API fields, since that is what the user typed.\n *\n * `name` is the EFFECTIVE provider, so a provider in config satisfies this just\n * as `--provider` does; only an unresolved `auto` is ambiguous. `configKey` is\n * the key as the user writes it (`fill.provider`, `docevals.provider`).\n */\nexport function assertModelHasProvider(\n name: ProviderSelector,\n model: string | undefined,\n configKey: string,\n toError: ToErrorFn,\n): void {\n if (name !== DEFAULT_PROVIDER || model == null) return;\n throw toError(\n `Model \"${model}\" was given without a provider: a model name does not say ` +\n `which provider owns it. Set --provider or ${configKey} to one of ` +\n `${NAMEABLE_PROVIDERS.join(\", \")}, or drop the model to take the ` +\n `detected provider's default.`,\n );\n}\n\n/**\n * Connection settings, per provider, as the family's top-level `providers:`\n * map states them. Only what the user wrote: `providerSpecFor` supplies the\n * defaults, so detection can tell a configured value from a default one.\n */\nexport interface ProviderConnections {\n anthropic?: { apiKeyEnv?: string };\n openai?: { baseUrl?: string; apiKeyEnv?: string };\n \"claude-cli\"?: { command?: string };\n /** A decide-only provider: it judges, and never generates. */\n jev?: { apiKeyEnv?: string; baseUrl?: string };\n /**\n * `modelsDir` is absolute: resolved against the config file's directory.\n * `keepAlive` is milliseconds, parsed from a duration; `0` unloads a model\n * as soon as no session holds it. It belongs to the model host, so it\n * never reaches a provider spec.\n */\n \"llama-cpp\"?: { modelsDir?: string; thoughtTokens?: number; keepAlive?: number };\n}\n\n/** The family's top-level `providers:` map, parsed. */\nexport interface ProvidersConfig extends ProviderConnections {\n /** Absent when not written. */\n provider?: ProviderSelector;\n /** Absent when not written. Never present without a named `provider`. */\n model?: string;\n}\n\n/** The family's top-level key for provider settings. */\nexport const PROVIDERS_KEY = \"providers\";\n\n/** What each provider's section may carry, in the order messages list it. */\nconst CONNECTION_KEYS = {\n anthropic: [\"apiKeyEnv\"],\n openai: [\"baseUrl\", \"apiKeyEnv\"],\n \"claude-cli\": [\"command\"],\n jev: [\"apiKeyEnv\", \"baseUrl\"],\n \"llama-cpp\": [\"modelsDir\", \"thoughtTokens\", \"keepAlive\"],\n} as const;\n\ntype ConnectionName = keyof typeof CONNECTION_KEYS;\n\nconst CONNECTION_NAMES = Object.keys(CONNECTION_KEYS) as ConnectionName[];\n\nconst TOP_LEVEL_KEYS: readonly string[] = [\"provider\", \"model\", ...CONNECTION_NAMES];\n\nfunction isMapping(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction rejectUnknown(\n raw: Record<string, unknown>,\n allowed: readonly string[],\n label: string,\n source: string,\n toError: ToErrorFn,\n): void {\n for (const key of Object.keys(raw)) {\n if (!allowed.includes(key)) {\n throw toError(\n `${source}: \"${label}\" has unknown key \"${key}\". Supported keys: ${allowed.join(\", \")}.`,\n );\n }\n }\n}\n\n/**\n * Parse the family's `providers:` map. Every message names `source`, and a\n * relative `llama-cpp.modelsDir` resolves from `dir`, the directory holding\n * the file, as every other path written in the config does.\n */\nexport function parseProviders(\n value: unknown,\n source: string,\n dir: string,\n toError: ToErrorFn,\n): ProvidersConfig {\n if (value == null) return {};\n if (!isMapping(value)) {\n throw toError(`${source}: \"${PROVIDERS_KEY}\" must be a mapping.`);\n }\n rejectUnknown(value, TOP_LEVEL_KEYS, PROVIDERS_KEY, source, toError);\n\n const string = (raw: Record<string, unknown>, key: string, label: string): string | undefined => {\n const v = raw[key];\n if (v === undefined) return undefined;\n if (typeof v !== \"string\") {\n throw toError(`${source}: \"${label}\" must be a string.`);\n }\n return v;\n };\n\n const parsed: ProvidersConfig = {};\n const provider = string(value, \"provider\", `${PROVIDERS_KEY}.provider`);\n if (provider !== undefined) {\n assertKnownProvider(provider, (message) => toError(`${source}: ${message}`));\n parsed.provider = provider;\n }\n const model = string(value, \"model\", `${PROVIDERS_KEY}.model`);\n if (model !== undefined) {\n if (provider === undefined || provider === DEFAULT_PROVIDER) {\n throw toError(\n `${source}: \"${PROVIDERS_KEY}.model\" was given without a provider: a model name does not ` +\n `say which provider owns it. Set ${PROVIDERS_KEY}.provider to one of ` +\n `${NAMEABLE_PROVIDERS.join(\", \")}, or drop the model to take the detected provider's default.`,\n );\n }\n parsed.model = model;\n }\n\n for (const name of CONNECTION_NAMES) {\n const section = value[name];\n if (section == null) continue;\n const label = `${PROVIDERS_KEY}.${name}`;\n if (!isMapping(section)) {\n throw toError(`${source}: \"${label}\" must be a mapping.`);\n }\n rejectUnknown(section, CONNECTION_KEYS[name], label, source, toError);\n const field = (key: string): string | undefined => string(section, key, `${label}.${key}`);\n switch (name) {\n case \"anthropic\": {\n const apiKeyEnv = field(\"apiKeyEnv\");\n parsed.anthropic = apiKeyEnv === undefined ? {} : { apiKeyEnv };\n break;\n }\n case \"openai\": {\n const baseUrl = field(\"baseUrl\");\n const apiKeyEnv = field(\"apiKeyEnv\");\n parsed.openai = {\n ...(baseUrl !== undefined ? { baseUrl } : {}),\n ...(apiKeyEnv !== undefined ? { apiKeyEnv } : {}),\n };\n break;\n }\n case \"claude-cli\": {\n const command = field(\"command\");\n parsed[\"claude-cli\"] = command === undefined ? {} : { command };\n break;\n }\n case \"jev\": {\n const apiKeyEnv = field(\"apiKeyEnv\");\n const baseUrl = field(\"baseUrl\");\n parsed.jev = {\n ...(apiKeyEnv !== undefined ? { apiKeyEnv } : {}),\n ...(baseUrl !== undefined ? { baseUrl } : {}),\n };\n break;\n }\n case \"llama-cpp\": {\n const modelsDir = field(\"modelsDir\");\n const thoughtTokens = section[\"thoughtTokens\"];\n if (\n thoughtTokens !== undefined &&\n (typeof thoughtTokens !== \"number\" || !Number.isInteger(thoughtTokens) || thoughtTokens < 0)\n ) {\n throw toError(\n `${source}: \"${label}.thoughtTokens\" must be a whole number of 0 or more, got ${JSON.stringify(thoughtTokens)}.`,\n );\n }\n const keepAlive = keepAliveOf(section[\"keepAlive\"], `${label}.keepAlive`, source, toError);\n parsed[\"llama-cpp\"] = {\n ...(modelsDir !== undefined ? { modelsDir: resolve(dir, modelsDir) } : {}),\n ...(thoughtTokens !== undefined ? { thoughtTokens } : {}),\n ...(keepAlive !== undefined ? { keepAlive } : {}),\n };\n break;\n }\n }\n }\n return parsed;\n}\n\n/** `providers.llama-cpp.keepAlive` when unset: ten minutes. */\nexport const DEFAULT_KEEP_ALIVE_MS = 10 * 60_000;\n\n/**\n * `keepAlive`, in milliseconds: `0`, or a duration as `--newer-than` takes\n * one. YAML reads a bare `0` as a number, so both spellings of zero count.\n */\nfunction keepAliveOf(\n value: unknown,\n label: string,\n source: string,\n toError: ToErrorFn,\n): number | undefined {\n if (value === undefined) return undefined;\n if (value === 0 || value === \"0\") return 0;\n const refuse = (): Error =>\n toError(\n `${source}: \"${label}\" must be 0 or a duration such as 30m, 24h, 7d or 2w, got \"${typeof value === \"string\" ? value : JSON.stringify(value)}\"`,\n );\n if (typeof value !== \"string\") throw refuse();\n return parseDuration(value, refuse);\n}\n\n/** A provider and a model as one level states them; either half may be absent. */\nexport interface ProviderChoice {\n provider?: string;\n model?: string;\n /**\n * Where the level's provider was written, as a `--local` notice names it:\n * `providers.provider`, `docevals.provider`, `fill.provider`, or\n * `eval \"<id>\" in <file>`.\n */\n origin?: string;\n}\n\n/** The command line's say: `--provider`, `--model` and `--local`. */\nexport interface ProviderFlags {\n provider?: string;\n model?: string;\n /** Run inference on this machine, with llama-cpp, whatever a level asks for. */\n local?: boolean;\n}\n\n/** A configured choice that `--local` set aside. */\nexport interface ReplacedChoice {\n provider: string;\n source: string;\n}\n\n/** The effective choice, before it is checked or detected. */\nexport interface ProviderSelection {\n provider: string;\n model: string | undefined;\n /** Under `--local`, the configured provider that would otherwise have run. */\n replaced?: ReplacedChoice;\n}\n\n/**\n * The provider `--local` runs. `claude-cli` does not qualify: the binary runs\n * on this machine, the inference does not (proposal 0017).\n */\nexport const LOCAL_PROVIDER = \"llama-cpp\";\n\n/** `--local`'s help, one wording on every command that takes the flag. */\nexport const LOCAL_FLAG_HELP =\n \"run inference on this machine (llama-cpp); overrides any configured or eval-level provider\";\n\n/**\n * Names `--provider` may carry beside `--local`. `auto` under `--local` can\n * only mean the local provider, and `mock` is the library's test double, which\n * sends nothing anywhere.\n */\nconst LOCAL_COMPATIBLE: ReadonlySet<string> = new Set([LOCAL_PROVIDER, DEFAULT_PROVIDER, \"mock\"]);\n\n/**\n * Refuse `--local` beside a `--provider` it contradicts. An unknown name is\n * refused as unknown first: `--local` would otherwise set it aside unread.\n */\nexport function assertLocalFlag(flag: ProviderFlags, toError: ToErrorFn): void {\n if (flag.local !== true || flag.provider === undefined) return;\n assertKnownProvider(flag.provider, toError);\n if (LOCAL_COMPATIBLE.has(flag.provider)) return;\n throw toError(\n `--local and --provider ${flag.provider} contradict each other: --local runs inference ` +\n `on this machine with ${LOCAL_PROVIDER}. Drop one of them.`,\n );\n}\n\n/**\n * The provider and model in force.\n *\n * `flag` is the command line. `levels` are the config's statements, highest\n * precedence first: for docevals an eval's own choice, then `docevals.provider`,\n * then the family's `providers:`; for `meta fill`, `meta.fill`, then the\n * family's. The provider is the flag's, else the first level that names one,\n * else `auto`.\n *\n * A model belongs to the provider its level names, so it is carried only to\n * that provider: a level whose provider lost does not lend its model to the\n * winner, which could not run it. A level naming no provider gives its model\n * to whichever provider is in force, which is how `--provider` supplies the\n * provider a configured model needs. The flag's model applies to whatever\n * wins.\n *\n * `--local` makes the provider llama-cpp, over every level. A level's model\n * then applies only where that level named llama-cpp, and the level whose\n * provider would otherwise have run is returned as `replaced`, unless it was\n * `auto`, which chose no hosted provider. Check the flag with\n * `assertLocalFlag` first: a contradicting `--provider` is not selected here.\n */\nexport function selectProvider(\n flag: ProviderFlags,\n levels: readonly ProviderChoice[],\n): ProviderSelection {\n if (flag.local === true) return selectLocal(flag, levels);\n const provider =\n flag.provider ?? levels.find((level) => level.provider !== undefined)?.provider ?? DEFAULT_PROVIDER;\n const model =\n flag.model ??\n levels.find(\n (level) =>\n level.model !== undefined && (level.provider === undefined || level.provider === provider),\n )?.model;\n return { provider, model };\n}\n\nfunction selectLocal(flag: ProviderFlags, levels: readonly ProviderChoice[]): ProviderSelection {\n // The mock seam survives, so a test can drive `--local` without a runtime.\n const provider = flag.provider === \"mock\" ? \"mock\" : LOCAL_PROVIDER;\n const model =\n flag.model ??\n levels.find((level) => level.model !== undefined && level.provider === provider)?.model;\n // A flag's provider is the command line's own choice, never a replaced one.\n const chosen =\n flag.provider === undefined ? levels.find((level) => level.provider !== undefined) : undefined;\n const replaced =\n chosen?.provider !== undefined &&\n chosen.origin !== undefined &&\n chosen.provider !== provider &&\n chosen.provider !== DEFAULT_PROVIDER\n ? { provider: chosen.provider, source: chosen.origin }\n : undefined;\n return replaced === undefined ? { provider, model } : { provider, model, replaced };\n}\n\n/** What a selection's `--local` notice says, if it replaced anything. */\nexport function localNotice(selection: ProviderSelection): string | undefined {\n const { replaced } = selection;\n if (replaced === undefined) return undefined;\n return `--local: using ${LOCAL_PROVIDER} instead of \"${replaced.provider}\" from ${replaced.source}.`;\n}\n\n/**\n * The library's spec for a selection, with the connection settings from\n * `connections` for the provider it names.\n *\n * A named provider gets its own section, defaults filled. Under `auto` the\n * spec carries every setting detection reads, but only as the user wrote it:\n * the library counts a `baseUrl` as a reason openai is usable, so the default\n * endpoint must not reach detection. `apiKeyEnv` is left out there: the spec\n * has one for every provider, and detection looks for the default variables.\n */\nexport function providerSpecFor(\n connections: ProviderConnections,\n selection: { provider: ProviderSelector; model: string | null },\n): ProviderSpec {\n const { provider, model } = selection;\n const local = connections[\"llama-cpp\"] ?? {};\n const llamaCpp = {\n thoughtTokens: local.thoughtTokens ?? 0,\n ...(local.modelsDir !== undefined ? { modelsDirectory: local.modelsDir } : {}),\n };\n switch (provider) {\n case \"anthropic\":\n return {\n provider,\n model,\n apiKeyEnv: connections.anthropic?.apiKeyEnv ?? \"ANTHROPIC_API_KEY\",\n };\n case \"openai\":\n return {\n provider,\n model,\n apiKeyEnv: connections.openai?.apiKeyEnv ?? \"OPENAI_API_KEY\",\n baseUrl: connections.openai?.baseUrl ?? DEFAULT_OPENAI_BASE_URL,\n };\n case \"claude-cli\":\n return { provider, model, command: connections[\"claude-cli\"]?.command ?? \"claude\" };\n case \"jev\":\n return {\n provider,\n model,\n apiKeyEnv: connections.jev?.apiKeyEnv ?? \"TYPESAFE_API_KEY\",\n baseUrl: connections.jev?.baseUrl ?? DEFAULT_JEV_BASE_URL,\n };\n case \"llama-cpp\":\n // Local weights, in-process: no API key, and no network once they are\n // downloaded.\n return { provider, model, llamaCpp };\n case \"mock\":\n return { provider, model };\n case \"auto\": {\n const baseUrl = connections.openai?.baseUrl;\n const command = connections[\"claude-cli\"]?.command;\n const configuredLocal = local.thoughtTokens !== undefined || local.modelsDir !== undefined;\n return {\n provider,\n model,\n ...(baseUrl !== undefined ? { baseUrl } : {}),\n ...(command !== undefined ? { command } : {}),\n ...(configuredLocal ? { llamaCpp } : {}),\n };\n }\n }\n}\n\n/**\n * The concrete provider and model a spec resolves to, without constructing the\n * provider: a fully cached run needs no API key. Under `auto` this is where\n * detection runs. It probes the environment, the Claude CLI and the local\n * runtime, but never authenticates.\n *\n * The model returned is the RESOLVED one (the provider's default when none was\n * named, a llama-cpp tier's concrete weights), which is what makes it safe as\n * cache-key material: a library default that changes changes the key.\n */\nexport async function resolveIdentity(\n spec: ProviderSpec,\n toError: ToErrorFn,\n): Promise<{ provider: ProviderName; model: string }> {\n try {\n return await resolveProviderIdentityAsync(spec);\n } catch (err) {\n // Detection failing with nothing available is operational, not per-file:\n // the aggregate message names every provider it tried and why each was out.\n throw toError(\n err instanceof InferenceError\n ? err.message\n : `Could not resolve provider \"${String(spec.provider)}\": ${errorMessage(err)}`,\n );\n }\n}\n"],"mappings":"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","names":[]}
@@ -12,7 +12,7 @@ import {
12
12
  shortCommit,
13
13
  toValidationResult,
14
14
  unitText
15
- } from "./chunk-SKSDRUUK.js";
15
+ } from "./chunk-UAKNZVCD.js";
16
16
  import {
17
17
  SEVERITIES
18
18
  } from "./chunk-77AINBYM.js";
@@ -34,14 +34,12 @@ import {
34
34
  sliceLines,
35
35
  sourceRange,
36
36
  spellSource
37
- } from "./chunk-YTURO7SI.js";
38
- import {
39
- STDIN_REQUIRES_AS
40
- } from "./chunk-TK3FC4RF.js";
37
+ } from "./chunk-MHM4QEBV.js";
41
38
  import {
42
39
  MAX_RANGE_LINES,
43
40
  MOVE_BUDGET_BYTES,
44
41
  PATH_JOIN,
42
+ STDIN_REQUIRES_AS,
45
43
  configMarks,
46
44
  externalMetadataJoin,
47
45
  findWindows,
@@ -58,7 +56,7 @@ import {
58
56
  spellLines,
59
57
  splitLines,
60
58
  toBodyLines
61
- } from "./chunk-M3W7J6MU.js";
59
+ } from "./chunk-TUAAR3MM.js";
62
60
  import {
63
61
  STDIN_LABEL,
64
62
  STDIN_TOKEN,
@@ -72,7 +70,7 @@ import {
72
70
  resolveTargetSet,
73
71
  settleBaseline,
74
72
  supportedExtensions
75
- } from "./chunk-57NEQRVO.js";
73
+ } from "./chunk-KCOFEWV5.js";
76
74
  import {
77
75
  decryptValue,
78
76
  encryptValue,
@@ -82,9 +80,11 @@ import {
82
80
  ownsKey,
83
81
  pageManifestPath,
84
82
  readConfigFile,
85
- selectCollections,
83
+ selectCollections
84
+ } from "./chunk-XKBEHKWO.js";
85
+ import {
86
86
  warn
87
- } from "./chunk-Q35YIDBV.js";
87
+ } from "./chunk-HX44GB4Z.js";
88
88
 
89
89
  // src/cite/commands/check.ts
90
90
  import { existsSync as existsSync2 } from "node:fs";
@@ -1648,4 +1648,4 @@ export {
1648
1648
  sayNotices,
1649
1649
  runCheck
1650
1650
  };
1651
- //# sourceMappingURL=chunk-PIKOVN6W.js.map
1651
+ //# sourceMappingURL=chunk-QW77LCOU.js.map
@@ -3,7 +3,7 @@ import {
3
3
  TERM_FIELDS,
4
4
  displayPath,
5
5
  plural
6
- } from "./chunk-PU6DFJMY.js";
6
+ } from "./chunk-C73RSUIC.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-2B7ZNTPV.js.map
230
+ //# sourceMappingURL=chunk-SM6NOMJS.js.map