@unbrained/pm-cli 2026.6.30 → 2026.7.2
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/AGENTS.md +2 -0
- package/CHANGELOG.md +26 -0
- package/dist/cli/bootstrap-args.js +89 -79
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.d.ts +2 -0
- package/dist/cli/commander-usage.js +58 -47
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/aggregate.js +102 -79
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/calendar.js +339 -303
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close-many.js +89 -68
- package/dist/cli/commands/close-many.js.map +1 -1
- package/dist/cli/commands/close.js +157 -129
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.js +50 -42
- package/dist/cli/commands/comments-audit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.js +443 -879
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.js +365 -287
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.js +352 -238
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.js +483 -434
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +46 -39
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/dedupe-merge.js +88 -69
- package/dist/cli/commands/dedupe-merge.js.map +1 -1
- package/dist/cli/commands/extension/bundled-catalog.js +59 -46
- package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
- package/dist/cli/commands/extension/doctor.js +129 -78
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/managed-state.js +101 -57
- package/dist/cli/commands/extension/managed-state.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.d.ts +7 -0
- package/dist/cli/commands/extension/scaffold.js +214 -186
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +6 -1
- package/dist/cli/commands/extension.js +1034 -902
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/get.js +114 -81
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.d.ts +17 -0
- package/dist/cli/commands/health.js +446 -307
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-compact.js +209 -140
- package/dist/cli/commands/history-compact.js.map +1 -1
- package/dist/cli/commands/history-redact.js +162 -119
- package/dist/cli/commands/history-redact.js.map +1 -1
- package/dist/cli/commands/history-repair.js +120 -85
- package/dist/cli/commands/history-repair.js.map +1 -1
- package/dist/cli/commands/init.d.ts +8 -2
- package/dist/cli/commands/init.js +263 -162
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list-filter-shared.js +55 -48
- package/dist/cli/commands/list-filter-shared.js.map +1 -1
- package/dist/cli/commands/list.js +152 -102
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/next.js +49 -32
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/plan.js +373 -298
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/recurrence-parsers.js +43 -25
- package/dist/cli/commands/recurrence-parsers.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +21 -5
- package/dist/cli/commands/reindex.js +345 -205
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +8 -7
- package/dist/cli/commands/restore.js +105 -69
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.js +33 -30
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +10 -2
- package/dist/cli/commands/search.js +595 -536
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/telemetry.js +98 -87
- package/dist/cli/commands/telemetry.js.map +1 -1
- package/dist/cli/commands/test-all.js +237 -168
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -5
- package/dist/cli/commands/test.js +530 -464
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +57 -42
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +1 -1
- package/dist/cli/commands/update.js +764 -747
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +18 -1
- package/dist/cli/commands/validate.js +466 -343
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +399 -357
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-options.js +48 -21
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/main.d.ts +47 -0
- package/dist/cli/main.js +428 -341
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migration-gates.js +22 -45
- package/dist/cli/migration-gates.js.map +1 -1
- package/dist/cli/register-list-query.js +94 -105
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +400 -416
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +86 -66
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +120 -101
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.js +117 -122
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-MVSEND6D.js → activity-CUC4JY3U.js} +9 -9
- package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js → aggregate-DKUTRY6R.js} +109 -85
- package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js → aggregate-SW5PNGCS.js} +108 -84
- package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js.map → aggregate-SW5PNGCS.js.map} +2 -2
- package/dist/cli-bundle/chunks/{append-KDHT4GHI.js → append-H32VOR2Y.js} +6 -6
- package/dist/cli-bundle/chunks/{append-LEDBAM3K.js → append-UBM632FK.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js → chunk-2227673O.js} +158 -114
- package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js → chunk-2ASNV4DH.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js → chunk-2CHRYUXL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js → chunk-2KWL5NPW.js} +42 -27
- package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js → chunk-36UGKF4O.js} +21 -29
- package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JZG5ADVE.js → chunk-3AZUFQK6.js} +1103 -963
- package/dist/cli-bundle/chunks/chunk-3AZUFQK6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DRPF274X.js → chunk-3LCUASYG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js → chunk-3Q2HBMTI.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js → chunk-4NUOWFBT.js} +109 -72
- package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js → chunk-55XRYWEG.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-5IRVSKPS.js → chunk-5GVTFFTC.js} +150 -224
- package/dist/cli-bundle/chunks/chunk-5GVTFFTC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js → chunk-5PGBHRY3.js} +41 -26
- package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js → chunk-66Z3X7ZG.js} +261 -161
- package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A3UNLXNJ.js → chunk-6ITZLD4T.js} +738 -688
- package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JTRKME24.js → chunk-6YCYF2AI.js} +262 -162
- package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RM6MHL6A.js → chunk-6ZMBJRDJ.js} +580 -467
- package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js → chunk-7MYWF4ZX.js} +110 -73
- package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SNUK7H5J.js → chunk-7NSPKJUS.js} +716 -606
- package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js → chunk-7TH5NMVB.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VD3LKZFX.js → chunk-7W4H4K26.js} +739 -689
- package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js → chunk-A6VOGKBA.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js → chunk-AIAIXG7I.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NIBP3I7A.js → chunk-AJEBCRIY.js} +128 -126
- package/dist/cli-bundle/chunks/chunk-AJEBCRIY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js → chunk-BTX5MIQF.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js +809 -0
- package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js → chunk-CYBDUHNO.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js → chunk-CZPVDLD2.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js → chunk-EMPGXBUF.js} +22 -30
- package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js → chunk-EUKTMRN3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js → chunk-FFOQHGNH.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js → chunk-GFMSLORL.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IZQOJR2B.js → chunk-GRRG3MCT.js} +198 -189
- package/dist/cli-bundle/chunks/chunk-GRRG3MCT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js → chunk-H4GRLYJS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js → chunk-HQTPRV4D.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-CY5IJMUM.js → chunk-I66WE2HE.js} +712 -602
- package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZFIEEDTJ.js → chunk-IEEJQCZ4.js} +509 -363
- package/dist/cli-bundle/chunks/chunk-IEEJQCZ4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DU66JUGT.js → chunk-IG5JYZGU.js} +488 -420
- package/dist/cli-bundle/chunks/chunk-IG5JYZGU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js → chunk-JMK5GCK2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js → chunk-JXAUVO6X.js} +258 -169
- package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js.map → chunk-JXAUVO6X.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js → chunk-K2VYLVX4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js → chunk-KCO2EAN5.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-T7ZMQI4J.js → chunk-KIYCOJ63.js} +198 -189
- package/dist/cli-bundle/chunks/chunk-KIYCOJ63.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js → chunk-KLXF7NCC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-V3KLX7U7.js → chunk-KN3URLKS.js} +510 -364
- package/dist/cli-bundle/chunks/chunk-KN3URLKS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js → chunk-LRKMWUUV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js → chunk-LTRAF2D7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5T6WPLRO.js → chunk-MNBPX5JS.js} +394 -354
- package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js → chunk-MRD4T5LF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js → chunk-N2JSWVWG.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-7WDETKGP.js → chunk-N3QCJS4M.js} +1105 -965
- package/dist/cli-bundle/chunks/chunk-N3QCJS4M.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js → chunk-NRZS637N.js} +258 -169
- package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js +799 -0
- package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js → chunk-Q6K2OACU.js} +153 -90
- package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-K46GQ265.js → chunk-Q6NXOHS6.js} +489 -421
- package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js → chunk-QH3FSKRJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-UB3V5WUI.js → chunk-RM37OPYK.js} +394 -354
- package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js → chunk-S62UANU7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js → chunk-SPM2XLWI.js} +37 -28
- package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DORJSBGJ.js → chunk-SYNKD3ZG.js} +127 -125
- package/dist/cli-bundle/chunks/chunk-SYNKD3ZG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6YRAMXRS.js → chunk-SYVUU7EK.js} +581 -468
- package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js → chunk-TPOFWBMY.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js → chunk-TTHCEV5Q.js} +92 -77
- package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js → chunk-U2BEEM2X.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js → chunk-UGLU6Q2I.js} +91 -76
- package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js → chunk-UT73HUPC.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js → chunk-UTSH5GWX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js → chunk-UWKEJMZU.js} +157 -113
- package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js → chunk-W47SML5B.js} +152 -89
- package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js → chunk-WJAMWAHZ.js} +157 -118
- package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-HIBK6H4S.js → chunk-XCHUVHKU.js} +685 -544
- package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DJDXAU74.js → chunk-XEWQKDYZ.js} +685 -544
- package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js → chunk-XTHQWXVC.js} +158 -119
- package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6T5ZIWBS.js → chunk-XWGEMNBR.js} +150 -224
- package/dist/cli-bundle/chunks/chunk-XWGEMNBR.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js → chunk-Y4NRKBFW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js → chunk-YLZZ6T54.js} +38 -29
- package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js → chunk-YPKFV2JR.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
- package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js → chunk-ZNHEYCDD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js → chunk-ZNT7KEWE.js} +2 -2
- package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js → claim-SENTPZBN.js} +8 -8
- package/dist/cli-bundle/chunks/{claim-6NINZYB3.js → claim-Z7MEQCBT.js} +8 -8
- package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js → close-424MX4CU.js} +7 -7
- package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
- package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js → close-many-2IV4J2TR.js} +103 -82
- package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
- package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js → close-many-SWY34BII.js} +102 -81
- package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
- package/dist/cli-bundle/chunks/{comments-ETHABIY6.js → comments-4FGNTSNV.js} +8 -8
- package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js → comments-7YS5MY5X.js} +8 -8
- package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
- package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
- package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
- package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js → context-LHVKJSPJ.js} +12 -12
- package/dist/cli-bundle/chunks/{context-XDI4DKKT.js → context-ZQY54JNS.js} +12 -12
- package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js → contracts-CP2EZJC7.js} +320 -199
- package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js → contracts-FIZLMP7O.js} +321 -200
- package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
- package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js → copy-GYNQQPW2.js} +5 -5
- package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js → copy-TLW7JTQT.js} +5 -5
- package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js → create-VSKYSOCD.js} +12 -12
- package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
- package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js → delete-4W5JYCEG.js} +5 -5
- package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js → delete-ANTOTI2I.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js → deps-HPPE6MJN.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js → deps-ZQZN54EZ.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js → docs-RPOVFMP3.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-2TIFR62T.js → docs-XJNYBJGE.js} +7 -7
- package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js → eval-DM6JBZTS.js} +10 -10
- package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js → eval-RFBI5FGS.js} +10 -10
- package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js → extension-B3YY4WY5.js} +11 -10
- package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js → extension-TTSEFQTS.js} +11 -10
- package/dist/cli-bundle/chunks/{files-DF3HO6XK.js → files-5D65CHGE.js} +7 -7
- package/dist/cli-bundle/chunks/{files-T5ODMETM.js → files-GPIG77EN.js} +7 -7
- package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js → focus-C3PEJV2C.js} +6 -6
- package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js → focus-ZHN7WIGX.js} +6 -6
- package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js → gc-D4JQ6OWN.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-FULIVYR4.js → gc-VZIXDL32.js} +3 -3
- package/dist/cli-bundle/chunks/{get-VYPIICPC.js → get-GIBRUUOP.js} +121 -81
- package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-AWK324RS.js → get-IOVAN6RU.js} +120 -80
- package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-Q66C43GN.js → health-L2U3AFKV.js} +437 -264
- package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-FBCVZGSX.js → health-MM7AWXYF.js} +436 -263
- package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
- package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
- package/dist/cli-bundle/chunks/{history-X4OSES6K.js → history-IL7XCEX2.js} +8 -8
- package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.js → history-compact-HALOTOU7.js} +214 -135
- package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-compact-WLCQEKXS.js → history-compact-MV25P7DM.js} +213 -134
- package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
- package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
- package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js → history-redact-VYCWQFK7.js} +9 -9
- package/dist/cli-bundle/chunks/{history-repair-FY75IC26.js → history-repair-44MODPQF.js} +124 -84
- package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-repair-GABSDSVD.js → history-repair-CPNAOCNF.js} +123 -83
- package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
- package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js → init-F27NHENZ.js} +12 -11
- package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
- package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js → learnings-HJVDQIGY.js} +8 -8
- package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js → learnings-XSFSUUWK.js} +8 -8
- package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js → list-HPMEKCAA.js} +8 -8
- package/dist/cli-bundle/chunks/{list-ROT7JF62.js → list-VMPWTURB.js} +8 -8
- package/dist/cli-bundle/chunks/{next-66BJB4N2.js → next-ETXF2ZCN.js} +59 -37
- package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
- package/dist/cli-bundle/chunks/{next-N5MWJTBY.js → next-QM6YJIIS.js} +60 -38
- package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
- package/dist/cli-bundle/chunks/{notes-FW6YFLND.js → notes-GDZIKGR6.js} +8 -8
- package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js → notes-WDDBPC4D.js} +8 -8
- package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js → plan-BGDR73Z6.js} +373 -279
- package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js → plan-C5IMM335.js} +372 -278
- package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
- package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js → profile-CCOKZ2IQ.js} +9 -9
- package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js → profile-HUCENIEQ.js} +9 -9
- package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.js → register-list-query-ROSNIL52.js} +80 -83
- package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-KY6Z6WV7.js → register-list-query-XN4ZRHSV.js} +79 -82
- package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-PCARIGZS.js → register-mutation-CFSB2MS3.js} +406 -385
- package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js → register-mutation-KRLAHEL2.js} +405 -384
- package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.js → register-operations-4PASGJDB.js} +112 -93
- package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-YAT6FUUB.js → register-operations-MBN4KGUM.js} +113 -94
- package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-N7UGXYJC.js → register-setup-VIAWYFP5.js} +129 -104
- package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-MPANILQF.js → register-setup-ZCGKHDKL.js} +128 -103
- package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
- package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js → restore-4CBWUMCX.js} +9 -9
- package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
- package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js → schema-TDGK6N3I.js} +7 -7
- package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js → schema-UE5KKAUX.js} +7 -7
- package/dist/cli-bundle/chunks/{search-KP6H7COV.js → search-FP7MEU4S.js} +10 -10
- package/dist/cli-bundle/chunks/{search-CX5UMV4H.js → search-K4CFLQ5S.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js → stats-NJJCALEZ.js} +6 -6
- package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js → stats-XT6QRKQY.js} +6 -6
- package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js → telemetry-5SQ5UDXC.js} +84 -70
- package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
- package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js → telemetry-HVXFZA2U.js} +85 -71
- package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-QNDXZQCW.js → test-UFSJ5YIO.js} +15 -14
- package/dist/cli-bundle/chunks/{test-HU2BS7EY.js → test-YCDAUBWF.js} +15 -14
- package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
- package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
- package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
- package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
- package/dist/cli-bundle/chunks/{test-runs-CA6K32RD.js → test-runs-FK5E75AA.js} +185 -147
- package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-LANLLPVO.js → test-runs-H4TGWGRN.js} +184 -146
- package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
- package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
- package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js → update-Y5WQVT5O.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js → update-many-6YAYYRLE.js} +83 -68
- package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js.map → update-many-6YAYYRLE.js.map} +2 -2
- package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js → update-many-JTKKSA7Y.js} +84 -69
- package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js.map → update-many-JTKKSA7Y.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js → upgrade-DTAHZ236.js} +11 -10
- package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js.map → upgrade-DTAHZ236.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js → upgrade-JUDU7YL4.js} +13 -12
- package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js.map → upgrade-JUDU7YL4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{validate-2G566PKQ.js → validate-732RWS5W.js} +440 -319
- package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
- package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js → validate-W7H5TEDC.js} +441 -320
- package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
- package/dist/cli-bundle/main.js +986 -1500
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/core/config/nested-settings.js +89 -67
- package/dist/core/config/nested-settings.js.map +1 -1
- package/dist/core/extensions/activation-summary-markdown.js +23 -12
- package/dist/core/extensions/activation-summary-markdown.js.map +1 -1
- package/dist/core/extensions/extension-policy.d.ts +18 -3
- package/dist/core/extensions/extension-policy.js +116 -106
- package/dist/core/extensions/extension-policy.js.map +1 -1
- package/dist/core/extensions/loader.js +310 -232
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/governance/metadata-coverage.js +20 -28
- package/dist/core/governance/metadata-coverage.js.map +1 -1
- package/dist/core/history/drift-scan.js +93 -81
- package/dist/core/history/drift-scan.js.map +1 -1
- package/dist/core/item/item-format.js +523 -410
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/item-type-definition.js +14 -14
- package/dist/core/item/item-type-definition.js.map +1 -1
- package/dist/core/item/type-registry.js +87 -82
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/output/mutation-projection.js +42 -26
- package/dist/core/output/mutation-projection.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +34 -28
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/semantic-defaults.js +64 -37
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/vector-stores.js +32 -17
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/sentry/helpers.js +31 -28
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/sentry/instrument.js +54 -43
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +239 -153
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-store.js +33 -26
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings.js +247 -203
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/test/background-runs.js +189 -160
- package/dist/core/test/background-runs.js.map +1 -1
- package/dist/mcp/server.js +387 -367
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +111 -180
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +76 -45
- package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
- package/dist/sdk/compose.d.ts +4 -1
- package/dist/sdk/compose.js +181 -115
- package/dist/sdk/compose.js.map +1 -1
- package/docs/RELEASING.md +2 -3
- package/package.json +2 -2
- package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
- package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
- package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-53ARXF2O.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AWN4PPH5.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js +0 -115
- package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-CHRNYKNI.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-D5LYZVGB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js +0 -118
- package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FDEVKXC4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-GF7EAR22.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-IHXXUIXS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
- package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JTRKME24.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KYDYQMNW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QE5UFCCO.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RPRW26NG.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-V3KLX7U7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
- package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-Z55WX4IQ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-Z5BM2FKQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZEATCVAC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZFIEEDTJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +0 -1
- package/dist/cli-bundle/chunks/close-37KEHLYM.js +0 -14
- package/dist/cli-bundle/chunks/close-many-BFMP6HHK.js.map +0 -7
- package/dist/cli-bundle/chunks/close-many-CXJBOWWY.js.map +0 -1
- package/dist/cli-bundle/chunks/config-FIXJZEQK.js +0 -1541
- package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +0 -7
- package/dist/cli-bundle/chunks/config-X3ZVCUUG.js +0 -1531
- package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +0 -7
- package/dist/cli-bundle/chunks/create-DFMNBKBS.js +0 -28
- package/dist/cli-bundle/chunks/get-AWK324RS.js.map +0 -7
- package/dist/cli-bundle/chunks/get-VYPIICPC.js.map +0 -1
- package/dist/cli-bundle/chunks/health-FBCVZGSX.js.map +0 -7
- package/dist/cli-bundle/chunks/health-Q66C43GN.js.map +0 -1
- package/dist/cli-bundle/chunks/history-5XUSLAJA.js +0 -18
- package/dist/cli-bundle/chunks/history-compact-2GHT32UX.js.map +0 -1
- package/dist/cli-bundle/chunks/history-compact-WLCQEKXS.js.map +0 -7
- package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-FY75IC26.js.map +0 -1
- package/dist/cli-bundle/chunks/history-repair-GABSDSVD.js.map +0 -7
- package/dist/cli-bundle/chunks/init-TRYJELH4.js +0 -21
- package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +0 -7
- package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-DQ7G4EDC.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-ZHKZ7JVF.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-L6CYTOIH.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-YAT6FUUB.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +0 -17
- package/dist/cli-bundle/chunks/telemetry-DIFPXCAT.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-WTYFUPRL.js.map +0 -1
- package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js +0 -360
- package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js.map +0 -7
- package/dist/cli-bundle/chunks/test-all-XLPI4USF.js +0 -357
- package/dist/cli-bundle/chunks/test-all-XLPI4USF.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +0 -7
- package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +0 -24
- package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-MVSEND6D.js.map → activity-CUC4JY3U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-EJBMXUBH.js.map → activity-WEIEMM73.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-KDHT4GHI.js.map → append-H32VOR2Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-LEDBAM3K.js.map → append-UBM632FK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js.map → chunk-2ASNV4DH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js.map → chunk-2CHRYUXL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DRPF274X.js.map → chunk-3LCUASYG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js.map → chunk-3Q2HBMTI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js.map → chunk-55XRYWEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js.map → chunk-A6VOGKBA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js.map → chunk-AIAIXG7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js.map → chunk-BTX5MIQF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js.map → chunk-CYBDUHNO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js.map → chunk-CZPVDLD2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js.map → chunk-EUKTMRN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js.map → chunk-FFOQHGNH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js.map → chunk-GFMSLORL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js.map → chunk-H4GRLYJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js.map → chunk-HQTPRV4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js.map → chunk-JMK5GCK2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js.map → chunk-K2VYLVX4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js.map → chunk-KCO2EAN5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js.map → chunk-KLXF7NCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js.map → chunk-LRKMWUUV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js.map → chunk-LTRAF2D7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js.map → chunk-MRD4T5LF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js.map → chunk-N2JSWVWG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js.map → chunk-QH3FSKRJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js.map → chunk-S62UANU7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js.map → chunk-U2BEEM2X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js.map → chunk-UT73HUPC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js.map → chunk-UTSH5GWX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js.map → chunk-Y4NRKBFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js.map → chunk-YPKFV2JR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js.map → chunk-ZNHEYCDD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js.map → claim-SENTPZBN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-6NINZYB3.js.map → claim-Z7MEQCBT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js.map → close-424MX4CU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-37KEHLYM.js.map → close-YCWQQPDS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-ETHABIY6.js.map → comments-4FGNTSNV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js.map → comments-7YS5MY5X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js.map → context-LHVKJSPJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-XDI4DKKT.js.map → context-ZQY54JNS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js.map → copy-GYNQQPW2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js.map → copy-TLW7JTQT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js.map → create-VSKYSOCD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-DFMNBKBS.js.map → create-XTMAPS7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js.map → delete-4W5JYCEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js.map → delete-ANTOTI2I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js.map → deps-HPPE6MJN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js.map → deps-ZQZN54EZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js.map → docs-RPOVFMP3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-2TIFR62T.js.map → docs-XJNYBJGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js.map → eval-DM6JBZTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js.map → eval-RFBI5FGS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js.map → extension-B3YY4WY5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js.map → extension-TTSEFQTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-DF3HO6XK.js.map → files-5D65CHGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-T5ODMETM.js.map → files-GPIG77EN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js.map → focus-C3PEJV2C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js.map → focus-ZHN7WIGX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js.map → gc-D4JQ6OWN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-FULIVYR4.js.map → gc-VZIXDL32.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-5XUSLAJA.js.map → history-DD7L7BNL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-X4OSES6K.js.map → history-IL7XCEX2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-BVHWDXPR.js.map → history-redact-IX4YEWMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js.map → history-redact-VYCWQFK7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js.map → init-F27NHENZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-TRYJELH4.js.map → init-HHVQQP6C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js.map → learnings-HJVDQIGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js.map → learnings-XSFSUUWK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js.map → list-HPMEKCAA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-ROT7JF62.js.map → list-VMPWTURB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-FW6YFLND.js.map → notes-GDZIKGR6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js.map → notes-WDDBPC4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js.map → profile-CCOKZ2IQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js.map → profile-HUCENIEQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js.map → restore-4CBWUMCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-IRAKSWIW.js.map → restore-5UEAGG3W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js.map → schema-TDGK6N3I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js.map → schema-UE5KKAUX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-KP6H7COV.js.map → search-FP7MEU4S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-CX5UMV4H.js.map → search-K4CFLQ5S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js.map → stats-NJJCALEZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js.map → stats-XT6QRKQY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-QNDXZQCW.js.map → test-UFSJ5YIO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-HU2BS7EY.js.map → test-YCDAUBWF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-UXDLTEOZ.js.map → update-MTCFES6X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js.map → update-Y5WQVT5O.js.map} +0 -0
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
resolveSearchCorpusFields,
|
|
14
14
|
resolveSettingsWithSemanticRuntimeDefaults,
|
|
15
15
|
resolveVectorStores
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-7TH5NMVB.js";
|
|
17
17
|
import {
|
|
18
18
|
applyFilterValueEcho,
|
|
19
19
|
buildContentFilterEcho,
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
parseStatusFilterCsv,
|
|
25
25
|
resolveContentFieldFilters,
|
|
26
26
|
resolveMissingMetadataFilters
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-W47SML5B.js";
|
|
28
28
|
import {
|
|
29
29
|
hasContentFieldFilter,
|
|
30
30
|
itemMatchesContentFilters
|
|
@@ -33,27 +33,27 @@ import {
|
|
|
33
33
|
hasMissingMetadataFilter,
|
|
34
34
|
itemMatchesMissingMetadata,
|
|
35
35
|
lifecycleClassifierFromStatusRegistry
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-36UGKF4O.js";
|
|
37
37
|
import {
|
|
38
38
|
parseLimit,
|
|
39
39
|
parsePriority,
|
|
40
40
|
parseType
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-JMK5GCK2.js";
|
|
42
42
|
import {
|
|
43
43
|
collectRegisteredItemFieldNames,
|
|
44
44
|
listAllDocumentCandidatesCached,
|
|
45
45
|
listAllFrontMatter,
|
|
46
46
|
toItemRecord
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-JXAUVO6X.js";
|
|
48
48
|
import {
|
|
49
49
|
isTerminalStatus,
|
|
50
50
|
parseItemDocument
|
|
51
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-IEEJQCZ4.js";
|
|
52
52
|
import {
|
|
53
53
|
compareTimestampStrings,
|
|
54
54
|
nowIso,
|
|
55
55
|
resolveIsoOrRelative
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-AIAIXG7I.js";
|
|
57
57
|
import {
|
|
58
58
|
EXIT_CODE,
|
|
59
59
|
PmCliError,
|
|
@@ -73,7 +73,7 @@ import {
|
|
|
73
73
|
runActiveOnReadHooks,
|
|
74
74
|
toNonEmptyString,
|
|
75
75
|
toNonEmptyStringOrUndefined
|
|
76
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-7NSPKJUS.js";
|
|
77
77
|
|
|
78
78
|
// dist/cli/commands/search.js
|
|
79
79
|
import fs from "node:fs/promises";
|
|
@@ -455,7 +455,7 @@ function resolveBm25Params(settings) {
|
|
|
455
455
|
!(function() {
|
|
456
456
|
try {
|
|
457
457
|
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
458
|
-
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "
|
|
458
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "fe9c6a3a-fb99-53ed-9a6c-8c32bb745364");
|
|
459
459
|
} catch (e2) {
|
|
460
460
|
}
|
|
461
461
|
})();
|
|
@@ -532,8 +532,6 @@ var LONG_QUERY_PHRASE_MULTIPLIER = 6;
|
|
|
532
532
|
var ALL_TERMS_COVERAGE_BONUS = 40;
|
|
533
533
|
var EXACT_ID_MATCH_SCORE = 1e3;
|
|
534
534
|
var SHORT_ID_MATCH_SCORE = 900;
|
|
535
|
-
var IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS = 8e3;
|
|
536
|
-
var IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS = 8e3;
|
|
537
535
|
var HIGHLIGHT_OPEN = "\xAB";
|
|
538
536
|
var HIGHLIGHT_CLOSE = "\xBB";
|
|
539
537
|
var HIGHLIGHT_SNIPPET_RADIUS = 60;
|
|
@@ -598,20 +596,20 @@ function buildVerboseSearchFilters(params) {
|
|
|
598
596
|
return {
|
|
599
597
|
mode: effectiveMode,
|
|
600
598
|
match_mode: matchMode,
|
|
601
|
-
status: isStatusAllFilterInput(options.status) ? "all" : options.status
|
|
602
|
-
type: options.type
|
|
603
|
-
tag: options.tag
|
|
604
|
-
priority: options.priority
|
|
605
|
-
deadline_before: options.deadlineBefore
|
|
606
|
-
deadline_after: options.deadlineAfter
|
|
607
|
-
updated_after: options.updatedAfter
|
|
608
|
-
updated_before: options.updatedBefore
|
|
609
|
-
created_after: options.createdAfter
|
|
610
|
-
created_before: options.createdBefore
|
|
611
|
-
assignee: options.assignee
|
|
612
|
-
sprint: options.sprint
|
|
613
|
-
release: options.release
|
|
614
|
-
parent: options.parent
|
|
599
|
+
status: isStatusAllFilterInput(options.status) ? "all" : valueOrNull(options.status),
|
|
600
|
+
type: valueOrNull(options.type),
|
|
601
|
+
tag: valueOrNull(options.tag),
|
|
602
|
+
priority: valueOrNull(options.priority),
|
|
603
|
+
deadline_before: valueOrNull(options.deadlineBefore),
|
|
604
|
+
deadline_after: valueOrNull(options.deadlineAfter),
|
|
605
|
+
updated_after: valueOrNull(options.updatedAfter),
|
|
606
|
+
updated_before: valueOrNull(options.updatedBefore),
|
|
607
|
+
created_after: valueOrNull(options.createdAfter),
|
|
608
|
+
created_before: valueOrNull(options.createdBefore),
|
|
609
|
+
assignee: valueOrNull(options.assignee),
|
|
610
|
+
sprint: valueOrNull(options.sprint),
|
|
611
|
+
release: valueOrNull(options.release),
|
|
612
|
+
parent: valueOrNull(options.parent),
|
|
615
613
|
...buildGovernanceMissingFilterEcho(options),
|
|
616
614
|
...buildContentFilterEcho(options),
|
|
617
615
|
include_linked: includeLinked,
|
|
@@ -624,10 +622,13 @@ function buildVerboseSearchFilters(params) {
|
|
|
624
622
|
rerank_enabled: rerank.enabled,
|
|
625
623
|
rerank_model: rerank.model,
|
|
626
624
|
rerank_top_k: rerank.top_k,
|
|
627
|
-
limit: options.limit
|
|
625
|
+
limit: valueOrNull(options.limit),
|
|
628
626
|
runtime_filters: runtimeFieldFilters
|
|
629
627
|
};
|
|
630
628
|
}
|
|
629
|
+
function valueOrNull(value) {
|
|
630
|
+
return value ?? null;
|
|
631
|
+
}
|
|
631
632
|
function collectErrorCauseCodes(error) {
|
|
632
633
|
const codes = [];
|
|
633
634
|
let current = error;
|
|
@@ -652,16 +653,6 @@ function classifyImplicitSemanticFallbackReason(error) {
|
|
|
652
653
|
}
|
|
653
654
|
return "error";
|
|
654
655
|
}
|
|
655
|
-
function buildImplicitSemanticFallbackWarning(error) {
|
|
656
|
-
const reason = classifyImplicitSemanticFallbackReason(error);
|
|
657
|
-
if (reason === "timeout") {
|
|
658
|
-
return "search_implicit_semantic_fallback:timeout:using_keyword_mode";
|
|
659
|
-
}
|
|
660
|
-
if (reason === "connection") {
|
|
661
|
-
return "search_implicit_semantic_fallback:connection:using_keyword_mode";
|
|
662
|
-
}
|
|
663
|
-
return "search_implicit_semantic_fallback:error:using_keyword_mode";
|
|
664
|
-
}
|
|
665
656
|
function buildExplicitSemanticFallbackWarning(requestedMode, error) {
|
|
666
657
|
const reason = classifyImplicitSemanticFallbackReason(error);
|
|
667
658
|
return `search_${requestedMode}_fallback:${reason}:using_keyword_mode`;
|
|
@@ -793,7 +784,6 @@ var _testOnlySearchCommand = {
|
|
|
793
784
|
buildExplicitSemanticFallbackWarning,
|
|
794
785
|
buildCompactSearchFilterSummary,
|
|
795
786
|
buildHybridLexicalScore,
|
|
796
|
-
buildImplicitSemanticFallbackWarning,
|
|
797
787
|
buildRerankCorpus,
|
|
798
788
|
buildSemanticHits,
|
|
799
789
|
classifyImplicitSemanticFallbackReason,
|
|
@@ -968,6 +958,9 @@ function resolveSearchMetadataFilterSet(options, typeRegistry, statusFilter) {
|
|
|
968
958
|
};
|
|
969
959
|
}
|
|
970
960
|
function matchesScalarSearchFilters(item, filters) {
|
|
961
|
+
return matchesIdentitySearchFilters(item, filters) && matchesTimestampSearchFilters(item, filters) && matchesOwnerSearchFilters(item, filters);
|
|
962
|
+
}
|
|
963
|
+
function matchesIdentitySearchFilters(item, filters) {
|
|
971
964
|
if (filters.statusSet && !filters.statusSet.has(item.status))
|
|
972
965
|
return false;
|
|
973
966
|
if (filters.typeFilter && item.type !== filters.typeFilter)
|
|
@@ -976,6 +969,9 @@ function matchesScalarSearchFilters(item, filters) {
|
|
|
976
969
|
return false;
|
|
977
970
|
if (filters.priorityFilter !== void 0 && item.priority !== filters.priorityFilter)
|
|
978
971
|
return false;
|
|
972
|
+
return true;
|
|
973
|
+
}
|
|
974
|
+
function matchesTimestampSearchFilters(item, filters) {
|
|
979
975
|
if (filters.deadlineBefore && (!item.deadline || compareTimestampStrings(item.deadline, filters.deadlineBefore) > 0))
|
|
980
976
|
return false;
|
|
981
977
|
if (filters.deadlineAfter && (!item.deadline || compareTimestampStrings(item.deadline, filters.deadlineAfter) < 0))
|
|
@@ -988,6 +984,9 @@ function matchesScalarSearchFilters(item, filters) {
|
|
|
988
984
|
return false;
|
|
989
985
|
if (filters.createdBefore && compareTimestampStrings(item.created_at, filters.createdBefore) > 0)
|
|
990
986
|
return false;
|
|
987
|
+
return true;
|
|
988
|
+
}
|
|
989
|
+
function matchesOwnerSearchFilters(item, filters) {
|
|
991
990
|
if (filters.assigneeFilter !== void 0 && item.assignee !== filters.assigneeFilter)
|
|
992
991
|
return false;
|
|
993
992
|
if (filters.sprintFilter !== void 0 && item.sprint !== filters.sprintFilter)
|
|
@@ -1192,26 +1191,8 @@ function buildHitHighlights(document, matchedFields, tokens) {
|
|
|
1192
1191
|
}
|
|
1193
1192
|
return highlights;
|
|
1194
1193
|
}
|
|
1195
|
-
function
|
|
1196
|
-
|
|
1197
|
-
const normalizedId = normalizeSearchPhrase(item.id);
|
|
1198
|
-
const normalizedIdPrefix = typeof idPrefix === "string" ? idPrefix.trim().toLowerCase() : "";
|
|
1199
|
-
const normalizedIdPrefixPhrase = normalizeSearchPhrase(normalizedIdPrefix);
|
|
1200
|
-
const normalizedShortId = normalizedIdPrefixPhrase.length > 0 && normalizedId.startsWith(normalizedIdPrefixPhrase) ? normalizedId.slice(normalizedIdPrefixPhrase.length).trim() : normalizedId;
|
|
1201
|
-
if (normalizedQuery === normalizedId || normalizedQuery === normalizedShortId) {
|
|
1202
|
-
return {
|
|
1203
|
-
item,
|
|
1204
|
-
score: normalizedQuery === normalizedId ? EXACT_ID_MATCH_SCORE : SHORT_ID_MATCH_SCORE,
|
|
1205
|
-
matched_fields: ["id"],
|
|
1206
|
-
matched_all_terms: true,
|
|
1207
|
-
exact_id_match: true
|
|
1208
|
-
};
|
|
1209
|
-
}
|
|
1210
|
-
const titleTokenCounts = /* @__PURE__ */ new Map();
|
|
1211
|
-
for (const token of tokenizeForExactTokenMatch(item.title)) {
|
|
1212
|
-
titleTokenCounts.set(token, (titleTokenCounts.get(token) ?? 0) + 1);
|
|
1213
|
-
}
|
|
1214
|
-
const searchableFields = [
|
|
1194
|
+
function buildSearchableScoringFields(document, linkedCorpus, tuning) {
|
|
1195
|
+
return [
|
|
1215
1196
|
...SEARCHABLE_FIELD_BUILDERS.map((builder) => ({
|
|
1216
1197
|
name: builder.name,
|
|
1217
1198
|
value: builder.value(document),
|
|
@@ -1219,54 +1200,84 @@ function scoreDocument(document, tokens, normalizedQuery, linkedCorpus, tuning,
|
|
|
1219
1200
|
})),
|
|
1220
1201
|
{ name: "linked_content", value: linkedCorpus, weight: tuning.linked_content_weight }
|
|
1221
1202
|
];
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
const
|
|
1203
|
+
}
|
|
1204
|
+
function buildExactIdSearchHit(item, normalizedQuery, idPrefix) {
|
|
1205
|
+
const normalizedId = normalizeSearchPhrase(item.id);
|
|
1206
|
+
const normalizedIdPrefix = typeof idPrefix === "string" ? idPrefix.trim().toLowerCase() : "";
|
|
1207
|
+
const normalizedIdPrefixPhrase = normalizeSearchPhrase(normalizedIdPrefix);
|
|
1208
|
+
const normalizedShortId = normalizedIdPrefixPhrase.length > 0 && normalizedId.startsWith(normalizedIdPrefixPhrase) ? normalizedId.slice(normalizedIdPrefixPhrase.length).trim() : normalizedId;
|
|
1209
|
+
if (normalizedQuery !== normalizedId && normalizedQuery !== normalizedShortId) {
|
|
1210
|
+
return null;
|
|
1211
|
+
}
|
|
1212
|
+
return {
|
|
1213
|
+
item,
|
|
1214
|
+
score: normalizedQuery === normalizedId ? EXACT_ID_MATCH_SCORE : SHORT_ID_MATCH_SCORE,
|
|
1215
|
+
matched_fields: ["id"],
|
|
1216
|
+
matched_all_terms: true,
|
|
1217
|
+
exact_id_match: true
|
|
1218
|
+
};
|
|
1219
|
+
}
|
|
1220
|
+
function scoreTokenMatches(tokens, titleTokenCounts, searchableFields, tuning, state) {
|
|
1225
1221
|
for (const token of tokens) {
|
|
1226
1222
|
const exactTitleMatches = titleTokenCounts.get(token) ?? 0;
|
|
1227
1223
|
if (exactTitleMatches > 0) {
|
|
1228
|
-
score += exactTitleMatches * tuning.title_exact_bonus;
|
|
1229
|
-
matched.add("title");
|
|
1230
|
-
matchedTokens.add(token);
|
|
1224
|
+
state.score += exactTitleMatches * tuning.title_exact_bonus;
|
|
1225
|
+
state.matched.add("title");
|
|
1226
|
+
state.matchedTokens.add(token);
|
|
1231
1227
|
}
|
|
1232
1228
|
for (const field of searchableFields) {
|
|
1233
|
-
const
|
|
1234
|
-
const occurrences = countOccurrences(fieldValue, token);
|
|
1229
|
+
const occurrences = countOccurrences(field.value.toLowerCase(), token);
|
|
1235
1230
|
if (occurrences > 0) {
|
|
1236
|
-
score += occurrences * field.weight;
|
|
1237
|
-
matched.add(field.name);
|
|
1238
|
-
matchedTokens.add(token);
|
|
1231
|
+
state.score += occurrences * field.weight;
|
|
1232
|
+
state.matched.add(field.name);
|
|
1233
|
+
state.matchedTokens.add(token);
|
|
1239
1234
|
}
|
|
1240
1235
|
}
|
|
1241
1236
|
}
|
|
1237
|
+
}
|
|
1238
|
+
function scorePhraseMatches(item, normalizedQuery, searchableFields, state) {
|
|
1239
|
+
const normalizedTitle = normalizeSearchPhrase(item.title);
|
|
1240
|
+
if (normalizedTitle === normalizedQuery) {
|
|
1241
|
+
state.score += LONG_QUERY_TITLE_EXACT_BONUS;
|
|
1242
|
+
state.matched.add("title");
|
|
1243
|
+
}
|
|
1244
|
+
for (const field of searchableFields) {
|
|
1245
|
+
const phraseOccurrences = countOccurrences(normalizeSearchPhrase(field.value), normalizedQuery);
|
|
1246
|
+
if (phraseOccurrences > 0) {
|
|
1247
|
+
state.score += phraseOccurrences * field.weight * LONG_QUERY_PHRASE_MULTIPLIER;
|
|
1248
|
+
state.matched.add(field.name);
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
function scoreDocument(document, tokens, normalizedQuery, linkedCorpus, tuning, idPrefix, applyCoverageBonus = false) {
|
|
1253
|
+
const item = document.metadata;
|
|
1254
|
+
const exactIdHit = buildExactIdSearchHit(item, normalizedQuery, idPrefix);
|
|
1255
|
+
if (exactIdHit) {
|
|
1256
|
+
return exactIdHit;
|
|
1257
|
+
}
|
|
1258
|
+
const titleTokenCounts = /* @__PURE__ */ new Map();
|
|
1259
|
+
for (const token of tokenizeForExactTokenMatch(item.title)) {
|
|
1260
|
+
titleTokenCounts.set(token, (titleTokenCounts.get(token) ?? 0) + 1);
|
|
1261
|
+
}
|
|
1262
|
+
const searchableFields = buildSearchableScoringFields(document, linkedCorpus, tuning);
|
|
1263
|
+
const state = { score: 0, matched: /* @__PURE__ */ new Set(), matchedTokens: /* @__PURE__ */ new Set() };
|
|
1264
|
+
scoreTokenMatches(tokens, titleTokenCounts, searchableFields, tuning, state);
|
|
1242
1265
|
const distinctTokens = new Set(tokens);
|
|
1243
|
-
const matchedAllTerms = distinctTokens.size > 0 && matchedTokens.size === distinctTokens.size;
|
|
1266
|
+
const matchedAllTerms = distinctTokens.size > 0 && state.matchedTokens.size === distinctTokens.size;
|
|
1244
1267
|
if (applyCoverageBonus && distinctTokens.size > 1 && matchedAllTerms) {
|
|
1245
|
-
score += ALL_TERMS_COVERAGE_BONUS;
|
|
1268
|
+
state.score += ALL_TERMS_COVERAGE_BONUS;
|
|
1246
1269
|
}
|
|
1247
1270
|
const isLongPhraseQuery = tokens.length >= LONG_QUERY_TOKEN_THRESHOLD && normalizedQuery.includes(" ");
|
|
1248
1271
|
if (isLongPhraseQuery) {
|
|
1249
|
-
|
|
1250
|
-
if (normalizedTitle === normalizedQuery) {
|
|
1251
|
-
score += LONG_QUERY_TITLE_EXACT_BONUS;
|
|
1252
|
-
matched.add("title");
|
|
1253
|
-
}
|
|
1254
|
-
for (const field of searchableFields) {
|
|
1255
|
-
const normalizedField = normalizeSearchPhrase(field.value);
|
|
1256
|
-
const phraseOccurrences = countOccurrences(normalizedField, normalizedQuery);
|
|
1257
|
-
if (phraseOccurrences > 0) {
|
|
1258
|
-
score += phraseOccurrences * field.weight * LONG_QUERY_PHRASE_MULTIPLIER;
|
|
1259
|
-
matched.add(field.name);
|
|
1260
|
-
}
|
|
1261
|
-
}
|
|
1272
|
+
scorePhraseMatches(item, normalizedQuery, searchableFields, state);
|
|
1262
1273
|
}
|
|
1263
|
-
if (score <= 0) {
|
|
1274
|
+
if (state.score <= 0) {
|
|
1264
1275
|
return null;
|
|
1265
1276
|
}
|
|
1266
1277
|
return {
|
|
1267
1278
|
item,
|
|
1268
|
-
score,
|
|
1269
|
-
matched_fields: [...matched].sort((a, b) => a.localeCompare(b)),
|
|
1279
|
+
score: state.score,
|
|
1280
|
+
matched_fields: [...state.matched].sort((a, b) => a.localeCompare(b)),
|
|
1270
1281
|
matched_all_terms: matchedAllTerms
|
|
1271
1282
|
};
|
|
1272
1283
|
}
|
|
@@ -1484,8 +1495,12 @@ function resolveExtensionVectorAdapter(settings) {
|
|
|
1484
1495
|
if (typeof query !== "function") {
|
|
1485
1496
|
return null;
|
|
1486
1497
|
}
|
|
1498
|
+
const upsert = runtimeDefinition.upsert;
|
|
1499
|
+
const runtimeAdapterName = toOptionalNonEmptyString(runtimeDefinition.name) ?? toOptionalNonEmptyString(resolved.definition.name) ?? adapterName ?? "extension";
|
|
1487
1500
|
return {
|
|
1488
|
-
|
|
1501
|
+
adapterName: runtimeAdapterName,
|
|
1502
|
+
query,
|
|
1503
|
+
...typeof upsert === "function" ? { upsert } : {}
|
|
1489
1504
|
};
|
|
1490
1505
|
}
|
|
1491
1506
|
function normalizeExtensionProviderHits(providerName, raw, filteredById) {
|
|
@@ -1652,52 +1667,151 @@ function buildRerankCorpus(document) {
|
|
|
1652
1667
|
document.body
|
|
1653
1668
|
].map((entry) => typeof entry === "string" ? entry.trim() : "").filter((entry) => entry.length > 0).join("\n");
|
|
1654
1669
|
}
|
|
1655
|
-
async function
|
|
1656
|
-
const semanticLimit = context.limit ?? context.maxResults;
|
|
1657
|
-
const embeddingOptions = context.embeddingTimeoutMs !== void 0 ? { timeout_ms: context.embeddingTimeoutMs } : {};
|
|
1658
|
-
const vectorQueryOptions = context.vectorQueryTimeoutMs !== void 0 ? { timeout_ms: context.vectorQueryTimeoutMs } : {};
|
|
1659
|
-
const queryTrimmed = context.query.trim();
|
|
1670
|
+
async function resolveExpandedSemanticQueries(context, queryTrimmed) {
|
|
1660
1671
|
const baseExpandedQueries = context.queryExpansion.enabled ? buildDeterministicQueryExpansions(queryTrimmed, context.queryExpansion.max_queries) : [queryTrimmed];
|
|
1661
|
-
|
|
1662
|
-
if (context.queryExpansion.enabled) {
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
}
|
|
1675
|
-
|
|
1676
|
-
context.warnings.push(`search_query_expansion_provider_unavailable:${context.queryExpansion.provider}:using_builtin`);
|
|
1672
|
+
const expandedQueries = baseExpandedQueries.length > 0 ? baseExpandedQueries : [queryTrimmed];
|
|
1673
|
+
if (!context.queryExpansion.enabled) {
|
|
1674
|
+
return expandedQueries;
|
|
1675
|
+
}
|
|
1676
|
+
if (context.queryExpansionExtension?.expand) {
|
|
1677
|
+
try {
|
|
1678
|
+
const rawExpansion = await Promise.resolve(context.queryExpansionExtension.expand({
|
|
1679
|
+
query: queryTrimmed,
|
|
1680
|
+
mode: context.requestedMode,
|
|
1681
|
+
settings: context.settings
|
|
1682
|
+
}));
|
|
1683
|
+
return mergeQueryExpansions(expandedQueries, normalizeQueryExpansionOutput(rawExpansion), context.queryExpansion.max_queries);
|
|
1684
|
+
} catch {
|
|
1685
|
+
context.warnings.push(`search_query_expansion_provider_failed:${context.queryExpansionExtension.providerName}:using_builtin`);
|
|
1686
|
+
return expandedQueries;
|
|
1677
1687
|
}
|
|
1678
1688
|
}
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1689
|
+
if (context.queryExpansion.provider && context.queryExpansion.provider !== "openai" && context.queryExpansion.provider !== "ollama") {
|
|
1690
|
+
context.warnings.push(`search_query_expansion_provider_unavailable:${context.queryExpansion.provider}:using_builtin`);
|
|
1691
|
+
}
|
|
1692
|
+
return expandedQueries;
|
|
1693
|
+
}
|
|
1694
|
+
async function executeSemanticVectorQuery(context, semanticVector, semanticLimit, vectorQueryOptions) {
|
|
1695
|
+
if (context.extensionVectorAdapter?.query) {
|
|
1696
|
+
try {
|
|
1697
|
+
return await Promise.resolve(context.extensionVectorAdapter.query({
|
|
1698
|
+
vector: semanticVector,
|
|
1699
|
+
limit: semanticLimit,
|
|
1700
|
+
settings: context.settings
|
|
1701
|
+
}));
|
|
1702
|
+
} catch (error) {
|
|
1703
|
+
if (!context.vectorStore) {
|
|
1704
|
+
throw new PmCliError(`Extension vector adapter query failed and no built-in fallback store is configured (${error instanceof Error ? error.message : String(error)})`, EXIT_CODE.GENERIC_FAILURE);
|
|
1693
1705
|
}
|
|
1694
|
-
|
|
1695
|
-
if (context.vectorStore) {
|
|
1706
|
+
context.warnings.push(`search_vector_adapter_failed:${context.extensionVectorAdapter.adapterName}:using_builtin`);
|
|
1696
1707
|
return await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);
|
|
1697
1708
|
}
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1709
|
+
}
|
|
1710
|
+
if (context.vectorStore) {
|
|
1711
|
+
return await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);
|
|
1712
|
+
}
|
|
1713
|
+
throw new PmCliError("Semantic search requires either a configured vector store or an extension vector adapter query handler", EXIT_CODE.USAGE);
|
|
1714
|
+
}
|
|
1715
|
+
function buildRerankCandidateContexts(hybridHits, filteredById, topK) {
|
|
1716
|
+
const sortedForCandidates = [...hybridHits].sort((left, right) => {
|
|
1717
|
+
if (left.score !== right.score) {
|
|
1718
|
+
return right.score - left.score;
|
|
1719
|
+
}
|
|
1720
|
+
return left.item.id.localeCompare(right.item.id);
|
|
1721
|
+
});
|
|
1722
|
+
return sortedForCandidates.slice(0, topK).map((hit) => {
|
|
1723
|
+
const document = filteredById.get(hit.item.id);
|
|
1724
|
+
return document ? { hit, text: buildRerankCorpus(document) } : null;
|
|
1725
|
+
}).filter((entry) => entry !== null);
|
|
1726
|
+
}
|
|
1727
|
+
async function resolveExtensionRerankScores(context, queryTrimmed, candidateContexts) {
|
|
1728
|
+
if (!context.rerankExtension?.rerank) {
|
|
1729
|
+
return null;
|
|
1730
|
+
}
|
|
1731
|
+
try {
|
|
1732
|
+
const rawRerank = await Promise.resolve(context.rerankExtension.rerank({
|
|
1733
|
+
query: queryTrimmed,
|
|
1734
|
+
mode: "hybrid",
|
|
1735
|
+
model: context.rerank.model,
|
|
1736
|
+
top_k: context.rerank.top_k,
|
|
1737
|
+
settings: context.settings,
|
|
1738
|
+
candidates: candidateContexts.map((entry) => ({
|
|
1739
|
+
id: entry.hit.item.id,
|
|
1740
|
+
text: entry.text,
|
|
1741
|
+
score: entry.hit.score
|
|
1742
|
+
}))
|
|
1743
|
+
}));
|
|
1744
|
+
const normalizedRerank = normalizeRerankOutput(rawRerank);
|
|
1745
|
+
if (normalizedRerank.length > 0) {
|
|
1746
|
+
return new Map(normalizedRerank.map((entry) => [entry.id, entry.score]));
|
|
1747
|
+
}
|
|
1748
|
+
context.warnings.push(`search_rerank_provider_invalid_response:${context.rerankExtension.providerName}:using_builtin`);
|
|
1749
|
+
return null;
|
|
1750
|
+
} catch {
|
|
1751
|
+
context.warnings.push(`search_rerank_provider_failed:${context.rerankExtension.providerName}:using_builtin`);
|
|
1752
|
+
return null;
|
|
1753
|
+
}
|
|
1754
|
+
}
|
|
1755
|
+
async function resolveRerankScores(context, queryTrimmed, candidateContexts) {
|
|
1756
|
+
const extensionScores = await resolveExtensionRerankScores(context, queryTrimmed, candidateContexts);
|
|
1757
|
+
if (extensionScores) {
|
|
1758
|
+
return extensionScores;
|
|
1759
|
+
}
|
|
1760
|
+
const rerankCandidates = candidateContexts.map((entry) => ({
|
|
1761
|
+
id: entry.hit.item.id,
|
|
1762
|
+
text: entry.text
|
|
1763
|
+
}));
|
|
1764
|
+
try {
|
|
1765
|
+
return await rerankCandidatesWithEmbeddings(context.provider, context.rerank.model, queryTrimmed, rerankCandidates, context.embeddingTimeoutMs);
|
|
1766
|
+
} catch {
|
|
1767
|
+
context.warnings.push("search_rerank_failed:using_hybrid_scores");
|
|
1768
|
+
return null;
|
|
1769
|
+
}
|
|
1770
|
+
}
|
|
1771
|
+
function applyRerankScores(hybridHits, rerankScores) {
|
|
1772
|
+
const rerankedIds = new Set(rerankScores.keys());
|
|
1773
|
+
const rerankedHits = hybridHits.map((hit) => {
|
|
1774
|
+
const rerankScore = rerankScores.get(hit.item.id);
|
|
1775
|
+
if (rerankScore === void 0) {
|
|
1776
|
+
return hit;
|
|
1777
|
+
}
|
|
1778
|
+
const matchedFields = new Set(hit.matched_fields);
|
|
1779
|
+
matchedFields.add("rerank");
|
|
1780
|
+
return {
|
|
1781
|
+
...hit,
|
|
1782
|
+
score: rerankScore,
|
|
1783
|
+
matched_fields: [...matchedFields].sort((left, right) => left.localeCompare(right))
|
|
1784
|
+
};
|
|
1785
|
+
});
|
|
1786
|
+
rerankedHits.sort((left, right) => {
|
|
1787
|
+
const leftWasReranked = rerankedIds.has(left.item.id);
|
|
1788
|
+
const rightWasReranked = rerankedIds.has(right.item.id);
|
|
1789
|
+
if (leftWasReranked !== rightWasReranked) {
|
|
1790
|
+
return leftWasReranked ? -1 : 1;
|
|
1791
|
+
}
|
|
1792
|
+
if (left.score !== right.score) {
|
|
1793
|
+
return right.score - left.score;
|
|
1794
|
+
}
|
|
1795
|
+
return left.item.id.localeCompare(right.item.id);
|
|
1796
|
+
});
|
|
1797
|
+
return rerankedHits;
|
|
1798
|
+
}
|
|
1799
|
+
async function applyHybridRerank(context, queryTrimmed, hybridHits, filteredById) {
|
|
1800
|
+
if (!context.rerank.enabled || hybridHits.length <= 1) {
|
|
1801
|
+
return hybridHits;
|
|
1802
|
+
}
|
|
1803
|
+
const candidateContexts = buildRerankCandidateContexts(hybridHits, filteredById, context.rerank.top_k);
|
|
1804
|
+
const rerankScores = await resolveRerankScores(context, queryTrimmed, candidateContexts);
|
|
1805
|
+
return rerankScores && rerankScores.size > 0 ? applyRerankScores(hybridHits, rerankScores) : hybridHits;
|
|
1806
|
+
}
|
|
1807
|
+
async function computeSemanticOrHybridHits(context) {
|
|
1808
|
+
const semanticLimit = context.limit ?? context.maxResults;
|
|
1809
|
+
const embeddingOptions = context.embeddingTimeoutMs !== void 0 ? { timeout_ms: context.embeddingTimeoutMs } : {};
|
|
1810
|
+
const vectorQueryOptions = context.vectorQueryTimeoutMs !== void 0 ? { timeout_ms: context.vectorQueryTimeoutMs } : {};
|
|
1811
|
+
const queryTrimmed = context.query.trim();
|
|
1812
|
+
const expandedQueries = await resolveExpandedSemanticQueries(context, queryTrimmed);
|
|
1813
|
+
const queryVectors = await executeEmbeddingRequest(context.provider, expandedQueries, embeddingOptions);
|
|
1814
|
+
const queryVectorGroups = await Promise.all(queryVectors.map(async (semanticVector) => await executeSemanticVectorQuery(context, semanticVector, semanticLimit, vectorQueryOptions)));
|
|
1701
1815
|
const vectorHits = mergeVectorHitsById(queryVectorGroups);
|
|
1702
1816
|
const filteredById = new Map(context.filteredDocuments.map((document) => [document.metadata.id, document]));
|
|
1703
1817
|
const { semanticHits, semanticScores } = buildSemanticHits(vectorHits, filteredById);
|
|
@@ -1705,86 +1819,7 @@ async function computeSemanticOrHybridHits(context) {
|
|
|
1705
1819
|
if (context.requestedMode === "semantic") {
|
|
1706
1820
|
return { hits: forceExactIdHitsToTop(semanticHits, context.keywordHits), vectorMatchCount };
|
|
1707
1821
|
}
|
|
1708
|
-
|
|
1709
|
-
if (context.rerank.enabled && hybridHits.length > 1) {
|
|
1710
|
-
const sortedForCandidates = [...hybridHits].sort((left, right) => {
|
|
1711
|
-
if (left.score !== right.score) {
|
|
1712
|
-
return right.score - left.score;
|
|
1713
|
-
}
|
|
1714
|
-
return left.item.id.localeCompare(right.item.id);
|
|
1715
|
-
});
|
|
1716
|
-
const candidateHits = sortedForCandidates.slice(0, context.rerank.top_k);
|
|
1717
|
-
const candidateContexts = candidateHits.map((hit) => {
|
|
1718
|
-
const document = filteredById.get(hit.item.id);
|
|
1719
|
-
if (!document) {
|
|
1720
|
-
return null;
|
|
1721
|
-
}
|
|
1722
|
-
return { hit, text: buildRerankCorpus(document) };
|
|
1723
|
-
}).filter((entry) => entry !== null);
|
|
1724
|
-
const rerankCandidates = candidateContexts.map((entry) => ({
|
|
1725
|
-
id: entry.hit.item.id,
|
|
1726
|
-
text: entry.text
|
|
1727
|
-
}));
|
|
1728
|
-
let rerankScores = null;
|
|
1729
|
-
if (context.rerankExtension?.rerank) {
|
|
1730
|
-
try {
|
|
1731
|
-
const rawRerank = await Promise.resolve(context.rerankExtension.rerank({
|
|
1732
|
-
query: queryTrimmed,
|
|
1733
|
-
mode: "hybrid",
|
|
1734
|
-
model: context.rerank.model,
|
|
1735
|
-
top_k: context.rerank.top_k,
|
|
1736
|
-
settings: context.settings,
|
|
1737
|
-
candidates: candidateContexts.map((entry) => ({
|
|
1738
|
-
id: entry.hit.item.id,
|
|
1739
|
-
text: entry.text,
|
|
1740
|
-
score: entry.hit.score
|
|
1741
|
-
}))
|
|
1742
|
-
}));
|
|
1743
|
-
const normalizedRerank = normalizeRerankOutput(rawRerank);
|
|
1744
|
-
if (normalizedRerank.length > 0) {
|
|
1745
|
-
rerankScores = new Map(normalizedRerank.map((entry) => [entry.id, entry.score]));
|
|
1746
|
-
} else {
|
|
1747
|
-
context.warnings.push(`search_rerank_provider_invalid_response:${context.rerankExtension.providerName}:using_builtin`);
|
|
1748
|
-
}
|
|
1749
|
-
} catch {
|
|
1750
|
-
context.warnings.push(`search_rerank_provider_failed:${context.rerankExtension.providerName}:using_builtin`);
|
|
1751
|
-
}
|
|
1752
|
-
}
|
|
1753
|
-
if (!rerankScores) {
|
|
1754
|
-
try {
|
|
1755
|
-
rerankScores = await rerankCandidatesWithEmbeddings(context.provider, context.rerank.model, queryTrimmed, rerankCandidates, context.embeddingTimeoutMs);
|
|
1756
|
-
} catch {
|
|
1757
|
-
context.warnings.push("search_rerank_failed:using_hybrid_scores");
|
|
1758
|
-
}
|
|
1759
|
-
}
|
|
1760
|
-
if (rerankScores && rerankScores.size > 0) {
|
|
1761
|
-
const rerankedIds = new Set(rerankScores.keys());
|
|
1762
|
-
hybridHits = hybridHits.map((hit) => {
|
|
1763
|
-
const rerankScore = rerankScores.get(hit.item.id);
|
|
1764
|
-
if (rerankScore === void 0) {
|
|
1765
|
-
return hit;
|
|
1766
|
-
}
|
|
1767
|
-
const matchedFields = new Set(hit.matched_fields);
|
|
1768
|
-
matchedFields.add("rerank");
|
|
1769
|
-
return {
|
|
1770
|
-
...hit,
|
|
1771
|
-
score: rerankScore,
|
|
1772
|
-
matched_fields: [...matchedFields].sort((left, right) => left.localeCompare(right))
|
|
1773
|
-
};
|
|
1774
|
-
});
|
|
1775
|
-
hybridHits.sort((left, right) => {
|
|
1776
|
-
const leftWasReranked = rerankedIds.has(left.item.id);
|
|
1777
|
-
const rightWasReranked = rerankedIds.has(right.item.id);
|
|
1778
|
-
if (leftWasReranked !== rightWasReranked) {
|
|
1779
|
-
return leftWasReranked ? -1 : 1;
|
|
1780
|
-
}
|
|
1781
|
-
if (left.score !== right.score) {
|
|
1782
|
-
return right.score - left.score;
|
|
1783
|
-
}
|
|
1784
|
-
return left.item.id.localeCompare(right.item.id);
|
|
1785
|
-
});
|
|
1786
|
-
}
|
|
1787
|
-
}
|
|
1822
|
+
const hybridHits = await applyHybridRerank(context, queryTrimmed, combineHybridHits(filteredById, semanticScores, context.keywordHits, context.hybridSemanticWeight), filteredById);
|
|
1788
1823
|
return {
|
|
1789
1824
|
// GH-281: applied LAST (after any rerank reordering) so an exact full-ID /
|
|
1790
1825
|
// short-ID keyword match always ranks #1 in hybrid mode regardless of the
|
|
@@ -1895,7 +1930,15 @@ function projectSearchHits(hits, projection) {
|
|
|
1895
1930
|
return projected;
|
|
1896
1931
|
});
|
|
1897
1932
|
}
|
|
1898
|
-
|
|
1933
|
+
function resolveQueryExpansionExtension(queryExpansion) {
|
|
1934
|
+
const provider = resolveExtensionSearchProviderByName(queryExpansion.provider ?? void 0);
|
|
1935
|
+
return provider?.queryExpansion ? { providerName: provider.providerName, expand: provider.queryExpansion } : null;
|
|
1936
|
+
}
|
|
1937
|
+
function resolveRerankExtension(settings) {
|
|
1938
|
+
const provider = resolveExtensionSearchProviderByName(toOptionalNonEmptyString(settings.search?.provider));
|
|
1939
|
+
return provider?.rerank ? { providerName: provider.providerName, rerank: provider.rerank } : null;
|
|
1940
|
+
}
|
|
1941
|
+
function prepareSearchInput(rawQuery, rawOptions) {
|
|
1899
1942
|
const inlineWarnings = [];
|
|
1900
1943
|
const inlineParse = parseInlineQueryFilters(rawQuery);
|
|
1901
1944
|
const hasInlineFilters = Object.keys(inlineParse.inlineFilters).length > 0;
|
|
@@ -1909,311 +1952,381 @@ async function runSearch(rawQuery, rawOptions, global2) {
|
|
|
1909
1952
|
}
|
|
1910
1953
|
const query = hasInlineFilters ? inlineParse.residualQuery : rawQuery;
|
|
1911
1954
|
const options = applyInlineQueryFilters(rawOptions, inlineParse.inlineFilters, inlineWarnings);
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1955
|
+
return {
|
|
1956
|
+
query,
|
|
1957
|
+
options,
|
|
1958
|
+
inlineWarnings,
|
|
1959
|
+
highlight: options.highlight === true,
|
|
1960
|
+
includeLinked: parseIncludeLinked(options.includeLinked),
|
|
1961
|
+
titleExact: parseTitleExact(options.titleExact),
|
|
1962
|
+
phraseExact: parsePhraseExact(options.phraseExact),
|
|
1963
|
+
matchMode: parseMatchMode(typeof options.matchMode === "string" ? options.matchMode : void 0),
|
|
1964
|
+
minScoreOverride: parseMinScoreOverride(options.minScore),
|
|
1965
|
+
countOnly: options.count === true,
|
|
1966
|
+
tokens: parseTokens(query),
|
|
1967
|
+
normalizedQuery: normalizeSearchPhrase(query),
|
|
1968
|
+
limit: parseLimit(options.limit),
|
|
1969
|
+
projection: parseProjectionConfig(options),
|
|
1970
|
+
modeWasExplicit: typeof options.mode === "string" && options.mode.trim().length > 0
|
|
1971
|
+
};
|
|
1972
|
+
}
|
|
1973
|
+
async function resolveSearchRuntimeContext(prepared, global2) {
|
|
1924
1974
|
const pmRoot = resolvePmRoot(process.cwd(), global2.path);
|
|
1925
1975
|
if (!await pathExists(getSettingsPath(pmRoot))) {
|
|
1926
1976
|
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
1927
1977
|
}
|
|
1928
1978
|
const storedSettings = await readSettings(pmRoot);
|
|
1929
|
-
const
|
|
1930
|
-
const settings = runtimeDefaultsResolution.settings;
|
|
1979
|
+
const settings = resolveSettingsWithSemanticRuntimeDefaults(storedSettings).settings;
|
|
1931
1980
|
const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
|
|
1932
1981
|
const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);
|
|
1933
|
-
validateSearchProjectionFields(projection, runtimeFieldRegistry);
|
|
1934
|
-
const runtimeFieldFilters = collectRuntimeFilterValues(options, runtimeFieldRegistry, "search");
|
|
1935
|
-
const statusFilter = parseStatusFilterCsv(typeof options.status === "string" ? options.status : void 0, statusRegistry, { strict: true });
|
|
1982
|
+
validateSearchProjectionFields(prepared.projection, runtimeFieldRegistry);
|
|
1983
|
+
const runtimeFieldFilters = collectRuntimeFilterValues(prepared.options, runtimeFieldRegistry, "search");
|
|
1936
1984
|
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
1937
|
-
const maxResults = resolveSearchMaxResults(settings);
|
|
1938
|
-
const scoreThreshold = minScoreOverride ?? resolveSearchScoreThreshold(settings);
|
|
1939
|
-
const semanticWeightProvided = options.semanticWeight !== void 0;
|
|
1940
|
-
const semanticWeightOverride = parseSemanticWeightOverride(options.semanticWeight);
|
|
1941
|
-
const hybridSemanticWeight = semanticWeightOverride ?? resolveHybridSemanticWeight(settings);
|
|
1942
|
-
const tuning = resolveSearchTuning(settings);
|
|
1943
1985
|
const providerResolution = resolveEmbeddingProviders(settings);
|
|
1944
1986
|
const vectorResolution = resolveVectorStores(settings);
|
|
1945
1987
|
const extensionSearchProvider = resolveExtensionSearchProvider(settings);
|
|
1946
1988
|
const extensionVectorAdapter = resolveExtensionVectorAdapter(settings);
|
|
1947
|
-
const
|
|
1948
|
-
configuredProvider: toOptionalNonEmptyString(settings.search?.provider),
|
|
1949
|
-
hasEmbeddingProvider: providerResolution.active !== null,
|
|
1950
|
-
hasExtensionSearchProvider: extensionSearchProvider !== null
|
|
1951
|
-
});
|
|
1989
|
+
const semanticWeightOverride = parseSemanticWeightOverride(prepared.options.semanticWeight);
|
|
1952
1990
|
const queryExpansion = resolveQueryExpansionConfig(settings, providerResolution.active?.name ?? null);
|
|
1953
1991
|
const rerank = resolveRerankConfig(settings, providerResolution.active?.model ?? toOptionalNonEmptyString(settings.search?.embedding_model) ?? "text-embedding-3-small");
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1992
|
+
return {
|
|
1993
|
+
pmRoot,
|
|
1994
|
+
settings,
|
|
1995
|
+
statusRegistry,
|
|
1996
|
+
runtimeFieldRegistry,
|
|
1997
|
+
runtimeFieldFilters,
|
|
1998
|
+
typeRegistry,
|
|
1999
|
+
maxResults: resolveSearchMaxResults(settings),
|
|
2000
|
+
scoreThreshold: prepared.minScoreOverride ?? resolveSearchScoreThreshold(settings),
|
|
2001
|
+
semanticWeightProvided: prepared.options.semanticWeight !== void 0,
|
|
2002
|
+
semanticWeightOverride,
|
|
2003
|
+
hybridSemanticWeight: semanticWeightOverride ?? resolveHybridSemanticWeight(settings),
|
|
2004
|
+
tuning: resolveSearchTuning(settings),
|
|
2005
|
+
providerResolution,
|
|
2006
|
+
vectorResolution,
|
|
2007
|
+
extensionSearchProvider,
|
|
2008
|
+
extensionVectorAdapter,
|
|
2009
|
+
bm25Mode: resolveBuiltInBm25Mode({
|
|
2010
|
+
configuredProvider: toOptionalNonEmptyString(settings.search?.provider),
|
|
2011
|
+
hasEmbeddingProvider: providerResolution.active !== null,
|
|
2012
|
+
hasExtensionSearchProvider: extensionSearchProvider !== null
|
|
2013
|
+
}),
|
|
2014
|
+
queryExpansion,
|
|
2015
|
+
queryExpansionExtension: resolveQueryExpansionExtension(queryExpansion),
|
|
2016
|
+
rerank,
|
|
2017
|
+
rerankExtension: resolveRerankExtension(settings),
|
|
2018
|
+
effectiveMode: parseMode(prepared.options.mode, {
|
|
2019
|
+
hasProvider: providerResolution.active !== null || extensionSearchProvider !== null,
|
|
2020
|
+
hasVectorStore: vectorResolution.active !== null || extensionVectorAdapter !== null
|
|
2021
|
+
})
|
|
2022
|
+
};
|
|
2023
|
+
}
|
|
2024
|
+
async function loadFilteredSearchCorpus(prepared, runtime) {
|
|
2025
|
+
const loadedDocuments = await loadDocuments(runtime.pmRoot, runtime.settings.item_format ?? "toon", runtime.typeRegistry.type_to_folder, runtime.settings.schema);
|
|
2026
|
+
const statusFilter = parseStatusFilterCsv(typeof prepared.options.status === "string" ? prepared.options.status : void 0, runtime.statusRegistry, { strict: true });
|
|
2027
|
+
const lifecycleClassifier = lifecycleClassifierFromStatusRegistry(runtime.statusRegistry);
|
|
2028
|
+
const metadataFilteredDocuments = applyFilters(loadedDocuments.documents, prepared.options, runtime.typeRegistry, runtime.runtimeFieldFilters, statusFilter, lifecycleClassifier);
|
|
2029
|
+
return {
|
|
2030
|
+
warnings: loadedDocuments.warnings,
|
|
2031
|
+
allDocuments: loadedDocuments.documents,
|
|
2032
|
+
filteredDocuments: applyExactQueryFilters(metadataFilteredDocuments, prepared.normalizedQuery, {
|
|
2033
|
+
titleExact: prepared.titleExact,
|
|
2034
|
+
phraseExact: prepared.phraseExact || prepared.matchMode === "exact"
|
|
2035
|
+
})
|
|
2036
|
+
};
|
|
2037
|
+
}
|
|
2038
|
+
async function collectLinkedCorpusById(includeLinked, effectiveMode, filteredDocuments) {
|
|
2039
|
+
const linkedCorpusById = /* @__PURE__ */ new Map();
|
|
2040
|
+
if (!includeLinked || effectiveMode !== "keyword" && effectiveMode !== "hybrid") {
|
|
2041
|
+
return linkedCorpusById;
|
|
1966
2042
|
}
|
|
1967
|
-
|
|
1968
|
-
|
|
2043
|
+
const projectRoot = process.cwd();
|
|
2044
|
+
const linkedCorpusRoots = await resolveLinkedCorpusRoots(projectRoot, resolveGlobalPmRoot(projectRoot));
|
|
2045
|
+
const linkedCorpusEntries = await Promise.all(filteredDocuments.map(async (document) => [document.metadata.id, await loadLinkedCorpus(document, linkedCorpusRoots)]));
|
|
2046
|
+
for (const [id, corpus] of linkedCorpusEntries) {
|
|
2047
|
+
linkedCorpusById.set(id, corpus);
|
|
2048
|
+
}
|
|
2049
|
+
return linkedCorpusById;
|
|
2050
|
+
}
|
|
2051
|
+
async function computeKeywordSearchHits(prepared, runtime, filteredDocuments) {
|
|
2052
|
+
const linkedCorpusById = await collectLinkedCorpusById(prepared.includeLinked, runtime.effectiveMode, filteredDocuments);
|
|
2053
|
+
const applyCoverageBonus = prepared.matchMode === "or";
|
|
2054
|
+
return filteredDocuments.map((document) => buildHybridLexicalScore(document, prepared.tokens, prepared.normalizedQuery, prepared.includeLinked, linkedCorpusById, runtime.tuning, runtime.settings.id_prefix, applyCoverageBonus)).filter((entry) => entry !== null).filter((entry) => prepared.matchMode !== "and" || entry.matched_all_terms === true);
|
|
2055
|
+
}
|
|
2056
|
+
function buildEmptySearchResultFromContext(response, countOnly) {
|
|
2057
|
+
return emptySearchResult(response.query, response.effectiveMode, response.matchMode, response.options, response.includeLinked, response.scoreThreshold, response.hybridSemanticWeight, response.queryExpansion, response.rerank, response.projection, response.warnings, response.runtimeFieldFilters, countOnly);
|
|
2058
|
+
}
|
|
2059
|
+
async function executeBuiltInBm25Search(prepared, runtime, filteredDocuments, keywordHits, warnings) {
|
|
2060
|
+
if (runtime.bm25Mode === null || runtime.effectiveMode === "keyword") {
|
|
2061
|
+
return null;
|
|
1969
2062
|
}
|
|
1970
|
-
const
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
2063
|
+
const hits = computeBuiltInBm25Hits({
|
|
2064
|
+
requestedMode: runtime.effectiveMode,
|
|
2065
|
+
query: prepared.query,
|
|
2066
|
+
filteredDocuments,
|
|
2067
|
+
keywordHits,
|
|
2068
|
+
corpusFields: resolveSearchCorpusFields(runtime.settings),
|
|
2069
|
+
bm25Params: resolveBm25Params(runtime.settings),
|
|
2070
|
+
hybridSemanticWeight: runtime.hybridSemanticWeight
|
|
1978
2071
|
});
|
|
1979
|
-
if (
|
|
1980
|
-
|
|
2072
|
+
if (runtime.bm25Mode === "auto-fallback") {
|
|
2073
|
+
warnings.push(`search_${runtime.effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`);
|
|
1981
2074
|
}
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
if (
|
|
1986
|
-
|
|
1987
|
-
const linkedCorpusEntries = await Promise.all(filteredDocuments.map(async (document) => [document.metadata.id, await loadLinkedCorpus(document, linkedCorpusRoots)]));
|
|
1988
|
-
for (const [id, corpus] of linkedCorpusEntries) {
|
|
1989
|
-
linkedCorpusById.set(id, corpus);
|
|
1990
|
-
}
|
|
2075
|
+
return hits;
|
|
2076
|
+
}
|
|
2077
|
+
async function executeExtensionSearchProvider(prepared, runtime, filteredDocuments, filteredById) {
|
|
2078
|
+
if (!runtime.extensionSearchProvider) {
|
|
2079
|
+
return null;
|
|
1991
2080
|
}
|
|
1992
|
-
const
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
let hits = keywordHits;
|
|
2007
|
-
const useBuiltInBm25 = bm25Mode !== null && effectiveMode !== "keyword";
|
|
2008
|
-
if (bm25Mode !== null && effectiveMode !== "keyword") {
|
|
2009
|
-
hits = computeBuiltInBm25Hits({
|
|
2010
|
-
requestedMode: effectiveMode,
|
|
2011
|
-
query,
|
|
2012
|
-
filteredDocuments,
|
|
2013
|
-
keywordHits,
|
|
2014
|
-
corpusFields: resolveSearchCorpusFields(settings),
|
|
2015
|
-
bm25Params: resolveBm25Params(settings),
|
|
2016
|
-
hybridSemanticWeight
|
|
2017
|
-
});
|
|
2018
|
-
if (bm25Mode === "auto-fallback") {
|
|
2019
|
-
warnings.push(`search_${effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`);
|
|
2081
|
+
const canUseBuiltInSemantic = runtime.providerResolution.active !== null && (runtime.vectorResolution.active !== null || runtime.extensionVectorAdapter !== null);
|
|
2082
|
+
try {
|
|
2083
|
+
const providerResponse = await Promise.resolve(runtime.extensionSearchProvider.query({
|
|
2084
|
+
query: prepared.query,
|
|
2085
|
+
mode: runtime.effectiveMode,
|
|
2086
|
+
tokens: prepared.tokens,
|
|
2087
|
+
options: prepared.options,
|
|
2088
|
+
settings: runtime.settings,
|
|
2089
|
+
documents: filteredDocuments
|
|
2090
|
+
}));
|
|
2091
|
+
return normalizeExtensionProviderHits(runtime.extensionSearchProvider.providerName, providerResponse, filteredById);
|
|
2092
|
+
} catch (error) {
|
|
2093
|
+
if (!canUseBuiltInSemantic) {
|
|
2094
|
+
throw new PmCliError(`Extension search provider "${runtime.extensionSearchProvider.providerName}" failed: ${error instanceof Error ? error.message : String(error)}`, EXIT_CODE.GENERIC_FAILURE);
|
|
2020
2095
|
}
|
|
2096
|
+
return null;
|
|
2021
2097
|
}
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
}
|
|
2027
|
-
try {
|
|
2028
|
-
if (!extensionSearchProvider) {
|
|
2029
|
-
requireSemanticDependencies(effectiveMode, providerResolution, vectorResolution, extensionVectorAdapter !== null);
|
|
2030
|
-
}
|
|
2031
|
-
if (filteredDocuments.length === 0 || limit === 0) {
|
|
2032
|
-
return emptySearchResult(query, effectiveMode, matchMode, options, includeLinked, scoreThreshold, hybridSemanticWeight, queryExpansion, rerank, projection, warnings, runtimeFieldFilters, countOnly);
|
|
2033
|
-
}
|
|
2034
|
-
const filteredById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
|
|
2035
|
-
const canUseBuiltInSemantic = providerResolution.active !== null && (vectorResolution.active !== null || extensionVectorAdapter !== null);
|
|
2036
|
-
if (extensionSearchProvider) {
|
|
2037
|
-
try {
|
|
2038
|
-
const providerResponse = await Promise.resolve(extensionSearchProvider.query({
|
|
2039
|
-
query,
|
|
2040
|
-
mode: effectiveMode,
|
|
2041
|
-
tokens,
|
|
2042
|
-
options,
|
|
2043
|
-
settings,
|
|
2044
|
-
documents: filteredDocuments
|
|
2045
|
-
}));
|
|
2046
|
-
hits = normalizeExtensionProviderHits(extensionSearchProvider.providerName, providerResponse, filteredById);
|
|
2047
|
-
} catch (error) {
|
|
2048
|
-
if (!canUseBuiltInSemantic) {
|
|
2049
|
-
throw new PmCliError(`Extension search provider "${extensionSearchProvider.providerName}" failed: ${error instanceof Error ? error.message : String(error)}`, EXIT_CODE.GENERIC_FAILURE);
|
|
2050
|
-
}
|
|
2051
|
-
}
|
|
2052
|
-
}
|
|
2053
|
-
if (hits === keywordHits) {
|
|
2054
|
-
const implicitHybridMode = !modeWasExplicit && effectiveMode === "hybrid";
|
|
2055
|
-
const { provider, vectorStore } = requireSemanticDependencies(effectiveMode, providerResolution, vectorResolution, extensionVectorAdapter !== null);
|
|
2056
|
-
const semanticResult = await computeSemanticOrHybridHits({
|
|
2057
|
-
requestedMode: effectiveMode,
|
|
2058
|
-
query,
|
|
2059
|
-
filteredDocuments,
|
|
2060
|
-
keywordHits,
|
|
2061
|
-
hybridSemanticWeight,
|
|
2062
|
-
limit,
|
|
2063
|
-
maxResults,
|
|
2064
|
-
provider,
|
|
2065
|
-
vectorStore,
|
|
2066
|
-
extensionVectorAdapter,
|
|
2067
|
-
queryExpansion,
|
|
2068
|
-
queryExpansionExtension,
|
|
2069
|
-
rerank,
|
|
2070
|
-
rerankExtension,
|
|
2071
|
-
warnings,
|
|
2072
|
-
settings,
|
|
2073
|
-
/* c8 ignore next 5 -- reserved for future implicit-hybrid auto-mode; current parseMode defaults keyword when mode is omitted */
|
|
2074
|
-
...implicitHybridMode ? {
|
|
2075
|
-
embeddingTimeoutMs: IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS,
|
|
2076
|
-
vectorQueryTimeoutMs: IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS
|
|
2077
|
-
} : {}
|
|
2078
|
-
});
|
|
2079
|
-
hits = semanticResult.hits;
|
|
2080
|
-
if (semanticResult.vectorMatchCount === 0) {
|
|
2081
|
-
if (effectiveMode === "semantic") {
|
|
2082
|
-
hits = keywordHits;
|
|
2083
|
-
}
|
|
2084
|
-
warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);
|
|
2085
|
-
}
|
|
2086
|
-
}
|
|
2087
|
-
} catch (error) {
|
|
2088
|
-
const fallbackWarning = modeWasExplicit ? buildExplicitSemanticFallbackWarning(effectiveMode, error) : buildImplicitSemanticFallbackWarning(error);
|
|
2089
|
-
effectiveMode = "keyword";
|
|
2090
|
-
hits = keywordHits;
|
|
2091
|
-
warnings.push(fallbackWarning);
|
|
2092
|
-
}
|
|
2098
|
+
}
|
|
2099
|
+
function maybeApplyNoVectorFallback(effectiveMode, semanticResult, keywordHits, warnings) {
|
|
2100
|
+
if (semanticResult.vectorMatchCount > 0) {
|
|
2101
|
+
return semanticResult.hits;
|
|
2093
2102
|
}
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
const
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2103
|
+
warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);
|
|
2104
|
+
return effectiveMode === "semantic" ? keywordHits : semanticResult.hits;
|
|
2105
|
+
}
|
|
2106
|
+
async function prepareBuiltInSemanticSearch(runtime, effectiveMode, filteredDocuments, warnings, modeWasExplicit) {
|
|
2107
|
+
const builtInSemanticWillRun = !runtime.extensionSearchProvider && runtime.providerResolution.active !== null && (runtime.vectorResolution.active !== null || runtime.extensionVectorAdapter !== null);
|
|
2108
|
+
if (modeWasExplicit && builtInSemanticWillRun) {
|
|
2109
|
+
await maybeEmitVectorIndexStaleWarning(runtime.pmRoot, filteredDocuments, warnings);
|
|
2110
|
+
}
|
|
2111
|
+
if (!runtime.extensionSearchProvider) {
|
|
2112
|
+
requireSemanticDependencies(effectiveMode, runtime.providerResolution, runtime.vectorResolution, runtime.extensionVectorAdapter !== null);
|
|
2113
|
+
}
|
|
2114
|
+
}
|
|
2115
|
+
async function executeSemanticSearch(input) {
|
|
2116
|
+
const { prepared, runtime, filteredDocuments, keywordHits, warnings, modeWasExplicit } = input;
|
|
2117
|
+
let hits = keywordHits;
|
|
2118
|
+
const bm25Hits = await executeBuiltInBm25Search(prepared, runtime, filteredDocuments, keywordHits, warnings);
|
|
2119
|
+
const semanticMode = runtime.effectiveMode;
|
|
2120
|
+
if (bm25Hits !== null || semanticMode === "keyword") {
|
|
2121
|
+
return { effectiveMode: runtime.effectiveMode, hits: bm25Hits ?? hits };
|
|
2122
|
+
}
|
|
2123
|
+
try {
|
|
2124
|
+
await prepareBuiltInSemanticSearch(runtime, semanticMode, filteredDocuments, warnings, modeWasExplicit);
|
|
2125
|
+
if (filteredDocuments.length === 0 || prepared.limit === 0) {
|
|
2126
|
+
return { effectiveMode: runtime.effectiveMode, hits: [] };
|
|
2127
|
+
}
|
|
2128
|
+
const filteredById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
|
|
2129
|
+
hits = await executeExtensionSearchProvider(prepared, runtime, filteredDocuments, filteredById) ?? hits;
|
|
2130
|
+
if (hits === keywordHits) {
|
|
2131
|
+
const { provider, vectorStore } = requireSemanticDependencies(semanticMode, runtime.providerResolution, runtime.vectorResolution, runtime.extensionVectorAdapter !== null);
|
|
2132
|
+
const semanticResult = await computeSemanticOrHybridHits({
|
|
2133
|
+
requestedMode: semanticMode,
|
|
2134
|
+
query: prepared.query,
|
|
2135
|
+
filteredDocuments,
|
|
2136
|
+
keywordHits,
|
|
2137
|
+
hybridSemanticWeight: runtime.hybridSemanticWeight,
|
|
2138
|
+
limit: prepared.limit,
|
|
2139
|
+
maxResults: runtime.maxResults,
|
|
2140
|
+
provider,
|
|
2141
|
+
vectorStore,
|
|
2142
|
+
extensionVectorAdapter: runtime.extensionVectorAdapter,
|
|
2143
|
+
queryExpansion: runtime.queryExpansion,
|
|
2144
|
+
queryExpansionExtension: runtime.queryExpansionExtension,
|
|
2145
|
+
rerank: runtime.rerank,
|
|
2146
|
+
rerankExtension: runtime.rerankExtension,
|
|
2147
|
+
warnings,
|
|
2148
|
+
settings: runtime.settings
|
|
2113
2149
|
});
|
|
2114
|
-
|
|
2115
|
-
query: query.trim(),
|
|
2116
|
-
mode: effectiveMode,
|
|
2117
|
-
items: [],
|
|
2118
|
-
count: total,
|
|
2119
|
-
total,
|
|
2120
|
-
count_only: true,
|
|
2121
|
-
filters: compactFilters,
|
|
2122
|
-
...warnings.length > 0 ? { warnings } : {}
|
|
2123
|
-
};
|
|
2150
|
+
hits = maybeApplyNoVectorFallback(semanticMode, semanticResult, keywordHits, warnings);
|
|
2124
2151
|
}
|
|
2125
|
-
return {
|
|
2126
|
-
|
|
2127
|
-
|
|
2152
|
+
return { effectiveMode: runtime.effectiveMode, hits };
|
|
2153
|
+
} catch (error) {
|
|
2154
|
+
warnings.push(buildExplicitSemanticFallbackWarning(runtime.effectiveMode, error));
|
|
2155
|
+
return { effectiveMode: "keyword", hits: keywordHits };
|
|
2156
|
+
}
|
|
2157
|
+
}
|
|
2158
|
+
function buildCountOnlySearchResult(response, total) {
|
|
2159
|
+
if (response.projection.mode === "compact" && response.options.compact === true) {
|
|
2160
|
+
return withSearchWarnings({
|
|
2161
|
+
query: response.query.trim(),
|
|
2162
|
+
mode: response.effectiveMode,
|
|
2128
2163
|
items: [],
|
|
2129
2164
|
count: total,
|
|
2130
2165
|
total,
|
|
2131
2166
|
count_only: true,
|
|
2132
|
-
filters:
|
|
2133
|
-
effectiveMode,
|
|
2134
|
-
matchMode,
|
|
2135
|
-
options,
|
|
2136
|
-
includeLinked,
|
|
2137
|
-
titleExact,
|
|
2138
|
-
phraseExact,
|
|
2139
|
-
scoreThreshold,
|
|
2140
|
-
hybridSemanticWeight,
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2167
|
+
filters: buildCompactSearchFilterSummary({
|
|
2168
|
+
mode: response.effectiveMode,
|
|
2169
|
+
matchMode: response.matchMode,
|
|
2170
|
+
options: response.options,
|
|
2171
|
+
includeLinked: response.includeLinked,
|
|
2172
|
+
titleExact: response.titleExact,
|
|
2173
|
+
phraseExact: response.phraseExact,
|
|
2174
|
+
scoreThreshold: response.scoreThreshold,
|
|
2175
|
+
hybridSemanticWeight: response.hybridSemanticWeight,
|
|
2176
|
+
runtimeFieldFilters: response.runtimeFieldFilters
|
|
2177
|
+
})
|
|
2178
|
+
}, response.warnings);
|
|
2179
|
+
}
|
|
2180
|
+
const projectionFields = response.projection.mode === "full" ? null : [...response.projection.fields];
|
|
2181
|
+
return withSearchWarnings({
|
|
2182
|
+
query: response.query.trim(),
|
|
2183
|
+
mode: response.effectiveMode,
|
|
2184
|
+
items: [],
|
|
2185
|
+
count: total,
|
|
2186
|
+
total,
|
|
2187
|
+
count_only: true,
|
|
2188
|
+
filters: buildVerboseSearchFilters({
|
|
2189
|
+
effectiveMode: response.effectiveMode,
|
|
2190
|
+
matchMode: response.matchMode,
|
|
2191
|
+
options: response.options,
|
|
2192
|
+
includeLinked: response.includeLinked,
|
|
2193
|
+
titleExact: response.titleExact,
|
|
2194
|
+
phraseExact: response.phraseExact,
|
|
2195
|
+
scoreThreshold: response.scoreThreshold,
|
|
2196
|
+
hybridSemanticWeight: response.hybridSemanticWeight,
|
|
2197
|
+
queryExpansion: response.queryExpansion,
|
|
2198
|
+
rerank: response.rerank,
|
|
2199
|
+
runtimeFieldFilters: response.runtimeFieldFilters
|
|
2200
|
+
}),
|
|
2201
|
+
projection: {
|
|
2202
|
+
mode: response.projection.mode,
|
|
2203
|
+
fields: projectionFields
|
|
2204
|
+
},
|
|
2205
|
+
now: nowIso()
|
|
2206
|
+
}, response.warnings);
|
|
2207
|
+
}
|
|
2208
|
+
function withSearchWarnings(result, warnings) {
|
|
2209
|
+
if (warnings.length === 0) {
|
|
2210
|
+
return result;
|
|
2152
2211
|
}
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
...hit,
|
|
2159
|
-
highlights: buildHitHighlights(documentById.get(hit.item.id), hit.matched_fields, tokens)
|
|
2160
|
-
}));
|
|
2161
|
-
if (projection.mode !== "full" && !projection.fields.includes("highlights")) {
|
|
2162
|
-
effectiveProjection = { mode: projection.mode, fields: [...projection.fields, "highlights"] };
|
|
2163
|
-
}
|
|
2212
|
+
return { ...result, warnings };
|
|
2213
|
+
}
|
|
2214
|
+
function attachSearchHighlights(prepared, filteredDocuments, limited) {
|
|
2215
|
+
if (!prepared.highlight) {
|
|
2216
|
+
return { hits: limited, projection: prepared.projection };
|
|
2164
2217
|
}
|
|
2165
|
-
const
|
|
2166
|
-
const
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
query: query.trim(),
|
|
2182
|
-
mode: effectiveMode,
|
|
2218
|
+
const documentById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
|
|
2219
|
+
const hits = limited.map((hit) => ({
|
|
2220
|
+
...hit,
|
|
2221
|
+
highlights: buildHitHighlights(documentById.get(hit.item.id), hit.matched_fields, prepared.tokens)
|
|
2222
|
+
}));
|
|
2223
|
+
if (prepared.projection.mode === "full" || prepared.projection.fields.includes("highlights")) {
|
|
2224
|
+
return { hits, projection: prepared.projection };
|
|
2225
|
+
}
|
|
2226
|
+
return { hits, projection: { mode: prepared.projection.mode, fields: [...prepared.projection.fields, "highlights"] } };
|
|
2227
|
+
}
|
|
2228
|
+
function buildSearchResultForHits(response, projectedItems, total, limitedCount, effectiveProjection) {
|
|
2229
|
+
const truncationExtras = limitedCount < total ? { total } : {};
|
|
2230
|
+
if (response.projection.mode === "compact" && response.options.compact === true) {
|
|
2231
|
+
return withSearchWarnings({
|
|
2232
|
+
query: response.query.trim(),
|
|
2233
|
+
mode: response.effectiveMode,
|
|
2183
2234
|
items: projectedItems,
|
|
2184
2235
|
count: projectedItems.length,
|
|
2185
2236
|
...truncationExtras,
|
|
2186
|
-
filters:
|
|
2187
|
-
|
|
2188
|
-
|
|
2237
|
+
filters: buildCompactSearchFilterSummary({
|
|
2238
|
+
mode: response.effectiveMode,
|
|
2239
|
+
matchMode: response.matchMode,
|
|
2240
|
+
options: response.options,
|
|
2241
|
+
includeLinked: response.includeLinked,
|
|
2242
|
+
titleExact: response.titleExact,
|
|
2243
|
+
phraseExact: response.phraseExact,
|
|
2244
|
+
scoreThreshold: response.scoreThreshold,
|
|
2245
|
+
hybridSemanticWeight: response.hybridSemanticWeight,
|
|
2246
|
+
runtimeFieldFilters: response.runtimeFieldFilters
|
|
2247
|
+
})
|
|
2248
|
+
}, response.warnings);
|
|
2189
2249
|
}
|
|
2250
|
+
const finalProjectionFields = effectiveProjection.mode === "full" ? null : [...effectiveProjection.fields];
|
|
2190
2251
|
return {
|
|
2191
|
-
query: query.trim(),
|
|
2192
|
-
mode: effectiveMode,
|
|
2252
|
+
query: response.query.trim(),
|
|
2253
|
+
mode: response.effectiveMode,
|
|
2193
2254
|
items: projectedItems,
|
|
2194
2255
|
count: projectedItems.length,
|
|
2195
2256
|
...truncationExtras,
|
|
2196
2257
|
filters: buildVerboseSearchFilters({
|
|
2197
|
-
effectiveMode,
|
|
2198
|
-
matchMode,
|
|
2199
|
-
options,
|
|
2200
|
-
includeLinked,
|
|
2201
|
-
titleExact,
|
|
2202
|
-
phraseExact,
|
|
2203
|
-
scoreThreshold,
|
|
2204
|
-
hybridSemanticWeight,
|
|
2205
|
-
queryExpansion,
|
|
2206
|
-
rerank,
|
|
2207
|
-
runtimeFieldFilters
|
|
2258
|
+
effectiveMode: response.effectiveMode,
|
|
2259
|
+
matchMode: response.matchMode,
|
|
2260
|
+
options: response.options,
|
|
2261
|
+
includeLinked: response.includeLinked,
|
|
2262
|
+
titleExact: response.titleExact,
|
|
2263
|
+
phraseExact: response.phraseExact,
|
|
2264
|
+
scoreThreshold: response.scoreThreshold,
|
|
2265
|
+
hybridSemanticWeight: response.hybridSemanticWeight,
|
|
2266
|
+
queryExpansion: response.queryExpansion,
|
|
2267
|
+
rerank: response.rerank,
|
|
2268
|
+
runtimeFieldFilters: response.runtimeFieldFilters
|
|
2208
2269
|
}),
|
|
2209
2270
|
projection: {
|
|
2210
2271
|
mode: effectiveProjection.mode,
|
|
2211
2272
|
fields: finalProjectionFields
|
|
2212
2273
|
},
|
|
2213
2274
|
now: nowIso(),
|
|
2214
|
-
...warnings.length > 0 ? { warnings } : {}
|
|
2275
|
+
...response.warnings.length > 0 ? { warnings: response.warnings } : {}
|
|
2215
2276
|
};
|
|
2216
2277
|
}
|
|
2278
|
+
async function runSearch(rawQuery, rawOptions, global2) {
|
|
2279
|
+
const prepared = prepareSearchInput(rawQuery, rawOptions);
|
|
2280
|
+
const runtime = await resolveSearchRuntimeContext(prepared, global2);
|
|
2281
|
+
const corpus = await loadFilteredSearchCorpus(prepared, runtime);
|
|
2282
|
+
const warnings = corpus.warnings;
|
|
2283
|
+
warnings.push(...prepared.inlineWarnings);
|
|
2284
|
+
if (runtime.effectiveMode === "hybrid" && runtime.semanticWeightProvided && runtime.semanticWeightOverride === void 0) {
|
|
2285
|
+
warnings.push("search_hybrid_semantic_weight_override_invalid:using_settings_default");
|
|
2286
|
+
}
|
|
2287
|
+
const responseBase = {
|
|
2288
|
+
query: prepared.query,
|
|
2289
|
+
matchMode: prepared.matchMode,
|
|
2290
|
+
options: prepared.options,
|
|
2291
|
+
includeLinked: prepared.includeLinked,
|
|
2292
|
+
titleExact: prepared.titleExact,
|
|
2293
|
+
phraseExact: prepared.phraseExact,
|
|
2294
|
+
scoreThreshold: runtime.scoreThreshold,
|
|
2295
|
+
hybridSemanticWeight: runtime.hybridSemanticWeight,
|
|
2296
|
+
queryExpansion: runtime.queryExpansion,
|
|
2297
|
+
rerank: runtime.rerank,
|
|
2298
|
+
projection: prepared.projection,
|
|
2299
|
+
warnings,
|
|
2300
|
+
runtimeFieldFilters: runtime.runtimeFieldFilters
|
|
2301
|
+
};
|
|
2302
|
+
if (runtime.effectiveMode === "keyword" && (corpus.filteredDocuments.length === 0 || prepared.limit === 0)) {
|
|
2303
|
+
return buildEmptySearchResultFromContext({ ...responseBase, effectiveMode: runtime.effectiveMode }, prepared.countOnly);
|
|
2304
|
+
}
|
|
2305
|
+
const keywordHits = await computeKeywordSearchHits(prepared, runtime, corpus.filteredDocuments);
|
|
2306
|
+
const modeResult = await executeSemanticSearch({
|
|
2307
|
+
prepared,
|
|
2308
|
+
runtime,
|
|
2309
|
+
filteredDocuments: corpus.filteredDocuments,
|
|
2310
|
+
keywordHits,
|
|
2311
|
+
warnings,
|
|
2312
|
+
modeWasExplicit: prepared.modeWasExplicit
|
|
2313
|
+
});
|
|
2314
|
+
if (modeResult.effectiveMode !== "keyword" && modeResult.hits.length === 0 && (corpus.filteredDocuments.length === 0 || prepared.limit === 0)) {
|
|
2315
|
+
return buildEmptySearchResultFromContext({ ...responseBase, effectiveMode: modeResult.effectiveMode }, prepared.countOnly);
|
|
2316
|
+
}
|
|
2317
|
+
const thresholded = modeResult.hits.filter((entry) => entry.exact_id_match === true || entry.score >= runtime.scoreThreshold);
|
|
2318
|
+
const sorted = sortHits(thresholded, runtime.statusRegistry);
|
|
2319
|
+
const total = sorted.length;
|
|
2320
|
+
const resolvedLimit = prepared.limit ?? runtime.maxResults;
|
|
2321
|
+
const limited = sorted.slice(0, resolvedLimit);
|
|
2322
|
+
const response = { ...responseBase, effectiveMode: modeResult.effectiveMode };
|
|
2323
|
+
if (prepared.countOnly) {
|
|
2324
|
+
return buildCountOnlySearchResult(response, total);
|
|
2325
|
+
}
|
|
2326
|
+
const { hits: projectedHits, projection: effectiveProjection } = attachSearchHighlights(prepared, corpus.filteredDocuments, limited);
|
|
2327
|
+
const projectedItems = projectSearchHits(projectedHits, effectiveProjection);
|
|
2328
|
+
return buildSearchResultForHits(response, projectedItems, total, limited.length, effectiveProjection);
|
|
2329
|
+
}
|
|
2217
2330
|
|
|
2218
2331
|
export {
|
|
2219
2332
|
collectErrorCauseCodes,
|
|
@@ -2225,4 +2338,4 @@ export {
|
|
|
2225
2338
|
resolveSearchTuning,
|
|
2226
2339
|
runSearch
|
|
2227
2340
|
};
|
|
2228
|
-
//# sourceMappingURL=chunk-
|
|
2341
|
+
//# sourceMappingURL=chunk-6ZMBJRDJ.js.map
|