@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="02364b53-8625-5d05-90d9-1234e6d63964")}catch(e){}}();
|
|
3
3
|
import {
|
|
4
4
|
collectStaleVectorizationIds
|
|
5
5
|
} from "./chunk-ROGZTCCB.js";
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
resolveSearchCorpusFields,
|
|
16
16
|
resolveSettingsWithSemanticRuntimeDefaults,
|
|
17
17
|
resolveVectorStores
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-TPOFWBMY.js";
|
|
19
19
|
import {
|
|
20
20
|
applyFilterValueEcho,
|
|
21
21
|
buildContentFilterEcho,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
parseStatusFilterCsv,
|
|
27
27
|
resolveContentFieldFilters,
|
|
28
28
|
resolveMissingMetadataFilters
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-Q6K2OACU.js";
|
|
30
30
|
import {
|
|
31
31
|
hasContentFieldFilter,
|
|
32
32
|
itemMatchesContentFilters
|
|
@@ -35,27 +35,27 @@ import {
|
|
|
35
35
|
hasMissingMetadataFilter,
|
|
36
36
|
itemMatchesMissingMetadata,
|
|
37
37
|
lifecycleClassifierFromStatusRegistry
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-EMPGXBUF.js";
|
|
39
39
|
import {
|
|
40
40
|
parseLimit,
|
|
41
41
|
parsePriority,
|
|
42
42
|
parseType
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-2CHRYUXL.js";
|
|
44
44
|
import {
|
|
45
45
|
collectRegisteredItemFieldNames,
|
|
46
46
|
listAllDocumentCandidatesCached,
|
|
47
47
|
listAllFrontMatter,
|
|
48
48
|
toItemRecord
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-NRZS637N.js";
|
|
50
50
|
import {
|
|
51
51
|
isTerminalStatus,
|
|
52
52
|
parseItemDocument
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-KN3URLKS.js";
|
|
54
54
|
import {
|
|
55
55
|
compareTimestampStrings,
|
|
56
56
|
nowIso,
|
|
57
57
|
resolveIsoOrRelative
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-K2VYLVX4.js";
|
|
59
59
|
import {
|
|
60
60
|
EXIT_CODE,
|
|
61
61
|
PmCliError,
|
|
@@ -75,7 +75,7 @@ import {
|
|
|
75
75
|
runActiveOnReadHooks,
|
|
76
76
|
toNonEmptyString,
|
|
77
77
|
toNonEmptyStringOrUndefined
|
|
78
|
-
} from "./chunk-
|
|
78
|
+
} from "./chunk-I66WE2HE.js";
|
|
79
79
|
|
|
80
80
|
// dist/cli/commands/search.js
|
|
81
81
|
import fs from "node:fs/promises";
|
|
@@ -499,8 +499,6 @@ var LONG_QUERY_PHRASE_MULTIPLIER = 6;
|
|
|
499
499
|
var ALL_TERMS_COVERAGE_BONUS = 40;
|
|
500
500
|
var EXACT_ID_MATCH_SCORE = 1e3;
|
|
501
501
|
var SHORT_ID_MATCH_SCORE = 900;
|
|
502
|
-
var IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS = 8e3;
|
|
503
|
-
var IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS = 8e3;
|
|
504
502
|
var HIGHLIGHT_OPEN = "\xAB";
|
|
505
503
|
var HIGHLIGHT_CLOSE = "\xBB";
|
|
506
504
|
var HIGHLIGHT_SNIPPET_RADIUS = 60;
|
|
@@ -565,20 +563,20 @@ function buildVerboseSearchFilters(params) {
|
|
|
565
563
|
return {
|
|
566
564
|
mode: effectiveMode,
|
|
567
565
|
match_mode: matchMode,
|
|
568
|
-
status: isStatusAllFilterInput(options.status) ? "all" : options.status
|
|
569
|
-
type: options.type
|
|
570
|
-
tag: options.tag
|
|
571
|
-
priority: options.priority
|
|
572
|
-
deadline_before: options.deadlineBefore
|
|
573
|
-
deadline_after: options.deadlineAfter
|
|
574
|
-
updated_after: options.updatedAfter
|
|
575
|
-
updated_before: options.updatedBefore
|
|
576
|
-
created_after: options.createdAfter
|
|
577
|
-
created_before: options.createdBefore
|
|
578
|
-
assignee: options.assignee
|
|
579
|
-
sprint: options.sprint
|
|
580
|
-
release: options.release
|
|
581
|
-
parent: options.parent
|
|
566
|
+
status: isStatusAllFilterInput(options.status) ? "all" : valueOrNull(options.status),
|
|
567
|
+
type: valueOrNull(options.type),
|
|
568
|
+
tag: valueOrNull(options.tag),
|
|
569
|
+
priority: valueOrNull(options.priority),
|
|
570
|
+
deadline_before: valueOrNull(options.deadlineBefore),
|
|
571
|
+
deadline_after: valueOrNull(options.deadlineAfter),
|
|
572
|
+
updated_after: valueOrNull(options.updatedAfter),
|
|
573
|
+
updated_before: valueOrNull(options.updatedBefore),
|
|
574
|
+
created_after: valueOrNull(options.createdAfter),
|
|
575
|
+
created_before: valueOrNull(options.createdBefore),
|
|
576
|
+
assignee: valueOrNull(options.assignee),
|
|
577
|
+
sprint: valueOrNull(options.sprint),
|
|
578
|
+
release: valueOrNull(options.release),
|
|
579
|
+
parent: valueOrNull(options.parent),
|
|
582
580
|
...buildGovernanceMissingFilterEcho(options),
|
|
583
581
|
...buildContentFilterEcho(options),
|
|
584
582
|
include_linked: includeLinked,
|
|
@@ -591,10 +589,13 @@ function buildVerboseSearchFilters(params) {
|
|
|
591
589
|
rerank_enabled: rerank.enabled,
|
|
592
590
|
rerank_model: rerank.model,
|
|
593
591
|
rerank_top_k: rerank.top_k,
|
|
594
|
-
limit: options.limit
|
|
592
|
+
limit: valueOrNull(options.limit),
|
|
595
593
|
runtime_filters: runtimeFieldFilters
|
|
596
594
|
};
|
|
597
595
|
}
|
|
596
|
+
function valueOrNull(value) {
|
|
597
|
+
return value ?? null;
|
|
598
|
+
}
|
|
598
599
|
function collectErrorCauseCodes(error) {
|
|
599
600
|
const codes = [];
|
|
600
601
|
let current = error;
|
|
@@ -619,16 +620,6 @@ function classifyImplicitSemanticFallbackReason(error) {
|
|
|
619
620
|
}
|
|
620
621
|
return "error";
|
|
621
622
|
}
|
|
622
|
-
function buildImplicitSemanticFallbackWarning(error) {
|
|
623
|
-
const reason = classifyImplicitSemanticFallbackReason(error);
|
|
624
|
-
if (reason === "timeout") {
|
|
625
|
-
return "search_implicit_semantic_fallback:timeout:using_keyword_mode";
|
|
626
|
-
}
|
|
627
|
-
if (reason === "connection") {
|
|
628
|
-
return "search_implicit_semantic_fallback:connection:using_keyword_mode";
|
|
629
|
-
}
|
|
630
|
-
return "search_implicit_semantic_fallback:error:using_keyword_mode";
|
|
631
|
-
}
|
|
632
623
|
function buildExplicitSemanticFallbackWarning(requestedMode, error) {
|
|
633
624
|
const reason = classifyImplicitSemanticFallbackReason(error);
|
|
634
625
|
return `search_${requestedMode}_fallback:${reason}:using_keyword_mode`;
|
|
@@ -760,7 +751,6 @@ var _testOnlySearchCommand = {
|
|
|
760
751
|
buildExplicitSemanticFallbackWarning,
|
|
761
752
|
buildCompactSearchFilterSummary,
|
|
762
753
|
buildHybridLexicalScore,
|
|
763
|
-
buildImplicitSemanticFallbackWarning,
|
|
764
754
|
buildRerankCorpus,
|
|
765
755
|
buildSemanticHits,
|
|
766
756
|
classifyImplicitSemanticFallbackReason,
|
|
@@ -935,6 +925,9 @@ function resolveSearchMetadataFilterSet(options, typeRegistry, statusFilter) {
|
|
|
935
925
|
};
|
|
936
926
|
}
|
|
937
927
|
function matchesScalarSearchFilters(item, filters) {
|
|
928
|
+
return matchesIdentitySearchFilters(item, filters) && matchesTimestampSearchFilters(item, filters) && matchesOwnerSearchFilters(item, filters);
|
|
929
|
+
}
|
|
930
|
+
function matchesIdentitySearchFilters(item, filters) {
|
|
938
931
|
if (filters.statusSet && !filters.statusSet.has(item.status))
|
|
939
932
|
return false;
|
|
940
933
|
if (filters.typeFilter && item.type !== filters.typeFilter)
|
|
@@ -943,6 +936,9 @@ function matchesScalarSearchFilters(item, filters) {
|
|
|
943
936
|
return false;
|
|
944
937
|
if (filters.priorityFilter !== void 0 && item.priority !== filters.priorityFilter)
|
|
945
938
|
return false;
|
|
939
|
+
return true;
|
|
940
|
+
}
|
|
941
|
+
function matchesTimestampSearchFilters(item, filters) {
|
|
946
942
|
if (filters.deadlineBefore && (!item.deadline || compareTimestampStrings(item.deadline, filters.deadlineBefore) > 0))
|
|
947
943
|
return false;
|
|
948
944
|
if (filters.deadlineAfter && (!item.deadline || compareTimestampStrings(item.deadline, filters.deadlineAfter) < 0))
|
|
@@ -955,6 +951,9 @@ function matchesScalarSearchFilters(item, filters) {
|
|
|
955
951
|
return false;
|
|
956
952
|
if (filters.createdBefore && compareTimestampStrings(item.created_at, filters.createdBefore) > 0)
|
|
957
953
|
return false;
|
|
954
|
+
return true;
|
|
955
|
+
}
|
|
956
|
+
function matchesOwnerSearchFilters(item, filters) {
|
|
958
957
|
if (filters.assigneeFilter !== void 0 && item.assignee !== filters.assigneeFilter)
|
|
959
958
|
return false;
|
|
960
959
|
if (filters.sprintFilter !== void 0 && item.sprint !== filters.sprintFilter)
|
|
@@ -1159,26 +1158,8 @@ function buildHitHighlights(document, matchedFields, tokens) {
|
|
|
1159
1158
|
}
|
|
1160
1159
|
return highlights;
|
|
1161
1160
|
}
|
|
1162
|
-
function
|
|
1163
|
-
|
|
1164
|
-
const normalizedId = normalizeSearchPhrase(item.id);
|
|
1165
|
-
const normalizedIdPrefix = typeof idPrefix === "string" ? idPrefix.trim().toLowerCase() : "";
|
|
1166
|
-
const normalizedIdPrefixPhrase = normalizeSearchPhrase(normalizedIdPrefix);
|
|
1167
|
-
const normalizedShortId = normalizedIdPrefixPhrase.length > 0 && normalizedId.startsWith(normalizedIdPrefixPhrase) ? normalizedId.slice(normalizedIdPrefixPhrase.length).trim() : normalizedId;
|
|
1168
|
-
if (normalizedQuery === normalizedId || normalizedQuery === normalizedShortId) {
|
|
1169
|
-
return {
|
|
1170
|
-
item,
|
|
1171
|
-
score: normalizedQuery === normalizedId ? EXACT_ID_MATCH_SCORE : SHORT_ID_MATCH_SCORE,
|
|
1172
|
-
matched_fields: ["id"],
|
|
1173
|
-
matched_all_terms: true,
|
|
1174
|
-
exact_id_match: true
|
|
1175
|
-
};
|
|
1176
|
-
}
|
|
1177
|
-
const titleTokenCounts = /* @__PURE__ */ new Map();
|
|
1178
|
-
for (const token of tokenizeForExactTokenMatch(item.title)) {
|
|
1179
|
-
titleTokenCounts.set(token, (titleTokenCounts.get(token) ?? 0) + 1);
|
|
1180
|
-
}
|
|
1181
|
-
const searchableFields = [
|
|
1161
|
+
function buildSearchableScoringFields(document, linkedCorpus, tuning) {
|
|
1162
|
+
return [
|
|
1182
1163
|
...SEARCHABLE_FIELD_BUILDERS.map((builder) => ({
|
|
1183
1164
|
name: builder.name,
|
|
1184
1165
|
value: builder.value(document),
|
|
@@ -1186,54 +1167,84 @@ function scoreDocument(document, tokens, normalizedQuery, linkedCorpus, tuning,
|
|
|
1186
1167
|
})),
|
|
1187
1168
|
{ name: "linked_content", value: linkedCorpus, weight: tuning.linked_content_weight }
|
|
1188
1169
|
];
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
const
|
|
1170
|
+
}
|
|
1171
|
+
function buildExactIdSearchHit(item, normalizedQuery, idPrefix) {
|
|
1172
|
+
const normalizedId = normalizeSearchPhrase(item.id);
|
|
1173
|
+
const normalizedIdPrefix = typeof idPrefix === "string" ? idPrefix.trim().toLowerCase() : "";
|
|
1174
|
+
const normalizedIdPrefixPhrase = normalizeSearchPhrase(normalizedIdPrefix);
|
|
1175
|
+
const normalizedShortId = normalizedIdPrefixPhrase.length > 0 && normalizedId.startsWith(normalizedIdPrefixPhrase) ? normalizedId.slice(normalizedIdPrefixPhrase.length).trim() : normalizedId;
|
|
1176
|
+
if (normalizedQuery !== normalizedId && normalizedQuery !== normalizedShortId) {
|
|
1177
|
+
return null;
|
|
1178
|
+
}
|
|
1179
|
+
return {
|
|
1180
|
+
item,
|
|
1181
|
+
score: normalizedQuery === normalizedId ? EXACT_ID_MATCH_SCORE : SHORT_ID_MATCH_SCORE,
|
|
1182
|
+
matched_fields: ["id"],
|
|
1183
|
+
matched_all_terms: true,
|
|
1184
|
+
exact_id_match: true
|
|
1185
|
+
};
|
|
1186
|
+
}
|
|
1187
|
+
function scoreTokenMatches(tokens, titleTokenCounts, searchableFields, tuning, state) {
|
|
1192
1188
|
for (const token of tokens) {
|
|
1193
1189
|
const exactTitleMatches = titleTokenCounts.get(token) ?? 0;
|
|
1194
1190
|
if (exactTitleMatches > 0) {
|
|
1195
|
-
score += exactTitleMatches * tuning.title_exact_bonus;
|
|
1196
|
-
matched.add("title");
|
|
1197
|
-
matchedTokens.add(token);
|
|
1191
|
+
state.score += exactTitleMatches * tuning.title_exact_bonus;
|
|
1192
|
+
state.matched.add("title");
|
|
1193
|
+
state.matchedTokens.add(token);
|
|
1198
1194
|
}
|
|
1199
1195
|
for (const field of searchableFields) {
|
|
1200
|
-
const
|
|
1201
|
-
const occurrences = countOccurrences(fieldValue, token);
|
|
1196
|
+
const occurrences = countOccurrences(field.value.toLowerCase(), token);
|
|
1202
1197
|
if (occurrences > 0) {
|
|
1203
|
-
score += occurrences * field.weight;
|
|
1204
|
-
matched.add(field.name);
|
|
1205
|
-
matchedTokens.add(token);
|
|
1198
|
+
state.score += occurrences * field.weight;
|
|
1199
|
+
state.matched.add(field.name);
|
|
1200
|
+
state.matchedTokens.add(token);
|
|
1206
1201
|
}
|
|
1207
1202
|
}
|
|
1208
1203
|
}
|
|
1204
|
+
}
|
|
1205
|
+
function scorePhraseMatches(item, normalizedQuery, searchableFields, state) {
|
|
1206
|
+
const normalizedTitle = normalizeSearchPhrase(item.title);
|
|
1207
|
+
if (normalizedTitle === normalizedQuery) {
|
|
1208
|
+
state.score += LONG_QUERY_TITLE_EXACT_BONUS;
|
|
1209
|
+
state.matched.add("title");
|
|
1210
|
+
}
|
|
1211
|
+
for (const field of searchableFields) {
|
|
1212
|
+
const phraseOccurrences = countOccurrences(normalizeSearchPhrase(field.value), normalizedQuery);
|
|
1213
|
+
if (phraseOccurrences > 0) {
|
|
1214
|
+
state.score += phraseOccurrences * field.weight * LONG_QUERY_PHRASE_MULTIPLIER;
|
|
1215
|
+
state.matched.add(field.name);
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
function scoreDocument(document, tokens, normalizedQuery, linkedCorpus, tuning, idPrefix, applyCoverageBonus = false) {
|
|
1220
|
+
const item = document.metadata;
|
|
1221
|
+
const exactIdHit = buildExactIdSearchHit(item, normalizedQuery, idPrefix);
|
|
1222
|
+
if (exactIdHit) {
|
|
1223
|
+
return exactIdHit;
|
|
1224
|
+
}
|
|
1225
|
+
const titleTokenCounts = /* @__PURE__ */ new Map();
|
|
1226
|
+
for (const token of tokenizeForExactTokenMatch(item.title)) {
|
|
1227
|
+
titleTokenCounts.set(token, (titleTokenCounts.get(token) ?? 0) + 1);
|
|
1228
|
+
}
|
|
1229
|
+
const searchableFields = buildSearchableScoringFields(document, linkedCorpus, tuning);
|
|
1230
|
+
const state = { score: 0, matched: /* @__PURE__ */ new Set(), matchedTokens: /* @__PURE__ */ new Set() };
|
|
1231
|
+
scoreTokenMatches(tokens, titleTokenCounts, searchableFields, tuning, state);
|
|
1209
1232
|
const distinctTokens = new Set(tokens);
|
|
1210
|
-
const matchedAllTerms = distinctTokens.size > 0 && matchedTokens.size === distinctTokens.size;
|
|
1233
|
+
const matchedAllTerms = distinctTokens.size > 0 && state.matchedTokens.size === distinctTokens.size;
|
|
1211
1234
|
if (applyCoverageBonus && distinctTokens.size > 1 && matchedAllTerms) {
|
|
1212
|
-
score += ALL_TERMS_COVERAGE_BONUS;
|
|
1235
|
+
state.score += ALL_TERMS_COVERAGE_BONUS;
|
|
1213
1236
|
}
|
|
1214
1237
|
const isLongPhraseQuery = tokens.length >= LONG_QUERY_TOKEN_THRESHOLD && normalizedQuery.includes(" ");
|
|
1215
1238
|
if (isLongPhraseQuery) {
|
|
1216
|
-
|
|
1217
|
-
if (normalizedTitle === normalizedQuery) {
|
|
1218
|
-
score += LONG_QUERY_TITLE_EXACT_BONUS;
|
|
1219
|
-
matched.add("title");
|
|
1220
|
-
}
|
|
1221
|
-
for (const field of searchableFields) {
|
|
1222
|
-
const normalizedField = normalizeSearchPhrase(field.value);
|
|
1223
|
-
const phraseOccurrences = countOccurrences(normalizedField, normalizedQuery);
|
|
1224
|
-
if (phraseOccurrences > 0) {
|
|
1225
|
-
score += phraseOccurrences * field.weight * LONG_QUERY_PHRASE_MULTIPLIER;
|
|
1226
|
-
matched.add(field.name);
|
|
1227
|
-
}
|
|
1228
|
-
}
|
|
1239
|
+
scorePhraseMatches(item, normalizedQuery, searchableFields, state);
|
|
1229
1240
|
}
|
|
1230
|
-
if (score <= 0) {
|
|
1241
|
+
if (state.score <= 0) {
|
|
1231
1242
|
return null;
|
|
1232
1243
|
}
|
|
1233
1244
|
return {
|
|
1234
1245
|
item,
|
|
1235
|
-
score,
|
|
1236
|
-
matched_fields: [...matched].sort((a, b) => a.localeCompare(b)),
|
|
1246
|
+
score: state.score,
|
|
1247
|
+
matched_fields: [...state.matched].sort((a, b) => a.localeCompare(b)),
|
|
1237
1248
|
matched_all_terms: matchedAllTerms
|
|
1238
1249
|
};
|
|
1239
1250
|
}
|
|
@@ -1451,8 +1462,12 @@ function resolveExtensionVectorAdapter(settings) {
|
|
|
1451
1462
|
if (typeof query !== "function") {
|
|
1452
1463
|
return null;
|
|
1453
1464
|
}
|
|
1465
|
+
const upsert = runtimeDefinition.upsert;
|
|
1466
|
+
const runtimeAdapterName = toOptionalNonEmptyString(runtimeDefinition.name) ?? toOptionalNonEmptyString(resolved.definition.name) ?? adapterName ?? "extension";
|
|
1454
1467
|
return {
|
|
1455
|
-
|
|
1468
|
+
adapterName: runtimeAdapterName,
|
|
1469
|
+
query,
|
|
1470
|
+
...typeof upsert === "function" ? { upsert } : {}
|
|
1456
1471
|
};
|
|
1457
1472
|
}
|
|
1458
1473
|
function normalizeExtensionProviderHits(providerName, raw, filteredById) {
|
|
@@ -1619,52 +1634,151 @@ function buildRerankCorpus(document) {
|
|
|
1619
1634
|
document.body
|
|
1620
1635
|
].map((entry) => typeof entry === "string" ? entry.trim() : "").filter((entry) => entry.length > 0).join("\n");
|
|
1621
1636
|
}
|
|
1622
|
-
async function
|
|
1623
|
-
const semanticLimit = context.limit ?? context.maxResults;
|
|
1624
|
-
const embeddingOptions = context.embeddingTimeoutMs !== void 0 ? { timeout_ms: context.embeddingTimeoutMs } : {};
|
|
1625
|
-
const vectorQueryOptions = context.vectorQueryTimeoutMs !== void 0 ? { timeout_ms: context.vectorQueryTimeoutMs } : {};
|
|
1626
|
-
const queryTrimmed = context.query.trim();
|
|
1637
|
+
async function resolveExpandedSemanticQueries(context, queryTrimmed) {
|
|
1627
1638
|
const baseExpandedQueries = context.queryExpansion.enabled ? buildDeterministicQueryExpansions(queryTrimmed, context.queryExpansion.max_queries) : [queryTrimmed];
|
|
1628
|
-
|
|
1629
|
-
if (context.queryExpansion.enabled) {
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
}
|
|
1642
|
-
|
|
1643
|
-
context.warnings.push(`search_query_expansion_provider_unavailable:${context.queryExpansion.provider}:using_builtin`);
|
|
1639
|
+
const expandedQueries = baseExpandedQueries.length > 0 ? baseExpandedQueries : [queryTrimmed];
|
|
1640
|
+
if (!context.queryExpansion.enabled) {
|
|
1641
|
+
return expandedQueries;
|
|
1642
|
+
}
|
|
1643
|
+
if (context.queryExpansionExtension?.expand) {
|
|
1644
|
+
try {
|
|
1645
|
+
const rawExpansion = await Promise.resolve(context.queryExpansionExtension.expand({
|
|
1646
|
+
query: queryTrimmed,
|
|
1647
|
+
mode: context.requestedMode,
|
|
1648
|
+
settings: context.settings
|
|
1649
|
+
}));
|
|
1650
|
+
return mergeQueryExpansions(expandedQueries, normalizeQueryExpansionOutput(rawExpansion), context.queryExpansion.max_queries);
|
|
1651
|
+
} catch {
|
|
1652
|
+
context.warnings.push(`search_query_expansion_provider_failed:${context.queryExpansionExtension.providerName}:using_builtin`);
|
|
1653
|
+
return expandedQueries;
|
|
1644
1654
|
}
|
|
1645
1655
|
}
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1656
|
+
if (context.queryExpansion.provider && context.queryExpansion.provider !== "openai" && context.queryExpansion.provider !== "ollama") {
|
|
1657
|
+
context.warnings.push(`search_query_expansion_provider_unavailable:${context.queryExpansion.provider}:using_builtin`);
|
|
1658
|
+
}
|
|
1659
|
+
return expandedQueries;
|
|
1660
|
+
}
|
|
1661
|
+
async function executeSemanticVectorQuery(context, semanticVector, semanticLimit, vectorQueryOptions) {
|
|
1662
|
+
if (context.extensionVectorAdapter?.query) {
|
|
1663
|
+
try {
|
|
1664
|
+
return await Promise.resolve(context.extensionVectorAdapter.query({
|
|
1665
|
+
vector: semanticVector,
|
|
1666
|
+
limit: semanticLimit,
|
|
1667
|
+
settings: context.settings
|
|
1668
|
+
}));
|
|
1669
|
+
} catch (error) {
|
|
1670
|
+
if (!context.vectorStore) {
|
|
1671
|
+
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);
|
|
1660
1672
|
}
|
|
1661
|
-
|
|
1662
|
-
if (context.vectorStore) {
|
|
1673
|
+
context.warnings.push(`search_vector_adapter_failed:${context.extensionVectorAdapter.adapterName}:using_builtin`);
|
|
1663
1674
|
return await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);
|
|
1664
1675
|
}
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1676
|
+
}
|
|
1677
|
+
if (context.vectorStore) {
|
|
1678
|
+
return await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);
|
|
1679
|
+
}
|
|
1680
|
+
throw new PmCliError("Semantic search requires either a configured vector store or an extension vector adapter query handler", EXIT_CODE.USAGE);
|
|
1681
|
+
}
|
|
1682
|
+
function buildRerankCandidateContexts(hybridHits, filteredById, topK) {
|
|
1683
|
+
const sortedForCandidates = [...hybridHits].sort((left, right) => {
|
|
1684
|
+
if (left.score !== right.score) {
|
|
1685
|
+
return right.score - left.score;
|
|
1686
|
+
}
|
|
1687
|
+
return left.item.id.localeCompare(right.item.id);
|
|
1688
|
+
});
|
|
1689
|
+
return sortedForCandidates.slice(0, topK).map((hit) => {
|
|
1690
|
+
const document = filteredById.get(hit.item.id);
|
|
1691
|
+
return document ? { hit, text: buildRerankCorpus(document) } : null;
|
|
1692
|
+
}).filter((entry) => entry !== null);
|
|
1693
|
+
}
|
|
1694
|
+
async function resolveExtensionRerankScores(context, queryTrimmed, candidateContexts) {
|
|
1695
|
+
if (!context.rerankExtension?.rerank) {
|
|
1696
|
+
return null;
|
|
1697
|
+
}
|
|
1698
|
+
try {
|
|
1699
|
+
const rawRerank = await Promise.resolve(context.rerankExtension.rerank({
|
|
1700
|
+
query: queryTrimmed,
|
|
1701
|
+
mode: "hybrid",
|
|
1702
|
+
model: context.rerank.model,
|
|
1703
|
+
top_k: context.rerank.top_k,
|
|
1704
|
+
settings: context.settings,
|
|
1705
|
+
candidates: candidateContexts.map((entry) => ({
|
|
1706
|
+
id: entry.hit.item.id,
|
|
1707
|
+
text: entry.text,
|
|
1708
|
+
score: entry.hit.score
|
|
1709
|
+
}))
|
|
1710
|
+
}));
|
|
1711
|
+
const normalizedRerank = normalizeRerankOutput(rawRerank);
|
|
1712
|
+
if (normalizedRerank.length > 0) {
|
|
1713
|
+
return new Map(normalizedRerank.map((entry) => [entry.id, entry.score]));
|
|
1714
|
+
}
|
|
1715
|
+
context.warnings.push(`search_rerank_provider_invalid_response:${context.rerankExtension.providerName}:using_builtin`);
|
|
1716
|
+
return null;
|
|
1717
|
+
} catch {
|
|
1718
|
+
context.warnings.push(`search_rerank_provider_failed:${context.rerankExtension.providerName}:using_builtin`);
|
|
1719
|
+
return null;
|
|
1720
|
+
}
|
|
1721
|
+
}
|
|
1722
|
+
async function resolveRerankScores(context, queryTrimmed, candidateContexts) {
|
|
1723
|
+
const extensionScores = await resolveExtensionRerankScores(context, queryTrimmed, candidateContexts);
|
|
1724
|
+
if (extensionScores) {
|
|
1725
|
+
return extensionScores;
|
|
1726
|
+
}
|
|
1727
|
+
const rerankCandidates = candidateContexts.map((entry) => ({
|
|
1728
|
+
id: entry.hit.item.id,
|
|
1729
|
+
text: entry.text
|
|
1730
|
+
}));
|
|
1731
|
+
try {
|
|
1732
|
+
return await rerankCandidatesWithEmbeddings(context.provider, context.rerank.model, queryTrimmed, rerankCandidates, context.embeddingTimeoutMs);
|
|
1733
|
+
} catch {
|
|
1734
|
+
context.warnings.push("search_rerank_failed:using_hybrid_scores");
|
|
1735
|
+
return null;
|
|
1736
|
+
}
|
|
1737
|
+
}
|
|
1738
|
+
function applyRerankScores(hybridHits, rerankScores) {
|
|
1739
|
+
const rerankedIds = new Set(rerankScores.keys());
|
|
1740
|
+
const rerankedHits = hybridHits.map((hit) => {
|
|
1741
|
+
const rerankScore = rerankScores.get(hit.item.id);
|
|
1742
|
+
if (rerankScore === void 0) {
|
|
1743
|
+
return hit;
|
|
1744
|
+
}
|
|
1745
|
+
const matchedFields = new Set(hit.matched_fields);
|
|
1746
|
+
matchedFields.add("rerank");
|
|
1747
|
+
return {
|
|
1748
|
+
...hit,
|
|
1749
|
+
score: rerankScore,
|
|
1750
|
+
matched_fields: [...matchedFields].sort((left, right) => left.localeCompare(right))
|
|
1751
|
+
};
|
|
1752
|
+
});
|
|
1753
|
+
rerankedHits.sort((left, right) => {
|
|
1754
|
+
const leftWasReranked = rerankedIds.has(left.item.id);
|
|
1755
|
+
const rightWasReranked = rerankedIds.has(right.item.id);
|
|
1756
|
+
if (leftWasReranked !== rightWasReranked) {
|
|
1757
|
+
return leftWasReranked ? -1 : 1;
|
|
1758
|
+
}
|
|
1759
|
+
if (left.score !== right.score) {
|
|
1760
|
+
return right.score - left.score;
|
|
1761
|
+
}
|
|
1762
|
+
return left.item.id.localeCompare(right.item.id);
|
|
1763
|
+
});
|
|
1764
|
+
return rerankedHits;
|
|
1765
|
+
}
|
|
1766
|
+
async function applyHybridRerank(context, queryTrimmed, hybridHits, filteredById) {
|
|
1767
|
+
if (!context.rerank.enabled || hybridHits.length <= 1) {
|
|
1768
|
+
return hybridHits;
|
|
1769
|
+
}
|
|
1770
|
+
const candidateContexts = buildRerankCandidateContexts(hybridHits, filteredById, context.rerank.top_k);
|
|
1771
|
+
const rerankScores = await resolveRerankScores(context, queryTrimmed, candidateContexts);
|
|
1772
|
+
return rerankScores && rerankScores.size > 0 ? applyRerankScores(hybridHits, rerankScores) : hybridHits;
|
|
1773
|
+
}
|
|
1774
|
+
async function computeSemanticOrHybridHits(context) {
|
|
1775
|
+
const semanticLimit = context.limit ?? context.maxResults;
|
|
1776
|
+
const embeddingOptions = context.embeddingTimeoutMs !== void 0 ? { timeout_ms: context.embeddingTimeoutMs } : {};
|
|
1777
|
+
const vectorQueryOptions = context.vectorQueryTimeoutMs !== void 0 ? { timeout_ms: context.vectorQueryTimeoutMs } : {};
|
|
1778
|
+
const queryTrimmed = context.query.trim();
|
|
1779
|
+
const expandedQueries = await resolveExpandedSemanticQueries(context, queryTrimmed);
|
|
1780
|
+
const queryVectors = await executeEmbeddingRequest(context.provider, expandedQueries, embeddingOptions);
|
|
1781
|
+
const queryVectorGroups = await Promise.all(queryVectors.map(async (semanticVector) => await executeSemanticVectorQuery(context, semanticVector, semanticLimit, vectorQueryOptions)));
|
|
1668
1782
|
const vectorHits = mergeVectorHitsById(queryVectorGroups);
|
|
1669
1783
|
const filteredById = new Map(context.filteredDocuments.map((document) => [document.metadata.id, document]));
|
|
1670
1784
|
const { semanticHits, semanticScores } = buildSemanticHits(vectorHits, filteredById);
|
|
@@ -1672,86 +1786,7 @@ async function computeSemanticOrHybridHits(context) {
|
|
|
1672
1786
|
if (context.requestedMode === "semantic") {
|
|
1673
1787
|
return { hits: forceExactIdHitsToTop(semanticHits, context.keywordHits), vectorMatchCount };
|
|
1674
1788
|
}
|
|
1675
|
-
|
|
1676
|
-
if (context.rerank.enabled && hybridHits.length > 1) {
|
|
1677
|
-
const sortedForCandidates = [...hybridHits].sort((left, right) => {
|
|
1678
|
-
if (left.score !== right.score) {
|
|
1679
|
-
return right.score - left.score;
|
|
1680
|
-
}
|
|
1681
|
-
return left.item.id.localeCompare(right.item.id);
|
|
1682
|
-
});
|
|
1683
|
-
const candidateHits = sortedForCandidates.slice(0, context.rerank.top_k);
|
|
1684
|
-
const candidateContexts = candidateHits.map((hit) => {
|
|
1685
|
-
const document = filteredById.get(hit.item.id);
|
|
1686
|
-
if (!document) {
|
|
1687
|
-
return null;
|
|
1688
|
-
}
|
|
1689
|
-
return { hit, text: buildRerankCorpus(document) };
|
|
1690
|
-
}).filter((entry) => entry !== null);
|
|
1691
|
-
const rerankCandidates = candidateContexts.map((entry) => ({
|
|
1692
|
-
id: entry.hit.item.id,
|
|
1693
|
-
text: entry.text
|
|
1694
|
-
}));
|
|
1695
|
-
let rerankScores = null;
|
|
1696
|
-
if (context.rerankExtension?.rerank) {
|
|
1697
|
-
try {
|
|
1698
|
-
const rawRerank = await Promise.resolve(context.rerankExtension.rerank({
|
|
1699
|
-
query: queryTrimmed,
|
|
1700
|
-
mode: "hybrid",
|
|
1701
|
-
model: context.rerank.model,
|
|
1702
|
-
top_k: context.rerank.top_k,
|
|
1703
|
-
settings: context.settings,
|
|
1704
|
-
candidates: candidateContexts.map((entry) => ({
|
|
1705
|
-
id: entry.hit.item.id,
|
|
1706
|
-
text: entry.text,
|
|
1707
|
-
score: entry.hit.score
|
|
1708
|
-
}))
|
|
1709
|
-
}));
|
|
1710
|
-
const normalizedRerank = normalizeRerankOutput(rawRerank);
|
|
1711
|
-
if (normalizedRerank.length > 0) {
|
|
1712
|
-
rerankScores = new Map(normalizedRerank.map((entry) => [entry.id, entry.score]));
|
|
1713
|
-
} else {
|
|
1714
|
-
context.warnings.push(`search_rerank_provider_invalid_response:${context.rerankExtension.providerName}:using_builtin`);
|
|
1715
|
-
}
|
|
1716
|
-
} catch {
|
|
1717
|
-
context.warnings.push(`search_rerank_provider_failed:${context.rerankExtension.providerName}:using_builtin`);
|
|
1718
|
-
}
|
|
1719
|
-
}
|
|
1720
|
-
if (!rerankScores) {
|
|
1721
|
-
try {
|
|
1722
|
-
rerankScores = await rerankCandidatesWithEmbeddings(context.provider, context.rerank.model, queryTrimmed, rerankCandidates, context.embeddingTimeoutMs);
|
|
1723
|
-
} catch {
|
|
1724
|
-
context.warnings.push("search_rerank_failed:using_hybrid_scores");
|
|
1725
|
-
}
|
|
1726
|
-
}
|
|
1727
|
-
if (rerankScores && rerankScores.size > 0) {
|
|
1728
|
-
const rerankedIds = new Set(rerankScores.keys());
|
|
1729
|
-
hybridHits = hybridHits.map((hit) => {
|
|
1730
|
-
const rerankScore = rerankScores.get(hit.item.id);
|
|
1731
|
-
if (rerankScore === void 0) {
|
|
1732
|
-
return hit;
|
|
1733
|
-
}
|
|
1734
|
-
const matchedFields = new Set(hit.matched_fields);
|
|
1735
|
-
matchedFields.add("rerank");
|
|
1736
|
-
return {
|
|
1737
|
-
...hit,
|
|
1738
|
-
score: rerankScore,
|
|
1739
|
-
matched_fields: [...matchedFields].sort((left, right) => left.localeCompare(right))
|
|
1740
|
-
};
|
|
1741
|
-
});
|
|
1742
|
-
hybridHits.sort((left, right) => {
|
|
1743
|
-
const leftWasReranked = rerankedIds.has(left.item.id);
|
|
1744
|
-
const rightWasReranked = rerankedIds.has(right.item.id);
|
|
1745
|
-
if (leftWasReranked !== rightWasReranked) {
|
|
1746
|
-
return leftWasReranked ? -1 : 1;
|
|
1747
|
-
}
|
|
1748
|
-
if (left.score !== right.score) {
|
|
1749
|
-
return right.score - left.score;
|
|
1750
|
-
}
|
|
1751
|
-
return left.item.id.localeCompare(right.item.id);
|
|
1752
|
-
});
|
|
1753
|
-
}
|
|
1754
|
-
}
|
|
1789
|
+
const hybridHits = await applyHybridRerank(context, queryTrimmed, combineHybridHits(filteredById, semanticScores, context.keywordHits, context.hybridSemanticWeight), filteredById);
|
|
1755
1790
|
return {
|
|
1756
1791
|
// GH-281: applied LAST (after any rerank reordering) so an exact full-ID /
|
|
1757
1792
|
// short-ID keyword match always ranks #1 in hybrid mode regardless of the
|
|
@@ -1862,7 +1897,15 @@ function projectSearchHits(hits, projection) {
|
|
|
1862
1897
|
return projected;
|
|
1863
1898
|
});
|
|
1864
1899
|
}
|
|
1865
|
-
|
|
1900
|
+
function resolveQueryExpansionExtension(queryExpansion) {
|
|
1901
|
+
const provider = resolveExtensionSearchProviderByName(queryExpansion.provider ?? void 0);
|
|
1902
|
+
return provider?.queryExpansion ? { providerName: provider.providerName, expand: provider.queryExpansion } : null;
|
|
1903
|
+
}
|
|
1904
|
+
function resolveRerankExtension(settings) {
|
|
1905
|
+
const provider = resolveExtensionSearchProviderByName(toOptionalNonEmptyString(settings.search?.provider));
|
|
1906
|
+
return provider?.rerank ? { providerName: provider.providerName, rerank: provider.rerank } : null;
|
|
1907
|
+
}
|
|
1908
|
+
function prepareSearchInput(rawQuery, rawOptions) {
|
|
1866
1909
|
const inlineWarnings = [];
|
|
1867
1910
|
const inlineParse = parseInlineQueryFilters(rawQuery);
|
|
1868
1911
|
const hasInlineFilters = Object.keys(inlineParse.inlineFilters).length > 0;
|
|
@@ -1876,311 +1919,381 @@ async function runSearch(rawQuery, rawOptions, global) {
|
|
|
1876
1919
|
}
|
|
1877
1920
|
const query = hasInlineFilters ? inlineParse.residualQuery : rawQuery;
|
|
1878
1921
|
const options = applyInlineQueryFilters(rawOptions, inlineParse.inlineFilters, inlineWarnings);
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1922
|
+
return {
|
|
1923
|
+
query,
|
|
1924
|
+
options,
|
|
1925
|
+
inlineWarnings,
|
|
1926
|
+
highlight: options.highlight === true,
|
|
1927
|
+
includeLinked: parseIncludeLinked(options.includeLinked),
|
|
1928
|
+
titleExact: parseTitleExact(options.titleExact),
|
|
1929
|
+
phraseExact: parsePhraseExact(options.phraseExact),
|
|
1930
|
+
matchMode: parseMatchMode(typeof options.matchMode === "string" ? options.matchMode : void 0),
|
|
1931
|
+
minScoreOverride: parseMinScoreOverride(options.minScore),
|
|
1932
|
+
countOnly: options.count === true,
|
|
1933
|
+
tokens: parseTokens(query),
|
|
1934
|
+
normalizedQuery: normalizeSearchPhrase(query),
|
|
1935
|
+
limit: parseLimit(options.limit),
|
|
1936
|
+
projection: parseProjectionConfig(options),
|
|
1937
|
+
modeWasExplicit: typeof options.mode === "string" && options.mode.trim().length > 0
|
|
1938
|
+
};
|
|
1939
|
+
}
|
|
1940
|
+
async function resolveSearchRuntimeContext(prepared, global) {
|
|
1891
1941
|
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
1892
1942
|
if (!await pathExists(getSettingsPath(pmRoot))) {
|
|
1893
1943
|
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
1894
1944
|
}
|
|
1895
1945
|
const storedSettings = await readSettings(pmRoot);
|
|
1896
|
-
const
|
|
1897
|
-
const settings = runtimeDefaultsResolution.settings;
|
|
1946
|
+
const settings = resolveSettingsWithSemanticRuntimeDefaults(storedSettings).settings;
|
|
1898
1947
|
const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
|
|
1899
1948
|
const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);
|
|
1900
|
-
validateSearchProjectionFields(projection, runtimeFieldRegistry);
|
|
1901
|
-
const runtimeFieldFilters = collectRuntimeFilterValues(options, runtimeFieldRegistry, "search");
|
|
1902
|
-
const statusFilter = parseStatusFilterCsv(typeof options.status === "string" ? options.status : void 0, statusRegistry, { strict: true });
|
|
1949
|
+
validateSearchProjectionFields(prepared.projection, runtimeFieldRegistry);
|
|
1950
|
+
const runtimeFieldFilters = collectRuntimeFilterValues(prepared.options, runtimeFieldRegistry, "search");
|
|
1903
1951
|
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
1904
|
-
const maxResults = resolveSearchMaxResults(settings);
|
|
1905
|
-
const scoreThreshold = minScoreOverride ?? resolveSearchScoreThreshold(settings);
|
|
1906
|
-
const semanticWeightProvided = options.semanticWeight !== void 0;
|
|
1907
|
-
const semanticWeightOverride = parseSemanticWeightOverride(options.semanticWeight);
|
|
1908
|
-
const hybridSemanticWeight = semanticWeightOverride ?? resolveHybridSemanticWeight(settings);
|
|
1909
|
-
const tuning = resolveSearchTuning(settings);
|
|
1910
1952
|
const providerResolution = resolveEmbeddingProviders(settings);
|
|
1911
1953
|
const vectorResolution = resolveVectorStores(settings);
|
|
1912
1954
|
const extensionSearchProvider = resolveExtensionSearchProvider(settings);
|
|
1913
1955
|
const extensionVectorAdapter = resolveExtensionVectorAdapter(settings);
|
|
1914
|
-
const
|
|
1915
|
-
configuredProvider: toOptionalNonEmptyString(settings.search?.provider),
|
|
1916
|
-
hasEmbeddingProvider: providerResolution.active !== null,
|
|
1917
|
-
hasExtensionSearchProvider: extensionSearchProvider !== null
|
|
1918
|
-
});
|
|
1956
|
+
const semanticWeightOverride = parseSemanticWeightOverride(prepared.options.semanticWeight);
|
|
1919
1957
|
const queryExpansion = resolveQueryExpansionConfig(settings, providerResolution.active?.name ?? null);
|
|
1920
1958
|
const rerank = resolveRerankConfig(settings, providerResolution.active?.model ?? toOptionalNonEmptyString(settings.search?.embedding_model) ?? "text-embedding-3-small");
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1959
|
+
return {
|
|
1960
|
+
pmRoot,
|
|
1961
|
+
settings,
|
|
1962
|
+
statusRegistry,
|
|
1963
|
+
runtimeFieldRegistry,
|
|
1964
|
+
runtimeFieldFilters,
|
|
1965
|
+
typeRegistry,
|
|
1966
|
+
maxResults: resolveSearchMaxResults(settings),
|
|
1967
|
+
scoreThreshold: prepared.minScoreOverride ?? resolveSearchScoreThreshold(settings),
|
|
1968
|
+
semanticWeightProvided: prepared.options.semanticWeight !== void 0,
|
|
1969
|
+
semanticWeightOverride,
|
|
1970
|
+
hybridSemanticWeight: semanticWeightOverride ?? resolveHybridSemanticWeight(settings),
|
|
1971
|
+
tuning: resolveSearchTuning(settings),
|
|
1972
|
+
providerResolution,
|
|
1973
|
+
vectorResolution,
|
|
1974
|
+
extensionSearchProvider,
|
|
1975
|
+
extensionVectorAdapter,
|
|
1976
|
+
bm25Mode: resolveBuiltInBm25Mode({
|
|
1977
|
+
configuredProvider: toOptionalNonEmptyString(settings.search?.provider),
|
|
1978
|
+
hasEmbeddingProvider: providerResolution.active !== null,
|
|
1979
|
+
hasExtensionSearchProvider: extensionSearchProvider !== null
|
|
1980
|
+
}),
|
|
1981
|
+
queryExpansion,
|
|
1982
|
+
queryExpansionExtension: resolveQueryExpansionExtension(queryExpansion),
|
|
1983
|
+
rerank,
|
|
1984
|
+
rerankExtension: resolveRerankExtension(settings),
|
|
1985
|
+
effectiveMode: parseMode(prepared.options.mode, {
|
|
1986
|
+
hasProvider: providerResolution.active !== null || extensionSearchProvider !== null,
|
|
1987
|
+
hasVectorStore: vectorResolution.active !== null || extensionVectorAdapter !== null
|
|
1988
|
+
})
|
|
1989
|
+
};
|
|
1990
|
+
}
|
|
1991
|
+
async function loadFilteredSearchCorpus(prepared, runtime) {
|
|
1992
|
+
const loadedDocuments = await loadDocuments(runtime.pmRoot, runtime.settings.item_format ?? "toon", runtime.typeRegistry.type_to_folder, runtime.settings.schema);
|
|
1993
|
+
const statusFilter = parseStatusFilterCsv(typeof prepared.options.status === "string" ? prepared.options.status : void 0, runtime.statusRegistry, { strict: true });
|
|
1994
|
+
const lifecycleClassifier = lifecycleClassifierFromStatusRegistry(runtime.statusRegistry);
|
|
1995
|
+
const metadataFilteredDocuments = applyFilters(loadedDocuments.documents, prepared.options, runtime.typeRegistry, runtime.runtimeFieldFilters, statusFilter, lifecycleClassifier);
|
|
1996
|
+
return {
|
|
1997
|
+
warnings: loadedDocuments.warnings,
|
|
1998
|
+
allDocuments: loadedDocuments.documents,
|
|
1999
|
+
filteredDocuments: applyExactQueryFilters(metadataFilteredDocuments, prepared.normalizedQuery, {
|
|
2000
|
+
titleExact: prepared.titleExact,
|
|
2001
|
+
phraseExact: prepared.phraseExact || prepared.matchMode === "exact"
|
|
2002
|
+
})
|
|
2003
|
+
};
|
|
2004
|
+
}
|
|
2005
|
+
async function collectLinkedCorpusById(includeLinked, effectiveMode, filteredDocuments) {
|
|
2006
|
+
const linkedCorpusById = /* @__PURE__ */ new Map();
|
|
2007
|
+
if (!includeLinked || effectiveMode !== "keyword" && effectiveMode !== "hybrid") {
|
|
2008
|
+
return linkedCorpusById;
|
|
1933
2009
|
}
|
|
1934
|
-
|
|
1935
|
-
|
|
2010
|
+
const projectRoot = process.cwd();
|
|
2011
|
+
const linkedCorpusRoots = await resolveLinkedCorpusRoots(projectRoot, resolveGlobalPmRoot(projectRoot));
|
|
2012
|
+
const linkedCorpusEntries = await Promise.all(filteredDocuments.map(async (document) => [document.metadata.id, await loadLinkedCorpus(document, linkedCorpusRoots)]));
|
|
2013
|
+
for (const [id, corpus] of linkedCorpusEntries) {
|
|
2014
|
+
linkedCorpusById.set(id, corpus);
|
|
2015
|
+
}
|
|
2016
|
+
return linkedCorpusById;
|
|
2017
|
+
}
|
|
2018
|
+
async function computeKeywordSearchHits(prepared, runtime, filteredDocuments) {
|
|
2019
|
+
const linkedCorpusById = await collectLinkedCorpusById(prepared.includeLinked, runtime.effectiveMode, filteredDocuments);
|
|
2020
|
+
const applyCoverageBonus = prepared.matchMode === "or";
|
|
2021
|
+
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);
|
|
2022
|
+
}
|
|
2023
|
+
function buildEmptySearchResultFromContext(response, countOnly) {
|
|
2024
|
+
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);
|
|
2025
|
+
}
|
|
2026
|
+
async function executeBuiltInBm25Search(prepared, runtime, filteredDocuments, keywordHits, warnings) {
|
|
2027
|
+
if (runtime.bm25Mode === null || runtime.effectiveMode === "keyword") {
|
|
2028
|
+
return null;
|
|
1936
2029
|
}
|
|
1937
|
-
const
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
2030
|
+
const hits = computeBuiltInBm25Hits({
|
|
2031
|
+
requestedMode: runtime.effectiveMode,
|
|
2032
|
+
query: prepared.query,
|
|
2033
|
+
filteredDocuments,
|
|
2034
|
+
keywordHits,
|
|
2035
|
+
corpusFields: resolveSearchCorpusFields(runtime.settings),
|
|
2036
|
+
bm25Params: resolveBm25Params(runtime.settings),
|
|
2037
|
+
hybridSemanticWeight: runtime.hybridSemanticWeight
|
|
1945
2038
|
});
|
|
1946
|
-
if (
|
|
1947
|
-
|
|
2039
|
+
if (runtime.bm25Mode === "auto-fallback") {
|
|
2040
|
+
warnings.push(`search_${runtime.effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`);
|
|
1948
2041
|
}
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
if (
|
|
1953
|
-
|
|
1954
|
-
const linkedCorpusEntries = await Promise.all(filteredDocuments.map(async (document) => [document.metadata.id, await loadLinkedCorpus(document, linkedCorpusRoots)]));
|
|
1955
|
-
for (const [id, corpus] of linkedCorpusEntries) {
|
|
1956
|
-
linkedCorpusById.set(id, corpus);
|
|
1957
|
-
}
|
|
2042
|
+
return hits;
|
|
2043
|
+
}
|
|
2044
|
+
async function executeExtensionSearchProvider(prepared, runtime, filteredDocuments, filteredById) {
|
|
2045
|
+
if (!runtime.extensionSearchProvider) {
|
|
2046
|
+
return null;
|
|
1958
2047
|
}
|
|
1959
|
-
const
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
let hits = keywordHits;
|
|
1974
|
-
const useBuiltInBm25 = bm25Mode !== null && effectiveMode !== "keyword";
|
|
1975
|
-
if (bm25Mode !== null && effectiveMode !== "keyword") {
|
|
1976
|
-
hits = computeBuiltInBm25Hits({
|
|
1977
|
-
requestedMode: effectiveMode,
|
|
1978
|
-
query,
|
|
1979
|
-
filteredDocuments,
|
|
1980
|
-
keywordHits,
|
|
1981
|
-
corpusFields: resolveSearchCorpusFields(settings),
|
|
1982
|
-
bm25Params: resolveBm25Params(settings),
|
|
1983
|
-
hybridSemanticWeight
|
|
1984
|
-
});
|
|
1985
|
-
if (bm25Mode === "auto-fallback") {
|
|
1986
|
-
warnings.push(`search_${effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`);
|
|
2048
|
+
const canUseBuiltInSemantic = runtime.providerResolution.active !== null && (runtime.vectorResolution.active !== null || runtime.extensionVectorAdapter !== null);
|
|
2049
|
+
try {
|
|
2050
|
+
const providerResponse = await Promise.resolve(runtime.extensionSearchProvider.query({
|
|
2051
|
+
query: prepared.query,
|
|
2052
|
+
mode: runtime.effectiveMode,
|
|
2053
|
+
tokens: prepared.tokens,
|
|
2054
|
+
options: prepared.options,
|
|
2055
|
+
settings: runtime.settings,
|
|
2056
|
+
documents: filteredDocuments
|
|
2057
|
+
}));
|
|
2058
|
+
return normalizeExtensionProviderHits(runtime.extensionSearchProvider.providerName, providerResponse, filteredById);
|
|
2059
|
+
} catch (error) {
|
|
2060
|
+
if (!canUseBuiltInSemantic) {
|
|
2061
|
+
throw new PmCliError(`Extension search provider "${runtime.extensionSearchProvider.providerName}" failed: ${error instanceof Error ? error.message : String(error)}`, EXIT_CODE.GENERIC_FAILURE);
|
|
1987
2062
|
}
|
|
2063
|
+
return null;
|
|
1988
2064
|
}
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
}
|
|
1994
|
-
try {
|
|
1995
|
-
if (!extensionSearchProvider) {
|
|
1996
|
-
requireSemanticDependencies(effectiveMode, providerResolution, vectorResolution, extensionVectorAdapter !== null);
|
|
1997
|
-
}
|
|
1998
|
-
if (filteredDocuments.length === 0 || limit === 0) {
|
|
1999
|
-
return emptySearchResult(query, effectiveMode, matchMode, options, includeLinked, scoreThreshold, hybridSemanticWeight, queryExpansion, rerank, projection, warnings, runtimeFieldFilters, countOnly);
|
|
2000
|
-
}
|
|
2001
|
-
const filteredById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
|
|
2002
|
-
const canUseBuiltInSemantic = providerResolution.active !== null && (vectorResolution.active !== null || extensionVectorAdapter !== null);
|
|
2003
|
-
if (extensionSearchProvider) {
|
|
2004
|
-
try {
|
|
2005
|
-
const providerResponse = await Promise.resolve(extensionSearchProvider.query({
|
|
2006
|
-
query,
|
|
2007
|
-
mode: effectiveMode,
|
|
2008
|
-
tokens,
|
|
2009
|
-
options,
|
|
2010
|
-
settings,
|
|
2011
|
-
documents: filteredDocuments
|
|
2012
|
-
}));
|
|
2013
|
-
hits = normalizeExtensionProviderHits(extensionSearchProvider.providerName, providerResponse, filteredById);
|
|
2014
|
-
} catch (error) {
|
|
2015
|
-
if (!canUseBuiltInSemantic) {
|
|
2016
|
-
throw new PmCliError(`Extension search provider "${extensionSearchProvider.providerName}" failed: ${error instanceof Error ? error.message : String(error)}`, EXIT_CODE.GENERIC_FAILURE);
|
|
2017
|
-
}
|
|
2018
|
-
}
|
|
2019
|
-
}
|
|
2020
|
-
if (hits === keywordHits) {
|
|
2021
|
-
const implicitHybridMode = !modeWasExplicit && effectiveMode === "hybrid";
|
|
2022
|
-
const { provider, vectorStore } = requireSemanticDependencies(effectiveMode, providerResolution, vectorResolution, extensionVectorAdapter !== null);
|
|
2023
|
-
const semanticResult = await computeSemanticOrHybridHits({
|
|
2024
|
-
requestedMode: effectiveMode,
|
|
2025
|
-
query,
|
|
2026
|
-
filteredDocuments,
|
|
2027
|
-
keywordHits,
|
|
2028
|
-
hybridSemanticWeight,
|
|
2029
|
-
limit,
|
|
2030
|
-
maxResults,
|
|
2031
|
-
provider,
|
|
2032
|
-
vectorStore,
|
|
2033
|
-
extensionVectorAdapter,
|
|
2034
|
-
queryExpansion,
|
|
2035
|
-
queryExpansionExtension,
|
|
2036
|
-
rerank,
|
|
2037
|
-
rerankExtension,
|
|
2038
|
-
warnings,
|
|
2039
|
-
settings,
|
|
2040
|
-
/* c8 ignore next 5 -- reserved for future implicit-hybrid auto-mode; current parseMode defaults keyword when mode is omitted */
|
|
2041
|
-
...implicitHybridMode ? {
|
|
2042
|
-
embeddingTimeoutMs: IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS,
|
|
2043
|
-
vectorQueryTimeoutMs: IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS
|
|
2044
|
-
} : {}
|
|
2045
|
-
});
|
|
2046
|
-
hits = semanticResult.hits;
|
|
2047
|
-
if (semanticResult.vectorMatchCount === 0) {
|
|
2048
|
-
if (effectiveMode === "semantic") {
|
|
2049
|
-
hits = keywordHits;
|
|
2050
|
-
}
|
|
2051
|
-
warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);
|
|
2052
|
-
}
|
|
2053
|
-
}
|
|
2054
|
-
} catch (error) {
|
|
2055
|
-
const fallbackWarning = modeWasExplicit ? buildExplicitSemanticFallbackWarning(effectiveMode, error) : buildImplicitSemanticFallbackWarning(error);
|
|
2056
|
-
effectiveMode = "keyword";
|
|
2057
|
-
hits = keywordHits;
|
|
2058
|
-
warnings.push(fallbackWarning);
|
|
2059
|
-
}
|
|
2065
|
+
}
|
|
2066
|
+
function maybeApplyNoVectorFallback(effectiveMode, semanticResult, keywordHits, warnings) {
|
|
2067
|
+
if (semanticResult.vectorMatchCount > 0) {
|
|
2068
|
+
return semanticResult.hits;
|
|
2060
2069
|
}
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
const
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2070
|
+
warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);
|
|
2071
|
+
return effectiveMode === "semantic" ? keywordHits : semanticResult.hits;
|
|
2072
|
+
}
|
|
2073
|
+
async function prepareBuiltInSemanticSearch(runtime, effectiveMode, filteredDocuments, warnings, modeWasExplicit) {
|
|
2074
|
+
const builtInSemanticWillRun = !runtime.extensionSearchProvider && runtime.providerResolution.active !== null && (runtime.vectorResolution.active !== null || runtime.extensionVectorAdapter !== null);
|
|
2075
|
+
if (modeWasExplicit && builtInSemanticWillRun) {
|
|
2076
|
+
await maybeEmitVectorIndexStaleWarning(runtime.pmRoot, filteredDocuments, warnings);
|
|
2077
|
+
}
|
|
2078
|
+
if (!runtime.extensionSearchProvider) {
|
|
2079
|
+
requireSemanticDependencies(effectiveMode, runtime.providerResolution, runtime.vectorResolution, runtime.extensionVectorAdapter !== null);
|
|
2080
|
+
}
|
|
2081
|
+
}
|
|
2082
|
+
async function executeSemanticSearch(input) {
|
|
2083
|
+
const { prepared, runtime, filteredDocuments, keywordHits, warnings, modeWasExplicit } = input;
|
|
2084
|
+
let hits = keywordHits;
|
|
2085
|
+
const bm25Hits = await executeBuiltInBm25Search(prepared, runtime, filteredDocuments, keywordHits, warnings);
|
|
2086
|
+
const semanticMode = runtime.effectiveMode;
|
|
2087
|
+
if (bm25Hits !== null || semanticMode === "keyword") {
|
|
2088
|
+
return { effectiveMode: runtime.effectiveMode, hits: bm25Hits ?? hits };
|
|
2089
|
+
}
|
|
2090
|
+
try {
|
|
2091
|
+
await prepareBuiltInSemanticSearch(runtime, semanticMode, filteredDocuments, warnings, modeWasExplicit);
|
|
2092
|
+
if (filteredDocuments.length === 0 || prepared.limit === 0) {
|
|
2093
|
+
return { effectiveMode: runtime.effectiveMode, hits: [] };
|
|
2094
|
+
}
|
|
2095
|
+
const filteredById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
|
|
2096
|
+
hits = await executeExtensionSearchProvider(prepared, runtime, filteredDocuments, filteredById) ?? hits;
|
|
2097
|
+
if (hits === keywordHits) {
|
|
2098
|
+
const { provider, vectorStore } = requireSemanticDependencies(semanticMode, runtime.providerResolution, runtime.vectorResolution, runtime.extensionVectorAdapter !== null);
|
|
2099
|
+
const semanticResult = await computeSemanticOrHybridHits({
|
|
2100
|
+
requestedMode: semanticMode,
|
|
2101
|
+
query: prepared.query,
|
|
2102
|
+
filteredDocuments,
|
|
2103
|
+
keywordHits,
|
|
2104
|
+
hybridSemanticWeight: runtime.hybridSemanticWeight,
|
|
2105
|
+
limit: prepared.limit,
|
|
2106
|
+
maxResults: runtime.maxResults,
|
|
2107
|
+
provider,
|
|
2108
|
+
vectorStore,
|
|
2109
|
+
extensionVectorAdapter: runtime.extensionVectorAdapter,
|
|
2110
|
+
queryExpansion: runtime.queryExpansion,
|
|
2111
|
+
queryExpansionExtension: runtime.queryExpansionExtension,
|
|
2112
|
+
rerank: runtime.rerank,
|
|
2113
|
+
rerankExtension: runtime.rerankExtension,
|
|
2114
|
+
warnings,
|
|
2115
|
+
settings: runtime.settings
|
|
2080
2116
|
});
|
|
2081
|
-
|
|
2082
|
-
query: query.trim(),
|
|
2083
|
-
mode: effectiveMode,
|
|
2084
|
-
items: [],
|
|
2085
|
-
count: total,
|
|
2086
|
-
total,
|
|
2087
|
-
count_only: true,
|
|
2088
|
-
filters: compactFilters,
|
|
2089
|
-
...warnings.length > 0 ? { warnings } : {}
|
|
2090
|
-
};
|
|
2117
|
+
hits = maybeApplyNoVectorFallback(semanticMode, semanticResult, keywordHits, warnings);
|
|
2091
2118
|
}
|
|
2092
|
-
return {
|
|
2093
|
-
|
|
2094
|
-
|
|
2119
|
+
return { effectiveMode: runtime.effectiveMode, hits };
|
|
2120
|
+
} catch (error) {
|
|
2121
|
+
warnings.push(buildExplicitSemanticFallbackWarning(runtime.effectiveMode, error));
|
|
2122
|
+
return { effectiveMode: "keyword", hits: keywordHits };
|
|
2123
|
+
}
|
|
2124
|
+
}
|
|
2125
|
+
function buildCountOnlySearchResult(response, total) {
|
|
2126
|
+
if (response.projection.mode === "compact" && response.options.compact === true) {
|
|
2127
|
+
return withSearchWarnings({
|
|
2128
|
+
query: response.query.trim(),
|
|
2129
|
+
mode: response.effectiveMode,
|
|
2095
2130
|
items: [],
|
|
2096
2131
|
count: total,
|
|
2097
2132
|
total,
|
|
2098
2133
|
count_only: true,
|
|
2099
|
-
filters:
|
|
2100
|
-
effectiveMode,
|
|
2101
|
-
matchMode,
|
|
2102
|
-
options,
|
|
2103
|
-
includeLinked,
|
|
2104
|
-
titleExact,
|
|
2105
|
-
phraseExact,
|
|
2106
|
-
scoreThreshold,
|
|
2107
|
-
hybridSemanticWeight,
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2134
|
+
filters: buildCompactSearchFilterSummary({
|
|
2135
|
+
mode: response.effectiveMode,
|
|
2136
|
+
matchMode: response.matchMode,
|
|
2137
|
+
options: response.options,
|
|
2138
|
+
includeLinked: response.includeLinked,
|
|
2139
|
+
titleExact: response.titleExact,
|
|
2140
|
+
phraseExact: response.phraseExact,
|
|
2141
|
+
scoreThreshold: response.scoreThreshold,
|
|
2142
|
+
hybridSemanticWeight: response.hybridSemanticWeight,
|
|
2143
|
+
runtimeFieldFilters: response.runtimeFieldFilters
|
|
2144
|
+
})
|
|
2145
|
+
}, response.warnings);
|
|
2146
|
+
}
|
|
2147
|
+
const projectionFields = response.projection.mode === "full" ? null : [...response.projection.fields];
|
|
2148
|
+
return withSearchWarnings({
|
|
2149
|
+
query: response.query.trim(),
|
|
2150
|
+
mode: response.effectiveMode,
|
|
2151
|
+
items: [],
|
|
2152
|
+
count: total,
|
|
2153
|
+
total,
|
|
2154
|
+
count_only: true,
|
|
2155
|
+
filters: buildVerboseSearchFilters({
|
|
2156
|
+
effectiveMode: response.effectiveMode,
|
|
2157
|
+
matchMode: response.matchMode,
|
|
2158
|
+
options: response.options,
|
|
2159
|
+
includeLinked: response.includeLinked,
|
|
2160
|
+
titleExact: response.titleExact,
|
|
2161
|
+
phraseExact: response.phraseExact,
|
|
2162
|
+
scoreThreshold: response.scoreThreshold,
|
|
2163
|
+
hybridSemanticWeight: response.hybridSemanticWeight,
|
|
2164
|
+
queryExpansion: response.queryExpansion,
|
|
2165
|
+
rerank: response.rerank,
|
|
2166
|
+
runtimeFieldFilters: response.runtimeFieldFilters
|
|
2167
|
+
}),
|
|
2168
|
+
projection: {
|
|
2169
|
+
mode: response.projection.mode,
|
|
2170
|
+
fields: projectionFields
|
|
2171
|
+
},
|
|
2172
|
+
now: nowIso()
|
|
2173
|
+
}, response.warnings);
|
|
2174
|
+
}
|
|
2175
|
+
function withSearchWarnings(result, warnings) {
|
|
2176
|
+
if (warnings.length === 0) {
|
|
2177
|
+
return result;
|
|
2119
2178
|
}
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
...hit,
|
|
2126
|
-
highlights: buildHitHighlights(documentById.get(hit.item.id), hit.matched_fields, tokens)
|
|
2127
|
-
}));
|
|
2128
|
-
if (projection.mode !== "full" && !projection.fields.includes("highlights")) {
|
|
2129
|
-
effectiveProjection = { mode: projection.mode, fields: [...projection.fields, "highlights"] };
|
|
2130
|
-
}
|
|
2179
|
+
return { ...result, warnings };
|
|
2180
|
+
}
|
|
2181
|
+
function attachSearchHighlights(prepared, filteredDocuments, limited) {
|
|
2182
|
+
if (!prepared.highlight) {
|
|
2183
|
+
return { hits: limited, projection: prepared.projection };
|
|
2131
2184
|
}
|
|
2132
|
-
const
|
|
2133
|
-
const
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
query: query.trim(),
|
|
2149
|
-
mode: effectiveMode,
|
|
2185
|
+
const documentById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
|
|
2186
|
+
const hits = limited.map((hit) => ({
|
|
2187
|
+
...hit,
|
|
2188
|
+
highlights: buildHitHighlights(documentById.get(hit.item.id), hit.matched_fields, prepared.tokens)
|
|
2189
|
+
}));
|
|
2190
|
+
if (prepared.projection.mode === "full" || prepared.projection.fields.includes("highlights")) {
|
|
2191
|
+
return { hits, projection: prepared.projection };
|
|
2192
|
+
}
|
|
2193
|
+
return { hits, projection: { mode: prepared.projection.mode, fields: [...prepared.projection.fields, "highlights"] } };
|
|
2194
|
+
}
|
|
2195
|
+
function buildSearchResultForHits(response, projectedItems, total, limitedCount, effectiveProjection) {
|
|
2196
|
+
const truncationExtras = limitedCount < total ? { total } : {};
|
|
2197
|
+
if (response.projection.mode === "compact" && response.options.compact === true) {
|
|
2198
|
+
return withSearchWarnings({
|
|
2199
|
+
query: response.query.trim(),
|
|
2200
|
+
mode: response.effectiveMode,
|
|
2150
2201
|
items: projectedItems,
|
|
2151
2202
|
count: projectedItems.length,
|
|
2152
2203
|
...truncationExtras,
|
|
2153
|
-
filters:
|
|
2154
|
-
|
|
2155
|
-
|
|
2204
|
+
filters: buildCompactSearchFilterSummary({
|
|
2205
|
+
mode: response.effectiveMode,
|
|
2206
|
+
matchMode: response.matchMode,
|
|
2207
|
+
options: response.options,
|
|
2208
|
+
includeLinked: response.includeLinked,
|
|
2209
|
+
titleExact: response.titleExact,
|
|
2210
|
+
phraseExact: response.phraseExact,
|
|
2211
|
+
scoreThreshold: response.scoreThreshold,
|
|
2212
|
+
hybridSemanticWeight: response.hybridSemanticWeight,
|
|
2213
|
+
runtimeFieldFilters: response.runtimeFieldFilters
|
|
2214
|
+
})
|
|
2215
|
+
}, response.warnings);
|
|
2156
2216
|
}
|
|
2217
|
+
const finalProjectionFields = effectiveProjection.mode === "full" ? null : [...effectiveProjection.fields];
|
|
2157
2218
|
return {
|
|
2158
|
-
query: query.trim(),
|
|
2159
|
-
mode: effectiveMode,
|
|
2219
|
+
query: response.query.trim(),
|
|
2220
|
+
mode: response.effectiveMode,
|
|
2160
2221
|
items: projectedItems,
|
|
2161
2222
|
count: projectedItems.length,
|
|
2162
2223
|
...truncationExtras,
|
|
2163
2224
|
filters: buildVerboseSearchFilters({
|
|
2164
|
-
effectiveMode,
|
|
2165
|
-
matchMode,
|
|
2166
|
-
options,
|
|
2167
|
-
includeLinked,
|
|
2168
|
-
titleExact,
|
|
2169
|
-
phraseExact,
|
|
2170
|
-
scoreThreshold,
|
|
2171
|
-
hybridSemanticWeight,
|
|
2172
|
-
queryExpansion,
|
|
2173
|
-
rerank,
|
|
2174
|
-
runtimeFieldFilters
|
|
2225
|
+
effectiveMode: response.effectiveMode,
|
|
2226
|
+
matchMode: response.matchMode,
|
|
2227
|
+
options: response.options,
|
|
2228
|
+
includeLinked: response.includeLinked,
|
|
2229
|
+
titleExact: response.titleExact,
|
|
2230
|
+
phraseExact: response.phraseExact,
|
|
2231
|
+
scoreThreshold: response.scoreThreshold,
|
|
2232
|
+
hybridSemanticWeight: response.hybridSemanticWeight,
|
|
2233
|
+
queryExpansion: response.queryExpansion,
|
|
2234
|
+
rerank: response.rerank,
|
|
2235
|
+
runtimeFieldFilters: response.runtimeFieldFilters
|
|
2175
2236
|
}),
|
|
2176
2237
|
projection: {
|
|
2177
2238
|
mode: effectiveProjection.mode,
|
|
2178
2239
|
fields: finalProjectionFields
|
|
2179
2240
|
},
|
|
2180
2241
|
now: nowIso(),
|
|
2181
|
-
...warnings.length > 0 ? { warnings } : {}
|
|
2242
|
+
...response.warnings.length > 0 ? { warnings: response.warnings } : {}
|
|
2182
2243
|
};
|
|
2183
2244
|
}
|
|
2245
|
+
async function runSearch(rawQuery, rawOptions, global) {
|
|
2246
|
+
const prepared = prepareSearchInput(rawQuery, rawOptions);
|
|
2247
|
+
const runtime = await resolveSearchRuntimeContext(prepared, global);
|
|
2248
|
+
const corpus = await loadFilteredSearchCorpus(prepared, runtime);
|
|
2249
|
+
const warnings = corpus.warnings;
|
|
2250
|
+
warnings.push(...prepared.inlineWarnings);
|
|
2251
|
+
if (runtime.effectiveMode === "hybrid" && runtime.semanticWeightProvided && runtime.semanticWeightOverride === void 0) {
|
|
2252
|
+
warnings.push("search_hybrid_semantic_weight_override_invalid:using_settings_default");
|
|
2253
|
+
}
|
|
2254
|
+
const responseBase = {
|
|
2255
|
+
query: prepared.query,
|
|
2256
|
+
matchMode: prepared.matchMode,
|
|
2257
|
+
options: prepared.options,
|
|
2258
|
+
includeLinked: prepared.includeLinked,
|
|
2259
|
+
titleExact: prepared.titleExact,
|
|
2260
|
+
phraseExact: prepared.phraseExact,
|
|
2261
|
+
scoreThreshold: runtime.scoreThreshold,
|
|
2262
|
+
hybridSemanticWeight: runtime.hybridSemanticWeight,
|
|
2263
|
+
queryExpansion: runtime.queryExpansion,
|
|
2264
|
+
rerank: runtime.rerank,
|
|
2265
|
+
projection: prepared.projection,
|
|
2266
|
+
warnings,
|
|
2267
|
+
runtimeFieldFilters: runtime.runtimeFieldFilters
|
|
2268
|
+
};
|
|
2269
|
+
if (runtime.effectiveMode === "keyword" && (corpus.filteredDocuments.length === 0 || prepared.limit === 0)) {
|
|
2270
|
+
return buildEmptySearchResultFromContext({ ...responseBase, effectiveMode: runtime.effectiveMode }, prepared.countOnly);
|
|
2271
|
+
}
|
|
2272
|
+
const keywordHits = await computeKeywordSearchHits(prepared, runtime, corpus.filteredDocuments);
|
|
2273
|
+
const modeResult = await executeSemanticSearch({
|
|
2274
|
+
prepared,
|
|
2275
|
+
runtime,
|
|
2276
|
+
filteredDocuments: corpus.filteredDocuments,
|
|
2277
|
+
keywordHits,
|
|
2278
|
+
warnings,
|
|
2279
|
+
modeWasExplicit: prepared.modeWasExplicit
|
|
2280
|
+
});
|
|
2281
|
+
if (modeResult.effectiveMode !== "keyword" && modeResult.hits.length === 0 && (corpus.filteredDocuments.length === 0 || prepared.limit === 0)) {
|
|
2282
|
+
return buildEmptySearchResultFromContext({ ...responseBase, effectiveMode: modeResult.effectiveMode }, prepared.countOnly);
|
|
2283
|
+
}
|
|
2284
|
+
const thresholded = modeResult.hits.filter((entry) => entry.exact_id_match === true || entry.score >= runtime.scoreThreshold);
|
|
2285
|
+
const sorted = sortHits(thresholded, runtime.statusRegistry);
|
|
2286
|
+
const total = sorted.length;
|
|
2287
|
+
const resolvedLimit = prepared.limit ?? runtime.maxResults;
|
|
2288
|
+
const limited = sorted.slice(0, resolvedLimit);
|
|
2289
|
+
const response = { ...responseBase, effectiveMode: modeResult.effectiveMode };
|
|
2290
|
+
if (prepared.countOnly) {
|
|
2291
|
+
return buildCountOnlySearchResult(response, total);
|
|
2292
|
+
}
|
|
2293
|
+
const { hits: projectedHits, projection: effectiveProjection } = attachSearchHighlights(prepared, corpus.filteredDocuments, limited);
|
|
2294
|
+
const projectedItems = projectSearchHits(projectedHits, effectiveProjection);
|
|
2295
|
+
return buildSearchResultForHits(response, projectedItems, total, limited.length, effectiveProjection);
|
|
2296
|
+
}
|
|
2184
2297
|
|
|
2185
2298
|
export {
|
|
2186
2299
|
collectErrorCauseCodes,
|
|
@@ -2192,6 +2305,6 @@ export {
|
|
|
2192
2305
|
resolveSearchTuning,
|
|
2193
2306
|
runSearch
|
|
2194
2307
|
};
|
|
2195
|
-
//# sourceMappingURL=chunk-
|
|
2308
|
+
//# sourceMappingURL=chunk-SYVUU7EK.js.map
|
|
2196
2309
|
|
|
2197
|
-
//# debugId=
|
|
2310
|
+
//# debugId=02364b53-8625-5d05-90d9-1234e6d63964
|