@unbrained/pm-cli 2026.7.15 → 2026.7.17
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/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +23 -2
- package/CONTRIBUTING.md +2 -2
- package/dist/cli/bootstrap-args.d.ts +2 -115
- package/dist/cli/bootstrap-args.js +4 -831
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +4 -64
- package/dist/cli/commands/eval.js +4 -153
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/linked-test-entry.d.ts +6 -6
- package/dist/cli/commands/linked-test-entry.js +4 -65
- package/dist/cli/commands/linked-test-entry.js.map +1 -1
- package/dist/cli/commands/linked-test-parsers.d.ts +3 -45
- package/dist/cli/commands/linked-test-parsers.js +4 -516
- package/dist/cli/commands/linked-test-parsers.js.map +1 -1
- package/dist/cli/commands/list.d.ts +3 -210
- package/dist/cli/commands/list.js +4 -1068
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/search.d.ts +3 -464
- package/dist/cli/commands/search.js +4 -2236
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +6 -66
- package/dist/cli/commands/stats.js +4 -157
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/telemetry.d.ts +6 -14
- package/dist/cli/commands/telemetry.js +4 -349
- package/dist/cli/commands/telemetry.js.map +1 -1
- package/dist/cli/commands/test-all.d.ts +6 -95
- package/dist/cli/commands/test-all.js +4 -439
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test-runs.d.ts +6 -92
- package/dist/cli/commands/test-runs.js +4 -189
- package/dist/cli/commands/test-runs.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -244
- package/dist/cli/commands/test.js +4 -1780
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.d.ts +15 -29
- package/dist/cli/commands/update-many.js +355 -259
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/main.js +140 -133
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/search-refresh.js +4 -9
- package/dist/cli/search-refresh.js.map +1 -1
- package/dist/cli/shared-parsers.d.ts +6 -9
- package/dist/cli/shared-parsers.js +4 -37
- package/dist/cli/shared-parsers.js.map +1 -1
- package/dist/cli/telemetry-flush.js +4 -4
- package/dist/cli/telemetry-flush.js.map +1 -1
- package/dist/cli-bundle/bundle-manifest.json +341 -341
- package/dist/cli-bundle/chunks/{append-OJQFUQ4T.js → append-5YF3TO7I.js} +5 -5
- package/dist/cli-bundle/chunks/append-JHO5K6RP.js +11 -0
- package/dist/cli-bundle/chunks/{chunk-WT3ZEOGH.js → chunk-23TCGBRK.js} +16 -7
- package/dist/cli-bundle/chunks/{chunk-WT3ZEOGH.js.map → chunk-23TCGBRK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-BCOFWYW4.js → chunk-2BX74BAS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-APRVSW2O.js → chunk-2CXL335K.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-KG44YSKD.js → chunk-2FUOXSRN.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-HDH3JUGG.js → chunk-2IPNL3DR.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-J6364LFM.js → chunk-2MPMKJF2.js} +9 -18
- package/dist/cli-bundle/chunks/{chunk-J6364LFM.js.map → chunk-2MPMKJF2.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-GM5QHQU6.js → chunk-2XOSFSTH.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-K3WII2ME.js → chunk-37DRDP2B.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-2WSE6PO2.js → chunk-37V5MXAU.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UWQHLMEB.js → chunk-3D4YVTNG.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-PMOSXADO.js → chunk-47HXN6RX.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-6CFNAVTF.js → chunk-5HGZKQUL.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-2IFFUZLC.js → chunk-5UKQLQM2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-DM4H7FP4.js → chunk-633PKXLT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-XSJUSQAE.js → chunk-646MQXFW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZI6VQWQ7.js → chunk-66MKH7SZ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-S6MQESFR.js → chunk-67RO3H4N.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-34L5OT3Y.js → chunk-6DYOZS6C.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RRM5JYJC.js → chunk-6O44IN44.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ONG5V5CI.js → chunk-6XAZB6SE.js} +97 -69
- package/dist/cli-bundle/chunks/chunk-6XAZB6SE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-PENXZX3U.js → chunk-74FKFFXO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LPYWLWDS.js → chunk-7CTQ7WW5.js} +37 -37
- package/dist/cli-bundle/chunks/chunk-7CTQ7WW5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HO4KXD6I.js → chunk-7H5NNCJ5.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-XXXF6PAQ.js → chunk-7LTCLTRG.js} +69 -61
- package/dist/cli-bundle/chunks/chunk-7LTCLTRG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TQSZFPIS.js → chunk-AFGKSHAM.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JXQUXVMI.js → chunk-AFSV5HBB.js} +77 -7
- package/dist/cli-bundle/chunks/{chunk-JXQUXVMI.js.map → chunk-AFSV5HBB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-6N2VXVTQ.js → chunk-ARGDWQ4J.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3U7ZR6M4.js → chunk-B57RJHBZ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-7B67ZL4N.js → chunk-B6SH2YNN.js} +75 -5
- package/dist/cli-bundle/chunks/{chunk-7B67ZL4N.js.map → chunk-B6SH2YNN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-YCQET3OT.js → chunk-BAP7G3N2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QKXHFPYM.js → chunk-BIRYX32V.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-RMLWNPH2.js → chunk-BVLOMU6O.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YBLZ2VE7.js → chunk-CFSUNEL7.js} +320 -239
- package/dist/cli-bundle/chunks/chunk-CFSUNEL7.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-2VPAVL7O.js → chunk-CKX4WOPC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-TKOVBP6C.js → chunk-D52ZN3BF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KPMKHGEA.js → chunk-D53RTYVI.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-ODALILG3.js → chunk-D5XHO4Q7.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-E2OJMKML.js → chunk-DCC2AQBD.js} +18 -9
- package/dist/cli-bundle/chunks/{chunk-E2OJMKML.js.map → chunk-DCC2AQBD.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-YAQEBNY7.js → chunk-DDFGYUCQ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-EAB64KLB.js → chunk-DG2EQRIH.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-IG3SWA4A.js → chunk-EHJFUOXL.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ONREO4ST.js → chunk-EY7ZE3TG.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-EJEXHTY5.js → chunk-FHOBCGQO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-H3EIEWGR.js → chunk-FL4D53ND.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-WUJQK4YV.js → chunk-FVNWHUME.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-INU6DKT5.js → chunk-FXFCFL73.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-QEHQ2GVG.js → chunk-FY4RLHSC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EACOH7AU.js → chunk-FZGM3PNA.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-FNSPG7MU.js → chunk-G6KM4YKY.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-AHVTB5I5.js → chunk-G6MYGULG.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-TSMHDIW4.js → chunk-GLZKZON6.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2JKGO6QX.js → chunk-H5IOT54C.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-5ZSLZLDN.js → chunk-HF63SBLC.js} +585 -456
- package/dist/cli-bundle/chunks/chunk-HF63SBLC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SELVXEZK.js → chunk-HO4DLBNK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3CLU2XZO.js → chunk-HSYV4ZYT.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-EH2OPHBI.js → chunk-HTXXXF45.js} +23 -19
- package/dist/cli-bundle/chunks/chunk-HTXXXF45.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CRVF2JDM.js → chunk-HXVHBERL.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-NU3IMIEA.js → chunk-I7DIDUSP.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2NCIPMQP.js → chunk-I7GY4X6Y.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JYFOV7FC.js → chunk-IE5KRAKN.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UY2ACEMF.js → chunk-ILVOOAT4.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-GOSLKLFE.js → chunk-KH6QAHME.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-J6EY5V4N.js → chunk-KOEZCHRF.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-QKECXBBG.js → chunk-KX62NMZC.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-QKECXBBG.js.map → chunk-KX62NMZC.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-WQPUU7XD.js → chunk-L337QKWJ.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-LSG2U345.js → chunk-L6FVNR7X.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-ILX33QXL.js → chunk-LLODAQMP.js} +706 -532
- package/dist/cli-bundle/chunks/chunk-LLODAQMP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-FMBNM2EN.js → chunk-LSOWTLEM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4223PVZT.js → chunk-M7MVOKVV.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-MNV226E4.js +834 -0
- package/dist/cli-bundle/chunks/chunk-MNV226E4.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UMOPHQSU.js → chunk-MR4SHYR4.js} +41 -19
- package/dist/cli-bundle/chunks/chunk-MR4SHYR4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BKVG6XOA.js → chunk-MSGETE6I.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3WM75PWC.js → chunk-N33FD2UI.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UFXU44HV.js → chunk-N7I2DGLP.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3S5QVM5H.js → chunk-NCAFUBJX.js} +13 -13
- package/dist/cli-bundle/chunks/chunk-NCAFUBJX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6S3YSUYG.js → chunk-NNANAWFH.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-IJIICKVW.js → chunk-NTRQLE2R.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SDQLJWBO.js → chunk-NVZ6NVHJ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-H2Z3FYXQ.js → chunk-OWP6QFBV.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-Q7A43DS4.js → chunk-P22HGFFI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NLDFBC6J.js → chunk-P56LKFQX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NVPZIJVR.js → chunk-PT7MCCGD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-P74IZQ7A.js → chunk-QKVVV6QO.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-5JLUII3O.js → chunk-QNUAZYGW.js} +321 -240
- package/dist/cli-bundle/chunks/chunk-QNUAZYGW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-QIPLHNP7.js → chunk-QWBKN3QC.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-7PIWCHTW.js → chunk-R5XTTZSJ.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-JOUQZENX.js → chunk-RC4UOUXA.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-BEP7WJA2.js → chunk-RGMWJLXF.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-NP22ERDF.js → chunk-RTBX3C4C.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HYB5AZ63.js → chunk-S46R2M3W.js} +117 -71
- package/dist/cli-bundle/chunks/chunk-S46R2M3W.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-H5APFTHZ.js → chunk-S6FF7VW6.js} +18 -18
- package/dist/cli-bundle/chunks/chunk-S6FF7VW6.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UXONS674.js → chunk-SIJV365F.js} +54 -55
- package/dist/cli-bundle/chunks/chunk-SIJV365F.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7Z4LKRS4.js → chunk-SPFZV2GR.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-ULTHRDBP.js → chunk-TM5CIO3F.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-4XQ3BDV4.js → chunk-V3VBXQQV.js} +36 -36
- package/dist/cli-bundle/chunks/chunk-V3VBXQQV.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YAROI3PD.js → chunk-V7MP6YTN.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-OW4JWD5M.js → chunk-VAHZIPWS.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-DYH63FX7.js → chunk-VE6ZSTQW.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3AUGG2DP.js → chunk-W5E2UUSH.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-BSEQUTQP.js → chunk-WACRQ26A.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BSEQUTQP.js.map → chunk-WACRQ26A.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-UOHFKBUV.js → chunk-WL3SS45P.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-QKJGPFAF.js → chunk-WU3KAN6A.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-IA5FKNII.js → chunk-X2MGQMZO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-TD3LVC7D.js → chunk-X5YCTFKT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-B7PE22W6.js → chunk-XC2HEEOV.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-J5AOEGDC.js → chunk-XNPMDSQQ.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-K2X6U4UA.js → chunk-XXLXJL7V.js} +4 -4
- package/dist/cli-bundle/chunks/chunk-XYJK6GIQ.js +851 -0
- package/dist/cli-bundle/chunks/chunk-XYJK6GIQ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RLCHOOHC.js → chunk-YJSURTBB.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-PGY23YTC.js → chunk-YKFHF37B.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JFTKLTEF.js → chunk-YQCWK2MB.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-EYLCSJAI.js → chunk-YQEZWI3R.js} +2 -2
- package/dist/cli-bundle/chunks/close-BEP7MHF3.js +12 -0
- package/dist/cli-bundle/chunks/{close-CWODTPKG.js → close-Y6QFUJQN.js} +5 -5
- package/dist/cli-bundle/chunks/{close-many-CQFUY7MR.js → close-many-JJFW7KTT.js} +14 -14
- package/dist/cli-bundle/chunks/close-many-QJ6FKJUE.js +23 -0
- package/dist/cli-bundle/chunks/comments-2AOZQ5D2.js +13 -0
- package/dist/cli-bundle/chunks/{comments-WGLHR7LB.js → comments-TMHMALA5.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-LXVDXH7B.js → copy-FWQA5OU4.js} +4 -4
- package/dist/cli-bundle/chunks/copy-N3LCQBMC.js +9 -0
- package/dist/cli-bundle/chunks/{create-LBVCYMEG.js → create-AQ5SIGZC.js} +9 -9
- package/dist/cli-bundle/chunks/{create-J5U6ND4K.js → create-KOGQ3JKD.js} +9 -9
- package/dist/cli-bundle/chunks/delete-6G3MBZ6S.js +10 -0
- package/dist/cli-bundle/chunks/{delete-PMJBNY5G.js → delete-YYYFOSEA.js} +4 -4
- package/dist/cli-bundle/chunks/{deps-OA26IS25.js → deps-5NC4IZH7.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-JZ7TMVCB.js → deps-EVTOQMKW.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-FEWB2DQB.js → docs-53NUGMIQ.js} +6 -6
- package/dist/cli-bundle/chunks/docs-OWRGDMNY.js +14 -0
- package/dist/cli-bundle/chunks/{files-EFIWKFTM.js → files-3PXGXYDB.js} +6 -6
- package/dist/cli-bundle/chunks/{files-6YFBJRBG.js → files-EGLKHD7O.js} +6 -6
- package/dist/cli-bundle/chunks/focus-KZLIA6WS.js +10 -0
- package/dist/cli-bundle/chunks/{focus-4QJR7FOQ.js → focus-SRPASFTN.js} +5 -5
- package/dist/cli-bundle/chunks/{history-compact-CKRPDTJN.js → history-compact-G4DULDCX.js} +6 -6
- package/dist/cli-bundle/chunks/history-compact-HHIUOMZ7.js +16 -0
- package/dist/cli-bundle/chunks/{history-redact-BB3TGDAE.js → history-redact-IUSJ6X3E.js} +4 -4
- package/dist/cli-bundle/chunks/{history-redact-D225BHOZ.js → history-redact-THHGRQXV.js} +4 -4
- package/dist/cli-bundle/chunks/history-repair-KG7SWXI6.js +16 -0
- package/dist/cli-bundle/chunks/{history-repair-RQXKQHL4.js → history-repair-LUQWRS7X.js} +6 -6
- package/dist/cli-bundle/chunks/{learnings-JLNLCOL5.js → learnings-2MRNBFJF.js} +7 -7
- package/dist/cli-bundle/chunks/learnings-ZVHSALJY.js +13 -0
- package/dist/cli-bundle/chunks/{notes-GB47XXQQ.js → notes-73JWKWUD.js} +7 -7
- package/dist/cli-bundle/chunks/notes-BAKUL5DJ.js +13 -0
- package/dist/cli-bundle/chunks/{plan-VDCJ2PCN.js → plan-AZPMCG37.js} +10 -10
- package/dist/cli-bundle/chunks/plan-LEAGLPGP.js +24 -0
- package/dist/cli-bundle/chunks/{profile-IVXQEL3D.js → profile-AGUKS52S.js} +9 -9
- package/dist/cli-bundle/chunks/{profile-FAU7NZML.js → profile-U2B6Y7GE.js} +9 -9
- package/dist/cli-bundle/chunks/{register-list-query-UL4UKBBN.js → register-list-query-A5KRJ5J2.js} +16 -16
- package/dist/cli-bundle/chunks/{register-list-query-DKA3EH5D.js → register-list-query-NEYP3TXO.js} +16 -16
- package/dist/cli-bundle/chunks/{register-mutation-RBBJ52DK.js → register-mutation-6LOPBAHC.js} +29 -29
- package/dist/cli-bundle/chunks/{register-mutation-ARFHRW55.js → register-mutation-GCZOALNJ.js} +29 -29
- package/dist/cli-bundle/chunks/{register-operations-ZIBBRSED.js → register-operations-6ZZIF27A.js} +35 -35
- package/dist/cli-bundle/chunks/{register-operations-ZUJ5JWPE.js → register-operations-REDIAEGI.js} +35 -35
- package/dist/cli-bundle/chunks/{register-setup-TDCGWIOS.js → register-setup-BHPMN5SK.js} +15 -15
- package/dist/cli-bundle/chunks/{register-setup-BCVLFEYS.js → register-setup-J3JS2ZVT.js} +15 -15
- package/dist/cli-bundle/chunks/{restore-25DLT2Q2.js → restore-E3PRGDN3.js} +6 -6
- package/dist/cli-bundle/chunks/restore-KIUYTAEJ.js +14 -0
- package/dist/cli-bundle/chunks/{schema-FNU3WE4O.js → schema-5JNFQFUW.js} +6 -6
- package/dist/cli-bundle/chunks/{schema-NBCM3RAD.js → schema-TMIW4XZC.js} +6 -6
- package/dist/cli-bundle/chunks/update-PQQHLYCC.js +21 -0
- package/dist/cli-bundle/chunks/{update-XHSIAIXE.js → update-SA6AG23P.js} +12 -12
- package/dist/cli-bundle/chunks/update-many-RQVTFJPD.js +36 -0
- package/dist/cli-bundle/chunks/update-many-TV3L3KBX.js +32 -0
- package/dist/cli-bundle/main.js +153 -855
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/cli-bundle/sdk-runtime.js +54 -54
- package/dist/cli-bundle/sdk-testing.js +6 -6
- package/dist/cli-bundle/sdk.js +195 -59
- package/dist/cli-bundle/sdk.js.map +3 -3
- package/dist/core/extensions/item-fields.js +2 -2
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/sdk/cli-bootstrap.d.ts +122 -0
- package/dist/sdk/cli-bootstrap.js +879 -0
- package/dist/sdk/cli-bootstrap.js.map +1 -0
- package/dist/sdk/eval.d.ts +66 -0
- package/dist/sdk/eval.js +186 -0
- package/dist/sdk/eval.js.map +1 -0
- package/dist/sdk/index.d.ts +16 -4
- package/dist/sdk/index.js +18 -6
- package/dist/sdk/index.js.map +1 -1
- package/dist/{cli/commands → sdk/query}/item-filter-options.d.ts +1 -1
- package/dist/{cli/commands → sdk/query}/item-filter-options.js +3 -3
- package/dist/sdk/query/item-filter-options.js.map +1 -0
- package/dist/sdk/query/list.d.ts +254 -0
- package/dist/sdk/query/list.js +1073 -0
- package/dist/sdk/query/list.js.map +1 -0
- package/dist/sdk/query/parsers.d.ts +9 -0
- package/dist/sdk/query/parsers.js +45 -0
- package/dist/sdk/query/parsers.js.map +1 -0
- package/dist/{cli/commands → sdk/query}/search-pagination.js +4 -4
- package/dist/sdk/query/search-pagination.js.map +1 -0
- package/dist/{cli/commands → sdk/query}/search-rendering.js +3 -3
- package/dist/sdk/query/search-rendering.js.map +1 -0
- package/dist/sdk/query/search.d.ts +469 -0
- package/dist/sdk/query/search.js +2247 -0
- package/dist/sdk/query/search.js.map +1 -0
- package/dist/sdk/runtime.d.ts +7 -7
- package/dist/sdk/runtime.js +13 -7
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/search-refresh-worker.d.ts +2 -0
- package/dist/sdk/search-refresh-worker.js +19 -0
- package/dist/sdk/search-refresh-worker.js.map +1 -0
- package/dist/sdk/stats.d.ts +66 -0
- package/dist/sdk/stats.js +151 -0
- package/dist/sdk/stats.js.map +1 -0
- package/dist/sdk/telemetry-flush.d.ts +2 -0
- package/dist/sdk/telemetry-flush.js +14 -0
- package/dist/sdk/telemetry-flush.js.map +1 -0
- package/dist/sdk/telemetry.d.ts +14 -0
- package/dist/sdk/telemetry.js +398 -0
- package/dist/sdk/telemetry.js.map +1 -0
- package/dist/sdk/test/batch.d.ts +94 -0
- package/dist/sdk/test/batch.js +492 -0
- package/dist/sdk/test/batch.js.map +1 -0
- package/dist/sdk/test/entry.d.ts +6 -0
- package/dist/sdk/test/entry.js +74 -0
- package/dist/sdk/test/entry.js.map +1 -0
- package/dist/sdk/test/execution.d.ts +282 -0
- package/dist/sdk/test/execution.js +1817 -0
- package/dist/sdk/test/execution.js.map +1 -0
- package/dist/sdk/test/parsers.d.ts +48 -0
- package/dist/sdk/test/parsers.js +522 -0
- package/dist/sdk/test/parsers.js.map +1 -0
- package/dist/sdk/test/runs.d.ts +92 -0
- package/dist/sdk/test/runs.js +195 -0
- package/dist/sdk/test/runs.js.map +1 -0
- package/docs/SDK.md +122 -0
- package/docs/SDK_PRIMITIVE_INVENTORY.md +5 -3
- package/docs/examples/sdk-custom-tool/README.md +27 -0
- package/docs/examples/sdk-custom-tool/package.json +13 -0
- package/docs/examples/sdk-custom-tool/src/cli.ts +36 -0
- package/docs/examples/sdk-custom-tool/src/entry.ts +15 -0
- package/docs/examples/sdk-custom-tool/src/index.ts +223 -0
- package/marketplace.json +2 -2
- package/package.json +4 -4
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-governance-audit/extensions/governance-audit/comments-audit.ts +77 -57
- package/packages/pm-governance-audit/extensions/governance-audit/dedupe-audit.ts +202 -194
- package/packages/pm-governance-audit/extensions/governance-audit/dedupe-merge.ts +227 -153
- package/packages/pm-governance-audit/extensions/governance-audit/normalize.ts +169 -125
- package/packages/pm-governance-audit/extensions/governance-audit/runtime-utils.ts +130 -81
- package/packages/pm-governance-audit/extensions/governance-audit/sdk.ts +53 -4
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/dist/cli/commands/item-filter-options.js.map +0 -1
- package/dist/cli/commands/search-pagination.js.map +0 -1
- package/dist/cli/commands/search-rendering.js.map +0 -1
- package/dist/cli-bundle/chunks/append-UZVHUO74.js +0 -11
- package/dist/cli-bundle/chunks/chunk-3S5QVM5H.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4XQ3BDV4.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5JLUII3O.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5ZSLZLDN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EH2OPHBI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-H5APFTHZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HYB5AZ63.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ILX33QXL.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-LPYWLWDS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ONG5V5CI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UMOPHQSU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-UXONS674.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-XXXF6PAQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YBLZ2VE7.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js +0 -58
- package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ZKRZY773.js +0 -68
- package/dist/cli-bundle/chunks/chunk-ZKRZY773.js.map +0 -7
- package/dist/cli-bundle/chunks/close-W6LI2PKM.js +0 -12
- package/dist/cli-bundle/chunks/close-many-DLDDVSH5.js +0 -23
- package/dist/cli-bundle/chunks/comments-E3TNTK24.js +0 -13
- package/dist/cli-bundle/chunks/copy-Q5ZJPUKR.js +0 -9
- package/dist/cli-bundle/chunks/delete-WNHB3LYW.js +0 -10
- package/dist/cli-bundle/chunks/docs-HA2AIDBB.js +0 -14
- package/dist/cli-bundle/chunks/focus-POIW5LTJ.js +0 -10
- package/dist/cli-bundle/chunks/history-compact-FWG2C7FZ.js +0 -16
- package/dist/cli-bundle/chunks/history-repair-6GEAM7HE.js +0 -16
- package/dist/cli-bundle/chunks/learnings-RSNLSWDC.js +0 -13
- package/dist/cli-bundle/chunks/notes-2WDH6DXU.js +0 -13
- package/dist/cli-bundle/chunks/plan-DOVI2VMW.js +0 -24
- package/dist/cli-bundle/chunks/restore-YPMVUUEX.js +0 -14
- package/dist/cli-bundle/chunks/update-WWBYOPXO.js +0 -21
- package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js +0 -32
- package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js +0 -36
- /package/dist/cli-bundle/chunks/{append-OJQFUQ4T.js.map → append-5YF3TO7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-UZVHUO74.js.map → append-JHO5K6RP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BCOFWYW4.js.map → chunk-2BX74BAS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-APRVSW2O.js.map → chunk-2CXL335K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KG44YSKD.js.map → chunk-2FUOXSRN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HDH3JUGG.js.map → chunk-2IPNL3DR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GM5QHQU6.js.map → chunk-2XOSFSTH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K3WII2ME.js.map → chunk-37DRDP2B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2WSE6PO2.js.map → chunk-37V5MXAU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UWQHLMEB.js.map → chunk-3D4YVTNG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PMOSXADO.js.map → chunk-47HXN6RX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6CFNAVTF.js.map → chunk-5HGZKQUL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2IFFUZLC.js.map → chunk-5UKQLQM2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DM4H7FP4.js.map → chunk-633PKXLT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XSJUSQAE.js.map → chunk-646MQXFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZI6VQWQ7.js.map → chunk-66MKH7SZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-S6MQESFR.js.map → chunk-67RO3H4N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-34L5OT3Y.js.map → chunk-6DYOZS6C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RRM5JYJC.js.map → chunk-6O44IN44.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PENXZX3U.js.map → chunk-74FKFFXO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HO4KXD6I.js.map → chunk-7H5NNCJ5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TQSZFPIS.js.map → chunk-AFGKSHAM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6N2VXVTQ.js.map → chunk-ARGDWQ4J.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3U7ZR6M4.js.map → chunk-B57RJHBZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YCQET3OT.js.map → chunk-BAP7G3N2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QKXHFPYM.js.map → chunk-BIRYX32V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RMLWNPH2.js.map → chunk-BVLOMU6O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2VPAVL7O.js.map → chunk-CKX4WOPC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TKOVBP6C.js.map → chunk-D52ZN3BF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KPMKHGEA.js.map → chunk-D53RTYVI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ODALILG3.js.map → chunk-D5XHO4Q7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YAQEBNY7.js.map → chunk-DDFGYUCQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EAB64KLB.js.map → chunk-DG2EQRIH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IG3SWA4A.js.map → chunk-EHJFUOXL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ONREO4ST.js.map → chunk-EY7ZE3TG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EJEXHTY5.js.map → chunk-FHOBCGQO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-H3EIEWGR.js.map → chunk-FL4D53ND.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WUJQK4YV.js.map → chunk-FVNWHUME.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-INU6DKT5.js.map → chunk-FXFCFL73.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QEHQ2GVG.js.map → chunk-FY4RLHSC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EACOH7AU.js.map → chunk-FZGM3PNA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FNSPG7MU.js.map → chunk-G6KM4YKY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AHVTB5I5.js.map → chunk-G6MYGULG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TSMHDIW4.js.map → chunk-GLZKZON6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2JKGO6QX.js.map → chunk-H5IOT54C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SELVXEZK.js.map → chunk-HO4DLBNK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3CLU2XZO.js.map → chunk-HSYV4ZYT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CRVF2JDM.js.map → chunk-HXVHBERL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NU3IMIEA.js.map → chunk-I7DIDUSP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2NCIPMQP.js.map → chunk-I7GY4X6Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JYFOV7FC.js.map → chunk-IE5KRAKN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UY2ACEMF.js.map → chunk-ILVOOAT4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GOSLKLFE.js.map → chunk-KH6QAHME.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-J6EY5V4N.js.map → chunk-KOEZCHRF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WQPUU7XD.js.map → chunk-L337QKWJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LSG2U345.js.map → chunk-L6FVNR7X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FMBNM2EN.js.map → chunk-LSOWTLEM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4223PVZT.js.map → chunk-M7MVOKVV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BKVG6XOA.js.map → chunk-MSGETE6I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3WM75PWC.js.map → chunk-N33FD2UI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UFXU44HV.js.map → chunk-N7I2DGLP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6S3YSUYG.js.map → chunk-NNANAWFH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IJIICKVW.js.map → chunk-NTRQLE2R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SDQLJWBO.js.map → chunk-NVZ6NVHJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-H2Z3FYXQ.js.map → chunk-OWP6QFBV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Q7A43DS4.js.map → chunk-P22HGFFI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NLDFBC6J.js.map → chunk-P56LKFQX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NVPZIJVR.js.map → chunk-PT7MCCGD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-P74IZQ7A.js.map → chunk-QKVVV6QO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QIPLHNP7.js.map → chunk-QWBKN3QC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7PIWCHTW.js.map → chunk-R5XTTZSJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JOUQZENX.js.map → chunk-RC4UOUXA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BEP7WJA2.js.map → chunk-RGMWJLXF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NP22ERDF.js.map → chunk-RTBX3C4C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7Z4LKRS4.js.map → chunk-SPFZV2GR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ULTHRDBP.js.map → chunk-TM5CIO3F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YAROI3PD.js.map → chunk-V7MP6YTN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OW4JWD5M.js.map → chunk-VAHZIPWS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DYH63FX7.js.map → chunk-VE6ZSTQW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3AUGG2DP.js.map → chunk-W5E2UUSH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UOHFKBUV.js.map → chunk-WL3SS45P.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QKJGPFAF.js.map → chunk-WU3KAN6A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IA5FKNII.js.map → chunk-X2MGQMZO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TD3LVC7D.js.map → chunk-X5YCTFKT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-B7PE22W6.js.map → chunk-XC2HEEOV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-J5AOEGDC.js.map → chunk-XNPMDSQQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K2X6U4UA.js.map → chunk-XXLXJL7V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RLCHOOHC.js.map → chunk-YJSURTBB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PGY23YTC.js.map → chunk-YKFHF37B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JFTKLTEF.js.map → chunk-YQCWK2MB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EYLCSJAI.js.map → chunk-YQEZWI3R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-W6LI2PKM.js.map → close-BEP7MHF3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-CWODTPKG.js.map → close-Y6QFUJQN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-CQFUY7MR.js.map → close-many-JJFW7KTT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-DLDDVSH5.js.map → close-many-QJ6FKJUE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-E3TNTK24.js.map → comments-2AOZQ5D2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-WGLHR7LB.js.map → comments-TMHMALA5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-LXVDXH7B.js.map → copy-FWQA5OU4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-Q5ZJPUKR.js.map → copy-N3LCQBMC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-LBVCYMEG.js.map → create-AQ5SIGZC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-J5U6ND4K.js.map → create-KOGQ3JKD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-WNHB3LYW.js.map → delete-6G3MBZ6S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-PMJBNY5G.js.map → delete-YYYFOSEA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-OA26IS25.js.map → deps-5NC4IZH7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-JZ7TMVCB.js.map → deps-EVTOQMKW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-FEWB2DQB.js.map → docs-53NUGMIQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-HA2AIDBB.js.map → docs-OWRGDMNY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-EFIWKFTM.js.map → files-3PXGXYDB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-6YFBJRBG.js.map → files-EGLKHD7O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-POIW5LTJ.js.map → focus-KZLIA6WS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-4QJR7FOQ.js.map → focus-SRPASFTN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-CKRPDTJN.js.map → history-compact-G4DULDCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-FWG2C7FZ.js.map → history-compact-HHIUOMZ7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-BB3TGDAE.js.map → history-redact-IUSJ6X3E.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-D225BHOZ.js.map → history-redact-THHGRQXV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-6GEAM7HE.js.map → history-repair-KG7SWXI6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-RQXKQHL4.js.map → history-repair-LUQWRS7X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-JLNLCOL5.js.map → learnings-2MRNBFJF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-RSNLSWDC.js.map → learnings-ZVHSALJY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-GB47XXQQ.js.map → notes-73JWKWUD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-2WDH6DXU.js.map → notes-BAKUL5DJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-VDCJ2PCN.js.map → plan-AZPMCG37.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-DOVI2VMW.js.map → plan-LEAGLPGP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-IVXQEL3D.js.map → profile-AGUKS52S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-FAU7NZML.js.map → profile-U2B6Y7GE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-UL4UKBBN.js.map → register-list-query-A5KRJ5J2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-DKA3EH5D.js.map → register-list-query-NEYP3TXO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-RBBJ52DK.js.map → register-mutation-6LOPBAHC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-ARFHRW55.js.map → register-mutation-GCZOALNJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-operations-ZIBBRSED.js.map → register-operations-6ZZIF27A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-operations-ZUJ5JWPE.js.map → register-operations-REDIAEGI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-TDCGWIOS.js.map → register-setup-BHPMN5SK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-BCVLFEYS.js.map → register-setup-J3JS2ZVT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-25DLT2Q2.js.map → restore-E3PRGDN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-YPMVUUEX.js.map → restore-KIUYTAEJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-FNU3WE4O.js.map → schema-5JNFQFUW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-NBCM3RAD.js.map → schema-TMIW4XZC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-WWBYOPXO.js.map → update-PQQHLYCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-XHSIAIXE.js.map → update-SA6AG23P.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-TA7NGQBO.js.map → update-many-RQVTFJPD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-OUGIU5SF.js.map → update-many-TV3L3KBX.js.map} +0 -0
- /package/dist/{cli/commands → sdk/query}/search-pagination.d.ts +0 -0
- /package/dist/{cli/commands → sdk/query}/search-rendering.d.ts +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
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]="320f8a45-feb4-5808-a6cf-bd6f377c1dc6")}catch(e){}}();
|
|
3
3
|
import {
|
|
4
4
|
createQueryFingerprint,
|
|
5
5
|
encodeQueryCursor,
|
|
6
6
|
resolveQueryCursorStart
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-2IPNL3DR.js";
|
|
8
8
|
import {
|
|
9
9
|
hasMissingMetadataFilter,
|
|
10
10
|
itemMatchesMissingMetadata,
|
|
11
11
|
lifecycleClassifierFromStatusRegistry
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-CKX4WOPC.js";
|
|
13
13
|
import {
|
|
14
14
|
HEAVY_METADATA_KEYS,
|
|
15
15
|
coerceRuntimeFieldValue,
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
resolveIsoOrRelative,
|
|
28
28
|
stableValueEquals,
|
|
29
29
|
toItemRecord
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-P22HGFFI.js";
|
|
31
31
|
import {
|
|
32
32
|
EXIT_CODE,
|
|
33
33
|
ITEM_METADATA_KEY_ORDER,
|
|
@@ -40,7 +40,38 @@ import {
|
|
|
40
40
|
resolveRuntimeFieldRegistry,
|
|
41
41
|
resolveRuntimeStatusRegistry,
|
|
42
42
|
resolveTypeName
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-KX62NMZC.js";
|
|
44
|
+
|
|
45
|
+
// dist/sdk/query/parsers.js
|
|
46
|
+
function parseIntegerLimit(raw, label = "--limit") {
|
|
47
|
+
if (raw === void 0)
|
|
48
|
+
return void 0;
|
|
49
|
+
const normalized = String(raw).trim();
|
|
50
|
+
const parsed = normalized.length === 0 ? Number.NaN : Number(normalized);
|
|
51
|
+
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
52
|
+
throw new PmCliError(`${label} must be a non-negative integer`, EXIT_CODE.USAGE);
|
|
53
|
+
}
|
|
54
|
+
return parsed;
|
|
55
|
+
}
|
|
56
|
+
function parsePriority(raw, label = "--priority") {
|
|
57
|
+
if (raw === void 0)
|
|
58
|
+
return void 0;
|
|
59
|
+
const normalized = String(raw).trim();
|
|
60
|
+
const parsed = normalized.length === 0 ? Number.NaN : Number(normalized);
|
|
61
|
+
if (!Number.isInteger(parsed) || parsed < 0 || parsed > 4) {
|
|
62
|
+
throw new PmCliError(`${label} filter must be 0..4`, EXIT_CODE.USAGE);
|
|
63
|
+
}
|
|
64
|
+
return parsed;
|
|
65
|
+
}
|
|
66
|
+
function parseType(raw, typeRegistry, label = "--type") {
|
|
67
|
+
if (raw === void 0)
|
|
68
|
+
return void 0;
|
|
69
|
+
const parsed = resolveTypeName(raw, typeRegistry);
|
|
70
|
+
if (!parsed) {
|
|
71
|
+
throw new PmCliError(`${label} filter must be one of ${typeRegistry.types.join("|")}`, EXIT_CODE.USAGE);
|
|
72
|
+
}
|
|
73
|
+
return parsed;
|
|
74
|
+
}
|
|
44
75
|
|
|
45
76
|
// dist/core/item/status-filter.js
|
|
46
77
|
var STATUS_GROUP_ALIASES = {
|
|
@@ -124,35 +155,6 @@ function parseStatusFilterCsv(raw, registry, options) {
|
|
|
124
155
|
return [...new Set(resolved)];
|
|
125
156
|
}
|
|
126
157
|
|
|
127
|
-
// dist/cli/shared-parsers.js
|
|
128
|
-
function parseIntegerLimit(raw, label = "--limit") {
|
|
129
|
-
if (raw === void 0)
|
|
130
|
-
return void 0;
|
|
131
|
-
const parsed = Number(raw);
|
|
132
|
-
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
133
|
-
throw new PmCliError(`${label} must be a non-negative integer`, EXIT_CODE.USAGE);
|
|
134
|
-
}
|
|
135
|
-
return parsed;
|
|
136
|
-
}
|
|
137
|
-
function parsePriority(raw, label = "--priority") {
|
|
138
|
-
if (raw === void 0)
|
|
139
|
-
return void 0;
|
|
140
|
-
const parsed = Number(raw);
|
|
141
|
-
if (!Number.isInteger(parsed) || parsed < 0 || parsed > 4) {
|
|
142
|
-
throw new PmCliError(`${label} filter must be 0..4`, EXIT_CODE.USAGE);
|
|
143
|
-
}
|
|
144
|
-
return parsed;
|
|
145
|
-
}
|
|
146
|
-
function parseType(raw, typeRegistry, label = "--type") {
|
|
147
|
-
if (raw === void 0)
|
|
148
|
-
return void 0;
|
|
149
|
-
const parsed = resolveTypeName(raw, typeRegistry);
|
|
150
|
-
if (!parsed) {
|
|
151
|
-
throw new PmCliError(`${label} filter must be one of ${typeRegistry.types.join("|")}`, EXIT_CODE.USAGE);
|
|
152
|
-
}
|
|
153
|
-
return parsed;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
158
|
// dist/core/schema/runtime-field-filters.js
|
|
157
159
|
function valuesEqual(left, right) {
|
|
158
160
|
return stableValueEquals(left, right);
|
|
@@ -311,8 +313,8 @@ function computeContentFieldUtilization(items) {
|
|
|
311
313
|
};
|
|
312
314
|
}
|
|
313
315
|
|
|
314
|
-
// dist/
|
|
315
|
-
|
|
316
|
+
// dist/sdk/query/list.js
|
|
317
|
+
var resolveMissingMetadataFilters = (options) => {
|
|
316
318
|
return {
|
|
317
319
|
acMissing: options.filterAcMissing === true,
|
|
318
320
|
estimatesMissing: options.filterEstimatesMissing === true,
|
|
@@ -324,7 +326,7 @@ function resolveMissingMetadataFilters(options) {
|
|
|
324
326
|
sprintMissing: options.filterSprintMissing === true,
|
|
325
327
|
releaseMissing: options.filterReleaseMissing === true
|
|
326
328
|
};
|
|
327
|
-
}
|
|
329
|
+
};
|
|
328
330
|
var CONTENT_FIELD_FLAG_MAPPINGS = [
|
|
329
331
|
{
|
|
330
332
|
field: "notes",
|
|
@@ -390,22 +392,18 @@ var CONTENT_FIELD_FLAG_MAPPINGS = [
|
|
|
390
392
|
absentFlag: "--no-linked-command"
|
|
391
393
|
}
|
|
392
394
|
];
|
|
393
|
-
|
|
394
|
-
const
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
395
|
+
var resolveContentFieldFilters = (options) => {
|
|
396
|
+
const conflict = CONTENT_FIELD_FLAG_MAPPINGS.find((mapping) => options[mapping.presentKey] === true && options[mapping.absentKey] === true);
|
|
397
|
+
if (conflict) {
|
|
398
|
+
throw new PmCliError(`Cannot combine ${conflict.presentFlag} with ${conflict.absentFlag} for the same field.`, EXIT_CODE.USAGE);
|
|
399
|
+
}
|
|
400
|
+
return Object.fromEntries(CONTENT_FIELD_FLAG_MAPPINGS.flatMap((mapping) => {
|
|
401
|
+
if (options[mapping.presentKey] === true) {
|
|
402
|
+
return [[mapping.field, "present"]];
|
|
400
403
|
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
filters[mapping.field] = "absent";
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
return filters;
|
|
408
|
-
}
|
|
404
|
+
return options[mapping.absentKey] === true ? [[mapping.field, "absent"]] : [];
|
|
405
|
+
}));
|
|
406
|
+
};
|
|
409
407
|
var LIST_SORT_FIELDS = [
|
|
410
408
|
"priority",
|
|
411
409
|
"deadline",
|
|
@@ -665,7 +663,8 @@ function parseIdsFilter(raw) {
|
|
|
665
663
|
function parseOffset(raw) {
|
|
666
664
|
if (raw === void 0)
|
|
667
665
|
return void 0;
|
|
668
|
-
const
|
|
666
|
+
const normalized = String(raw).trim();
|
|
667
|
+
const parsed = normalized.length === 0 ? Number.NaN : Number(normalized);
|
|
669
668
|
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
670
669
|
throw new PmCliError("Offset filter must be a non-negative integer", EXIT_CODE.USAGE);
|
|
671
670
|
}
|
|
@@ -1260,6 +1259,6 @@ export {
|
|
|
1260
1259
|
buildGovernanceMissingFilterEcho,
|
|
1261
1260
|
runList
|
|
1262
1261
|
};
|
|
1263
|
-
//# sourceMappingURL=chunk-
|
|
1262
|
+
//# sourceMappingURL=chunk-SIJV365F.js.map
|
|
1264
1263
|
|
|
1265
|
-
//# debugId=
|
|
1264
|
+
//# debugId=320f8a45-feb4-5808-a6cf-bd6f377c1dc6
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../sdk/query/parsers.ts","../../../../../../../../core/item/status-filter.ts","../../../../../../../../core/schema/runtime-field-filters.ts","../../../../../../../../core/governance/content-fields.ts","../../../../../../../../sdk/query/list.ts"],"sourcesContent":["/**\n * @module sdk/query/parsers\n *\n * Provides shared query parsers for SDK and CLI runtime consumers.\n */\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nexport { parseLimit } from \"../../core/shared/numeric-parsers.js\";\nimport {\n resolveTypeName,\n type ItemTypeRegistry,\n} from \"../../core/item/type-registry.js\";\nimport type { ItemType } from \"../../types/index.js\";\n\n/** Implements parse integer limit for the public runtime surface of this module. */\nexport function parseIntegerLimit(\n raw: string | undefined,\n label = \"--limit\",\n): number | undefined {\n if (raw === undefined) return undefined;\n const normalized = String(raw).trim();\n const parsed = normalized.length === 0 ? Number.NaN : Number(normalized);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new PmCliError(\n `${label} must be a non-negative integer`,\n EXIT_CODE.USAGE,\n );\n }\n return parsed;\n}\n\n/** Implements parse priority for the public runtime surface of this module. */\nexport function parsePriority(\n raw: string | undefined,\n label = \"--priority\",\n): number | undefined {\n if (raw === undefined) return undefined;\n const normalized = String(raw).trim();\n const parsed = normalized.length === 0 ? Number.NaN : Number(normalized);\n if (!Number.isInteger(parsed) || parsed < 0 || parsed > 4) {\n throw new PmCliError(`${label} filter must be 0..4`, EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\n/** Implements parse type for the public runtime surface of this module. */\nexport function parseType(\n raw: string | undefined,\n typeRegistry: ItemTypeRegistry,\n label = \"--type\",\n): ItemType | undefined {\n if (raw === undefined) return undefined;\n const parsed = resolveTypeName(raw, typeRegistry);\n if (!parsed) {\n throw new PmCliError(\n `${label} filter must be one of ${typeRegistry.types.join(\"|\")}`,\n EXIT_CODE.USAGE,\n );\n }\n return parsed;\n}\n","/**\n * @module core/item/status-filter\n *\n * Defines item parsing, formatting, and lifecycle helpers for Status Filter.\n */\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { levenshteinDistanceWithinLimit } from \"../shared/levenshtein.js\";\nimport type { RuntimeStatusRegistry } from \"../schema/runtime-schema.js\";\nimport type { ItemStatus } from \"../../types/index.js\";\nimport { normalizeStatusInput } from \"./status.js\";\n\n// Workflow-group aliases shared by every status-filter consumer so that the\n// agent-friendly `open`/`closed`/`canceled` shorthands resolve to whatever the\n// runtime workflow has configured as its open/close/cancel anchors, rather than\n// hardcoding the built-in status ids. `cancelled` is accepted as a spelling\n// variant of `canceled`.\nconst STATUS_GROUP_ALIASES: Readonly<\n Record<string, \"open_status\" | \"close_status\" | \"canceled_status\">\n> = {\n open: \"open_status\",\n closed: \"close_status\",\n canceled: \"canceled_status\",\n cancelled: \"canceled_status\",\n};\n\nconst STATUS_ALL_SENTINEL = \"all\";\n\n/** Return true when a status-filter input is the standalone all-status sentinel. */\nexport function isStatusAllFilterInput(raw: unknown): boolean {\n if (typeof raw !== \"string\") {\n return false;\n }\n const tokens = raw\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter((entry) => entry.length > 0);\n return tokens.length === 1 && tokens[0] === STATUS_ALL_SENTINEL;\n}\n\n/**\n * Resolve a single status-filter token to a concrete runtime status id.\n *\n * Returns `undefined` when the token is not a recognized workflow-group alias\n * (open/closed/canceled) and does not normalize to a known registry status.\n * Callers decide whether an unrecognized token is an error (strict mode) or is\n * passed through verbatim (lenient mode) — see {@link parseStatusFilterCsv}.\n */\nexport function resolveStatusFilterToken(\n token: string,\n registry: RuntimeStatusRegistry,\n): ItemStatus | undefined {\n const trimmed = token.trim().toLowerCase();\n if (trimmed.length === 0) {\n return undefined;\n }\n const group = STATUS_GROUP_ALIASES[trimmed];\n if (group) {\n return registry[group] as ItemStatus;\n }\n return normalizeStatusInput(token, registry);\n}\n\nfunction collectStatusSuggestionCandidates(\n registry: RuntimeStatusRegistry,\n): string[] {\n const candidates = new Set<string>(Object.keys(STATUS_GROUP_ALIASES));\n for (const definition of registry.definitions) {\n candidates.add(definition.id);\n for (const alias of definition.aliases) {\n candidates.add(alias);\n }\n }\n return [...candidates];\n}\n\nfunction suggestClosestStatus(\n value: string,\n registry: RuntimeStatusRegistry,\n): string | undefined {\n // Only ever called for an unresolved, already-non-empty token (parseStatusFilterCsv\n // filters blanks first), so no empty-input guard is needed here.\n const normalized = value.trim().toLowerCase();\n let best: string | undefined;\n let bestDistance = Number.POSITIVE_INFINITY;\n for (const candidate of collectStatusSuggestionCandidates(registry)) {\n const distance = levenshteinDistanceWithinLimit(\n normalized,\n candidate.toLowerCase(),\n 2,\n );\n if (distance !== null && distance < bestDistance) {\n best = candidate;\n bestDistance = distance;\n }\n }\n return best;\n}\n\n/** Documents the parse status filter options payload exchanged by command, SDK, and package integrations. */\nexport interface ParseStatusFilterOptions {\n /** When true, an unrecognized token throws a USAGE error with a did-you-mean hint. When false (default), an unrecognized token is passed through verbatim so custom/unknown statuses still compare against item values by their raw string — preserving the long-standing lenient `pm list` behavior. */\n strict?: boolean;\n /** Flag label used in error messages (default: \"--status\"). */\n flagLabel?: string;\n}\n\n/** Parse a comma-separated status filter into a de-duplicated list of concrete status ids. A standalone `all` sentinel intentionally resolves to no filter so duplicate-discovery loops can search every lifecycle bucket with the same `--status` flag shape. Shared by `pm list` (lenient) and `pm search` (strict, with a did-you-mean hint on typos) so both surfaces resolve the open/closed/canceled workflow-group aliases identically. */\nexport function parseStatusFilterCsv(\n raw: unknown,\n registry: RuntimeStatusRegistry,\n options?: ParseStatusFilterOptions,\n): ItemStatus[] | undefined {\n if (typeof raw !== \"string\") {\n return undefined;\n }\n const strict = options?.strict === true;\n const flagLabel = options?.flagLabel ?? \"--status\";\n const tokens = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (tokens.length === 0) {\n return undefined;\n }\n const allTokenCount = tokens.filter(\n (token) => token.trim().toLowerCase() === STATUS_ALL_SENTINEL,\n ).length;\n if (allTokenCount > 0) {\n if (tokens.length === 1) {\n return undefined;\n }\n throw new PmCliError(\n `Invalid ${flagLabel} value \"all\". Use it by itself, or omit ${flagLabel} to search every status.`,\n EXIT_CODE.USAGE,\n );\n }\n const resolved: ItemStatus[] = [];\n for (const token of tokens) {\n const status = resolveStatusFilterToken(token, registry);\n if (status === undefined) {\n if (strict) {\n const suggestion = suggestClosestStatus(token, registry);\n throw new PmCliError(\n `Invalid ${flagLabel} value \"${token}\". Use open|closed|canceled or a configured status id${\n suggestion ? `. Did you mean \"${suggestion}\"?` : \".\"\n }`,\n EXIT_CODE.USAGE,\n );\n }\n resolved.push(token as ItemStatus);\n continue;\n }\n resolved.push(status);\n }\n return [...new Set(resolved)];\n}\n","/**\n * @module core/schema/runtime-field-filters\n *\n * Resolves configurable schema, fields, statuses, and workflows for Runtime Field Filters.\n */\nimport {\n coerceRuntimeFieldValue,\n readRuntimeFieldOptionValue,\n} from \"./runtime-field-values.js\";\nimport type {\n RuntimeFieldCommand,\n RuntimeFieldRegistry,\n} from \"./runtime-schema.js\";\nimport { stableValueEquals } from \"../shared/serialization.js\";\n\nfunction valuesEqual(left: unknown, right: unknown): boolean {\n return stableValueEquals(left, right);\n}\n\n/** Implements collect runtime filter values for the public runtime surface of this module. */\nexport function collectRuntimeFilterValues(\n options: Record<string, unknown>,\n fieldRegistry: RuntimeFieldRegistry,\n command: RuntimeFieldCommand,\n): Record<string, unknown> {\n const filters: Record<string, unknown> = {};\n for (const definition of fieldRegistry.command_to_fields.get(command) ?? []) {\n const rawValue = readRuntimeFieldOptionValue(options, definition);\n if (rawValue === undefined) {\n continue;\n }\n filters[definition.metadata_key] = coerceRuntimeFieldValue(\n definition,\n rawValue,\n );\n }\n return filters;\n}\n\n/** Implements matches runtime filters for the public runtime surface of this module. */\nexport function matchesRuntimeFilters(\n item: Record<string, unknown>,\n filters: Record<string, unknown>,\n): boolean {\n for (const [fieldKey, expectedValue] of Object.entries(filters)) {\n const actualValue = item[fieldKey];\n if (Array.isArray(expectedValue)) {\n if (Array.isArray(actualValue)) {\n const normalizedActual = actualValue.map((value) => String(value));\n const normalizedExpected = expectedValue.map((value) => String(value));\n if (\n !normalizedExpected.every((value) => normalizedActual.includes(value))\n ) {\n return false;\n }\n continue;\n }\n if (!valuesEqual(actualValue, expectedValue[expectedValue.length - 1])) {\n return false;\n }\n continue;\n }\n if (!valuesEqual(actualValue, expectedValue)) {\n return false;\n }\n }\n return true;\n}\n","/**\n * Content-field governance & utilization primitives.\n *\n * \"Project management = context management\": these primitives let agents query\n * which items carry context (notes/learnings/files/docs/tests/comments/deps/\n * body, plus whether a linked test carries a runnable command) and which do\n * not. The surface powers content-field selection (pm list / pm update-many)\n * and field-utilization reporting (pm stats --field-utilization).\n *\n * The module is pure: it performs no IO and imports no heavy runtime\n * dependencies. Callers pass plain structural item shapes so the logic stays\n * trivially testable.\n */\n\n/** The content fields an item can carry context in. */\nexport type ContentField =\n | \"notes\"\n | \"learnings\"\n | \"files\"\n | \"docs\"\n | \"tests\"\n | \"comments\"\n | \"deps\"\n | \"body\"\n | \"linked_command\";\n\n/** Stable rendering / iteration order for content fields. */\nexport const CONTENT_FIELD_ORDER: readonly ContentField[] = [\n \"notes\",\n \"learnings\",\n \"files\",\n \"docs\",\n \"tests\",\n \"comments\",\n \"deps\",\n \"body\",\n \"linked_command\",\n] as const;\n\n/** Minimal structural shape needed: the collection arrays + optional body. */\nexport interface ContentFieldItem {\n /** Value that configures or reports notes for this contract. */\n notes?: unknown[];\n /** Value that configures or reports learnings for this contract. */\n learnings?: unknown[];\n /** Value that configures or reports files for this contract. */\n files?: unknown[];\n /** Value that configures or reports docs for this contract. */\n docs?: unknown[];\n /** Value that configures or reports tests for this contract. */\n tests?: unknown[];\n /** Value that configures or reports comments for this contract. */\n comments?: unknown[];\n /** Value that configures or reports dependencies for this contract. */\n dependencies?: unknown[];\n /** Value that configures or reports body for this contract. */\n body?: string;\n [key: string]: unknown;\n}\n\n/** True when `value` is a non-empty array. */\nfunction hasEntries(value: unknown): boolean {\n return Array.isArray(value) && value.length > 0;\n}\n\n/** True when the body string carries non-whitespace content. */\nfunction hasBody(body: unknown): boolean {\n return typeof body === \"string\" && body.trim().length > 0;\n}\n\n/** True when at least one entry in the `tests` array carries a non-empty string `command`. Tolerant of non-object / non-string entries. */\nfunction hasLinkedCommand(tests: unknown): boolean {\n if (!Array.isArray(tests)) {\n return false;\n }\n return tests.some((entry) => {\n if (typeof entry !== \"object\" || entry === null) {\n return false;\n }\n const command = (entry as { command?: unknown }).command;\n return typeof command === \"string\" && command.trim().length > 0;\n });\n}\n\n/** True when the given content field carries context on this item. - collection fields: `Array.isArray && length > 0` - \"deps\": maps to the `dependencies` array - \"body\": `typeof body === \"string\" && body.trim().length > 0` - \"linked_command\": `tests` array has at least one entry with a non-empty string `command` */\nexport function isContentFieldPresent(\n item: ContentFieldItem,\n field: ContentField,\n): boolean {\n switch (field) {\n case \"notes\":\n return hasEntries(item.notes);\n case \"learnings\":\n return hasEntries(item.learnings);\n case \"files\":\n return hasEntries(item.files);\n case \"docs\":\n return hasEntries(item.docs);\n case \"tests\":\n return hasEntries(item.tests);\n case \"comments\":\n return hasEntries(item.comments);\n case \"deps\":\n return hasEntries(item.dependencies);\n case \"body\":\n return hasBody(item.body);\n case \"linked_command\":\n return hasLinkedCommand(item.tests);\n }\n // No default: every ContentField has an explicit case above, so TypeScript\n // enforces exhaustiveness here — adding a new field without a case is a\n // compile error rather than a silent fall-through (and no unreachable branch\n // to dent the literal-100% coverage gate).\n}\n\n/** Per-field selection: 'present' requires the field populated, 'absent' requires it empty. */\nexport type ContentFieldSelection = \"present\" | \"absent\";\n\n/** Map of content fields to a present/absent requirement. */\nexport type ContentFieldFilters = Partial<\n Record<ContentField, ContentFieldSelection>\n>;\n\n/** True when at least one content-field selection is requested. */\nexport function hasContentFieldFilter(filters: ContentFieldFilters): boolean {\n return CONTENT_FIELD_ORDER.some((field) => filters[field] !== undefined);\n}\n\n/**\n * Does a single item satisfy the requested content-field filters?\n *\n * AND semantics across all requested fields: each requested field must match\n * its present/absent requirement. When no filter is requested the item passes.\n */\nexport function itemMatchesContentFilters(\n item: ContentFieldItem,\n filters: ContentFieldFilters,\n): boolean {\n for (const field of CONTENT_FIELD_ORDER) {\n const selection = filters[field];\n if (selection === undefined) {\n continue;\n }\n const present = isContentFieldPresent(item, field);\n if (selection === \"present\" && !present) {\n return false;\n }\n if (selection === \"absent\" && present) {\n return false;\n }\n }\n return true;\n}\n\n/** Filter a list of items by the requested content-field selections. */\nexport function filterByContentFields<T extends ContentFieldItem>(\n items: readonly T[],\n filters: ContentFieldFilters,\n): T[] {\n if (!hasContentFieldFilter(filters)) {\n return [...items];\n }\n return items.filter((item) => itemMatchesContentFilters(item, filters));\n}\n\n/** Whether a content-field filter set requires the heavy collections to be loaded. True when any non-body field is requested (collections + tests' linked command all live in the heavy item-metadata arrays). */\nexport function contentFiltersNeedCollections(\n filters: ContentFieldFilters,\n): boolean {\n return CONTENT_FIELD_ORDER.some(\n (field) => field !== \"body\" && filters[field] !== undefined,\n );\n}\n\n/** Whether a content-field filter set requires the item body to be loaded. */\nexport function contentFiltersNeedBody(filters: ContentFieldFilters): boolean {\n return filters.body !== undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Field utilization\n// ---------------------------------------------------------------------------\n\n/** Utilization of a single content field: present vs total, with a rounded percent. */\nexport interface ContentFieldUtilization {\n /** Value that configures or reports present for this contract. */\n present: number;\n /** Value that configures or reports total for this contract. */\n total: number;\n /** present/total * 100, rounded to one decimal; 100 when total is 0. */\n percent: number;\n}\n\n/** Per-field utilization report for pm stats --field-utilization. */\nexport interface ContentFieldUtilizationReport {\n /** Value that configures or reports total items for this contract. */\n total_items: number;\n /** Utilization keyed by content field (includes body and linked_command). */\n fields: Record<ContentField, ContentFieldUtilization>;\n /** Convenience alias mirroring GH-241: identical to `fields.body`. */\n body_populated: ContentFieldUtilization;\n /** Items with an empty body; `present` counts the empty-bodied items. */\n empty_body: ContentFieldUtilization;\n}\n\n/** Round present/total into a one-decimal percentage. Matches the convention in metadata-coverage.ts: a zero population reports 100 (nothing missing). */\nfunction roundPercent(present: number, total: number): number {\n if (total === 0) {\n return 100;\n }\n return Math.round((present / total) * 1000) / 10;\n}\n\nfunction emptyUtilizationFields(): Record<\n ContentField,\n ContentFieldUtilization\n> {\n const record = {} as Record<ContentField, ContentFieldUtilization>;\n for (const field of CONTENT_FIELD_ORDER) {\n record[field] = { present: 0, total: 0, percent: 100 };\n }\n return record;\n}\n\n/** Compute content-field utilization across a list of items. For each field we report how many items populate it out of the total, plus a rounded percentage. Convenience `body_populated`/`empty_body` aliases mirror GH-241. */\nexport function computeContentFieldUtilization(\n items: readonly ContentFieldItem[],\n): ContentFieldUtilizationReport {\n const fields = emptyUtilizationFields();\n const total = items.length;\n for (const item of items) {\n for (const field of CONTENT_FIELD_ORDER) {\n if (isContentFieldPresent(item, field)) {\n fields[field].present += 1;\n }\n }\n }\n for (const field of CONTENT_FIELD_ORDER) {\n fields[field].total = total;\n fields[field].percent = roundPercent(fields[field].present, total);\n }\n const bodyPopulated = fields.body;\n const emptyBodyCount = total - bodyPopulated.present;\n const emptyBody: ContentFieldUtilization = {\n present: emptyBodyCount,\n total,\n percent: roundPercent(emptyBodyCount, total),\n };\n return {\n total_items: total,\n fields,\n body_populated: bodyPopulated,\n empty_body: emptyBody,\n };\n}\n","/**\n * @module sdk/query/list\n *\n * Implements the pm list command surface and its agent-facing runtime behavior.\n */\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { toItemRecord } from \"../../core/item/item-record.js\";\nimport { isTerminalStatus } from \"../../core/item/status.js\";\nimport {\n isStatusAllFilterInput,\n parseStatusFilterCsv,\n} from \"../../core/item/status-filter.js\";\nimport {\n resolveItemTypeRegistry,\n type ItemTypeRegistry,\n} from \"../../core/item/type-registry.js\";\nimport { parseIntegerLimit, parsePriority, parseType } from \"./parsers.js\";\nimport {\n collectRuntimeFilterValues,\n matchesRuntimeFilters,\n} from \"../../core/schema/runtime-field-filters.js\";\nimport {\n hasMissingMetadataFilter,\n itemMatchesMissingMetadata,\n lifecycleClassifierFromStatusRegistry,\n type MissingMetadataFilters,\n} from \"../../core/governance/metadata-coverage.js\";\nimport {\n contentFiltersNeedBody,\n contentFiltersNeedCollections,\n hasContentFieldFilter,\n itemMatchesContentFilters,\n type ContentField,\n type ContentFieldFilters,\n} from \"../../core/governance/content-fields.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport {\n EXIT_CODE,\n ITEM_METADATA_KEY_ORDER,\n} from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport {\n compareTimestampStrings,\n matchesTimestampFilters,\n nowIso,\n resolveIsoOrRelative,\n} from \"../../core/shared/time.js\";\nimport {\n listAllItemMetadata,\n listAllItemMetadataLight,\n listAllItemMetadataWithBody,\n} from \"../../core/store/item-store.js\";\nimport { HEAVY_METADATA_KEYS } from \"../../core/store/item-metadata-cache.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemMetadata, ItemStatus, ItemType } from \"../../types/index.js\";\nimport type { SharedItemFilterOptions } from \"./item-filter-options.js\";\nimport {\n createQueryFingerprint,\n encodeQueryCursor,\n resolveQueryCursorStart,\n} from \"../pagination.js\";\n\n/** Documents the list options payload exchanged by command, SDK, and package integrations. */\nexport interface ListOptions extends SharedItemFilterOptions {\n /** Value that configures or reports ids for this contract. */\n ids?: string;\n /** Value that configures or reports assignee filter for this contract. */\n assigneeFilter?: string;\n /** Value that configures or reports today for this contract. */\n today?: boolean;\n /** Value that configures or reports recent for this contract. */\n recent?: boolean;\n /** Value that configures or reports limit for this contract. */\n limit?: string;\n /** Value that configures or reports offset for this contract. */\n offset?: string;\n /** Opaque cursor returned by a previous list page. */\n after?: string;\n /** Force the complete matched set and deliberately override `limit`; use plain `limit` for bounded pagination. */\n noTruncate?: boolean;\n /** Value that configures or reports include body for this contract. */\n includeBody?: boolean;\n /** Value that configures or reports compact for this contract. */\n compact?: boolean;\n /** Value that configures or reports brief for this contract. */\n brief?: boolean;\n /** Value that configures or reports full for this contract. */\n full?: boolean;\n /** Value that configures or reports fields for this contract. */\n fields?: string;\n /** Value that configures or reports sort for this contract. */\n sort?: string;\n /** Value that configures or reports order for this contract. */\n order?: string;\n /** Value that configures or reports tree for this contract. */\n tree?: boolean;\n /** Value that configures or reports tree depth for this contract. */\n treeDepth?: string;\n /** Value that configures or reports exclude terminal for this contract. */\n excludeTerminal?: boolean;\n /** Value that configures or reports filter ac missing for this contract. */\n filterAcMissing?: boolean;\n /** Value that configures or reports filter estimates missing for this contract. */\n filterEstimatesMissing?: boolean;\n /** Value that configures or reports filter resolution missing for this contract. */\n filterResolutionMissing?: boolean;\n /** Value that configures or reports filter metadata missing for this contract. */\n filterMetadataMissing?: boolean;\n}\n\n/** Extract the missing-metadata selection filters from list/update-many options. */\nexport const resolveMissingMetadataFilters = (options: {\n filterAcMissing?: boolean;\n filterEstimatesMissing?: boolean;\n filterResolutionMissing?: boolean;\n filterMetadataMissing?: boolean;\n filterReviewerMissing?: boolean;\n filterRiskMissing?: boolean;\n filterConfidenceMissing?: boolean;\n filterSprintMissing?: boolean;\n filterReleaseMissing?: boolean;\n}): MissingMetadataFilters => {\n return {\n acMissing: options.filterAcMissing === true,\n estimatesMissing: options.filterEstimatesMissing === true,\n resolutionMissing: options.filterResolutionMissing === true,\n metadataMissing: options.filterMetadataMissing === true,\n reviewerMissing: options.filterReviewerMissing === true,\n riskMissing: options.filterRiskMissing === true,\n confidenceMissing: options.filterConfidenceMissing === true,\n sprintMissing: options.filterSprintMissing === true,\n releaseMissing: options.filterReleaseMissing === true,\n };\n};\n\n/** Per content field: the present flag and the absence flag on the options shape. */\ninterface ContentFieldFlagMapping {\n field: ContentField;\n presentKey: string;\n absentKey: string;\n /** Human flag names used in the conflict error message. */\n presentFlag: string;\n absentFlag: string;\n}\n\nconst CONTENT_FIELD_FLAG_MAPPINGS: readonly ContentFieldFlagMapping[] = [\n {\n field: \"notes\",\n presentKey: \"hasNotes\",\n absentKey: \"noNotes\",\n presentFlag: \"--has-notes\",\n absentFlag: \"--no-notes\",\n },\n {\n field: \"learnings\",\n presentKey: \"hasLearnings\",\n absentKey: \"noLearnings\",\n presentFlag: \"--has-learnings\",\n absentFlag: \"--no-learnings\",\n },\n {\n field: \"files\",\n presentKey: \"hasFiles\",\n absentKey: \"noFiles\",\n presentFlag: \"--has-files\",\n absentFlag: \"--no-files\",\n },\n {\n field: \"docs\",\n presentKey: \"hasDocs\",\n absentKey: \"noDocs\",\n presentFlag: \"--has-docs\",\n absentFlag: \"--no-docs\",\n },\n {\n field: \"tests\",\n presentKey: \"hasTests\",\n absentKey: \"noTests\",\n presentFlag: \"--has-tests\",\n absentFlag: \"--no-tests\",\n },\n {\n field: \"comments\",\n presentKey: \"hasComments\",\n absentKey: \"noComments\",\n presentFlag: \"--has-comments\",\n absentFlag: \"--no-comments\",\n },\n {\n field: \"deps\",\n presentKey: \"hasDeps\",\n absentKey: \"noDeps\",\n presentFlag: \"--has-deps\",\n absentFlag: \"--no-deps\",\n },\n {\n field: \"body\",\n presentKey: \"hasBody\",\n absentKey: \"emptyBody\",\n presentFlag: \"--has-body\",\n absentFlag: \"--empty-body\",\n },\n {\n field: \"linked_command\",\n presentKey: \"hasLinkedCommand\",\n absentKey: \"noLinkedCommand\",\n presentFlag: \"--has-linked-command\",\n absentFlag: \"--no-linked-command\",\n },\n] as const;\n\n/** Resolve the content-field presence/absence selections from list/search options. A field requested both present AND absent is a usage error (the two selections are mutually exclusive). Returns an empty object when no content-field filter is active. */\nexport const resolveContentFieldFilters = (\n options: Record<string, unknown>,\n): ContentFieldFilters => {\n const conflict = CONTENT_FIELD_FLAG_MAPPINGS.find(\n (mapping) =>\n options[mapping.presentKey] === true &&\n options[mapping.absentKey] === true,\n );\n if (conflict) {\n throw new PmCliError(\n `Cannot combine ${conflict.presentFlag} with ${conflict.absentFlag} for the same field.`,\n EXIT_CODE.USAGE,\n );\n }\n return Object.fromEntries(\n CONTENT_FIELD_FLAG_MAPPINGS.flatMap<[\n ContentField,\n \"present\" | \"absent\",\n ]>((mapping) => {\n if (options[mapping.presentKey] === true) {\n return [[mapping.field, \"present\"]];\n }\n return options[mapping.absentKey] === true\n ? [[mapping.field, \"absent\"]]\n : [];\n }),\n ) as ContentFieldFilters;\n};\n\n/** Restricts listed item values accepted by command, SDK, and storage contracts. */\nexport type ListedItem = ItemMetadata | (ItemMetadata & { body: string });\n\n/** Tree-only metadata added when list results are ordered hierarchically. */\nexport interface ListTreeMetadata {\n /** Zero-based depth relative to the selected tree root. */\n tree_depth: number;\n /** Parent item ID, or null for a root row. */\n tree_parent: string | null;\n /** Number of direct children represented by the row. */\n tree_children: number;\n /** Indented display title for token-efficient tree rendering. */\n tree_title: string;\n}\n\n/** Full metadata enriched with tree-only fields. */\nexport type ListTreeItem = ListedItem & ListTreeMetadata;\n\n/** A compact or explicitly selected field projection. */\nexport type ListProjectedItem = Record<string, unknown>;\n\n/** Honest union of item shapes returned by the list engine. */\nexport type ListResultItem = ListedItem | ListTreeItem | ListProjectedItem;\n\ntype ListProjectionMode = \"full\" | \"compact\" | \"fields\";\n\ninterface ListProjectionConfig {\n mode: ListProjectionMode;\n fields: string[];\n}\n\n/** Public contract for list sort fields, shared by SDK and presentation-layer consumers. */\nexport const LIST_SORT_FIELDS = [\n \"priority\",\n \"deadline\",\n \"updated_at\",\n \"created_at\",\n \"title\",\n \"parent\",\n] as const;\n/** Restricts list sort field values accepted by command, SDK, and storage contracts. */\nexport type ListSortField = (typeof LIST_SORT_FIELDS)[number];\n\n/** Supported values accepted by the list sort order contract. */\nexport const LIST_SORT_ORDER_VALUES = [\"asc\", \"desc\"] as const;\n/** Restricts list sort order values accepted by command, SDK, and storage contracts. */\nexport type ListSortOrder = (typeof LIST_SORT_ORDER_VALUES)[number];\n\nconst DEFAULT_COMPACT_LIST_FIELDS = [\n \"id\",\n \"title\",\n \"status\",\n \"type\",\n \"priority\",\n \"parent\",\n \"updated_at\",\n] as const;\nconst BRIEF_LIST_FIELDS = [\"id\", \"status\", \"type\", \"title\"] as const;\nconst TREE_METADATA_FIELDS = [\n \"tree_depth\",\n \"tree_parent\",\n \"tree_children\",\n \"tree_title\",\n] as const;\n\n// A projection that selects any heavy collection field (or `--full`, which returns\n// items verbatim) must load the full metadata; everything else takes the light path.\n// Sourced from the single HEAVY_METADATA_KEYS definition in the cache layer so the\n// light/heavy split can never drift between the cache and the projection routing.\nconst HEAVY_PROJECTION_FIELDS: ReadonlySet<string> = new Set<string>(\n HEAVY_METADATA_KEYS,\n);\n\ninterface ListResultBase {\n items: ListResultItem[];\n count: number;\n // Total rows matched before pagination; only emitted when --limit/--offset\n // omitted rows, so agents know how many remain (GH-154).\n total?: number;\n /** Whether additional rows remain after this page. */\n has_more?: boolean;\n /** Opaque continuation cursor when additional rows remain. */\n next_cursor?: string;\n /** Effective page size, including an automatic at-scale bound. */\n applied_limit?: number;\n /** Explicit marker that the response is a bounded page. */\n truncated?: true;\n warnings?: string[];\n}\n\n/** Documents the list compact result payload exchanged by command, SDK, and package integrations. */\nexport interface ListCompactResult extends ListResultBase {\n /** Value that configures or reports filters for this contract. */\n filters: Record<string, unknown>;\n /** Value that configures or reports projection for this contract. */\n projection?: undefined;\n /** Value that configures or reports sorting for this contract. */\n sorting?: undefined;\n /** Value that configures or reports now for this contract. */\n now?: undefined;\n}\n\n/** Documents the list verbose result payload exchanged by command, SDK, and package integrations. */\nexport interface ListVerboseResult extends ListResultBase {\n /** Value that configures or reports filters for this contract. */\n filters: Record<string, unknown>;\n /** Value that configures or reports projection for this contract. */\n projection: {\n mode: ListProjectionMode;\n fields: string[] | null;\n };\n /** Value that configures or reports sorting for this contract. */\n sorting: {\n sort: ListSortField | \"default\";\n order: ListSortOrder;\n };\n /** Value that configures or reports now for this contract. */\n now: string;\n}\n\n/** Verbose full-record result returned when `full: true` is requested. */\nexport interface ListFullResult extends ListVerboseResult {\n /** Full metadata rows, optionally enriched with tree metadata. */\n items: Array<ListedItem | ListTreeItem>;\n /** Discriminator proving that rows are complete metadata records. */\n projection: {\n mode: \"full\";\n fields: null;\n };\n}\n\n/** Restricts list result values accepted by command, SDK, and storage contracts. */\nexport type ListResult = ListCompactResult | ListVerboseResult;\n\nfunction isNonEmptyRecord(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.keys(value).length > 0\n );\n}\n\n// Active content-field filter flags, keyed by the options dest and the snake_case\n// summary key emitted in the filters echo (GH-242). Presence and absence are\n// distinct echo keys (has_notes vs no_notes; has_body vs empty_body).\nconst CONTENT_FILTER_ECHO_ENTRIES: ReadonlyArray<{\n key: string;\n summaryKey: string;\n}> = [\n { key: \"hasNotes\", summaryKey: \"has_notes\" },\n { key: \"hasLearnings\", summaryKey: \"has_learnings\" },\n { key: \"hasFiles\", summaryKey: \"has_files\" },\n { key: \"hasDocs\", summaryKey: \"has_docs\" },\n { key: \"hasTests\", summaryKey: \"has_tests\" },\n { key: \"hasComments\", summaryKey: \"has_comments\" },\n { key: \"hasDeps\", summaryKey: \"has_deps\" },\n { key: \"hasBody\", summaryKey: \"has_body\" },\n { key: \"hasLinkedCommand\", summaryKey: \"has_linked_command\" },\n { key: \"noNotes\", summaryKey: \"no_notes\" },\n { key: \"noLearnings\", summaryKey: \"no_learnings\" },\n { key: \"noFiles\", summaryKey: \"no_files\" },\n { key: \"noDocs\", summaryKey: \"no_docs\" },\n { key: \"noTests\", summaryKey: \"no_tests\" },\n { key: \"noComments\", summaryKey: \"no_comments\" },\n { key: \"noDeps\", summaryKey: \"no_deps\" },\n { key: \"emptyBody\", summaryKey: \"empty_body\" },\n { key: \"noLinkedCommand\", summaryKey: \"no_linked_command\" },\n] as const;\n\n// Active governance-missing filter flags (GH-236), keyed by options dest and the\n// snake_case summary key emitted in the filters echo.\nconst GOVERNANCE_MISSING_ECHO_ENTRIES: ReadonlyArray<{\n key: string;\n summaryKey: string;\n}> = [\n { key: \"filterReviewerMissing\", summaryKey: \"filter_reviewer_missing\" },\n { key: \"filterRiskMissing\", summaryKey: \"filter_risk_missing\" },\n { key: \"filterConfidenceMissing\", summaryKey: \"filter_confidence_missing\" },\n { key: \"filterSprintMissing\", summaryKey: \"filter_sprint_missing\" },\n { key: \"filterReleaseMissing\", summaryKey: \"filter_release_missing\" },\n] as const;\n\nfunction applyContentFilterEcho(\n filters: Record<string, unknown>,\n options: Record<string, unknown>,\n): void {\n for (const entry of CONTENT_FILTER_ECHO_ENTRIES) {\n if (options[entry.key] === true) {\n filters[entry.summaryKey] = true;\n }\n }\n}\n\nfunction applyGovernanceMissingFilterEcho(\n filters: Record<string, unknown>,\n options: Record<string, unknown>,\n): void {\n for (const entry of GOVERNANCE_MISSING_ECHO_ENTRIES) {\n if (options[entry.key] === true) {\n filters[entry.summaryKey] = true;\n }\n }\n}\n\ninterface FilterValueEchoEntry {\n optionKey: string;\n summaryKey: string;\n normalize?: (value: unknown) => unknown;\n}\n\n/**\n * Copies user-supplied option values into compact filter summaries.\n *\n * Compact list/search responses are optimized for agent context: they echo only\n * filters the caller actually supplied. Keeping this helper shared prevents the\n * list and search command summaries from drifting as new scalar filters are\n * added.\n */\nexport function applyFilterValueEcho(\n filters: Record<string, unknown>,\n options: Record<string, unknown>,\n entries: ReadonlyArray<FilterValueEchoEntry>,\n): void {\n for (const entry of entries) {\n const value = options[entry.optionKey];\n if (value !== undefined) {\n filters[entry.summaryKey] = entry.normalize\n ? entry.normalize(value)\n : value;\n }\n }\n}\n\n/** Implements build content filter echo for the public runtime surface of this module. */\nexport function buildContentFilterEcho(\n options: Record<string, unknown>,\n): Record<string, true> {\n const echo: Record<string, true> = {};\n applyContentFilterEcho(echo, options);\n return echo;\n}\n\n/** Implements build governance missing filter echo for the public runtime surface of this module. */\nexport function buildGovernanceMissingFilterEcho(\n options: Record<string, unknown>,\n): Record<string, true> {\n const echo: Record<string, true> = {};\n applyGovernanceMissingFilterEcho(echo, options);\n return echo;\n}\n\nconst COMPACT_LIST_VALUE_FILTER_ECHO_ENTRIES: ReadonlyArray<FilterValueEchoEntry> =\n [\n { optionKey: \"type\", summaryKey: \"type\" },\n { optionKey: \"tag\", summaryKey: \"tag\" },\n { optionKey: \"priority\", summaryKey: \"priority\" },\n { optionKey: \"deadlineBefore\", summaryKey: \"deadline_before\" },\n { optionKey: \"deadlineAfter\", summaryKey: \"deadline_after\" },\n { optionKey: \"updatedAfter\", summaryKey: \"updated_after\" },\n { optionKey: \"updatedBefore\", summaryKey: \"updated_before\" },\n { optionKey: \"createdAfter\", summaryKey: \"created_after\" },\n { optionKey: \"createdBefore\", summaryKey: \"created_before\" },\n { optionKey: \"ids\", summaryKey: \"ids\" },\n { optionKey: \"assignee\", summaryKey: \"assignee\" },\n { optionKey: \"assigneeFilter\", summaryKey: \"assignee_filter\" },\n { optionKey: \"parent\", summaryKey: \"parent\" },\n { optionKey: \"sprint\", summaryKey: \"sprint\" },\n { optionKey: \"release\", summaryKey: \"release\" },\n ] as const;\n\nconst VERBOSE_LIST_VALUE_FILTER_ECHO_ENTRIES: ReadonlyArray<FilterValueEchoEntry> =\n [\n { optionKey: \"type\", summaryKey: \"type\" },\n { optionKey: \"tag\", summaryKey: \"tag\" },\n { optionKey: \"priority\", summaryKey: \"priority\" },\n { optionKey: \"deadlineBefore\", summaryKey: \"deadline_before\" },\n { optionKey: \"deadlineAfter\", summaryKey: \"deadline_after\" },\n { optionKey: \"updatedAfter\", summaryKey: \"updated_after\" },\n { optionKey: \"updatedBefore\", summaryKey: \"updated_before\" },\n { optionKey: \"createdAfter\", summaryKey: \"created_after\" },\n { optionKey: \"createdBefore\", summaryKey: \"created_before\" },\n { optionKey: \"ids\", summaryKey: \"ids\" },\n { optionKey: \"assignee\", summaryKey: \"assignee\" },\n { optionKey: \"assigneeFilter\", summaryKey: \"assignee_filter\" },\n { optionKey: \"parent\", summaryKey: \"parent\" },\n { optionKey: \"sprint\", summaryKey: \"sprint\" },\n { optionKey: \"release\", summaryKey: \"release\" },\n { optionKey: \"limit\", summaryKey: \"limit\" },\n { optionKey: \"offset\", summaryKey: \"offset\" },\n { optionKey: \"includeBody\", summaryKey: \"include_body\" },\n { optionKey: \"compact\", summaryKey: \"compact\" },\n { optionKey: \"fields\", summaryKey: \"fields\" },\n ] as const;\n\nconst VERBOSE_LIST_BOOLEAN_FILTER_ECHO_ENTRIES: ReadonlyArray<{\n key: string;\n summaryKey: string;\n}> = [\n { key: \"filterAcMissing\", summaryKey: \"filter_ac_missing\" },\n { key: \"filterEstimatesMissing\", summaryKey: \"filter_estimates_missing\" },\n { key: \"filterResolutionMissing\", summaryKey: \"filter_resolution_missing\" },\n { key: \"filterMetadataMissing\", summaryKey: \"filter_metadata_missing\" },\n] as const;\n\nconst LIST_RECENT_WINDOW = \"-7d\";\n\nfunction buildCompactListFilterSummary(params: {\n filtersStatus: string | string[] | null;\n options: ListOptions;\n treeEnabled: boolean;\n treeDepth: number | undefined;\n sortField: ListSortField | undefined;\n sortOrder: ListSortOrder;\n runtimeFieldFilters: Record<string, unknown>;\n}): Record<string, unknown> {\n const {\n filtersStatus,\n options,\n treeEnabled,\n treeDepth,\n sortField,\n sortOrder,\n runtimeFieldFilters,\n } = params;\n const filters: Record<string, unknown> = {};\n if (filtersStatus !== null) {\n filters.status = filtersStatus;\n }\n applyFilterValueEcho(\n filters,\n options,\n COMPACT_LIST_VALUE_FILTER_ECHO_ENTRIES,\n );\n applyListWindowFilterEcho(filters, options);\n if (options.filterAcMissing === true) {\n filters.filter_ac_missing = true;\n }\n if (options.filterEstimatesMissing === true) {\n filters.filter_estimates_missing = true;\n }\n if (options.filterResolutionMissing === true) {\n filters.filter_resolution_missing = true;\n }\n if (options.filterMetadataMissing === true) {\n filters.filter_metadata_missing = true;\n }\n applyGovernanceMissingFilterEcho(filters, options);\n applyContentFilterEcho(filters, options);\n if (options.limit !== undefined) {\n filters.limit = options.limit;\n }\n if (options.offset !== undefined) {\n filters.offset = options.offset;\n }\n if (options.includeBody === true) {\n filters.include_body = true;\n }\n if (options.fields !== undefined) {\n filters.fields = options.fields;\n }\n if (treeEnabled) {\n filters.tree = true;\n if (treeDepth !== undefined) {\n filters.tree_depth = treeDepth;\n }\n }\n if (sortField !== undefined) {\n filters.sort = sortField;\n filters.order = sortOrder;\n }\n if (isNonEmptyRecord(runtimeFieldFilters)) {\n filters.runtime_filters = runtimeFieldFilters;\n }\n return filters;\n}\n\nfunction compareDefaultSort(\n left: ListedItem,\n right: ListedItem,\n statusRegistry: RuntimeStatusRegistry,\n): number {\n const leftTerminal = isTerminalStatus(left.status, statusRegistry);\n const rightTerminal = isTerminalStatus(right.status, statusRegistry);\n if (leftTerminal !== rightTerminal) {\n return leftTerminal ? 1 : -1;\n }\n const byPriority = left.priority - right.priority;\n if (byPriority !== 0) {\n return byPriority;\n }\n const byUpdated = compareTimestampStrings(right.updated_at, left.updated_at);\n if (byUpdated !== 0) {\n return byUpdated;\n }\n return (left.id ?? \"\").localeCompare(right.id ?? \"\");\n}\n\nfunction sortItemsDefault(\n items: ListedItem[],\n statusRegistry: RuntimeStatusRegistry,\n): ListedItem[] {\n return [...items].sort((left, right) =>\n compareDefaultSort(left, right, statusRegistry),\n );\n}\n\nfunction parseDeadline(\n raw: string | undefined,\n fieldLabel: string,\n): string | undefined {\n if (raw === undefined) return undefined;\n return resolveIsoOrRelative(raw, new Date(), fieldLabel);\n}\n\n// updated/created date-window filters share the deadline ISO+relative resolver\n// so agents doing incremental \"what changed since my last context window\" syncs\n// can pass either an ISO timestamp (the common case — feed back the previous\n// run's `now`) or a SIGNED relative offset where \"-2h\"/\"-7d\" reach into the\n// past and \"+1d\" into the future (units h/d/w/m, m = months — there is no\n// minutes unit, matching the deadline resolver).\nfunction parseTimestampWindow(\n raw: unknown,\n fieldLabel: string,\n): string | undefined {\n if (raw == null) return undefined;\n const value = String(raw).trim();\n if (value.length === 0) return undefined;\n return resolveIsoOrRelative(value, new Date(), fieldLabel);\n}\n\nfunction resolveListUpdatedAfter(options: ListOptions): string | undefined {\n const hasUpdatedAfter =\n options.updatedAfter != null &&\n String(options.updatedAfter).trim().length > 0;\n const selectedWindows = [\n options.today === true,\n options.recent === true,\n hasUpdatedAfter,\n ].filter((selected) => selected).length;\n if (selectedWindows > 1) {\n throw new PmCliError(\n \"Choose only one updated_at window: --today, --recent, or --updated-after.\",\n EXIT_CODE.USAGE,\n );\n }\n if (options.today === true) {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return today.toISOString();\n }\n if (options.recent === true) {\n return parseTimestampWindow(LIST_RECENT_WINDOW, \"recent\");\n }\n return parseTimestampWindow(options.updatedAfter, \"updated-after\");\n}\n\nfunction applyListWindowFilterEcho(\n filters: Record<string, unknown>,\n options: ListOptions,\n): void {\n if (options.today === true) {\n filters.today = true;\n }\n if (options.recent === true) {\n filters.recent = true;\n }\n}\n\nfunction parseIdsFilter(raw: unknown): Set<string> | undefined {\n if (raw == null) return undefined;\n const value = String(raw).trim();\n if (value.length === 0) {\n throw new PmCliError(\n \"--ids requires at least one non-empty item ID\",\n EXIT_CODE.USAGE,\n );\n }\n const ids = value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (ids.length === 0) {\n throw new PmCliError(\n \"--ids requires at least one non-empty item ID\",\n EXIT_CODE.USAGE,\n );\n }\n return new Set(ids);\n}\n\nfunction parseOffset(raw: string | undefined): number | undefined {\n if (raw === undefined) return undefined;\n const normalized = String(raw).trim();\n const parsed = normalized.length === 0 ? Number.NaN : Number(normalized);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new PmCliError(\n \"Offset filter must be a non-negative integer\",\n EXIT_CODE.USAGE,\n );\n }\n return parsed;\n}\n\nfunction parseFieldSelectors(raw: string | undefined): string[] | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const selectors = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (selectors.length === 0) {\n throw new PmCliError(\n \"List --fields requires a comma-separated list of field names\",\n EXIT_CODE.USAGE,\n );\n }\n return [...new Set(selectors)];\n}\n\nfunction parseProjectionConfig(options: ListOptions): ListProjectionConfig {\n const compactRequested = options.compact === true;\n const briefRequested = options.brief === true;\n const fullRequested = options.full === true;\n const fieldSelectors = parseFieldSelectors(options.fields);\n const enabledModes =\n Number(compactRequested) +\n Number(briefRequested) +\n Number(fullRequested) +\n Number(fieldSelectors !== undefined);\n if (enabledModes > 1) {\n throw new PmCliError(\n \"List projection options are mutually exclusive. Use one of --compact, --brief, --full, or --fields.\",\n EXIT_CODE.USAGE,\n );\n }\n if (fullRequested) {\n return {\n mode: \"full\",\n fields: [],\n };\n }\n if (briefRequested) {\n return {\n mode: \"compact\",\n fields: [...BRIEF_LIST_FIELDS],\n };\n }\n if (compactRequested) {\n return {\n mode: \"compact\",\n fields: [...DEFAULT_COMPACT_LIST_FIELDS],\n };\n }\n if (fieldSelectors) {\n return {\n mode: \"fields\",\n fields: fieldSelectors,\n };\n }\n return {\n mode: \"full\",\n fields: [],\n };\n}\n\nfunction normalizeProjectionField(field: string): string {\n return field.startsWith(\"item.\") ? field.slice(\"item.\".length) : field;\n}\n\nfunction validateListProjectionFields(\n projection: ListProjectionConfig,\n runtimeMetadataKeys: Iterable<string>,\n): void {\n if (projection.mode !== \"fields\") {\n return;\n }\n const allowed = new Set([\n ...ITEM_METADATA_KEY_ORDER,\n \"body\",\n ...TREE_METADATA_FIELDS,\n ...runtimeMetadataKeys,\n ]);\n const unknown = projection.fields.filter(\n (field) => !allowed.has(normalizeProjectionField(field)),\n );\n if (unknown.length > 0) {\n throw new PmCliError(\n `Unknown list --fields value(s): ${unknown.join(\", \")}`,\n EXIT_CODE.USAGE,\n {\n code: \"unknown_field_projection\",\n examples: [\n \"pm list-open --fields id,title,status,type,updated_at\",\n \"pm list --fields id,title,parent,priority --limit 10\",\n \"pm list-all --fields id,title,body --limit 5\",\n ],\n },\n );\n }\n}\n\n// Convenience aliases so agents/humans who reach for the bare verb form\n// (e.g. `--sort updated`) land on the canonical timestamp fields instead of an error.\n// A Map (not a plain object) avoids prototype-chain lookups for keys like \"__proto__\".\nconst LIST_SORT_FIELD_ALIASES: ReadonlyMap<string, ListSortField> = new Map<\n string,\n ListSortField\n>([\n [\"updated\", \"updated_at\"],\n [\"update\", \"updated_at\"],\n [\"modified\", \"updated_at\"],\n [\"created\", \"created_at\"],\n [\"create\", \"created_at\"],\n]);\n\nfunction parseSortField(raw: string | undefined): ListSortField | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n const aliased = LIST_SORT_FIELD_ALIASES.get(normalized);\n if (aliased) {\n return aliased;\n }\n if (!LIST_SORT_FIELDS.includes(normalized as ListSortField)) {\n throw new PmCliError(\n `Sort field must be one of ${LIST_SORT_FIELDS.join(\"|\")} (aliases: updated->updated_at, created->created_at)`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized as ListSortField;\n}\n\nfunction parseSortOrder(raw: string | undefined): ListSortOrder | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n if (!LIST_SORT_ORDER_VALUES.includes(normalized as ListSortOrder)) {\n throw new PmCliError(\n `Sort order must be one of ${LIST_SORT_ORDER_VALUES.join(\"|\")}`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized as ListSortOrder;\n}\n\nfunction parseTreeDepth(raw: string | undefined): number | undefined {\n return parseIntegerLimit(raw, \"--tree-depth\");\n}\n\nfunction parseAssigneeFilter(\n raw: string | undefined,\n): \"assigned\" | \"unassigned\" | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n if (!normalized) {\n throw new PmCliError(\n \"Assignee filter must be one of assigned|unassigned\",\n EXIT_CODE.USAGE,\n );\n }\n if (normalized !== \"assigned\" && normalized !== \"unassigned\") {\n throw new PmCliError(\n `Invalid assignee filter \"${raw}\". Allowed: assigned|unassigned`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized;\n}\n\n// Resolve built-in, runtime, and workflow-group aliases through the shared\n// registry, rejecting typos instead of returning a misleading empty result.\nfunction resolveStatusFilter(\n status: ItemStatus | undefined,\n statusRegistry: RuntimeStatusRegistry,\n): ItemStatus[] | undefined {\n return parseStatusFilterCsv(status, statusRegistry, { strict: true });\n}\n\ninterface ListFilterSet {\n idsFilter: Set<string> | undefined;\n statusSet: Set<ItemStatus> | undefined;\n excludeTerminal: boolean;\n typeFilter: ItemType | undefined;\n tagFilter: string | undefined;\n priorityFilter: number | undefined;\n deadlineBefore: string | undefined;\n deadlineAfter: string | undefined;\n updatedAfter: string | undefined;\n updatedBefore: string | undefined;\n createdAfter: string | undefined;\n createdBefore: string | undefined;\n assigneeFilter: string | undefined;\n assigneeModeFilter: \"assigned\" | \"unassigned\" | undefined;\n parentFilter: string | undefined;\n treeEnabled: boolean;\n sprintFilter: string | undefined;\n releaseFilter: string | undefined;\n missingMetadataFilters: MissingMetadataFilters;\n missingMetadataActive: boolean;\n lifecycleClassifier: ReturnType<typeof lifecycleClassifierFromStatusRegistry>;\n contentFieldFilters: ContentFieldFilters;\n contentFiltersActive: boolean;\n}\n\nfunction assertListAssigneeFilters(\n assigneeFilter: string | undefined,\n assigneeModeFilter: \"assigned\" | \"unassigned\" | undefined,\n): void {\n if (\n assigneeFilter &&\n (assigneeFilter.toLowerCase() === \"none\" ||\n assigneeFilter.toLowerCase() === \"null\")\n ) {\n throw new PmCliError(\n '--assignee no longer accepts \"none\" or \"null\". Use --assignee-filter unassigned.',\n EXIT_CODE.USAGE,\n );\n }\n if (assigneeFilter !== undefined && assigneeModeFilter === \"unassigned\") {\n throw new PmCliError(\n \"Cannot combine --assignee with --assignee-filter unassigned\",\n EXIT_CODE.USAGE,\n );\n }\n}\n\nfunction resolveListFilterSet(\n status: ItemStatus[] | undefined,\n options: ListOptions,\n typeRegistry: ItemTypeRegistry,\n statusRegistry: RuntimeStatusRegistry,\n): ListFilterSet {\n const assigneeFilter = options.assignee?.trim();\n const assigneeModeFilter = parseAssigneeFilter(options.assigneeFilter);\n assertListAssigneeFilters(assigneeFilter, assigneeModeFilter);\n const missingMetadataFilters = resolveMissingMetadataFilters(options);\n const contentFieldFilters = resolveContentFieldFilters(\n options as Record<string, unknown>,\n );\n return {\n idsFilter: parseIdsFilter(options.ids),\n statusSet:\n status && status.length > 0 ? new Set<ItemStatus>(status) : undefined,\n excludeTerminal: options.excludeTerminal === true,\n typeFilter: parseType(options.type, typeRegistry),\n tagFilter: options.tag?.trim().toLowerCase(),\n priorityFilter: parsePriority(options.priority),\n deadlineBefore: parseDeadline(options.deadlineBefore, \"deadline-before\"),\n deadlineAfter: parseDeadline(options.deadlineAfter, \"deadline-after\"),\n updatedAfter: resolveListUpdatedAfter(options),\n updatedBefore: parseTimestampWindow(\n options.updatedBefore,\n \"updated-before\",\n ),\n createdAfter: parseTimestampWindow(options.createdAfter, \"created-after\"),\n createdBefore: parseTimestampWindow(\n options.createdBefore,\n \"created-before\",\n ),\n assigneeFilter,\n assigneeModeFilter,\n parentFilter: options.parent?.trim(),\n treeEnabled: options.tree === true,\n sprintFilter: options.sprint?.trim(),\n releaseFilter: options.release?.trim(),\n missingMetadataFilters,\n missingMetadataActive: hasMissingMetadataFilter(missingMetadataFilters),\n lifecycleClassifier: lifecycleClassifierFromStatusRegistry(statusRegistry),\n contentFieldFilters,\n contentFiltersActive: hasContentFieldFilter(contentFieldFilters),\n };\n}\n\nfunction matchesListScalarFilters(\n item: ListedItem,\n filters: ListFilterSet,\n statusRegistry: RuntimeStatusRegistry,\n): boolean {\n return (\n matchesListIdentityFilters(item, filters, statusRegistry) &&\n matchesListDateFilters(item, filters) &&\n matchesListAssigneeFilterSet(item, filters) &&\n matchesListScopeFilters(item, filters)\n );\n}\n\nfunction matchesListIdentityFilters(\n item: ListedItem,\n filters: ListFilterSet,\n statusRegistry: RuntimeStatusRegistry,\n): boolean {\n if (filters.idsFilter && !filters.idsFilter.has(item.id)) return false;\n if (filters.statusSet && !filters.statusSet.has(item.status)) return false;\n if (filters.excludeTerminal && isTerminalStatus(item.status, statusRegistry))\n return false;\n if (filters.typeFilter && item.type !== filters.typeFilter) return false;\n if (filters.tagFilter && !(item.tags ?? []).includes(filters.tagFilter))\n return false;\n return (\n filters.priorityFilter === undefined ||\n item.priority === filters.priorityFilter\n );\n}\n\nfunction matchesListDateFilters(\n item: ListedItem,\n filters: ListFilterSet,\n): boolean {\n return matchesTimestampFilters(item, filters);\n}\n\nfunction matchesListAssigneeFilterSet(\n item: ListedItem,\n filters: ListFilterSet,\n): boolean {\n if (filters.assigneeModeFilter === \"assigned\" && !item.assignee) return false;\n if (filters.assigneeModeFilter === \"unassigned\" && item.assignee)\n return false;\n return (\n filters.assigneeFilter === undefined ||\n item.assignee === filters.assigneeFilter\n );\n}\n\nfunction matchesListScopeFilters(\n item: ListedItem,\n filters: ListFilterSet,\n): boolean {\n if (\n filters.parentFilter !== undefined &&\n !filters.treeEnabled &&\n item.parent !== filters.parentFilter\n )\n return false;\n if (\n filters.sprintFilter !== undefined &&\n item.sprint !== filters.sprintFilter\n )\n return false;\n return (\n filters.releaseFilter === undefined ||\n item.release === filters.releaseFilter\n );\n}\n\nfunction matchesListFilterSet(\n item: ListedItem,\n filters: ListFilterSet,\n statusRegistry: RuntimeStatusRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): boolean {\n if (!matchesListScalarFilters(item, filters, statusRegistry)) {\n return false;\n }\n if (\n filters.missingMetadataActive &&\n !itemMatchesMissingMetadata(\n item,\n filters.missingMetadataFilters,\n filters.lifecycleClassifier,\n )\n ) {\n return false;\n }\n if (\n filters.contentFiltersActive &&\n !itemMatchesContentFilters(item, filters.contentFieldFilters)\n ) {\n return false;\n }\n if (\n !matchesRuntimeFilters(item as Record<string, unknown>, runtimeFieldFilters)\n ) {\n return false;\n }\n return true;\n}\n\nfunction applyFilters(\n items: ListedItem[],\n status: ItemStatus[] | undefined,\n options: ListOptions,\n typeRegistry: ItemTypeRegistry,\n statusRegistry: RuntimeStatusRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): ListedItem[] {\n const filters = resolveListFilterSet(\n status,\n options,\n typeRegistry,\n statusRegistry,\n );\n return items.filter((item) =>\n matchesListFilterSet(item, filters, statusRegistry, runtimeFieldFilters),\n );\n}\n\nfunction trimNonEmpty(value: string | undefined): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction withTreeMetadata(\n item: ListedItem,\n depth: number,\n childCount: number,\n): ListTreeItem {\n const itemRecord = toItemRecord(item);\n const title = typeof itemRecord.title === \"string\" ? itemRecord.title : \"\";\n const parent =\n trimNonEmpty(\n typeof itemRecord.parent === \"string\" ? itemRecord.parent : undefined,\n ) ?? null;\n return {\n ...item,\n tree_depth: depth,\n tree_parent: parent,\n tree_children: childCount,\n tree_title: `${\" \".repeat(depth)}${title}`,\n };\n}\n\nfunction orderItemsAsTree(\n sortedItems: ListedItem[],\n parentRoot: string | undefined,\n maxDepth: number | undefined,\n): ListedItem[] {\n const byId = new Map<string, ListedItem>();\n const childrenByParent = new Map<string, ListedItem[]>();\n for (const item of sortedItems) {\n byId.set(item.id, item);\n const parentId = trimNonEmpty(item.parent);\n if (!parentId) {\n continue;\n }\n const bucket = childrenByParent.get(parentId);\n if (bucket) {\n bucket.push(item);\n } else {\n childrenByParent.set(parentId, [item]);\n }\n }\n\n const roots = parentRoot\n ? [...(childrenByParent.get(parentRoot) ?? [])]\n : sortedItems.filter((item) => {\n const parentId = trimNonEmpty(item.parent);\n return !parentId || !byId.has(parentId);\n });\n const ordered: ListedItem[] = [];\n const visited = new Set<string>();\n const pushNode = (node: ListedItem, depth: number): void => {\n if (visited.has(node.id)) {\n return;\n }\n visited.add(node.id);\n const children = childrenByParent.get(node.id) ?? [];\n ordered.push(withTreeMetadata(node, depth, children.length));\n if (maxDepth !== undefined && depth >= maxDepth) {\n return;\n }\n for (const child of children) {\n pushNode(child, depth + 1);\n }\n };\n for (const root of roots) {\n pushNode(root, 0);\n }\n return ordered;\n}\n\nfunction compareNullableString(\n left: string | null,\n right: string | null,\n): number {\n if (left === right) {\n return 0;\n }\n if (left === null) {\n return 1;\n }\n if (right === null) {\n return -1;\n }\n return left.localeCompare(right);\n}\n\nfunction compareNullableTimestamp(\n left: string | null,\n right: string | null,\n): number {\n if (left === right) {\n return 0;\n }\n if (left === null) {\n return 1;\n }\n if (right === null) {\n return -1;\n }\n return compareTimestampStrings(left, right);\n}\n\nfunction compareBySortField(\n left: ListedItem,\n right: ListedItem,\n field: ListSortField,\n): number {\n switch (field) {\n case \"priority\":\n return left.priority - right.priority;\n case \"deadline\":\n return compareNullableTimestamp(\n left.deadline ?? null,\n right.deadline ?? null,\n );\n case \"updated_at\":\n return compareTimestampStrings(left.updated_at, right.updated_at);\n case \"created_at\":\n return compareTimestampStrings(left.created_at, right.created_at);\n case \"title\":\n return (left.title ?? \"\").localeCompare(right.title ?? \"\");\n case \"parent\":\n return compareNullableString(left.parent ?? null, right.parent ?? null);\n default:\n return 0;\n }\n}\n\nfunction sortItems(\n items: ListedItem[],\n sortField: ListSortField | undefined,\n sortOrder: ListSortOrder,\n statusRegistry: RuntimeStatusRegistry,\n): ListedItem[] {\n if (!sortField) {\n return sortItemsDefault(items, statusRegistry);\n }\n return [...items].sort((left, right) => {\n const byField = compareBySortField(left, right, sortField);\n if (byField !== 0) {\n return sortOrder === \"desc\" ? -byField : byField;\n }\n const fallback = compareDefaultSort(left, right, statusRegistry);\n return sortOrder === \"desc\" ? -fallback : fallback;\n });\n}\n\nfunction readListFieldValue(\n item: ListedItem,\n field: string,\n treeMode = false,\n): unknown {\n const normalized = normalizeProjectionField(field.trim());\n if (normalized.length === 0) {\n return null;\n }\n const itemRecord = toItemRecord(item);\n if (\n treeMode &&\n normalized === \"title\" &&\n typeof itemRecord.tree_title === \"string\"\n ) {\n return itemRecord.tree_title;\n }\n if (Object.prototype.hasOwnProperty.call(itemRecord, normalized)) {\n return itemRecord[normalized] ?? null;\n }\n return null;\n}\n\nfunction projectListItems(\n items: ListedItem[],\n projection: ListProjectionConfig,\n treeMode = false,\n): ListResultItem[] {\n if (projection.mode === \"full\") {\n return items;\n }\n return items.map((item) => {\n const projected: Record<string, unknown> = {};\n for (const field of projection.fields) {\n projected[field] = readListFieldValue(item, field, treeMode);\n }\n return projected;\n });\n}\n\nfunction runtimeMetadataKeysForProjection(\n definitions: Array<{ metadata_key: string }>,\n): string[] {\n const keys: string[] = [];\n for (const field of definitions) {\n keys.push(field.metadata_key);\n }\n return keys;\n}\n\ninterface ListRuntimeContext {\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n statusRegistry: RuntimeStatusRegistry;\n runtimeFieldFilters: Record<string, unknown>;\n typeRegistry: ItemTypeRegistry;\n projection: ListProjectionConfig;\n}\n\ninterface ListOrderingOptions {\n sortField: ListSortField | undefined;\n sortOrder: ListSortOrder;\n treeEnabled: boolean;\n treeDepth: number | undefined;\n parentRoot: string | undefined;\n}\n\ninterface ResolvedListStatus {\n resolvedStatus: ItemStatus[] | undefined;\n explicitAllStatuses: boolean;\n effectiveOptions: ListOptions;\n filtersStatus: string | string[] | null;\n}\n\ninterface ListPageResult {\n projected: ListResultItem[];\n totalMatched: number;\n truncationExtras: { total: number } | Record<string, never>;\n pageExtras: {\n has_more?: boolean;\n next_cursor?: string;\n applied_limit?: number;\n truncated?: true;\n };\n}\n\nfunction resolveListPageLimit(\n options: ListOptions,\n totalRows: number,\n): number | undefined {\n if (options.noTruncate === true) {\n return undefined;\n }\n return (\n parseIntegerLimit(options.limit) ?? (totalRows >= 10_000 ? 20 : undefined)\n );\n}\n\nfunction resolveListPageStart(\n ordered: ListedItem[],\n options: ListOptions,\n cursorFingerprint: string,\n): number {\n if (options.after === undefined) {\n return parseOffset(options.offset) ?? 0;\n }\n return resolveQueryCursorStart(\n ordered,\n options.after,\n cursorFingerprint,\n (item) => item.id,\n );\n}\n\nfunction buildListPageExtras(\n limit: number | undefined,\n hasMore: boolean,\n nextCursor: string | undefined,\n): ListPageResult[\"pageExtras\"] {\n return {\n ...(limit !== undefined ? { applied_limit: limit } : {}),\n ...(hasMore ? { has_more: true, truncated: true } : {}),\n ...(nextCursor ? { next_cursor: nextCursor } : {}),\n };\n}\n\nasync function resolveListRuntimeContext(\n options: ListOptions,\n global: GlobalOptions,\n): Promise<ListRuntimeContext> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(\n `Tracker is not initialized at ${pmRoot}. Run pm init first.`,\n EXIT_CODE.NOT_FOUND,\n );\n }\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n const projection = parseProjectionConfig(options);\n validateListProjectionFields(\n projection,\n runtimeMetadataKeysForProjection(runtimeFieldRegistry.definitions),\n );\n return {\n pmRoot,\n settings,\n statusRegistry,\n runtimeFieldFilters: collectRuntimeFilterValues(\n options as Record<string, unknown>,\n runtimeFieldRegistry,\n \"list\",\n ),\n typeRegistry: resolveItemTypeRegistry(\n settings,\n getActiveExtensionRegistrations(),\n ),\n projection,\n };\n}\n\nasync function loadListItems(\n options: ListOptions,\n runtime: ListRuntimeContext,\n listWarnings: string[],\n): Promise<ListedItem[]> {\n const projectionNeedsBody = runtime.projection.fields.some(\n (field) => normalizeProjectionField(field) === \"body\",\n );\n const projectionNeedsCollections =\n runtime.projection.mode === \"full\" ||\n runtime.projection.fields.some((field) =>\n HEAVY_PROJECTION_FIELDS.has(normalizeProjectionField(field)),\n );\n const contentFieldFilters = resolveContentFieldFilters(\n options as Record<string, unknown>,\n );\n const contentNeedsCollections =\n contentFiltersNeedCollections(contentFieldFilters);\n const contentNeedsBody = contentFiltersNeedBody(contentFieldFilters);\n if (options.includeBody || projectionNeedsBody || contentNeedsBody) {\n return await listAllItemMetadataWithBody(\n runtime.pmRoot,\n runtime.settings.item_format,\n runtime.typeRegistry.type_to_folder,\n listWarnings,\n runtime.settings.schema,\n );\n }\n if (projectionNeedsCollections || contentNeedsCollections) {\n return await listAllItemMetadata(\n runtime.pmRoot,\n runtime.settings.item_format,\n runtime.typeRegistry.type_to_folder,\n listWarnings,\n runtime.settings.schema,\n );\n }\n return await listAllItemMetadataLight(\n runtime.pmRoot,\n runtime.settings.item_format,\n runtime.typeRegistry.type_to_folder,\n listWarnings,\n runtime.settings.schema,\n );\n}\n\nfunction resolveListOrderingOptions(options: ListOptions): ListOrderingOptions {\n const sortField = parseSortField(options.sort);\n const sortOrder = parseSortOrder(options.order) ?? \"asc\";\n const treeEnabled = options.tree === true;\n if (!treeEnabled && options.treeDepth !== undefined) {\n throw new PmCliError(\"List --tree-depth requires --tree\", EXIT_CODE.USAGE);\n }\n if (!sortField && options.order !== undefined) {\n throw new PmCliError(\"List --order requires --sort\", EXIT_CODE.USAGE);\n }\n return {\n sortField,\n sortOrder,\n treeEnabled,\n treeDepth: treeEnabled ? parseTreeDepth(options.treeDepth) : undefined,\n parentRoot: treeEnabled ? trimNonEmpty(options.parent) : undefined,\n };\n}\n\nfunction resolveListStatusSelection(\n status: ItemStatus | undefined,\n options: ListOptions,\n statusRegistry: RuntimeStatusRegistry,\n): ResolvedListStatus {\n const explicitStatus = resolveStatusFilter(\n options.status as ItemStatus | undefined,\n statusRegistry,\n );\n const resolvedStatus =\n explicitStatus ?? resolveStatusFilter(status, statusRegistry);\n const explicitAllStatuses = isStatusAllFilterInput(options.status);\n const effectiveOptions =\n explicitStatus || explicitAllStatuses\n ? { ...options, excludeTerminal: false }\n : options;\n const filtersStatus = explicitAllStatuses\n ? \"all\"\n : resolvedStatus === undefined\n ? null\n : resolvedStatus.length === 1\n ? resolvedStatus[0]\n : resolvedStatus;\n return {\n resolvedStatus,\n explicitAllStatuses,\n effectiveOptions,\n filtersStatus,\n };\n}\n\nfunction pageAndProjectListItems(\n ordered: ListedItem[],\n options: ListOptions,\n projection: ListProjectionConfig,\n treeEnabled: boolean,\n cursorFingerprint: string,\n): ListPageResult {\n if (options.after !== undefined && options.offset !== undefined) {\n throw new PmCliError(\n \"List --after cannot be combined with --offset.\",\n EXIT_CODE.USAGE,\n );\n }\n const limit = resolveListPageLimit(options, ordered.length);\n const offset = resolveListPageStart(ordered, options, cursorFingerprint);\n const limited =\n limit === undefined\n ? ordered.slice(offset)\n : ordered.slice(offset, offset + limit);\n const projected = projectListItems(limited, projection, treeEnabled);\n const totalMatched = ordered.length;\n const hasMore = limited.length > 0 && offset + limited.length < totalMatched;\n const nextCursor =\n hasMore && limited.length > 0\n ? encodeQueryCursor(\n cursorFingerprint,\n limited[limited.length - 1]!.id,\n offset + limited.length - 1,\n )\n : undefined;\n return {\n projected,\n totalMatched,\n truncationExtras:\n projected.length < totalMatched || offset > 0\n ? { total: totalMatched }\n : {},\n pageExtras: buildListPageExtras(limit, hasMore, nextCursor),\n };\n}\n\nfunction buildListCursorFingerprint(\n status: string | string[] | null,\n options: ListOptions,\n ordering: ListOrderingOptions,\n): string {\n const normalizedOptions: Record<string, unknown> = { ...options };\n delete normalizedOptions.after;\n delete normalizedOptions.limit;\n delete normalizedOptions.offset;\n delete normalizedOptions.noTruncate;\n delete normalizedOptions.includeBody;\n delete normalizedOptions.compact;\n delete normalizedOptions.brief;\n delete normalizedOptions.full;\n delete normalizedOptions.fields;\n return createQueryFingerprint(\"list\", {\n status,\n options: normalizedOptions,\n sort: ordering.sortField ?? \"default\",\n order: ordering.sortOrder,\n tree: ordering.treeEnabled,\n tree_depth: ordering.treeDepth ?? null,\n });\n}\n\nfunction buildVerboseListFilters(params: {\n filtersStatus: string | string[] | null;\n options: ListOptions;\n noTruncate: boolean;\n treeEnabled: boolean;\n treeDepth: number | undefined;\n sortField: ListSortField | undefined;\n sortOrder: ListSortOrder;\n runtimeFieldFilters: Record<string, unknown>;\n}): Record<string, unknown> {\n const {\n filtersStatus,\n options,\n noTruncate,\n treeEnabled,\n treeDepth,\n sortField,\n sortOrder,\n runtimeFieldFilters,\n } = params;\n const filters: Record<string, unknown> = { status: filtersStatus };\n const optionRecord = options as Record<string, unknown>;\n for (const entry of VERBOSE_LIST_VALUE_FILTER_ECHO_ENTRIES) {\n filters[entry.summaryKey] = optionRecord[entry.optionKey] ?? null;\n }\n for (const entry of VERBOSE_LIST_BOOLEAN_FILTER_ECHO_ENTRIES) {\n if (optionRecord[entry.key] === true) {\n filters[entry.summaryKey] = true;\n }\n }\n Object.assign(\n filters,\n buildGovernanceMissingFilterEcho(options),\n buildContentFilterEcho(options),\n );\n applyListWindowFilterEcho(filters, options);\n if (noTruncate) {\n filters.no_truncate = true;\n }\n if (treeEnabled) {\n filters.tree = true;\n filters.tree_depth = treeDepth ?? null;\n }\n filters.sort = sortField ?? null;\n filters.order = sortField ? sortOrder : null;\n filters.runtime_filters = runtimeFieldFilters;\n return filters;\n}\n\n/** Return complete item metadata when the caller explicitly requests full projection. */\nexport function runList(\n status: ItemStatus | undefined,\n options: ListOptions & { full: true },\n global: GlobalOptions,\n): Promise<ListFullResult>;\n/** Implements run list for the public runtime surface of this module. */\nexport function runList(\n status: ItemStatus | undefined,\n options: ListOptions,\n global: GlobalOptions,\n): Promise<ListResult>;\n/** Execute a list query with projection-aware public result typing. */\nexport async function runList(\n status: ItemStatus | undefined,\n options: ListOptions,\n global: GlobalOptions,\n): Promise<ListResult> {\n const runtime = await resolveListRuntimeContext(options, global);\n const listWarnings: string[] = [];\n const items = await loadListItems(options, runtime, listWarnings);\n const ordering = resolveListOrderingOptions(options);\n const statusSelection = resolveListStatusSelection(\n status,\n options,\n runtime.statusRegistry,\n );\n const filtered = applyFilters(\n items,\n statusSelection.resolvedStatus,\n statusSelection.effectiveOptions,\n runtime.typeRegistry,\n runtime.statusRegistry,\n runtime.runtimeFieldFilters,\n );\n const sorted = sortItems(\n filtered,\n ordering.sortField,\n ordering.sortOrder,\n runtime.statusRegistry,\n );\n const ordered = ordering.treeEnabled\n ? orderItemsAsTree(sorted, ordering.parentRoot, ordering.treeDepth)\n : sorted;\n const noTruncate = options.noTruncate === true;\n const page = pageAndProjectListItems(\n ordered,\n options,\n runtime.projection,\n ordering.treeEnabled,\n buildListCursorFingerprint(\n statusSelection.filtersStatus,\n options,\n ordering,\n ),\n );\n const now = nowIso();\n const warnings = [...new Set(listWarnings)].sort((left, right) =>\n left.localeCompare(right),\n );\n const projectionFields =\n runtime.projection.mode === \"full\" ? null : [...runtime.projection.fields];\n const compactSummaryMode =\n runtime.projection.mode === \"compact\" && options.compact === true;\n if (compactSummaryMode) {\n const compactFilters = buildCompactListFilterSummary({\n filtersStatus: statusSelection.filtersStatus,\n options,\n treeEnabled: ordering.treeEnabled,\n treeDepth: ordering.treeDepth,\n sortField: ordering.sortField,\n sortOrder: ordering.sortOrder,\n runtimeFieldFilters: runtime.runtimeFieldFilters,\n });\n return {\n items: page.projected,\n count: page.projected.length,\n ...page.truncationExtras,\n ...page.pageExtras,\n filters: compactFilters,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n }\n return {\n items: page.projected,\n count: page.projected.length,\n ...page.truncationExtras,\n ...page.pageExtras,\n filters: buildVerboseListFilters({\n filtersStatus: statusSelection.filtersStatus,\n options,\n noTruncate,\n treeEnabled: ordering.treeEnabled,\n treeDepth: ordering.treeDepth,\n sortField: ordering.sortField,\n sortOrder: ordering.sortOrder,\n runtimeFieldFilters: runtime.runtimeFieldFilters,\n }),\n projection: {\n mode: runtime.projection.mode,\n fields: projectionFields,\n },\n sorting: {\n sort: ordering.sortField ?? \"default\",\n order: ordering.sortField ? ordering.sortOrder : \"asc\",\n },\n now,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n\n/** Public contract for test only, shared by SDK and presentation-layer consumers. */\nexport const _testOnly = {\n applyFilters,\n buildCompactListFilterSummary,\n buildContentFilterEcho,\n buildGovernanceMissingFilterEcho,\n resolveContentFieldFilters,\n resolveMissingMetadataFilters,\n compareBySortField,\n compareDefaultSort,\n compareNullableString,\n compareNullableTimestamp,\n normalizeProjectionField,\n parseAssigneeFilter,\n parseFieldSelectors,\n parseIdsFilter,\n parseOffset,\n parseProjectionConfig,\n resolveListUpdatedAfter,\n resolveListPageLimit,\n parseSortField,\n parseSortOrder,\n orderItemsAsTree,\n projectListItems,\n readListFieldValue,\n runtimeMetadataKeysForProjection,\n sortItems,\n trimNonEmpty,\n withTreeMetadata,\n};\n"],"names":[],"mappings":"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","debugId":"320f8a45-feb4-5808-a6cf-bd6f377c1dc6"}
|
|
@@ -7,30 +7,30 @@ import {
|
|
|
7
7
|
parsePriority,
|
|
8
8
|
parseType,
|
|
9
9
|
runList
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-SIJV365F.js";
|
|
11
11
|
import {
|
|
12
12
|
createQueryFingerprint,
|
|
13
13
|
encodeQueryCursor,
|
|
14
14
|
resolveQueryCursorStart
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2IPNL3DR.js";
|
|
16
16
|
import {
|
|
17
17
|
cloneEmptyReplayDocument,
|
|
18
18
|
normalizeReplayPatchOps,
|
|
19
19
|
readHistoryEntries,
|
|
20
20
|
tryApplyReplayPatch,
|
|
21
21
|
verifyHistoryChain
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-KH6QAHME.js";
|
|
23
23
|
import {
|
|
24
24
|
parseLimit
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-PT7MCCGD.js";
|
|
26
26
|
import {
|
|
27
27
|
readContextUsageAffinity,
|
|
28
28
|
recordContextUsageServing
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-YJSURTBB.js";
|
|
30
30
|
import {
|
|
31
31
|
collectBlockedByIds,
|
|
32
32
|
computeActionabilityReport
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-I7GY4X6Y.js";
|
|
34
34
|
import {
|
|
35
35
|
compareTimestampStrings,
|
|
36
36
|
enforceHistoryStreamPolicyForItem,
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
resolveIsoOrRelative,
|
|
51
51
|
runActiveOnReadHooks,
|
|
52
52
|
runActiveServiceOverride
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-P22HGFFI.js";
|
|
54
54
|
import {
|
|
55
55
|
CONTEXT_DEPTH_VALUES,
|
|
56
56
|
CONTEXT_SECTION_VALUES,
|
|
@@ -66,7 +66,7 @@ import {
|
|
|
66
66
|
resolveRuntimeFieldRegistry,
|
|
67
67
|
resolveRuntimeStatusRegistry,
|
|
68
68
|
weekdayOrderIndex
|
|
69
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-KX62NMZC.js";
|
|
70
70
|
|
|
71
71
|
// dist/core/history/history-diff.js
|
|
72
72
|
function decodeJsonPointerSegment(segment) {
|
|
@@ -3452,6 +3452,6 @@ export {
|
|
|
3452
3452
|
runNext,
|
|
3453
3453
|
renderNextMarkdown
|
|
3454
3454
|
};
|
|
3455
|
-
//# sourceMappingURL=chunk-
|
|
3455
|
+
//# sourceMappingURL=chunk-SPFZV2GR.js.map
|
|
3456
3456
|
|
|
3457
3457
|
//# debugId=5f279587-43f6-5b94-ad7b-ab32fe660f30
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeItemId
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-646MQXFW.js";
|
|
4
4
|
import {
|
|
5
5
|
EXIT_CODE,
|
|
6
6
|
PmCliError
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WACRQ26A.js";
|
|
8
8
|
|
|
9
9
|
// dist/core/item/parent-reference-policy.js
|
|
10
10
|
!(function() {
|
|
@@ -107,4 +107,4 @@ export {
|
|
|
107
107
|
normalizeSprintReleaseFormatPolicy,
|
|
108
108
|
validateSprintOrReleaseValue
|
|
109
109
|
};
|
|
110
|
-
//# sourceMappingURL=chunk-
|
|
110
|
+
//# sourceMappingURL=chunk-TM5CIO3F.js.map
|