@unbrained/pm-cli 2026.6.13 → 2026.6.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +84 -0
- package/README.md +1 -1
- package/dist/cli/bootstrap-args.d.ts +29 -0
- package/dist/cli/bootstrap-args.js +11 -4
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.d.ts +12 -0
- package/dist/cli/commander-usage.js +18 -7
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/activity.d.ts +19 -0
- package/dist/cli/commands/activity.js +12 -2
- package/dist/cli/commands/activity.js.map +1 -1
- package/dist/cli/commands/aggregate.d.ts +58 -0
- package/dist/cli/commands/aggregate.js +48 -15
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/annotation-command.d.ts +6 -1
- package/dist/cli/commands/annotation-command.js +72 -2
- package/dist/cli/commands/annotation-command.js.map +1 -1
- package/dist/cli/commands/append.js +4 -3
- package/dist/cli/commands/append.js.map +1 -1
- package/dist/cli/commands/close-many.d.ts +20 -0
- package/dist/cli/commands/close-many.js +14 -23
- package/dist/cli/commands/close-many.js.map +1 -1
- package/dist/cli/commands/close.js +37 -4
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.js +3 -2
- package/dist/cli/commands/comments-audit.js.map +1 -1
- package/dist/cli/commands/comments.d.ts +2 -0
- package/dist/cli/commands/comments.js +49 -23
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/completion.js +269 -8
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.d.ts +51 -1
- package/dist/cli/commands/config.js +50 -12
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.d.ts +79 -1
- package/dist/cli/commands/context.js +151 -25
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.d.ts +80 -1
- package/dist/cli/commands/contracts.js +54 -4
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.d.ts +49 -0
- package/dist/cli/commands/create.js +105 -7
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.d.ts +33 -0
- package/dist/cli/commands/dedupe-audit.js +18 -14
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/deps.js +7 -4
- package/dist/cli/commands/deps.js.map +1 -1
- package/dist/cli/commands/event-validation-messages.js +3 -3
- package/dist/cli/commands/event-validation-messages.js.map +1 -1
- package/dist/cli/commands/extension/bundled-catalog.d.ts +7 -0
- package/dist/cli/commands/extension/bundled-catalog.js +19 -15
- package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
- package/dist/cli/commands/extension/install-sources.d.ts +41 -1
- package/dist/cli/commands/extension/install-sources.js +26 -8
- package/dist/cli/commands/extension/install-sources.js.map +1 -1
- package/dist/cli/commands/extension/shared.d.ts +5 -0
- package/dist/cli/commands/extension/shared.js +9 -3
- package/dist/cli/commands/extension/shared.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +133 -1
- package/dist/cli/commands/extension.js +127 -9
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/files.d.ts +30 -1
- package/dist/cli/commands/files.js +21 -2
- package/dist/cli/commands/files.js.map +1 -1
- package/dist/cli/commands/focus.d.ts +11 -0
- package/dist/cli/commands/focus.js +86 -0
- package/dist/cli/commands/focus.js.map +1 -0
- package/dist/cli/commands/get.d.ts +9 -2
- package/dist/cli/commands/get.js +34 -6
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/guide.d.ts +5 -0
- package/dist/cli/commands/guide.js +6 -3
- package/dist/cli/commands/guide.js.map +1 -1
- package/dist/cli/commands/health.d.ts +109 -0
- package/dist/cli/commands/health.js +87 -35
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-compact.js +27 -36
- package/dist/cli/commands/history-compact.js.map +1 -1
- package/dist/cli/commands/history-redact.d.ts +46 -0
- package/dist/cli/commands/history-redact.js +99 -67
- package/dist/cli/commands/history-redact.js.map +1 -1
- package/dist/cli/commands/history-repair.js +34 -37
- package/dist/cli/commands/history-repair.js.map +1 -1
- package/dist/cli/commands/history.js +6 -2
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +3 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init-agent-guidance.d.ts +54 -0
- package/dist/cli/commands/init-agent-guidance.js +31 -4
- package/dist/cli/commands/init-agent-guidance.js.map +1 -1
- package/dist/cli/commands/init.d.ts +36 -1
- package/dist/cli/commands/init.js +38 -5
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learnings.js +4 -3
- package/dist/cli/commands/learnings.js.map +1 -1
- package/dist/cli/commands/linked-test-parsers.d.ts +5 -0
- package/dist/cli/commands/linked-test-parsers.js +5 -2
- package/dist/cli/commands/linked-test-parsers.js.map +1 -1
- package/dist/cli/commands/list-filter-shared.d.ts +8 -0
- package/dist/cli/commands/list-filter-shared.js +70 -0
- package/dist/cli/commands/list-filter-shared.js.map +1 -0
- package/dist/cli/commands/list.d.ts +116 -0
- package/dist/cli/commands/list.js +194 -6
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/normalize.js +16 -2
- package/dist/cli/commands/normalize.js.map +1 -1
- package/dist/cli/commands/notes.js +4 -3
- package/dist/cli/commands/notes.js.map +1 -1
- package/dist/cli/commands/plan.js +3 -2
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +83 -0
- package/dist/cli/commands/reindex.js +45 -10
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +40 -1
- package/dist/cli/commands/restore.js +27 -2
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.d.ts +18 -0
- package/dist/cli/commands/schema.js +30 -3
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +289 -1
- package/dist/cli/commands/search.js +367 -60
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +38 -0
- package/dist/cli/commands/stats.js +38 -10
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/telemetry.js +5 -3
- package/dist/cli/commands/telemetry.js.map +1 -1
- package/dist/cli/commands/templates.d.ts +18 -0
- package/dist/cli/commands/templates.js +9 -2
- package/dist/cli/commands/templates.js.map +1 -1
- package/dist/cli/commands/test-all.d.ts +5 -0
- package/dist/cli/commands/test-all.js +9 -3
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test.d.ts +70 -1
- package/dist/cli/commands/test.js +84 -3
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.d.ts +34 -1
- package/dist/cli/commands/update-many.js +60 -31
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +71 -0
- package/dist/cli/commands/update.js +74 -8
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts +28 -1
- package/dist/cli/commands/upgrade.js +17 -4
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +114 -0
- package/dist/cli/commands/validate.js +153 -8
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.d.ts +30 -0
- package/dist/cli/error-guidance.js +41 -6
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-options.js +9 -7
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/help-content.d.ts +8 -0
- package/dist/cli/help-content.js +30 -6
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/help-json-payload.d.ts +19 -1
- package/dist/cli/help-json-payload.js +16 -7
- package/dist/cli/help-json-payload.js.map +1 -1
- package/dist/cli/main.d.ts +223 -0
- package/dist/cli/main.js +203 -45
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +62 -5
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.d.ts +16 -0
- package/dist/cli/register-mutation.js +210 -40
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.d.ts +8 -0
- package/dist/cli/register-operations.js +33 -11
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +9 -6
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.d.ts +4 -0
- package/dist/cli/registration-helpers.js +124 -38
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-5P2KQCTH.js +18 -0
- package/dist/cli-bundle/chunks/{activity-PPO7QWJF.js → activity-MJGTX4LO.js} +13 -11
- package/dist/cli-bundle/chunks/{aggregate-XEBW22UQ.js → aggregate-MH3GROKB.js} +54 -25
- package/dist/cli-bundle/chunks/aggregate-MH3GROKB.js.map +7 -0
- package/dist/cli-bundle/chunks/{aggregate-IRHJWEKG.js → aggregate-OUGCDFNC.js} +55 -26
- package/dist/cli-bundle/chunks/aggregate-OUGCDFNC.js.map +1 -0
- package/dist/cli-bundle/chunks/{append-N2AWXKZC.js → append-2Q4BPUBW.js} +10 -10
- package/dist/cli-bundle/chunks/{append-N2AWXKZC.js.map → append-2Q4BPUBW.js.map} +2 -2
- package/dist/cli-bundle/chunks/{append-NL67JNJU.js → append-VCRUG2W6.js} +11 -11
- package/dist/cli-bundle/chunks/append-VCRUG2W6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-GRZGHGRG.js → chunk-2IUJBMKS.js} +10 -9
- package/dist/cli-bundle/chunks/{chunk-GRZGHGRG.js.map → chunk-2IUJBMKS.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-6ZFTM65G.js → chunk-2JEGCDYT.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3CQPVBK3.js → chunk-3WAULYOY.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-AGG32LKL.js → chunk-3XOXWOGA.js} +359 -19
- package/dist/cli-bundle/chunks/chunk-3XOXWOGA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XXLMJDUB.js → chunk-4KBK4BA3.js} +13 -15
- package/dist/cli-bundle/chunks/chunk-4KBK4BA3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UCVJP4JL.js → chunk-4VLB4JH2.js} +51 -8
- package/dist/cli-bundle/chunks/chunk-4VLB4JH2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BVL5KGVA.js → chunk-656HPQPO.js} +27 -12
- package/dist/cli-bundle/chunks/chunk-656HPQPO.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-LYNQ3NGI.js → chunk-667XI4UJ.js} +309 -20
- package/dist/cli-bundle/chunks/chunk-667XI4UJ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-W6KNFAMZ.js → chunk-6BV7ENQL.js} +9 -8
- package/dist/cli-bundle/chunks/chunk-6BV7ENQL.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-6EFCFPNE.js +35 -0
- package/dist/cli-bundle/chunks/chunk-6EFCFPNE.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7SM7VA5I.js → chunk-6NQXMGYU.js} +19 -8
- package/dist/cli-bundle/chunks/chunk-6NQXMGYU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-AAUYXSFF.js → chunk-764O7EUA.js} +223 -50
- package/dist/cli-bundle/chunks/chunk-764O7EUA.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VYZNX4C5.js → chunk-7AGIXLNK.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-7EILPFMA.js +404 -0
- package/dist/cli-bundle/chunks/chunk-7EILPFMA.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-L6YQONLM.js → chunk-7K2MXFMX.js} +11 -13
- package/dist/cli-bundle/chunks/chunk-7K2MXFMX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HZOX5BYD.js → chunk-7L5VOUYP.js} +6 -17
- package/dist/cli-bundle/chunks/chunk-7L5VOUYP.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-7ZGKNHUL.js +61 -0
- package/dist/cli-bundle/chunks/chunk-7ZGKNHUL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TOX7YQ7X.js → chunk-A576QZDL.js} +223 -50
- package/dist/cli-bundle/chunks/chunk-A576QZDL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RFR2YQGO.js → chunk-AERT7KT3.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-ASM4DVRW.js +58 -0
- package/dist/cli-bundle/chunks/chunk-ASM4DVRW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SQDKAEKG.js → chunk-B5Q7XC4K.js} +117 -37
- package/dist/cli-bundle/chunks/chunk-B5Q7XC4K.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RHYBR6G7.js → chunk-BJWTFOZM.js} +74 -14
- package/dist/cli-bundle/chunks/chunk-BJWTFOZM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4ZKKZMLH.js → chunk-CBMETQ2U.js} +104 -30
- package/dist/cli-bundle/chunks/chunk-CBMETQ2U.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XOYHMHFF.js → chunk-E6J2PEK6.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-IIOIBAQW.js → chunk-F2GC6L3N.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-3VULHQNS.js → chunk-F7WSO5UX.js} +7 -18
- package/dist/cli-bundle/chunks/chunk-F7WSO5UX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JCTZV7TO.js → chunk-FTAZLAR7.js} +8 -5
- package/dist/cli-bundle/chunks/{chunk-JCTZV7TO.js.map → chunk-FTAZLAR7.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-AUDDXKNX.js → chunk-FXNT5LPX.js} +77 -9
- package/dist/cli-bundle/chunks/chunk-FXNT5LPX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IZHCCG4S.js → chunk-G2YVUY7I.js} +14 -9
- package/dist/cli-bundle/chunks/chunk-G2YVUY7I.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5HSAHRYA.js → chunk-G3CEIXTV.js} +68 -19
- package/dist/cli-bundle/chunks/chunk-G3CEIXTV.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QQG4HEX7.js → chunk-GAVE4MYM.js} +37 -63
- package/dist/cli-bundle/chunks/chunk-GAVE4MYM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-3FMQMHAG.js → chunk-GQ4JKNMV.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3FMQMHAG.js.map → chunk-GQ4JKNMV.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-MACCNKSZ.js → chunk-GYMG7AG6.js} +36 -62
- package/dist/cli-bundle/chunks/chunk-GYMG7AG6.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7CRFV6JR.js → chunk-H6EH6ENJ.js} +362 -22
- package/dist/cli-bundle/chunks/chunk-H6EH6ENJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-2J2AH4V5.js → chunk-HDIDUME4.js} +45 -13
- package/dist/cli-bundle/chunks/chunk-HDIDUME4.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2ANTZBYF.js → chunk-HPELHUTG.js} +122 -45
- package/dist/cli-bundle/chunks/chunk-HPELHUTG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-VNC2HBL4.js → chunk-II7OGE3V.js} +20 -9
- package/dist/cli-bundle/chunks/chunk-II7OGE3V.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CEGUH2E5.js → chunk-ILHLIA47.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-CEGUH2E5.js.map → chunk-ILHLIA47.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-4TPFXE2R.js → chunk-IMQG4VR3.js} +118 -74
- package/dist/cli-bundle/chunks/chunk-IMQG4VR3.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-MGAQ6KZG.js → chunk-IQVB3YDD.js} +82 -21
- package/dist/cli-bundle/chunks/chunk-IQVB3YDD.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-WLH7X4RN.js → chunk-KQ3LAMDO.js} +45 -13
- package/dist/cli-bundle/chunks/chunk-KQ3LAMDO.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-S2CDTRJ6.js → chunk-KTVETP66.js} +379 -271
- package/dist/cli-bundle/chunks/chunk-KTVETP66.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-36BCSMKP.js → chunk-KZYVTOG5.js} +26 -11
- package/dist/cli-bundle/chunks/chunk-KZYVTOG5.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-XWDZVCBJ.js → chunk-L6FJPOT4.js} +11 -10
- package/dist/cli-bundle/chunks/{chunk-XWDZVCBJ.js.map → chunk-L6FJPOT4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-LFW5NQUP.js → chunk-LV5FFQ7M.js} +405 -290
- package/dist/cli-bundle/chunks/chunk-LV5FFQ7M.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PNYAAB4S.js → chunk-LWGMDLQ6.js} +8 -3
- package/dist/cli-bundle/chunks/chunk-LWGMDLQ6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-QU3OPNVV.js → chunk-M23HXJL3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LSSTKL3Y.js → chunk-MJZUZ2QE.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-LOAR5TKX.js → chunk-NCIBNERT.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-LOAR5TKX.js.map → chunk-NCIBNERT.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-6TBR5AZ2.js → chunk-NIQHNDBZ.js} +76 -8
- package/dist/cli-bundle/chunks/chunk-NIQHNDBZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-Z647PYLD.js → chunk-O46LTCXQ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-GFBEXDCQ.js → chunk-OCTQJP42.js} +19 -8
- package/dist/cli-bundle/chunks/{chunk-GFBEXDCQ.js.map → chunk-OCTQJP42.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HLEGAQXT.js → chunk-OLTYNVJR.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-IXVSSHGV.js → chunk-OY3P2I6B.js} +13 -8
- package/dist/cli-bundle/chunks/chunk-OY3P2I6B.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KHGTYCJ6.js → chunk-PZD7WPUC.js} +69 -20
- package/dist/cli-bundle/chunks/chunk-PZD7WPUC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4FHLNNW7.js → chunk-Q5RLUCP3.js} +74 -14
- package/dist/cli-bundle/chunks/chunk-Q5RLUCP3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-SOHXUA2Q.js → chunk-RKKIH2ZQ.js} +116 -36
- package/dist/cli-bundle/chunks/chunk-RKKIH2ZQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-O3YCJOVX.js → chunk-SPYPC5CB.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-O3YCJOVX.js.map → chunk-SPYPC5CB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-SGMGMCIF.js → chunk-SY4GKIWT.js} +82 -21
- package/dist/cli-bundle/chunks/chunk-SY4GKIWT.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5LMF75Q7.js → chunk-SY4PZWIZ.js} +7 -4
- package/dist/cli-bundle/chunks/{chunk-5LMF75Q7.js.map → chunk-SY4PZWIZ.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HWHONML5.js → chunk-T5VU7ROQ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JWXTOYBI.js → chunk-TIRZIQRP.js} +121 -44
- package/dist/cli-bundle/chunks/chunk-TIRZIQRP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PEH7SZD2.js → chunk-TUB3DZAZ.js} +105 -31
- package/dist/cli-bundle/chunks/chunk-TUB3DZAZ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-UAR2VNCK.js +394 -0
- package/dist/cli-bundle/chunks/chunk-UAR2VNCK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NN6RKGFW.js → chunk-UBMCSJXX.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JE5IZXDS.js → chunk-UUKORJSN.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-R4VWYWRN.js → chunk-W3HFLORZ.js} +7 -2
- package/dist/cli-bundle/chunks/chunk-W3HFLORZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-LGOXXQUW.js → chunk-WZCQVABQ.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-X3W5ESZQ.js +32 -0
- package/dist/cli-bundle/chunks/chunk-X3W5ESZQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-M3SI2REU.js → chunk-XLNNCKTN.js} +322 -19
- package/dist/cli-bundle/chunks/chunk-XLNNCKTN.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4JHJ7YG2.js → chunk-XNOY7TCB.js} +118 -74
- package/dist/cli-bundle/chunks/chunk-XNOY7TCB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DWG4FHPY.js → chunk-YGRPBFMA.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JW7D6437.js → chunk-YXTLI4XP.js} +20 -9
- package/dist/cli-bundle/chunks/chunk-YXTLI4XP.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-TSXWFN3L.js → chunk-Z3MUNQRV.js} +52 -9
- package/dist/cli-bundle/chunks/chunk-Z3MUNQRV.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-GOO4UXBI.js → chunk-ZJRDVYZI.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-32XSW44C.js → chunk-ZONXMSVB.js} +10 -9
- package/dist/cli-bundle/chunks/chunk-ZONXMSVB.js.map +1 -0
- package/dist/cli-bundle/chunks/{claim-QJOQBH7J.js → claim-4APLUXJW.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-HE6KEGJW.js → claim-NEO7AGWH.js} +10 -10
- package/dist/cli-bundle/chunks/{close-SPUFW5QR.js → close-3QABBNGU.js} +8 -8
- package/dist/cli-bundle/chunks/close-ILMZR3D7.js +13 -0
- package/dist/cli-bundle/chunks/{close-many-GKAJX54X.js → close-many-MIZLTYGL.js} +32 -20
- package/dist/cli-bundle/chunks/close-many-MIZLTYGL.js.map +1 -0
- package/dist/cli-bundle/chunks/{close-many-GL6NRUU5.js → close-many-Q7Y5AHQI.js} +31 -19
- package/dist/cli-bundle/chunks/close-many-Q7Y5AHQI.js.map +7 -0
- package/dist/cli-bundle/chunks/{comments-5FPT6L7N.js → comments-DAIQPOMU.js} +55 -31
- package/dist/cli-bundle/chunks/comments-DAIQPOMU.js.map +1 -0
- package/dist/cli-bundle/chunks/{comments-TOLOYWNI.js → comments-IWFSVM4P.js} +54 -30
- package/dist/cli-bundle/chunks/comments-IWFSVM4P.js.map +7 -0
- package/dist/cli-bundle/chunks/{config-4MN45TIH.js → config-IOJELD6O.js} +45 -19
- package/dist/cli-bundle/chunks/config-IOJELD6O.js.map +1 -0
- package/dist/cli-bundle/chunks/{config-7N6D7YJE.js → config-PXTMAYV3.js} +44 -18
- package/dist/cli-bundle/chunks/config-PXTMAYV3.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-AQSLE7DZ.js → context-QHJSCJW4.js} +128 -39
- package/dist/cli-bundle/chunks/context-QHJSCJW4.js.map +1 -0
- package/dist/cli-bundle/chunks/{context-U3PUJMVN.js → context-XZS2VFKU.js} +127 -38
- package/dist/cli-bundle/chunks/context-XZS2VFKU.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-ITSJXO3O.js → contracts-B7U4OJTV.js} +54 -10
- package/dist/cli-bundle/chunks/contracts-B7U4OJTV.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-H7KCQXLY.js → contracts-NSBVLXQ3.js} +54 -10
- package/dist/cli-bundle/chunks/contracts-NSBVLXQ3.js.map +7 -0
- package/dist/cli-bundle/chunks/{copy-EB3MUCSW.js → copy-Q64T5FD4.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-C4W522JM.js → copy-SG34LCMU.js} +7 -7
- package/dist/cli-bundle/chunks/create-F5HZX2S4.js +30 -0
- package/dist/cli-bundle/chunks/{create-4EQNELMY.js → create-IPAX2SNL.js} +16 -13
- package/dist/cli-bundle/chunks/{delete-ZLGUYIXU.js → delete-TLXR7LJ2.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-X5QLXIQX.js → delete-VH3L7DZ6.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-GPB3LGWN.js → deps-J3HBBLDB.js} +9 -10
- package/dist/cli-bundle/chunks/{deps-GPB3LGWN.js.map → deps-J3HBBLDB.js.map} +2 -2
- package/dist/cli-bundle/chunks/{deps-HV2C2L46.js → deps-XV6JJ6IN.js} +10 -11
- package/dist/cli-bundle/chunks/deps-XV6JJ6IN.js.map +1 -0
- package/dist/cli-bundle/chunks/{docs-SRTLCQOL.js → docs-GWDEB7JH.js} +9 -9
- package/dist/cli-bundle/chunks/{docs-RJQPLROO.js → docs-RCLNSKID.js} +9 -9
- package/dist/cli-bundle/chunks/{extension-MM3TVWOO.js → extension-5RN65LHT.js} +7 -5
- package/dist/cli-bundle/chunks/{extension-WKPVPNCC.js → extension-7KO2NX2A.js} +7 -5
- package/dist/cli-bundle/chunks/{files-OIFN3DQX.js → files-3TCQHUHA.js} +25 -11
- package/dist/cli-bundle/chunks/files-3TCQHUHA.js.map +1 -0
- package/dist/cli-bundle/chunks/{files-LIFDKNCN.js → files-5FDUPSEA.js} +24 -10
- package/dist/cli-bundle/chunks/files-5FDUPSEA.js.map +7 -0
- package/dist/cli-bundle/chunks/focus-7AQMNRSU.js +109 -0
- package/dist/cli-bundle/chunks/focus-7AQMNRSU.js.map +7 -0
- package/dist/cli-bundle/chunks/focus-HQXBYPKM.js +106 -0
- package/dist/cli-bundle/chunks/focus-HQXBYPKM.js.map +1 -0
- package/dist/cli-bundle/chunks/{gc-DL6AVOX5.js → gc-2FGKYRJ4.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-NRFHLVFT.js → gc-5B6ABL3Z.js} +3 -3
- package/dist/cli-bundle/chunks/{get-SAB7CRBG.js → get-FUMVOJQD.js} +43 -16
- package/dist/cli-bundle/chunks/get-FUMVOJQD.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-K7UULTQF.js → get-H5BZTW4A.js} +42 -15
- package/dist/cli-bundle/chunks/get-H5BZTW4A.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-NUVZYIEV.js → health-JSVOR6B4.js} +75 -49
- package/dist/cli-bundle/chunks/health-JSVOR6B4.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-VJWH3ZFK.js → health-LE2ZQGSM.js} +74 -48
- package/dist/cli-bundle/chunks/health-LE2ZQGSM.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-GYFD2DJW.js → history-QO4JVJJP.js} +10 -10
- package/dist/cli-bundle/chunks/history-SSXGGTVZ.js +20 -0
- package/dist/cli-bundle/chunks/{history-compact-WQZQ6KXM.js → history-compact-ID74DOUI.js} +37 -46
- package/dist/cli-bundle/chunks/history-compact-ID74DOUI.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-compact-SLL6ESXH.js → history-compact-SDFRPZ4V.js} +38 -47
- package/dist/cli-bundle/chunks/history-compact-SDFRPZ4V.js.map +1 -0
- package/dist/cli-bundle/chunks/history-redact-VBH44Y7F.js +21 -0
- package/dist/cli-bundle/chunks/{history-redact-SDTDR6WM.js → history-redact-Z4P5MM3G.js} +13 -11
- package/dist/cli-bundle/chunks/{history-repair-UCYS55ZX.js → history-repair-ANHEYWKF.js} +43 -48
- package/dist/cli-bundle/chunks/history-repair-ANHEYWKF.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-repair-BJCGM6Q3.js → history-repair-CKE7GLZR.js} +44 -49
- package/dist/cli-bundle/chunks/history-repair-CKE7GLZR.js.map +1 -0
- package/dist/cli-bundle/chunks/init-7FBQO77A.js +19 -0
- package/dist/cli-bundle/chunks/{init-MXV57LKL.js → init-K6MSMB37.js} +11 -9
- package/dist/cli-bundle/chunks/{learnings-QKJOKEAO.js → learnings-VIS3NOQV.js} +13 -12
- package/dist/cli-bundle/chunks/learnings-VIS3NOQV.js.map +7 -0
- package/dist/cli-bundle/chunks/{learnings-L6KTZGOT.js → learnings-YYNB64GN.js} +14 -13
- package/dist/cli-bundle/chunks/learnings-YYNB64GN.js.map +1 -0
- package/dist/cli-bundle/chunks/list-7UE44A2R.js +29 -0
- package/dist/cli-bundle/chunks/list-UHMA3N2K.js +33 -0
- package/dist/cli-bundle/chunks/{notes-3NLK7WTZ.js → notes-2HRMV67I.js} +14 -13
- package/dist/cli-bundle/chunks/notes-2HRMV67I.js.map +1 -0
- package/dist/cli-bundle/chunks/{notes-HMCB7TK6.js → notes-IN3UMA7W.js} +13 -12
- package/dist/cli-bundle/chunks/notes-IN3UMA7W.js.map +7 -0
- package/dist/cli-bundle/chunks/{plan-DWBYI5C6.js → plan-I3SVH7FV.js} +16 -15
- package/dist/cli-bundle/chunks/plan-I3SVH7FV.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-NANUWH4T.js → plan-PAWCCAPW.js} +15 -14
- package/dist/cli-bundle/chunks/plan-PAWCCAPW.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-PWQ5F2VI.js → register-list-query-N7Z7RTDM.js} +31 -22
- package/dist/cli-bundle/chunks/register-list-query-N7Z7RTDM.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-SMMMLSWW.js → register-list-query-OTIK4DVA.js} +32 -23
- package/dist/cli-bundle/chunks/register-list-query-OTIK4DVA.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-QKFPTIZG.js → register-mutation-UFZK6Q57.js} +216 -66
- package/dist/cli-bundle/chunks/register-mutation-UFZK6Q57.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-ZYJQ4DVP.js → register-mutation-XFORLS6D.js} +210 -67
- package/dist/cli-bundle/chunks/register-mutation-XFORLS6D.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-2FMZ6WEF.js → register-operations-6ZCLKRBG.js} +53 -39
- package/dist/cli-bundle/chunks/register-operations-6ZCLKRBG.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-BAFQURZG.js → register-operations-ITE7JTH3.js} +54 -40
- package/dist/cli-bundle/chunks/register-operations-ITE7JTH3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-QN2XV7UL.js → register-setup-7RKGE4BQ.js} +18 -21
- package/dist/cli-bundle/chunks/register-setup-7RKGE4BQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-DQEIKBIP.js → register-setup-7UKEFKT6.js} +17 -20
- package/dist/cli-bundle/chunks/register-setup-7UKEFKT6.js.map +7 -0
- package/dist/cli-bundle/chunks/{restore-FJQWXMPY.js → restore-NNVPBBVJ.js} +13 -11
- package/dist/cli-bundle/chunks/restore-XXXLQ2XC.js +19 -0
- package/dist/cli-bundle/chunks/{schema-RNVJ55V2.js → schema-3HCLXCFX.js} +27 -9
- package/dist/cli-bundle/chunks/schema-3HCLXCFX.js.map +7 -0
- package/dist/cli-bundle/chunks/{schema-ZZ7ZDM2X.js → schema-3YKCQ3VO.js} +28 -10
- package/dist/cli-bundle/chunks/schema-3YKCQ3VO.js.map +1 -0
- package/dist/cli-bundle/chunks/{search-BJ457C2A.js → search-NQ42NC6A.js} +328 -71
- package/dist/cli-bundle/chunks/search-NQ42NC6A.js.map +7 -0
- package/dist/cli-bundle/chunks/{search-FQDZXX7P.js → search-V7PZ2ICH.js} +328 -71
- package/dist/cli-bundle/chunks/search-V7PZ2ICH.js.map +1 -0
- package/dist/cli-bundle/chunks/{stats-DUQWCVOS.js → stats-7KD4PJC5.js} +41 -16
- package/dist/cli-bundle/chunks/stats-7KD4PJC5.js.map +7 -0
- package/dist/cli-bundle/chunks/{stats-CUG3ZHOI.js → stats-GRHO6RFB.js} +42 -17
- package/dist/cli-bundle/chunks/stats-GRHO6RFB.js.map +1 -0
- package/dist/cli-bundle/chunks/{telemetry-33MRGX4Z.js → telemetry-H5GLXNG5.js} +6 -6
- package/dist/cli-bundle/chunks/telemetry-H5GLXNG5.js.map +7 -0
- package/dist/cli-bundle/chunks/{telemetry-RK2VX75A.js → telemetry-TRRYZXWT.js} +7 -7
- package/dist/cli-bundle/chunks/telemetry-TRRYZXWT.js.map +1 -0
- package/dist/cli-bundle/chunks/test-6CZNIIGA.js +34 -0
- package/dist/cli-bundle/chunks/{test-Y3CTFMEC.js → test-7GVQ3VMN.js} +16 -14
- package/dist/cli-bundle/chunks/{test-all-ANYQ33O2.js → test-all-3LF2OZD2.js} +23 -16
- package/dist/cli-bundle/chunks/test-all-3LF2OZD2.js.map +7 -0
- package/dist/cli-bundle/chunks/{test-all-ARSMX33Q.js → test-all-ODVADHV6.js} +24 -17
- package/dist/cli-bundle/chunks/test-all-ODVADHV6.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-5URSD34O.js → test-runs-LYT6ZTNQ.js} +62 -65
- package/dist/cli-bundle/chunks/test-runs-LYT6ZTNQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-XNACGSNQ.js → test-runs-RVP6VWN7.js} +61 -64
- package/dist/cli-bundle/chunks/test-runs-RVP6VWN7.js.map +7 -0
- package/dist/cli-bundle/chunks/update-MPGM6SBE.js +28 -0
- package/dist/cli-bundle/chunks/update-UN75XW3C.js +24 -0
- package/dist/cli-bundle/chunks/{update-many-6B7PJ33I.js → update-many-FCU6RKTO.js} +80 -34
- package/dist/cli-bundle/chunks/update-many-FCU6RKTO.js.map +1 -0
- package/dist/cli-bundle/chunks/{update-many-724JCVDE.js → update-many-XSEQJ24X.js} +79 -33
- package/dist/cli-bundle/chunks/update-many-XSEQJ24X.js.map +7 -0
- package/dist/cli-bundle/chunks/{upgrade-ALBEZAI7.js → upgrade-A6TL3INC.js} +22 -8
- package/dist/cli-bundle/chunks/upgrade-A6TL3INC.js.map +7 -0
- package/dist/cli-bundle/chunks/{upgrade-QHRGDBSA.js → upgrade-FOB5LHO5.js} +23 -9
- package/dist/cli-bundle/chunks/upgrade-FOB5LHO5.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-IQRYFXIV.js → validate-7BLDG3AT.js} +221 -30
- package/dist/cli-bundle/chunks/validate-7BLDG3AT.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-UY6DRCG5.js → validate-EHL3MI2V.js} +235 -30
- package/dist/cli-bundle/chunks/validate-EHL3MI2V.js.map +7 -0
- package/dist/cli-bundle/main.js +270 -139
- package/dist/cli-bundle/main.js.map +3 -3
- package/dist/cli.d.ts +10 -0
- package/dist/cli.js +21 -8
- package/dist/cli.js.map +1 -1
- package/dist/core/diagnostics/remediation.js +7 -2
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/extensions/extension-policy.js +14 -15
- package/dist/core/extensions/extension-policy.js.map +1 -1
- package/dist/core/extensions/item-fields.js +4 -5
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +75 -1
- package/dist/core/extensions/loader.js +56 -32
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/governance/content-fields.d.ts +84 -0
- package/dist/core/governance/content-fields.js +182 -0
- package/dist/core/governance/content-fields.js.map +1 -0
- package/dist/core/governance/issue-codes.d.ts +51 -0
- package/dist/core/governance/issue-codes.js +95 -0
- package/dist/core/governance/issue-codes.js.map +1 -0
- package/dist/core/governance/metadata-coverage.d.ts +168 -0
- package/dist/core/governance/metadata-coverage.js +362 -0
- package/dist/core/governance/metadata-coverage.js.map +1 -0
- package/dist/core/history/history-rewrite.d.ts +22 -0
- package/dist/core/history/history-rewrite.js +38 -2
- package/dist/core/history/history-rewrite.js.map +1 -1
- package/dist/core/history/history.d.ts +7 -0
- package/dist/core/history/history.js +6 -2
- package/dist/core/history/history.js.map +1 -1
- package/dist/core/io/body-file.d.ts +14 -0
- package/dist/core/io/body-file.js +47 -0
- package/dist/core/io/body-file.js.map +1 -0
- package/dist/core/item/item-format.d.ts +46 -1
- package/dist/core/item/item-format.js +51 -60
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/parse.d.ts +9 -0
- package/dist/core/item/parse.js +10 -16
- package/dist/core/item/parse.js.map +1 -1
- package/dist/core/item/type-registry.d.ts +1 -0
- package/dist/core/item/type-registry.js +8 -10
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/lock/lock.d.ts +26 -0
- package/dist/core/lock/lock.js +10 -2
- package/dist/core/lock/lock.js.map +1 -1
- package/dist/core/output/output.d.ts +7 -0
- package/dist/core/output/output.js +6 -2
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/schema/item-types-file.d.ts +25 -2
- package/dist/core/schema/item-types-file.js +78 -6
- package/dist/core/schema/item-types-file.js.map +1 -1
- package/dist/core/schema/runtime-schema.d.ts +7 -0
- package/dist/core/schema/runtime-schema.js +23 -16
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/cache.d.ts +19 -1
- package/dist/core/search/cache.js +11 -3
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/corpus.d.ts +36 -2
- package/dist/core/search/corpus.js +120 -24
- package/dist/core/search/corpus.js.map +1 -1
- package/dist/core/search/providers.d.ts +19 -0
- package/dist/core/search/providers.js +19 -2
- package/dist/core/search/providers.js.map +1 -1
- package/dist/core/sentry/instrument.d.ts +1 -0
- package/dist/core/sentry/instrument.js +6 -2
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/session/session-state.d.ts +16 -0
- package/dist/core/session/session-state.js +48 -0
- package/dist/core/session/session-state.js.map +1 -0
- package/dist/core/shared/constants.d.ts +8 -0
- package/dist/core/shared/constants.js +11 -2
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/shared/text-normalization.js +4 -3
- package/dist/core/shared/text-normalization.js.map +1 -1
- package/dist/core/shared/time.d.ts +13 -0
- package/dist/core/shared/time.js +19 -7
- package/dist/core/shared/time.js.map +1 -1
- package/dist/core/store/item-store.d.ts +11 -0
- package/dist/core/store/item-store.js +12 -3
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-validator.d.ts +2 -0
- package/dist/core/store/settings-validator.js +25 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.d.ts +60 -1
- package/dist/core/store/settings.js +100 -46
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/observability.js +10 -8
- package/dist/core/telemetry/observability.js.map +1 -1
- package/dist/core/telemetry/runtime.d.ts +272 -1
- package/dist/core/telemetry/runtime.js +358 -37
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/core/test/background-runs.d.ts +35 -0
- package/dist/core/test/background-runs.js +72 -61
- package/dist/core/test/background-runs.js.map +1 -1
- package/dist/core/test/run-selectors.js +5 -4
- package/dist/core/test/run-selectors.js.map +1 -1
- package/dist/core/validate/estimate-defaults.d.ts +39 -0
- package/dist/core/validate/estimate-defaults.js +117 -0
- package/dist/core/validate/estimate-defaults.js.map +1 -0
- package/dist/core/validate/fix-planning.d.ts +21 -3
- package/dist/core/validate/fix-planning.js +31 -4
- package/dist/core/validate/fix-planning.js.map +1 -1
- package/dist/core/validate/missing-link-owners.d.ts +64 -0
- package/dist/core/validate/missing-link-owners.js +98 -0
- package/dist/core/validate/missing-link-owners.js.map +1 -0
- package/dist/mcp/server.d.ts +61 -0
- package/dist/mcp/server.js +50 -7
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-definitions.js +17 -4
- package/dist/mcp/tool-definitions.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +13 -2
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +2 -2
- package/dist/sdk/cli-contracts/enum-contracts.js +4 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.js +110 -2
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +83 -8
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +28 -0
- package/dist/sdk/cli-contracts.js +164 -11
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/types.d.ts +17 -1
- package/dist/types.js +3 -3
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +15 -3
- package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +136 -7
- package/docs/CONFIGURATION.md +52 -0
- package/docs/TESTING.md +6 -4
- package/package.json +6 -4
- package/packages/pm-calendar/extensions/calendar/runtime.js +6 -0
- package/packages/pm-calendar/extensions/calendar/runtime.ts +12 -0
- package/packages/pm-todos/extensions/todos/runtime.ts +5 -0
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/README.md +3 -3
- package/plugins/pm-claude/commands/pm-init.md +1 -1
- package/plugins/pm-codex/README.md +1 -1
- package/scripts/bundle-cli.mjs +46 -37
- package/scripts/finalize-build.mjs +20 -9
- package/scripts/prepare-build-cache.mjs +27 -16
- package/dist/cli-bundle/chunks/activity-XIOTGZMU.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-IRHJWEKG.js.map +0 -1
- package/dist/cli-bundle/chunks/aggregate-XEBW22UQ.js.map +0 -7
- package/dist/cli-bundle/chunks/append-NL67JNJU.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2ANTZBYF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2J2AH4V5.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-32XSW44C.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-36BCSMKP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3VULHQNS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4FHLNNW7.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4JHJ7YG2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4TPFXE2R.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4ZKKZMLH.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5HSAHRYA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6TBR5AZ2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7CRFV6JR.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7SM7VA5I.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AAUYXSFF.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AGG32LKL.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-AUDDXKNX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-BVL5KGVA.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-C24PWDFG.js +0 -138
- package/dist/cli-bundle/chunks/chunk-C24PWDFG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HZOX5BYD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IXVSSHGV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IZHCCG4S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JW7D6437.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JWXTOYBI.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KHGTYCJ6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-L6YQONLM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-LFW5NQUP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-LYNQ3NGI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-M3SI2REU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MACCNKSZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MGAQ6KZG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-PEH7SZD2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-PNYAAB4S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-QQG4HEX7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-R4VWYWRN.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RHYBR6G7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-S2CDTRJ6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SGMGMCIF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SOHXUA2Q.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SQDKAEKG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-TOX7YQ7X.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-TSXWFN3L.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UCVJP4JL.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-V4KP3TCN.js +0 -128
- package/dist/cli-bundle/chunks/chunk-V4KP3TCN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VNC2HBL4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-W6KNFAMZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-WLH7X4RN.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-XXLMJDUB.js.map +0 -7
- package/dist/cli-bundle/chunks/close-WOG5WTMZ.js +0 -13
- package/dist/cli-bundle/chunks/close-many-GKAJX54X.js.map +0 -1
- package/dist/cli-bundle/chunks/close-many-GL6NRUU5.js.map +0 -7
- package/dist/cli-bundle/chunks/comments-5FPT6L7N.js.map +0 -1
- package/dist/cli-bundle/chunks/comments-TOLOYWNI.js.map +0 -7
- package/dist/cli-bundle/chunks/config-4MN45TIH.js.map +0 -1
- package/dist/cli-bundle/chunks/config-7N6D7YJE.js.map +0 -7
- package/dist/cli-bundle/chunks/context-AQSLE7DZ.js.map +0 -1
- package/dist/cli-bundle/chunks/context-U3PUJMVN.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-H7KCQXLY.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-ITSJXO3O.js.map +0 -1
- package/dist/cli-bundle/chunks/create-NW3K7LVG.js +0 -27
- package/dist/cli-bundle/chunks/deps-HV2C2L46.js.map +0 -1
- package/dist/cli-bundle/chunks/files-LIFDKNCN.js.map +0 -7
- package/dist/cli-bundle/chunks/files-OIFN3DQX.js.map +0 -1
- package/dist/cli-bundle/chunks/get-K7UULTQF.js.map +0 -7
- package/dist/cli-bundle/chunks/get-SAB7CRBG.js.map +0 -1
- package/dist/cli-bundle/chunks/health-NUVZYIEV.js.map +0 -1
- package/dist/cli-bundle/chunks/health-VJWH3ZFK.js.map +0 -7
- package/dist/cli-bundle/chunks/history-IUVN4NTN.js +0 -20
- package/dist/cli-bundle/chunks/history-compact-SLL6ESXH.js.map +0 -1
- package/dist/cli-bundle/chunks/history-compact-WQZQ6KXM.js.map +0 -7
- package/dist/cli-bundle/chunks/history-redact-75KIIJUJ.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-BJCGM6Q3.js.map +0 -1
- package/dist/cli-bundle/chunks/history-repair-UCYS55ZX.js.map +0 -7
- package/dist/cli-bundle/chunks/init-JJFYRUKG.js +0 -17
- package/dist/cli-bundle/chunks/learnings-L6KTZGOT.js.map +0 -1
- package/dist/cli-bundle/chunks/learnings-QKJOKEAO.js.map +0 -7
- package/dist/cli-bundle/chunks/list-GGVPXEV6.js +0 -23
- package/dist/cli-bundle/chunks/list-VOQDQHA4.js +0 -19
- package/dist/cli-bundle/chunks/notes-3NLK7WTZ.js.map +0 -1
- package/dist/cli-bundle/chunks/notes-HMCB7TK6.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-DWBYI5C6.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-NANUWH4T.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-PWQ5F2VI.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-SMMMLSWW.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-QKFPTIZG.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-ZYJQ4DVP.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-2FMZ6WEF.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-BAFQURZG.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-DQEIKBIP.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-QN2XV7UL.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-DRBNXJJH.js +0 -17
- package/dist/cli-bundle/chunks/schema-RNVJ55V2.js.map +0 -7
- package/dist/cli-bundle/chunks/schema-ZZ7ZDM2X.js.map +0 -1
- package/dist/cli-bundle/chunks/search-BJ457C2A.js.map +0 -7
- package/dist/cli-bundle/chunks/search-FQDZXX7P.js.map +0 -1
- package/dist/cli-bundle/chunks/stats-CUG3ZHOI.js.map +0 -1
- package/dist/cli-bundle/chunks/stats-DUQWCVOS.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-33MRGX4Z.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-RK2VX75A.js.map +0 -1
- package/dist/cli-bundle/chunks/test-SDMYEQHH.js +0 -32
- package/dist/cli-bundle/chunks/test-all-ANYQ33O2.js.map +0 -7
- package/dist/cli-bundle/chunks/test-all-ARSMX33Q.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-5URSD34O.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-XNACGSNQ.js.map +0 -7
- package/dist/cli-bundle/chunks/update-PD46VOXI.js +0 -21
- package/dist/cli-bundle/chunks/update-U235A7WP.js +0 -25
- package/dist/cli-bundle/chunks/update-many-6B7PJ33I.js.map +0 -1
- package/dist/cli-bundle/chunks/update-many-724JCVDE.js.map +0 -7
- package/dist/cli-bundle/chunks/upgrade-ALBEZAI7.js.map +0 -7
- package/dist/cli-bundle/chunks/upgrade-QHRGDBSA.js.map +0 -1
- package/dist/cli-bundle/chunks/validate-IQRYFXIV.js.map +0 -1
- package/dist/cli-bundle/chunks/validate-UY6DRCG5.js.map +0 -7
- /package/dist/cli-bundle/chunks/{activity-XIOTGZMU.js.map → activity-5P2KQCTH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-PPO7QWJF.js.map → activity-MJGTX4LO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6ZFTM65G.js.map → chunk-2JEGCDYT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3CQPVBK3.js.map → chunk-3WAULYOY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VYZNX4C5.js.map → chunk-7AGIXLNK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RFR2YQGO.js.map → chunk-AERT7KT3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XOYHMHFF.js.map → chunk-E6J2PEK6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IIOIBAQW.js.map → chunk-F2GC6L3N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QU3OPNVV.js.map → chunk-M23HXJL3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LSSTKL3Y.js.map → chunk-MJZUZ2QE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Z647PYLD.js.map → chunk-O46LTCXQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HLEGAQXT.js.map → chunk-OLTYNVJR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HWHONML5.js.map → chunk-T5VU7ROQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NN6RKGFW.js.map → chunk-UBMCSJXX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JE5IZXDS.js.map → chunk-UUKORJSN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LGOXXQUW.js.map → chunk-WZCQVABQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DWG4FHPY.js.map → chunk-YGRPBFMA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GOO4UXBI.js.map → chunk-ZJRDVYZI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-QJOQBH7J.js.map → claim-4APLUXJW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-HE6KEGJW.js.map → claim-NEO7AGWH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-SPUFW5QR.js.map → close-3QABBNGU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-WOG5WTMZ.js.map → close-ILMZR3D7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-EB3MUCSW.js.map → copy-Q64T5FD4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-C4W522JM.js.map → copy-SG34LCMU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-NW3K7LVG.js.map → create-F5HZX2S4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-4EQNELMY.js.map → create-IPAX2SNL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-ZLGUYIXU.js.map → delete-TLXR7LJ2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-X5QLXIQX.js.map → delete-VH3L7DZ6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-SRTLCQOL.js.map → docs-GWDEB7JH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-RJQPLROO.js.map → docs-RCLNSKID.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-MM3TVWOO.js.map → extension-5RN65LHT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-WKPVPNCC.js.map → extension-7KO2NX2A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-DL6AVOX5.js.map → gc-2FGKYRJ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-NRFHLVFT.js.map → gc-5B6ABL3Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-GYFD2DJW.js.map → history-QO4JVJJP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-IUVN4NTN.js.map → history-SSXGGTVZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-75KIIJUJ.js.map → history-redact-VBH44Y7F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-SDTDR6WM.js.map → history-redact-Z4P5MM3G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-JJFYRUKG.js.map → init-7FBQO77A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-MXV57LKL.js.map → init-K6MSMB37.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-VOQDQHA4.js.map → list-7UE44A2R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-GGVPXEV6.js.map → list-UHMA3N2K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-FJQWXMPY.js.map → restore-NNVPBBVJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-DRBNXJJH.js.map → restore-XXXLQ2XC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-SDMYEQHH.js.map → test-6CZNIIGA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-Y3CTFMEC.js.map → test-7GVQ3VMN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-U235A7WP.js.map → update-MPGM6SBE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-PD46VOXI.js.map → update-UN75XW3C.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../cli/commands/test-runs.ts", "../../../../../../../../core/test/background-runs.ts"],
|
|
4
|
+
"sourcesContent": ["import os from \"node:os\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport {\n type BackgroundLogStream,\n type BackgroundTestRunKind,\n type BackgroundTestRunStatus,\n getBackgroundTestRunStatus,\n listBackgroundTestRuns,\n readBackgroundTestRunLogs,\n resumeBackgroundTestRun,\n runBackgroundTestRunWorker,\n spawnBackgroundTestRunWorker,\n startBackgroundTestRun,\n stopBackgroundTestRun,\n} from \"../../core/test/background-runs.js\";\nimport { getSettingsPath, resolveGlobalPmRoot, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { parseLimit } from \"../shared-parsers.js\";\n\nconst BACKGROUND_STATUS_VALUES: readonly BackgroundTestRunStatus[] = [\"queued\", \"running\", \"passed\", \"failed\", \"stopped\", \"canceled\"];\nconst BACKGROUND_STREAM_VALUES: readonly BackgroundLogStream[] = [\"stdout\", \"stderr\", \"both\"];\n\nfunction normalizeStatus(value: string | undefined): BackgroundTestRunStatus | undefined {\n if (value === undefined) {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n if ((BACKGROUND_STATUS_VALUES as readonly string[]).includes(normalized)) {\n return normalized as BackgroundTestRunStatus;\n }\n throw new PmCliError(`Invalid --status value \"${value}\"`, EXIT_CODE.USAGE);\n}\n\nfunction normalizeStream(value: string | undefined): BackgroundLogStream {\n if (value === undefined || value.trim().length === 0) {\n return \"stderr\";\n }\n const normalized = value.trim().toLowerCase();\n if ((BACKGROUND_STREAM_VALUES as readonly string[]).includes(normalized)) {\n return normalized as BackgroundLogStream;\n }\n throw new PmCliError(`Invalid --stream value \"${value}\"`, EXIT_CODE.USAGE);\n}\n\nfunction resolveWhoamiFallback(): string | undefined {\n try {\n const username = os.userInfo().username.trim();\n if (username.length > 0) {\n return username;\n }\n } catch {\n // Fall back to environment-derived attribution.\n }\n return undefined;\n}\n\nfunction resolveRequestedBy(author: string | undefined, fallback: string): string {\n const candidates = [\n author,\n process.env.PM_AUTHOR,\n fallback,\n process.env.USER,\n process.env.LOGNAME,\n process.env.USERNAME,\n resolveWhoamiFallback(),\n ];\n for (const candidate of candidates) {\n if (typeof candidate !== \"string\") {\n continue;\n }\n const trimmed = candidate.trim();\n if (trimmed.length > 0) {\n return trimmed;\n }\n }\n return \"unknown\";\n}\n\nasync function ensureInitialized(pmRoot: string): Promise<void> {\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n}\n\nexport interface StartBackgroundRunCommandOptions {\n kind: BackgroundTestRunKind;\n commandArgs: string[];\n targetId?: string;\n statusFilter?: string;\n author?: string;\n noExtensions?: boolean;\n}\n\nexport interface StartBackgroundRunResult {\n started: boolean;\n duplicate_of?: string;\n run: unknown;\n}\n\nexport async function runStartBackgroundRun(\n options: StartBackgroundRunCommandOptions,\n global: GlobalOptions,\n): Promise<StartBackgroundRunResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n await ensureInitialized(pmRoot);\n const settings = await readSettings(pmRoot);\n const requestedBy = resolveRequestedBy(options.author, settings.author_default);\n const started = await startBackgroundTestRun({\n pmRoot,\n globalPmRoot,\n kind: options.kind,\n commandArgs: options.commandArgs,\n requestedBy,\n targetId: options.targetId,\n statusFilter: options.statusFilter,\n });\n if (!started.started) {\n return {\n started: false,\n duplicate_of: started.duplicate_of,\n run: started.run,\n };\n }\n const spawned = await spawnBackgroundTestRunWorker({\n pmRoot,\n runId: started.run.id,\n noExtensions: options.noExtensions === true,\n });\n return {\n started: true,\n run: spawned,\n };\n}\n\nexport interface TestRunsListCommandOptions {\n status?: string;\n limit?: string;\n}\n\nexport async function runTestRunsList(options: TestRunsListCommandOptions, global: GlobalOptions): Promise<{\n runs: unknown[];\n count: number;\n filters: {\n status?: BackgroundTestRunStatus;\n limit?: number;\n };\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const status = normalizeStatus(options.status);\n const limit = parseLimit(options.limit, \"limit\");\n const runs = await listBackgroundTestRuns(pmRoot, { status, limit });\n return {\n runs,\n count: runs.length,\n filters: {\n status,\n limit,\n },\n };\n}\n\nexport async function runTestRunsStatus(runId: string, global: GlobalOptions): Promise<{\n run: unknown;\n health: unknown;\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const status = await getBackgroundTestRunStatus(pmRoot, runId);\n return {\n run: status.run,\n health: status.health,\n };\n}\n\nexport interface TestRunsLogsCommandOptions {\n stream?: string;\n tail?: string;\n}\n\nexport async function runTestRunsLogs(\n runId: string,\n options: TestRunsLogsCommandOptions,\n global: GlobalOptions,\n): Promise<{\n run: unknown;\n stream: BackgroundLogStream;\n tail: number;\n stdout: string[];\n stderr: string[];\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const stream = normalizeStream(options.stream);\n const tail = parseLimit(options.tail, \"tail\");\n const logs = await readBackgroundTestRunLogs(pmRoot, runId, stream, tail);\n return {\n run: logs.run,\n stream: logs.stream,\n tail: logs.tail,\n stdout: logs.stdout,\n stderr: logs.stderr,\n };\n}\n\nexport interface TestRunsStopCommandOptions {\n force?: boolean;\n}\n\nexport async function runTestRunsStop(\n runId: string,\n options: TestRunsStopCommandOptions,\n global: GlobalOptions,\n): Promise<{\n run: unknown;\n signal_sent: \"SIGTERM\" | \"SIGKILL\" | \"none\";\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const stopped = await stopBackgroundTestRun(pmRoot, runId, options.force === true);\n return {\n run: stopped.run,\n signal_sent: stopped.signal_sent,\n };\n}\n\nexport interface TestRunsResumeCommandOptions {\n author?: string;\n noExtensions?: boolean;\n}\n\nexport async function runTestRunsResume(\n runId: string,\n options: TestRunsResumeCommandOptions,\n global: GlobalOptions,\n): Promise<{\n resumed_from: string;\n run: unknown;\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const settings = await readSettings(pmRoot);\n const requestedBy = resolveRequestedBy(options.author, settings.author_default);\n const resumed = await resumeBackgroundTestRun(pmRoot, runId, requestedBy, options.noExtensions === true);\n return {\n resumed_from: runId,\n run: resumed,\n };\n}\n\nexport async function runTestRunsWorker(runId: string, global: GlobalOptions): Promise<{\n id: string;\n status: BackgroundTestRunStatus;\n exit_code?: number;\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const finished = await runBackgroundTestRunWorker(pmRoot, runId, global.noExtensions === true);\n return {\n id: finished.id,\n status: finished.status,\n exit_code: finished.exit_code,\n };\n}\n", "import fs from \"node:fs/promises\";\nimport { spawn } from \"node:child_process\";\nimport { createHash, randomBytes } from \"node:crypto\";\nimport path from \"node:path\";\nimport { ensureDir, pathExists, readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport {\n getTestRunRecordPath,\n getTestRunResultPath,\n getTestRunStderrPath,\n getTestRunStdoutPath,\n getTestRunsPath,\n getTestRunsRecordsPath,\n getTestRunsResultsPath,\n getTestRunsStderrPath,\n getTestRunsStdoutPath,\n} from \"../store/paths.js\";\n\nconst BACKGROUND_RUN_ACTIVE_STATUSES = new Set<BackgroundTestRunStatus>([\"queued\", \"running\"]);\nconst BACKGROUND_RUN_TERMINAL_STATUSES = new Set<BackgroundTestRunStatus>([\"passed\", \"failed\", \"stopped\", \"canceled\"]);\nconst DEFAULT_BACKGROUND_RUN_RESOURCE_SNAPSHOT_INTERVAL_MS = 3000;\nconst DEFAULT_BACKGROUND_RUN_FORCE_KILL_DELAY_MS = 3000;\nconst DEFAULT_BACKGROUND_RUN_HEARTBEAT_STALE_MS = 30000;\nconst DEFAULT_BACKGROUND_RUN_LOG_TAIL_LINES = 100;\nconst PROC_STAT_TICKS_PER_SECOND = 100;\n\nexport type BackgroundTestRunKind = \"test\" | \"test-all\";\n\nexport type BackgroundTestRunStatus = \"queued\" | \"running\" | \"passed\" | \"failed\" | \"stopped\" | \"canceled\";\n\nexport type BackgroundLogStream = \"stdout\" | \"stderr\" | \"both\";\n\nexport interface BackgroundRunProgress {\n phase: \"queued\" | \"running\" | \"stopping\" | \"finished\";\n message?: string;\n linked_test_index?: number;\n linked_test_total?: number;\n elapsed_ms?: number;\n heartbeat_at?: string;\n}\n\nexport interface BackgroundRunResourceSnapshot {\n recorded_at: string;\n rss_bytes?: number;\n cpu_user_seconds?: number;\n cpu_system_seconds?: number;\n uptime_seconds?: number;\n}\n\nexport interface BackgroundRunSummary {\n items?: number;\n linked_tests?: number;\n passed: number;\n failed: number;\n skipped: number;\n fail_on_skipped_triggered?: boolean;\n}\n\nexport interface BackgroundTestRunRecord {\n id: string;\n kind: BackgroundTestRunKind;\n status: BackgroundTestRunStatus;\n created_at: string;\n started_at?: string;\n finished_at?: string;\n updated_at: string;\n requested_by: string;\n fingerprint: string;\n command_args: string[];\n command_label: string;\n pm_root: string;\n global_pm_root: string;\n target_id?: string;\n status_filter?: string;\n attempt: number;\n resumed_from?: string;\n resumed_by?: string;\n worker_pid?: number;\n child_pid?: number;\n exit_code?: number;\n signal?: string;\n stdout_path: string;\n stderr_path: string;\n result_path: string;\n progress?: BackgroundRunProgress;\n resource?: BackgroundRunResourceSnapshot;\n summary?: BackgroundRunSummary;\n stop_requested_at?: string;\n duplicate_of?: string;\n error?: string;\n}\n\nexport interface StartBackgroundTestRunOptions {\n pmRoot: string;\n globalPmRoot: string;\n kind: BackgroundTestRunKind;\n commandArgs: string[];\n requestedBy: string;\n targetId?: string;\n statusFilter?: string;\n resumedFrom?: string;\n resumedBy?: string;\n attempt?: number;\n}\n\nexport interface StartBackgroundTestRunResult {\n started: boolean;\n run: BackgroundTestRunRecord;\n duplicate_of?: string;\n}\n\nexport interface SpawnBackgroundTestRunWorkerOptions {\n pmRoot: string;\n runId: string;\n noExtensions?: boolean;\n}\n\nexport interface StopBackgroundTestRunResult {\n run: BackgroundTestRunRecord;\n signal_sent: \"SIGTERM\" | \"SIGKILL\" | \"none\";\n}\n\nexport interface ListBackgroundTestRunOptions {\n status?: BackgroundTestRunStatus;\n limit?: number;\n}\n\nexport interface BackgroundRunHealth {\n state: \"healthy\" | \"stale\" | \"inactive\";\n last_heartbeat_at?: string;\n heartbeat_lag_ms?: number;\n worker_alive: boolean;\n child_alive: boolean;\n}\n\nexport interface BackgroundRunStatusView {\n run: BackgroundTestRunRecord;\n health: BackgroundRunHealth;\n}\n\nexport interface BackgroundRunLogsResult {\n run: BackgroundTestRunRecord;\n stream: BackgroundLogStream;\n tail: number;\n stdout: string[];\n stderr: string[];\n}\n\ninterface WorkerEvaluationResult {\n summary: BackgroundRunSummary;\n parsedResult: unknown | null;\n}\n\nfunction nowMs(): number {\n return Date.now();\n}\n\nfunction normalizeCommandArgs(args: string[]): string[] {\n return args.map((entry) => entry.trim()).filter((entry) => entry.length > 0);\n}\n\nfunction summarizeCommandLabel(args: string[]): string {\n const joined = args.join(\" \").replaceAll(/\\s+/g, \" \").trim();\n if (joined.length <= 180) {\n return joined;\n }\n return `${joined.slice(0, 177)}...`;\n}\n\nfunction buildRunId(): string {\n const timePart = Date.now().toString(36);\n const randomPart = randomBytes(3).toString(\"hex\");\n return `tr-${timePart}-${randomPart}`;\n}\n\nexport function buildBackgroundTestRunFingerprint(kind: BackgroundTestRunKind, commandArgs: string[], pmRoot: string): string {\n const payload = {\n kind,\n command: normalizeCommandArgs(commandArgs),\n pm_root: path.resolve(pmRoot),\n };\n return createHash(\"sha256\").update(JSON.stringify(payload)).digest(\"hex\");\n}\n\nfunction isPidRunning(pid: number | undefined): boolean {\n if (!Number.isInteger(pid) || !pid || pid <= 0) {\n return false;\n }\n try {\n process.kill(pid, 0);\n return true;\n } catch (error: unknown) {\n const code = typeof error === \"object\" && error !== null && \"code\" in error ? (error as { code?: string }).code : undefined;\n return code === \"EPERM\";\n }\n}\n\nasync function ensureBackgroundRunStorage(pmRoot: string): Promise<void> {\n await ensureDir(getTestRunsPath(pmRoot));\n await ensureDir(getTestRunsRecordsPath(pmRoot));\n await ensureDir(getTestRunsStdoutPath(pmRoot));\n await ensureDir(getTestRunsStderrPath(pmRoot));\n await ensureDir(getTestRunsResultsPath(pmRoot));\n}\n\nasync function parseBackgroundRunRecord(raw: string, recordPath: string): Promise<BackgroundTestRunRecord> {\n try {\n const parsed = JSON.parse(raw) as BackgroundTestRunRecord;\n if (!parsed || typeof parsed !== \"object\" || typeof parsed.id !== \"string\") {\n throw new Error(\"invalid run record payload\");\n }\n return parsed;\n } catch (error: unknown) {\n throw new PmCliError(\n `Failed to parse background test run record at ${recordPath}: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n}\n\nasync function writeBackgroundRunRecord(pmRoot: string, record: BackgroundTestRunRecord): Promise<void> {\n const next: BackgroundTestRunRecord = {\n ...record,\n updated_at: nowIso(),\n };\n await writeFileAtomic(getTestRunRecordPath(pmRoot, record.id), `${JSON.stringify(next, null, 2)}\\n`);\n}\n\nexport async function readBackgroundTestRunRecord(pmRoot: string, runId: string): Promise<BackgroundTestRunRecord | null> {\n const recordPath = getTestRunRecordPath(pmRoot, runId);\n const raw = await readFileIfExists(recordPath);\n if (!raw) {\n return null;\n }\n return parseBackgroundRunRecord(raw, recordPath);\n}\n\nasync function listBackgroundRunRecordPaths(pmRoot: string): Promise<string[]> {\n const recordsRoot = getTestRunsRecordsPath(pmRoot);\n if (!(await pathExists(recordsRoot))) {\n return [];\n }\n const entries = await fs.readdir(recordsRoot, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".json\"))\n .map((entry) => path.join(recordsRoot, entry.name))\n .sort((left, right) => right.localeCompare(left));\n}\n\nfunction parseLinuxRssStatus(raw: string): number | undefined {\n const match = raw.match(/^VmRSS:\\s+(\\d+)\\s+kB$/m);\n if (!match) {\n return undefined;\n }\n return Number.parseInt(match[1], 10) * 1024;\n}\n\nasync function readLinuxRssBytes(pid: number): Promise<number | undefined> {\n if (process.platform !== \"linux\") {\n return undefined;\n }\n try {\n const raw = await fs.readFile(`/proc/${pid}/status`, \"utf8\");\n return parseLinuxRssStatus(raw);\n } catch {\n return undefined;\n }\n}\n\nfunction parseLinuxCpuStat(raw: string): { cpu_user_seconds?: number; cpu_system_seconds?: number } {\n const closeParenIndex = raw.lastIndexOf(\")\");\n if (closeParenIndex < 0) {\n return {};\n }\n const remainder = raw.slice(closeParenIndex + 2).trim();\n const parts = remainder.split(/\\s+/);\n const utimeTicks = Number.parseInt(parts[11], 10);\n const stimeTicks = Number.parseInt(parts[12], 10);\n if (!Number.isFinite(utimeTicks) || !Number.isFinite(stimeTicks)) {\n return {};\n }\n return {\n cpu_user_seconds: utimeTicks / PROC_STAT_TICKS_PER_SECOND,\n cpu_system_seconds: stimeTicks / PROC_STAT_TICKS_PER_SECOND,\n };\n}\n\nasync function readLinuxCpuSeconds(\n pid: number,\n): Promise<{ cpu_user_seconds?: number; cpu_system_seconds?: number }> {\n if (process.platform !== \"linux\") {\n return {};\n }\n try {\n const raw = await fs.readFile(`/proc/${pid}/stat`, \"utf8\");\n return parseLinuxCpuStat(raw);\n } catch {\n return {};\n }\n}\n\nasync function buildResourceSnapshot(record: BackgroundTestRunRecord): Promise<BackgroundRunResourceSnapshot | undefined> {\n const pid = record.child_pid ?? record.worker_pid;\n if (!isPidRunning(pid)) {\n return undefined;\n }\n const rssBytes = await readLinuxRssBytes(pid as number);\n const cpu = await readLinuxCpuSeconds(pid as number);\n const startedAtMs = record.started_at ? Date.parse(record.started_at) : Number.NaN;\n const uptimeSeconds = Number.isFinite(startedAtMs) ? Math.max(0, (nowMs() - startedAtMs) / 1000) : undefined;\n return {\n recorded_at: nowIso(),\n rss_bytes: rssBytes,\n cpu_user_seconds: cpu.cpu_user_seconds,\n cpu_system_seconds: cpu.cpu_system_seconds,\n uptime_seconds: uptimeSeconds,\n };\n}\n\nfunction readCount(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\nfunction evaluateWorkerResult(kind: BackgroundTestRunKind, payload: unknown): WorkerEvaluationResult {\n if (!payload || typeof payload !== \"object\") {\n return {\n summary: {\n passed: 0,\n failed: 1,\n skipped: 0,\n },\n parsedResult: null,\n };\n }\n const record = payload as Record<string, unknown>;\n if (kind === \"test-all\") {\n const totals = (record.totals ?? {}) as Record<string, unknown>;\n return {\n summary: {\n items: typeof totals.items === \"number\" ? totals.items : undefined,\n linked_tests: typeof totals.linked_tests === \"number\" ? totals.linked_tests : undefined,\n passed: readCount(totals.passed),\n failed: readCount(totals.failed),\n skipped: readCount(totals.skipped),\n fail_on_skipped_triggered: record.fail_on_skipped_triggered === true ? true : undefined,\n },\n parsedResult: payload,\n };\n }\n const runResults = Array.isArray(record.run_results) ? record.run_results : [];\n let passed = 0;\n let failed = 0;\n let skipped = 0;\n for (const entry of runResults) {\n if (!entry || typeof entry !== \"object\") {\n continue;\n }\n const status = (entry as { status?: unknown }).status;\n if (status === \"passed\") {\n passed += 1;\n continue;\n }\n if (status === \"failed\") {\n failed += 1;\n continue;\n }\n skipped += 1;\n }\n return {\n summary: {\n passed,\n failed,\n skipped,\n fail_on_skipped_triggered: record.fail_on_skipped_triggered === true ? true : undefined,\n },\n parsedResult: payload,\n };\n}\n\nfunction parseProgressLine(stderrLine: string): Partial<BackgroundRunProgress> | null {\n const line = stderrLine.trim();\n if (line.length === 0) {\n return null;\n }\n const match = line.match(/\\[pm test\\]\\s+linked-test\\s+(\\d+)\\/(\\d+)\\s+(start|running|end)(?:.*elapsed_ms=(\\d+))?/i);\n if (!match) {\n return null;\n }\n const index = Number.parseInt(match[1], 10);\n const total = Number.parseInt(match[2], 10);\n const elapsed = match[4] ? Number.parseInt(match[4], 10) : undefined;\n return {\n linked_test_index: index,\n linked_test_total: total,\n elapsed_ms: Number.isFinite(elapsed) ? elapsed : undefined,\n heartbeat_at: nowIso(),\n phase: match[3]?.toLowerCase() === \"end\" ? \"finished\" : \"running\",\n };\n}\n\nfunction splitLines(value: string): string[] {\n return value\n .split(/\\r?\\n/)\n .map((entry) => entry.trimEnd())\n .filter((entry) => entry.length > 0);\n}\n\nfunction tailLines(value: string, limit: number): string[] {\n if (limit <= 0) {\n return [];\n }\n const lines = splitLines(value);\n if (lines.length <= limit) {\n return lines;\n }\n return lines.slice(lines.length - limit);\n}\n\nasync function resolveBackgroundCliEntry(cwd: string): Promise<string> {\n const configured = process.env.PM_BACKGROUND_CLI_ENTRY?.trim();\n if (configured && configured.length > 0) {\n const resolvedConfigured = path.resolve(cwd, configured);\n if (await pathExists(resolvedConfigured)) {\n return resolvedConfigured;\n }\n }\n const distEntry = path.resolve(cwd, \"dist\", \"cli.js\");\n if (await pathExists(distEntry)) {\n return distEntry;\n }\n const argvEntry = process.argv[1]?.trim();\n if (argvEntry && argvEntry.length > 0) {\n const resolvedArgvEntry = path.resolve(cwd, argvEntry);\n if (await pathExists(resolvedArgvEntry)) {\n return resolvedArgvEntry;\n }\n }\n throw new PmCliError(\n \"Unable to resolve a CLI entrypoint for background test runs. Build the project or set PM_BACKGROUND_CLI_ENTRY.\",\n EXIT_CODE.GENERIC_FAILURE,\n );\n}\n\nasync function refreshRunIfStale(pmRoot: string, record: BackgroundTestRunRecord): Promise<BackgroundTestRunRecord> {\n if (!BACKGROUND_RUN_ACTIVE_STATUSES.has(record.status)) {\n return record;\n }\n const workerAlive = isPidRunning(record.worker_pid);\n if (workerAlive) {\n return record;\n }\n if (record.finished_at) {\n return record;\n }\n const next: BackgroundTestRunRecord = {\n ...record,\n status: \"failed\",\n finished_at: nowIso(),\n error: record.error ?? \"Background test run worker exited before writing terminal status.\",\n };\n await writeBackgroundRunRecord(pmRoot, next);\n return next;\n}\n\nexport async function startBackgroundTestRun(options: StartBackgroundTestRunOptions): Promise<StartBackgroundTestRunResult> {\n await ensureBackgroundRunStorage(options.pmRoot);\n const normalizedArgs = normalizeCommandArgs(options.commandArgs);\n if (normalizedArgs.length === 0) {\n throw new PmCliError(\"Background test run requires command arguments.\", EXIT_CODE.USAGE);\n }\n const fingerprint = buildBackgroundTestRunFingerprint(options.kind, normalizedArgs, options.pmRoot);\n const existingRuns = await listBackgroundTestRuns(options.pmRoot, {});\n for (const existing of existingRuns) {\n const refreshed = await refreshRunIfStale(options.pmRoot, existing);\n if (refreshed.fingerprint !== fingerprint) {\n continue;\n }\n if (!BACKGROUND_RUN_ACTIVE_STATUSES.has(refreshed.status) || !isPidRunning(refreshed.worker_pid)) {\n continue;\n }\n return {\n started: false,\n run: {\n ...refreshed,\n duplicate_of: refreshed.id,\n },\n duplicate_of: refreshed.id,\n };\n }\n\n const runId = buildRunId();\n const createdAt = nowIso();\n const stdoutPath = getTestRunStdoutPath(options.pmRoot, runId);\n const stderrPath = getTestRunStderrPath(options.pmRoot, runId);\n const resultPath = getTestRunResultPath(options.pmRoot, runId);\n await fs.writeFile(stdoutPath, \"\", \"utf8\");\n await fs.writeFile(stderrPath, \"\", \"utf8\");\n const record: BackgroundTestRunRecord = {\n id: runId,\n kind: options.kind,\n status: \"queued\",\n created_at: createdAt,\n updated_at: createdAt,\n requested_by: options.requestedBy,\n fingerprint,\n command_args: normalizedArgs,\n command_label: summarizeCommandLabel(normalizedArgs),\n pm_root: options.pmRoot,\n global_pm_root: options.globalPmRoot,\n target_id: options.targetId,\n status_filter: options.statusFilter,\n attempt: typeof options.attempt === \"number\" && Number.isFinite(options.attempt) && options.attempt >= 1\n ? Math.floor(options.attempt)\n : 1,\n resumed_from: options.resumedFrom,\n resumed_by: options.resumedBy,\n stdout_path: stdoutPath,\n stderr_path: stderrPath,\n result_path: resultPath,\n progress: {\n phase: \"queued\",\n message: \"Queued for background execution.\",\n heartbeat_at: createdAt,\n },\n };\n await writeBackgroundRunRecord(options.pmRoot, record);\n return {\n started: true,\n run: record,\n };\n}\n\nexport async function spawnBackgroundTestRunWorker(options: SpawnBackgroundTestRunWorkerOptions): Promise<BackgroundTestRunRecord> {\n const record = await readBackgroundTestRunRecord(options.pmRoot, options.runId);\n if (!record) {\n throw new PmCliError(`Background test run ${options.runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n if (BACKGROUND_RUN_TERMINAL_STATUSES.has(record.status)) {\n throw new PmCliError(`Background test run ${record.id} is already terminal (${record.status}).`, EXIT_CODE.CONFLICT);\n }\n const cliEntry = await resolveBackgroundCliEntry(process.cwd());\n const args: string[] = [];\n if (options.noExtensions === true) {\n args.push(\"--no-extensions\");\n }\n args.push(\"--path\", record.pm_root, \"test-runs-worker\", record.id);\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n PM_PATH: record.pm_root,\n PM_GLOBAL_PATH: record.global_pm_root,\n PM_BACKGROUND_TEST_RUN_ID: record.id,\n PM_BACKGROUND_TEST_RUN_ATTEMPT: String(record.attempt),\n PM_BACKGROUND_TEST_RUN_RESUMED_FROM: record.resumed_from ?? \"\",\n FORCE_COLOR: \"0\",\n };\n const child = spawn(process.execPath, [cliEntry, ...args], {\n cwd: process.cwd(),\n env,\n detached: true,\n stdio: \"ignore\",\n windowsHide: true,\n });\n child.unref();\n const next: BackgroundTestRunRecord = {\n ...record,\n status: \"queued\",\n worker_pid: child.pid as number | undefined,\n progress: {\n phase: \"queued\",\n message: \"Worker process started.\",\n heartbeat_at: nowIso(),\n },\n };\n await writeBackgroundRunRecord(options.pmRoot, next);\n return next;\n}\n\nasync function appendFileOrdered(queue: Promise<void>, filePath: string, text: string): Promise<void> {\n await queue;\n await fs.appendFile(filePath, text, \"utf8\");\n}\n\nexport async function runBackgroundTestRunWorker(pmRoot: string, runId: string, noExtensions = false): Promise<BackgroundTestRunRecord> {\n const loaded = await readBackgroundTestRunRecord(pmRoot, runId);\n if (!loaded) {\n throw new PmCliError(`Background test run ${runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const record: BackgroundTestRunRecord = {\n ...loaded,\n status: \"running\",\n started_at: loaded.started_at ?? nowIso(),\n worker_pid: process.pid,\n progress: {\n phase: \"running\",\n message: \"Worker started.\",\n heartbeat_at: nowIso(),\n },\n };\n const cliEntry = await resolveBackgroundCliEntry(process.cwd());\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n PM_PATH: record.pm_root,\n PM_GLOBAL_PATH: record.global_pm_root,\n FORCE_COLOR: \"0\",\n };\n await writeBackgroundRunRecord(pmRoot, record);\n\n const childArgs = noExtensions ? [\"--no-extensions\", ...record.command_args] : [...record.command_args];\n const child = spawn(process.execPath, [cliEntry, ...childArgs], {\n cwd: process.cwd(),\n env,\n detached: false,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n windowsHide: true,\n });\n record.child_pid = child.pid as number | undefined;\n\n let writeQueue: Promise<void> = Promise.resolve();\n const scheduleRecordWrite = (): void => {\n writeQueue = writeQueue.then(async () => {\n try {\n await writeBackgroundRunRecord(pmRoot, record);\n } catch {\n // Keep worker alive even if a single metadata write fails.\n }\n });\n };\n\n let stdoutWriteQueue: Promise<void> = Promise.resolve();\n let stderrWriteQueue: Promise<void> = Promise.resolve();\n let stdoutBuffer = \"\";\n let stopRequested = false;\n\n const requestStop = async (): Promise<void> => {\n if (stopRequested) {\n return;\n }\n stopRequested = true;\n record.stop_requested_at = nowIso();\n record.progress = {\n ...record.progress,\n phase: \"stopping\",\n message: \"Stop requested for background run.\",\n heartbeat_at: nowIso(),\n };\n scheduleRecordWrite();\n try {\n child.kill(\"SIGTERM\");\n } catch {\n // Child may already be gone.\n }\n const forceKillDelayMs = Number.parseInt(process.env.PM_BACKGROUND_RUN_FORCE_KILL_DELAY_MS ?? \"\", 10);\n const delay = Number.isFinite(forceKillDelayMs) && forceKillDelayMs > 0\n ? forceKillDelayMs\n : DEFAULT_BACKGROUND_RUN_FORCE_KILL_DELAY_MS;\n const forceTimer = setTimeout(() => {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // Child may already be gone.\n }\n }, delay);\n forceTimer.unref?.();\n };\n\n const onSignal = (): void => {\n void requestStop();\n };\n process.on(\"SIGTERM\", onSignal);\n process.on(\"SIGINT\", onSignal);\n\n const resourceIntervalMs = Number.parseInt(process.env.PM_BACKGROUND_RUN_RESOURCE_INTERVAL_MS ?? \"\", 10);\n const resourceInterval = Number.isFinite(resourceIntervalMs) && resourceIntervalMs > 0\n ? resourceIntervalMs\n : DEFAULT_BACKGROUND_RUN_RESOURCE_SNAPSHOT_INTERVAL_MS;\n const resourceTimer = setInterval(() => {\n void (async () => {\n record.resource = await buildResourceSnapshot(record);\n (record.progress as BackgroundRunProgress).heartbeat_at = nowIso();\n scheduleRecordWrite();\n })();\n }, resourceInterval);\n resourceTimer.unref?.();\n\n child.stdout?.on(\"data\", (chunk) => {\n const text = chunk.toString(\"utf8\");\n stdoutBuffer += text;\n stdoutWriteQueue = appendFileOrdered(stdoutWriteQueue, record.stdout_path, text);\n });\n child.stderr?.on(\"data\", (chunk) => {\n const text = chunk.toString(\"utf8\");\n stderrWriteQueue = appendFileOrdered(stderrWriteQueue, record.stderr_path, text);\n const lines = splitLines(text);\n const latestLine = lines.at(-1);\n if (!latestLine) {\n return;\n }\n const progressPatch = parseProgressLine(latestLine);\n record.progress = {\n phase: (record.progress as BackgroundRunProgress).phase === \"stopping\" ? \"stopping\" : \"running\",\n message: latestLine,\n heartbeat_at: nowIso(),\n linked_test_index: progressPatch?.linked_test_index ?? record.progress?.linked_test_index ?? undefined,\n linked_test_total: progressPatch?.linked_test_total ?? record.progress?.linked_test_total ?? undefined,\n elapsed_ms: progressPatch?.elapsed_ms ?? record.progress?.elapsed_ms ?? undefined,\n };\n if (progressPatch?.phase === \"finished\" && !stopRequested) {\n record.progress.phase = \"running\";\n }\n scheduleRecordWrite();\n });\n\n let exitCode: number | null = null;\n let signal: NodeJS.Signals | null = null;\n try {\n ({ code: exitCode, signal } = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>((resolve) => {\n child.on(\"close\", (code, closeSignal) => {\n resolve({ code, signal: closeSignal });\n });\n }));\n } finally {\n clearInterval(resourceTimer);\n process.off(\"SIGTERM\", onSignal);\n process.off(\"SIGINT\", onSignal);\n }\n\n await stdoutWriteQueue;\n await stderrWriteQueue;\n\n let parsedResult: unknown | null = null;\n if (stdoutBuffer.trim().length > 0) {\n try {\n parsedResult = JSON.parse(stdoutBuffer);\n } catch {\n parsedResult = null;\n }\n }\n const evaluated = evaluateWorkerResult(record.kind, parsedResult);\n record.summary = evaluated.summary;\n record.exit_code = typeof exitCode === \"number\" ? exitCode : undefined;\n record.signal = signal ?? undefined;\n record.finished_at = nowIso();\n record.status = stopRequested\n ? \"stopped\"\n : (record.exit_code === 0 &&\n (record.summary.failed ?? 0) === 0 &&\n record.summary.fail_on_skipped_triggered !== true)\n ? \"passed\"\n : \"failed\";\n record.progress = {\n phase: \"finished\",\n message: stopRequested ? \"Background run stopped.\" : `Background run finished with status=${record.status}.`,\n heartbeat_at: nowIso(),\n linked_test_index: record.progress?.linked_test_index,\n linked_test_total: record.progress?.linked_test_total,\n elapsed_ms: record.progress?.elapsed_ms,\n };\n record.resource = await buildResourceSnapshot(record);\n if (parsedResult !== null) {\n await writeFileAtomic(record.result_path, `${JSON.stringify(parsedResult, null, 2)}\\n`);\n } else {\n await writeFileAtomic(\n record.result_path,\n `${JSON.stringify(\n {\n parse_error: \"Background run output was not valid JSON.\",\n stdout_excerpt: tailLines(stdoutBuffer, DEFAULT_BACKGROUND_RUN_LOG_TAIL_LINES),\n },\n null,\n 2,\n )}\\n`,\n );\n }\n await writeBackgroundRunRecord(pmRoot, record);\n await writeQueue;\n return record;\n}\n\nexport async function listBackgroundTestRuns(\n pmRoot: string,\n options: ListBackgroundTestRunOptions,\n): Promise<BackgroundTestRunRecord[]> {\n const recordPaths = await listBackgroundRunRecordPaths(pmRoot);\n const runs: BackgroundTestRunRecord[] = [];\n for (const recordPath of recordPaths) {\n const raw = await readFileIfExists(recordPath);\n if (!raw) {\n continue;\n }\n const parsed = await parseBackgroundRunRecord(raw, recordPath);\n runs.push(parsed);\n }\n const refreshed: BackgroundTestRunRecord[] = [];\n for (const run of runs) {\n refreshed.push(await refreshRunIfStale(pmRoot, run));\n }\n const filtered = options.status ? refreshed.filter((entry) => entry.status === options.status) : refreshed;\n const sorted = filtered.sort((left, right) => {\n const byUpdated = Date.parse(right.updated_at) - Date.parse(left.updated_at);\n if (Number.isFinite(byUpdated) && byUpdated !== 0) {\n return byUpdated;\n }\n return right.id.localeCompare(left.id);\n });\n const limit = typeof options.limit === \"number\" && options.limit >= 0 ? options.limit : undefined;\n return limit === undefined ? sorted : sorted.slice(0, limit);\n}\n\nexport async function getBackgroundTestRunStatus(pmRoot: string, runId: string): Promise<BackgroundRunStatusView> {\n const loaded = await readBackgroundTestRunRecord(pmRoot, runId);\n if (!loaded) {\n throw new PmCliError(`Background test run ${runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const refreshed = await refreshRunIfStale(pmRoot, loaded);\n const workerAlive = isPidRunning(refreshed.worker_pid);\n const childAlive = isPidRunning(refreshed.child_pid);\n if (refreshed.status === \"running\" && !childAlive && !refreshed.finished_at && !workerAlive) {\n refreshed.status = \"failed\";\n refreshed.finished_at = nowIso();\n refreshed.error = refreshed.error ?? \"Background run process exited unexpectedly.\";\n await writeBackgroundRunRecord(pmRoot, refreshed);\n }\n if (refreshed.status === \"running\") {\n refreshed.resource = await buildResourceSnapshot(refreshed);\n await writeBackgroundRunRecord(pmRoot, refreshed);\n }\n const heartbeatAt = refreshed.progress?.heartbeat_at;\n const heartbeatAtMs = heartbeatAt ? Date.parse(heartbeatAt) : Number.NaN;\n const lagMs = Number.isFinite(heartbeatAtMs) ? Math.max(0, nowMs() - heartbeatAtMs) : undefined;\n const staleMs = Number.parseInt(process.env.PM_BACKGROUND_RUN_HEARTBEAT_STALE_MS ?? \"\", 10);\n const staleThresholdMs = Number.isFinite(staleMs) && staleMs > 0 ? staleMs : DEFAULT_BACKGROUND_RUN_HEARTBEAT_STALE_MS;\n const healthState = refreshed.status === \"running\"\n ? lagMs !== undefined && lagMs > staleThresholdMs\n ? \"stale\"\n : \"healthy\"\n : \"inactive\";\n return {\n run: refreshed,\n health: {\n state: healthState,\n last_heartbeat_at: heartbeatAt,\n heartbeat_lag_ms: lagMs,\n worker_alive: workerAlive,\n child_alive: childAlive,\n },\n };\n}\n\nexport async function stopBackgroundTestRun(pmRoot: string, runId: string, force = false): Promise<StopBackgroundTestRunResult> {\n const loaded = await readBackgroundTestRunRecord(pmRoot, runId);\n if (!loaded) {\n throw new PmCliError(`Background test run ${runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const refreshed = await refreshRunIfStale(pmRoot, loaded);\n if (BACKGROUND_RUN_TERMINAL_STATUSES.has(refreshed.status)) {\n return {\n run: refreshed,\n signal_sent: \"none\",\n };\n }\n let signalSent: \"SIGTERM\" | \"SIGKILL\" | \"none\" = \"none\";\n const signal: NodeJS.Signals = force ? \"SIGKILL\" : \"SIGTERM\";\n if (isPidRunning(refreshed.worker_pid) && refreshed.worker_pid) {\n try {\n process.kill(refreshed.worker_pid, signal);\n signalSent = signal;\n } catch {\n signalSent = \"none\";\n }\n }\n if (signalSent === \"none\") {\n refreshed.status = \"stopped\";\n refreshed.finished_at = refreshed.finished_at ?? nowIso();\n }\n refreshed.stop_requested_at = nowIso();\n refreshed.progress = {\n phase: \"stopping\",\n message: signalSent === \"none\" ? \"Run marked stopped.\" : `Stop requested via ${signalSent}.`,\n heartbeat_at: nowIso(),\n linked_test_index: refreshed.progress?.linked_test_index,\n linked_test_total: refreshed.progress?.linked_test_total,\n elapsed_ms: refreshed.progress?.elapsed_ms,\n };\n await writeBackgroundRunRecord(pmRoot, refreshed);\n return {\n run: refreshed,\n signal_sent: signalSent,\n };\n}\n\nexport async function resumeBackgroundTestRun(\n pmRoot: string,\n runId: string,\n requestedBy: string,\n noExtensions = false,\n): Promise<BackgroundTestRunRecord> {\n const loaded = await readBackgroundTestRunRecord(pmRoot, runId);\n if (!loaded) {\n throw new PmCliError(`Background test run ${runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const refreshed = await refreshRunIfStale(pmRoot, loaded);\n if (!BACKGROUND_RUN_TERMINAL_STATUSES.has(refreshed.status)) {\n throw new PmCliError(`Background test run ${runId} is not terminal and cannot be resumed.`, EXIT_CODE.CONFLICT);\n }\n const started = await startBackgroundTestRun({\n pmRoot: refreshed.pm_root,\n globalPmRoot: refreshed.global_pm_root,\n kind: refreshed.kind,\n commandArgs: refreshed.command_args,\n requestedBy,\n targetId: refreshed.target_id,\n statusFilter: refreshed.status_filter,\n resumedFrom: refreshed.id,\n resumedBy: requestedBy,\n attempt: refreshed.attempt + 1,\n });\n if (!started.started) {\n return started.run;\n }\n const spawned = await spawnBackgroundTestRunWorker({\n pmRoot,\n runId: started.run.id,\n noExtensions,\n });\n const prior: BackgroundTestRunRecord = {\n ...refreshed,\n resumed_by: spawned.id,\n };\n await writeBackgroundRunRecord(pmRoot, prior);\n return spawned;\n}\n\nexport async function readBackgroundTestRunLogs(\n pmRoot: string,\n runId: string,\n stream: BackgroundLogStream,\n tail: number | undefined,\n): Promise<BackgroundRunLogsResult> {\n const loaded = await readBackgroundTestRunRecord(pmRoot, runId);\n if (!loaded) {\n throw new PmCliError(`Background test run ${runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const resolvedTail = typeof tail === \"number\" && Number.isFinite(tail) && tail >= 0 ? Math.floor(tail) : DEFAULT_BACKGROUND_RUN_LOG_TAIL_LINES;\n const stdoutRaw = stream === \"stdout\" || stream === \"both\" ? (await readFileIfExists(loaded.stdout_path)) ?? \"\" : \"\";\n const stderrRaw = stream === \"stderr\" || stream === \"both\" ? (await readFileIfExists(loaded.stderr_path)) ?? \"\" : \"\";\n return {\n run: loaded,\n stream,\n tail: resolvedTail,\n stdout: stream === \"stdout\" || stream === \"both\" ? tailLines(stdoutRaw, resolvedTail) : [],\n stderr: stream === \"stderr\" || stream === \"both\" ? tailLines(stderrRaw, resolvedTail) : [],\n };\n}\n\nexport const _testOnly = {\n buildResourceSnapshot,\n evaluateWorkerResult,\n isPidRunning,\n parseLinuxCpuStat,\n parseLinuxRssStatus,\n parseProgressLine,\n readLinuxCpuSeconds,\n readLinuxRssBytes,\n refreshRunIfStale,\n splitLines,\n tailLines,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["global"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
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]="45eac7fa-f181-5cca-93b7-cfb58909dbb3")}catch(e){}}();
|
|
3
|
+
import {
|
|
4
|
+
_testOnlyUpdateCommand,
|
|
5
|
+
runUpdate
|
|
6
|
+
} from "./chunk-PZD7WPUC.js";
|
|
7
|
+
import "./chunk-II7OGE3V.js";
|
|
8
|
+
import "./chunk-SY4GKIWT.js";
|
|
9
|
+
import "./chunk-ILHLIA47.js";
|
|
10
|
+
import "./chunk-ASM4DVRW.js";
|
|
11
|
+
import "./chunk-F7WSO5UX.js";
|
|
12
|
+
import "./chunk-YGRPBFMA.js";
|
|
13
|
+
import "./chunk-Z3MUNQRV.js";
|
|
14
|
+
import "./chunk-NCIBNERT.js";
|
|
15
|
+
import "./chunk-LXYVKYMQ.js";
|
|
16
|
+
import "./chunk-7K2MXFMX.js";
|
|
17
|
+
import "./chunk-2JEGCDYT.js";
|
|
18
|
+
import "./chunk-GAVE4MYM.js";
|
|
19
|
+
import "./chunk-ZONXMSVB.js";
|
|
20
|
+
import "./chunk-G2YVUY7I.js";
|
|
21
|
+
import "./chunk-KTVETP66.js";
|
|
22
|
+
export {
|
|
23
|
+
_testOnlyUpdateCommand,
|
|
24
|
+
runUpdate
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=update-MPGM6SBE.js.map
|
|
27
|
+
|
|
28
|
+
//# debugId=45eac7fa-f181-5cca-93b7-cfb58909dbb3
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {
|
|
2
|
+
_testOnlyUpdateCommand,
|
|
3
|
+
runUpdate
|
|
4
|
+
} from "./chunk-G3CEIXTV.js";
|
|
5
|
+
import "./chunk-6NQXMGYU.js";
|
|
6
|
+
import "./chunk-IQVB3YDD.js";
|
|
7
|
+
import "./chunk-GQ4JKNMV.js";
|
|
8
|
+
import "./chunk-7ZGKNHUL.js";
|
|
9
|
+
import "./chunk-7L5VOUYP.js";
|
|
10
|
+
import "./chunk-M23HXJL3.js";
|
|
11
|
+
import "./chunk-4VLB4JH2.js";
|
|
12
|
+
import "./chunk-SPYPC5CB.js";
|
|
13
|
+
import "./chunk-3HUE7XOF.js";
|
|
14
|
+
import "./chunk-4KBK4BA3.js";
|
|
15
|
+
import "./chunk-WZCQVABQ.js";
|
|
16
|
+
import "./chunk-GYMG7AG6.js";
|
|
17
|
+
import "./chunk-6BV7ENQL.js";
|
|
18
|
+
import "./chunk-OY3P2I6B.js";
|
|
19
|
+
import "./chunk-LV5FFQ7M.js";
|
|
20
|
+
export {
|
|
21
|
+
_testOnlyUpdateCommand,
|
|
22
|
+
runUpdate
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=update-UN75XW3C.js.map
|
|
@@ -1,63 +1,77 @@
|
|
|
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]="c80f5c67-636a-55ff-8ed9-12a839e1be28")}catch(e){}}();
|
|
3
3
|
import {
|
|
4
4
|
runUpdate
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-PZD7WPUC.js";
|
|
6
6
|
import {
|
|
7
7
|
createCheckpointId,
|
|
8
8
|
loadMutationCheckpoint,
|
|
9
9
|
restoreCheckpointItems,
|
|
10
10
|
writeMutationCheckpoint
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-3WAULYOY.js";
|
|
12
|
+
import "./chunk-II7OGE3V.js";
|
|
13
13
|
import {
|
|
14
14
|
runRestore
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-656HPQPO.js";
|
|
16
16
|
import {
|
|
17
17
|
resolveAuthor
|
|
18
18
|
} from "./chunk-J27KIHTG.js";
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import
|
|
22
|
-
|
|
19
|
+
import "./chunk-L6FJPOT4.js";
|
|
20
|
+
import "./chunk-UUKORJSN.js";
|
|
21
|
+
import {
|
|
22
|
+
resolvePriority
|
|
23
|
+
} from "./chunk-SY4GKIWT.js";
|
|
24
|
+
import "./chunk-ILHLIA47.js";
|
|
25
|
+
import "./chunk-ASM4DVRW.js";
|
|
23
26
|
import {
|
|
24
27
|
applyTagRemovals,
|
|
25
28
|
mergeAdditiveTags,
|
|
26
29
|
parseTags
|
|
27
|
-
} from "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import
|
|
30
|
-
|
|
30
|
+
} from "./chunk-F7WSO5UX.js";
|
|
31
|
+
import "./chunk-YGRPBFMA.js";
|
|
32
|
+
import {
|
|
33
|
+
buildInvalidTypeError
|
|
34
|
+
} from "./chunk-Z3MUNQRV.js";
|
|
35
|
+
import "./chunk-NCIBNERT.js";
|
|
36
|
+
import {
|
|
37
|
+
hasListFilters
|
|
38
|
+
} from "./chunk-X3W5ESZQ.js";
|
|
31
39
|
import "./chunk-LXYVKYMQ.js";
|
|
32
40
|
import {
|
|
33
41
|
runList
|
|
34
|
-
} from "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
42
|
+
} from "./chunk-667XI4UJ.js";
|
|
43
|
+
import "./chunk-UAR2VNCK.js";
|
|
44
|
+
import "./chunk-UBMCSJXX.js";
|
|
37
45
|
import {
|
|
38
46
|
toItemRecord
|
|
39
|
-
} from "./chunk-
|
|
40
|
-
import "./chunk-
|
|
47
|
+
} from "./chunk-7K2MXFMX.js";
|
|
48
|
+
import "./chunk-2JEGCDYT.js";
|
|
41
49
|
import {
|
|
42
50
|
collectRuntimeUpdateFieldValues,
|
|
43
51
|
normalizeStatusInput
|
|
44
|
-
} from "./chunk-
|
|
45
|
-
import
|
|
52
|
+
} from "./chunk-GAVE4MYM.js";
|
|
53
|
+
import {
|
|
54
|
+
resolveItemTypeRegistry,
|
|
55
|
+
resolveTypeName
|
|
56
|
+
} from "./chunk-ZONXMSVB.js";
|
|
46
57
|
import {
|
|
47
|
-
nowIso
|
|
48
|
-
|
|
58
|
+
nowIso,
|
|
59
|
+
resolveIsoOrRelative
|
|
60
|
+
} from "./chunk-G2YVUY7I.js";
|
|
49
61
|
import {
|
|
50
62
|
EXIT_CODE,
|
|
51
63
|
PmCliError,
|
|
64
|
+
getActiveExtensionRegistrations,
|
|
52
65
|
getSettingsPath,
|
|
53
66
|
pathExists,
|
|
54
67
|
readSettings,
|
|
68
|
+
resolveItemTypesFilePath,
|
|
55
69
|
resolvePmRoot,
|
|
56
70
|
resolveRuntimeFieldRegistry,
|
|
57
71
|
resolveRuntimeStatusRegistry,
|
|
58
72
|
stableValueEquals,
|
|
59
73
|
toErrorMessage
|
|
60
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-KTVETP66.js";
|
|
61
75
|
|
|
62
76
|
// dist/cli/commands/update-many.js
|
|
63
77
|
var UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION = 1;
|
|
@@ -315,11 +329,11 @@ function collectionValueCount(field, value) {
|
|
|
315
329
|
function buildCollectionMutationPlans(row, update) {
|
|
316
330
|
const changes = [];
|
|
317
331
|
for (const definition of COLLECTION_MUTATION_PLAN_DEFINITIONS) {
|
|
318
|
-
const addValues =
|
|
332
|
+
const addValues = update[definition.addKey];
|
|
319
333
|
const removeValues = definition.removeKey ? update[definition.removeKey] : void 0;
|
|
320
334
|
const addCount = Array.isArray(addValues) ? addValues.length : 0;
|
|
321
335
|
const removeCount = Array.isArray(removeValues) ? removeValues.length : 0;
|
|
322
|
-
const clear =
|
|
336
|
+
const clear = update[definition.clearKey] === true;
|
|
323
337
|
const replace = definition.replaceKey ? update[definition.replaceKey] === true : false;
|
|
324
338
|
if (!clear && !replace && addCount === 0 && removeCount === 0) {
|
|
325
339
|
continue;
|
|
@@ -356,7 +370,7 @@ function buildTagMutationPlan(row, update) {
|
|
|
356
370
|
return void 0;
|
|
357
371
|
}
|
|
358
372
|
const existing = normalizeExistingTags(row.tags);
|
|
359
|
-
const baseTags = hasReplace ? parseTags(update.tags
|
|
373
|
+
const baseTags = hasReplace ? parseTags(update.tags) : existing;
|
|
360
374
|
const withAdditions = mergeAdditiveTags(baseTags, update.addTags);
|
|
361
375
|
const after = applyTagRemovals(withAdditions, update.removeTags).slice().sort((a, b) => a.localeCompare(b));
|
|
362
376
|
const before = existing.slice().sort((a, b) => a.localeCompare(b));
|
|
@@ -365,8 +379,8 @@ function buildTagMutationPlan(row, update) {
|
|
|
365
379
|
}
|
|
366
380
|
return { field: "tags", before: existing, after };
|
|
367
381
|
}
|
|
368
|
-
function buildPlannedItemDiff(item, update, runtimeFieldRegistry) {
|
|
369
|
-
const safeUpdate = update
|
|
382
|
+
function buildPlannedItemDiff(item, update = {}, runtimeFieldRegistry) {
|
|
383
|
+
const safeUpdate = update;
|
|
370
384
|
const row = toItemRecord(item);
|
|
371
385
|
const changes = [];
|
|
372
386
|
const tagPlan = buildTagMutationPlan(row, safeUpdate);
|
|
@@ -432,15 +446,29 @@ function normalizeStatusFilter(value, statusRegistry) {
|
|
|
432
446
|
}
|
|
433
447
|
return normalized;
|
|
434
448
|
}
|
|
435
|
-
function hasListFilters(list, status) {
|
|
436
|
-
const isActive = (value) => value != null && (typeof value !== "string" || value.split(",").some((entry) => entry.trim().length > 0));
|
|
437
|
-
return isActive(status) || isActive(list?.status) || isActive(list?.type) || isActive(list?.tag) || isActive(list?.priority) || isActive(list?.deadlineBefore) || isActive(list?.deadlineAfter) || isActive(list?.updatedAfter) || isActive(list?.updatedBefore) || isActive(list?.createdAfter) || isActive(list?.createdBefore) || isActive(list?.ids) || isActive(list?.assignee) || isActive(list?.assigneeFilter) || isActive(list?.parent) || isActive(list?.sprint) || isActive(list?.release) || isActive(list?.limit) || isActive(list?.offset);
|
|
438
|
-
}
|
|
439
449
|
function rejectBlankIdsFilter(list) {
|
|
440
450
|
if (list?.ids != null && String(list.ids).trim().length === 0) {
|
|
441
451
|
throw new PmCliError("--ids requires at least one non-empty item ID", EXIT_CODE.USAGE);
|
|
442
452
|
}
|
|
443
453
|
}
|
|
454
|
+
function assertPlannedUpdateValuesValid(update, settings, statusRegistry, pmRoot) {
|
|
455
|
+
if (update.priority !== void 0) {
|
|
456
|
+
resolvePriority(update.priority);
|
|
457
|
+
}
|
|
458
|
+
if (update.type !== void 0) {
|
|
459
|
+
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
460
|
+
if (!resolveTypeName(update.type, typeRegistry)) {
|
|
461
|
+
throw new PmCliError(buildInvalidTypeError(update.type, typeRegistry.types, resolveItemTypesFilePath(pmRoot, settings.schema)), EXIT_CODE.USAGE);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
if (update.status !== void 0 && !normalizeStatusInput(update.status, statusRegistry)) {
|
|
465
|
+
const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);
|
|
466
|
+
throw new PmCliError(`Invalid --status value "${update.status}". Allowed: ${allowedStatuses.join(", ")}`, EXIT_CODE.USAGE);
|
|
467
|
+
}
|
|
468
|
+
if (update.deadline !== void 0) {
|
|
469
|
+
resolveIsoOrRelative(update.deadline, /* @__PURE__ */ new Date(), "deadline");
|
|
470
|
+
}
|
|
471
|
+
}
|
|
444
472
|
async function runUpdateMany(options, global) {
|
|
445
473
|
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
446
474
|
if (!await pathExists(getSettingsPath(pmRoot))) {
|
|
@@ -490,6 +518,7 @@ async function runUpdateMany(options, global) {
|
|
|
490
518
|
if (!hasAnyUpdateMutationInput(options.update)) {
|
|
491
519
|
throw new PmCliError(`No update-many mutation flags provided. Add at least one mutation flag (for example: ${UPDATE_MANY_MUTATION_FLAG_GUIDANCE}).`, EXIT_CODE.USAGE);
|
|
492
520
|
}
|
|
521
|
+
assertPlannedUpdateValuesValid(options.update, settings, statusRegistry, pmRoot);
|
|
493
522
|
const statusFilter = normalizeStatusFilter(options.status, statusRegistry);
|
|
494
523
|
const listed = await runList(statusFilter, { ...options.list, includeBody: true }, global);
|
|
495
524
|
const planned = listed.items.map((item) => buildPlannedItemDiff(item, options.update, runtimeFieldRegistry));
|
|
@@ -596,9 +625,26 @@ async function runUpdateMany(options, global) {
|
|
|
596
625
|
ids: updatedIds
|
|
597
626
|
};
|
|
598
627
|
}
|
|
628
|
+
var _testOnlyUpdateManyCommand = {
|
|
629
|
+
assertPlannedUpdateValuesValid,
|
|
630
|
+
buildCollectionMutationPlans,
|
|
631
|
+
buildPlannedItemDiff,
|
|
632
|
+
buildTagMutationPlan,
|
|
633
|
+
collectionValueCount,
|
|
634
|
+
hasAnyUpdateMutationInput,
|
|
635
|
+
hasListFilters,
|
|
636
|
+
normalizeStatusFilter,
|
|
637
|
+
normalizeCollectionBeforeValue,
|
|
638
|
+
normalizeExistingTags,
|
|
639
|
+
normalizeUnsetField,
|
|
640
|
+
rejectBlankIdsFilter,
|
|
641
|
+
sanitizeUpdateOptionsForSummary,
|
|
642
|
+
toComparablePreviewValue
|
|
643
|
+
};
|
|
599
644
|
export {
|
|
645
|
+
_testOnlyUpdateManyCommand,
|
|
600
646
|
runUpdateMany
|
|
601
647
|
};
|
|
602
|
-
//# sourceMappingURL=update-many-
|
|
648
|
+
//# sourceMappingURL=update-many-FCU6RKTO.js.map
|
|
603
649
|
|
|
604
|
-
//# debugId=
|
|
650
|
+
//# debugId=c80f5c67-636a-55ff-8ed9-12a839e1be28
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../cli/commands/update-many.ts"],"sourcesContent":["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport {\n createCheckpointId,\n loadMutationCheckpoint,\n restoreCheckpointItems,\n writeMutationCheckpoint,\n type MutationCheckpointItem,\n} from \"../../core/checkpoint/mutation-checkpoint.js\";\nimport { toItemRecord } from \"../../core/item/item-record.js\";\nimport { applyTagRemovals, mergeAdditiveTags, parseTags } from \"../../core/item/parse.js\";\nimport { resolvePriority } from \"../../core/item/priority.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { resolveItemTypeRegistry, resolveTypeName } from \"../../core/item/type-registry.js\";\nimport { collectRuntimeUpdateFieldValues } from \"../../core/schema/runtime-field-values.js\";\nimport { buildInvalidTypeError } from \"../../core/schema/item-types-file.js\";\nimport {\n resolveItemTypesFilePath,\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeFieldRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { toErrorMessage } from \"../../core/shared/primitives.js\";\nimport { stableValueEquals } from \"../../core/shared/serialization.js\";\nimport { nowIso, resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport type { PmSettings } from \"../../types/index.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { resolveAuthor } from \"../../core/shared/author.js\";\nimport type { ItemStatus } from \"../../types/index.js\";\nimport { hasListFilters } from \"./list-filter-shared.js\";\nimport { runList, type ListOptions, type ListedItem } from \"./list.js\";\nimport { runRestore } from \"./restore.js\";\nimport { runUpdate, type UpdateCommandOptions } from \"./update.js\";\n\nconst UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION = 1;\nconst UPDATE_MANY_CHECKPOINT_SUBDIR = \"update-many\";\n\nconst NON_MUTATION_UPDATE_OPTION_KEYS = new Set<keyof UpdateCommandOptions>([\n \"author\",\n \"message\",\n \"force\",\n \"allowAuditUpdate\",\n \"allowAuditDepUpdate\",\n]);\n\nconst UPDATE_MANY_MUTATION_FLAG_GUIDANCE = [\n \"--status\",\n \"--priority\",\n \"--type\",\n \"--tags\",\n \"--description\",\n \"--body\",\n \"--deadline\",\n \"--estimate\",\n \"--assignee\",\n \"--dep\",\n \"--dep-remove\",\n \"--comment\",\n \"--note\",\n \"--learning\",\n \"--file\",\n \"--test\",\n \"--doc\",\n \"--replace-deps\",\n \"--replace-tests\",\n \"--unset\",\n \"--clear-*\",\n].join(\", \");\n\nconst UPDATE_OPTION_TO_ITEM_KEY: Partial<Record<keyof UpdateCommandOptions, string>> = {\n title: \"title\",\n description: \"description\",\n body: \"body\",\n status: \"status\",\n closeReason: \"close_reason\",\n priority: \"priority\",\n type: \"type\",\n deadline: \"deadline\",\n estimatedMinutes: \"estimated_minutes\",\n acceptanceCriteria: \"acceptance_criteria\",\n definitionOfReady: \"definition_of_ready\",\n order: \"order\",\n goal: \"goal\",\n objective: \"objective\",\n value: \"value\",\n impact: \"impact\",\n outcome: \"outcome\",\n whyNow: \"why_now\",\n assignee: \"assignee\",\n parent: \"parent\",\n reviewer: \"reviewer\",\n risk: \"risk\",\n confidence: \"confidence\",\n sprint: \"sprint\",\n release: \"release\",\n blockedBy: \"blocked_by\",\n blockedReason: \"blocked_reason\",\n unblockNote: \"unblock_note\",\n reporter: \"reporter\",\n severity: \"severity\",\n environment: \"environment\",\n reproSteps: \"repro_steps\",\n resolution: \"resolution\",\n expectedResult: \"expected_result\",\n actualResult: \"actual_result\",\n affectedVersion: \"affected_version\",\n fixedVersion: \"fixed_version\",\n component: \"component\",\n regression: \"regression\",\n customerImpact: \"customer_impact\",\n};\n\ninterface CollectionMutationPlanDefinition {\n field: string;\n addKey: keyof UpdateCommandOptions;\n removeKey?: keyof UpdateCommandOptions;\n clearKey: keyof UpdateCommandOptions;\n replaceKey?: keyof UpdateCommandOptions;\n}\n\nconst COLLECTION_MUTATION_PLAN_DEFINITIONS: CollectionMutationPlanDefinition[] = [\n {\n field: \"dependencies\",\n addKey: \"dep\",\n removeKey: \"depRemove\",\n clearKey: \"clearDeps\",\n replaceKey: \"replaceDeps\",\n },\n {\n field: \"comments\",\n addKey: \"comment\",\n clearKey: \"clearComments\",\n },\n {\n field: \"notes\",\n addKey: \"note\",\n clearKey: \"clearNotes\",\n },\n {\n field: \"learnings\",\n addKey: \"learning\",\n clearKey: \"clearLearnings\",\n },\n {\n field: \"files\",\n addKey: \"file\",\n clearKey: \"clearFiles\",\n },\n {\n field: \"tests\",\n addKey: \"test\",\n clearKey: \"clearTests\",\n replaceKey: \"replaceTests\",\n },\n {\n field: \"docs\",\n addKey: \"doc\",\n clearKey: \"clearDocs\",\n },\n {\n field: \"reminders\",\n addKey: \"reminder\",\n clearKey: \"clearReminders\",\n },\n {\n field: \"events\",\n addKey: \"event\",\n clearKey: \"clearEvents\",\n },\n {\n field: \"type_options\",\n addKey: \"typeOption\",\n clearKey: \"clearTypeOptions\",\n },\n];\n\nconst UNSET_FIELD_ALIASES: Record<string, string> = {\n close_reason: \"close_reason\",\n \"close-reason\": \"close_reason\",\n deadline: \"deadline\",\n estimate: \"estimated_minutes\",\n estimated_minutes: \"estimated_minutes\",\n \"estimated-minutes\": \"estimated_minutes\",\n acceptance_criteria: \"acceptance_criteria\",\n \"acceptance-criteria\": \"acceptance_criteria\",\n ac: \"acceptance_criteria\",\n definition_of_ready: \"definition_of_ready\",\n \"definition-of-ready\": \"definition_of_ready\",\n order: \"order\",\n rank: \"order\",\n goal: \"goal\",\n objective: \"objective\",\n value: \"value\",\n impact: \"impact\",\n outcome: \"outcome\",\n why_now: \"why_now\",\n \"why-now\": \"why_now\",\n assignee: \"assignee\",\n parent: \"parent\",\n reviewer: \"reviewer\",\n risk: \"risk\",\n confidence: \"confidence\",\n sprint: \"sprint\",\n release: \"release\",\n blocked_by: \"blocked_by\",\n \"blocked-by\": \"blocked_by\",\n blocked_reason: \"blocked_reason\",\n \"blocked-reason\": \"blocked_reason\",\n unblock_note: \"unblock_note\",\n \"unblock-note\": \"unblock_note\",\n reporter: \"reporter\",\n severity: \"severity\",\n environment: \"environment\",\n repro_steps: \"repro_steps\",\n \"repro-steps\": \"repro_steps\",\n resolution: \"resolution\",\n expected_result: \"expected_result\",\n \"expected-result\": \"expected_result\",\n actual_result: \"actual_result\",\n \"actual-result\": \"actual_result\",\n affected_version: \"affected_version\",\n \"affected-version\": \"affected_version\",\n fixed_version: \"fixed_version\",\n \"fixed-version\": \"fixed_version\",\n component: \"component\",\n regression: \"regression\",\n customer_impact: \"customer_impact\",\n \"customer-impact\": \"customer_impact\",\n type_options: \"type_options\",\n \"type-options\": \"type_options\",\n tags: \"tags\",\n};\n\ninterface UpdateManyCheckpoint {\n schema_version: number;\n id: string;\n created_at: string;\n author: string;\n status_filter: string | null;\n list_filters: Record<string, unknown>;\n update_options: Record<string, unknown>;\n items: MutationCheckpointItem[];\n}\n\nexport interface UpdateManyCommandOptions {\n status?: string;\n list: ListOptions;\n update: UpdateCommandOptions;\n dryRun?: boolean;\n rollback?: string;\n checkpoint?: boolean;\n}\n\ninterface PlannedChange {\n field: string;\n before: unknown;\n after: unknown;\n}\n\ninterface PlannedItemDiff {\n id: string;\n changes: PlannedChange[];\n}\n\ninterface UpdateManyApplyResultRow {\n id: string;\n status: \"updated\" | \"failed\" | \"skipped\";\n changed_fields?: string[];\n warnings?: string[];\n error?: string;\n}\n\ninterface UpdateManyRollbackResultRow {\n id: string;\n status: \"restored\" | \"failed\";\n changed_fields?: string[];\n warnings?: string[];\n error?: string;\n}\n\nexport interface UpdateManyResult {\n mode: \"dry_run\" | \"apply\" | \"rollback\";\n matched_count: number;\n dry_run: boolean;\n filters?: Record<string, unknown>;\n planned_update_options?: Record<string, unknown>;\n item_plans?: PlannedItemDiff[];\n checkpoint?: {\n id: string;\n created_at: string;\n path: string;\n rollback_command: string;\n };\n updated_count?: number;\n skipped_count?: number;\n failed_count?: number;\n restored_count?: number;\n rollback_checkpoint_id?: string;\n rows?: UpdateManyApplyResultRow[] | UpdateManyRollbackResultRow[];\n ids: string[];\n}\n\nfunction sanitizeUpdateOptionsForSummary(options: UpdateCommandOptions): Record<string, unknown> {\n const summary: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(options) as Array<[keyof UpdateCommandOptions, unknown]>) {\n if (NON_MUTATION_UPDATE_OPTION_KEYS.has(key)) {\n continue;\n }\n if (value === undefined) {\n continue;\n }\n summary[key] = value;\n }\n return summary;\n}\n\nfunction hasAnyUpdateMutationInput(options: UpdateCommandOptions): boolean {\n return Object.keys(sanitizeUpdateOptionsForSummary(options)).length > 0;\n}\n\nfunction toComparablePreviewValue(optionKey: keyof UpdateCommandOptions, value: unknown): unknown {\n if (value === undefined) {\n return undefined;\n }\n if (optionKey === \"priority\") {\n const parsed = Number(String(value).trim());\n return Number.isInteger(parsed) ? parsed : String(value).trim();\n }\n if (optionKey === \"estimatedMinutes\" || optionKey === \"order\" || optionKey === \"rank\") {\n const parsed = Number(String(value).trim());\n return Number.isFinite(parsed) ? parsed : String(value).trim();\n }\n if (optionKey === \"regression\") {\n const normalized = String(value).trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\") {\n return false;\n }\n }\n if (typeof value === \"string\") {\n return value.trim();\n }\n return value;\n}\n\nfunction normalizeUnsetField(rawField: string): string {\n const normalized = rawField.trim().toLowerCase().replaceAll(\"-\", \"_\");\n return UNSET_FIELD_ALIASES[normalized] ?? normalized;\n}\n\nfunction areValuesEqual(left: unknown, right: unknown): boolean {\n return stableValueEquals(left, right);\n}\n\nfunction normalizeCollectionBeforeValue(field: string, value: unknown): unknown {\n if (value !== undefined) {\n return value;\n }\n if (field === \"type_options\") {\n return {};\n }\n return [];\n}\n\nfunction collectionValueCount(field: string, value: unknown): number {\n if (Array.isArray(value)) {\n return value.length;\n }\n if (field === \"type_options\" && value && typeof value === \"object\") {\n return Object.keys(value as Record<string, unknown>).length;\n }\n return 0;\n}\n\nfunction buildCollectionMutationPlans(row: Record<string, unknown>, update: UpdateCommandOptions): PlannedChange[] {\n const changes: PlannedChange[] = [];\n for (const definition of COLLECTION_MUTATION_PLAN_DEFINITIONS) {\n const addValues = update[definition.addKey];\n const removeValues = definition.removeKey ? update[definition.removeKey] : undefined;\n const addCount = Array.isArray(addValues) ? addValues.length : 0;\n const removeCount = Array.isArray(removeValues) ? removeValues.length : 0;\n const clear = update[definition.clearKey] === true;\n const replace = definition.replaceKey ? update[definition.replaceKey] === true : false;\n if (!clear && !replace && addCount === 0 && removeCount === 0) {\n continue;\n }\n\n const before = normalizeCollectionBeforeValue(definition.field, row[definition.field]);\n const beforeCount = collectionValueCount(definition.field, before);\n const operation = replace ? \"replace\" : clear ? \"clear_or_reset\" : removeCount > 0 ? \"merge_remove\" : \"append\";\n changes.push({\n field: definition.field,\n before,\n after: {\n operation,\n clear,\n replace,\n add_count: addCount,\n remove_count: removeCount,\n before_count: beforeCount,\n },\n });\n }\n return changes;\n}\n\nfunction normalizeExistingTags(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter((tag): tag is string => typeof tag === \"string\");\n}\n\n// Tags support three mutation modes that compose: --tags replaces, --add-tags\n// extends, --remove-tags prunes. Replicate runUpdate's resolution order so the\n// dry-run preview and the apply-mode actionable detection both account for\n// additive/subtractive tag mutations (a --add-tags-only update must NOT be\n// treated as a no-op skip).\nfunction buildTagMutationPlan(row: Record<string, unknown>, update: UpdateCommandOptions): PlannedChange | undefined {\n const hasReplace = update.tags !== undefined;\n const hasAdd = Array.isArray(update.addTags) && update.addTags.length > 0;\n const hasRemove = Array.isArray(update.removeTags) && update.removeTags.length > 0;\n if (!hasReplace && !hasAdd && !hasRemove) {\n return undefined;\n }\n const existing = normalizeExistingTags(row.tags);\n const baseTags = hasReplace ? parseTags(update.tags as string) : existing;\n const withAdditions = mergeAdditiveTags(baseTags, update.addTags);\n const after = applyTagRemovals(withAdditions, update.removeTags).slice().sort((a, b) => a.localeCompare(b));\n const before = existing.slice().sort((a, b) => a.localeCompare(b));\n if (areValuesEqual(before, after)) {\n return undefined;\n }\n return { field: \"tags\", before: existing, after };\n}\n\nfunction buildPlannedItemDiff(\n item: ListedItem,\n update: UpdateCommandOptions = {},\n runtimeFieldRegistry: RuntimeFieldRegistry,\n): PlannedItemDiff {\n const safeUpdate = update;\n const row = toItemRecord(item);\n const changes: PlannedChange[] = [];\n const tagPlan = buildTagMutationPlan(row, safeUpdate);\n if (tagPlan) {\n changes.push(tagPlan);\n }\n for (const [optionKey, itemKey] of Object.entries(UPDATE_OPTION_TO_ITEM_KEY) as Array<[keyof UpdateCommandOptions, string]>) {\n const candidate = safeUpdate[optionKey];\n if (candidate === undefined) {\n continue;\n }\n const before = row[itemKey];\n const after = toComparablePreviewValue(optionKey, candidate);\n if (areValuesEqual(before, after)) {\n continue;\n }\n changes.push({\n field: itemKey,\n before,\n after,\n });\n }\n changes.push(...buildCollectionMutationPlans(row, safeUpdate));\n\n const runtimeFieldUpdates = collectRuntimeUpdateFieldValues(\n safeUpdate as Record<string, unknown>,\n runtimeFieldRegistry,\n [\"update_many\"],\n );\n for (const [fieldKey, fieldValue] of Object.entries(runtimeFieldUpdates)) {\n const before = row[fieldKey];\n if (areValuesEqual(before, fieldValue)) {\n continue;\n }\n changes.push({\n field: fieldKey,\n before,\n after: fieldValue,\n });\n }\n\n if (safeUpdate.unset && safeUpdate.unset.length > 0) {\n for (const rawUnsetField of safeUpdate.unset) {\n const field = normalizeUnsetField(rawUnsetField);\n const before = row[field];\n if (before === undefined) {\n continue;\n }\n changes.push({\n field,\n before,\n after: null,\n });\n }\n }\n\n return {\n id: item.id,\n changes,\n };\n}\n\nfunction normalizeStatusFilter(value: string | undefined, statusRegistry: RuntimeStatusRegistry): ItemStatus | undefined {\n if (value === undefined) {\n return undefined;\n }\n const normalized = normalizeStatusInput(value, statusRegistry);\n if (!normalized) {\n const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);\n throw new PmCliError(\n `Invalid --filter-status value \"${value}\". Allowed: ${allowedStatuses.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized;\n}\n\nfunction rejectBlankIdsFilter(list: ListOptions | undefined): void {\n if (list?.ids != null && String(list.ids).trim().length === 0) {\n throw new PmCliError(\"--ids requires at least one non-empty item ID\", EXIT_CODE.USAGE);\n }\n}\n\n// GH-256: validate planned scalar enum/format fields up front so a `--dry-run`\n// preview rejects globally-invalid values exactly as apply would (true\n// preview==apply parity), and so apply itself fails fast before creating an\n// orphan checkpoint. Only VALUE/ENUM/FORMAT correctness is checked here — these\n// are invalid regardless of the matched item. Per-item governance and\n// workflow-transition rules stay in the apply path (runUpdate). Each field is\n// validated only when the caller actually provided it, reusing the exact same\n// resolvers and error messages runUpdate raises so single/bulk/dry-run stay\n// consistent.\nfunction assertPlannedUpdateValuesValid(\n update: UpdateCommandOptions,\n settings: PmSettings,\n statusRegistry: RuntimeStatusRegistry,\n pmRoot: string,\n): void {\n if (update.priority !== undefined) {\n resolvePriority(update.priority);\n }\n if (update.type !== undefined) {\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n if (!resolveTypeName(update.type, typeRegistry)) {\n throw new PmCliError(\n buildInvalidTypeError(update.type, typeRegistry.types, resolveItemTypesFilePath(pmRoot, settings.schema)),\n EXIT_CODE.USAGE,\n );\n }\n }\n if (update.status !== undefined && !normalizeStatusInput(update.status, statusRegistry)) {\n const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);\n throw new PmCliError(\n `Invalid --status value \"${update.status}\". Allowed: ${allowedStatuses.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n if (update.deadline !== undefined) {\n resolveIsoOrRelative(update.deadline, new Date(), \"deadline\");\n }\n}\n\n\nexport async function runUpdateMany(options: UpdateManyCommandOptions, global: GlobalOptions): Promise<UpdateManyResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n\n const dryRun = options.dryRun === true;\n const rollbackId = typeof options.rollback === \"string\" ? options.rollback : undefined;\n const updateSummary = sanitizeUpdateOptionsForSummary(options.update);\n rejectBlankIdsFilter(options.list);\n\n if (rollbackId) {\n if (dryRun) {\n throw new PmCliError(\"--dry-run cannot be combined with --rollback\", EXIT_CODE.USAGE);\n }\n if (hasListFilters(options.list, options.status)) {\n throw new PmCliError(\"Rollback mode does not accept filter options\", EXIT_CODE.USAGE);\n }\n if (Object.keys(updateSummary).length > 0) {\n throw new PmCliError(\"Rollback mode does not accept update mutation flags\", EXIT_CODE.USAGE);\n }\n\n const checkpoint = await loadMutationCheckpoint(\n pmRoot,\n UPDATE_MANY_CHECKPOINT_SUBDIR,\n rollbackId,\n UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION,\n );\n const restoreMessage = options.update?.message ?? `Rollback update-many checkpoint ${checkpoint.id}`;\n const rollback = await restoreCheckpointItems(checkpoint.items, (id, targetUpdatedAt) =>\n runRestore(\n id,\n targetUpdatedAt,\n {\n author: options.update?.author,\n message: restoreMessage,\n force: options.update?.force ?? true,\n },\n global,\n ),\n );\n return {\n mode: \"rollback\",\n matched_count: checkpoint.items.length,\n dry_run: false,\n rollback_checkpoint_id: checkpoint.id,\n checkpoint: {\n id: checkpoint.id,\n created_at: checkpoint.created_at,\n path: checkpoint.path,\n rollback_command: `pm update-many --rollback ${checkpoint.id}`,\n },\n restored_count: rollback.restored_ids.length,\n failed_count: rollback.failed_count,\n rows: rollback.rows,\n ids: rollback.restored_ids,\n };\n }\n\n if (!hasAnyUpdateMutationInput(options.update)) {\n throw new PmCliError(\n `No update-many mutation flags provided. Add at least one mutation flag (for example: ${UPDATE_MANY_MUTATION_FLAG_GUIDANCE}).`,\n EXIT_CODE.USAGE,\n );\n }\n\n // GH-256: validate planned scalar values before listing/checkpointing so\n // dry-run previews and apply both reject globally-invalid enum/format input.\n assertPlannedUpdateValuesValid(options.update, settings, statusRegistry, pmRoot);\n\n const statusFilter = normalizeStatusFilter(options.status, statusRegistry);\n const listed = await runList(statusFilter, { ...options.list, includeBody: true }, global);\n const planned = listed.items.map((item) => buildPlannedItemDiff(item, options.update, runtimeFieldRegistry));\n const actionable = planned.filter((row) => row.changes.length > 0);\n if (dryRun) {\n return {\n mode: \"dry_run\",\n matched_count: listed.items.length,\n dry_run: true,\n filters: listed.filters,\n planned_update_options: updateSummary,\n item_plans: planned,\n ids: [],\n };\n }\n\n if (actionable.length === 0) {\n return {\n mode: \"apply\",\n matched_count: listed.items.length,\n dry_run: false,\n filters: listed.filters,\n planned_update_options: updateSummary,\n updated_count: 0,\n skipped_count: listed.items.length,\n failed_count: 0,\n rows: planned.map((row) => ({\n id: row.id,\n status: \"skipped\" as const,\n })),\n ids: [],\n };\n }\n\n const nowValue = nowIso();\n const checkpointId = createCheckpointId(UPDATE_MANY_CHECKPOINT_SUBDIR, nowValue);\n const checkpointEnabled = options.checkpoint !== false;\n const checkpointItems: MutationCheckpointItem[] = listed.items\n .filter((item) => actionable.some((candidate) => candidate.id === item.id))\n .map((item) => ({\n id: item.id,\n target_updated_at: item.updated_at,\n }));\n\n let checkpointInfo: UpdateManyResult[\"checkpoint\"] | undefined;\n if (checkpointEnabled) {\n const checkpointPayload: UpdateManyCheckpoint = {\n schema_version: UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION,\n id: checkpointId,\n created_at: nowValue,\n author: resolveAuthor(options.update.author, \"unknown\"),\n status_filter: statusFilter ?? null,\n list_filters: listed.filters,\n update_options: updateSummary,\n items: checkpointItems,\n };\n const checkpointPath = await writeMutationCheckpoint(\n pmRoot,\n UPDATE_MANY_CHECKPOINT_SUBDIR,\n checkpointId,\n checkpointPayload,\n );\n checkpointInfo = {\n id: checkpointId,\n created_at: nowValue,\n path: checkpointPath,\n rollback_command: `pm update-many --rollback ${checkpointId}`,\n };\n }\n\n const applyRows: UpdateManyApplyResultRow[] = [];\n const updatedIds: string[] = [];\n const updateMessage = options.update.message ?? `update-many apply ${checkpointId}`;\n const actionableById = new Set(actionable.map((row) => row.id));\n for (const item of listed.items) {\n if (!actionableById.has(item.id)) {\n applyRows.push({ id: item.id, status: \"skipped\" });\n continue;\n }\n try {\n const result = await runUpdate(\n item.id,\n {\n ...options.update,\n message: updateMessage,\n runtimeFieldCommands: [\"update_many\"],\n },\n global,\n );\n applyRows.push({\n id: item.id,\n status: \"updated\",\n changed_fields: result.changed_fields,\n warnings: result.warnings,\n });\n updatedIds.push(item.id);\n } catch (error: unknown) {\n applyRows.push({\n id: item.id,\n status: \"failed\",\n error: toErrorMessage(error),\n });\n }\n }\n\n const updatedCount = applyRows.filter((row) => row.status === \"updated\").length;\n const skippedCount = applyRows.filter((row) => row.status === \"skipped\").length;\n const failedCount = applyRows.filter((row) => row.status === \"failed\").length;\n\n return {\n mode: \"apply\",\n matched_count: listed.items.length,\n dry_run: false,\n filters: listed.filters,\n planned_update_options: updateSummary,\n ...(checkpointInfo ? { checkpoint: checkpointInfo } : {}),\n updated_count: updatedCount,\n skipped_count: skippedCount,\n failed_count: failedCount,\n rows: applyRows,\n ids: updatedIds,\n };\n}\n\nexport const _testOnlyUpdateManyCommand = {\n assertPlannedUpdateValuesValid,\n buildCollectionMutationPlans,\n buildPlannedItemDiff,\n buildTagMutationPlan,\n collectionValueCount,\n hasAnyUpdateMutationInput,\n hasListFilters,\n normalizeStatusFilter,\n normalizeCollectionBeforeValue,\n normalizeExistingTags,\n normalizeUnsetField,\n rejectBlankIdsFilter,\n sanitizeUpdateOptionsForSummary,\n toComparablePreviewValue,\n};\n"],"names":[],"mappings":"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","debugId":"c80f5c67-636a-55ff-8ed9-12a839e1be28"}
|