@hawkeyexl/manni 4.10.0 → 4.12.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.
- package/README.md +1 -1
- package/dist/batch-EFSFG6GC.js +46 -0
- package/dist/build-NIO3UIWJ.js +36 -0
- package/dist/calibrate-6VO7URRV.js +41 -0
- package/dist/capture-NMBVJO3C.js +38 -0
- package/dist/check-SHOYX2B5.js +30 -0
- package/dist/check-XMJKH3KV.js +34 -0
- package/dist/{check-NLL4NRYA.js → check-Y62BJNC4.js} +35 -31
- package/dist/{check-NLL4NRYA.js.map → check-Y62BJNC4.js.map} +1 -1
- package/dist/{check-7B77ZD2N.js → check-ZMO3ZLMW.js} +19 -15
- package/dist/{chunk-PK7EKJ5T.js → chunk-24AJK2RG.js} +5 -10
- package/dist/chunk-24AJK2RG.js.map +1 -0
- package/dist/chunk-2OZF2VUB.js +164 -0
- package/dist/chunk-2OZF2VUB.js.map +1 -0
- package/dist/chunk-2UJZXVHR.js +1868 -0
- package/dist/chunk-2UJZXVHR.js.map +1 -0
- package/dist/{chunk-DNZUBCGZ.js → chunk-3BRJCQPY.js} +36 -7
- package/dist/chunk-3BRJCQPY.js.map +1 -0
- package/dist/{chunk-D2UW3ZCK.js → chunk-42VFJOAF.js} +13 -11
- package/dist/{chunk-D2UW3ZCK.js.map → chunk-42VFJOAF.js.map} +1 -1
- package/dist/{chunk-LQZQ5KGG.js → chunk-4Q24OYI3.js} +7 -7
- package/dist/{chunk-XU73V5XT.js → chunk-4WJTURRO.js} +15 -15
- package/dist/{chunk-WN47MNSK.js → chunk-5SID2SVL.js} +4 -4
- package/dist/{chunk-5REEVKGH.js → chunk-AANUY4BH.js} +2 -2
- package/dist/chunk-ANPIIYRH.js +2272 -0
- package/dist/chunk-ANPIIYRH.js.map +1 -0
- package/dist/{chunk-RZVCWX5R.js → chunk-AYVKN3PG.js} +4 -4
- package/dist/{chunk-2UCC26MO.js → chunk-CH6IOGXV.js} +9 -9
- package/dist/{chunk-RODZ7MB7.js → chunk-D5Z6B4M7.js} +6 -6
- package/dist/{chunk-IJ62BB2T.js → chunk-D6SELXQ2.js} +7 -7
- package/dist/{chunk-2JV7C4YV.js → chunk-DDILEF5F.js} +890 -1399
- package/dist/chunk-DDILEF5F.js.map +1 -0
- package/dist/{chunk-3E2X2RBU.js → chunk-DGRLHDM4.js} +9 -9
- package/dist/{chunk-2BV4FBC7.js → chunk-DHGB4JBG.js} +4 -3
- package/dist/chunk-DHGB4JBG.js.map +1 -0
- package/dist/{chunk-6LR73NMO.js → chunk-DLU5FCFT.js} +30 -28
- package/dist/chunk-DLU5FCFT.js.map +1 -0
- package/dist/chunk-DSWKBZWW.js +16 -0
- package/dist/chunk-DSWKBZWW.js.map +1 -0
- package/dist/{chunk-BD7IXBWE.js → chunk-F564FHMQ.js} +8 -8
- package/dist/{chunk-ABHG6I3G.js → chunk-FKAZUZQU.js} +469 -85
- package/dist/chunk-FKAZUZQU.js.map +1 -0
- package/dist/{chunk-DFCQ6BMI.js → chunk-G3MBUL5M.js} +4 -4
- package/dist/{chunk-SUTMSDQ2.js → chunk-GQ3KRY3B.js} +3 -3
- package/dist/chunk-HDPN46JP.js +393 -0
- package/dist/chunk-HDPN46JP.js.map +1 -0
- package/dist/{chunk-EAUIQADY.js → chunk-IQQAJROD.js} +6 -6
- package/dist/{chunk-ZHRPH52H.js → chunk-IZXN3WI6.js} +2 -2
- package/dist/{chunk-NCPWXHDO.js → chunk-JEUFYSFQ.js} +4 -4
- package/dist/{chunk-G6FNWRAI.js → chunk-JSSM7VVV.js} +4 -4
- package/dist/{chunk-CCWMACJL.js → chunk-KFGZPVFA.js} +229 -821
- package/dist/chunk-KFGZPVFA.js.map +1 -0
- package/dist/{chunk-H26VDFDS.js → chunk-KGFSPJLD.js} +2 -2
- package/dist/{chunk-AO5TSDKT.js → chunk-KMORGMCW.js} +7 -7
- package/dist/{chunk-WQWKYAAK.js → chunk-NUQF5F5J.js} +2 -2
- package/dist/{chunk-2YJ5H5E6.js → chunk-NZ6KSHFD.js} +23 -21
- package/dist/{chunk-2YJ5H5E6.js.map → chunk-NZ6KSHFD.js.map} +1 -1
- package/dist/{chunk-7Y3N4Y72.js → chunk-OHUDZRLK.js} +3 -3
- package/dist/{chunk-GCKHSBEN.js → chunk-OKMTUAWO.js} +4 -4
- package/dist/{chunk-6M5VJOC2.js → chunk-OTJOBZJ5.js} +167 -166
- package/dist/chunk-OTJOBZJ5.js.map +1 -0
- package/dist/{chunk-2W34HX2U.js → chunk-PS257NIU.js} +288 -373
- package/dist/chunk-PS257NIU.js.map +1 -0
- package/dist/chunk-QDC7JPFG.js +685 -0
- package/dist/chunk-QDC7JPFG.js.map +1 -0
- package/dist/chunk-QEAGL4V5.js +3185 -0
- package/dist/chunk-QEAGL4V5.js.map +1 -0
- package/dist/{chunk-GB2XPITA.js → chunk-QMY57PVW.js} +2 -2
- package/dist/{chunk-55GMOVKW.js → chunk-QNDDPXFR.js} +2 -2
- package/dist/{chunk-GXN7RRHR.js → chunk-QSIXNTRV.js} +4 -4
- package/dist/{chunk-G7XD4QH5.js → chunk-RGLFV4KO.js} +11372 -10218
- package/dist/chunk-RGLFV4KO.js.map +1 -0
- package/dist/{chunk-QBVP3SQP.js → chunk-SGR7ZAVE.js} +13 -7
- package/dist/chunk-SGR7ZAVE.js.map +1 -0
- package/dist/{chunk-KBG463UK.js → chunk-SMHAYK6I.js} +2409 -5243
- package/dist/chunk-SMHAYK6I.js.map +1 -0
- package/dist/{chunk-XG6PVB5S.js → chunk-SSQZB5SQ.js} +1 -11
- package/dist/chunk-SSQZB5SQ.js.map +1 -0
- package/dist/{chunk-GDLHTI5R.js → chunk-STPGIKPY.js} +8 -2
- package/dist/chunk-STPGIKPY.js.map +1 -0
- package/dist/{chunk-QJRQ4BRC.js → chunk-U22TOL5Y.js} +17 -17
- package/dist/{chunk-NGTVREIH.js → chunk-U6IHLEWT.js} +2 -2
- package/dist/{chunk-Z5YHMRLF.js → chunk-UUCCV3SI.js} +2 -2
- package/dist/{chunk-ZXXFP2LA.js → chunk-UXMCHBOJ.js} +2 -2
- package/dist/{chunk-VZVEP2OZ.js → chunk-VFAKGIDG.js} +2 -2
- package/dist/{chunk-QCHVR4ZM.js → chunk-VM7VAFJW.js} +33 -7
- package/dist/chunk-VM7VAFJW.js.map +1 -0
- package/dist/{chunk-VQK4VHLF.js → chunk-YQV75FIL.js} +2 -2
- package/dist/chunk-YUTVAMWW.js +2 -0
- package/dist/chunk-ZPLVANY2.js +15 -0
- package/dist/chunk-ZPLVANY2.js.map +1 -0
- package/dist/{cli-BIIUKPTE.js → cli-4CR7QIOK.js} +26 -22
- package/dist/{cli-BIIUKPTE.js.map → cli-4CR7QIOK.js.map} +1 -1
- package/dist/{cli-V2DI3K2R.js → cli-6R4W3HAH.js} +37 -33
- package/dist/{cli-V2DI3K2R.js.map → cli-6R4W3HAH.js.map} +1 -1
- package/dist/{cli-HO62TOM2.js → cli-BOMA2FMP.js} +14 -11
- package/dist/{cli-EH3I4IUX.js → cli-EDQPQOCE.js} +47 -41
- package/dist/cli-EDQPQOCE.js.map +1 -0
- package/dist/{cli-P2X7PNY6.js → cli-GBF76EXT.js} +25 -20
- package/dist/{cli-P2X7PNY6.js.map → cli-GBF76EXT.js.map} +1 -1
- package/dist/{cli-4YYC6LCY.js → cli-MQYCF3SR.js} +27 -23
- package/dist/{cli-4YYC6LCY.js.map → cli-MQYCF3SR.js.map} +1 -1
- package/dist/{cli-UETKXHJN.js → cli-OJKFXQOM.js} +9 -9
- package/dist/{cli-LWST5FQH.js → cli-PHZAO4LZ.js} +4 -4
- package/dist/{cli-TELPAMJO.js → cli-PTKFFNOW.js} +59 -35
- package/dist/cli-PTKFFNOW.js.map +1 -0
- package/dist/{cli-SGVFZOAW.js → cli-UW2K5Z5J.js} +34 -29
- package/dist/{cli-SGVFZOAW.js.map → cli-UW2K5Z5J.js.map} +1 -1
- package/dist/cli-XXTNPPKB.js +83 -0
- package/dist/cli-XXTNPPKB.js.map +1 -0
- package/dist/cli.js +24 -12
- package/dist/cli.js.map +1 -1
- package/dist/{config-TYXYQK3I.js → config-JJW75SBX.js} +5 -5
- package/dist/docmeta.js +13 -10
- package/dist/docmeta.js.map +1 -1
- package/dist/github-6VQKSB67.js +35 -0
- package/dist/github-RBSEM7ZK.js +30 -0
- package/dist/graph/runtime.d.ts +4 -1
- package/dist/graph/runtime.js +20 -9
- package/dist/graph/runtime.js.map +1 -1
- package/dist/{host-6GURH5HE.js → host-YSTYO5DX.js} +3 -3
- package/dist/index.d.ts +1214 -940
- package/dist/index.js +190 -160
- package/dist/index.js.map +1 -1
- package/dist/{json-QR4G35KA.js → json-PU2HLHDQ.js} +18 -14
- package/dist/labels-SJNSOPBI.js +73 -0
- package/dist/labels-SJNSOPBI.js.map +1 -0
- package/dist/lint-KIVTHLGU.js +34 -0
- package/dist/list-RDEJDDJF.js +32 -0
- package/dist/list-SUTDWL2J.js +35 -0
- package/dist/{page-FSXDXCDD.js → page-UMAA3NCM.js} +18 -13
- package/dist/{prepare-UPIBTFNS.js → prepare-3I3LOXXD.js} +24 -20
- package/dist/{prepare-UPIBTFNS.js.map → prepare-3I3LOXXD.js.map} +1 -1
- package/dist/{pretty-4IONWSEP.js → pretty-ANLRHU4O.js} +18 -14
- package/dist/{pretty-R4BQD2VH.js → pretty-Q3ZFKOR7.js} +18 -14
- package/dist/{provider-527CO4DM.js → provider-LBX4IXGX.js} +3 -3
- package/dist/{release-3D5PK6M7.js → release-VV3UTKE5.js} +3 -3
- package/dist/{reporters-M6LJ2IYU.js → reporters-26H3N2KW.js} +3 -3
- package/dist/{reporters-DHO2BXAD.js → reporters-ILT36CIH.js} +7 -7
- package/dist/{reporters-FPP6JNDP.js → reporters-PNDLWT6K.js} +16 -12
- package/dist/run-QXCK33Z4.js +37 -0
- package/dist/{term-ASM4LVYC.js → term-D2N7UN4P.js} +981 -138
- package/dist/term-D2N7UN4P.js.map +1 -0
- package/dist/validate-BRUCOT2O.js +19 -0
- package/dist/validate-BRUCOT2O.js.map +1 -0
- package/package.json +3 -2
- package/plugin/manni/.claude-plugin/plugin.json +1 -1
- package/shapes/graph/shapes-1.1.0.ttl +785 -0
- package/dist/batch-6NICDKRE.js +0 -41
- package/dist/build-3KP2K3XN.js +0 -32
- package/dist/calibrate-LUA3DWKD.js +0 -36
- package/dist/capture-NETOHCB4.js +0 -34
- package/dist/check-E4QCB7LS.js +0 -20
- package/dist/check-PTECPIIB.js +0 -26
- package/dist/chunk-2BV4FBC7.js.map +0 -1
- package/dist/chunk-2JV7C4YV.js.map +0 -1
- package/dist/chunk-2W34HX2U.js.map +0 -1
- package/dist/chunk-4DLF5SA4.js +0 -392
- package/dist/chunk-4DLF5SA4.js.map +0 -1
- package/dist/chunk-6AGESHHM.js +0 -387
- package/dist/chunk-6AGESHHM.js.map +0 -1
- package/dist/chunk-6LR73NMO.js.map +0 -1
- package/dist/chunk-6M5VJOC2.js.map +0 -1
- package/dist/chunk-ABHG6I3G.js.map +0 -1
- package/dist/chunk-CCWMACJL.js.map +0 -1
- package/dist/chunk-DNZUBCGZ.js.map +0 -1
- package/dist/chunk-G7XD4QH5.js.map +0 -1
- package/dist/chunk-GDLHTI5R.js.map +0 -1
- package/dist/chunk-KBG463UK.js.map +0 -1
- package/dist/chunk-PK7EKJ5T.js.map +0 -1
- package/dist/chunk-QBVP3SQP.js.map +0 -1
- package/dist/chunk-QCHVR4ZM.js.map +0 -1
- package/dist/chunk-VVVKBUBO.js +0 -818
- package/dist/chunk-VVVKBUBO.js.map +0 -1
- package/dist/chunk-XG6PVB5S.js.map +0 -1
- package/dist/cli-EH3I4IUX.js.map +0 -1
- package/dist/cli-TELPAMJO.js.map +0 -1
- package/dist/github-ESK45CEZ.js +0 -26
- package/dist/github-WER7JUTN.js +0 -31
- package/dist/lint-QTI7XK2A.js +0 -30
- package/dist/list-JO4G3TS3.js +0 -30
- package/dist/list-O2MJUP5V.js +0 -28
- package/dist/run-YH5Z7RJ7.js +0 -32
- package/dist/term-ASM4LVYC.js.map +0 -1
- package/dist/validate-7JI3H57P.js +0 -17
- /package/dist/{batch-6NICDKRE.js.map → batch-EFSFG6GC.js.map} +0 -0
- /package/dist/{build-3KP2K3XN.js.map → build-NIO3UIWJ.js.map} +0 -0
- /package/dist/{calibrate-LUA3DWKD.js.map → calibrate-6VO7URRV.js.map} +0 -0
- /package/dist/{capture-NETOHCB4.js.map → capture-NMBVJO3C.js.map} +0 -0
- /package/dist/{check-7B77ZD2N.js.map → check-SHOYX2B5.js.map} +0 -0
- /package/dist/{check-E4QCB7LS.js.map → check-XMJKH3KV.js.map} +0 -0
- /package/dist/{check-PTECPIIB.js.map → check-ZMO3ZLMW.js.map} +0 -0
- /package/dist/{chunk-LQZQ5KGG.js.map → chunk-4Q24OYI3.js.map} +0 -0
- /package/dist/{chunk-XU73V5XT.js.map → chunk-4WJTURRO.js.map} +0 -0
- /package/dist/{chunk-WN47MNSK.js.map → chunk-5SID2SVL.js.map} +0 -0
- /package/dist/{chunk-5REEVKGH.js.map → chunk-AANUY4BH.js.map} +0 -0
- /package/dist/{chunk-RZVCWX5R.js.map → chunk-AYVKN3PG.js.map} +0 -0
- /package/dist/{chunk-2UCC26MO.js.map → chunk-CH6IOGXV.js.map} +0 -0
- /package/dist/{chunk-RODZ7MB7.js.map → chunk-D5Z6B4M7.js.map} +0 -0
- /package/dist/{chunk-IJ62BB2T.js.map → chunk-D6SELXQ2.js.map} +0 -0
- /package/dist/{chunk-3E2X2RBU.js.map → chunk-DGRLHDM4.js.map} +0 -0
- /package/dist/{chunk-BD7IXBWE.js.map → chunk-F564FHMQ.js.map} +0 -0
- /package/dist/{chunk-DFCQ6BMI.js.map → chunk-G3MBUL5M.js.map} +0 -0
- /package/dist/{chunk-SUTMSDQ2.js.map → chunk-GQ3KRY3B.js.map} +0 -0
- /package/dist/{chunk-EAUIQADY.js.map → chunk-IQQAJROD.js.map} +0 -0
- /package/dist/{chunk-ZHRPH52H.js.map → chunk-IZXN3WI6.js.map} +0 -0
- /package/dist/{chunk-NCPWXHDO.js.map → chunk-JEUFYSFQ.js.map} +0 -0
- /package/dist/{chunk-G6FNWRAI.js.map → chunk-JSSM7VVV.js.map} +0 -0
- /package/dist/{chunk-H26VDFDS.js.map → chunk-KGFSPJLD.js.map} +0 -0
- /package/dist/{chunk-AO5TSDKT.js.map → chunk-KMORGMCW.js.map} +0 -0
- /package/dist/{chunk-WQWKYAAK.js.map → chunk-NUQF5F5J.js.map} +0 -0
- /package/dist/{chunk-7Y3N4Y72.js.map → chunk-OHUDZRLK.js.map} +0 -0
- /package/dist/{chunk-GCKHSBEN.js.map → chunk-OKMTUAWO.js.map} +0 -0
- /package/dist/{chunk-GB2XPITA.js.map → chunk-QMY57PVW.js.map} +0 -0
- /package/dist/{chunk-55GMOVKW.js.map → chunk-QNDDPXFR.js.map} +0 -0
- /package/dist/{chunk-GXN7RRHR.js.map → chunk-QSIXNTRV.js.map} +0 -0
- /package/dist/{chunk-QJRQ4BRC.js.map → chunk-U22TOL5Y.js.map} +0 -0
- /package/dist/{chunk-NGTVREIH.js.map → chunk-U6IHLEWT.js.map} +0 -0
- /package/dist/{chunk-Z5YHMRLF.js.map → chunk-UUCCV3SI.js.map} +0 -0
- /package/dist/{chunk-ZXXFP2LA.js.map → chunk-UXMCHBOJ.js.map} +0 -0
- /package/dist/{chunk-VZVEP2OZ.js.map → chunk-VFAKGIDG.js.map} +0 -0
- /package/dist/{chunk-VQK4VHLF.js.map → chunk-YQV75FIL.js.map} +0 -0
- /package/dist/{cli-HO62TOM2.js.map → chunk-YUTVAMWW.js.map} +0 -0
- /package/dist/{config-TYXYQK3I.js.map → cli-BOMA2FMP.js.map} +0 -0
- /package/dist/{cli-UETKXHJN.js.map → cli-OJKFXQOM.js.map} +0 -0
- /package/dist/{cli-LWST5FQH.js.map → cli-PHZAO4LZ.js.map} +0 -0
- /package/dist/{github-ESK45CEZ.js.map → config-JJW75SBX.js.map} +0 -0
- /package/dist/{github-WER7JUTN.js.map → github-6VQKSB67.js.map} +0 -0
- /package/dist/{host-6GURH5HE.js.map → github-RBSEM7ZK.js.map} +0 -0
- /package/dist/{json-QR4G35KA.js.map → host-YSTYO5DX.js.map} +0 -0
- /package/dist/{lint-QTI7XK2A.js.map → json-PU2HLHDQ.js.map} +0 -0
- /package/dist/{list-JO4G3TS3.js.map → lint-KIVTHLGU.js.map} +0 -0
- /package/dist/{list-O2MJUP5V.js.map → list-RDEJDDJF.js.map} +0 -0
- /package/dist/{page-FSXDXCDD.js.map → list-SUTDWL2J.js.map} +0 -0
- /package/dist/{pretty-4IONWSEP.js.map → page-UMAA3NCM.js.map} +0 -0
- /package/dist/{pretty-R4BQD2VH.js.map → pretty-ANLRHU4O.js.map} +0 -0
- /package/dist/{provider-527CO4DM.js.map → pretty-Q3ZFKOR7.js.map} +0 -0
- /package/dist/{reporters-DHO2BXAD.js.map → provider-LBX4IXGX.js.map} +0 -0
- /package/dist/{release-3D5PK6M7.js.map → release-VV3UTKE5.js.map} +0 -0
- /package/dist/{reporters-FPP6JNDP.js.map → reporters-26H3N2KW.js.map} +0 -0
- /package/dist/{reporters-M6LJ2IYU.js.map → reporters-ILT36CIH.js.map} +0 -0
- /package/dist/{run-YH5Z7RJ7.js.map → reporters-PNDLWT6K.js.map} +0 -0
- /package/dist/{validate-7JI3H57P.js.map → run-QXCK33Z4.js.map} +0 -0
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
// src/shared/exec.ts
|
|
4
|
-
import { realExec } from "@hawkeyexl/inference";
|
|
5
|
-
function outputTail(result, maxChars = 400) {
|
|
6
|
-
const text = (result.stderr.trim() || result.stdout.trim()).trim();
|
|
7
|
-
if (text.length <= maxChars) return text;
|
|
8
|
-
return `\u2026${text.slice(-maxChars)}`;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
3
|
// src/docevals/judge/budget.ts
|
|
12
4
|
var TURN_BUDGET_SKIP = "turn budget";
|
|
13
5
|
function turnBudgetSkipReason(maxTurns) {
|
|
@@ -18,10 +10,8 @@ function isTurnBudgetSkip(reason) {
|
|
|
18
10
|
}
|
|
19
11
|
|
|
20
12
|
export {
|
|
21
|
-
outputTail,
|
|
22
|
-
realExec,
|
|
23
13
|
TURN_BUDGET_SKIP,
|
|
24
14
|
turnBudgetSkipReason,
|
|
25
15
|
isTurnBudgetSkip
|
|
26
16
|
};
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-SSQZB5SQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/docevals/judge/budget.ts"],"sourcesContent":["/**\n * The turn-budget skip marker (ADR 01019), in one place.\n *\n * `judge.ts` produces the skip reason; `core/engine.ts` and `commands/\n * calibrate.ts` both have to tell a budget truncation apart from every other\n * reason an eval went unjudged, because that distinction is what stops a\n * partial run from reporting as a complete one. They did it by matching the\n * bare substring `\"turn budget\"` against a message written in a third file,\n * so a reword in the producer would have left both detectors matching nothing\n * — silently, since the tests that exercise truncation supply the skip reason\n * themselves rather than getting it from the judge.\n *\n * Kept in its own module rather than exported from `judge.ts`: the detectors\n * need the marker, not the judge, and `engine.ts` deliberately takes the judge\n * by injection.\n */\n\n/** The substring every budget-truncation skip reason carries. */\nexport const TURN_BUDGET_SKIP = \"turn budget\";\n\n/** The skip reason recorded for an eval the budget stopped before dispatch. */\nexport function turnBudgetSkipReason(maxTurns: number): string {\n return `judge ${TURN_BUDGET_SKIP} exhausted (${maxTurns})`;\n}\n\n/**\n * Whether a skip reason is the budget's doing rather than the judge's.\n *\n * A type predicate, not a plain boolean: a budget skip always carries a\n * reason, and callers interpolate it into the message they report.\n */\nexport function isTurnBudgetSkip(reason: string | undefined): reason is string {\n return reason !== undefined && reason.includes(TURN_BUDGET_SKIP);\n}\n"],"mappings":";;;AAkBO,IAAM,mBAAmB;AAGzB,SAAS,qBAAqB,UAA0B;AAC7D,SAAO,SAAS,gBAAgB,eAAe,QAAQ;AACzD;AAQO,SAAS,iBAAiB,QAA8C;AAC7E,SAAO,WAAW,UAAa,OAAO,SAAS,gBAAgB;AACjE;","names":[]}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
isMultilingual,
|
|
8
8
|
languageOf,
|
|
9
9
|
plural
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-FKAZUZQU.js";
|
|
11
11
|
import {
|
|
12
12
|
palette
|
|
13
13
|
} from "./chunk-RNVYGWIC.js";
|
|
@@ -68,6 +68,12 @@ var GET_FIELDS = [
|
|
|
68
68
|
"see",
|
|
69
69
|
"abstract",
|
|
70
70
|
"scope-note",
|
|
71
|
+
"notation",
|
|
72
|
+
"exact-matches",
|
|
73
|
+
"close-matches",
|
|
74
|
+
"broad-matches",
|
|
75
|
+
"narrow-matches",
|
|
76
|
+
"related-matches",
|
|
71
77
|
"subject-field",
|
|
72
78
|
"contexts",
|
|
73
79
|
"notes",
|
|
@@ -330,4 +336,4 @@ export {
|
|
|
330
336
|
renderValeWiring,
|
|
331
337
|
renderFormatsPretty
|
|
332
338
|
};
|
|
333
|
-
//# sourceMappingURL=chunk-
|
|
339
|
+
//# sourceMappingURL=chunk-STPGIKPY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/term/reporters/pretty.ts"],"sourcesContent":["/**\n * Human output for every `manni term` command, in the shapes the ladder of\n * proposal 0052 prints. Columns are padded to their widest value; prose wraps\n * to 80 columns under its own column, so a long definition or message never\n * runs back to the left edge.\n */\nimport { palette, type Colors } from \"../../shared/color.js\";\nimport type { TermReport } from \"../commands/findings.js\";\nimport type { FormatRow } from \"../commands/formats.js\";\nimport { displayPath, plural } from \"../commands/run.js\";\nimport type { ValeWiring, WriteReport } from \"../commands/write.js\";\nimport type { Severity } from \"../../shared/severity.js\";\nimport { isMultilingual, languageOf } from \"../core/writers/render-util.js\";\nimport {\n TERM_AUX_FIELDS,\n TERM_DESIGNATION_FIELDS,\n TERM_FIELDS,\n type Term,\n type TermDesignation,\n type TermField,\n type TermFinding,\n type TermLink,\n type TermRecord,\n type TermTransaction,\n} from \"../types.js\";\n\nconst WIDTH = 80;\n\n/** Words packed into lines of at most `width` characters; a longer word stands alone. */\nfunction wrapWords(text: string, width: number): string[] {\n const lines: string[] = [];\n let line = \"\";\n for (const word of text.split(/\\s+/).filter((w) => w !== \"\")) {\n if (line === \"\") line = word;\n else if (line.length + 1 + word.length <= width) line = `${line} ${word}`;\n else {\n lines.push(line);\n line = word;\n }\n }\n if (line !== \"\") lines.push(line);\n return lines.length === 0 ? [\"\"] : lines;\n}\n\n/** Sentences packed into lines of at most `width`; a message that fits stays whole. */\nfunction wrapSentences(text: string, width: number): string[] {\n if (text.length <= width) return [text];\n const lines: string[] = [];\n let line = \"\";\n for (const sentence of text.split(/(?<=\\.)\\s+(?=\\S)/)) {\n if (line === \"\") line = sentence;\n else if (line.length + 1 + sentence.length <= width) line = `${line} ${sentence}`;\n else {\n lines.push(line);\n line = sentence;\n }\n }\n if (line !== \"\") lines.push(line);\n return lines;\n}\n\nfunction hanging(first: string, lines: readonly string[]): string[] {\n const indent = \" \".repeat(first.length);\n return lines.map((line, i) => `${i === 0 ? first : indent}${line}`.trimEnd());\n}\n\n// ---------------------------------------------------------------------------\n// list\n\nexport function renderListPretty(terms: readonly Term[]): string {\n const idWidth = Math.max(0, ...terms.map((t) => t.id.length)) + 3;\n const labelWidth = Math.max(0, ...terms.map((t) => t.record.label.length)) + 3;\n // The language column appears only when it tells the rows apart.\n const multilingual = isMultilingual(terms);\n const languageWidth = Math.max(0, ...terms.map((t) => languageOf(t).length)) + 3;\n const rows = terms.map((t) => {\n const language = multilingual ? languageOf(t).padEnd(languageWidth) : \"\";\n const alts = (t.record[\"alt-labels\"] ?? []).join(\", \");\n return `${t.id.padEnd(idWidth)}${language}${t.record.label.padEnd(labelWidth)}${alts}`.trimEnd();\n });\n return [...rows, plural(terms.length, \"term\")].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// get\n\n/** A root field `get` shows as one row of text. */\ntype RowField = Exclude<TermField, \"label\" | \"concept-entry\" | \"designations\" | \"tbx-markup\" | \"tbx-elements\">;\n\n/** The order `get` shows root fields in: names first, then what they mean, the definition last. */\nconst GET_FIELDS: readonly RowField[] = [\n \"alt-labels\",\n \"hidden-labels\",\n \"broader\",\n \"narrower\",\n \"related-terms\",\n \"see\",\n \"abstract\",\n \"scope-note\",\n \"notation\",\n \"exact-matches\",\n \"close-matches\",\n \"broad-matches\",\n \"narrow-matches\",\n \"related-matches\",\n \"subject-field\",\n \"contexts\",\n \"notes\",\n \"sources\",\n \"customer-subsets\",\n \"project-subsets\",\n \"cross-references\",\n \"external-cross-references\",\n \"graphics\",\n \"transactions\",\n \"definition\",\n];\n\n/** The aux fields a block's line shows; its `tbx-elements` are counted on a row of their own. */\nconst SHOWN_AUX = TERM_AUX_FIELDS.filter((field) => field !== \"tbx-elements\");\n\n/** The key column's narrowest width: the widest 1.0.0 field, `related-terms`, plus two. */\nconst MIN_KEY_WIDTH = 15;\n\nfunction linkText(link: TermLink): string {\n return link.text === undefined ? link.target : `${link.text} (${link.target})`;\n}\n\nfunction transactionText(transaction: TermTransaction): string {\n return [transaction.type, transaction.date, transaction.responsibility].filter((part) => part !== undefined).join(\" \");\n}\n\n/** One value as `get` prints it: a list joined with commas, a link as its text and target, a transaction as its parts. */\nfunction valueText(value: string | readonly (string | TermLink | TermTransaction)[]): string {\n if (typeof value === \"string\") return value;\n return value\n .map((item) => (typeof item === \"string\" ? item : \"target\" in item ? linkText(item) : transactionText(item)))\n .join(\", \");\n}\n\n/** `progressive lens: part-of-speech noun, term-type fullForm`, or `undefined` when it says nothing but its term. */\nfunction designationLine(designation: TermDesignation): string | undefined {\n const parts: string[] = [];\n for (const key of TERM_DESIGNATION_FIELDS) {\n const value = designation[key];\n if (value !== undefined) parts.push(`${key} ${value}`);\n }\n const comments = designation[\"transfer-comments\"];\n if (comments !== undefined) parts.push(`transfer-comments ${valueText(comments)}`);\n for (const key of SHOWN_AUX) {\n const value = designation[key];\n if (value !== undefined) parts.push(`${key} ${valueText(value)}`);\n }\n return parts.length === 0 ? undefined : `${designation.term}: ${parts.join(\", \")}`;\n}\n\n/** `1 at the root, 1 on PAL, 1 in concept-entry`: where the record keeps elements no named field maps. */\nfunction passThroughText(record: TermRecord): string | undefined {\n const parts: string[] = [];\n const count = (items: readonly string[] | undefined, where: string): void => {\n if (items !== undefined) parts.push(`${String(items.length)} ${where}`);\n };\n count(record[\"tbx-elements\"], \"at the root\");\n for (const designation of record.designations ?? []) count(designation[\"tbx-elements\"], `on ${designation.term}`);\n count(record[\"concept-entry\"]?.[\"tbx-elements\"], \"in concept-entry\");\n return parts.length === 0 ? undefined : parts.join(\", \");\n}\n\nexport interface GetPrettyOptions {\n color: boolean;\n cwd?: string;\n /** The entry in its other languages: the set's other terms with the same id. */\n others?: readonly Term[];\n}\n\nexport function renderGetPretty(term: Term, opts: GetPrettyOptions): string {\n const c = palette(opts.color);\n const { record } = term;\n const where = `${displayPath(term.location.file, opts.cwd ?? process.cwd())}:${String(term.location.line)}`;\n\n // Each row is a key and its lines, collected first so the key column fits the widest key shown.\n const rows: [string, string[]][] = [[\"id\", [term.id]]];\n if (term.language !== undefined) rows.push([\"language\", [term.language]]);\n for (const field of GET_FIELDS) {\n const value = record[field];\n if (value !== undefined) rows.push([field, [valueText(value)]]);\n }\n const concept = record[\"concept-entry\"];\n if (concept !== undefined) {\n const lines = SHOWN_AUX.flatMap((key) => {\n const value = concept[key];\n return value === undefined ? [] : [`${key}: ${valueText(value)}`];\n });\n if (lines.length > 0) rows.push([\"concept-entry\", lines]);\n }\n const designations = (record.designations ?? []).map(designationLine).filter((line) => line !== undefined);\n if (designations.length > 0) rows.push([\"designations\", designations]);\n if (record[\"tbx-markup\"] !== undefined) rows.push([\"tbx-markup\", record[\"tbx-markup\"]]);\n const passThrough = passThroughText(record);\n if (passThrough !== undefined) rows.push([\"tbx-elements\", [passThrough]]);\n const others = opts.others ?? [];\n if (others.length > 0) {\n rows.push([\"other languages\", [others.map((t) => `${languageOf(t)} (${t.record.label})`).join(\", \")]]);\n }\n\n const keyWidth = Math.max(MIN_KEY_WIDTH, ...rows.map(([key]) => key.length + 2));\n const lines = [`${c.bold(record.label.padEnd(40))}${c.dim(where)}`];\n for (const [key, values] of rows) {\n values.forEach((value, i) => {\n const prefix = ` ${(i === 0 ? key : \"\").padEnd(keyWidth)}`;\n lines.push(...hanging(prefix, wrapWords(value, WIDTH - prefix.length)));\n });\n }\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// check and lint\n\nconst RULE_WIDTH = 32;\n\nfunction severityText(c: Colors, severity: Severity): string {\n const padded = severity.padEnd(6);\n if (severity === \"error\") return c.red(padded);\n if (severity === \"warning\") return c.yellow(padded);\n return c.cyan(padded);\n}\n\nfunction counts(findings: readonly TermFinding[]): string {\n const parts: string[] = [];\n const n = (severity: Severity): number => findings.filter((f) => f.severity === severity).length;\n if (n(\"error\") > 0) parts.push(plural(n(\"error\"), \"error\"));\n if (n(\"warning\") > 0) parts.push(plural(n(\"warning\"), \"warning\"));\n if (n(\"notice\") > 0) parts.push(plural(n(\"notice\"), \"notice\"));\n return parts.join(\", \");\n}\n\nexport interface FindingsPrettyOptions {\n color: boolean;\n /** Whether the clean line counts references: `check` reads them, `lint` does not. */\n references?: boolean;\n}\n\nexport function renderFindingsPretty(report: TermReport, opts: FindingsPrettyOptions): string {\n const c = palette(opts.color);\n const { baseline } = report;\n if (baseline?.written === true) {\n return `${c.green(\"✓\")} ${plural(report.found, \"finding\")} recorded in ${baseline.path}`;\n }\n const baselined = baseline !== undefined && baseline.suppressed > 0 ? `, ${String(baseline.suppressed)} baselined` : \"\";\n const terms = plural(report.terms, \"term\");\n\n if (report.findings.length === 0) {\n const references = opts.references === false ? \"\" : `, ${plural(report.references, \"reference\")}`;\n return `${c.green(\"✓\")} ${terms}${references}, no findings${baselined}`;\n }\n\n const ruleWidth = Math.max(RULE_WIDTH, ...report.findings.map((f) => f.ruleId.length + 2));\n const lines: string[] = [];\n let group: string | undefined;\n for (const finding of report.findings) {\n const file = displayPath(finding.file, report.cwd);\n const header = finding.line === undefined ? file : `${file}:${String(finding.line)}`;\n if (header !== group) {\n lines.push(c.bold(header));\n group = header;\n }\n const prefixWidth = 2 + 6 + 1 + ruleWidth;\n const message = wrapSentences(finding.message, WIDTH - prefixWidth);\n const indent = \" \".repeat(prefixWidth);\n message.forEach((text, i) => {\n lines.push(\n i === 0 ? ` ${severityText(c, finding.severity)} ${finding.ruleId.padEnd(ruleWidth)}${text}` : `${indent}${text}`,\n );\n });\n }\n lines.push(\"\", `${counts(report.findings)} in ${terms}${baselined}`);\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// write\n\nfunction changeLine(change: WriteReport[\"changes\"][number]): string {\n switch (change.action) {\n case \"create\":\n return `${change.path} would be created`;\n case \"change\":\n return `${change.path} would change`;\n case \"remove\":\n return `${change.path} would be removed`;\n }\n}\n\n/** A generated Vale rule file's `swap:` entries. */\nfunction swapCount(content: string): number {\n const lines = content.split(/\\r?\\n/);\n const start = lines.indexOf(\"swap:\");\n if (start === -1) return 0;\n return lines.slice(start + 1).filter((line) => line.startsWith(\" \")).length;\n}\n\nfunction baseName(path: string): string {\n return path.split(/[\\\\/]/).pop() ?? path;\n}\n\nconst CASING_RULES = new Set([\"Casing.yml\", \"Lowercase.yml\", \"SentenceStart.yml\"]);\n\n/** What each file of a Vale style holds: rule files by name, the acronym files together. */\nfunction valeLines(report: WriteReport): string[] {\n const rows: [string, string][] = [];\n const acronyms: string[] = [];\n for (const file of report.files) {\n const name = baseName(file.path);\n // A casing rule swaps each label and alt-label, so what it counts is labels.\n if (CASING_RULES.has(name)) rows.push([name, plural(swapCount(file.content), \"label\")]);\n else if (name === \"Deprecated.yml\") rows.push([name, plural(swapCount(file.content), \"swap\")]);\n else acronyms.push(name);\n }\n if (acronyms.length > 0) rows.push([acronyms.join(\", \"), plural(acronyms.length, \"acronym\")]);\n const width = Math.max(0, ...rows.map(([name]) => name.length)) + 2;\n return rows.map(([name, what]) => ` ${name.padEnd(width)}${what}`);\n}\n\n/** ` dropped from a definition list: scope-note on 3 terms, hidden-labels on 12`. */\nfunction droppedLine(report: WriteReport): string | undefined {\n if (report.dropped.length === 0) return undefined;\n // One entry per term per field, so counting entries counts terms: an id in two languages is two terms.\n const counts = new Map<TermField, number>();\n for (const { field } of report.dropped) counts.set(field, (counts.get(field) ?? 0) + 1);\n const fields = [...counts.entries()]\n .map(([field, n]) => ({ field, n }))\n .sort((a, b) => a.n - b.n || TERM_FIELDS.indexOf(a.field) - TERM_FIELDS.indexOf(b.field));\n const parts = fields.map(({ field, n }, i) => `${field} on ${i === 0 ? plural(n, \"term\") : String(n)}`);\n return ` dropped from ${report.droppedFrom ?? report.format ?? \"the render\"}: ${parts.join(\", \")}`;\n}\n\n/** ` dropped from tbx3: the headers of glossary.tbx, <stdin>`. */\nfunction droppedHeadersLine(report: WriteReport): string | undefined {\n const files = report.droppedHeaders ?? [];\n if (files.length === 0) return undefined;\n const what = files.length === 1 ? \"the header of\" : \"the headers of\";\n return ` dropped from ${report.droppedFrom ?? report.format ?? \"the render\"}: ${what} ${files.join(\", \")}`;\n}\n\n/** ` skipped 2 terms a definition list cannot read without a definition: varifocal, bifocal`. */\nfunction skippedLine(report: WriteReport): string | undefined {\n if (report.skipped.length === 0) return undefined;\n const construct = report.droppedFrom ?? report.format ?? \"the render\";\n const count = plural(report.skipped.length, \"term\");\n return ` skipped ${count} ${construct} cannot read without a definition: ${report.skipped.join(\", \")}`;\n}\n\n/** ` skipped 2 terms in another language than en: spectacle-lens (de), progressive-lens (de)`. */\nfunction otherLanguagesLine(report: WriteReport): string | undefined {\n const other = report.otherLanguages;\n if (other === undefined || other.terms.length === 0) return undefined;\n const terms = other.terms.map(({ id, language }) => `${id} (${language})`).join(\", \");\n return ` skipped ${plural(other.terms.length, \"term\")} in another language than ${other.written}: ${terms}`;\n}\n\n/**\n * ` kept the first language's value where languages differ: concept-entry.subject-field on 1 concept`.\n * Fields are counted in concepts, fewest first, as the dropped line counts terms.\n */\nfunction conflictsLine(report: WriteReport): string | undefined {\n const conflicts = report.conflicts ?? [];\n if (conflicts.length === 0) return undefined;\n const ids = new Map<string, Set<string>>();\n for (const { id, field } of conflicts) {\n const set = ids.get(field) ?? new Set<string>();\n set.add(id);\n ids.set(field, set);\n }\n // A stable sort keeps fields of one count in the order they were first reported.\n const fields = [...ids.entries()].map(([field, set]) => ({ field, n: set.size })).sort((a, b) => a.n - b.n);\n const parts = fields.map(({ field, n }, i) => `${field} on ${i === 0 ? plural(n, \"concept\") : String(n)}`);\n return ` kept the first language's value where languages differ: ${parts.join(\", \")}`;\n}\n\n/** The dropped, dropped-header, skipped and conflict lines, which a write and a dry run print alike. */\nfunction renderNotes(report: WriteReport): string[] {\n return [\n droppedLine(report),\n droppedHeadersLine(report),\n skippedLine(report),\n otherLanguagesLine(report),\n conflictsLine(report),\n ].filter(\n (line) => line !== undefined,\n );\n}\n\nfunction unchangedLine(report: WriteReport): string {\n return report.mode === \"in-place\" ? \"Nothing to write\" : `${report.target ?? \"\"} is up to date`;\n}\n\nexport function renderWritePretty(report: WriteReport): string {\n if (report.check) {\n return report.changes.length > 0 ? report.changes.map(changeLine).join(\"\\n\") : unchangedLine(report);\n }\n if (report.dryRun) {\n const changes = report.changes.length > 0 ? report.changes.map(changeLine) : [unchangedLine(report)];\n return [...changes, ...renderNotes(report)].join(\"\\n\");\n }\n if (report.mode === \"in-place\") {\n const wrote = report.changes.length === 0 ? \"Nothing to write\" : `Wrote ${plural(report.changes.length, \"file\")}`;\n return [wrote, ...renderNotes(report)].join(\"\\n\");\n }\n const each = report.shape === \"directory\" && report.format !== \"vale\" ? \", one file each\" : \"\";\n const written = report.terms - report.skipped.length - (report.otherLanguages?.terms.length ?? 0);\n const lines = [`Wrote ${plural(written, \"term\")} to ${report.target ?? \"\"}${each}`];\n if (report.format === \"vale\") lines.push(...valeLines(report));\n lines.push(...renderNotes(report));\n return lines.join(\"\\n\");\n}\n\n/** The notice `write -f vale` prints when no section of Vale's config uses the style, or there is no section. */\nexport function renderValeWiring(wiring: ValeWiring): string {\n return [\n wiring.addSection\n ? `notice: ${wiring.rootIni} has no section with BasedOnStyles. Add one that uses the Terms style:`\n : `notice: no section of ${wiring.rootIni} uses the Terms style. Add it to BasedOnStyles:`,\n ` [${wiring.section}]`,\n ` BasedOnStyles = ${wiring.styles.join(\", \")}`,\n ].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// formats\n\nexport function renderFormatsPretty(rows: readonly FormatRow[]): string {\n const formatWidth = Math.max(0, ...rows.map((r) => r.format.length)) + 3;\n const labelWidth = Math.max(0, ...rows.map((r) => r.label.length)) + 3;\n return rows\n .map((r) =>\n `${r.format.padEnd(formatWidth)}${r.label.padEnd(labelWidth)}${r.read ? \"read \" : \" \"}${r.write ? \"write\" : \"\"}`.trimEnd(),\n )\n .join(\"\\n\");\n}\n"],"mappings":"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","names":["lines","counts"]}
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
spliceEntryField,
|
|
17
17
|
unifiedDiff,
|
|
18
18
|
withClaimLines
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-CH6IOGXV.js";
|
|
20
20
|
import {
|
|
21
21
|
CITATIONS_KEY,
|
|
22
22
|
CITE_SECTION,
|
|
@@ -54,10 +54,10 @@ import {
|
|
|
54
54
|
stripMarkers,
|
|
55
55
|
twoManifestsRefusal,
|
|
56
56
|
urlManifestRefusal
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-DGRLHDM4.js";
|
|
58
58
|
import {
|
|
59
59
|
renderCheckGithub
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-GQ3KRY3B.js";
|
|
61
61
|
import {
|
|
62
62
|
refusalLine,
|
|
63
63
|
removalLine,
|
|
@@ -65,7 +65,7 @@ import {
|
|
|
65
65
|
renderRemovePretty,
|
|
66
66
|
renderUpdatePretty,
|
|
67
67
|
rewriteLine
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-OHUDZRLK.js";
|
|
69
69
|
import {
|
|
70
70
|
blockMatches,
|
|
71
71
|
claimEnd,
|
|
@@ -94,12 +94,7 @@ import {
|
|
|
94
94
|
toValidationResult,
|
|
95
95
|
unitAt,
|
|
96
96
|
unitText
|
|
97
|
-
} from "./chunk-
|
|
98
|
-
import {
|
|
99
|
-
renderCheckJson,
|
|
100
|
-
renderRemoveJson,
|
|
101
|
-
renderUpdateJson
|
|
102
|
-
} from "./chunk-PCE7QHXJ.js";
|
|
97
|
+
} from "./chunk-AYVKN3PG.js";
|
|
103
98
|
import {
|
|
104
99
|
CITE_RULES,
|
|
105
100
|
CiteError,
|
|
@@ -110,7 +105,6 @@ import {
|
|
|
110
105
|
RULE_ID_PREFIX,
|
|
111
106
|
SRC_PATTERN,
|
|
112
107
|
anchoredLines,
|
|
113
|
-
bodyLineOf,
|
|
114
108
|
citationInputs,
|
|
115
109
|
detectEol,
|
|
116
110
|
fenceSpanAt,
|
|
@@ -140,17 +134,23 @@ import {
|
|
|
140
134
|
spellSource,
|
|
141
135
|
statementForms,
|
|
142
136
|
validateEntry
|
|
143
|
-
} from "./chunk-
|
|
137
|
+
} from "./chunk-24AJK2RG.js";
|
|
138
|
+
import {
|
|
139
|
+
renderCheckJson,
|
|
140
|
+
renderRemoveJson,
|
|
141
|
+
renderUpdateJson
|
|
142
|
+
} from "./chunk-PCE7QHXJ.js";
|
|
144
143
|
import {
|
|
145
144
|
reencryptData,
|
|
146
145
|
reencryptMetadata
|
|
147
|
-
} from "./chunk-
|
|
146
|
+
} from "./chunk-JSSM7VVV.js";
|
|
148
147
|
import {
|
|
149
148
|
ENCRYPTION_KEY_ENV,
|
|
150
149
|
MAX_RANGE_LINES,
|
|
151
150
|
MOVE_BUDGET_BYTES,
|
|
152
151
|
MOVE_WINDOW_LINES,
|
|
153
152
|
PATH_JOIN,
|
|
153
|
+
bodyLineOf,
|
|
154
154
|
committedKeyWarning,
|
|
155
155
|
configMarks,
|
|
156
156
|
externalMetadataJoin,
|
|
@@ -170,7 +170,7 @@ import {
|
|
|
170
170
|
toBodyLines,
|
|
171
171
|
toFileLines,
|
|
172
172
|
writeEncryptionKey
|
|
173
|
-
} from "./chunk-
|
|
173
|
+
} from "./chunk-SMHAYK6I.js";
|
|
174
174
|
import {
|
|
175
175
|
LEGACY_CONFIG_NAMES,
|
|
176
176
|
STDIN_TOKEN,
|
|
@@ -181,7 +181,7 @@ import {
|
|
|
181
181
|
resolveTargetSet,
|
|
182
182
|
supportedExtensions,
|
|
183
183
|
writeFileAtomic
|
|
184
|
-
} from "./chunk-
|
|
184
|
+
} from "./chunk-RGLFV4KO.js";
|
|
185
185
|
import {
|
|
186
186
|
findConfigFile,
|
|
187
187
|
findFamilyConfigFile,
|
|
@@ -195,7 +195,7 @@ import {
|
|
|
195
195
|
readConfigFile,
|
|
196
196
|
readFamilyConfigFile,
|
|
197
197
|
selectCollections
|
|
198
|
-
} from "./chunk-
|
|
198
|
+
} from "./chunk-OTJOBZJ5.js";
|
|
199
199
|
import {
|
|
200
200
|
ToolError
|
|
201
201
|
} from "./chunk-G3T47CFV.js";
|
|
@@ -931,4 +931,4 @@ export {
|
|
|
931
931
|
runKeyRotate,
|
|
932
932
|
runKeySet
|
|
933
933
|
};
|
|
934
|
-
//# sourceMappingURL=chunk-
|
|
934
|
+
//# sourceMappingURL=chunk-U22TOL5Y.js.map
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
providerSpecFor,
|
|
14
14
|
resolveIdentity,
|
|
15
15
|
selectProvider
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-VM7VAFJW.js";
|
|
17
17
|
import {
|
|
18
18
|
errorMessage
|
|
19
19
|
} from "./chunk-G3T47CFV.js";
|
|
@@ -143,4 +143,4 @@ export {
|
|
|
143
143
|
constructProvider,
|
|
144
144
|
makeJudgeProvider
|
|
145
145
|
};
|
|
146
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-U6IHLEWT.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
listInTree,
|
|
6
6
|
safeRead,
|
|
7
7
|
segments
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-IQQAJROD.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-
|
|
174
|
+
//# sourceMappingURL=chunk-UUCCV3SI.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
TERM_FIELDS,
|
|
4
4
|
displayPath
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-FKAZUZQU.js";
|
|
6
6
|
|
|
7
7
|
// src/term/reporters/json.ts
|
|
8
8
|
function termEntry(term) {
|
|
@@ -49,4 +49,4 @@ export {
|
|
|
49
49
|
renderFindingsJson,
|
|
50
50
|
renderFormatsJson
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
52
|
+
//# sourceMappingURL=chunk-UXMCHBOJ.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
loadTerms
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FKAZUZQU.js";
|
|
5
5
|
|
|
6
6
|
// src/term/commands/list.ts
|
|
7
7
|
var LIST_FORMATS = ["pretty", "json", "csv"];
|
|
@@ -14,4 +14,4 @@ export {
|
|
|
14
14
|
LIST_FORMATS,
|
|
15
15
|
runList
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-VFAKGIDG.js.map
|
|
@@ -31,6 +31,8 @@ import {
|
|
|
31
31
|
DEFAULT_MODELS,
|
|
32
32
|
DEFAULT_OPENAI_BASE_URL,
|
|
33
33
|
InferenceError,
|
|
34
|
+
modelState,
|
|
35
|
+
nodeLlamaCppStatus,
|
|
34
36
|
resolveProviderIdentityAsync
|
|
35
37
|
} from "@hawkeyexl/inference";
|
|
36
38
|
var DEFAULT_PROVIDER = "auto";
|
|
@@ -183,15 +185,23 @@ var LOCAL_PROVIDER = "llama-cpp";
|
|
|
183
185
|
var LOCAL_FLAG_HELP = "run inference on this machine (llama-cpp); overrides any configured or eval-level provider";
|
|
184
186
|
var LOCAL_COMPATIBLE = /* @__PURE__ */ new Set([LOCAL_PROVIDER, DEFAULT_PROVIDER, "mock"]);
|
|
185
187
|
function assertLocalFlag(flag, toError) {
|
|
186
|
-
if (flag.local !== true
|
|
188
|
+
if (flag.provider === void 0 || flag.local !== true && flag.offline !== true) return;
|
|
187
189
|
assertKnownProvider(flag.provider, toError);
|
|
188
190
|
if (LOCAL_COMPATIBLE.has(flag.provider)) return;
|
|
191
|
+
if (flag.local === true) {
|
|
192
|
+
throw toError(
|
|
193
|
+
`--local and --provider ${flag.provider} contradict each other: --local runs inference on this machine with ${LOCAL_PROVIDER}. Drop one of them.`
|
|
194
|
+
);
|
|
195
|
+
}
|
|
189
196
|
throw toError(
|
|
190
|
-
`--
|
|
197
|
+
`--offline and --provider ${flag.provider} contradict each other: --offline sends nothing off this machine, so only ${LOCAL_PROVIDER} with a model already downloaded can run. Drop one of them.`
|
|
191
198
|
);
|
|
192
199
|
}
|
|
200
|
+
function noOfflineModel(consequence) {
|
|
201
|
+
return `no model is available offline, so ${consequence}; download one first with --local, or drop --offline.`;
|
|
202
|
+
}
|
|
193
203
|
function selectProvider(flag, levels) {
|
|
194
|
-
if (flag.local === true) return selectLocal(flag, levels);
|
|
204
|
+
if (flag.local === true || flag.offline === true) return selectLocal(flag, levels);
|
|
195
205
|
const provider = flag.provider ?? levels.find((level) => level.provider !== void 0)?.provider ?? DEFAULT_PROVIDER;
|
|
196
206
|
const model = flag.model ?? levels.find(
|
|
197
207
|
(level) => level.model !== void 0 && (level.provider === void 0 || level.provider === provider)
|
|
@@ -205,10 +215,11 @@ function selectLocal(flag, levels) {
|
|
|
205
215
|
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
216
|
return replaced === void 0 ? { provider, model } : { provider, model, replaced };
|
|
207
217
|
}
|
|
208
|
-
function localNotice(selection) {
|
|
218
|
+
function localNotice(selection, flags = {}) {
|
|
209
219
|
const { replaced } = selection;
|
|
210
220
|
if (replaced === void 0) return void 0;
|
|
211
|
-
|
|
221
|
+
const flag = flags.local !== true && flags.offline === true ? "--offline" : "--local";
|
|
222
|
+
return `${flag}: using ${LOCAL_PROVIDER} instead of "${replaced.provider}" from ${replaced.source}.`;
|
|
212
223
|
}
|
|
213
224
|
function providerSpecFor(connections, selection) {
|
|
214
225
|
const { provider, model } = selection;
|
|
@@ -267,9 +278,22 @@ async function resolveIdentity(spec, toError) {
|
|
|
267
278
|
);
|
|
268
279
|
}
|
|
269
280
|
}
|
|
281
|
+
async function offlineIdentity(spec, toError) {
|
|
282
|
+
if (spec.provider === "mock") return resolveIdentity(spec, toError);
|
|
283
|
+
if (spec.provider !== LOCAL_PROVIDER) return void 0;
|
|
284
|
+
if ((await nodeLlamaCppStatus()).state !== "present") return void 0;
|
|
285
|
+
const identity = await resolveIdentity(spec, toError);
|
|
286
|
+
const modelsDirectory = spec.llamaCpp?.modelsDirectory;
|
|
287
|
+
const state = await modelState(
|
|
288
|
+
identity.model,
|
|
289
|
+
modelsDirectory === void 0 ? {} : { modelsDirectory }
|
|
290
|
+
);
|
|
291
|
+
return state === "ready" ? identity : void 0;
|
|
292
|
+
}
|
|
270
293
|
|
|
271
294
|
export {
|
|
272
295
|
parseDuration,
|
|
296
|
+
DEFAULT_PROVIDER,
|
|
273
297
|
DECISION_ONLY_PROVIDERS,
|
|
274
298
|
assertKnownProvider,
|
|
275
299
|
assertModelHasProvider,
|
|
@@ -278,9 +302,11 @@ export {
|
|
|
278
302
|
DEFAULT_KEEP_ALIVE_MS,
|
|
279
303
|
LOCAL_FLAG_HELP,
|
|
280
304
|
assertLocalFlag,
|
|
305
|
+
noOfflineModel,
|
|
281
306
|
selectProvider,
|
|
282
307
|
localNotice,
|
|
283
308
|
providerSpecFor,
|
|
284
|
-
resolveIdentity
|
|
309
|
+
resolveIdentity,
|
|
310
|
+
offlineIdentity
|
|
285
311
|
};
|
|
286
|
-
//# sourceMappingURL=chunk-
|
|
312
|
+
//# sourceMappingURL=chunk-VM7VAFJW.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 modelState,\n nodeLlamaCppStatus,\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`, `--local` and `--offline`. */\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 * Send nothing off this machine: the `--local` boundary, and then only a\n * model already downloaded. See `offlineIdentity`.\n */\n offline?: boolean;\n}\n\n/** A configured choice that `--local` or `--offline` 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.provider === undefined || (flag.local !== true && flag.offline !== true)) return;\n assertKnownProvider(flag.provider, toError);\n if (LOCAL_COMPATIBLE.has(flag.provider)) return;\n if (flag.local === true) {\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 throw toError(\n `--offline and --provider ${flag.provider} contradict each other: --offline sends nothing ` +\n `off this machine, so only ${LOCAL_PROVIDER} with a model already downloaded can run. Drop one of them.`,\n );\n}\n\n/**\n * What a verb says when `--offline` finds no model it may run, completed by\n * what that verb does without one.\n */\nexport function noOfflineModel(consequence: string): string {\n return `no model is available offline, so ${consequence}; download one first with --local, or drop --offline.`;\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. `--offline` draws the same boundary,\n * and `offlineIdentity` then decides whether the model is on this machine.\n * Check the flag with `assertLocalFlag` first: a contradicting `--provider` is\n * not selected here.\n */\nexport function selectProvider(\n flag: ProviderFlags,\n levels: readonly ProviderChoice[],\n): ProviderSelection {\n if (flag.local === true || flag.offline === 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/**\n * What a selection's notice says, if it replaced anything, naming the flag\n * that drew the boundary: `--local`, or `--offline` when only it is set.\n */\nexport function localNotice(\n selection: ProviderSelection,\n flags: ProviderFlags = {},\n): string | undefined {\n const { replaced } = selection;\n if (replaced === undefined) return undefined;\n const flag = flags.local !== true && flags.offline === true ? \"--offline\" : \"--local\";\n return `${flag}: 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\n/**\n * The identity `--offline` may run, or `undefined` when none is on this\n * machine. `spec` comes from a selection made with `offline` set, so it names\n * llama-cpp, or the mock, which sends nothing anywhere.\n *\n * Nothing is downloaded or installed. The library answers both questions\n * without side effects: the runtime must be importable now, and the resolved\n * model's weights must be `ready` on disk, so a model still downloading is\n * not. Resolving the `auto` tier probes memory through the runtime, which is\n * why the runtime is checked first.\n */\nexport async function offlineIdentity(\n spec: ProviderSpec,\n toError: ToErrorFn,\n): Promise<{ provider: ProviderName; model: string } | undefined> {\n if (spec.provider === \"mock\") return resolveIdentity(spec, toError);\n if (spec.provider !== LOCAL_PROVIDER) return undefined;\n if ((await nodeLlamaCppStatus()).state !== \"present\") return undefined;\n const identity = await resolveIdentity(spec, toError);\n const modelsDirectory = spec.llamaCpp?.modelsDirectory;\n const state = await modelState(\n identity.model,\n modelsDirectory === undefined ? {} : { modelsDirectory },\n );\n return state === \"ready\" ? identity : undefined;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
constructProvider,
|
|
11
11
|
resolveSelectionIdentity,
|
|
12
12
|
selectProvider
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-U6IHLEWT.js";
|
|
14
14
|
import {
|
|
15
15
|
TracevalsError
|
|
16
16
|
} from "./chunk-UKZNLVJW.js";
|
|
@@ -499,4 +499,4 @@ export {
|
|
|
499
499
|
localGate,
|
|
500
500
|
assertDownloaded
|
|
501
501
|
};
|
|
502
|
-
//# sourceMappingURL=chunk-
|
|
502
|
+
//# sourceMappingURL=chunk-YQV75FIL.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/shared/exec.ts
|
|
4
|
+
import { realExec } from "@hawkeyexl/inference";
|
|
5
|
+
function outputTail(result, maxChars = 400) {
|
|
6
|
+
const text = (result.stderr.trim() || result.stdout.trim()).trim();
|
|
7
|
+
if (text.length <= maxChars) return text;
|
|
8
|
+
return `\u2026${text.slice(-maxChars)}`;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export {
|
|
12
|
+
outputTail,
|
|
13
|
+
realExec
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=chunk-ZPLVANY2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shared/exec.ts"],"sourcesContent":["/**\n * Process execution for every grader in the family that runs a program. The\n * implementation lives in `@hawkeyexl/inference`: the judge's subprocess\n * provider and the command graders were running copies of the same\n * cross-spawn wrapper, and the Windows-specific parts (npm `.cmd` shim\n * resolution without `shell: true`, stdin piping past the ~32K command-line\n * limit, and StringDecoder-backed output so multi-byte UTF-8 survives chunk\n * boundaries) are exactly the parts worth having in one place.\n *\n * Shared rather than per domain: `manni docevals` and `manni tracevals` both\n * run `command` evals, and both reach the OS through this one wrapper.\n */\nimport type { ExecResult } from \"@hawkeyexl/inference\";\n\nexport { realExec } from \"@hawkeyexl/inference\";\n\n/** Truncate command output for finding messages. */\nexport function outputTail(result: ExecResult, maxChars = 400): string {\n const text = (result.stderr.trim() || result.stdout.trim()).trim();\n if (text.length <= maxChars) return text;\n return `…${text.slice(-maxChars)}`;\n}\n\n/**\n * How a finished process is described in a finding: \"exited 2\", or the truth\n * when there was no exit code.\n *\n * `code` is null when the process was killed by a signal rather than exiting.\n * \"exited null\" describes nothing a reader can act on, and it is the case a\n * timeout produces — so it is the one worth naming.\n */\nexport function exited(code: number | null): string {\n return code === null ? \"was killed before exiting\" : `exited ${code}`;\n}\n"],"mappings":";;;AAcA,SAAS,gBAAgB;AAGlB,SAAS,WAAW,QAAoB,WAAW,KAAa;AACrE,QAAM,QAAQ,OAAO,OAAO,KAAK,KAAK,OAAO,OAAO,KAAK,GAAG,KAAK;AACjE,MAAI,KAAK,UAAU,SAAU,QAAO;AACpC,SAAO,SAAI,KAAK,MAAM,CAAC,QAAQ,CAAC;AAClC;","names":[]}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
runTemplates,
|
|
6
6
|
runTemplatesInfer,
|
|
7
7
|
runTools
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-5SID2SVL.js";
|
|
9
9
|
import {
|
|
10
10
|
LINT_JOBS,
|
|
11
11
|
TOOLS_BY_JOB,
|
|
@@ -13,22 +13,31 @@ import {
|
|
|
13
13
|
rebaseConfig,
|
|
14
14
|
resolveStructureTool,
|
|
15
15
|
runLint
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-F564FHMQ.js";
|
|
17
17
|
import "./chunk-ZMECS2IJ.js";
|
|
18
|
-
import "./chunk-ZHRPH52H.js";
|
|
19
18
|
import "./chunk-TIUTIOFB.js";
|
|
19
|
+
import "./chunk-IZXN3WI6.js";
|
|
20
20
|
import {
|
|
21
21
|
render,
|
|
22
22
|
renderTemplates,
|
|
23
23
|
renderTools
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-4Q24OYI3.js";
|
|
25
25
|
import "./chunk-GLP5PSXB.js";
|
|
26
26
|
import "./chunk-TBAMBLF3.js";
|
|
27
27
|
import {
|
|
28
28
|
LintError
|
|
29
29
|
} from "./chunk-YGFIQ6Y5.js";
|
|
30
|
-
import "./chunk-
|
|
31
|
-
import "./chunk-
|
|
30
|
+
import "./chunk-YUTVAMWW.js";
|
|
31
|
+
import "./chunk-JSSM7VVV.js";
|
|
32
|
+
import "./chunk-PS257NIU.js";
|
|
33
|
+
import "./chunk-2OZF2VUB.js";
|
|
34
|
+
import {
|
|
35
|
+
OMITTED_WHEN_CLEAN,
|
|
36
|
+
REPORT_FORMATS,
|
|
37
|
+
REPORT_FORMAT_LIST,
|
|
38
|
+
isReportFormat
|
|
39
|
+
} from "./chunk-SGR7ZAVE.js";
|
|
40
|
+
import "./chunk-QEAGL4V5.js";
|
|
32
41
|
import {
|
|
33
42
|
collect,
|
|
34
43
|
configOption,
|
|
@@ -36,31 +45,26 @@ import {
|
|
|
36
45
|
readStdin,
|
|
37
46
|
reportConfig,
|
|
38
47
|
splitList
|
|
39
|
-
} from "./chunk-
|
|
40
|
-
import
|
|
41
|
-
OMITTED_WHEN_CLEAN,
|
|
42
|
-
REPORT_FORMATS,
|
|
43
|
-
REPORT_FORMAT_LIST,
|
|
44
|
-
isReportFormat
|
|
45
|
-
} from "./chunk-QBVP3SQP.js";
|
|
48
|
+
} from "./chunk-SMHAYK6I.js";
|
|
49
|
+
import "./chunk-DSWKBZWW.js";
|
|
46
50
|
import {
|
|
47
51
|
STDIN_TOKEN
|
|
48
|
-
} from "./chunk-
|
|
49
|
-
import
|
|
50
|
-
fail
|
|
51
|
-
} from "./chunk-YEUYKR62.js";
|
|
52
|
+
} from "./chunk-RGLFV4KO.js";
|
|
53
|
+
import "./chunk-MNH7QO4Z.js";
|
|
52
54
|
import {
|
|
53
55
|
shouldColor
|
|
54
56
|
} from "./chunk-RNVYGWIC.js";
|
|
55
|
-
import
|
|
56
|
-
|
|
57
|
+
import {
|
|
58
|
+
fail
|
|
59
|
+
} from "./chunk-YEUYKR62.js";
|
|
60
|
+
import "./chunk-OTJOBZJ5.js";
|
|
57
61
|
import {
|
|
58
62
|
notice
|
|
59
63
|
} from "./chunk-HX44GB4Z.js";
|
|
60
|
-
import "./chunk-
|
|
64
|
+
import "./chunk-VM7VAFJW.js";
|
|
61
65
|
import {
|
|
62
66
|
package_default
|
|
63
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-DHGB4JBG.js";
|
|
64
68
|
import "./chunk-OWBRDNRZ.js";
|
|
65
69
|
import "./chunk-G3T47CFV.js";
|
|
66
70
|
import "./chunk-2H7UOFLK.js";
|
|
@@ -345,4 +349,4 @@ function buildProgram() {
|
|
|
345
349
|
export {
|
|
346
350
|
buildProgram
|
|
347
351
|
};
|
|
348
|
-
//# sourceMappingURL=cli-
|
|
352
|
+
//# sourceMappingURL=cli-4CR7QIOK.js.map
|