@unbrained/pm-cli 2026.6.13 → 2026.6.16
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/CHANGELOG.md +84 -0
- package/README.md +1 -1
- package/dist/cli/bootstrap-args.d.ts +29 -0
- package/dist/cli/bootstrap-args.js +11 -4
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.d.ts +12 -0
- package/dist/cli/commander-usage.js +18 -7
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/activity.d.ts +19 -0
- package/dist/cli/commands/activity.js +12 -2
- package/dist/cli/commands/activity.js.map +1 -1
- package/dist/cli/commands/aggregate.d.ts +58 -0
- package/dist/cli/commands/aggregate.js +48 -15
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/annotation-command.d.ts +6 -1
- package/dist/cli/commands/annotation-command.js +72 -2
- package/dist/cli/commands/annotation-command.js.map +1 -1
- package/dist/cli/commands/append.js +4 -3
- package/dist/cli/commands/append.js.map +1 -1
- package/dist/cli/commands/close-many.d.ts +20 -0
- package/dist/cli/commands/close-many.js +14 -23
- package/dist/cli/commands/close-many.js.map +1 -1
- package/dist/cli/commands/close.js +37 -4
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.js +3 -2
- package/dist/cli/commands/comments-audit.js.map +1 -1
- package/dist/cli/commands/comments.d.ts +2 -0
- package/dist/cli/commands/comments.js +49 -23
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/completion.js +269 -8
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.d.ts +51 -1
- package/dist/cli/commands/config.js +50 -12
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.d.ts +79 -1
- package/dist/cli/commands/context.js +151 -25
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.d.ts +80 -1
- package/dist/cli/commands/contracts.js +54 -4
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.d.ts +49 -0
- package/dist/cli/commands/create.js +105 -7
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.d.ts +33 -0
- package/dist/cli/commands/dedupe-audit.js +18 -14
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/deps.js +7 -4
- package/dist/cli/commands/deps.js.map +1 -1
- package/dist/cli/commands/event-validation-messages.js +3 -3
- package/dist/cli/commands/event-validation-messages.js.map +1 -1
- package/dist/cli/commands/extension/bundled-catalog.d.ts +7 -0
- package/dist/cli/commands/extension/bundled-catalog.js +19 -15
- package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
- package/dist/cli/commands/extension/install-sources.d.ts +41 -1
- package/dist/cli/commands/extension/install-sources.js +26 -8
- package/dist/cli/commands/extension/install-sources.js.map +1 -1
- package/dist/cli/commands/extension/shared.d.ts +5 -0
- package/dist/cli/commands/extension/shared.js +9 -3
- package/dist/cli/commands/extension/shared.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +133 -1
- package/dist/cli/commands/extension.js +127 -9
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/files.d.ts +30 -1
- package/dist/cli/commands/files.js +21 -2
- package/dist/cli/commands/files.js.map +1 -1
- package/dist/cli/commands/focus.d.ts +11 -0
- package/dist/cli/commands/focus.js +86 -0
- package/dist/cli/commands/focus.js.map +1 -0
- package/dist/cli/commands/get.d.ts +9 -2
- package/dist/cli/commands/get.js +34 -6
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/guide.d.ts +5 -0
- package/dist/cli/commands/guide.js +6 -3
- package/dist/cli/commands/guide.js.map +1 -1
- package/dist/cli/commands/health.d.ts +109 -0
- package/dist/cli/commands/health.js +87 -35
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-compact.js +27 -36
- package/dist/cli/commands/history-compact.js.map +1 -1
- package/dist/cli/commands/history-redact.d.ts +46 -0
- package/dist/cli/commands/history-redact.js +99 -67
- package/dist/cli/commands/history-redact.js.map +1 -1
- package/dist/cli/commands/history-repair.js +34 -37
- package/dist/cli/commands/history-repair.js.map +1 -1
- package/dist/cli/commands/history.js +6 -2
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +3 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init-agent-guidance.d.ts +54 -0
- package/dist/cli/commands/init-agent-guidance.js +31 -4
- package/dist/cli/commands/init-agent-guidance.js.map +1 -1
- package/dist/cli/commands/init.d.ts +36 -1
- package/dist/cli/commands/init.js +38 -5
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learnings.js +4 -3
- package/dist/cli/commands/learnings.js.map +1 -1
- package/dist/cli/commands/linked-test-parsers.d.ts +5 -0
- package/dist/cli/commands/linked-test-parsers.js +5 -2
- package/dist/cli/commands/linked-test-parsers.js.map +1 -1
- package/dist/cli/commands/list-filter-shared.d.ts +8 -0
- package/dist/cli/commands/list-filter-shared.js +70 -0
- package/dist/cli/commands/list-filter-shared.js.map +1 -0
- package/dist/cli/commands/list.d.ts +116 -0
- package/dist/cli/commands/list.js +194 -6
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/normalize.js +16 -2
- package/dist/cli/commands/normalize.js.map +1 -1
- package/dist/cli/commands/notes.js +4 -3
- package/dist/cli/commands/notes.js.map +1 -1
- package/dist/cli/commands/plan.js +3 -2
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +83 -0
- package/dist/cli/commands/reindex.js +45 -10
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +40 -1
- package/dist/cli/commands/restore.js +27 -2
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.d.ts +18 -0
- package/dist/cli/commands/schema.js +30 -3
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +289 -1
- package/dist/cli/commands/search.js +367 -60
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +38 -0
- package/dist/cli/commands/stats.js +38 -10
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/telemetry.js +5 -3
- package/dist/cli/commands/telemetry.js.map +1 -1
- package/dist/cli/commands/templates.d.ts +18 -0
- package/dist/cli/commands/templates.js +9 -2
- package/dist/cli/commands/templates.js.map +1 -1
- package/dist/cli/commands/test-all.d.ts +5 -0
- package/dist/cli/commands/test-all.js +9 -3
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test.d.ts +70 -1
- package/dist/cli/commands/test.js +84 -3
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.d.ts +34 -1
- package/dist/cli/commands/update-many.js +60 -31
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +71 -0
- package/dist/cli/commands/update.js +74 -8
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts +28 -1
- package/dist/cli/commands/upgrade.js +17 -4
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +114 -0
- package/dist/cli/commands/validate.js +153 -8
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.d.ts +30 -0
- package/dist/cli/error-guidance.js +41 -6
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-options.js +9 -7
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/help-content.d.ts +8 -0
- package/dist/cli/help-content.js +30 -6
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/help-json-payload.d.ts +19 -1
- package/dist/cli/help-json-payload.js +16 -7
- package/dist/cli/help-json-payload.js.map +1 -1
- package/dist/cli/main.d.ts +223 -0
- package/dist/cli/main.js +203 -45
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +62 -5
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.d.ts +16 -0
- package/dist/cli/register-mutation.js +210 -40
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.d.ts +8 -0
- package/dist/cli/register-operations.js +33 -11
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +9 -6
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.d.ts +4 -0
- package/dist/cli/registration-helpers.js +124 -38
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-5P2KQCTH.js +18 -0
- package/dist/cli-bundle/chunks/{activity-PPO7QWJF.js → activity-MJGTX4LO.js} +13 -11
- package/dist/cli-bundle/chunks/{aggregate-XEBW22UQ.js → aggregate-MH3GROKB.js} +54 -25
- package/dist/cli-bundle/chunks/aggregate-MH3GROKB.js.map +7 -0
- package/dist/cli-bundle/chunks/{aggregate-IRHJWEKG.js → aggregate-OUGCDFNC.js} +55 -26
- package/dist/cli-bundle/chunks/aggregate-OUGCDFNC.js.map +1 -0
- package/dist/cli-bundle/chunks/{append-N2AWXKZC.js → append-2Q4BPUBW.js} +10 -10
- package/dist/cli-bundle/chunks/{append-N2AWXKZC.js.map → append-2Q4BPUBW.js.map} +2 -2
- package/dist/cli-bundle/chunks/{append-NL67JNJU.js → append-VCRUG2W6.js} +11 -11
- package/dist/cli-bundle/chunks/append-VCRUG2W6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-GRZGHGRG.js → chunk-2IUJBMKS.js} +10 -9
- package/dist/cli-bundle/chunks/{chunk-GRZGHGRG.js.map → chunk-2IUJBMKS.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-6ZFTM65G.js → chunk-2JEGCDYT.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3CQPVBK3.js → chunk-3WAULYOY.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-AGG32LKL.js → chunk-3XOXWOGA.js} +359 -19
- package/dist/cli-bundle/chunks/chunk-3XOXWOGA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XXLMJDUB.js → chunk-4KBK4BA3.js} +13 -15
- package/dist/cli-bundle/chunks/chunk-4KBK4BA3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UCVJP4JL.js → chunk-4VLB4JH2.js} +51 -8
- package/dist/cli-bundle/chunks/chunk-4VLB4JH2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BVL5KGVA.js → chunk-656HPQPO.js} +27 -12
- package/dist/cli-bundle/chunks/chunk-656HPQPO.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-LYNQ3NGI.js → chunk-667XI4UJ.js} +309 -20
- package/dist/cli-bundle/chunks/chunk-667XI4UJ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-W6KNFAMZ.js → chunk-6BV7ENQL.js} +9 -8
- package/dist/cli-bundle/chunks/chunk-6BV7ENQL.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-6EFCFPNE.js +35 -0
- package/dist/cli-bundle/chunks/chunk-6EFCFPNE.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7SM7VA5I.js → chunk-6NQXMGYU.js} +19 -8
- package/dist/cli-bundle/chunks/chunk-6NQXMGYU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-AAUYXSFF.js → chunk-764O7EUA.js} +223 -50
- package/dist/cli-bundle/chunks/chunk-764O7EUA.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VYZNX4C5.js → chunk-7AGIXLNK.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-7EILPFMA.js +404 -0
- package/dist/cli-bundle/chunks/chunk-7EILPFMA.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-L6YQONLM.js → chunk-7K2MXFMX.js} +11 -13
- package/dist/cli-bundle/chunks/chunk-7K2MXFMX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HZOX5BYD.js → chunk-7L5VOUYP.js} +6 -17
- package/dist/cli-bundle/chunks/chunk-7L5VOUYP.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-7ZGKNHUL.js +61 -0
- package/dist/cli-bundle/chunks/chunk-7ZGKNHUL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TOX7YQ7X.js → chunk-A576QZDL.js} +223 -50
- package/dist/cli-bundle/chunks/chunk-A576QZDL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RFR2YQGO.js → chunk-AERT7KT3.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-ASM4DVRW.js +58 -0
- package/dist/cli-bundle/chunks/chunk-ASM4DVRW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SQDKAEKG.js → chunk-B5Q7XC4K.js} +117 -37
- package/dist/cli-bundle/chunks/chunk-B5Q7XC4K.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RHYBR6G7.js → chunk-BJWTFOZM.js} +74 -14
- package/dist/cli-bundle/chunks/chunk-BJWTFOZM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4ZKKZMLH.js → chunk-CBMETQ2U.js} +104 -30
- package/dist/cli-bundle/chunks/chunk-CBMETQ2U.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XOYHMHFF.js → chunk-E6J2PEK6.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-IIOIBAQW.js → chunk-F2GC6L3N.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-3VULHQNS.js → chunk-F7WSO5UX.js} +7 -18
- package/dist/cli-bundle/chunks/chunk-F7WSO5UX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JCTZV7TO.js → chunk-FTAZLAR7.js} +8 -5
- package/dist/cli-bundle/chunks/{chunk-JCTZV7TO.js.map → chunk-FTAZLAR7.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-AUDDXKNX.js → chunk-FXNT5LPX.js} +77 -9
- package/dist/cli-bundle/chunks/chunk-FXNT5LPX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IZHCCG4S.js → chunk-G2YVUY7I.js} +14 -9
- package/dist/cli-bundle/chunks/chunk-G2YVUY7I.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5HSAHRYA.js → chunk-G3CEIXTV.js} +68 -19
- package/dist/cli-bundle/chunks/chunk-G3CEIXTV.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QQG4HEX7.js → chunk-GAVE4MYM.js} +37 -63
- package/dist/cli-bundle/chunks/chunk-GAVE4MYM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-3FMQMHAG.js → chunk-GQ4JKNMV.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3FMQMHAG.js.map → chunk-GQ4JKNMV.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-MACCNKSZ.js → chunk-GYMG7AG6.js} +36 -62
- package/dist/cli-bundle/chunks/chunk-GYMG7AG6.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7CRFV6JR.js → chunk-H6EH6ENJ.js} +362 -22
- package/dist/cli-bundle/chunks/chunk-H6EH6ENJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-2J2AH4V5.js → chunk-HDIDUME4.js} +45 -13
- package/dist/cli-bundle/chunks/chunk-HDIDUME4.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2ANTZBYF.js → chunk-HPELHUTG.js} +122 -45
- package/dist/cli-bundle/chunks/chunk-HPELHUTG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-VNC2HBL4.js → chunk-II7OGE3V.js} +20 -9
- package/dist/cli-bundle/chunks/chunk-II7OGE3V.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CEGUH2E5.js → chunk-ILHLIA47.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-CEGUH2E5.js.map → chunk-ILHLIA47.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-4TPFXE2R.js → chunk-IMQG4VR3.js} +118 -74
- package/dist/cli-bundle/chunks/chunk-IMQG4VR3.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-MGAQ6KZG.js → chunk-IQVB3YDD.js} +82 -21
- package/dist/cli-bundle/chunks/chunk-IQVB3YDD.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-WLH7X4RN.js → chunk-KQ3LAMDO.js} +45 -13
- package/dist/cli-bundle/chunks/chunk-KQ3LAMDO.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-S2CDTRJ6.js → chunk-KTVETP66.js} +379 -271
- package/dist/cli-bundle/chunks/chunk-KTVETP66.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-36BCSMKP.js → chunk-KZYVTOG5.js} +26 -11
- package/dist/cli-bundle/chunks/chunk-KZYVTOG5.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-XWDZVCBJ.js → chunk-L6FJPOT4.js} +11 -10
- package/dist/cli-bundle/chunks/{chunk-XWDZVCBJ.js.map → chunk-L6FJPOT4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-LFW5NQUP.js → chunk-LV5FFQ7M.js} +405 -290
- package/dist/cli-bundle/chunks/chunk-LV5FFQ7M.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PNYAAB4S.js → chunk-LWGMDLQ6.js} +8 -3
- package/dist/cli-bundle/chunks/chunk-LWGMDLQ6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-QU3OPNVV.js → chunk-M23HXJL3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LSSTKL3Y.js → chunk-MJZUZ2QE.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-LOAR5TKX.js → chunk-NCIBNERT.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-LOAR5TKX.js.map → chunk-NCIBNERT.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-6TBR5AZ2.js → chunk-NIQHNDBZ.js} +76 -8
- package/dist/cli-bundle/chunks/chunk-NIQHNDBZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-Z647PYLD.js → chunk-O46LTCXQ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-GFBEXDCQ.js → chunk-OCTQJP42.js} +19 -8
- package/dist/cli-bundle/chunks/{chunk-GFBEXDCQ.js.map → chunk-OCTQJP42.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HLEGAQXT.js → chunk-OLTYNVJR.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-IXVSSHGV.js → chunk-OY3P2I6B.js} +13 -8
- package/dist/cli-bundle/chunks/chunk-OY3P2I6B.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KHGTYCJ6.js → chunk-PZD7WPUC.js} +69 -20
- package/dist/cli-bundle/chunks/chunk-PZD7WPUC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4FHLNNW7.js → chunk-Q5RLUCP3.js} +74 -14
- package/dist/cli-bundle/chunks/chunk-Q5RLUCP3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-SOHXUA2Q.js → chunk-RKKIH2ZQ.js} +116 -36
- package/dist/cli-bundle/chunks/chunk-RKKIH2ZQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-O3YCJOVX.js → chunk-SPYPC5CB.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-O3YCJOVX.js.map → chunk-SPYPC5CB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-SGMGMCIF.js → chunk-SY4GKIWT.js} +82 -21
- package/dist/cli-bundle/chunks/chunk-SY4GKIWT.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5LMF75Q7.js → chunk-SY4PZWIZ.js} +7 -4
- package/dist/cli-bundle/chunks/{chunk-5LMF75Q7.js.map → chunk-SY4PZWIZ.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HWHONML5.js → chunk-T5VU7ROQ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JWXTOYBI.js → chunk-TIRZIQRP.js} +121 -44
- package/dist/cli-bundle/chunks/chunk-TIRZIQRP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PEH7SZD2.js → chunk-TUB3DZAZ.js} +105 -31
- package/dist/cli-bundle/chunks/chunk-TUB3DZAZ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-UAR2VNCK.js +394 -0
- package/dist/cli-bundle/chunks/chunk-UAR2VNCK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NN6RKGFW.js → chunk-UBMCSJXX.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JE5IZXDS.js → chunk-UUKORJSN.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-R4VWYWRN.js → chunk-W3HFLORZ.js} +7 -2
- package/dist/cli-bundle/chunks/chunk-W3HFLORZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-LGOXXQUW.js → chunk-WZCQVABQ.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-X3W5ESZQ.js +32 -0
- package/dist/cli-bundle/chunks/chunk-X3W5ESZQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-M3SI2REU.js → chunk-XLNNCKTN.js} +322 -19
- package/dist/cli-bundle/chunks/chunk-XLNNCKTN.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4JHJ7YG2.js → chunk-XNOY7TCB.js} +118 -74
- package/dist/cli-bundle/chunks/chunk-XNOY7TCB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DWG4FHPY.js → chunk-YGRPBFMA.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JW7D6437.js → chunk-YXTLI4XP.js} +20 -9
- package/dist/cli-bundle/chunks/chunk-YXTLI4XP.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-TSXWFN3L.js → chunk-Z3MUNQRV.js} +52 -9
- package/dist/cli-bundle/chunks/chunk-Z3MUNQRV.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-GOO4UXBI.js → chunk-ZJRDVYZI.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-32XSW44C.js → chunk-ZONXMSVB.js} +10 -9
- package/dist/cli-bundle/chunks/chunk-ZONXMSVB.js.map +1 -0
- package/dist/cli-bundle/chunks/{claim-QJOQBH7J.js → claim-4APLUXJW.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-HE6KEGJW.js → claim-NEO7AGWH.js} +10 -10
- package/dist/cli-bundle/chunks/{close-SPUFW5QR.js → close-3QABBNGU.js} +8 -8
- package/dist/cli-bundle/chunks/close-ILMZR3D7.js +13 -0
- package/dist/cli-bundle/chunks/{close-many-GKAJX54X.js → close-many-MIZLTYGL.js} +32 -20
- package/dist/cli-bundle/chunks/close-many-MIZLTYGL.js.map +1 -0
- package/dist/cli-bundle/chunks/{close-many-GL6NRUU5.js → close-many-Q7Y5AHQI.js} +31 -19
- package/dist/cli-bundle/chunks/close-many-Q7Y5AHQI.js.map +7 -0
- package/dist/cli-bundle/chunks/{comments-5FPT6L7N.js → comments-DAIQPOMU.js} +55 -31
- package/dist/cli-bundle/chunks/comments-DAIQPOMU.js.map +1 -0
- package/dist/cli-bundle/chunks/{comments-TOLOYWNI.js → comments-IWFSVM4P.js} +54 -30
- package/dist/cli-bundle/chunks/comments-IWFSVM4P.js.map +7 -0
- package/dist/cli-bundle/chunks/{config-4MN45TIH.js → config-IOJELD6O.js} +45 -19
- package/dist/cli-bundle/chunks/config-IOJELD6O.js.map +1 -0
- package/dist/cli-bundle/chunks/{config-7N6D7YJE.js → config-PXTMAYV3.js} +44 -18
- package/dist/cli-bundle/chunks/config-PXTMAYV3.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-AQSLE7DZ.js → context-QHJSCJW4.js} +128 -39
- package/dist/cli-bundle/chunks/context-QHJSCJW4.js.map +1 -0
- package/dist/cli-bundle/chunks/{context-U3PUJMVN.js → context-XZS2VFKU.js} +127 -38
- package/dist/cli-bundle/chunks/context-XZS2VFKU.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-ITSJXO3O.js → contracts-B7U4OJTV.js} +54 -10
- package/dist/cli-bundle/chunks/contracts-B7U4OJTV.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-H7KCQXLY.js → contracts-NSBVLXQ3.js} +54 -10
- package/dist/cli-bundle/chunks/contracts-NSBVLXQ3.js.map +7 -0
- package/dist/cli-bundle/chunks/{copy-EB3MUCSW.js → copy-Q64T5FD4.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-C4W522JM.js → copy-SG34LCMU.js} +7 -7
- package/dist/cli-bundle/chunks/create-F5HZX2S4.js +30 -0
- package/dist/cli-bundle/chunks/{create-4EQNELMY.js → create-IPAX2SNL.js} +16 -13
- package/dist/cli-bundle/chunks/{delete-ZLGUYIXU.js → delete-TLXR7LJ2.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-X5QLXIQX.js → delete-VH3L7DZ6.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-GPB3LGWN.js → deps-J3HBBLDB.js} +9 -10
- package/dist/cli-bundle/chunks/{deps-GPB3LGWN.js.map → deps-J3HBBLDB.js.map} +2 -2
- package/dist/cli-bundle/chunks/{deps-HV2C2L46.js → deps-XV6JJ6IN.js} +10 -11
- package/dist/cli-bundle/chunks/deps-XV6JJ6IN.js.map +1 -0
- package/dist/cli-bundle/chunks/{docs-SRTLCQOL.js → docs-GWDEB7JH.js} +9 -9
- package/dist/cli-bundle/chunks/{docs-RJQPLROO.js → docs-RCLNSKID.js} +9 -9
- package/dist/cli-bundle/chunks/{extension-MM3TVWOO.js → extension-5RN65LHT.js} +7 -5
- package/dist/cli-bundle/chunks/{extension-WKPVPNCC.js → extension-7KO2NX2A.js} +7 -5
- package/dist/cli-bundle/chunks/{files-OIFN3DQX.js → files-3TCQHUHA.js} +25 -11
- package/dist/cli-bundle/chunks/files-3TCQHUHA.js.map +1 -0
- package/dist/cli-bundle/chunks/{files-LIFDKNCN.js → files-5FDUPSEA.js} +24 -10
- package/dist/cli-bundle/chunks/files-5FDUPSEA.js.map +7 -0
- package/dist/cli-bundle/chunks/focus-7AQMNRSU.js +109 -0
- package/dist/cli-bundle/chunks/focus-7AQMNRSU.js.map +7 -0
- package/dist/cli-bundle/chunks/focus-HQXBYPKM.js +106 -0
- package/dist/cli-bundle/chunks/focus-HQXBYPKM.js.map +1 -0
- package/dist/cli-bundle/chunks/{gc-DL6AVOX5.js → gc-2FGKYRJ4.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-NRFHLVFT.js → gc-5B6ABL3Z.js} +3 -3
- package/dist/cli-bundle/chunks/{get-SAB7CRBG.js → get-FUMVOJQD.js} +43 -16
- package/dist/cli-bundle/chunks/get-FUMVOJQD.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-K7UULTQF.js → get-H5BZTW4A.js} +42 -15
- package/dist/cli-bundle/chunks/get-H5BZTW4A.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-NUVZYIEV.js → health-JSVOR6B4.js} +75 -49
- package/dist/cli-bundle/chunks/health-JSVOR6B4.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-VJWH3ZFK.js → health-LE2ZQGSM.js} +74 -48
- package/dist/cli-bundle/chunks/health-LE2ZQGSM.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-GYFD2DJW.js → history-QO4JVJJP.js} +10 -10
- package/dist/cli-bundle/chunks/history-SSXGGTVZ.js +20 -0
- package/dist/cli-bundle/chunks/{history-compact-WQZQ6KXM.js → history-compact-ID74DOUI.js} +37 -46
- package/dist/cli-bundle/chunks/history-compact-ID74DOUI.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-compact-SLL6ESXH.js → history-compact-SDFRPZ4V.js} +38 -47
- package/dist/cli-bundle/chunks/history-compact-SDFRPZ4V.js.map +1 -0
- package/dist/cli-bundle/chunks/history-redact-VBH44Y7F.js +21 -0
- package/dist/cli-bundle/chunks/{history-redact-SDTDR6WM.js → history-redact-Z4P5MM3G.js} +13 -11
- package/dist/cli-bundle/chunks/{history-repair-UCYS55ZX.js → history-repair-ANHEYWKF.js} +43 -48
- package/dist/cli-bundle/chunks/history-repair-ANHEYWKF.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-repair-BJCGM6Q3.js → history-repair-CKE7GLZR.js} +44 -49
- package/dist/cli-bundle/chunks/history-repair-CKE7GLZR.js.map +1 -0
- package/dist/cli-bundle/chunks/init-7FBQO77A.js +19 -0
- package/dist/cli-bundle/chunks/{init-MXV57LKL.js → init-K6MSMB37.js} +11 -9
- package/dist/cli-bundle/chunks/{learnings-QKJOKEAO.js → learnings-VIS3NOQV.js} +13 -12
- package/dist/cli-bundle/chunks/learnings-VIS3NOQV.js.map +7 -0
- package/dist/cli-bundle/chunks/{learnings-L6KTZGOT.js → learnings-YYNB64GN.js} +14 -13
- package/dist/cli-bundle/chunks/learnings-YYNB64GN.js.map +1 -0
- package/dist/cli-bundle/chunks/list-7UE44A2R.js +29 -0
- package/dist/cli-bundle/chunks/list-UHMA3N2K.js +33 -0
- package/dist/cli-bundle/chunks/{notes-3NLK7WTZ.js → notes-2HRMV67I.js} +14 -13
- package/dist/cli-bundle/chunks/notes-2HRMV67I.js.map +1 -0
- package/dist/cli-bundle/chunks/{notes-HMCB7TK6.js → notes-IN3UMA7W.js} +13 -12
- package/dist/cli-bundle/chunks/notes-IN3UMA7W.js.map +7 -0
- package/dist/cli-bundle/chunks/{plan-DWBYI5C6.js → plan-I3SVH7FV.js} +16 -15
- package/dist/cli-bundle/chunks/plan-I3SVH7FV.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-NANUWH4T.js → plan-PAWCCAPW.js} +15 -14
- package/dist/cli-bundle/chunks/plan-PAWCCAPW.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-PWQ5F2VI.js → register-list-query-N7Z7RTDM.js} +31 -22
- package/dist/cli-bundle/chunks/register-list-query-N7Z7RTDM.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-SMMMLSWW.js → register-list-query-OTIK4DVA.js} +32 -23
- package/dist/cli-bundle/chunks/register-list-query-OTIK4DVA.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-QKFPTIZG.js → register-mutation-UFZK6Q57.js} +216 -66
- package/dist/cli-bundle/chunks/register-mutation-UFZK6Q57.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-ZYJQ4DVP.js → register-mutation-XFORLS6D.js} +210 -67
- package/dist/cli-bundle/chunks/register-mutation-XFORLS6D.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-2FMZ6WEF.js → register-operations-6ZCLKRBG.js} +53 -39
- package/dist/cli-bundle/chunks/register-operations-6ZCLKRBG.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-BAFQURZG.js → register-operations-ITE7JTH3.js} +54 -40
- package/dist/cli-bundle/chunks/register-operations-ITE7JTH3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-QN2XV7UL.js → register-setup-7RKGE4BQ.js} +18 -21
- package/dist/cli-bundle/chunks/register-setup-7RKGE4BQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-DQEIKBIP.js → register-setup-7UKEFKT6.js} +17 -20
- package/dist/cli-bundle/chunks/register-setup-7UKEFKT6.js.map +7 -0
- package/dist/cli-bundle/chunks/{restore-FJQWXMPY.js → restore-NNVPBBVJ.js} +13 -11
- package/dist/cli-bundle/chunks/restore-XXXLQ2XC.js +19 -0
- package/dist/cli-bundle/chunks/{schema-RNVJ55V2.js → schema-3HCLXCFX.js} +27 -9
- package/dist/cli-bundle/chunks/schema-3HCLXCFX.js.map +7 -0
- package/dist/cli-bundle/chunks/{schema-ZZ7ZDM2X.js → schema-3YKCQ3VO.js} +28 -10
- package/dist/cli-bundle/chunks/schema-3YKCQ3VO.js.map +1 -0
- package/dist/cli-bundle/chunks/{search-BJ457C2A.js → search-NQ42NC6A.js} +328 -71
- package/dist/cli-bundle/chunks/search-NQ42NC6A.js.map +7 -0
- package/dist/cli-bundle/chunks/{search-FQDZXX7P.js → search-V7PZ2ICH.js} +328 -71
- package/dist/cli-bundle/chunks/search-V7PZ2ICH.js.map +1 -0
- package/dist/cli-bundle/chunks/{stats-DUQWCVOS.js → stats-7KD4PJC5.js} +41 -16
- package/dist/cli-bundle/chunks/stats-7KD4PJC5.js.map +7 -0
- package/dist/cli-bundle/chunks/{stats-CUG3ZHOI.js → stats-GRHO6RFB.js} +42 -17
- package/dist/cli-bundle/chunks/stats-GRHO6RFB.js.map +1 -0
- package/dist/cli-bundle/chunks/{telemetry-33MRGX4Z.js → telemetry-H5GLXNG5.js} +6 -6
- package/dist/cli-bundle/chunks/telemetry-H5GLXNG5.js.map +7 -0
- package/dist/cli-bundle/chunks/{telemetry-RK2VX75A.js → telemetry-TRRYZXWT.js} +7 -7
- package/dist/cli-bundle/chunks/telemetry-TRRYZXWT.js.map +1 -0
- package/dist/cli-bundle/chunks/test-6CZNIIGA.js +34 -0
- package/dist/cli-bundle/chunks/{test-Y3CTFMEC.js → test-7GVQ3VMN.js} +16 -14
- package/dist/cli-bundle/chunks/{test-all-ANYQ33O2.js → test-all-3LF2OZD2.js} +23 -16
- package/dist/cli-bundle/chunks/test-all-3LF2OZD2.js.map +7 -0
- package/dist/cli-bundle/chunks/{test-all-ARSMX33Q.js → test-all-ODVADHV6.js} +24 -17
- package/dist/cli-bundle/chunks/test-all-ODVADHV6.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-5URSD34O.js → test-runs-LYT6ZTNQ.js} +62 -65
- package/dist/cli-bundle/chunks/test-runs-LYT6ZTNQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-XNACGSNQ.js → test-runs-RVP6VWN7.js} +61 -64
- package/dist/cli-bundle/chunks/test-runs-RVP6VWN7.js.map +7 -0
- package/dist/cli-bundle/chunks/update-MPGM6SBE.js +28 -0
- package/dist/cli-bundle/chunks/update-UN75XW3C.js +24 -0
- package/dist/cli-bundle/chunks/{update-many-6B7PJ33I.js → update-many-FCU6RKTO.js} +80 -34
- package/dist/cli-bundle/chunks/update-many-FCU6RKTO.js.map +1 -0
- package/dist/cli-bundle/chunks/{update-many-724JCVDE.js → update-many-XSEQJ24X.js} +79 -33
- package/dist/cli-bundle/chunks/update-many-XSEQJ24X.js.map +7 -0
- package/dist/cli-bundle/chunks/{upgrade-ALBEZAI7.js → upgrade-A6TL3INC.js} +22 -8
- package/dist/cli-bundle/chunks/upgrade-A6TL3INC.js.map +7 -0
- package/dist/cli-bundle/chunks/{upgrade-QHRGDBSA.js → upgrade-FOB5LHO5.js} +23 -9
- package/dist/cli-bundle/chunks/upgrade-FOB5LHO5.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-IQRYFXIV.js → validate-7BLDG3AT.js} +221 -30
- package/dist/cli-bundle/chunks/validate-7BLDG3AT.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-UY6DRCG5.js → validate-EHL3MI2V.js} +235 -30
- package/dist/cli-bundle/chunks/validate-EHL3MI2V.js.map +7 -0
- package/dist/cli-bundle/main.js +270 -139
- package/dist/cli-bundle/main.js.map +3 -3
- package/dist/cli.d.ts +10 -0
- package/dist/cli.js +21 -8
- package/dist/cli.js.map +1 -1
- package/dist/core/diagnostics/remediation.js +7 -2
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/extensions/extension-policy.js +14 -15
- package/dist/core/extensions/extension-policy.js.map +1 -1
- package/dist/core/extensions/item-fields.js +4 -5
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +75 -1
- package/dist/core/extensions/loader.js +56 -32
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/governance/content-fields.d.ts +84 -0
- package/dist/core/governance/content-fields.js +182 -0
- package/dist/core/governance/content-fields.js.map +1 -0
- package/dist/core/governance/issue-codes.d.ts +51 -0
- package/dist/core/governance/issue-codes.js +95 -0
- package/dist/core/governance/issue-codes.js.map +1 -0
- package/dist/core/governance/metadata-coverage.d.ts +168 -0
- package/dist/core/governance/metadata-coverage.js +362 -0
- package/dist/core/governance/metadata-coverage.js.map +1 -0
- package/dist/core/history/history-rewrite.d.ts +22 -0
- package/dist/core/history/history-rewrite.js +38 -2
- package/dist/core/history/history-rewrite.js.map +1 -1
- package/dist/core/history/history.d.ts +7 -0
- package/dist/core/history/history.js +6 -2
- package/dist/core/history/history.js.map +1 -1
- package/dist/core/io/body-file.d.ts +14 -0
- package/dist/core/io/body-file.js +47 -0
- package/dist/core/io/body-file.js.map +1 -0
- package/dist/core/item/item-format.d.ts +46 -1
- package/dist/core/item/item-format.js +51 -60
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/parse.d.ts +9 -0
- package/dist/core/item/parse.js +10 -16
- package/dist/core/item/parse.js.map +1 -1
- package/dist/core/item/type-registry.d.ts +1 -0
- package/dist/core/item/type-registry.js +8 -10
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/lock/lock.d.ts +26 -0
- package/dist/core/lock/lock.js +10 -2
- package/dist/core/lock/lock.js.map +1 -1
- package/dist/core/output/output.d.ts +7 -0
- package/dist/core/output/output.js +6 -2
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/schema/item-types-file.d.ts +25 -2
- package/dist/core/schema/item-types-file.js +78 -6
- package/dist/core/schema/item-types-file.js.map +1 -1
- package/dist/core/schema/runtime-schema.d.ts +7 -0
- package/dist/core/schema/runtime-schema.js +23 -16
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/cache.d.ts +19 -1
- package/dist/core/search/cache.js +11 -3
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/corpus.d.ts +36 -2
- package/dist/core/search/corpus.js +120 -24
- package/dist/core/search/corpus.js.map +1 -1
- package/dist/core/search/providers.d.ts +19 -0
- package/dist/core/search/providers.js +19 -2
- package/dist/core/search/providers.js.map +1 -1
- package/dist/core/sentry/instrument.d.ts +1 -0
- package/dist/core/sentry/instrument.js +6 -2
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/session/session-state.d.ts +16 -0
- package/dist/core/session/session-state.js +48 -0
- package/dist/core/session/session-state.js.map +1 -0
- package/dist/core/shared/constants.d.ts +8 -0
- package/dist/core/shared/constants.js +11 -2
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/shared/text-normalization.js +4 -3
- package/dist/core/shared/text-normalization.js.map +1 -1
- package/dist/core/shared/time.d.ts +13 -0
- package/dist/core/shared/time.js +19 -7
- package/dist/core/shared/time.js.map +1 -1
- package/dist/core/store/item-store.d.ts +11 -0
- package/dist/core/store/item-store.js +12 -3
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-validator.d.ts +2 -0
- package/dist/core/store/settings-validator.js +25 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.d.ts +60 -1
- package/dist/core/store/settings.js +100 -46
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/observability.js +10 -8
- package/dist/core/telemetry/observability.js.map +1 -1
- package/dist/core/telemetry/runtime.d.ts +272 -1
- package/dist/core/telemetry/runtime.js +358 -37
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/core/test/background-runs.d.ts +35 -0
- package/dist/core/test/background-runs.js +72 -61
- package/dist/core/test/background-runs.js.map +1 -1
- package/dist/core/test/run-selectors.js +5 -4
- package/dist/core/test/run-selectors.js.map +1 -1
- package/dist/core/validate/estimate-defaults.d.ts +39 -0
- package/dist/core/validate/estimate-defaults.js +117 -0
- package/dist/core/validate/estimate-defaults.js.map +1 -0
- package/dist/core/validate/fix-planning.d.ts +21 -3
- package/dist/core/validate/fix-planning.js +31 -4
- package/dist/core/validate/fix-planning.js.map +1 -1
- package/dist/core/validate/missing-link-owners.d.ts +64 -0
- package/dist/core/validate/missing-link-owners.js +98 -0
- package/dist/core/validate/missing-link-owners.js.map +1 -0
- package/dist/mcp/server.d.ts +61 -0
- package/dist/mcp/server.js +50 -7
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-definitions.js +17 -4
- package/dist/mcp/tool-definitions.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +13 -2
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +2 -2
- package/dist/sdk/cli-contracts/enum-contracts.js +4 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.js +110 -2
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +83 -8
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +28 -0
- package/dist/sdk/cli-contracts.js +164 -11
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/types.d.ts +17 -1
- package/dist/types.js +3 -3
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +15 -3
- package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +136 -7
- package/docs/CONFIGURATION.md +52 -0
- package/docs/TESTING.md +6 -4
- package/package.json +6 -4
- package/packages/pm-calendar/extensions/calendar/runtime.js +6 -0
- package/packages/pm-calendar/extensions/calendar/runtime.ts +12 -0
- package/packages/pm-todos/extensions/todos/runtime.ts +5 -0
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/README.md +3 -3
- package/plugins/pm-claude/commands/pm-init.md +1 -1
- package/plugins/pm-codex/README.md +1 -1
- package/scripts/bundle-cli.mjs +46 -37
- package/scripts/finalize-build.mjs +20 -9
- package/scripts/prepare-build-cache.mjs +27 -16
- package/dist/cli-bundle/chunks/activity-XIOTGZMU.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-IRHJWEKG.js.map +0 -1
- package/dist/cli-bundle/chunks/aggregate-XEBW22UQ.js.map +0 -7
- package/dist/cli-bundle/chunks/append-NL67JNJU.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2ANTZBYF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2J2AH4V5.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-32XSW44C.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-36BCSMKP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3VULHQNS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4FHLNNW7.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4JHJ7YG2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4TPFXE2R.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4ZKKZMLH.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5HSAHRYA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6TBR5AZ2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7CRFV6JR.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7SM7VA5I.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AAUYXSFF.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AGG32LKL.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-AUDDXKNX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-BVL5KGVA.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-C24PWDFG.js +0 -138
- package/dist/cli-bundle/chunks/chunk-C24PWDFG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HZOX5BYD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IXVSSHGV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IZHCCG4S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JW7D6437.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JWXTOYBI.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KHGTYCJ6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-L6YQONLM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-LFW5NQUP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-LYNQ3NGI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-M3SI2REU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MACCNKSZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MGAQ6KZG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-PEH7SZD2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-PNYAAB4S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-QQG4HEX7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-R4VWYWRN.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RHYBR6G7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-S2CDTRJ6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SGMGMCIF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SOHXUA2Q.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SQDKAEKG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-TOX7YQ7X.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-TSXWFN3L.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UCVJP4JL.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-V4KP3TCN.js +0 -128
- package/dist/cli-bundle/chunks/chunk-V4KP3TCN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VNC2HBL4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-W6KNFAMZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-WLH7X4RN.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-XXLMJDUB.js.map +0 -7
- package/dist/cli-bundle/chunks/close-WOG5WTMZ.js +0 -13
- package/dist/cli-bundle/chunks/close-many-GKAJX54X.js.map +0 -1
- package/dist/cli-bundle/chunks/close-many-GL6NRUU5.js.map +0 -7
- package/dist/cli-bundle/chunks/comments-5FPT6L7N.js.map +0 -1
- package/dist/cli-bundle/chunks/comments-TOLOYWNI.js.map +0 -7
- package/dist/cli-bundle/chunks/config-4MN45TIH.js.map +0 -1
- package/dist/cli-bundle/chunks/config-7N6D7YJE.js.map +0 -7
- package/dist/cli-bundle/chunks/context-AQSLE7DZ.js.map +0 -1
- package/dist/cli-bundle/chunks/context-U3PUJMVN.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-H7KCQXLY.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-ITSJXO3O.js.map +0 -1
- package/dist/cli-bundle/chunks/create-NW3K7LVG.js +0 -27
- package/dist/cli-bundle/chunks/deps-HV2C2L46.js.map +0 -1
- package/dist/cli-bundle/chunks/files-LIFDKNCN.js.map +0 -7
- package/dist/cli-bundle/chunks/files-OIFN3DQX.js.map +0 -1
- package/dist/cli-bundle/chunks/get-K7UULTQF.js.map +0 -7
- package/dist/cli-bundle/chunks/get-SAB7CRBG.js.map +0 -1
- package/dist/cli-bundle/chunks/health-NUVZYIEV.js.map +0 -1
- package/dist/cli-bundle/chunks/health-VJWH3ZFK.js.map +0 -7
- package/dist/cli-bundle/chunks/history-IUVN4NTN.js +0 -20
- package/dist/cli-bundle/chunks/history-compact-SLL6ESXH.js.map +0 -1
- package/dist/cli-bundle/chunks/history-compact-WQZQ6KXM.js.map +0 -7
- package/dist/cli-bundle/chunks/history-redact-75KIIJUJ.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-BJCGM6Q3.js.map +0 -1
- package/dist/cli-bundle/chunks/history-repair-UCYS55ZX.js.map +0 -7
- package/dist/cli-bundle/chunks/init-JJFYRUKG.js +0 -17
- package/dist/cli-bundle/chunks/learnings-L6KTZGOT.js.map +0 -1
- package/dist/cli-bundle/chunks/learnings-QKJOKEAO.js.map +0 -7
- package/dist/cli-bundle/chunks/list-GGVPXEV6.js +0 -23
- package/dist/cli-bundle/chunks/list-VOQDQHA4.js +0 -19
- package/dist/cli-bundle/chunks/notes-3NLK7WTZ.js.map +0 -1
- package/dist/cli-bundle/chunks/notes-HMCB7TK6.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-DWBYI5C6.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-NANUWH4T.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-PWQ5F2VI.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-SMMMLSWW.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-QKFPTIZG.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-ZYJQ4DVP.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-2FMZ6WEF.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-BAFQURZG.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-DQEIKBIP.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-QN2XV7UL.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-DRBNXJJH.js +0 -17
- package/dist/cli-bundle/chunks/schema-RNVJ55V2.js.map +0 -7
- package/dist/cli-bundle/chunks/schema-ZZ7ZDM2X.js.map +0 -1
- package/dist/cli-bundle/chunks/search-BJ457C2A.js.map +0 -7
- package/dist/cli-bundle/chunks/search-FQDZXX7P.js.map +0 -1
- package/dist/cli-bundle/chunks/stats-CUG3ZHOI.js.map +0 -1
- package/dist/cli-bundle/chunks/stats-DUQWCVOS.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-33MRGX4Z.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-RK2VX75A.js.map +0 -1
- package/dist/cli-bundle/chunks/test-SDMYEQHH.js +0 -32
- package/dist/cli-bundle/chunks/test-all-ANYQ33O2.js.map +0 -7
- package/dist/cli-bundle/chunks/test-all-ARSMX33Q.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-5URSD34O.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-XNACGSNQ.js.map +0 -7
- package/dist/cli-bundle/chunks/update-PD46VOXI.js +0 -21
- package/dist/cli-bundle/chunks/update-U235A7WP.js +0 -25
- package/dist/cli-bundle/chunks/update-many-6B7PJ33I.js.map +0 -1
- package/dist/cli-bundle/chunks/update-many-724JCVDE.js.map +0 -7
- package/dist/cli-bundle/chunks/upgrade-ALBEZAI7.js.map +0 -7
- package/dist/cli-bundle/chunks/upgrade-QHRGDBSA.js.map +0 -1
- package/dist/cli-bundle/chunks/validate-IQRYFXIV.js.map +0 -1
- package/dist/cli-bundle/chunks/validate-UY6DRCG5.js.map +0 -7
- /package/dist/cli-bundle/chunks/{activity-XIOTGZMU.js.map → activity-5P2KQCTH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-PPO7QWJF.js.map → activity-MJGTX4LO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6ZFTM65G.js.map → chunk-2JEGCDYT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3CQPVBK3.js.map → chunk-3WAULYOY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VYZNX4C5.js.map → chunk-7AGIXLNK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RFR2YQGO.js.map → chunk-AERT7KT3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XOYHMHFF.js.map → chunk-E6J2PEK6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IIOIBAQW.js.map → chunk-F2GC6L3N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QU3OPNVV.js.map → chunk-M23HXJL3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LSSTKL3Y.js.map → chunk-MJZUZ2QE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Z647PYLD.js.map → chunk-O46LTCXQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HLEGAQXT.js.map → chunk-OLTYNVJR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HWHONML5.js.map → chunk-T5VU7ROQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NN6RKGFW.js.map → chunk-UBMCSJXX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JE5IZXDS.js.map → chunk-UUKORJSN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LGOXXQUW.js.map → chunk-WZCQVABQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DWG4FHPY.js.map → chunk-YGRPBFMA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GOO4UXBI.js.map → chunk-ZJRDVYZI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-QJOQBH7J.js.map → claim-4APLUXJW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-HE6KEGJW.js.map → claim-NEO7AGWH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-SPUFW5QR.js.map → close-3QABBNGU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-WOG5WTMZ.js.map → close-ILMZR3D7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-EB3MUCSW.js.map → copy-Q64T5FD4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-C4W522JM.js.map → copy-SG34LCMU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-NW3K7LVG.js.map → create-F5HZX2S4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-4EQNELMY.js.map → create-IPAX2SNL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-ZLGUYIXU.js.map → delete-TLXR7LJ2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-X5QLXIQX.js.map → delete-VH3L7DZ6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-SRTLCQOL.js.map → docs-GWDEB7JH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-RJQPLROO.js.map → docs-RCLNSKID.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-MM3TVWOO.js.map → extension-5RN65LHT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-WKPVPNCC.js.map → extension-7KO2NX2A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-DL6AVOX5.js.map → gc-2FGKYRJ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-NRFHLVFT.js.map → gc-5B6ABL3Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-GYFD2DJW.js.map → history-QO4JVJJP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-IUVN4NTN.js.map → history-SSXGGTVZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-75KIIJUJ.js.map → history-redact-VBH44Y7F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-SDTDR6WM.js.map → history-redact-Z4P5MM3G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-JJFYRUKG.js.map → init-7FBQO77A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-MXV57LKL.js.map → init-K6MSMB37.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-VOQDQHA4.js.map → list-7UE44A2R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-GGVPXEV6.js.map → list-UHMA3N2K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-FJQWXMPY.js.map → restore-NNVPBBVJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-DRBNXJJH.js.map → restore-XXXLQ2XC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-SDMYEQHH.js.map → test-6CZNIIGA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-Y3CTFMEC.js.map → test-7GVQ3VMN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-U235A7WP.js.map → update-MPGM6SBE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-PD46VOXI.js.map → update-UN75XW3C.js.map} +0 -0
|
@@ -1,6 +1,68 @@
|
|
|
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]="18276e08-26d0-5af6-8b20-d1cf86ad8ff4")}catch(e){}}();
|
|
3
3
|
import { coercePositiveInteger } from "../shared/primitives.js";
|
|
4
|
+
/**
|
|
5
|
+
* Canonical ordered list of corpus field names emitted by {@link buildSearchCorpus}.
|
|
6
|
+
*
|
|
7
|
+
* When `search.corpus_fields` is unset/empty the full set is included (backward
|
|
8
|
+
* compatible). When configured, only the named fields are emitted — letting
|
|
9
|
+
* teams opt structured signals in/out for token efficiency. Unknown names in the
|
|
10
|
+
* configured list are ignored (they simply never match a builder).
|
|
11
|
+
*
|
|
12
|
+
* NOTE: `plan` is conditional — it is only emitted when the item has plan
|
|
13
|
+
* content (see {@link buildPlanCorpus}); it is still part of the default set so
|
|
14
|
+
* plan-bearing items keep their plan corpus.
|
|
15
|
+
*/
|
|
16
|
+
export const DEFAULT_SEARCH_CORPUS_FIELDS = [
|
|
17
|
+
"title",
|
|
18
|
+
"description",
|
|
19
|
+
"tags",
|
|
20
|
+
"status",
|
|
21
|
+
"type",
|
|
22
|
+
"priority",
|
|
23
|
+
"assignee",
|
|
24
|
+
"parent",
|
|
25
|
+
"goal",
|
|
26
|
+
"value",
|
|
27
|
+
"why_now",
|
|
28
|
+
"risk",
|
|
29
|
+
"confidence",
|
|
30
|
+
"estimated_minutes",
|
|
31
|
+
"acceptance_criteria",
|
|
32
|
+
"resolution",
|
|
33
|
+
"expected_result",
|
|
34
|
+
"actual_result",
|
|
35
|
+
"body",
|
|
36
|
+
"comments",
|
|
37
|
+
"notes",
|
|
38
|
+
"learnings",
|
|
39
|
+
"reminders",
|
|
40
|
+
"events",
|
|
41
|
+
"dependencies",
|
|
42
|
+
"plan",
|
|
43
|
+
];
|
|
44
|
+
/**
|
|
45
|
+
* Resolve the effective corpus field list from settings.
|
|
46
|
+
*
|
|
47
|
+
* - unset / not an array / empty array → the full default set (backward compatible).
|
|
48
|
+
* - non-empty array → exactly those names (string entries only; trimmed; empties dropped).
|
|
49
|
+
*/
|
|
50
|
+
export function resolveSearchCorpusFields(settings) {
|
|
51
|
+
const configured = settings?.search?.corpus_fields;
|
|
52
|
+
if (!Array.isArray(configured)) {
|
|
53
|
+
return [...DEFAULT_SEARCH_CORPUS_FIELDS];
|
|
54
|
+
}
|
|
55
|
+
// The type guard is intentional: corpus_fields comes from user-editable
|
|
56
|
+
// settings.json, so entries are not statically guaranteed to be strings.
|
|
57
|
+
// De-duplicate and drop unknown names (they have no builder) so an invalid
|
|
58
|
+
// config cannot produce duplicate or phantom corpus keys.
|
|
59
|
+
const knownFields = new Set(DEFAULT_SEARCH_CORPUS_FIELDS);
|
|
60
|
+
const selected = Array.from(new Set(configured
|
|
61
|
+
.filter((entry) => typeof entry === "string")
|
|
62
|
+
.map((entry) => entry.trim())
|
|
63
|
+
.filter((entry) => entry.length > 0 && knownFields.has(entry))));
|
|
64
|
+
return selected.length > 0 ? selected : [...DEFAULT_SEARCH_CORPUS_FIELDS];
|
|
65
|
+
}
|
|
4
66
|
export const DEFAULT_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS = 8_000;
|
|
5
67
|
export const OLLAMA_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS = 3_200;
|
|
6
68
|
export const SEMANTIC_CORPUS_TRUNCATION_SUFFIX = "...[semantic corpus truncated]";
|
|
@@ -99,27 +161,61 @@ export function buildPlanCorpus(item) {
|
|
|
99
161
|
validation,
|
|
100
162
|
};
|
|
101
163
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
164
|
+
function isNonEmptyString(value) {
|
|
165
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Builders for each corpus field. Each returns the value to emit, or `undefined`
|
|
169
|
+
* to omit the field entirely (keeps the corpus compact / token-efficient — we do
|
|
170
|
+
* not emit empty strings, empty arrays, or nulls for the optional structured
|
|
171
|
+
* fields). Always-present fields (title/status/etc.) emit their raw value.
|
|
172
|
+
*/
|
|
173
|
+
const CORPUS_FIELD_BUILDERS = {
|
|
174
|
+
title: (document) => document.metadata.title,
|
|
175
|
+
description: (document) => document.metadata.description,
|
|
176
|
+
tags: (document) => document.metadata.tags,
|
|
177
|
+
status: (document) => document.metadata.status,
|
|
178
|
+
type: (document) => document.metadata.type,
|
|
179
|
+
priority: (document) => typeof document.metadata.priority === "number" ? document.metadata.priority : undefined,
|
|
180
|
+
assignee: (document) => (isNonEmptyString(document.metadata.assignee) ? document.metadata.assignee : undefined),
|
|
181
|
+
parent: (document) => (isNonEmptyString(document.metadata.parent) ? document.metadata.parent : undefined),
|
|
182
|
+
goal: (document) => (isNonEmptyString(document.metadata.goal) ? document.metadata.goal : undefined),
|
|
183
|
+
value: (document) => (isNonEmptyString(document.metadata.value) ? document.metadata.value : undefined),
|
|
184
|
+
why_now: (document) => (isNonEmptyString(document.metadata.why_now) ? document.metadata.why_now : undefined),
|
|
185
|
+
risk: (document) => (isNonEmptyString(document.metadata.risk) ? document.metadata.risk : undefined),
|
|
186
|
+
confidence: (document) => document.metadata.confidence !== undefined && document.metadata.confidence !== null
|
|
187
|
+
? document.metadata.confidence
|
|
188
|
+
: undefined,
|
|
189
|
+
estimated_minutes: (document) => typeof document.metadata.estimated_minutes === "number" ? document.metadata.estimated_minutes : undefined,
|
|
190
|
+
acceptance_criteria: (document) => isNonEmptyString(document.metadata.acceptance_criteria) ? document.metadata.acceptance_criteria : undefined,
|
|
191
|
+
resolution: (document) => isNonEmptyString(document.metadata.resolution) ? document.metadata.resolution : undefined,
|
|
192
|
+
expected_result: (document) => isNonEmptyString(document.metadata.expected_result) ? document.metadata.expected_result : undefined,
|
|
193
|
+
actual_result: (document) => isNonEmptyString(document.metadata.actual_result) ? document.metadata.actual_result : undefined,
|
|
194
|
+
body: (document) => document.body,
|
|
195
|
+
comments: (document) => (document.metadata.comments ?? []).map((entry) => entry.text),
|
|
196
|
+
notes: (document) => (document.metadata.notes ?? []).map((entry) => entry.text),
|
|
197
|
+
learnings: (document) => (document.metadata.learnings ?? []).map((entry) => entry.text),
|
|
198
|
+
reminders: (document) => buildReminderCorpus(document.metadata),
|
|
199
|
+
events: (document) => buildEventCorpus(document.metadata),
|
|
200
|
+
dependencies: (document) => (document.metadata.dependencies ?? []).map((entry) => ({
|
|
201
|
+
id: entry.id,
|
|
202
|
+
kind: entry.kind,
|
|
203
|
+
})),
|
|
204
|
+
plan: (document) => buildPlanCorpus(document.metadata),
|
|
205
|
+
};
|
|
206
|
+
export function buildSearchCorpus(document, options = {}) {
|
|
207
|
+
const fields = options.fields ?? DEFAULT_SEARCH_CORPUS_FIELDS;
|
|
208
|
+
const corpus = {};
|
|
209
|
+
for (const field of fields) {
|
|
210
|
+
const builder = CORPUS_FIELD_BUILDERS[field];
|
|
211
|
+
if (!builder) {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
const value = builder(document);
|
|
215
|
+
if (value === undefined) {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
corpus[field] = value;
|
|
123
219
|
}
|
|
124
220
|
return corpus;
|
|
125
221
|
}
|
|
@@ -146,7 +242,7 @@ export function resolveSemanticCorpusCharacterLimit(providerName, configuredMaxC
|
|
|
146
242
|
};
|
|
147
243
|
}
|
|
148
244
|
export function buildSemanticCorpusInput(document, options = {}) {
|
|
149
|
-
const serialized = JSON.stringify(buildSearchCorpus(document));
|
|
245
|
+
const serialized = JSON.stringify(buildSearchCorpus(document, { fields: options.fields }));
|
|
150
246
|
const maxCharacters = resolveSemanticCorpusCharacterLimit(options.providerName, options.maxCharacters)
|
|
151
247
|
.maxCharacters;
|
|
152
248
|
if (serialized.length <= maxCharacters) {
|
|
@@ -159,4 +255,4 @@ export function buildSemanticCorpusInput(document, options = {}) {
|
|
|
159
255
|
return `${serialized.slice(0, keepLength)}${SEMANTIC_CORPUS_TRUNCATION_SUFFIX}`;
|
|
160
256
|
}
|
|
161
257
|
//# sourceMappingURL=corpus.js.map
|
|
162
|
-
//# debugId=
|
|
258
|
+
//# debugId=18276e08-26d0-5af6-8b20-d1cf86ad8ff4
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corpus.js","sources":["core/search/corpus.ts"],"sourceRoot":"/","sourcesContent":["import type { ItemDocument, ItemMetadata } from \"../../types/index.js\";\nimport { coercePositiveInteger } from \"../shared/primitives.js\";\n\nexport const DEFAULT_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS = 8_000;\nexport const OLLAMA_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS = 3_200;\nexport const SEMANTIC_CORPUS_TRUNCATION_SUFFIX = \"...[semantic corpus truncated]\";\nexport const SEARCH_EMBEDDING_CORPUS_MAX_CHARACTERS_INVALID_WARNING =\n \"search_embedding_corpus_max_characters_invalid:using_provider_default\";\n\nfunction compactParts(parts: Array<string | boolean | number | null | undefined>): string {\n return parts\n .map((part) => (part === undefined || part === null ? \"\" : String(part).trim()))\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nexport function buildReminderCorpus(item: ItemMetadata): string[] {\n return (item.reminders ?? []).map((reminder) => compactParts([reminder.at, reminder.text]));\n}\n\nexport function buildEventCorpus(item: ItemMetadata): string[] {\n return (item.events ?? []).map((event) =>\n compactParts([\n event.start_at,\n event.end_at,\n event.title,\n event.description,\n event.location,\n event.all_day === true ? \"all day\" : undefined,\n event.timezone,\n event.recurrence?.freq,\n event.recurrence?.interval,\n event.recurrence?.count,\n event.recurrence?.until,\n event.recurrence?.by_weekday?.join(\" \"),\n event.recurrence?.by_month_day?.join(\" \"),\n event.recurrence?.exdates?.join(\" \"),\n ]),\n );\n}\n\nexport function buildPlanFlatCorpus(item: ItemMetadata): string {\n const segments: Array<string | undefined> = [];\n segments.push(item.plan_mode, item.plan_scope, item.plan_harness, item.plan_resume_context);\n for (const step of item.plan_steps ?? []) {\n segments.push(step.title, step.body, step.status, step.owner, step.evidence, step.blocked_reason, step.superseded_by);\n for (const link of step.linked_items ?? []) {\n segments.push(`${link.kind} ${link.id}`, link.note);\n }\n for (const file of step.files ?? []) segments.push(file.path, file.note);\n for (const test of step.tests ?? []) segments.push(test.command, test.path, test.note);\n for (const doc of step.docs ?? []) segments.push(doc.path, doc.note);\n }\n for (const decision of item.plan_decisions ?? []) {\n segments.push(decision.decision, decision.rationale, decision.evidence);\n }\n for (const discovery of item.plan_discoveries ?? []) {\n segments.push(discovery.text);\n }\n for (const check of item.plan_validation ?? []) {\n segments.push(check.text, check.command, check.expected);\n }\n return segments.filter((segment): segment is string => typeof segment === \"string\" && segment.length > 0).join(\" \");\n}\n\nexport function buildPlanCorpus(item: ItemMetadata): Record<string, unknown> | undefined {\n const steps = (item.plan_steps ?? []).map((step) =>\n compactParts([\n step.order,\n step.id,\n step.title,\n step.body,\n step.status,\n step.owner,\n step.evidence,\n step.blocked_reason,\n step.superseded_by,\n (step.linked_items ?? []).map((link) => compactParts([link.kind, link.id, link.note])).join(\" \"),\n (step.files ?? []).map((file) => compactParts([file.path, file.note])).join(\" \"),\n (step.tests ?? []).map((test) => compactParts([test.command, test.path, test.note])).join(\" \"),\n (step.docs ?? []).map((doc) => compactParts([doc.path, doc.note])).join(\" \"),\n ]),\n );\n const decisions = (item.plan_decisions ?? []).map((entry) =>\n compactParts([entry.decision, entry.rationale, entry.evidence, entry.step_id]),\n );\n const discoveries = (item.plan_discoveries ?? []).map((entry) => compactParts([entry.text, entry.step_id]));\n const validation = (item.plan_validation ?? []).map((entry) =>\n compactParts([entry.text, entry.command, entry.expected]),\n );\n const hasPlanContent =\n item.plan_mode !== undefined ||\n item.plan_scope !== undefined ||\n item.plan_harness !== undefined ||\n item.plan_resume_context !== undefined ||\n steps.length > 0 ||\n decisions.length > 0 ||\n discoveries.length > 0 ||\n validation.length > 0;\n if (!hasPlanContent) {\n return undefined;\n }\n return {\n mode: item.plan_mode,\n scope: item.plan_scope,\n harness: item.plan_harness,\n resume_context: item.plan_resume_context,\n steps,\n decisions,\n discoveries,\n validation,\n };\n}\n\nexport function buildSearchCorpus(document: ItemDocument): Record<string, unknown> {\n const item = document.metadata;\n const plan = buildPlanCorpus(item);\n const corpus: Record<string, unknown> = {\n title: item.title,\n description: item.description,\n tags: item.tags,\n status: item.status,\n body: document.body,\n comments: (item.comments ?? []).map((entry) => entry.text),\n notes: (item.notes ?? []).map((entry) => entry.text),\n learnings: (item.learnings ?? []).map((entry) => entry.text),\n reminders: buildReminderCorpus(item),\n events: buildEventCorpus(item),\n dependencies: (item.dependencies ?? []).map((entry) => ({\n id: entry.id,\n kind: entry.kind,\n })),\n };\n if (plan) {\n corpus.plan = plan;\n }\n return corpus;\n}\n\nexport function resolveSemanticCorpusInputCharacterLimit(providerName: string | undefined): number {\n if (providerName?.trim().toLowerCase() === \"ollama\") {\n return OLLAMA_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS;\n }\n return DEFAULT_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS;\n}\n\nexport interface SemanticCorpusCharacterLimitResolution {\n maxCharacters: number;\n warning: string | null;\n}\n\nexport function resolveSemanticCorpusCharacterLimit(\n providerName: string | undefined,\n configuredMaxCharacters: unknown,\n): SemanticCorpusCharacterLimitResolution {\n const providerDefaultLimit = resolveSemanticCorpusInputCharacterLimit(providerName);\n const parsed = coercePositiveInteger(configuredMaxCharacters);\n if (parsed !== null) {\n return {\n maxCharacters: parsed,\n warning: null,\n };\n }\n return {\n maxCharacters: providerDefaultLimit,\n warning:\n configuredMaxCharacters === undefined || configuredMaxCharacters === null\n ? null\n : SEARCH_EMBEDDING_CORPUS_MAX_CHARACTERS_INVALID_WARNING,\n };\n}\n\nexport interface SemanticCorpusInputOptions {\n providerName?: string;\n maxCharacters?: number;\n}\n\nexport function buildSemanticCorpusInput(document: ItemDocument, options: SemanticCorpusInputOptions = {}): string {\n const serialized = JSON.stringify(buildSearchCorpus(document));\n const maxCharacters = resolveSemanticCorpusCharacterLimit(options.providerName, options.maxCharacters)\n .maxCharacters;\n if (serialized.length <= maxCharacters) {\n return serialized;\n }\n if (maxCharacters <= SEMANTIC_CORPUS_TRUNCATION_SUFFIX.length) {\n return SEMANTIC_CORPUS_TRUNCATION_SUFFIX.slice(0, maxCharacters);\n }\n const keepLength = Math.max(0, maxCharacters - SEMANTIC_CORPUS_TRUNCATION_SUFFIX.length);\n return `${serialized.slice(0, keepLength)}${SEMANTIC_CORPUS_TRUNCATION_SUFFIX}`;\n}\n"],"names":[],"mappings":"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","debugId":"b06becd9-0d3b-5afb-94d7-86fbc9b9f82f"}
|
|
1
|
+
{"version":3,"file":"corpus.js","sources":["core/search/corpus.ts"],"sourceRoot":"/","sourcesContent":["import type { ItemDocument, ItemMetadata, PmSettings } from \"../../types/index.js\";\nimport { coercePositiveInteger } from \"../shared/primitives.js\";\n\n/**\n * Canonical ordered list of corpus field names emitted by {@link buildSearchCorpus}.\n *\n * When `search.corpus_fields` is unset/empty the full set is included (backward\n * compatible). When configured, only the named fields are emitted — letting\n * teams opt structured signals in/out for token efficiency. Unknown names in the\n * configured list are ignored (they simply never match a builder).\n *\n * NOTE: `plan` is conditional — it is only emitted when the item has plan\n * content (see {@link buildPlanCorpus}); it is still part of the default set so\n * plan-bearing items keep their plan corpus.\n */\nexport const DEFAULT_SEARCH_CORPUS_FIELDS: readonly string[] = [\n \"title\",\n \"description\",\n \"tags\",\n \"status\",\n \"type\",\n \"priority\",\n \"assignee\",\n \"parent\",\n \"goal\",\n \"value\",\n \"why_now\",\n \"risk\",\n \"confidence\",\n \"estimated_minutes\",\n \"acceptance_criteria\",\n \"resolution\",\n \"expected_result\",\n \"actual_result\",\n \"body\",\n \"comments\",\n \"notes\",\n \"learnings\",\n \"reminders\",\n \"events\",\n \"dependencies\",\n \"plan\",\n] as const;\n\n/**\n * Resolve the effective corpus field list from settings.\n *\n * - unset / not an array / empty array → the full default set (backward compatible).\n * - non-empty array → exactly those names (string entries only; trimmed; empties dropped).\n */\nexport function resolveSearchCorpusFields(settings: Pick<PmSettings, \"search\"> | undefined): string[] {\n const configured = settings?.search?.corpus_fields;\n if (!Array.isArray(configured)) {\n return [...DEFAULT_SEARCH_CORPUS_FIELDS];\n }\n // The type guard is intentional: corpus_fields comes from user-editable\n // settings.json, so entries are not statically guaranteed to be strings.\n // De-duplicate and drop unknown names (they have no builder) so an invalid\n // config cannot produce duplicate or phantom corpus keys.\n const knownFields = new Set<string>(DEFAULT_SEARCH_CORPUS_FIELDS);\n const selected = Array.from(\n new Set(\n configured\n .filter((entry): entry is string => typeof entry === \"string\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0 && knownFields.has(entry)),\n ),\n );\n return selected.length > 0 ? selected : [...DEFAULT_SEARCH_CORPUS_FIELDS];\n}\n\nexport const DEFAULT_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS = 8_000;\nexport const OLLAMA_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS = 3_200;\nexport const SEMANTIC_CORPUS_TRUNCATION_SUFFIX = \"...[semantic corpus truncated]\";\nexport const SEARCH_EMBEDDING_CORPUS_MAX_CHARACTERS_INVALID_WARNING =\n \"search_embedding_corpus_max_characters_invalid:using_provider_default\";\n\nfunction compactParts(parts: Array<string | boolean | number | null | undefined>): string {\n return parts\n .map((part) => (part === undefined || part === null ? \"\" : String(part).trim()))\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nexport function buildReminderCorpus(item: ItemMetadata): string[] {\n return (item.reminders ?? []).map((reminder) => compactParts([reminder.at, reminder.text]));\n}\n\nexport function buildEventCorpus(item: ItemMetadata): string[] {\n return (item.events ?? []).map((event) =>\n compactParts([\n event.start_at,\n event.end_at,\n event.title,\n event.description,\n event.location,\n event.all_day === true ? \"all day\" : undefined,\n event.timezone,\n event.recurrence?.freq,\n event.recurrence?.interval,\n event.recurrence?.count,\n event.recurrence?.until,\n event.recurrence?.by_weekday?.join(\" \"),\n event.recurrence?.by_month_day?.join(\" \"),\n event.recurrence?.exdates?.join(\" \"),\n ]),\n );\n}\n\nexport function buildPlanFlatCorpus(item: ItemMetadata): string {\n const segments: Array<string | undefined> = [];\n segments.push(item.plan_mode, item.plan_scope, item.plan_harness, item.plan_resume_context);\n for (const step of item.plan_steps ?? []) {\n segments.push(step.title, step.body, step.status, step.owner, step.evidence, step.blocked_reason, step.superseded_by);\n for (const link of step.linked_items ?? []) {\n segments.push(`${link.kind} ${link.id}`, link.note);\n }\n for (const file of step.files ?? []) segments.push(file.path, file.note);\n for (const test of step.tests ?? []) segments.push(test.command, test.path, test.note);\n for (const doc of step.docs ?? []) segments.push(doc.path, doc.note);\n }\n for (const decision of item.plan_decisions ?? []) {\n segments.push(decision.decision, decision.rationale, decision.evidence);\n }\n for (const discovery of item.plan_discoveries ?? []) {\n segments.push(discovery.text);\n }\n for (const check of item.plan_validation ?? []) {\n segments.push(check.text, check.command, check.expected);\n }\n return segments.filter((segment): segment is string => typeof segment === \"string\" && segment.length > 0).join(\" \");\n}\n\nexport function buildPlanCorpus(item: ItemMetadata): Record<string, unknown> | undefined {\n const steps = (item.plan_steps ?? []).map((step) =>\n compactParts([\n step.order,\n step.id,\n step.title,\n step.body,\n step.status,\n step.owner,\n step.evidence,\n step.blocked_reason,\n step.superseded_by,\n (step.linked_items ?? []).map((link) => compactParts([link.kind, link.id, link.note])).join(\" \"),\n (step.files ?? []).map((file) => compactParts([file.path, file.note])).join(\" \"),\n (step.tests ?? []).map((test) => compactParts([test.command, test.path, test.note])).join(\" \"),\n (step.docs ?? []).map((doc) => compactParts([doc.path, doc.note])).join(\" \"),\n ]),\n );\n const decisions = (item.plan_decisions ?? []).map((entry) =>\n compactParts([entry.decision, entry.rationale, entry.evidence, entry.step_id]),\n );\n const discoveries = (item.plan_discoveries ?? []).map((entry) => compactParts([entry.text, entry.step_id]));\n const validation = (item.plan_validation ?? []).map((entry) =>\n compactParts([entry.text, entry.command, entry.expected]),\n );\n const hasPlanContent =\n item.plan_mode !== undefined ||\n item.plan_scope !== undefined ||\n item.plan_harness !== undefined ||\n item.plan_resume_context !== undefined ||\n steps.length > 0 ||\n decisions.length > 0 ||\n discoveries.length > 0 ||\n validation.length > 0;\n if (!hasPlanContent) {\n return undefined;\n }\n return {\n mode: item.plan_mode,\n scope: item.plan_scope,\n harness: item.plan_harness,\n resume_context: item.plan_resume_context,\n steps,\n decisions,\n discoveries,\n validation,\n };\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nexport interface SearchCorpusOptions {\n /**\n * Field names to include. When omitted, the full default set is used.\n * See {@link DEFAULT_SEARCH_CORPUS_FIELDS} and {@link resolveSearchCorpusFields}.\n */\n fields?: string[];\n}\n\n/**\n * Builders for each corpus field. Each returns the value to emit, or `undefined`\n * to omit the field entirely (keeps the corpus compact / token-efficient — we do\n * not emit empty strings, empty arrays, or nulls for the optional structured\n * fields). Always-present fields (title/status/etc.) emit their raw value.\n */\nconst CORPUS_FIELD_BUILDERS: Record<string, (document: ItemDocument) => unknown> = {\n title: (document) => document.metadata.title,\n description: (document) => document.metadata.description,\n tags: (document) => document.metadata.tags,\n status: (document) => document.metadata.status,\n type: (document) => document.metadata.type,\n priority: (document) =>\n typeof document.metadata.priority === \"number\" ? document.metadata.priority : undefined,\n assignee: (document) => (isNonEmptyString(document.metadata.assignee) ? document.metadata.assignee : undefined),\n parent: (document) => (isNonEmptyString(document.metadata.parent) ? document.metadata.parent : undefined),\n goal: (document) => (isNonEmptyString(document.metadata.goal) ? document.metadata.goal : undefined),\n value: (document) => (isNonEmptyString(document.metadata.value) ? document.metadata.value : undefined),\n why_now: (document) => (isNonEmptyString(document.metadata.why_now) ? document.metadata.why_now : undefined),\n risk: (document) => (isNonEmptyString(document.metadata.risk) ? document.metadata.risk : undefined),\n confidence: (document) =>\n document.metadata.confidence !== undefined && document.metadata.confidence !== null\n ? document.metadata.confidence\n : undefined,\n estimated_minutes: (document) =>\n typeof document.metadata.estimated_minutes === \"number\" ? document.metadata.estimated_minutes : undefined,\n acceptance_criteria: (document) =>\n isNonEmptyString(document.metadata.acceptance_criteria) ? document.metadata.acceptance_criteria : undefined,\n resolution: (document) =>\n isNonEmptyString(document.metadata.resolution) ? document.metadata.resolution : undefined,\n expected_result: (document) =>\n isNonEmptyString(document.metadata.expected_result) ? document.metadata.expected_result : undefined,\n actual_result: (document) =>\n isNonEmptyString(document.metadata.actual_result) ? document.metadata.actual_result : undefined,\n body: (document) => document.body,\n comments: (document) => (document.metadata.comments ?? []).map((entry) => entry.text),\n notes: (document) => (document.metadata.notes ?? []).map((entry) => entry.text),\n learnings: (document) => (document.metadata.learnings ?? []).map((entry) => entry.text),\n reminders: (document) => buildReminderCorpus(document.metadata),\n events: (document) => buildEventCorpus(document.metadata),\n dependencies: (document) =>\n (document.metadata.dependencies ?? []).map((entry) => ({\n id: entry.id,\n kind: entry.kind,\n })),\n plan: (document) => buildPlanCorpus(document.metadata),\n};\n\nexport function buildSearchCorpus(document: ItemDocument, options: SearchCorpusOptions = {}): Record<string, unknown> {\n const fields = options.fields ?? DEFAULT_SEARCH_CORPUS_FIELDS;\n const corpus: Record<string, unknown> = {};\n for (const field of fields) {\n const builder = CORPUS_FIELD_BUILDERS[field];\n if (!builder) {\n continue;\n }\n const value = builder(document);\n if (value === undefined) {\n continue;\n }\n corpus[field] = value;\n }\n return corpus;\n}\n\nexport function resolveSemanticCorpusInputCharacterLimit(providerName: string | undefined): number {\n if (providerName?.trim().toLowerCase() === \"ollama\") {\n return OLLAMA_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS;\n }\n return DEFAULT_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS;\n}\n\nexport interface SemanticCorpusCharacterLimitResolution {\n maxCharacters: number;\n warning: string | null;\n}\n\nexport function resolveSemanticCorpusCharacterLimit(\n providerName: string | undefined,\n configuredMaxCharacters: unknown,\n): SemanticCorpusCharacterLimitResolution {\n const providerDefaultLimit = resolveSemanticCorpusInputCharacterLimit(providerName);\n const parsed = coercePositiveInteger(configuredMaxCharacters);\n if (parsed !== null) {\n return {\n maxCharacters: parsed,\n warning: null,\n };\n }\n return {\n maxCharacters: providerDefaultLimit,\n warning:\n configuredMaxCharacters === undefined || configuredMaxCharacters === null\n ? null\n : SEARCH_EMBEDDING_CORPUS_MAX_CHARACTERS_INVALID_WARNING,\n };\n}\n\nexport interface SemanticCorpusInputOptions {\n providerName?: string;\n maxCharacters?: number;\n /**\n * Corpus field names to include. When omitted, the full default set is used\n * (see {@link DEFAULT_SEARCH_CORPUS_FIELDS}). Thread the resolved list from\n * {@link resolveSearchCorpusFields} so the embedded input honours\n * `search.corpus_fields`.\n */\n fields?: string[];\n}\n\nexport function buildSemanticCorpusInput(document: ItemDocument, options: SemanticCorpusInputOptions = {}): string {\n const serialized = JSON.stringify(buildSearchCorpus(document, { fields: options.fields }));\n const maxCharacters = resolveSemanticCorpusCharacterLimit(options.providerName, options.maxCharacters)\n .maxCharacters;\n if (serialized.length <= maxCharacters) {\n return serialized;\n }\n if (maxCharacters <= SEMANTIC_CORPUS_TRUNCATION_SUFFIX.length) {\n return SEMANTIC_CORPUS_TRUNCATION_SUFFIX.slice(0, maxCharacters);\n }\n const keepLength = Math.max(0, maxCharacters - SEMANTIC_CORPUS_TRUNCATION_SUFFIX.length);\n return `${serialized.slice(0, keepLength)}${SEMANTIC_CORPUS_TRUNCATION_SUFFIX}`;\n}\n"],"names":[],"mappings":";;AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAsB;IAC7D,OAAO;IACP,aAAa;IACb,MAAM;IACN,QAAQ;IACR,MAAM;IACN,UAAU;IACV,UAAU;IACV,QAAQ;IACR,MAAM;IACN,OAAO;IACP,SAAS;IACT,MAAM;IACN,YAAY;IACZ,mBAAmB;IACnB,qBAAqB;IACrB,YAAY;IACZ,iBAAiB;IACjB,eAAe;IACf,MAAM;IACN,UAAU;IACV,OAAO;IACP,WAAW;IACX,WAAW;IACX,QAAQ;IACR,cAAc;IACd,MAAM;CACE,CAAC;AAEX;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAgD;IACxF,MAAM,UAAU,GAAG,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC;IACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,4BAA4B,CAAC,CAAC;IAC3C,CAAC;IACD,wEAAwE;IACxE,yEAAyE;IACzE,2EAA2E;IAC3E,0DAA0D;IAC1D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,4BAA4B,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,IAAI,GAAG,CACL,UAAU;SACP,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;SAC7D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CACjE,CACF,CAAC;IACF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,4BAA4B,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,MAAM,4CAA4C,GAAG,KAAK,CAAC;AAClE,MAAM,CAAC,MAAM,2CAA2C,GAAG,KAAK,CAAC;AACjE,MAAM,CAAC,MAAM,iCAAiC,GAAG,gCAAgC,CAAC;AAClF,MAAM,CAAC,MAAM,sDAAsD,GACjE,uEAAuE,CAAC;AAE1E,SAAS,YAAY,CAAC,KAA0D;IAC9E,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAC/E,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAkB;IACjD,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACvC,YAAY,CAAC;QACX,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,MAAM;QACZ,KAAK,CAAC,KAAK;QACX,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC9C,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,UAAU,EAAE,IAAI;QACtB,KAAK,CAAC,UAAU,EAAE,QAAQ;QAC1B,KAAK,CAAC,UAAU,EAAE,KAAK;QACvB,KAAK,CAAC,UAAU,EAAE,KAAK;QACvB,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;QACvC,KAAK,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC;QACzC,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC;KACrC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAC/C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC5F,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACtH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;QACjD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1E,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAqB,EAAE,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjD,YAAY,CAAC;QACX,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,cAAc;QACnB,IAAI,CAAC,aAAa;QAClB,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAChG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAChF,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9F,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAC7E,CAAC,CACH,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1D,YAAY,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAC/E,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5G,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5D,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAC1D,CAAC;IACF,MAAM,cAAc,GAClB,IAAI,CAAC,SAAS,KAAK,SAAS;QAC5B,IAAI,CAAC,UAAU,KAAK,SAAS;QAC7B,IAAI,CAAC,YAAY,KAAK,SAAS;QAC/B,IAAI,CAAC,mBAAmB,KAAK,SAAS;QACtC,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,SAAS,CAAC,MAAM,GAAG,CAAC;QACpB,WAAW,CAAC,MAAM,GAAG,CAAC;QACtB,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,SAAS;QACpB,KAAK,EAAE,IAAI,CAAC,UAAU;QACtB,OAAO,EAAE,IAAI,CAAC,YAAY;QAC1B,cAAc,EAAE,IAAI,CAAC,mBAAmB;QACxC,KAAK;QACL,SAAS;QACT,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAUD;;;;;GAKG;AACH,MAAM,qBAAqB,GAAwD;IACjF,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;IAC5C,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW;IACxD,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;IAC1C,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;IAC9C,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;IAC1C,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CACrB,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;IACzF,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/G,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACzG,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACnG,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACtG,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5G,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACnG,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,CACvB,QAAQ,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI;QACjF,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU;QAC9B,CAAC,CAAC,SAAS;IACf,iBAAiB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC9B,OAAO,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;IAC3G,mBAAmB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAChC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;IAC7G,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,CACvB,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;IAC3F,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;IACrG,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC1B,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;IACjG,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;IACjC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;IACrF,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/E,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;IACvF,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC/D,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzD,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,CACzB,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrD,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC,CAAC;IACL,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;CACvD,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,QAAsB,EAAE,UAA+B,EAAE;IACzF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,4BAA4B,CAAC;IAC9D,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,wCAAwC,CAAC,YAAgC;IACvF,IAAI,YAAY,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpD,OAAO,2CAA2C,CAAC;IACrD,CAAC;IACD,OAAO,4CAA4C,CAAC;AACtD,CAAC;AAOD,MAAM,UAAU,mCAAmC,CACjD,YAAgC,EAChC,uBAAgC;IAEhC,MAAM,oBAAoB,GAAG,wCAAwC,CAAC,YAAY,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;IAC9D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO;YACL,aAAa,EAAE,MAAM;YACrB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,aAAa,EAAE,oBAAoB;QACnC,OAAO,EACL,uBAAuB,KAAK,SAAS,IAAI,uBAAuB,KAAK,IAAI;YACvE,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,sDAAsD;KAC7D,CAAC;AACJ,CAAC;AAcD,MAAM,UAAU,wBAAwB,CAAC,QAAsB,EAAE,UAAsC,EAAE;IACvG,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,aAAa,GAAG,mCAAmC,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC;SACnG,aAAa,CAAC;IACjB,IAAI,UAAU,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC;QACvC,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,aAAa,IAAI,iCAAiC,CAAC,MAAM,EAAE,CAAC;QAC9D,OAAO,iCAAiC,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,iCAAiC,CAAC,MAAM,CAAC,CAAC;IACzF,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,iCAAiC,EAAE,CAAC;AAClF,CAAC","debugId":"18276e08-26d0-5af6-8b20-d1cf86ad8ff4"}
|
|
@@ -11,6 +11,25 @@ export interface EmbeddingProviderResolution {
|
|
|
11
11
|
active: EmbeddingProviderConfig | null;
|
|
12
12
|
available: EmbeddingProviderConfig[];
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* GH-244: how an active search-provider / vector-store adapter came to be
|
|
16
|
+
* resolved, so `pm health` can explain why a working runtime can coexist with
|
|
17
|
+
* empty persisted `search.provider` / `vector_store.adapter` settings:
|
|
18
|
+
* - "configured": the persisted setting names the active resolution.
|
|
19
|
+
* - "auto-detected": runtime auto-detection selected it; the setting is empty.
|
|
20
|
+
* - "unconfigured": nothing is active.
|
|
21
|
+
*/
|
|
22
|
+
export type ProviderConfigSource = "configured" | "auto-detected" | "unconfigured";
|
|
23
|
+
/**
|
|
24
|
+
* Classifies the resolution source for an active provider/adapter given the
|
|
25
|
+
* persisted (possibly empty) configured value. Pure and adapter-agnostic so it
|
|
26
|
+
* serves both the embedding provider and the vector-store adapter. "configured"
|
|
27
|
+
* requires the persisted value to actually MATCH the active resolution
|
|
28
|
+
* (case-insensitively): a configured-but-unhonored value (typo or unsupported
|
|
29
|
+
* name that the runtime fell back from) is reported as "auto-detected", not
|
|
30
|
+
* falsely "configured".
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveProviderConfigSource(activeName: string | null | undefined, configured: string | null | undefined): ProviderConfigSource;
|
|
14
33
|
export interface EmbeddingRequestTarget {
|
|
15
34
|
provider: EmbeddingProviderName;
|
|
16
35
|
endpoint: string;
|
|
@@ -1,7 +1,24 @@
|
|
|
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]="9f950fed-f820-56f3-b7eb-3fa943f0d9c9")}catch(e){}}();
|
|
3
3
|
import { executeSearchJsonRequest, normalizeSearchHttpTimeoutMs, resolveSearchHttpFetcher, } from "./http-client.js";
|
|
4
4
|
import { isFiniteNumberArray, toNonEmptyString, trimTrailingSlashes, } from "../shared/primitives.js";
|
|
5
|
+
/**
|
|
6
|
+
* Classifies the resolution source for an active provider/adapter given the
|
|
7
|
+
* persisted (possibly empty) configured value. Pure and adapter-agnostic so it
|
|
8
|
+
* serves both the embedding provider and the vector-store adapter. "configured"
|
|
9
|
+
* requires the persisted value to actually MATCH the active resolution
|
|
10
|
+
* (case-insensitively): a configured-but-unhonored value (typo or unsupported
|
|
11
|
+
* name that the runtime fell back from) is reported as "auto-detected", not
|
|
12
|
+
* falsely "configured".
|
|
13
|
+
*/
|
|
14
|
+
export function resolveProviderConfigSource(activeName, configured) {
|
|
15
|
+
const active = toNonEmptyString(activeName);
|
|
16
|
+
if (!active) {
|
|
17
|
+
return "unconfigured";
|
|
18
|
+
}
|
|
19
|
+
const configuredValue = toNonEmptyString(configured);
|
|
20
|
+
return configuredValue && configuredValue.toLowerCase() === active.toLowerCase() ? "configured" : "auto-detected";
|
|
21
|
+
}
|
|
5
22
|
function normalizeOpenAiEmbeddingsEndpoint(baseUrl) {
|
|
6
23
|
const normalizedBaseUrl = trimTrailingSlashes(baseUrl);
|
|
7
24
|
const normalizedLower = normalizedBaseUrl.toLowerCase();
|
|
@@ -216,4 +233,4 @@ export async function executeEmbeddingRequest(provider, input, options = {}) {
|
|
|
216
233
|
return dedupedInputs.originalToUniqueIndex.map((uniqueIndex) => [...vectors[uniqueIndex]]);
|
|
217
234
|
}
|
|
218
235
|
//# sourceMappingURL=providers.js.map
|
|
219
|
-
//# debugId=
|
|
236
|
+
//# debugId=9f950fed-f820-56f3-b7eb-3fa943f0d9c9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sources":["core/search/providers.ts"],"sourceRoot":"/","sourcesContent":["import type { PmSettings } from \"../../types/index.js\";\nimport {\n executeSearchJsonRequest,\n normalizeSearchHttpTimeoutMs,\n resolveSearchHttpFetcher,\n} from \"./http-client.js\";\nimport type { SearchHttpFetcher, SearchHttpResponse } from \"./http-client.js\";\nimport {\n isFiniteNumberArray,\n toNonEmptyString,\n trimTrailingSlashes,\n} from \"../shared/primitives.js\";\n\nexport type EmbeddingProviderName = \"openai\" | \"ollama\";\n\nexport interface EmbeddingProviderConfig {\n name: EmbeddingProviderName;\n base_url: string;\n model: string;\n api_key?: string;\n}\n\nexport interface EmbeddingProviderResolution {\n active: EmbeddingProviderConfig | null;\n available: EmbeddingProviderConfig[];\n}\n\nexport interface EmbeddingRequestTarget {\n provider: EmbeddingProviderName;\n endpoint: string;\n model: string;\n}\n\nexport interface EmbeddingRequestPlan {\n target: EmbeddingRequestTarget;\n method: \"POST\";\n headers: Record<string, string>;\n body: Record<string, unknown>;\n}\n\nexport type EmbeddingHttpResponse = SearchHttpResponse;\n\nexport type EmbeddingRequestFetcher = SearchHttpFetcher<EmbeddingHttpResponse>;\n\nexport interface ExecuteEmbeddingRequestOptions {\n timeout_ms?: number;\n fetcher?: EmbeddingRequestFetcher;\n}\n\ntype ProviderSettingsInput = {\n providers?: {\n openai?: {\n base_url?: string;\n api_key?: string;\n model?: string;\n };\n ollama?: {\n base_url?: string;\n model?: string;\n };\n };\n};\n\nfunction normalizeOpenAiEmbeddingsEndpoint(baseUrl: string): string {\n const normalizedBaseUrl = trimTrailingSlashes(baseUrl);\n const normalizedLower = normalizedBaseUrl.toLowerCase();\n if (normalizedLower.endsWith(\"/embeddings\")) {\n return normalizedBaseUrl;\n }\n if (normalizedLower.endsWith(\"/v1\")) {\n return `${normalizedBaseUrl}/embeddings`;\n }\n return `${normalizedBaseUrl}/v1/embeddings`;\n}\n\nfunction resolveSearchEmbeddingModelOverride(settings: ProviderSettingsInput): string | null {\n // `settings.search.embedding_model` is documented as overriding the\n // provider-specific model when set (see CONFIG_KEY_ALIASES for\n // `search_embedding_model` in src/core/config/nested-settings.ts). Each\n // provider resolver picks this up after its own model is read so the\n // override applies to whichever built-in is selected.\n const candidate = (settings as { search?: { embedding_model?: unknown } }).search?.embedding_model;\n return toNonEmptyString(candidate) || null;\n}\n\nfunction resolveOpenAiProvider(settings: ProviderSettingsInput): EmbeddingProviderConfig | null {\n const baseUrl = toNonEmptyString(settings.providers?.openai?.base_url);\n const model = toNonEmptyString(settings.providers?.openai?.model);\n if (!baseUrl || !model) {\n return null;\n }\n const override = resolveSearchEmbeddingModelOverride(settings);\n const apiKey = toNonEmptyString(settings.providers?.openai?.api_key);\n return {\n name: \"openai\",\n base_url: baseUrl,\n model: override ?? model,\n ...(apiKey ? { api_key: apiKey } : {}),\n };\n}\n\nfunction resolveOllamaProvider(settings: ProviderSettingsInput): EmbeddingProviderConfig | null {\n const baseUrl = toNonEmptyString(settings.providers?.ollama?.base_url);\n const model = toNonEmptyString(settings.providers?.ollama?.model);\n if (!baseUrl || !model) {\n return null;\n }\n const override = resolveSearchEmbeddingModelOverride(settings);\n return {\n name: \"ollama\",\n base_url: baseUrl,\n model: override ?? model,\n };\n}\n\nfunction normalizeEmbeddingInputs(input: string | string[]): string[] {\n const inputs = (Array.isArray(input) ? input : [input])\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (inputs.length === 0) {\n throw new Error(\"Embedding input must include at least one non-empty string\");\n }\n return inputs;\n}\n\ninterface DedupedEmbeddingInputs {\n uniqueInputs: string[];\n originalToUniqueIndex: number[];\n}\n\nfunction dedupeEmbeddingInputs(inputs: string[]): DedupedEmbeddingInputs {\n const uniqueInputs: string[] = [];\n const originalToUniqueIndex: number[] = [];\n const uniqueIndexByInput = new Map<string, number>();\n for (const entry of inputs) {\n const existingUniqueIndex = uniqueIndexByInput.get(entry);\n if (existingUniqueIndex === undefined) {\n const nextUniqueIndex = uniqueInputs.length;\n uniqueInputs.push(entry);\n uniqueIndexByInput.set(entry, nextUniqueIndex);\n originalToUniqueIndex.push(nextUniqueIndex);\n continue;\n }\n originalToUniqueIndex.push(existingUniqueIndex);\n }\n return {\n uniqueInputs,\n originalToUniqueIndex,\n };\n}\n\ninterface OpenAiEmbeddingResponseEntry {\n embedding: unknown;\n index: unknown;\n position: number;\n}\n\nfunction buildOrderedOpenAiEntries(data: unknown[]): OpenAiEmbeddingResponseEntry[] {\n const openAiEntries = data.map((entry, position) => ({\n embedding: (entry as { embedding?: unknown }).embedding,\n index: (entry as { index?: unknown }).index,\n position,\n }));\n const hasExplicitIndex = openAiEntries.some((entry) => entry.index !== undefined);\n if (hasExplicitIndex) {\n for (const entry of openAiEntries) {\n if (!Number.isInteger(entry.index)) {\n throw new TypeError(`OpenAI embedding response entry at position ${entry.position} is missing a valid integer index`);\n }\n }\n return [...openAiEntries].sort((a, b) => {\n const byIndex = (a.index as number) - (b.index as number);\n if (byIndex !== 0) {\n return byIndex;\n }\n return a.position - b.position;\n });\n }\n return openAiEntries;\n}\n\nexport function resolveEmbeddingProviders(settings: PmSettings | ProviderSettingsInput): EmbeddingProviderResolution {\n const openAi = resolveOpenAiProvider(settings);\n const ollama = resolveOllamaProvider(settings);\n const available = [openAi, ollama].filter((entry): entry is EmbeddingProviderConfig => entry !== null);\n // Honor `settings.search.provider` when set: if both built-in providers are\n // configured, the preferred name wins; otherwise fall back to the first\n // available entry (preserves the previous tie-break: openai > ollama).\n // Match case-insensitively so \"OpenAI\" / \"Ollama\" / \"OLLAMA\" all work.\n const preferredName = toNonEmptyString(\n (settings as { search?: { provider?: unknown } }).search?.provider,\n );\n const preferredKey = preferredName ? preferredName.toLowerCase() : null;\n const preferred = preferredKey\n ? available.find((entry) => entry.name === preferredKey)\n : undefined;\n return {\n active: preferred ?? available[0] ?? null,\n available,\n };\n}\n\nexport function resolveEmbeddingRequestTarget(provider: EmbeddingProviderConfig): EmbeddingRequestTarget {\n const baseUrl = trimTrailingSlashes(provider.base_url);\n if (provider.name === \"openai\") {\n return {\n provider: \"openai\",\n endpoint: normalizeOpenAiEmbeddingsEndpoint(baseUrl),\n model: provider.model,\n };\n }\n return {\n provider: \"ollama\",\n endpoint: `${baseUrl}/api/embed`,\n model: provider.model,\n };\n}\n\nexport function buildEmbeddingRequestPlan(provider: EmbeddingProviderConfig, input: string | string[]): EmbeddingRequestPlan {\n const normalizedInputs = normalizeEmbeddingInputs(input);\n if (provider.name === \"openai\") {\n return {\n target: resolveEmbeddingRequestTarget(provider),\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(provider.api_key ? { authorization: `Bearer ${provider.api_key}` } : {}),\n },\n body: {\n model: provider.model,\n input: normalizedInputs.length === 1 ? normalizedInputs[0] : normalizedInputs,\n },\n };\n }\n return {\n target: resolveEmbeddingRequestTarget(provider),\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: {\n model: provider.model,\n input: normalizedInputs,\n },\n };\n}\n\nexport function normalizeEmbeddingResponse(provider: EmbeddingProviderConfig, response: unknown): number[][] {\n if (provider.name === \"openai\") {\n const data = (response as { data?: unknown }).data;\n if (!Array.isArray(data) || data.length === 0) {\n throw new Error(\"OpenAI embedding response must include a non-empty data array\");\n }\n const orderedEntries = buildOrderedOpenAiEntries(data);\n\n return orderedEntries.map((entry, index) => {\n const embedding = entry.embedding;\n if (!isFiniteNumberArray(embedding)) {\n throw new Error(`OpenAI embedding response entry at index ${index} is missing a numeric embedding vector`);\n }\n return [...embedding];\n });\n }\n\n const singleEmbedding = (response as { embedding?: unknown }).embedding;\n if (isFiniteNumberArray(singleEmbedding)) {\n return [[...singleEmbedding]];\n }\n\n const multipleEmbeddings = (response as { embeddings?: unknown }).embeddings;\n if (Array.isArray(multipleEmbeddings) && multipleEmbeddings.length > 0) {\n return multipleEmbeddings.map((entry, index) => {\n if (!isFiniteNumberArray(entry)) {\n throw new Error(`Ollama embedding response entry at index ${index} is missing a numeric embedding vector`);\n }\n return [...entry];\n });\n }\n\n throw new Error(\"Ollama embedding response must include embedding or embeddings vectors\");\n}\n\nexport async function executeEmbeddingRequest(\n provider: EmbeddingProviderConfig,\n input: string | string[],\n options: ExecuteEmbeddingRequestOptions = {},\n): Promise<number[][]> {\n const timeoutMs = normalizeSearchHttpTimeoutMs(options.timeout_ms, \"Embedding request\");\n const fetcher = resolveSearchHttpFetcher(options.fetcher, \"Embedding request\");\n const normalizedInputs = normalizeEmbeddingInputs(input);\n const dedupedInputs = dedupeEmbeddingInputs(normalizedInputs);\n const requestPlan = buildEmbeddingRequestPlan(provider, dedupedInputs.uniqueInputs);\n const payload = await executeSearchJsonRequest({\n endpoint: requestPlan.target.endpoint,\n method: requestPlan.method,\n headers: requestPlan.headers,\n body: requestPlan.body,\n timeoutMs,\n fetcher,\n requestLabel: \"Embedding request\",\n responseLabel: \"Embedding response\",\n });\n const vectors = normalizeEmbeddingResponse(provider, payload);\n if (vectors.length !== dedupedInputs.uniqueInputs.length) {\n throw new Error(\n `Embedding response cardinality mismatch: expected ${dedupedInputs.uniqueInputs.length} vector(s), received ${vectors.length}`,\n );\n }\n return dedupedInputs.originalToUniqueIndex.map((uniqueIndex) => [...vectors[uniqueIndex]]);\n}\n"],"names":[],"mappings":"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","debugId":"fdb3ffd3-61f6-55db-a926-a3fce76e815c"}
|
|
1
|
+
{"version":3,"file":"providers.js","sources":["core/search/providers.ts"],"sourceRoot":"/","sourcesContent":["import type { PmSettings } from \"../../types/index.js\";\nimport {\n executeSearchJsonRequest,\n normalizeSearchHttpTimeoutMs,\n resolveSearchHttpFetcher,\n} from \"./http-client.js\";\nimport type { SearchHttpFetcher, SearchHttpResponse } from \"./http-client.js\";\nimport {\n isFiniteNumberArray,\n toNonEmptyString,\n trimTrailingSlashes,\n} from \"../shared/primitives.js\";\n\nexport type EmbeddingProviderName = \"openai\" | \"ollama\";\n\nexport interface EmbeddingProviderConfig {\n name: EmbeddingProviderName;\n base_url: string;\n model: string;\n api_key?: string;\n}\n\nexport interface EmbeddingProviderResolution {\n active: EmbeddingProviderConfig | null;\n available: EmbeddingProviderConfig[];\n}\n\n/**\n * GH-244: how an active search-provider / vector-store adapter came to be\n * resolved, so `pm health` can explain why a working runtime can coexist with\n * empty persisted `search.provider` / `vector_store.adapter` settings:\n * - \"configured\": the persisted setting names the active resolution.\n * - \"auto-detected\": runtime auto-detection selected it; the setting is empty.\n * - \"unconfigured\": nothing is active.\n */\nexport type ProviderConfigSource = \"configured\" | \"auto-detected\" | \"unconfigured\";\n\n/**\n * Classifies the resolution source for an active provider/adapter given the\n * persisted (possibly empty) configured value. Pure and adapter-agnostic so it\n * serves both the embedding provider and the vector-store adapter. \"configured\"\n * requires the persisted value to actually MATCH the active resolution\n * (case-insensitively): a configured-but-unhonored value (typo or unsupported\n * name that the runtime fell back from) is reported as \"auto-detected\", not\n * falsely \"configured\".\n */\nexport function resolveProviderConfigSource(\n activeName: string | null | undefined,\n configured: string | null | undefined,\n): ProviderConfigSource {\n const active = toNonEmptyString(activeName);\n if (!active) {\n return \"unconfigured\";\n }\n const configuredValue = toNonEmptyString(configured);\n return configuredValue && configuredValue.toLowerCase() === active.toLowerCase() ? \"configured\" : \"auto-detected\";\n}\n\nexport interface EmbeddingRequestTarget {\n provider: EmbeddingProviderName;\n endpoint: string;\n model: string;\n}\n\nexport interface EmbeddingRequestPlan {\n target: EmbeddingRequestTarget;\n method: \"POST\";\n headers: Record<string, string>;\n body: Record<string, unknown>;\n}\n\nexport type EmbeddingHttpResponse = SearchHttpResponse;\n\nexport type EmbeddingRequestFetcher = SearchHttpFetcher<EmbeddingHttpResponse>;\n\nexport interface ExecuteEmbeddingRequestOptions {\n timeout_ms?: number;\n fetcher?: EmbeddingRequestFetcher;\n}\n\ntype ProviderSettingsInput = {\n providers?: {\n openai?: {\n base_url?: string;\n api_key?: string;\n model?: string;\n };\n ollama?: {\n base_url?: string;\n model?: string;\n };\n };\n};\n\nfunction normalizeOpenAiEmbeddingsEndpoint(baseUrl: string): string {\n const normalizedBaseUrl = trimTrailingSlashes(baseUrl);\n const normalizedLower = normalizedBaseUrl.toLowerCase();\n if (normalizedLower.endsWith(\"/embeddings\")) {\n return normalizedBaseUrl;\n }\n if (normalizedLower.endsWith(\"/v1\")) {\n return `${normalizedBaseUrl}/embeddings`;\n }\n return `${normalizedBaseUrl}/v1/embeddings`;\n}\n\nfunction resolveSearchEmbeddingModelOverride(settings: ProviderSettingsInput): string | null {\n // `settings.search.embedding_model` is documented as overriding the\n // provider-specific model when set (see CONFIG_KEY_ALIASES for\n // `search_embedding_model` in src/core/config/nested-settings.ts). Each\n // provider resolver picks this up after its own model is read so the\n // override applies to whichever built-in is selected.\n const candidate = (settings as { search?: { embedding_model?: unknown } }).search?.embedding_model;\n return toNonEmptyString(candidate) || null;\n}\n\nfunction resolveOpenAiProvider(settings: ProviderSettingsInput): EmbeddingProviderConfig | null {\n const baseUrl = toNonEmptyString(settings.providers?.openai?.base_url);\n const model = toNonEmptyString(settings.providers?.openai?.model);\n if (!baseUrl || !model) {\n return null;\n }\n const override = resolveSearchEmbeddingModelOverride(settings);\n const apiKey = toNonEmptyString(settings.providers?.openai?.api_key);\n return {\n name: \"openai\",\n base_url: baseUrl,\n model: override ?? model,\n ...(apiKey ? { api_key: apiKey } : {}),\n };\n}\n\nfunction resolveOllamaProvider(settings: ProviderSettingsInput): EmbeddingProviderConfig | null {\n const baseUrl = toNonEmptyString(settings.providers?.ollama?.base_url);\n const model = toNonEmptyString(settings.providers?.ollama?.model);\n if (!baseUrl || !model) {\n return null;\n }\n const override = resolveSearchEmbeddingModelOverride(settings);\n return {\n name: \"ollama\",\n base_url: baseUrl,\n model: override ?? model,\n };\n}\n\nfunction normalizeEmbeddingInputs(input: string | string[]): string[] {\n const inputs = (Array.isArray(input) ? input : [input])\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (inputs.length === 0) {\n throw new Error(\"Embedding input must include at least one non-empty string\");\n }\n return inputs;\n}\n\ninterface DedupedEmbeddingInputs {\n uniqueInputs: string[];\n originalToUniqueIndex: number[];\n}\n\nfunction dedupeEmbeddingInputs(inputs: string[]): DedupedEmbeddingInputs {\n const uniqueInputs: string[] = [];\n const originalToUniqueIndex: number[] = [];\n const uniqueIndexByInput = new Map<string, number>();\n for (const entry of inputs) {\n const existingUniqueIndex = uniqueIndexByInput.get(entry);\n if (existingUniqueIndex === undefined) {\n const nextUniqueIndex = uniqueInputs.length;\n uniqueInputs.push(entry);\n uniqueIndexByInput.set(entry, nextUniqueIndex);\n originalToUniqueIndex.push(nextUniqueIndex);\n continue;\n }\n originalToUniqueIndex.push(existingUniqueIndex);\n }\n return {\n uniqueInputs,\n originalToUniqueIndex,\n };\n}\n\ninterface OpenAiEmbeddingResponseEntry {\n embedding: unknown;\n index: unknown;\n position: number;\n}\n\nfunction buildOrderedOpenAiEntries(data: unknown[]): OpenAiEmbeddingResponseEntry[] {\n const openAiEntries = data.map((entry, position) => ({\n embedding: (entry as { embedding?: unknown }).embedding,\n index: (entry as { index?: unknown }).index,\n position,\n }));\n const hasExplicitIndex = openAiEntries.some((entry) => entry.index !== undefined);\n if (hasExplicitIndex) {\n for (const entry of openAiEntries) {\n if (!Number.isInteger(entry.index)) {\n throw new TypeError(`OpenAI embedding response entry at position ${entry.position} is missing a valid integer index`);\n }\n }\n return [...openAiEntries].sort((a, b) => {\n const byIndex = (a.index as number) - (b.index as number);\n if (byIndex !== 0) {\n return byIndex;\n }\n return a.position - b.position;\n });\n }\n return openAiEntries;\n}\n\nexport function resolveEmbeddingProviders(settings: PmSettings | ProviderSettingsInput): EmbeddingProviderResolution {\n const openAi = resolveOpenAiProvider(settings);\n const ollama = resolveOllamaProvider(settings);\n const available = [openAi, ollama].filter((entry): entry is EmbeddingProviderConfig => entry !== null);\n // Honor `settings.search.provider` when set: if both built-in providers are\n // configured, the preferred name wins; otherwise fall back to the first\n // available entry (preserves the previous tie-break: openai > ollama).\n // Match case-insensitively so \"OpenAI\" / \"Ollama\" / \"OLLAMA\" all work.\n const preferredName = toNonEmptyString(\n (settings as { search?: { provider?: unknown } }).search?.provider,\n );\n const preferredKey = preferredName ? preferredName.toLowerCase() : null;\n const preferred = preferredKey\n ? available.find((entry) => entry.name === preferredKey)\n : undefined;\n return {\n active: preferred ?? available[0] ?? null,\n available,\n };\n}\n\nexport function resolveEmbeddingRequestTarget(provider: EmbeddingProviderConfig): EmbeddingRequestTarget {\n const baseUrl = trimTrailingSlashes(provider.base_url);\n if (provider.name === \"openai\") {\n return {\n provider: \"openai\",\n endpoint: normalizeOpenAiEmbeddingsEndpoint(baseUrl),\n model: provider.model,\n };\n }\n return {\n provider: \"ollama\",\n endpoint: `${baseUrl}/api/embed`,\n model: provider.model,\n };\n}\n\nexport function buildEmbeddingRequestPlan(provider: EmbeddingProviderConfig, input: string | string[]): EmbeddingRequestPlan {\n const normalizedInputs = normalizeEmbeddingInputs(input);\n if (provider.name === \"openai\") {\n return {\n target: resolveEmbeddingRequestTarget(provider),\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(provider.api_key ? { authorization: `Bearer ${provider.api_key}` } : {}),\n },\n body: {\n model: provider.model,\n input: normalizedInputs.length === 1 ? normalizedInputs[0] : normalizedInputs,\n },\n };\n }\n return {\n target: resolveEmbeddingRequestTarget(provider),\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: {\n model: provider.model,\n input: normalizedInputs,\n },\n };\n}\n\nexport function normalizeEmbeddingResponse(provider: EmbeddingProviderConfig, response: unknown): number[][] {\n if (provider.name === \"openai\") {\n const data = (response as { data?: unknown }).data;\n if (!Array.isArray(data) || data.length === 0) {\n throw new Error(\"OpenAI embedding response must include a non-empty data array\");\n }\n const orderedEntries = buildOrderedOpenAiEntries(data);\n\n return orderedEntries.map((entry, index) => {\n const embedding = entry.embedding;\n if (!isFiniteNumberArray(embedding)) {\n throw new Error(`OpenAI embedding response entry at index ${index} is missing a numeric embedding vector`);\n }\n return [...embedding];\n });\n }\n\n const singleEmbedding = (response as { embedding?: unknown }).embedding;\n if (isFiniteNumberArray(singleEmbedding)) {\n return [[...singleEmbedding]];\n }\n\n const multipleEmbeddings = (response as { embeddings?: unknown }).embeddings;\n if (Array.isArray(multipleEmbeddings) && multipleEmbeddings.length > 0) {\n return multipleEmbeddings.map((entry, index) => {\n if (!isFiniteNumberArray(entry)) {\n throw new Error(`Ollama embedding response entry at index ${index} is missing a numeric embedding vector`);\n }\n return [...entry];\n });\n }\n\n throw new Error(\"Ollama embedding response must include embedding or embeddings vectors\");\n}\n\nexport async function executeEmbeddingRequest(\n provider: EmbeddingProviderConfig,\n input: string | string[],\n options: ExecuteEmbeddingRequestOptions = {},\n): Promise<number[][]> {\n const timeoutMs = normalizeSearchHttpTimeoutMs(options.timeout_ms, \"Embedding request\");\n const fetcher = resolveSearchHttpFetcher(options.fetcher, \"Embedding request\");\n const normalizedInputs = normalizeEmbeddingInputs(input);\n const dedupedInputs = dedupeEmbeddingInputs(normalizedInputs);\n const requestPlan = buildEmbeddingRequestPlan(provider, dedupedInputs.uniqueInputs);\n const payload = await executeSearchJsonRequest({\n endpoint: requestPlan.target.endpoint,\n method: requestPlan.method,\n headers: requestPlan.headers,\n body: requestPlan.body,\n timeoutMs,\n fetcher,\n requestLabel: \"Embedding request\",\n responseLabel: \"Embedding response\",\n });\n const vectors = normalizeEmbeddingResponse(provider, payload);\n if (vectors.length !== dedupedInputs.uniqueInputs.length) {\n throw new Error(\n `Embedding response cardinality mismatch: expected ${dedupedInputs.uniqueInputs.length} vector(s), received ${vectors.length}`,\n );\n }\n return dedupedInputs.originalToUniqueIndex.map((uniqueIndex) => [...vectors[uniqueIndex]]);\n}\n"],"names":[],"mappings":"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","debugId":"9f950fed-f820-56f3-b7eb-3fa943f0d9c9"}
|
|
@@ -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]="8d40e365-c64b-5f7b-a275-92c9123cff27")}catch(e){}}();
|
|
3
3
|
import { resolvePmCliVersion } from "../packages/root.js";
|
|
4
4
|
const OPT_OUT_VALUES = new Set(["1", "true", "yes", "on"]);
|
|
5
5
|
function isSentryDisabled() {
|
|
@@ -299,6 +299,10 @@ export const _testOnly = {
|
|
|
299
299
|
isKnownNoisyConsoleBreadcrumb,
|
|
300
300
|
scrubString,
|
|
301
301
|
scrubEventData,
|
|
302
|
+
resetSentryStateForTests() {
|
|
303
|
+
_sentry = undefined;
|
|
304
|
+
_initDone = false;
|
|
305
|
+
},
|
|
302
306
|
};
|
|
303
307
|
//# sourceMappingURL=instrument.js.map
|
|
304
|
-
//# debugId=
|
|
308
|
+
//# debugId=8d40e365-c64b-5f7b-a275-92c9123cff27
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument.js","sources":["core/sentry/instrument.ts"],"sourceRoot":"/","sourcesContent":["import { resolvePmCliVersion } from \"../packages/root.js\";\n\nconst OPT_OUT_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\n\nfunction isSentryDisabled(): boolean {\n if (OPT_OUT_VALUES.has((process.env.PM_SENTRY_DISABLED ?? \"\").trim().toLowerCase())) return true;\n if (OPT_OUT_VALUES.has((process.env.PM_TELEMETRY_DISABLED ?? \"\").trim().toLowerCase())) return true;\n if (process.env.VITEST || process.env.VITEST_WORKER_ID) return true;\n return false;\n}\n\nconst SENSITIVE_KEY_PATTERN =\n /(?:token|secret|password|passwd|api[_-]?key|apikey|authorization|cookie|credentials|bearer|dsn)/i;\n\nconst INLINE_SENSITIVE_ASSIGNMENT_RE = new RegExp(\n `\\\\b(${SENSITIVE_KEY_PATTERN.source})\\\\s*[:=]\\\\s*([^\\\\s,;]+)`,\n \"giu\",\n);\nconst ABSOLUTE_PATH_TOKEN_RE = /(^|[\\s\"'`(=])\\/(?:[^\\s\"'`),;]+)/g;\nconst FILE_URL_PATH_RE = /file:\\/\\/\\/?[^\\s\"'`),;]+/giu;\nconst WINDOWS_PATH_TOKEN_RE = /\\b[A-Za-z]:\\\\[^\\s\"'`),;]+/g;\nconst PRIVATE_IP_RE =\n /\\b(?:10\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)|172\\.(?:1[6-9]|2\\d|3[01])\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)|192\\.168\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))\\b/g;\nconst PATH_FIELD_KEY_PATTERN = /(?:^|[_-])(path|filename|file|module|cwd|dir|directory|location|source|script)s?$/i;\nconst KNOWN_NOISY_CONSOLE_MESSAGE_PATTERNS = [\n \"[starter-extension] activating\",\n \"[starter-extension] all 8 capabilities registered.\",\n \"[starter-extension] commands:\",\n \"[starter] preflight check for workspace\",\n \"[starter] output_format service override active\",\n \"[pm-ext-ts-starter] activating\",\n \"[pm-ext-ts-starter] all capabilities registered.\",\n \"run `pm init` first to initialise a pm workspace\",\n] as const;\n\nfunction looksLikeFilesystemPath(value: string): boolean {\n const normalized = value.trim();\n if (normalized.length === 0) {\n return false;\n }\n if (normalized.startsWith(\"/\") || normalized.startsWith(\"file://\")) {\n return true;\n }\n if (/^[A-Za-z]:\\\\/.test(normalized) || normalized.startsWith(\"\\\\\\\\\")) {\n return true;\n }\n return normalized.includes(\"/home/\");\n}\n\nfunction scrubString(value: string, keyHint?: string): string {\n if (keyHint && PATH_FIELD_KEY_PATTERN.test(keyHint) && looksLikeFilesystemPath(value)) {\n return \"[scrubbed_path]\";\n }\n const scrubbed = value\n .replaceAll(INLINE_SENSITIVE_ASSIGNMENT_RE, (_m, key: string) => `${key}=[scrubbed]`)\n .replaceAll(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/giu, \"[scrubbed_email]\")\n .replaceAll(/bearer\\s+[a-z0-9._=-]+/giu, \"bearer [scrubbed]\")\n .replaceAll(/sntr[ysu]_[A-Za-z0-9_-]+/g, \"[scrubbed_sentry_token]\")\n .replaceAll(PRIVATE_IP_RE, \"[scrubbed_ip]\")\n .replaceAll(FILE_URL_PATH_RE, \"[scrubbed_path]\")\n .replaceAll(WINDOWS_PATH_TOKEN_RE, \"[scrubbed_path]\")\n .replaceAll(ABSOLUTE_PATH_TOKEN_RE, (_match: string, prefix: string) => `${prefix}[scrubbed_path]`);\n if (looksLikeFilesystemPath(scrubbed)) {\n return \"[scrubbed_path]\";\n }\n return scrubbed;\n}\n\nfunction scrubEventData(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (SENSITIVE_KEY_PATTERN.test(key)) {\n result[key] = \"[scrubbed]\";\n } else if (typeof value === \"string\") {\n result[key] = scrubString(value, key);\n } else if (Array.isArray(value)) {\n result[key] = value.map((entry) => {\n if (typeof entry === \"string\") {\n return scrubString(entry, key);\n }\n if (entry && typeof entry === \"object\") {\n return scrubEventData(entry as Record<string, unknown>);\n }\n return entry;\n });\n } else if (value && typeof value === \"object\") {\n result[key] = scrubEventData(value as Record<string, unknown>);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction scrubStackFrame(frame: Record<string, unknown>): void {\n for (const key of [\"filename\", \"absPath\", \"abs_path\", \"module\"]) {\n const rawValue = frame[key];\n if (typeof rawValue === \"string\") {\n frame[key] = scrubString(rawValue, key);\n }\n }\n const contextLine = frame.context_line;\n if (typeof contextLine === \"string\") {\n frame.context_line = scrubString(contextLine, \"context_line\");\n }\n for (const key of [\"pre_context\", \"post_context\"]) {\n const context = frame[key];\n if (!Array.isArray(context)) {\n continue;\n }\n frame[key] = context.map((entry) => (typeof entry === \"string\" ? scrubString(entry, key) : entry));\n }\n if (frame.vars && typeof frame.vars === \"object\") {\n frame.vars = scrubEventData(frame.vars as Record<string, unknown>);\n }\n if (frame.data && typeof frame.data === \"object\") {\n frame.data = scrubEventData(frame.data as Record<string, unknown>);\n }\n}\n\ntype SentryLike = typeof import(\"@sentry/node\");\n\nlet _sentry: SentryLike | undefined;\nlet _initDone = false;\n\nconst PM_CLI_SENTRY_DSN =\n \"https://bf7ad2ec76c0051c2ee94e48e8bd6868@o4510603477712896.ingest.de.sentry.io/4511316775338064\";\n\nfunction hasPmCliErrorPrefix(value: string): boolean {\n return /^\\s*PmCliError:/.test(value);\n}\n\nfunction isKnownNoisyConsoleMessage(value: string): boolean {\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) {\n return false;\n }\n return KNOWN_NOISY_CONSOLE_MESSAGE_PATTERNS.some((pattern) => normalized.includes(pattern));\n}\n\nfunction isKnownNoisyConsoleEvent(event: {\n logger?: string;\n message?: string;\n exception?: { values?: Array<{ value?: string }> };\n}): boolean {\n if (event.logger !== \"console\") {\n return false;\n }\n if (typeof event.message === \"string\" && isKnownNoisyConsoleMessage(event.message)) {\n return true;\n }\n return (\n Array.isArray(event.exception?.values) &&\n event.exception.values.some((entry) => typeof entry.value === \"string\" && isKnownNoisyConsoleMessage(entry.value))\n );\n}\n\nfunction isExpectedCliErrorEvent(event: {\n exception?: { values?: Array<{ type?: string; value?: string }> };\n message?: string;\n extra?: Record<string, unknown>;\n logger?: string;\n}): boolean {\n if (event.exception?.values?.some((ex) => ex.type === \"PmCliError\")) return true;\n\n if (event.exception?.values?.some((ex) => typeof ex.value === \"string\" && hasPmCliErrorPrefix(ex.value)))\n return true;\n\n if (event.logger === \"console\" && typeof event.message === \"string\" && hasPmCliErrorPrefix(event.message))\n return true;\n\n return false;\n}\n\nfunction isPmCliErrorBreadcrumb(breadcrumb: { category?: string; message?: string }): boolean {\n return (\n breadcrumb.category === \"console\" &&\n typeof breadcrumb.message === \"string\" &&\n hasPmCliErrorPrefix(breadcrumb.message)\n );\n}\n\nfunction isKnownNoisyConsoleBreadcrumb(breadcrumb: { category?: string; message?: string }): boolean {\n return breadcrumb.category === \"console\" && typeof breadcrumb.message === \"string\" && isKnownNoisyConsoleMessage(breadcrumb.message);\n}\n\nfunction resolveCliVersion(): string {\n return resolvePmCliVersion(import.meta.url, [\"../../..\"]) ?? \"0.0.0\";\n}\n\nfunction resolveEnvironment(): string {\n const explicit = process.env.SENTRY_ENVIRONMENT?.trim();\n if (explicit && explicit.length > 0) return explicit;\n if (process.env.VITEST || process.env.VITEST_WORKER_ID || process.env.NODE_ENV === \"test\") return \"test\";\n if (process.env.CI) return \"ci\";\n return \"production\";\n}\n\nexport async function ensureSentryInit(): Promise<SentryLike | undefined> {\n if (_initDone) return _sentry;\n _initDone = true;\n\n if (isSentryDisabled()) return undefined;\n\n const SentryModule = await import(\"@sentry/node\");\n _sentry = SentryModule;\n\n const dsn = process.env.SENTRY_DSN?.trim() || PM_CLI_SENTRY_DSN;\n const release = resolveCliVersion();\n\n SentryModule.init({\n dsn,\n release: `pm-cli@${release}`,\n environment: resolveEnvironment(),\n\n tracesSampleRate: 0.2,\n enableLogs: true,\n attachStacktrace: true,\n normalizeDepth: 6,\n shutdownTimeout: 3000,\n sendDefaultPii: false,\n serverName: undefined,\n\n integrations: [\n SentryModule.extraErrorDataIntegration({ depth: 4 }),\n SentryModule.captureConsoleIntegration({ levels: [\"warn\", \"error\"] }),\n ],\n\n initialScope: {\n tags: {\n \"cli.name\": \"pm-cli\",\n \"cli.version\": release,\n \"runtime.node\": process.version,\n \"runtime.platform\": process.platform,\n \"runtime.arch\": process.arch,\n },\n },\n\n beforeSend(event) {\n if (isExpectedCliErrorEvent(event) || isKnownNoisyConsoleEvent(event)) {\n return null;\n }\n if (event.message) {\n event.message = scrubString(event.message, \"message\");\n }\n if (event.transaction) {\n event.transaction = scrubString(event.transaction, \"transaction\");\n }\n\n if (event.exception?.values) {\n for (const exception of event.exception.values) {\n if (exception.value) {\n exception.value = scrubString(exception.value, \"value\");\n }\n if (exception.stacktrace?.frames) {\n for (const frame of exception.stacktrace.frames) {\n scrubStackFrame(frame as unknown as Record<string, unknown>);\n }\n }\n }\n }\n\n if (event.breadcrumbs) {\n for (const breadcrumb of event.breadcrumbs) {\n if (breadcrumb.message) {\n breadcrumb.message = scrubString(breadcrumb.message);\n }\n if (breadcrumb.data && typeof breadcrumb.data === \"object\") {\n breadcrumb.data = scrubEventData(breadcrumb.data as Record<string, unknown>);\n }\n }\n }\n\n if (event.extra && typeof event.extra === \"object\") {\n event.extra = scrubEventData(event.extra as Record<string, unknown>);\n }\n\n if (event.contexts) {\n for (const [ctxKey, ctx] of Object.entries(event.contexts)) {\n if (ctx && typeof ctx === \"object\") {\n event.contexts![ctxKey] = scrubEventData(ctx as Record<string, unknown>);\n }\n }\n }\n if (event.request && typeof event.request === \"object\") {\n event.request = scrubEventData(event.request as Record<string, unknown>) as typeof event.request;\n }\n if (event.user && typeof event.user === \"object\") {\n event.user = scrubEventData(event.user as Record<string, unknown>) as typeof event.user;\n }\n if (event.tags && typeof event.tags === \"object\") {\n event.tags = scrubEventData(event.tags as Record<string, unknown>) as typeof event.tags;\n }\n\n return event;\n },\n\n beforeSendTransaction(event) {\n if (event.breadcrumbs) {\n event.breadcrumbs = event.breadcrumbs.filter(\n (bc) => !isPmCliErrorBreadcrumb(bc) && !isKnownNoisyConsoleBreadcrumb(bc),\n );\n for (const breadcrumb of event.breadcrumbs) {\n if (breadcrumb.message) {\n breadcrumb.message = scrubString(breadcrumb.message, \"message\");\n }\n if (breadcrumb.data && typeof breadcrumb.data === \"object\") {\n breadcrumb.data = scrubEventData(breadcrumb.data as Record<string, unknown>);\n }\n }\n }\n if (event.contexts) {\n for (const [ctxKey, ctx] of Object.entries(event.contexts)) {\n if (ctx && typeof ctx === \"object\") {\n event.contexts![ctxKey] = scrubEventData(ctx as Record<string, unknown>);\n }\n }\n }\n return event;\n },\n\n beforeBreadcrumb(breadcrumb) {\n if (isPmCliErrorBreadcrumb(breadcrumb) || isKnownNoisyConsoleBreadcrumb(breadcrumb)) {\n return null;\n }\n if (breadcrumb.message) {\n breadcrumb.message = scrubString(breadcrumb.message, \"message\");\n }\n if (breadcrumb.data && typeof breadcrumb.data === \"object\") {\n breadcrumb.data = scrubEventData(breadcrumb.data as Record<string, unknown>);\n }\n return breadcrumb;\n },\n });\n\n return SentryModule;\n}\n\nexport function getSentry(): SentryLike | undefined {\n return _sentry;\n}\n\nexport const _testOnly = {\n isExpectedCliErrorEvent,\n isKnownNoisyConsoleEvent,\n isPmCliErrorBreadcrumb,\n isKnownNoisyConsoleBreadcrumb,\n scrubString,\n scrubEventData,\n};\n"],"names":[],"mappings":"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","debugId":"8db03e6a-d066-501e-98ea-09a81ba11273"}
|
|
1
|
+
{"version":3,"file":"instrument.js","sources":["core/sentry/instrument.ts"],"sourceRoot":"/","sourcesContent":["import { resolvePmCliVersion } from \"../packages/root.js\";\n\nconst OPT_OUT_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\n\nfunction isSentryDisabled(): boolean {\n if (OPT_OUT_VALUES.has((process.env.PM_SENTRY_DISABLED ?? \"\").trim().toLowerCase())) return true;\n if (OPT_OUT_VALUES.has((process.env.PM_TELEMETRY_DISABLED ?? \"\").trim().toLowerCase())) return true;\n if (process.env.VITEST || process.env.VITEST_WORKER_ID) return true;\n return false;\n}\n\nconst SENSITIVE_KEY_PATTERN =\n /(?:token|secret|password|passwd|api[_-]?key|apikey|authorization|cookie|credentials|bearer|dsn)/i;\n\nconst INLINE_SENSITIVE_ASSIGNMENT_RE = new RegExp(\n `\\\\b(${SENSITIVE_KEY_PATTERN.source})\\\\s*[:=]\\\\s*([^\\\\s,;]+)`,\n \"giu\",\n);\nconst ABSOLUTE_PATH_TOKEN_RE = /(^|[\\s\"'`(=])\\/(?:[^\\s\"'`),;]+)/g;\nconst FILE_URL_PATH_RE = /file:\\/\\/\\/?[^\\s\"'`),;]+/giu;\nconst WINDOWS_PATH_TOKEN_RE = /\\b[A-Za-z]:\\\\[^\\s\"'`),;]+/g;\nconst PRIVATE_IP_RE =\n /\\b(?:10\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)|172\\.(?:1[6-9]|2\\d|3[01])\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)|192\\.168\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))\\b/g;\nconst PATH_FIELD_KEY_PATTERN = /(?:^|[_-])(path|filename|file|module|cwd|dir|directory|location|source|script)s?$/i;\nconst KNOWN_NOISY_CONSOLE_MESSAGE_PATTERNS = [\n \"[starter-extension] activating\",\n \"[starter-extension] all 8 capabilities registered.\",\n \"[starter-extension] commands:\",\n \"[starter] preflight check for workspace\",\n \"[starter] output_format service override active\",\n \"[pm-ext-ts-starter] activating\",\n \"[pm-ext-ts-starter] all capabilities registered.\",\n \"run `pm init` first to initialise a pm workspace\",\n] as const;\n\nfunction looksLikeFilesystemPath(value: string): boolean {\n const normalized = value.trim();\n if (normalized.length === 0) {\n return false;\n }\n if (normalized.startsWith(\"/\") || normalized.startsWith(\"file://\")) {\n return true;\n }\n if (/^[A-Za-z]:\\\\/.test(normalized) || normalized.startsWith(\"\\\\\\\\\")) {\n return true;\n }\n return normalized.includes(\"/home/\");\n}\n\nfunction scrubString(value: string, keyHint?: string): string {\n if (keyHint && PATH_FIELD_KEY_PATTERN.test(keyHint) && looksLikeFilesystemPath(value)) {\n return \"[scrubbed_path]\";\n }\n const scrubbed = value\n .replaceAll(INLINE_SENSITIVE_ASSIGNMENT_RE, (_m, key: string) => `${key}=[scrubbed]`)\n .replaceAll(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/giu, \"[scrubbed_email]\")\n .replaceAll(/bearer\\s+[a-z0-9._=-]+/giu, \"bearer [scrubbed]\")\n .replaceAll(/sntr[ysu]_[A-Za-z0-9_-]+/g, \"[scrubbed_sentry_token]\")\n .replaceAll(PRIVATE_IP_RE, \"[scrubbed_ip]\")\n .replaceAll(FILE_URL_PATH_RE, \"[scrubbed_path]\")\n .replaceAll(WINDOWS_PATH_TOKEN_RE, \"[scrubbed_path]\")\n .replaceAll(ABSOLUTE_PATH_TOKEN_RE, (_match: string, prefix: string) => `${prefix}[scrubbed_path]`);\n if (looksLikeFilesystemPath(scrubbed)) {\n return \"[scrubbed_path]\";\n }\n return scrubbed;\n}\n\nfunction scrubEventData(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (SENSITIVE_KEY_PATTERN.test(key)) {\n result[key] = \"[scrubbed]\";\n } else if (typeof value === \"string\") {\n result[key] = scrubString(value, key);\n } else if (Array.isArray(value)) {\n result[key] = value.map((entry) => {\n if (typeof entry === \"string\") {\n return scrubString(entry, key);\n }\n if (entry && typeof entry === \"object\") {\n return scrubEventData(entry as Record<string, unknown>);\n }\n return entry;\n });\n } else if (value && typeof value === \"object\") {\n result[key] = scrubEventData(value as Record<string, unknown>);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction scrubStackFrame(frame: Record<string, unknown>): void {\n for (const key of [\"filename\", \"absPath\", \"abs_path\", \"module\"]) {\n const rawValue = frame[key];\n if (typeof rawValue === \"string\") {\n frame[key] = scrubString(rawValue, key);\n }\n }\n const contextLine = frame.context_line;\n if (typeof contextLine === \"string\") {\n frame.context_line = scrubString(contextLine, \"context_line\");\n }\n for (const key of [\"pre_context\", \"post_context\"]) {\n const context = frame[key];\n if (!Array.isArray(context)) {\n continue;\n }\n frame[key] = context.map((entry) => (typeof entry === \"string\" ? scrubString(entry, key) : entry));\n }\n if (frame.vars && typeof frame.vars === \"object\") {\n frame.vars = scrubEventData(frame.vars as Record<string, unknown>);\n }\n if (frame.data && typeof frame.data === \"object\") {\n frame.data = scrubEventData(frame.data as Record<string, unknown>);\n }\n}\n\ntype SentryLike = typeof import(\"@sentry/node\");\n\nlet _sentry: SentryLike | undefined;\nlet _initDone = false;\n\nconst PM_CLI_SENTRY_DSN =\n \"https://bf7ad2ec76c0051c2ee94e48e8bd6868@o4510603477712896.ingest.de.sentry.io/4511316775338064\";\n\nfunction hasPmCliErrorPrefix(value: string): boolean {\n return /^\\s*PmCliError:/.test(value);\n}\n\nfunction isKnownNoisyConsoleMessage(value: string): boolean {\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) {\n return false;\n }\n return KNOWN_NOISY_CONSOLE_MESSAGE_PATTERNS.some((pattern) => normalized.includes(pattern));\n}\n\nfunction isKnownNoisyConsoleEvent(event: {\n logger?: string;\n message?: string;\n exception?: { values?: Array<{ value?: string }> };\n}): boolean {\n if (event.logger !== \"console\") {\n return false;\n }\n if (typeof event.message === \"string\" && isKnownNoisyConsoleMessage(event.message)) {\n return true;\n }\n return (\n Array.isArray(event.exception?.values) &&\n event.exception.values.some((entry) => typeof entry.value === \"string\" && isKnownNoisyConsoleMessage(entry.value))\n );\n}\n\nfunction isExpectedCliErrorEvent(event: {\n exception?: { values?: Array<{ type?: string; value?: string }> };\n message?: string;\n extra?: Record<string, unknown>;\n logger?: string;\n}): boolean {\n if (event.exception?.values?.some((ex) => ex.type === \"PmCliError\")) return true;\n\n if (event.exception?.values?.some((ex) => typeof ex.value === \"string\" && hasPmCliErrorPrefix(ex.value)))\n return true;\n\n if (event.logger === \"console\" && typeof event.message === \"string\" && hasPmCliErrorPrefix(event.message))\n return true;\n\n return false;\n}\n\nfunction isPmCliErrorBreadcrumb(breadcrumb: { category?: string; message?: string }): boolean {\n return (\n breadcrumb.category === \"console\" &&\n typeof breadcrumb.message === \"string\" &&\n hasPmCliErrorPrefix(breadcrumb.message)\n );\n}\n\nfunction isKnownNoisyConsoleBreadcrumb(breadcrumb: { category?: string; message?: string }): boolean {\n return breadcrumb.category === \"console\" && typeof breadcrumb.message === \"string\" && isKnownNoisyConsoleMessage(breadcrumb.message);\n}\n\nfunction resolveCliVersion(): string {\n return resolvePmCliVersion(import.meta.url, [\"../../..\"]) ?? \"0.0.0\";\n}\n\nfunction resolveEnvironment(): string {\n const explicit = process.env.SENTRY_ENVIRONMENT?.trim();\n if (explicit && explicit.length > 0) return explicit;\n if (process.env.VITEST || process.env.VITEST_WORKER_ID || process.env.NODE_ENV === \"test\") return \"test\";\n if (process.env.CI) return \"ci\";\n return \"production\";\n}\n\nexport async function ensureSentryInit(): Promise<SentryLike | undefined> {\n if (_initDone) return _sentry;\n _initDone = true;\n\n if (isSentryDisabled()) return undefined;\n\n const SentryModule = await import(\"@sentry/node\");\n _sentry = SentryModule;\n\n const dsn = process.env.SENTRY_DSN?.trim() || PM_CLI_SENTRY_DSN;\n const release = resolveCliVersion();\n\n SentryModule.init({\n dsn,\n release: `pm-cli@${release}`,\n environment: resolveEnvironment(),\n\n tracesSampleRate: 0.2,\n enableLogs: true,\n attachStacktrace: true,\n normalizeDepth: 6,\n shutdownTimeout: 3000,\n sendDefaultPii: false,\n serverName: undefined,\n\n integrations: [\n SentryModule.extraErrorDataIntegration({ depth: 4 }),\n SentryModule.captureConsoleIntegration({ levels: [\"warn\", \"error\"] }),\n ],\n\n initialScope: {\n tags: {\n \"cli.name\": \"pm-cli\",\n \"cli.version\": release,\n \"runtime.node\": process.version,\n \"runtime.platform\": process.platform,\n \"runtime.arch\": process.arch,\n },\n },\n\n beforeSend(event) {\n if (isExpectedCliErrorEvent(event) || isKnownNoisyConsoleEvent(event)) {\n return null;\n }\n if (event.message) {\n event.message = scrubString(event.message, \"message\");\n }\n if (event.transaction) {\n event.transaction = scrubString(event.transaction, \"transaction\");\n }\n\n if (event.exception?.values) {\n for (const exception of event.exception.values) {\n if (exception.value) {\n exception.value = scrubString(exception.value, \"value\");\n }\n if (exception.stacktrace?.frames) {\n for (const frame of exception.stacktrace.frames) {\n scrubStackFrame(frame as unknown as Record<string, unknown>);\n }\n }\n }\n }\n\n if (event.breadcrumbs) {\n for (const breadcrumb of event.breadcrumbs) {\n if (breadcrumb.message) {\n breadcrumb.message = scrubString(breadcrumb.message);\n }\n if (breadcrumb.data && typeof breadcrumb.data === \"object\") {\n breadcrumb.data = scrubEventData(breadcrumb.data as Record<string, unknown>);\n }\n }\n }\n\n if (event.extra && typeof event.extra === \"object\") {\n event.extra = scrubEventData(event.extra as Record<string, unknown>);\n }\n\n if (event.contexts) {\n for (const [ctxKey, ctx] of Object.entries(event.contexts)) {\n if (ctx && typeof ctx === \"object\") {\n event.contexts![ctxKey] = scrubEventData(ctx as Record<string, unknown>);\n }\n }\n }\n if (event.request && typeof event.request === \"object\") {\n event.request = scrubEventData(event.request as Record<string, unknown>) as typeof event.request;\n }\n if (event.user && typeof event.user === \"object\") {\n event.user = scrubEventData(event.user as Record<string, unknown>) as typeof event.user;\n }\n if (event.tags && typeof event.tags === \"object\") {\n event.tags = scrubEventData(event.tags as Record<string, unknown>) as typeof event.tags;\n }\n\n return event;\n },\n\n beforeSendTransaction(event) {\n if (event.breadcrumbs) {\n event.breadcrumbs = event.breadcrumbs.filter(\n (bc) => !isPmCliErrorBreadcrumb(bc) && !isKnownNoisyConsoleBreadcrumb(bc),\n );\n for (const breadcrumb of event.breadcrumbs) {\n if (breadcrumb.message) {\n breadcrumb.message = scrubString(breadcrumb.message, \"message\");\n }\n if (breadcrumb.data && typeof breadcrumb.data === \"object\") {\n breadcrumb.data = scrubEventData(breadcrumb.data as Record<string, unknown>);\n }\n }\n }\n if (event.contexts) {\n for (const [ctxKey, ctx] of Object.entries(event.contexts)) {\n if (ctx && typeof ctx === \"object\") {\n event.contexts![ctxKey] = scrubEventData(ctx as Record<string, unknown>);\n }\n }\n }\n return event;\n },\n\n beforeBreadcrumb(breadcrumb) {\n if (isPmCliErrorBreadcrumb(breadcrumb) || isKnownNoisyConsoleBreadcrumb(breadcrumb)) {\n return null;\n }\n if (breadcrumb.message) {\n breadcrumb.message = scrubString(breadcrumb.message, \"message\");\n }\n if (breadcrumb.data && typeof breadcrumb.data === \"object\") {\n breadcrumb.data = scrubEventData(breadcrumb.data as Record<string, unknown>);\n }\n return breadcrumb;\n },\n });\n\n return SentryModule;\n}\n\nexport function getSentry(): SentryLike | undefined {\n return _sentry;\n}\n\nexport const _testOnly = {\n isExpectedCliErrorEvent,\n isKnownNoisyConsoleEvent,\n isPmCliErrorBreadcrumb,\n isKnownNoisyConsoleBreadcrumb,\n scrubString,\n scrubEventData,\n resetSentryStateForTests() {\n _sentry = undefined;\n _initDone = false;\n },\n};\n"],"names":[],"mappings":"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","debugId":"8d40e365-c64b-5f7b-a275-92c9123cff27"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-local, gitignored state stored under `.agents/pm/runtime/session.json`.
|
|
3
|
+
*
|
|
4
|
+
* This is intentionally NOT the git-tracked settings.json: it holds ephemeral
|
|
5
|
+
* per-checkout context (currently the "focused" parent item used as a default
|
|
6
|
+
* --parent for `pm create`). Missing or corrupt state is treated as empty so a
|
|
7
|
+
* stale or hand-edited file never blocks a command.
|
|
8
|
+
*/
|
|
9
|
+
export interface SessionState {
|
|
10
|
+
focused_item?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function getSessionStatePath(pmRoot: string): string;
|
|
13
|
+
export declare function readSessionState(pmRoot: string): Promise<SessionState>;
|
|
14
|
+
export declare function getFocusedItem(pmRoot: string): Promise<string | undefined>;
|
|
15
|
+
export declare function setFocusedItem(pmRoot: string, id: string): Promise<void>;
|
|
16
|
+
export declare function clearFocusedItem(pmRoot: string): Promise<void>;
|