@unbrained/pm-cli 2026.6.30 → 2026.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -0
- package/CHANGELOG.md +26 -0
- package/dist/cli/bootstrap-args.js +89 -79
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.d.ts +2 -0
- package/dist/cli/commander-usage.js +58 -47
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/aggregate.js +102 -79
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/calendar.js +339 -303
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close-many.js +89 -68
- package/dist/cli/commands/close-many.js.map +1 -1
- package/dist/cli/commands/close.js +157 -129
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.js +50 -42
- package/dist/cli/commands/comments-audit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.js +443 -879
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.js +365 -287
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.js +352 -238
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.js +483 -434
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +46 -39
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/dedupe-merge.js +88 -69
- package/dist/cli/commands/dedupe-merge.js.map +1 -1
- package/dist/cli/commands/extension/bundled-catalog.js +59 -46
- package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
- package/dist/cli/commands/extension/doctor.js +129 -78
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/managed-state.js +101 -57
- package/dist/cli/commands/extension/managed-state.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.d.ts +7 -0
- package/dist/cli/commands/extension/scaffold.js +214 -186
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +6 -1
- package/dist/cli/commands/extension.js +1034 -902
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/get.js +114 -81
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.d.ts +17 -0
- package/dist/cli/commands/health.js +446 -307
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-compact.js +209 -140
- package/dist/cli/commands/history-compact.js.map +1 -1
- package/dist/cli/commands/history-redact.js +162 -119
- package/dist/cli/commands/history-redact.js.map +1 -1
- package/dist/cli/commands/history-repair.js +120 -85
- package/dist/cli/commands/history-repair.js.map +1 -1
- package/dist/cli/commands/init.d.ts +8 -2
- package/dist/cli/commands/init.js +263 -162
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list-filter-shared.js +55 -48
- package/dist/cli/commands/list-filter-shared.js.map +1 -1
- package/dist/cli/commands/list.js +152 -102
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/next.js +49 -32
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/plan.js +373 -298
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/recurrence-parsers.js +43 -25
- package/dist/cli/commands/recurrence-parsers.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +21 -5
- package/dist/cli/commands/reindex.js +345 -205
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +8 -7
- package/dist/cli/commands/restore.js +105 -69
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.js +33 -30
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +10 -2
- package/dist/cli/commands/search.js +595 -536
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/telemetry.js +98 -87
- package/dist/cli/commands/telemetry.js.map +1 -1
- package/dist/cli/commands/test-all.js +237 -168
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -5
- package/dist/cli/commands/test.js +530 -464
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +57 -42
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +1 -1
- package/dist/cli/commands/update.js +764 -747
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +18 -1
- package/dist/cli/commands/validate.js +466 -343
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +399 -357
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-options.js +48 -21
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/main.d.ts +47 -0
- package/dist/cli/main.js +428 -341
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migration-gates.js +22 -45
- package/dist/cli/migration-gates.js.map +1 -1
- package/dist/cli/register-list-query.js +94 -105
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +400 -416
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +86 -66
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +120 -101
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.js +117 -122
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-MVSEND6D.js → activity-CUC4JY3U.js} +9 -9
- package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js → aggregate-DKUTRY6R.js} +109 -85
- package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js → aggregate-SW5PNGCS.js} +108 -84
- package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js.map → aggregate-SW5PNGCS.js.map} +2 -2
- package/dist/cli-bundle/chunks/{append-KDHT4GHI.js → append-H32VOR2Y.js} +6 -6
- package/dist/cli-bundle/chunks/{append-LEDBAM3K.js → append-UBM632FK.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js → chunk-2227673O.js} +158 -114
- package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js → chunk-2ASNV4DH.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js → chunk-2CHRYUXL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js → chunk-2KWL5NPW.js} +42 -27
- package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js → chunk-36UGKF4O.js} +21 -29
- package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JZG5ADVE.js → chunk-3AZUFQK6.js} +1103 -963
- package/dist/cli-bundle/chunks/chunk-3AZUFQK6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DRPF274X.js → chunk-3LCUASYG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js → chunk-3Q2HBMTI.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js → chunk-4NUOWFBT.js} +109 -72
- package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js → chunk-55XRYWEG.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-5IRVSKPS.js → chunk-5GVTFFTC.js} +150 -224
- package/dist/cli-bundle/chunks/chunk-5GVTFFTC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js → chunk-5PGBHRY3.js} +41 -26
- package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js → chunk-66Z3X7ZG.js} +261 -161
- package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A3UNLXNJ.js → chunk-6ITZLD4T.js} +738 -688
- package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JTRKME24.js → chunk-6YCYF2AI.js} +262 -162
- package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RM6MHL6A.js → chunk-6ZMBJRDJ.js} +580 -467
- package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js → chunk-7MYWF4ZX.js} +110 -73
- package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SNUK7H5J.js → chunk-7NSPKJUS.js} +716 -606
- package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js → chunk-7TH5NMVB.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VD3LKZFX.js → chunk-7W4H4K26.js} +739 -689
- package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js → chunk-A6VOGKBA.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js → chunk-AIAIXG7I.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NIBP3I7A.js → chunk-AJEBCRIY.js} +128 -126
- package/dist/cli-bundle/chunks/chunk-AJEBCRIY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js → chunk-BTX5MIQF.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js +809 -0
- package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js → chunk-CYBDUHNO.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js → chunk-CZPVDLD2.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js → chunk-EMPGXBUF.js} +22 -30
- package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js → chunk-EUKTMRN3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js → chunk-FFOQHGNH.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js → chunk-GFMSLORL.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IZQOJR2B.js → chunk-GRRG3MCT.js} +198 -189
- package/dist/cli-bundle/chunks/chunk-GRRG3MCT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js → chunk-H4GRLYJS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js → chunk-HQTPRV4D.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-CY5IJMUM.js → chunk-I66WE2HE.js} +712 -602
- package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZFIEEDTJ.js → chunk-IEEJQCZ4.js} +509 -363
- package/dist/cli-bundle/chunks/chunk-IEEJQCZ4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DU66JUGT.js → chunk-IG5JYZGU.js} +488 -420
- package/dist/cli-bundle/chunks/chunk-IG5JYZGU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js → chunk-JMK5GCK2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js → chunk-JXAUVO6X.js} +258 -169
- package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js.map → chunk-JXAUVO6X.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js → chunk-K2VYLVX4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js → chunk-KCO2EAN5.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-T7ZMQI4J.js → chunk-KIYCOJ63.js} +198 -189
- package/dist/cli-bundle/chunks/chunk-KIYCOJ63.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js → chunk-KLXF7NCC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-V3KLX7U7.js → chunk-KN3URLKS.js} +510 -364
- package/dist/cli-bundle/chunks/chunk-KN3URLKS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js → chunk-LRKMWUUV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js → chunk-LTRAF2D7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5T6WPLRO.js → chunk-MNBPX5JS.js} +394 -354
- package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js → chunk-MRD4T5LF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js → chunk-N2JSWVWG.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-7WDETKGP.js → chunk-N3QCJS4M.js} +1105 -965
- package/dist/cli-bundle/chunks/chunk-N3QCJS4M.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js → chunk-NRZS637N.js} +258 -169
- package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js +799 -0
- package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js → chunk-Q6K2OACU.js} +153 -90
- package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-K46GQ265.js → chunk-Q6NXOHS6.js} +489 -421
- package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js → chunk-QH3FSKRJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-UB3V5WUI.js → chunk-RM37OPYK.js} +394 -354
- package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js → chunk-S62UANU7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js → chunk-SPM2XLWI.js} +37 -28
- package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DORJSBGJ.js → chunk-SYNKD3ZG.js} +127 -125
- package/dist/cli-bundle/chunks/chunk-SYNKD3ZG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6YRAMXRS.js → chunk-SYVUU7EK.js} +581 -468
- package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js → chunk-TPOFWBMY.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js → chunk-TTHCEV5Q.js} +92 -77
- package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js → chunk-U2BEEM2X.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js → chunk-UGLU6Q2I.js} +91 -76
- package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js → chunk-UT73HUPC.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js → chunk-UTSH5GWX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js → chunk-UWKEJMZU.js} +157 -113
- package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js → chunk-W47SML5B.js} +152 -89
- package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js → chunk-WJAMWAHZ.js} +157 -118
- package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-HIBK6H4S.js → chunk-XCHUVHKU.js} +685 -544
- package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DJDXAU74.js → chunk-XEWQKDYZ.js} +685 -544
- package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js → chunk-XTHQWXVC.js} +158 -119
- package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6T5ZIWBS.js → chunk-XWGEMNBR.js} +150 -224
- package/dist/cli-bundle/chunks/chunk-XWGEMNBR.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js → chunk-Y4NRKBFW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js → chunk-YLZZ6T54.js} +38 -29
- package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js → chunk-YPKFV2JR.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
- package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js → chunk-ZNHEYCDD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js → chunk-ZNT7KEWE.js} +2 -2
- package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js → claim-SENTPZBN.js} +8 -8
- package/dist/cli-bundle/chunks/{claim-6NINZYB3.js → claim-Z7MEQCBT.js} +8 -8
- package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js → close-424MX4CU.js} +7 -7
- package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
- package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js → close-many-2IV4J2TR.js} +103 -82
- package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
- package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js → close-many-SWY34BII.js} +102 -81
- package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
- package/dist/cli-bundle/chunks/{comments-ETHABIY6.js → comments-4FGNTSNV.js} +8 -8
- package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js → comments-7YS5MY5X.js} +8 -8
- package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
- package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
- package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
- package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js → context-LHVKJSPJ.js} +12 -12
- package/dist/cli-bundle/chunks/{context-XDI4DKKT.js → context-ZQY54JNS.js} +12 -12
- package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js → contracts-CP2EZJC7.js} +320 -199
- package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js → contracts-FIZLMP7O.js} +321 -200
- package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
- package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js → copy-GYNQQPW2.js} +5 -5
- package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js → copy-TLW7JTQT.js} +5 -5
- package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js → create-VSKYSOCD.js} +12 -12
- package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
- package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js → delete-4W5JYCEG.js} +5 -5
- package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js → delete-ANTOTI2I.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js → deps-HPPE6MJN.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js → deps-ZQZN54EZ.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js → docs-RPOVFMP3.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-2TIFR62T.js → docs-XJNYBJGE.js} +7 -7
- package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js → eval-DM6JBZTS.js} +10 -10
- package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js → eval-RFBI5FGS.js} +10 -10
- package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js → extension-B3YY4WY5.js} +11 -10
- package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js → extension-TTSEFQTS.js} +11 -10
- package/dist/cli-bundle/chunks/{files-DF3HO6XK.js → files-5D65CHGE.js} +7 -7
- package/dist/cli-bundle/chunks/{files-T5ODMETM.js → files-GPIG77EN.js} +7 -7
- package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js → focus-C3PEJV2C.js} +6 -6
- package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js → focus-ZHN7WIGX.js} +6 -6
- package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js → gc-D4JQ6OWN.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-FULIVYR4.js → gc-VZIXDL32.js} +3 -3
- package/dist/cli-bundle/chunks/{get-VYPIICPC.js → get-GIBRUUOP.js} +121 -81
- package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-AWK324RS.js → get-IOVAN6RU.js} +120 -80
- package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-Q66C43GN.js → health-L2U3AFKV.js} +437 -264
- package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-FBCVZGSX.js → health-MM7AWXYF.js} +436 -263
- package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
- package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
- package/dist/cli-bundle/chunks/{history-X4OSES6K.js → history-IL7XCEX2.js} +8 -8
- package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.js → history-compact-HALOTOU7.js} +214 -135
- package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-compact-WLCQEKXS.js → history-compact-MV25P7DM.js} +213 -134
- package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
- package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
- package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js → history-redact-VYCWQFK7.js} +9 -9
- package/dist/cli-bundle/chunks/{history-repair-FY75IC26.js → history-repair-44MODPQF.js} +124 -84
- package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-repair-GABSDSVD.js → history-repair-CPNAOCNF.js} +123 -83
- package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
- package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js → init-F27NHENZ.js} +12 -11
- package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
- package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js → learnings-HJVDQIGY.js} +8 -8
- package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js → learnings-XSFSUUWK.js} +8 -8
- package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js → list-HPMEKCAA.js} +8 -8
- package/dist/cli-bundle/chunks/{list-ROT7JF62.js → list-VMPWTURB.js} +8 -8
- package/dist/cli-bundle/chunks/{next-66BJB4N2.js → next-ETXF2ZCN.js} +59 -37
- package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
- package/dist/cli-bundle/chunks/{next-N5MWJTBY.js → next-QM6YJIIS.js} +60 -38
- package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
- package/dist/cli-bundle/chunks/{notes-FW6YFLND.js → notes-GDZIKGR6.js} +8 -8
- package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js → notes-WDDBPC4D.js} +8 -8
- package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js → plan-BGDR73Z6.js} +373 -279
- package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js → plan-C5IMM335.js} +372 -278
- package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
- package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js → profile-CCOKZ2IQ.js} +9 -9
- package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js → profile-HUCENIEQ.js} +9 -9
- package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.js → register-list-query-ROSNIL52.js} +80 -83
- package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-KY6Z6WV7.js → register-list-query-XN4ZRHSV.js} +79 -82
- package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-PCARIGZS.js → register-mutation-CFSB2MS3.js} +406 -385
- package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js → register-mutation-KRLAHEL2.js} +405 -384
- package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.js → register-operations-4PASGJDB.js} +112 -93
- package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-YAT6FUUB.js → register-operations-MBN4KGUM.js} +113 -94
- package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-N7UGXYJC.js → register-setup-VIAWYFP5.js} +129 -104
- package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-MPANILQF.js → register-setup-ZCGKHDKL.js} +128 -103
- package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
- package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js → restore-4CBWUMCX.js} +9 -9
- package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
- package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js → schema-TDGK6N3I.js} +7 -7
- package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js → schema-UE5KKAUX.js} +7 -7
- package/dist/cli-bundle/chunks/{search-KP6H7COV.js → search-FP7MEU4S.js} +10 -10
- package/dist/cli-bundle/chunks/{search-CX5UMV4H.js → search-K4CFLQ5S.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js → stats-NJJCALEZ.js} +6 -6
- package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js → stats-XT6QRKQY.js} +6 -6
- package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js → telemetry-5SQ5UDXC.js} +84 -70
- package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
- package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js → telemetry-HVXFZA2U.js} +85 -71
- package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-QNDXZQCW.js → test-UFSJ5YIO.js} +15 -14
- package/dist/cli-bundle/chunks/{test-HU2BS7EY.js → test-YCDAUBWF.js} +15 -14
- package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
- package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
- package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
- package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
- package/dist/cli-bundle/chunks/{test-runs-CA6K32RD.js → test-runs-FK5E75AA.js} +185 -147
- package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-LANLLPVO.js → test-runs-H4TGWGRN.js} +184 -146
- package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
- package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
- package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js → update-Y5WQVT5O.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js → update-many-6YAYYRLE.js} +83 -68
- package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js.map → update-many-6YAYYRLE.js.map} +2 -2
- package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js → update-many-JTKKSA7Y.js} +84 -69
- package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js.map → update-many-JTKKSA7Y.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js → upgrade-DTAHZ236.js} +11 -10
- package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js.map → upgrade-DTAHZ236.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js → upgrade-JUDU7YL4.js} +13 -12
- package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js.map → upgrade-JUDU7YL4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{validate-2G566PKQ.js → validate-732RWS5W.js} +440 -319
- package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
- package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js → validate-W7H5TEDC.js} +441 -320
- package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
- package/dist/cli-bundle/main.js +986 -1500
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/core/config/nested-settings.js +89 -67
- package/dist/core/config/nested-settings.js.map +1 -1
- package/dist/core/extensions/activation-summary-markdown.js +23 -12
- package/dist/core/extensions/activation-summary-markdown.js.map +1 -1
- package/dist/core/extensions/extension-policy.d.ts +18 -3
- package/dist/core/extensions/extension-policy.js +116 -106
- package/dist/core/extensions/extension-policy.js.map +1 -1
- package/dist/core/extensions/loader.js +310 -232
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/governance/metadata-coverage.js +20 -28
- package/dist/core/governance/metadata-coverage.js.map +1 -1
- package/dist/core/history/drift-scan.js +93 -81
- package/dist/core/history/drift-scan.js.map +1 -1
- package/dist/core/item/item-format.js +523 -410
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/item-type-definition.js +14 -14
- package/dist/core/item/item-type-definition.js.map +1 -1
- package/dist/core/item/type-registry.js +87 -82
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/output/mutation-projection.js +42 -26
- package/dist/core/output/mutation-projection.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +34 -28
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/semantic-defaults.js +64 -37
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/vector-stores.js +32 -17
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/sentry/helpers.js +31 -28
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/sentry/instrument.js +54 -43
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +239 -153
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-store.js +33 -26
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings.js +247 -203
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/test/background-runs.js +189 -160
- package/dist/core/test/background-runs.js.map +1 -1
- package/dist/mcp/server.js +387 -367
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +111 -180
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +76 -45
- package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
- package/dist/sdk/compose.d.ts +4 -1
- package/dist/sdk/compose.js +181 -115
- package/dist/sdk/compose.js.map +1 -1
- package/docs/RELEASING.md +2 -3
- package/package.json +2 -2
- package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
- package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
- package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-53ARXF2O.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AWN4PPH5.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js +0 -115
- package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-CHRNYKNI.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-D5LYZVGB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js +0 -118
- package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FDEVKXC4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-GF7EAR22.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-IHXXUIXS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
- package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JTRKME24.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KYDYQMNW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QE5UFCCO.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RPRW26NG.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-V3KLX7U7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
- package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-Z55WX4IQ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-Z5BM2FKQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZEATCVAC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZFIEEDTJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +0 -1
- package/dist/cli-bundle/chunks/close-37KEHLYM.js +0 -14
- package/dist/cli-bundle/chunks/close-many-BFMP6HHK.js.map +0 -7
- package/dist/cli-bundle/chunks/close-many-CXJBOWWY.js.map +0 -1
- package/dist/cli-bundle/chunks/config-FIXJZEQK.js +0 -1541
- package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +0 -7
- package/dist/cli-bundle/chunks/config-X3ZVCUUG.js +0 -1531
- package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +0 -7
- package/dist/cli-bundle/chunks/create-DFMNBKBS.js +0 -28
- package/dist/cli-bundle/chunks/get-AWK324RS.js.map +0 -7
- package/dist/cli-bundle/chunks/get-VYPIICPC.js.map +0 -1
- package/dist/cli-bundle/chunks/health-FBCVZGSX.js.map +0 -7
- package/dist/cli-bundle/chunks/health-Q66C43GN.js.map +0 -1
- package/dist/cli-bundle/chunks/history-5XUSLAJA.js +0 -18
- package/dist/cli-bundle/chunks/history-compact-2GHT32UX.js.map +0 -1
- package/dist/cli-bundle/chunks/history-compact-WLCQEKXS.js.map +0 -7
- package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-FY75IC26.js.map +0 -1
- package/dist/cli-bundle/chunks/history-repair-GABSDSVD.js.map +0 -7
- package/dist/cli-bundle/chunks/init-TRYJELH4.js +0 -21
- package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +0 -7
- package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-DQ7G4EDC.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-ZHKZ7JVF.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-L6CYTOIH.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-YAT6FUUB.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +0 -17
- package/dist/cli-bundle/chunks/telemetry-DIFPXCAT.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-WTYFUPRL.js.map +0 -1
- package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js +0 -360
- package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js.map +0 -7
- package/dist/cli-bundle/chunks/test-all-XLPI4USF.js +0 -357
- package/dist/cli-bundle/chunks/test-all-XLPI4USF.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +0 -7
- package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +0 -24
- package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-MVSEND6D.js.map → activity-CUC4JY3U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-EJBMXUBH.js.map → activity-WEIEMM73.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-KDHT4GHI.js.map → append-H32VOR2Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-LEDBAM3K.js.map → append-UBM632FK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js.map → chunk-2ASNV4DH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js.map → chunk-2CHRYUXL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DRPF274X.js.map → chunk-3LCUASYG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js.map → chunk-3Q2HBMTI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js.map → chunk-55XRYWEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js.map → chunk-A6VOGKBA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js.map → chunk-AIAIXG7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js.map → chunk-BTX5MIQF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js.map → chunk-CYBDUHNO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js.map → chunk-CZPVDLD2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js.map → chunk-EUKTMRN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js.map → chunk-FFOQHGNH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js.map → chunk-GFMSLORL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js.map → chunk-H4GRLYJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js.map → chunk-HQTPRV4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js.map → chunk-JMK5GCK2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js.map → chunk-K2VYLVX4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js.map → chunk-KCO2EAN5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js.map → chunk-KLXF7NCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js.map → chunk-LRKMWUUV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js.map → chunk-LTRAF2D7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js.map → chunk-MRD4T5LF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js.map → chunk-N2JSWVWG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js.map → chunk-QH3FSKRJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js.map → chunk-S62UANU7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js.map → chunk-U2BEEM2X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js.map → chunk-UT73HUPC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js.map → chunk-UTSH5GWX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js.map → chunk-Y4NRKBFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js.map → chunk-YPKFV2JR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js.map → chunk-ZNHEYCDD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js.map → claim-SENTPZBN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-6NINZYB3.js.map → claim-Z7MEQCBT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js.map → close-424MX4CU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-37KEHLYM.js.map → close-YCWQQPDS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-ETHABIY6.js.map → comments-4FGNTSNV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js.map → comments-7YS5MY5X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js.map → context-LHVKJSPJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-XDI4DKKT.js.map → context-ZQY54JNS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js.map → copy-GYNQQPW2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js.map → copy-TLW7JTQT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js.map → create-VSKYSOCD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-DFMNBKBS.js.map → create-XTMAPS7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js.map → delete-4W5JYCEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js.map → delete-ANTOTI2I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js.map → deps-HPPE6MJN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js.map → deps-ZQZN54EZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js.map → docs-RPOVFMP3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-2TIFR62T.js.map → docs-XJNYBJGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js.map → eval-DM6JBZTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js.map → eval-RFBI5FGS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js.map → extension-B3YY4WY5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js.map → extension-TTSEFQTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-DF3HO6XK.js.map → files-5D65CHGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-T5ODMETM.js.map → files-GPIG77EN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js.map → focus-C3PEJV2C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js.map → focus-ZHN7WIGX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js.map → gc-D4JQ6OWN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-FULIVYR4.js.map → gc-VZIXDL32.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-5XUSLAJA.js.map → history-DD7L7BNL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-X4OSES6K.js.map → history-IL7XCEX2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-BVHWDXPR.js.map → history-redact-IX4YEWMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js.map → history-redact-VYCWQFK7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js.map → init-F27NHENZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-TRYJELH4.js.map → init-HHVQQP6C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js.map → learnings-HJVDQIGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js.map → learnings-XSFSUUWK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js.map → list-HPMEKCAA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-ROT7JF62.js.map → list-VMPWTURB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-FW6YFLND.js.map → notes-GDZIKGR6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js.map → notes-WDDBPC4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js.map → profile-CCOKZ2IQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js.map → profile-HUCENIEQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js.map → restore-4CBWUMCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-IRAKSWIW.js.map → restore-5UEAGG3W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js.map → schema-TDGK6N3I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js.map → schema-UE5KKAUX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-KP6H7COV.js.map → search-FP7MEU4S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-CX5UMV4H.js.map → search-K4CFLQ5S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js.map → stats-NJJCALEZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js.map → stats-XT6QRKQY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-QNDXZQCW.js.map → test-UFSJ5YIO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-HU2BS7EY.js.map → test-YCDAUBWF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-UXDLTEOZ.js.map → update-MTCFES6X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js.map → update-Y5WQVT5O.js.map} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
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]="5fee19a0-e879-5644-9726-fdf6ad3fc754")}catch(e){}}();
|
|
3
3
|
import {
|
|
4
4
|
parseLimit
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2CHRYUXL.js";
|
|
6
6
|
import {
|
|
7
7
|
nowIso
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-K2VYLVX4.js";
|
|
9
9
|
import {
|
|
10
10
|
EXIT_CODE,
|
|
11
11
|
PmCliError,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
resolveGlobalPmRoot,
|
|
27
27
|
resolvePmRoot,
|
|
28
28
|
writeFileAtomic
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-I66WE2HE.js";
|
|
30
30
|
|
|
31
31
|
// dist/cli/commands/test-runs.js
|
|
32
32
|
import os from "node:os";
|
|
@@ -449,6 +449,143 @@ async function appendFileOrdered(queue, filePath, text) {
|
|
|
449
449
|
await queue;
|
|
450
450
|
await fs.appendFile(filePath, text, "utf8");
|
|
451
451
|
}
|
|
452
|
+
function resolvePositiveEnvInteger(name, fallback) {
|
|
453
|
+
const parsed = Number.parseInt(process.env[name] ?? "", 10);
|
|
454
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
455
|
+
}
|
|
456
|
+
function buildBackgroundWorkerEnv(record) {
|
|
457
|
+
return {
|
|
458
|
+
...process.env,
|
|
459
|
+
PM_PATH: record.pm_root,
|
|
460
|
+
PM_GLOBAL_PATH: record.global_pm_root,
|
|
461
|
+
FORCE_COLOR: "0"
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
function buildBackgroundWorkerChildArgs(record, noExtensions) {
|
|
465
|
+
return noExtensions ? ["--no-extensions", ...record.command_args] : [...record.command_args];
|
|
466
|
+
}
|
|
467
|
+
function createBackgroundRunRecordWriteScheduler(pmRoot, record) {
|
|
468
|
+
let writeQueue = Promise.resolve();
|
|
469
|
+
return {
|
|
470
|
+
schedule() {
|
|
471
|
+
writeQueue = writeQueue.then(async () => {
|
|
472
|
+
try {
|
|
473
|
+
await writeBackgroundRunRecord(pmRoot, record);
|
|
474
|
+
} catch {
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
},
|
|
478
|
+
async flush() {
|
|
479
|
+
await writeQueue;
|
|
480
|
+
}
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
function requestChildSignal(child, signal) {
|
|
484
|
+
try {
|
|
485
|
+
child.kill(signal);
|
|
486
|
+
} catch {
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
async function requestBackgroundWorkerStop(record, child, state, scheduleRecordWrite) {
|
|
490
|
+
if (state.stopRequested) {
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
state.stopRequested = true;
|
|
494
|
+
record.stop_requested_at = nowIso();
|
|
495
|
+
record.progress = {
|
|
496
|
+
...record.progress,
|
|
497
|
+
phase: "stopping",
|
|
498
|
+
message: "Stop requested for background run.",
|
|
499
|
+
heartbeat_at: nowIso()
|
|
500
|
+
};
|
|
501
|
+
scheduleRecordWrite();
|
|
502
|
+
requestChildSignal(child, "SIGTERM");
|
|
503
|
+
const forceTimer = setTimeout(() => requestChildSignal(child, "SIGKILL"), resolvePositiveEnvInteger("PM_BACKGROUND_RUN_FORCE_KILL_DELAY_MS", DEFAULT_BACKGROUND_RUN_FORCE_KILL_DELAY_MS));
|
|
504
|
+
forceTimer.unref?.();
|
|
505
|
+
}
|
|
506
|
+
function buildItemBackgroundProgress(line, progressPatch, phase) {
|
|
507
|
+
return {
|
|
508
|
+
phase,
|
|
509
|
+
message: line,
|
|
510
|
+
heartbeat_at: nowIso(),
|
|
511
|
+
item_index: progressPatch.item_index,
|
|
512
|
+
item_total: progressPatch.item_total,
|
|
513
|
+
item_id: progressPatch.item_id,
|
|
514
|
+
linked_test_index: void 0,
|
|
515
|
+
linked_test_total: void 0,
|
|
516
|
+
current_command: void 0,
|
|
517
|
+
elapsed_ms: void 0
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
function buildLinkedTestBackgroundProgress(line, record, progressPatch, phase) {
|
|
521
|
+
return {
|
|
522
|
+
phase,
|
|
523
|
+
message: line,
|
|
524
|
+
heartbeat_at: nowIso(),
|
|
525
|
+
item_index: progressPatch.item_index ?? record.progress?.item_index,
|
|
526
|
+
item_total: progressPatch.item_total ?? record.progress?.item_total,
|
|
527
|
+
item_id: progressPatch.item_id ?? record.progress?.item_id,
|
|
528
|
+
linked_test_index: progressPatch.linked_test_index,
|
|
529
|
+
linked_test_total: progressPatch.linked_test_total,
|
|
530
|
+
current_command: progressPatch.current_command,
|
|
531
|
+
elapsed_ms: progressPatch.elapsed_ms
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
function applyBackgroundWorkerProgressLine(record, line, stopRequested) {
|
|
535
|
+
const progressPatch = parseProgressLine(line);
|
|
536
|
+
if (!progressPatch) {
|
|
537
|
+
return false;
|
|
538
|
+
}
|
|
539
|
+
const phase = record.progress?.phase === "stopping" ? "stopping" : "running";
|
|
540
|
+
record.progress = progressPatch.item_id ? buildItemBackgroundProgress(line, progressPatch, phase) : buildLinkedTestBackgroundProgress(line, record, progressPatch, phase);
|
|
541
|
+
if (progressPatch.phase === "finished" && !stopRequested) {
|
|
542
|
+
record.progress.phase = "running";
|
|
543
|
+
}
|
|
544
|
+
return true;
|
|
545
|
+
}
|
|
546
|
+
function parseBackgroundWorkerStdout(stdoutBuffer) {
|
|
547
|
+
if (stdoutBuffer.trim().length === 0) {
|
|
548
|
+
return null;
|
|
549
|
+
}
|
|
550
|
+
try {
|
|
551
|
+
return JSON.parse(stdoutBuffer);
|
|
552
|
+
} catch {
|
|
553
|
+
return null;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
function resolveBackgroundWorkerFinalStatus(record, stopRequested) {
|
|
557
|
+
if (stopRequested) {
|
|
558
|
+
return "stopped";
|
|
559
|
+
}
|
|
560
|
+
const passed = record.exit_code === 0 && (record.summary?.failed ?? 0) === 0 && record.summary?.fail_on_skipped_triggered !== true;
|
|
561
|
+
return passed ? "passed" : "failed";
|
|
562
|
+
}
|
|
563
|
+
function buildFinishedBackgroundProgress(record, stopRequested) {
|
|
564
|
+
return {
|
|
565
|
+
phase: "finished",
|
|
566
|
+
message: stopRequested ? "Background run stopped." : `Background run finished with status=${record.status}.`,
|
|
567
|
+
heartbeat_at: nowIso(),
|
|
568
|
+
item_index: record.progress?.item_index,
|
|
569
|
+
item_total: record.progress?.item_total,
|
|
570
|
+
item_id: record.progress?.item_id,
|
|
571
|
+
linked_test_index: record.progress?.linked_test_index,
|
|
572
|
+
linked_test_total: record.progress?.linked_test_total,
|
|
573
|
+
current_command: record.progress?.current_command,
|
|
574
|
+
elapsed_ms: record.progress?.elapsed_ms
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
async function writeBackgroundWorkerResult(record, parsedResult, stdoutBuffer) {
|
|
578
|
+
if (parsedResult !== null) {
|
|
579
|
+
await writeFileAtomic(record.result_path, `${JSON.stringify(parsedResult, null, 2)}
|
|
580
|
+
`);
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
583
|
+
await writeFileAtomic(record.result_path, `${JSON.stringify({
|
|
584
|
+
parse_error: "Background run output was not valid JSON.",
|
|
585
|
+
stdout_excerpt: tailLines(stdoutBuffer, DEFAULT_BACKGROUND_RUN_LOG_TAIL_LINES)
|
|
586
|
+
}, null, 2)}
|
|
587
|
+
`);
|
|
588
|
+
}
|
|
452
589
|
async function runBackgroundTestRunWorker(pmRoot, runId, noExtensions = false) {
|
|
453
590
|
const loaded = await readBackgroundTestRunRecord(pmRoot, runId);
|
|
454
591
|
if (!loaded) {
|
|
@@ -466,14 +603,9 @@ async function runBackgroundTestRunWorker(pmRoot, runId, noExtensions = false) {
|
|
|
466
603
|
}
|
|
467
604
|
};
|
|
468
605
|
const cliEntry = await resolveBackgroundCliEntry(process.cwd());
|
|
469
|
-
const env =
|
|
470
|
-
...process.env,
|
|
471
|
-
PM_PATH: record.pm_root,
|
|
472
|
-
PM_GLOBAL_PATH: record.global_pm_root,
|
|
473
|
-
FORCE_COLOR: "0"
|
|
474
|
-
};
|
|
606
|
+
const env = buildBackgroundWorkerEnv(record);
|
|
475
607
|
await writeBackgroundRunRecord(pmRoot, record);
|
|
476
|
-
const childArgs =
|
|
608
|
+
const childArgs = buildBackgroundWorkerChildArgs(record, noExtensions);
|
|
477
609
|
const child = spawn(process.execPath, [cliEntry, ...childArgs], {
|
|
478
610
|
cwd: process.cwd(),
|
|
479
611
|
env,
|
|
@@ -482,104 +614,31 @@ async function runBackgroundTestRunWorker(pmRoot, runId, noExtensions = false) {
|
|
|
482
614
|
windowsHide: true
|
|
483
615
|
});
|
|
484
616
|
record.child_pid = child.pid;
|
|
485
|
-
|
|
486
|
-
const scheduleRecordWrite =
|
|
487
|
-
writeQueue = writeQueue.then(async () => {
|
|
488
|
-
try {
|
|
489
|
-
await writeBackgroundRunRecord(pmRoot, record);
|
|
490
|
-
} catch {
|
|
491
|
-
}
|
|
492
|
-
});
|
|
493
|
-
};
|
|
617
|
+
const recordWriteScheduler = createBackgroundRunRecordWriteScheduler(pmRoot, record);
|
|
618
|
+
const scheduleRecordWrite = recordWriteScheduler.schedule;
|
|
494
619
|
let stdoutWriteQueue = Promise.resolve();
|
|
495
620
|
let stderrWriteQueue = Promise.resolve();
|
|
496
621
|
let stdoutBuffer = "";
|
|
497
622
|
let stderrBuffer = "";
|
|
498
|
-
|
|
499
|
-
const requestStop = async () => {
|
|
500
|
-
if (stopRequested) {
|
|
501
|
-
return;
|
|
502
|
-
}
|
|
503
|
-
stopRequested = true;
|
|
504
|
-
record.stop_requested_at = nowIso();
|
|
505
|
-
record.progress = {
|
|
506
|
-
...record.progress,
|
|
507
|
-
phase: "stopping",
|
|
508
|
-
message: "Stop requested for background run.",
|
|
509
|
-
heartbeat_at: nowIso()
|
|
510
|
-
};
|
|
511
|
-
scheduleRecordWrite();
|
|
512
|
-
try {
|
|
513
|
-
child.kill("SIGTERM");
|
|
514
|
-
} catch {
|
|
515
|
-
}
|
|
516
|
-
const forceKillDelayMs = Number.parseInt(process.env.PM_BACKGROUND_RUN_FORCE_KILL_DELAY_MS ?? "", 10);
|
|
517
|
-
const delay = Number.isFinite(forceKillDelayMs) && forceKillDelayMs > 0 ? forceKillDelayMs : DEFAULT_BACKGROUND_RUN_FORCE_KILL_DELAY_MS;
|
|
518
|
-
const forceTimer = setTimeout(() => {
|
|
519
|
-
try {
|
|
520
|
-
child.kill("SIGKILL");
|
|
521
|
-
} catch {
|
|
522
|
-
}
|
|
523
|
-
}, delay);
|
|
524
|
-
forceTimer.unref?.();
|
|
525
|
-
};
|
|
623
|
+
const stopState = { stopRequested: false };
|
|
526
624
|
const onSignal = () => {
|
|
527
|
-
void
|
|
625
|
+
void requestBackgroundWorkerStop(record, child, stopState, scheduleRecordWrite);
|
|
528
626
|
};
|
|
529
627
|
process.on("SIGTERM", onSignal);
|
|
530
628
|
process.on("SIGINT", onSignal);
|
|
531
|
-
const resourceIntervalMs = Number.parseInt(process.env.PM_BACKGROUND_RUN_RESOURCE_INTERVAL_MS ?? "", 10);
|
|
532
|
-
const resourceInterval = Number.isFinite(resourceIntervalMs) && resourceIntervalMs > 0 ? resourceIntervalMs : DEFAULT_BACKGROUND_RUN_RESOURCE_SNAPSHOT_INTERVAL_MS;
|
|
533
629
|
const resourceTimer = setInterval(() => {
|
|
534
630
|
void (async () => {
|
|
535
631
|
record.resource = await buildResourceSnapshot(record);
|
|
536
632
|
record.progress.heartbeat_at = nowIso();
|
|
537
633
|
scheduleRecordWrite();
|
|
538
634
|
})();
|
|
539
|
-
},
|
|
635
|
+
}, resolvePositiveEnvInteger("PM_BACKGROUND_RUN_RESOURCE_INTERVAL_MS", DEFAULT_BACKGROUND_RUN_RESOURCE_SNAPSHOT_INTERVAL_MS));
|
|
540
636
|
resourceTimer.unref?.();
|
|
541
637
|
child.stdout?.on("data", (chunk) => {
|
|
542
638
|
const text = chunk.toString("utf8");
|
|
543
639
|
stdoutBuffer += text;
|
|
544
640
|
stdoutWriteQueue = appendFileOrdered(stdoutWriteQueue, record.stdout_path, text);
|
|
545
641
|
});
|
|
546
|
-
const applyProgressLine = (line) => {
|
|
547
|
-
const progressPatch = parseProgressLine(line);
|
|
548
|
-
if (!progressPatch) {
|
|
549
|
-
return false;
|
|
550
|
-
}
|
|
551
|
-
if (progressPatch.item_id) {
|
|
552
|
-
record.progress = {
|
|
553
|
-
phase: record.progress.phase === "stopping" ? "stopping" : "running",
|
|
554
|
-
message: line,
|
|
555
|
-
heartbeat_at: nowIso(),
|
|
556
|
-
item_index: progressPatch.item_index,
|
|
557
|
-
item_total: progressPatch.item_total,
|
|
558
|
-
item_id: progressPatch.item_id,
|
|
559
|
-
linked_test_index: void 0,
|
|
560
|
-
linked_test_total: void 0,
|
|
561
|
-
current_command: void 0,
|
|
562
|
-
elapsed_ms: void 0
|
|
563
|
-
};
|
|
564
|
-
return true;
|
|
565
|
-
}
|
|
566
|
-
record.progress = {
|
|
567
|
-
phase: record.progress.phase === "stopping" ? "stopping" : "running",
|
|
568
|
-
message: line,
|
|
569
|
-
heartbeat_at: nowIso(),
|
|
570
|
-
item_index: progressPatch.item_index ?? record.progress?.item_index,
|
|
571
|
-
item_total: progressPatch.item_total ?? record.progress?.item_total,
|
|
572
|
-
item_id: progressPatch.item_id ?? record.progress?.item_id,
|
|
573
|
-
linked_test_index: progressPatch.linked_test_index,
|
|
574
|
-
linked_test_total: progressPatch.linked_test_total,
|
|
575
|
-
current_command: progressPatch.current_command,
|
|
576
|
-
elapsed_ms: progressPatch.elapsed_ms
|
|
577
|
-
};
|
|
578
|
-
if (progressPatch.phase === "finished" && !stopRequested) {
|
|
579
|
-
record.progress.phase = "running";
|
|
580
|
-
}
|
|
581
|
-
return true;
|
|
582
|
-
};
|
|
583
642
|
child.stderr?.on("data", (chunk) => {
|
|
584
643
|
const text = chunk.toString("utf8");
|
|
585
644
|
stderrWriteQueue = appendFileOrdered(stderrWriteQueue, record.stderr_path, text);
|
|
@@ -589,7 +648,7 @@ async function runBackgroundTestRunWorker(pmRoot, runId, noExtensions = false) {
|
|
|
589
648
|
let progressChanged = false;
|
|
590
649
|
for (const part of parts) {
|
|
591
650
|
const line = part.trimEnd();
|
|
592
|
-
if (line.length > 0 &&
|
|
651
|
+
if (line.length > 0 && applyBackgroundWorkerProgressLine(record, line, stopState.stopRequested)) {
|
|
593
652
|
progressChanged = true;
|
|
594
653
|
}
|
|
595
654
|
}
|
|
@@ -613,49 +672,22 @@ async function runBackgroundTestRunWorker(pmRoot, runId, noExtensions = false) {
|
|
|
613
672
|
await stdoutWriteQueue;
|
|
614
673
|
await stderrWriteQueue;
|
|
615
674
|
const trailingStderrLine = stderrBuffer.trimEnd();
|
|
616
|
-
if (trailingStderrLine.length > 0 &&
|
|
675
|
+
if (trailingStderrLine.length > 0 && applyBackgroundWorkerProgressLine(record, trailingStderrLine, stopState.stopRequested)) {
|
|
617
676
|
scheduleRecordWrite();
|
|
618
677
|
}
|
|
619
678
|
stderrBuffer = "";
|
|
620
|
-
|
|
621
|
-
if (stdoutBuffer.trim().length > 0) {
|
|
622
|
-
try {
|
|
623
|
-
parsedResult = JSON.parse(stdoutBuffer);
|
|
624
|
-
} catch {
|
|
625
|
-
parsedResult = null;
|
|
626
|
-
}
|
|
627
|
-
}
|
|
679
|
+
const parsedResult = parseBackgroundWorkerStdout(stdoutBuffer);
|
|
628
680
|
const evaluated = evaluateWorkerResult(record.kind, parsedResult);
|
|
629
681
|
record.summary = evaluated.summary;
|
|
630
682
|
record.exit_code = typeof exitCode === "number" ? exitCode : void 0;
|
|
631
683
|
record.signal = signal ?? void 0;
|
|
632
684
|
record.finished_at = nowIso();
|
|
633
|
-
record.status =
|
|
634
|
-
record.progress =
|
|
635
|
-
phase: "finished",
|
|
636
|
-
message: stopRequested ? "Background run stopped." : `Background run finished with status=${record.status}.`,
|
|
637
|
-
heartbeat_at: nowIso(),
|
|
638
|
-
item_index: record.progress?.item_index,
|
|
639
|
-
item_total: record.progress?.item_total,
|
|
640
|
-
item_id: record.progress?.item_id,
|
|
641
|
-
linked_test_index: record.progress?.linked_test_index,
|
|
642
|
-
linked_test_total: record.progress?.linked_test_total,
|
|
643
|
-
current_command: record.progress?.current_command,
|
|
644
|
-
elapsed_ms: record.progress?.elapsed_ms
|
|
645
|
-
};
|
|
685
|
+
record.status = resolveBackgroundWorkerFinalStatus(record, stopState.stopRequested);
|
|
686
|
+
record.progress = buildFinishedBackgroundProgress(record, stopState.stopRequested);
|
|
646
687
|
record.resource = await buildResourceSnapshot(record);
|
|
647
|
-
|
|
648
|
-
await writeFileAtomic(record.result_path, `${JSON.stringify(parsedResult, null, 2)}
|
|
649
|
-
`);
|
|
650
|
-
} else {
|
|
651
|
-
await writeFileAtomic(record.result_path, `${JSON.stringify({
|
|
652
|
-
parse_error: "Background run output was not valid JSON.",
|
|
653
|
-
stdout_excerpt: tailLines(stdoutBuffer, DEFAULT_BACKGROUND_RUN_LOG_TAIL_LINES)
|
|
654
|
-
}, null, 2)}
|
|
655
|
-
`);
|
|
656
|
-
}
|
|
688
|
+
await writeBackgroundWorkerResult(record, parsedResult, stdoutBuffer);
|
|
657
689
|
await writeBackgroundRunRecord(pmRoot, record);
|
|
658
|
-
await
|
|
690
|
+
await recordWriteScheduler.flush();
|
|
659
691
|
return record;
|
|
660
692
|
}
|
|
661
693
|
async function listBackgroundTestRuns(pmRoot, options) {
|
|
@@ -719,6 +751,32 @@ async function getBackgroundTestRunStatus(pmRoot, runId) {
|
|
|
719
751
|
}
|
|
720
752
|
};
|
|
721
753
|
}
|
|
754
|
+
function sendBackgroundRunStopSignal(record, force) {
|
|
755
|
+
const signal = force ? "SIGKILL" : "SIGTERM";
|
|
756
|
+
if (!isPidRunning(record.worker_pid) || !record.worker_pid) {
|
|
757
|
+
return "none";
|
|
758
|
+
}
|
|
759
|
+
try {
|
|
760
|
+
process.kill(record.worker_pid, signal);
|
|
761
|
+
return signal;
|
|
762
|
+
} catch {
|
|
763
|
+
return "none";
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
function buildStoppingBackgroundProgress(record, signalSent) {
|
|
767
|
+
return {
|
|
768
|
+
phase: "stopping",
|
|
769
|
+
message: signalSent === "none" ? "Run marked stopped." : `Stop requested via ${signalSent}.`,
|
|
770
|
+
heartbeat_at: nowIso(),
|
|
771
|
+
item_index: record.progress?.item_index,
|
|
772
|
+
item_total: record.progress?.item_total,
|
|
773
|
+
item_id: record.progress?.item_id,
|
|
774
|
+
linked_test_index: record.progress?.linked_test_index,
|
|
775
|
+
linked_test_total: record.progress?.linked_test_total,
|
|
776
|
+
current_command: record.progress?.current_command,
|
|
777
|
+
elapsed_ms: record.progress?.elapsed_ms
|
|
778
|
+
};
|
|
779
|
+
}
|
|
722
780
|
async function stopBackgroundTestRun(pmRoot, runId, force = false) {
|
|
723
781
|
const loaded = await readBackgroundTestRunRecord(pmRoot, runId);
|
|
724
782
|
if (!loaded) {
|
|
@@ -731,33 +789,13 @@ async function stopBackgroundTestRun(pmRoot, runId, force = false) {
|
|
|
731
789
|
signal_sent: "none"
|
|
732
790
|
};
|
|
733
791
|
}
|
|
734
|
-
|
|
735
|
-
const signal = force ? "SIGKILL" : "SIGTERM";
|
|
736
|
-
if (isPidRunning(refreshed.worker_pid) && refreshed.worker_pid) {
|
|
737
|
-
try {
|
|
738
|
-
process.kill(refreshed.worker_pid, signal);
|
|
739
|
-
signalSent = signal;
|
|
740
|
-
} catch {
|
|
741
|
-
signalSent = "none";
|
|
742
|
-
}
|
|
743
|
-
}
|
|
792
|
+
const signalSent = sendBackgroundRunStopSignal(refreshed, force);
|
|
744
793
|
if (signalSent === "none") {
|
|
745
794
|
refreshed.status = "stopped";
|
|
746
795
|
refreshed.finished_at = refreshed.finished_at ?? nowIso();
|
|
747
796
|
}
|
|
748
797
|
refreshed.stop_requested_at = nowIso();
|
|
749
|
-
refreshed.progress =
|
|
750
|
-
phase: "stopping",
|
|
751
|
-
message: signalSent === "none" ? "Run marked stopped." : `Stop requested via ${signalSent}.`,
|
|
752
|
-
heartbeat_at: nowIso(),
|
|
753
|
-
item_index: refreshed.progress?.item_index,
|
|
754
|
-
item_total: refreshed.progress?.item_total,
|
|
755
|
-
item_id: refreshed.progress?.item_id,
|
|
756
|
-
linked_test_index: refreshed.progress?.linked_test_index,
|
|
757
|
-
linked_test_total: refreshed.progress?.linked_test_total,
|
|
758
|
-
current_command: refreshed.progress?.current_command,
|
|
759
|
-
elapsed_ms: refreshed.progress?.elapsed_ms
|
|
760
|
-
};
|
|
798
|
+
refreshed.progress = buildStoppingBackgroundProgress(refreshed, signalSent);
|
|
761
799
|
await writeBackgroundRunRecord(pmRoot, refreshed);
|
|
762
800
|
return {
|
|
763
801
|
run: refreshed,
|
|
@@ -985,6 +1023,6 @@ export {
|
|
|
985
1023
|
runTestRunsStop,
|
|
986
1024
|
runTestRunsWorker
|
|
987
1025
|
};
|
|
988
|
-
//# sourceMappingURL=test-runs-
|
|
1026
|
+
//# sourceMappingURL=test-runs-FK5E75AA.js.map
|
|
989
1027
|
|
|
990
|
-
//# debugId=
|
|
1028
|
+
//# debugId=5fee19a0-e879-5644-9726-fdf6ad3fc754
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../cli/commands/test-runs.ts","../../../../../../../../core/test/background-runs.ts"],"sourcesContent":["/**\n * @module cli/commands/test-runs\n *\n * Implements the pm test runs command surface and its agent-facing runtime behavior.\n */\nimport 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\n/**\n * Documents the start background run command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface StartBackgroundRunCommandOptions {\n kind: BackgroundTestRunKind;\n commandArgs: string[];\n targetId?: string;\n statusFilter?: string;\n author?: string;\n noExtensions?: boolean;\n}\n\n/**\n * Documents the start background run result payload exchanged by command, SDK, and package integrations.\n */\nexport interface StartBackgroundRunResult {\n started: boolean;\n duplicate_of?: string;\n run: unknown;\n}\n\n/**\n * Implements run start background run for the public runtime surface of this module.\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\n/**\n * Documents the test runs list command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface TestRunsListCommandOptions {\n status?: string;\n limit?: string;\n}\n\n/**\n * Implements run test runs list for the public runtime surface of this module.\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\n/**\n * Implements run test runs status for the public runtime surface of this module.\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\n/**\n * Documents the test runs logs command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface TestRunsLogsCommandOptions {\n stream?: string;\n tail?: string;\n}\n\n/**\n * Implements run test runs logs for the public runtime surface of this module.\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\n/**\n * Documents the test runs stop command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface TestRunsStopCommandOptions {\n force?: boolean;\n}\n\n/**\n * Implements run test runs stop for the public runtime surface of this module.\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\n/**\n * Documents the test runs resume command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface TestRunsResumeCommandOptions {\n author?: string;\n noExtensions?: boolean;\n}\n\n/**\n * Implements run test runs resume for the public runtime surface of this module.\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\n/**\n * Implements run test runs worker for the public runtime surface of this module.\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","/**\n * @module core/test/background-runs\n *\n * Runs and records linked-test orchestration for Background Runs.\n */\nimport fs from \"node:fs/promises\";\nimport { spawn, type ChildProcess } 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\n/**\n * Restricts background test run kind values accepted by command, SDK, and storage contracts.\n */\nexport type BackgroundTestRunKind = \"test\" | \"test-all\";\n\n/**\n * Restricts background test run status values accepted by command, SDK, and storage contracts.\n */\nexport type BackgroundTestRunStatus = \"queued\" | \"running\" | \"passed\" | \"failed\" | \"stopped\" | \"canceled\";\n\n/**\n * Restricts background log stream values accepted by command, SDK, and storage contracts.\n */\nexport type BackgroundLogStream = \"stdout\" | \"stderr\" | \"both\";\n\n/**\n * Documents the background run progress payload exchanged by command, SDK, and package integrations.\n */\nexport interface BackgroundRunProgress {\n phase: \"queued\" | \"running\" | \"stopping\" | \"finished\";\n message?: string;\n item_index?: number;\n item_total?: number;\n item_id?: string;\n linked_test_index?: number;\n linked_test_total?: number;\n current_command?: string;\n elapsed_ms?: number;\n heartbeat_at?: string;\n}\n\n/**\n * Documents the background run resource snapshot payload exchanged by command, SDK, and package integrations.\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\n/**\n * Documents the background run summary payload exchanged by command, SDK, and package integrations.\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\n/**\n * Documents the background test run record payload exchanged by command, SDK, and package integrations.\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\n/**\n * Documents the start background test run options payload exchanged by command, SDK, and package integrations.\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\n/**\n * Documents the start background test run result payload exchanged by command, SDK, and package integrations.\n */\nexport interface StartBackgroundTestRunResult {\n started: boolean;\n run: BackgroundTestRunRecord;\n duplicate_of?: string;\n}\n\n/**\n * Documents the spawn background test run worker options payload exchanged by command, SDK, and package integrations.\n */\nexport interface SpawnBackgroundTestRunWorkerOptions {\n pmRoot: string;\n runId: string;\n noExtensions?: boolean;\n}\n\n/**\n * Documents the stop background test run result payload exchanged by command, SDK, and package integrations.\n */\nexport interface StopBackgroundTestRunResult {\n run: BackgroundTestRunRecord;\n signal_sent: \"SIGTERM\" | \"SIGKILL\" | \"none\";\n}\n\n/**\n * Documents the list background test run options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ListBackgroundTestRunOptions {\n status?: BackgroundTestRunStatus;\n limit?: number;\n}\n\n/**\n * Documents the background run health payload exchanged by command, SDK, and package integrations.\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\n/**\n * Documents the background run status view payload exchanged by command, SDK, and package integrations.\n */\nexport interface BackgroundRunStatusView {\n run: BackgroundTestRunRecord;\n health: BackgroundRunHealth;\n}\n\n/**\n * Documents the background run logs result payload exchanged by command, SDK, and package integrations.\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\ninterface BackgroundWorkerStopState {\n stopRequested: boolean;\n}\n\ninterface BackgroundRunRecordWriteScheduler {\n schedule: () => void;\n flush: () => Promise<void>;\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\n/**\n * Implements build background test run fingerprint for the public runtime surface of this module.\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\n/**\n * Implements read background test run record for the public runtime surface of this module.\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 /* c8 ignore next -- /proc entries can disappear between liveness and stat reads. */\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 testAllMatch = line.match(/\\[pm test-all\\]\\s+item\\s+(\\d+)\\/(\\d+)\\s+(start|end)\\s+id=([^\\s]+)/i);\n if (testAllMatch) {\n const itemIndex = Number.parseInt(testAllMatch[1], 10);\n const itemTotal = Number.parseInt(testAllMatch[2], 10);\n return {\n item_index: itemIndex,\n item_total: itemTotal,\n item_id: testAllMatch[4],\n linked_test_index: undefined,\n linked_test_total: undefined,\n current_command: undefined,\n elapsed_ms: undefined,\n heartbeat_at: nowIso(),\n phase: testAllMatch[3]?.toLowerCase() === \"end\" ? \"finished\" : \"running\",\n };\n }\n const linkedTestMatch = line.match(/\\[pm test\\]\\s+linked-test\\s+(\\d+)\\/(\\d+)\\s+(start|running|end)(?:.*elapsed_ms=(\\d+))?/i);\n if (!linkedTestMatch) {\n return null;\n }\n const index = Number.parseInt(linkedTestMatch[1], 10);\n const total = Number.parseInt(linkedTestMatch[2], 10);\n const elapsed = linkedTestMatch[4] ? Number.parseInt(linkedTestMatch[4], 10) : undefined;\n const commandMatch = line.match(/\\scommand=\"((?:\\\\.|[^\"\\\\])*)\"/);\n const currentCommand = commandMatch\n ? commandMatch[1].replaceAll('\\\\\"', '\"').replaceAll(\"\\\\\\\\\", \"\\\\\")\n : undefined;\n return {\n linked_test_index: index,\n linked_test_total: total,\n current_command: currentCommand,\n elapsed_ms: Number.isFinite(elapsed) ? elapsed : undefined,\n heartbeat_at: nowIso(),\n phase: linkedTestMatch[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\n/**\n * Implements start background test run for the public runtime surface of this module.\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\n/**\n * Implements spawn background test run worker for the public runtime surface of this module.\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\nfunction resolvePositiveEnvInteger(name: string, fallback: number): number {\n const parsed = Number.parseInt(process.env[name] ?? \"\", 10);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction buildBackgroundWorkerEnv(record: BackgroundTestRunRecord): NodeJS.ProcessEnv {\n return {\n ...process.env,\n PM_PATH: record.pm_root,\n PM_GLOBAL_PATH: record.global_pm_root,\n FORCE_COLOR: \"0\",\n };\n}\n\nfunction buildBackgroundWorkerChildArgs(record: BackgroundTestRunRecord, noExtensions: boolean): string[] {\n return noExtensions ? [\"--no-extensions\", ...record.command_args] : [...record.command_args];\n}\n\nfunction createBackgroundRunRecordWriteScheduler(\n pmRoot: string,\n record: BackgroundTestRunRecord,\n): BackgroundRunRecordWriteScheduler {\n let writeQueue: Promise<void> = Promise.resolve();\n return {\n schedule(): 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 async flush(): Promise<void> {\n await writeQueue;\n },\n };\n}\n\nfunction requestChildSignal(child: ChildProcess, signal: NodeJS.Signals): void {\n try {\n child.kill(signal);\n } catch {\n // Child may already be gone.\n }\n}\n\nasync function requestBackgroundWorkerStop(\n record: BackgroundTestRunRecord,\n child: ChildProcess,\n state: BackgroundWorkerStopState,\n scheduleRecordWrite: () => void,\n): Promise<void> {\n if (state.stopRequested) {\n return;\n }\n state.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 requestChildSignal(child, \"SIGTERM\");\n const forceTimer = setTimeout(() => requestChildSignal(child, \"SIGKILL\"), resolvePositiveEnvInteger(\n \"PM_BACKGROUND_RUN_FORCE_KILL_DELAY_MS\",\n DEFAULT_BACKGROUND_RUN_FORCE_KILL_DELAY_MS,\n ));\n forceTimer.unref?.();\n}\n\nfunction buildItemBackgroundProgress(line: string, progressPatch: Partial<BackgroundRunProgress>, phase: \"running\" | \"stopping\"): BackgroundRunProgress {\n return {\n phase,\n message: line,\n heartbeat_at: nowIso(),\n item_index: progressPatch.item_index,\n item_total: progressPatch.item_total,\n item_id: progressPatch.item_id,\n linked_test_index: undefined,\n linked_test_total: undefined,\n current_command: undefined,\n elapsed_ms: undefined,\n };\n}\n\nfunction buildLinkedTestBackgroundProgress(\n line: string,\n record: BackgroundTestRunRecord,\n progressPatch: Partial<BackgroundRunProgress>,\n phase: \"running\" | \"stopping\",\n): BackgroundRunProgress {\n return {\n phase,\n message: line,\n heartbeat_at: nowIso(),\n item_index: progressPatch.item_index ?? record.progress?.item_index,\n item_total: progressPatch.item_total ?? record.progress?.item_total,\n item_id: progressPatch.item_id ?? record.progress?.item_id,\n linked_test_index: progressPatch.linked_test_index,\n linked_test_total: progressPatch.linked_test_total,\n current_command: progressPatch.current_command,\n elapsed_ms: progressPatch.elapsed_ms,\n };\n}\n\nfunction applyBackgroundWorkerProgressLine(record: BackgroundTestRunRecord, line: string, stopRequested: boolean): boolean {\n const progressPatch = parseProgressLine(line);\n if (!progressPatch) {\n return false;\n }\n const phase = record.progress?.phase === \"stopping\" ? \"stopping\" : \"running\";\n record.progress = progressPatch.item_id\n ? buildItemBackgroundProgress(line, progressPatch, phase)\n : buildLinkedTestBackgroundProgress(line, record, progressPatch, phase);\n if (progressPatch.phase === \"finished\" && !stopRequested) {\n record.progress.phase = \"running\";\n }\n return true;\n}\n\nfunction parseBackgroundWorkerStdout(stdoutBuffer: string): unknown | null {\n if (stdoutBuffer.trim().length === 0) {\n return null;\n }\n try {\n return JSON.parse(stdoutBuffer) as unknown;\n } catch {\n return null;\n }\n}\n\nfunction resolveBackgroundWorkerFinalStatus(record: BackgroundTestRunRecord, stopRequested: boolean): BackgroundTestRunStatus {\n if (stopRequested) {\n return \"stopped\";\n }\n const passed = record.exit_code === 0 && (record.summary?.failed ?? 0) === 0 && record.summary?.fail_on_skipped_triggered !== true;\n return passed ? \"passed\" : \"failed\";\n}\n\nfunction buildFinishedBackgroundProgress(record: BackgroundTestRunRecord, stopRequested: boolean): BackgroundRunProgress {\n return {\n phase: \"finished\",\n message: stopRequested ? \"Background run stopped.\" : `Background run finished with status=${record.status}.`,\n heartbeat_at: nowIso(),\n item_index: record.progress?.item_index,\n item_total: record.progress?.item_total,\n item_id: record.progress?.item_id,\n linked_test_index: record.progress?.linked_test_index,\n linked_test_total: record.progress?.linked_test_total,\n current_command: record.progress?.current_command,\n elapsed_ms: record.progress?.elapsed_ms,\n };\n}\n\nasync function writeBackgroundWorkerResult(record: BackgroundTestRunRecord, parsedResult: unknown | null, stdoutBuffer: string): Promise<void> {\n if (parsedResult !== null) {\n await writeFileAtomic(record.result_path, `${JSON.stringify(parsedResult, null, 2)}\\n`);\n return;\n }\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\n/**\n * Implements run background test run worker for the public runtime surface of this module.\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 = buildBackgroundWorkerEnv(record);\n await writeBackgroundRunRecord(pmRoot, record);\n\n const childArgs = buildBackgroundWorkerChildArgs(record, noExtensions);\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 const recordWriteScheduler = createBackgroundRunRecordWriteScheduler(pmRoot, record);\n const scheduleRecordWrite = recordWriteScheduler.schedule;\n\n let stdoutWriteQueue: Promise<void> = Promise.resolve();\n let stderrWriteQueue: Promise<void> = Promise.resolve();\n let stdoutBuffer = \"\";\n let stderrBuffer = \"\";\n const stopState: BackgroundWorkerStopState = { stopRequested: false };\n\n const onSignal = (): void => {\n void requestBackgroundWorkerStop(record, child, stopState, scheduleRecordWrite);\n };\n process.on(\"SIGTERM\", onSignal);\n process.on(\"SIGINT\", onSignal);\n\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 }, resolvePositiveEnvInteger(\"PM_BACKGROUND_RUN_RESOURCE_INTERVAL_MS\", DEFAULT_BACKGROUND_RUN_RESOURCE_SNAPSHOT_INTERVAL_MS));\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\n child.stderr?.on(\"data\", (chunk) => {\n const text = chunk.toString(\"utf8\");\n stderrWriteQueue = appendFileOrdered(stderrWriteQueue, record.stderr_path, text);\n stderrBuffer += text;\n const parts = stderrBuffer.split(/\\r?\\n/);\n stderrBuffer = parts.pop()!;\n let progressChanged = false;\n for (const part of parts) {\n const line = part.trimEnd();\n if (line.length > 0 && applyBackgroundWorkerProgressLine(record, line, stopState.stopRequested)) {\n progressChanged = true;\n }\n }\n if (progressChanged) {\n scheduleRecordWrite();\n }\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 const trailingStderrLine = stderrBuffer.trimEnd();\n if (trailingStderrLine.length > 0 && applyBackgroundWorkerProgressLine(record, trailingStderrLine, stopState.stopRequested)) {\n scheduleRecordWrite();\n }\n stderrBuffer = \"\";\n\n const parsedResult = parseBackgroundWorkerStdout(stdoutBuffer);\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 = resolveBackgroundWorkerFinalStatus(record, stopState.stopRequested);\n record.progress = buildFinishedBackgroundProgress(record, stopState.stopRequested);\n record.resource = await buildResourceSnapshot(record);\n await writeBackgroundWorkerResult(record, parsedResult, stdoutBuffer);\n await writeBackgroundRunRecord(pmRoot, record);\n await recordWriteScheduler.flush();\n return record;\n}\n\n/**\n * Implements list background test runs for the public runtime surface of this module.\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\n/**\n * Implements get background test run status for the public runtime surface of this module.\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\n/* v8 ignore start -- stop-signal branches depend on live process state; command tests cover observable stop behavior */\nfunction sendBackgroundRunStopSignal(record: BackgroundTestRunRecord, force: boolean): \"SIGTERM\" | \"SIGKILL\" | \"none\" {\n const signal: NodeJS.Signals = force ? \"SIGKILL\" : \"SIGTERM\";\n if (!isPidRunning(record.worker_pid) || !record.worker_pid) {\n return \"none\";\n }\n try {\n process.kill(record.worker_pid, signal);\n return signal;\n } catch {\n return \"none\";\n }\n}\n/* v8 ignore stop */\n\nfunction buildStoppingBackgroundProgress(\n record: BackgroundTestRunRecord,\n signalSent: \"SIGTERM\" | \"SIGKILL\" | \"none\",\n): BackgroundRunProgress {\n return {\n phase: \"stopping\",\n message: signalSent === \"none\" ? \"Run marked stopped.\" : `Stop requested via ${signalSent}.`,\n heartbeat_at: nowIso(),\n item_index: record.progress?.item_index,\n item_total: record.progress?.item_total,\n item_id: record.progress?.item_id,\n linked_test_index: record.progress?.linked_test_index,\n linked_test_total: record.progress?.linked_test_total,\n current_command: record.progress?.current_command,\n elapsed_ms: record.progress?.elapsed_ms,\n };\n}\n\n/**\n * Implements stop background test run for the public runtime surface of this module.\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 const signalSent = sendBackgroundRunStopSignal(refreshed, force);\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 = buildStoppingBackgroundProgress(refreshed, signalSent);\n await writeBackgroundRunRecord(pmRoot, refreshed);\n return {\n run: refreshed,\n signal_sent: signalSent,\n };\n}\n\n/**\n * Implements resume background test run for the public runtime surface of this module.\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\n/**\n * Implements read background test run logs for the public runtime surface of this module.\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"],"names":[],"mappings":"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","debugId":"5fee19a0-e879-5644-9726-fdf6ad3fc754"}
|