@unbrained/pm-cli 2026.7.1 → 2026.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +3 -3
- package/CHANGELOG.md +25 -0
- package/CONTRIBUTING.md +2 -2
- package/README.md +1 -1
- package/dist/cli/commander-usage.d.ts +2 -0
- package/dist/cli/commander-usage.js +110 -86
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/activity.js +79 -57
- package/dist/cli/commands/activity.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 +278 -243
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close-many.js +176 -114
- 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 +32 -17
- 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/doctor.js +56 -67
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/shared.js +21 -15
- package/dist/cli/commands/extension/shared.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 +545 -417
- 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-agent-guidance.js +32 -19
- package/dist/cli/commands/init-agent-guidance.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.js +152 -102
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/next.js +60 -40
- 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/profile.js +23 -15
- package/dist/cli/commands/profile.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 +503 -470
- 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 +424 -344
- 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 +738 -671
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +20 -1
- package/dist/cli/commands/validate.js +478 -343
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +406 -361
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-help.js +27 -19
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/help-json-payload.js +57 -49
- package/dist/cli/help-json-payload.js.map +1 -1
- package/dist/cli/main.d.ts +47 -0
- package/dist/cli/main.js +474 -371
- 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 +299 -310
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +763 -779
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +386 -362
- 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.d.ts +4 -0
- package/dist/cli/registration-helpers.js +45 -56
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-5YWLSPGE.js} +9 -9
- package/dist/cli-bundle/chunks/activity-BIML7K2D.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-2V2M3JZU.js} +107 -83
- package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-2V2M3JZU.js.map} +2 -2
- package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-EK7DXML7.js} +108 -84
- package/dist/cli-bundle/chunks/aggregate-EK7DXML7.js.map +1 -0
- package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-EZESUVJT.js} +8 -8
- package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-JFG4WQMG.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-32IUNTG4.js} +158 -119
- package/dist/cli-bundle/chunks/chunk-32IUNTG4.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-3W2HJKJX.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-4EXFFP7T.js} +86 -52
- package/dist/cli-bundle/chunks/chunk-4EXFFP7T.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-4PFVUUYV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-4WB6S4YX.js} +308 -184
- package/dist/cli-bundle/chunks/chunk-4WB6S4YX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-572FKBRL.js} +61 -102
- package/dist/cli-bundle/chunks/chunk-572FKBRL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-5E7N4T2Z.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-5IZUBZBR.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-5JIWFWOZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-67LARBDL.js} +493 -404
- package/dist/cli-bundle/chunks/chunk-67LARBDL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-6CDCWKSX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-6KRFL33E.js} +308 -184
- package/dist/cli-bundle/chunks/chunk-6KRFL33E.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-6NYJGMTY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-7CLLC75T.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-7LYO6S5A.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-A3OQ7TFW.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-AIKU3IIL.js} +153 -90
- package/dist/cli-bundle/chunks/chunk-AIKU3IIL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AJHYQCBJ.js} +39 -5
- package/dist/cli-bundle/chunks/chunk-AJHYQCBJ.js.map +7 -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-OTUHB4HS.js → chunk-BE2SR6QL.js} +92 -77
- package/dist/cli-bundle/chunks/chunk-BE2SR6QL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-BI4R7HI2.js} +75 -53
- package/dist/cli-bundle/chunks/chunk-BI4R7HI2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-CXR3CMBQ.js} +33 -6
- package/dist/cli-bundle/chunks/chunk-CXR3CMBQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-ECU6MMTQ.js} +713 -613
- package/dist/cli-bundle/chunks/chunk-ECU6MMTQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-EJ2OCBHF.js} +54 -30
- package/dist/cli-bundle/chunks/chunk-EJ2OCBHF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-EQURFOMH.js} +41 -26
- package/dist/cli-bundle/chunks/chunk-EQURFOMH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-ER4ME5U2.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-ERG65A2L.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-F6WNBITZ.js} +157 -113
- package/dist/cli-bundle/chunks/chunk-F6WNBITZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-FH2H3CBD.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-FUFFPIYA.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-FZJM2TXF.js} +110 -73
- package/dist/cli-bundle/chunks/chunk-FZJM2TXF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-GUYNUXQT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-GVJE5T7Q.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-HB4FAT3O.js} +42 -60
- package/dist/cli-bundle/chunks/chunk-HB4FAT3O.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-HQAF23Q2.js} +626 -484
- package/dist/cli-bundle/chunks/chunk-HQAF23Q2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-JBZ2NTKX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-JPATY4SE.js} +54 -30
- package/dist/cli-bundle/chunks/chunk-JPATY4SE.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-K5DT2YKM.js} +109 -72
- package/dist/cli-bundle/chunks/chunk-K5DT2YKM.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KEZOIPCR.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-KHVGM5CS.js} +466 -365
- package/dist/cli-bundle/chunks/chunk-KHVGM5CS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-KS6ATO47.js} +288 -175
- package/dist/cli-bundle/chunks/chunk-KS6ATO47.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-L4SLHV6G.js} +463 -362
- package/dist/cli-bundle/chunks/chunk-L4SLHV6G.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-LBE5QFMZ.js} +158 -114
- package/dist/cli-bundle/chunks/chunk-LBE5QFMZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-LCWQP6NM.js} +76 -54
- package/dist/cli-bundle/chunks/chunk-LCWQP6NM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-LOWVNZBZ.js} +91 -76
- package/dist/cli-bundle/chunks/chunk-LOWVNZBZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-MDHWWBNZ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-MEZZZBYX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-MHRS5FUX.js} +288 -175
- package/dist/cli-bundle/chunks/chunk-MHRS5FUX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-NOIEVOK5.js} +391 -313
- package/dist/cli-bundle/chunks/chunk-NOIEVOK5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-NZ7QIUP5.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-OGLGI22K.js} +115 -67
- package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js.map → chunk-OGLGI22K.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-P5L7Z2O6.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-PULUSQAV.js} +492 -403
- package/dist/cli-bundle/chunks/chunk-PULUSQAV.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-QCDTQCMW.js} +22 -30
- package/dist/cli-bundle/chunks/chunk-QCDTQCMW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-QNNQAAZ5.js} +24 -18
- package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-QNNQAAZ5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-RAHINBVP.js} +60 -101
- package/dist/cli-bundle/chunks/chunk-RAHINBVP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-RJH5VQHW.js} +43 -61
- package/dist/cli-bundle/chunks/chunk-RJH5VQHW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-SU2E4AWU.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-SU3TB4NS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-SYE6WMV6.js} +626 -484
- package/dist/cli-bundle/chunks/chunk-SYE6WMV6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-T3P7PMZP.js} +42 -27
- package/dist/cli-bundle/chunks/chunk-T3P7PMZP.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-T4XBKJ3F.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-T6AXEBOP.js} +23 -17
- package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-T6AXEBOP.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-TQ6AX5SQ.js} +58 -69
- package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-TQ6AX5SQ.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-U3S2B7TA.js} +86 -52
- package/dist/cli-bundle/chunks/chunk-U3S2B7TA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-U5TR4N7J.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UMNQZS4H.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-WJA3PXW7.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WRYERRZX.js} +157 -118
- package/dist/cli-bundle/chunks/chunk-WRYERRZX.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-WYOIIFSE.js} +712 -612
- package/dist/cli-bundle/chunks/chunk-WYOIIFSE.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-XRYSCRZR.js} +116 -68
- package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js.map → chunk-XRYSCRZR.js.map} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-YF746GTH.js} +59 -70
- package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-YF746GTH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-YPWUSH72.js} +390 -312
- package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-YPWUSH72.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-YSDFIY7N.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-YSGTMDWC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-YVKZ3ANP.js} +21 -29
- package/dist/cli-bundle/chunks/chunk-YVKZ3ANP.js.map +7 -0
- 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-64HNBBFQ.js → chunk-Z5F6XZXE.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-Z7RPDF2Y.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-ZFTKYWIF.js} +152 -89
- package/dist/cli-bundle/chunks/chunk-ZFTKYWIF.js.map +7 -0
- package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-2BGBGSVI.js} +8 -8
- package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-5GU7OE67.js} +8 -8
- package/dist/cli-bundle/chunks/close-6YODBUIV.js +14 -0
- package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-AFVKPR57.js} +7 -7
- package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-7KLOSYLP.js} +186 -122
- package/dist/cli-bundle/chunks/close-many-7KLOSYLP.js.map +7 -0
- package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-JKUJMHLG.js} +187 -123
- package/dist/cli-bundle/chunks/close-many-JKUJMHLG.js.map +1 -0
- package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-DNWHEBOS.js} +9 -9
- package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-RW23R3VE.js} +9 -9
- package/dist/cli-bundle/chunks/config-AUM5WBYA.js +1072 -0
- package/dist/cli-bundle/chunks/config-AUM5WBYA.js.map +7 -0
- package/dist/cli-bundle/chunks/config-OZWSA2NP.js +1062 -0
- package/dist/cli-bundle/chunks/config-OZWSA2NP.js.map +1 -0
- package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-OYXRGY7S.js} +12 -12
- package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-PKCEHQY3.js} +12 -12
- package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-L6ODXNUM.js} +320 -199
- package/dist/cli-bundle/chunks/contracts-L6ODXNUM.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-X74F2GSM.js} +321 -200
- package/dist/cli-bundle/chunks/contracts-X74F2GSM.js.map +1 -0
- package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-6XOR3HKN.js} +5 -5
- package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-I4NCLBR4.js} +5 -5
- package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-PM45M6PE.js} +12 -12
- package/dist/cli-bundle/chunks/create-Z7YCH3BE.js +28 -0
- package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-7YXHYG67.js} +5 -5
- package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-LPISP43T.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-N2T26FME.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-WATKQDE3.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-6LQ3GLM7.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-Z3X6JZLT.js} +7 -7
- package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-6DCLG52D.js} +10 -10
- package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-Y3ZCUTHK.js} +10 -10
- package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-BNINIMT7.js} +11 -11
- package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-QWE4YYK5.js} +11 -11
- package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-6SGKHS6O.js} +7 -7
- package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-FUYPSOFJ.js} +7 -7
- package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-2Q3K76G2.js} +6 -6
- package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-ATLBWXXD.js} +6 -6
- package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-RUYEMNRF.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-TDWSDR66.js} +3 -3
- package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-2WGLX74N.js} +120 -80
- package/dist/cli-bundle/chunks/get-2WGLX74N.js.map +7 -0
- package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-LY6M2JIM.js} +121 -81
- package/dist/cli-bundle/chunks/get-LY6M2JIM.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-4RKHYS3T.js} +535 -371
- package/dist/cli-bundle/chunks/health-4RKHYS3T.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-TMFVNYRA.js} +534 -370
- package/dist/cli-bundle/chunks/health-TMFVNYRA.js.map +7 -0
- package/dist/cli-bundle/chunks/history-CGNQJXFE.js +18 -0
- package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-SGRRS72R.js} +8 -8
- package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-LOED43R3.js} +213 -134
- package/dist/cli-bundle/chunks/history-compact-LOED43R3.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-V5DNAQHH.js} +214 -135
- package/dist/cli-bundle/chunks/history-compact-V5DNAQHH.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-IRL7WJ3E.js} +9 -9
- package/dist/cli-bundle/chunks/history-redact-N3JK7VBW.js +19 -0
- package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-4WVBVHFR.js} +124 -84
- package/dist/cli-bundle/chunks/history-repair-4WVBVHFR.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-PGYQJMGD.js} +123 -83
- package/dist/cli-bundle/chunks/history-repair-PGYQJMGD.js.map +7 -0
- package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-4GESW7RM.js} +12 -12
- package/dist/cli-bundle/chunks/init-XIDPABA4.js +22 -0
- package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-4BHWFFUV.js} +9 -9
- package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-4FJY7WIW.js} +9 -9
- package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-472TIOVK.js} +8 -8
- package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-D7BF5CL2.js} +8 -8
- package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-D5STGWI2.js} +71 -46
- package/dist/cli-bundle/chunks/next-D5STGWI2.js.map +1 -0
- package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-SFQZVX2B.js} +70 -45
- package/dist/cli-bundle/chunks/next-SFQZVX2B.js.map +7 -0
- package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-6KNOSLIT.js} +9 -9
- package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-W4UEICGF.js} +9 -9
- package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-JO6V7BXO.js} +373 -279
- package/dist/cli-bundle/chunks/plan-JO6V7BXO.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-MJQW5XK3.js} +372 -278
- package/dist/cli-bundle/chunks/plan-MJQW5XK3.js.map +7 -0
- package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-3TOTMUR4.js} +27 -19
- package/dist/cli-bundle/chunks/profile-3TOTMUR4.js.map +7 -0
- package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-WIQY2KCV.js} +28 -20
- package/dist/cli-bundle/chunks/profile-WIQY2KCV.js.map +1 -0
- package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js +416 -0
- package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js.map +7 -0
- package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js +406 -0
- package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-ROFE2YPC.js} +729 -702
- package/dist/cli-bundle/chunks/register-mutation-ROFE2YPC.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-SJWMVIJ2.js} +730 -703
- package/dist/cli-bundle/chunks/register-mutation-SJWMVIJ2.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-IADFVH53.js} +389 -365
- package/dist/cli-bundle/chunks/register-operations-IADFVH53.js.map +7 -0
- package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js +510 -0
- package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-3QJY43CY.js} +128 -103
- package/dist/cli-bundle/chunks/register-setup-3QJY43CY.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-AJWUSSQX.js} +129 -104
- package/dist/cli-bundle/chunks/register-setup-AJWUSSQX.js.map +1 -0
- package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-44IHMMZZ.js} +9 -9
- package/dist/cli-bundle/chunks/restore-EXHU34EU.js +17 -0
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-OLHNLAZY.js} +12 -12
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-TSBK4AY5.js} +12 -12
- package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-IB2NZZWD.js} +7 -7
- package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-VBCELP5G.js} +7 -7
- package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-7UBETML4.js} +10 -10
- package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-R227JOL6.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-FAG7COEH.js} +6 -6
- package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-MCK7PLYS.js} +6 -6
- package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-DRPDZMAO.js} +84 -70
- package/dist/cli-bundle/chunks/telemetry-DRPDZMAO.js.map +7 -0
- package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-GVVUQSJQ.js} +85 -71
- package/dist/cli-bundle/chunks/telemetry-GVVUQSJQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-QY44WAMR.js} +15 -15
- package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-SY76DZTO.js} +15 -15
- package/dist/cli-bundle/chunks/test-all-QD6QAEG7.js +430 -0
- package/dist/cli-bundle/chunks/test-all-QD6QAEG7.js.map +7 -0
- package/dist/cli-bundle/chunks/test-all-USPJHXFR.js +427 -0
- package/dist/cli-bundle/chunks/test-all-USPJHXFR.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-MG5VIGSK.js} +185 -147
- package/dist/cli-bundle/chunks/test-runs-MG5VIGSK.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-QIR5MJPL.js} +184 -146
- package/dist/cli-bundle/chunks/test-runs-QIR5MJPL.js.map +7 -0
- package/dist/cli-bundle/chunks/update-A7EICML6.js +24 -0
- package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-IKJZWLQC.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-BEMTDA2X.js} +84 -69
- package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-BEMTDA2X.js.map} +1 -1
- package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-RATAARHU.js} +83 -68
- package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-RATAARHU.js.map} +2 -2
- package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-NWMR3VQL.js} +11 -11
- package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-VU46BLJZ.js} +11 -11
- package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-GAJ6FUSI.js} +451 -321
- package/dist/cli-bundle/chunks/validate-GAJ6FUSI.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-NRY6MFXN.js} +450 -320
- package/dist/cli-bundle/chunks/validate-NRY6MFXN.js.map +7 -0
- package/dist/cli-bundle/main.js +1107 -916
- package/dist/cli-bundle/main.js.map +3 -3
- package/dist/core/config/nested-settings.js +89 -67
- package/dist/core/config/nested-settings.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-type-definition.js +14 -14
- package/dist/core/item/item-type-definition.js.map +1 -1
- package/dist/core/item/type-registry.js +114 -99
- 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 +97 -80
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/schema/status-defs-file.js +26 -3
- package/dist/core/schema/status-defs-file.js.map +1 -1
- package/dist/core/search/corpus.js +25 -19
- package/dist/core/search/corpus.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/shared/memo.d.ts +12 -0
- package/dist/core/shared/memo.js +25 -0
- package/dist/core/shared/memo.js.map +1 -0
- package/dist/core/shared/serialization.js +24 -14
- package/dist/core/shared/serialization.js.map +1 -1
- package/dist/core/shared/time.js +26 -4
- package/dist/core/shared/time.js.map +1 -1
- package/dist/core/store/front-matter-cache.d.ts +5 -0
- package/dist/core/store/front-matter-cache.js +316 -171
- 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/sdk/cli-contracts/flag-contracts.js +71 -99
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/compose.js +51 -42
- package/dist/sdk/compose.js.map +1 -1
- package/docs/AGENT_GUIDE.md +2 -2
- package/docs/ARCHITECTURE.md +2 -2
- package/docs/COMMANDS.md +8 -4
- package/docs/CONFIGURATION.md +1 -1
- package/docs/EXTENSIONS.md +12 -12
- package/docs/ONBOARDING.md +4 -2
- package/docs/README.md +2 -0
- package/docs/examples/starter-extension/README.md +11 -10
- package/marketplace.json +3 -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/plugins/pm-claude/.claude-plugin/plugin.json +2 -2
- package/plugins/pm-claude/README.md +6 -3
- package/plugins/pm-claude/commands/pm-init.md +1 -1
- package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-22WKIL3H.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3J6JRJ3I.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3K2M5OYU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-AXIDKKAT.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-CWFNTKQJ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-HXTQJXWT.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JLM7BHI7.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MDPEOIGN.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-WYDHYJPO.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
- package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
- package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
- package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
- package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
- package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
- package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
- package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
- package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
- package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
- package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
- package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
- package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
- package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
- package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
- package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
- package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
- package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
- package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
- package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
- package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
- package/dist/cli-bundle/chunks/profile-4OMM32CD.js.map +0 -7
- package/dist/cli-bundle/chunks/profile-QLER5ENE.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js +0 -400
- package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js +0 -410
- package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js +0 -486
- package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
- package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
- package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
- package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
- package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
- package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
- package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
- package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
- package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
- package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
- package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-5YWLSPGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-BIML7K2D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-EZESUVJT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-JFG4WQMG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-3W2HJKJX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-4PFVUUYV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-5E7N4T2Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-5IZUBZBR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-5JIWFWOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-6CDCWKSX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-6NYJGMTY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-7CLLC75T.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-7LYO6S5A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-A3OQ7TFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-ER4ME5U2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-ERG65A2L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-FH2H3CBD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-FUFFPIYA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-GUYNUXQT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-GVJE5T7Q.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-JBZ2NTKX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KEZOIPCR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-MDHWWBNZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-MEZZZBYX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-NZ7QIUP5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-P5L7Z2O6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-SU2E4AWU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-SU3TB4NS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-T4XBKJ3F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-U5TR4N7J.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UMNQZS4H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-WJA3PXW7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-YSDFIY7N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-YSGTMDWC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-Z5F6XZXE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-Z7RPDF2Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-2BGBGSVI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-5GU7OE67.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-6YODBUIV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-AFVKPR57.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-DNWHEBOS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-RW23R3VE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-OYXRGY7S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-PKCEHQY3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-6XOR3HKN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-I4NCLBR4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-PM45M6PE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-Z7YCH3BE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-7YXHYG67.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-LPISP43T.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-N2T26FME.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-WATKQDE3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-6LQ3GLM7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-Z3X6JZLT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-6DCLG52D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-Y3ZCUTHK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-BNINIMT7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-QWE4YYK5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-6SGKHS6O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-FUYPSOFJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-2Q3K76G2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-ATLBWXXD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-RUYEMNRF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-TDWSDR66.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-CGNQJXFE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-SGRRS72R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-IRL7WJ3E.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-N3JK7VBW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-4GESW7RM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-XIDPABA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-4BHWFFUV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-4FJY7WIW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-472TIOVK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-D7BF5CL2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-6KNOSLIT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-W4UEICGF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-44IHMMZZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-EXHU34EU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-OLHNLAZY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-TSBK4AY5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-IB2NZZWD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-VBCELP5G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-7UBETML4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-R227JOL6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-FAG7COEH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-MCK7PLYS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-QY44WAMR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-SY76DZTO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-A7EICML6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-IKJZWLQC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-NWMR3VQL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-VU46BLJZ.js.map} +0 -0
package/docs/EXTENSIONS.md
CHANGED
|
@@ -86,7 +86,7 @@ Package roots declare resources in `package.json` under `pm`:
|
|
|
86
86
|
|
|
87
87
|
Installation activates `pm.extensions`. `pm.docs`, `pm.examples`, `pm.assets`, and `pm.prompts` are catalog metadata (metadata-only — they are discovered and surfaced in the catalog but not executed). Declare agent-facing prompt/slash-command markdown under `pm.prompts` and non-code assets (images, skills, fixtures) under `pm.assets`; their conventional roots are `prompts/` (also `.agents/pm/prompts/`) and `assets/` (also `.agents/pm/assets/`).
|
|
88
88
|
|
|
89
|
-
`pm package init` emits a root extension (`"extensions": ["."]`) authored **and loaded** as TypeScript (ADR [pm-2c28](../.agents/pm/decisions/pm-2c28.toon) / [pm-m1uz](../.agents/pm/decisions/pm-m1uz.toon)): a typed `index.ts`, a strict type-check-only `tsconfig.json`, and `typecheck`/`test` scripts, with the manifest `entry` pointing at `./index.ts` itself. pm loads that `.ts` entry directly via Node's native type stripping (Node >=22.18), so there is no build step — run `npm install` (for the peer SDK and type-checking) before `pm install`. The generated README shows how to author exported command/hook definitions with the SDK [define* builders](../.agents/pm/decisions/pm-3mph.toon).
|
|
89
|
+
`pm package init` emits a root extension (`"extensions": ["."]`) authored **and loaded** as TypeScript (ADR [pm-2c28](../.agents/pm/decisions/pm-2c28.toon) / [pm-m1uz](../.agents/pm/decisions/pm-m1uz.toon)): a typed `index.ts`, a strict type-check-only `tsconfig.json`, and `typecheck`/`test` scripts, with the manifest `entry` pointing at `./index.ts` itself. pm loads that `.ts` entry directly via Node's native type stripping (Node >=22.18), so there is no build step — run `npm install` (for the peer SDK and type-checking) before `pm install`. The generated README shows how to author exported command/hook definitions with the SDK [define* builders](../.agents/pm/decisions/pm-3mph.toon). `--capability` selects one of ten starters — one per SDK registration surface (`commands`, `hooks`, `search`, `importers`, `schema`, `profile`, `renderers`, `parser`, `preflight`, `services`) — each keeping a runnable starter command and adding the surface's registration plus a colocated `node:test` suite built on the matching SDK `assertRegistered*`/`runRegistered*ForTest` helpers. The full per-capability matrix (what each starter registers, which starters also declare `schema` because flag metadata is schema-governed, and why `schema`/`profile` omit `activation.commands` so their global contributions activate conservatively for every command) lives in [SDK.md — Minimal Command Extension](./SDK.md#minimal-command-extension). Starter manifests use the same least-privilege policy metadata as pure first-party command packages: `trusted: true`, `sandbox_profile: "strict"`, and explicit `false` permissions for `fs_read`, `fs_write`, `network`, `env_read`, `env_write`, and `process_spawn`. Larger packages may point at nested extension directories after declaring runtime dependencies, relaxing only the permissions they actually need, and validating with `pm package doctor`, which additionally emits the advisory `extension_schema_narrow_activation` warning when a package registers custom item types/fields yet declares narrow `activation.commands` (the schema footgun above), recommending the field be dropped so the type stays globally available.
|
|
90
90
|
|
|
91
91
|
Package tests can pair `readPmPackageManifest(packageRoot)` with
|
|
92
92
|
`assertPackageManifest(manifest, { resources: ... })` from
|
|
@@ -217,17 +217,17 @@ Supported capabilities:
|
|
|
217
217
|
|
|
218
218
|
First-party package exemplars:
|
|
219
219
|
|
|
220
|
-
- `pm-beads
|
|
221
|
-
- `pm-calendar
|
|
222
|
-
- `pm-command-kit
|
|
223
|
-
- `pm-governance-audit
|
|
224
|
-
- `pm-guide-shell
|
|
225
|
-
- `pm-kanban
|
|
226
|
-
- `pm-lifecycle-hooks
|
|
227
|
-
- `pm-linked-test-adapters
|
|
228
|
-
- `pm-search-advanced
|
|
229
|
-
- `pm-templates
|
|
230
|
-
- `pm-todos
|
|
220
|
+
- [`pm-beads`](../packages/pm-beads/README.md): beads JSON/JSONL importer/exporter package with generated command contracts.
|
|
221
|
+
- [`pm-calendar`](../packages/pm-calendar/README.md): calendar view package for schedule/context surfaces.
|
|
222
|
+
- [`pm-command-kit`](../packages/pm-command-kit/README.md): command capability exemplar for `registerCommand`, `registerFlags`, and `registerParser`.
|
|
223
|
+
- [`pm-governance-audit`](../packages/pm-governance-audit/README.md): governance hook exemplar for compact read/write sidecar logs.
|
|
224
|
+
- [`pm-guide-shell`](../packages/pm-guide-shell/README.md): guide-topic package for bundled workflow docs.
|
|
225
|
+
- [`pm-kanban`](../packages/pm-kanban/README.md): archetype exemplar shipping a complete Kanban continuous-flow profile (Card type, flow fields, and a `ProjectProfileDefinition`) on public SDK primitives.
|
|
226
|
+
- [`pm-lifecycle-hooks`](../packages/pm-lifecycle-hooks/README.md): default-inert lifecycle hook registration.
|
|
227
|
+
- [`pm-linked-test-adapters`](../packages/pm-linked-test-adapters/README.md): linked-test run-management adapters and reporters.
|
|
228
|
+
- [`pm-search-advanced`](../packages/pm-search-advanced/README.md): deterministic local search provider registration.
|
|
229
|
+
- [`pm-templates`](../packages/pm-templates/README.md): reusable create-template package.
|
|
230
|
+
- [`pm-todos`](../packages/pm-todos/README.md): todo import/export package with generated command contracts.
|
|
231
231
|
|
|
232
232
|
## Governance Policy
|
|
233
233
|
|
package/docs/ONBOARDING.md
CHANGED
|
@@ -14,7 +14,7 @@ Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon), [pm-oh5
|
|
|
14
14
|
|
|
15
15
|
## Prerequisites
|
|
16
16
|
|
|
17
|
-
- Node.js
|
|
17
|
+
- Node.js 22.18 or newer
|
|
18
18
|
- pnpm 10 or newer
|
|
19
19
|
- Git + GitHub CLI (`gh`) authenticated for this repository
|
|
20
20
|
|
|
@@ -74,6 +74,8 @@ pm validate --check-resolution --check-history-drift
|
|
|
74
74
|
|
|
75
75
|
## Real Tracker Workflow (Canonical Loop)
|
|
76
76
|
|
|
77
|
+
The canonical loop is maintained in [AGENT_GUIDE.md](AGENT_GUIDE.md) — this is the condensed contributor version.
|
|
78
|
+
|
|
77
79
|
1) Orient and dedupe
|
|
78
80
|
|
|
79
81
|
```bash
|
|
@@ -141,7 +143,7 @@ pnpm release:pipeline
|
|
|
141
143
|
```bash
|
|
142
144
|
pm health --check-only
|
|
143
145
|
pm validate --check-resolution --check-history-drift
|
|
144
|
-
pm normalize --dry-run --json
|
|
146
|
+
pm normalize --dry-run --json # requires the governance-audit package
|
|
145
147
|
pm package doctor --project --detail summary
|
|
146
148
|
pm contracts --command <command> --flags-only --json
|
|
147
149
|
```
|
package/docs/README.md
CHANGED
|
@@ -36,28 +36,29 @@ cd .agents/pm/extensions/starter-extension
|
|
|
36
36
|
npm install
|
|
37
37
|
cd -
|
|
38
38
|
|
|
39
|
-
# 3) Install/activate in project scope
|
|
40
|
-
pm extension --install
|
|
39
|
+
# 3) Install/activate in project scope (package-first vocabulary;
|
|
40
|
+
# `pm extension --install` remains as a compatibility form)
|
|
41
|
+
pm install .agents/pm/extensions/starter-extension --project
|
|
41
42
|
|
|
42
43
|
# 4) Run a starter command
|
|
43
44
|
pm starter ping --name "agent"
|
|
44
45
|
|
|
45
46
|
# 5) Reload extension modules after edits
|
|
46
|
-
pm
|
|
47
|
+
pm package --reload --project
|
|
47
48
|
|
|
48
49
|
# 6) Optional watch-mode semantics
|
|
49
|
-
pm
|
|
50
|
+
pm package --reload --project --watch
|
|
50
51
|
|
|
51
52
|
# 7) Verify runtime health
|
|
52
|
-
pm
|
|
53
|
+
pm package doctor --project --detail summary
|
|
53
54
|
```
|
|
54
55
|
|
|
55
56
|
Expected outcomes:
|
|
56
57
|
|
|
57
58
|
- `pm starter ping` returns deterministic output (plain text when starter service overrides output formatting).
|
|
58
|
-
- `
|
|
59
|
+
- `pm package doctor` shows `details.summary.status` as `ok` or `warn`.
|
|
59
60
|
- If `warn`, inspect `details.summary.warning_codes` and `details.triage.remediation`.
|
|
60
|
-
- `
|
|
61
|
+
- `pm package --reload` returns deterministic load/activation diagnostics for cache-busted imports.
|
|
61
62
|
|
|
62
63
|
## Policy-Restricted Variant
|
|
63
64
|
|
|
@@ -65,15 +66,15 @@ To test governance controls with this extension:
|
|
|
65
66
|
|
|
66
67
|
1. Set `settings.extensions.policy.mode` to `warn` or `enforce`.
|
|
67
68
|
2. Block one surface (for example `commands.override`).
|
|
68
|
-
3. Re-run `pm
|
|
69
|
+
3. Re-run `pm package doctor --detail summary`.
|
|
69
70
|
|
|
70
71
|
You should see `extension_policy_*` warnings and policy counters in `details.triage`.
|
|
71
72
|
|
|
72
73
|
## CI-Friendly Verification Commands
|
|
73
74
|
|
|
74
75
|
```bash
|
|
75
|
-
pm contracts --command
|
|
76
|
-
pm
|
|
76
|
+
pm contracts --command package --flags-only --json
|
|
77
|
+
pm package doctor --project --detail summary --strict-exit
|
|
77
78
|
node scripts/run-tests.mjs test -- tests/unit/extension-loader.spec.ts tests/unit/extension-command.spec.ts
|
|
78
79
|
```
|
|
79
80
|
|
package/marketplace.json
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
|
|
9
|
-
"version": "1.4.
|
|
9
|
+
"version": "1.4.1"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "pm-claude",
|
|
14
14
|
"source": "./plugins/pm-claude",
|
|
15
|
-
"description": "Native pm CLI integration for Claude Code —
|
|
16
|
-
"version": "1.4.
|
|
15
|
+
"description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
|
|
16
|
+
"version": "1.4.1",
|
|
17
17
|
"author": {
|
|
18
18
|
"name": "unbrained",
|
|
19
19
|
"url": "https://github.com/unbraind/pm-cli"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-cli",
|
|
3
|
-
"version": "2026.7.
|
|
3
|
+
"version": "2026.7.3",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "unbrained",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
}
|
|
134
134
|
},
|
|
135
135
|
"dependencies": {
|
|
136
|
-
"@sentry/node": "^10.
|
|
136
|
+
"@sentry/node": "^10.63.0",
|
|
137
137
|
"@toon-format/toon": "^2.3.0",
|
|
138
138
|
"commander": "^15.0.0",
|
|
139
139
|
"fast-glob": "^3.3.3",
|
|
@@ -88,6 +88,19 @@ interface ItemTypeRegistry {
|
|
|
88
88
|
type_to_folder: Record<string, string>;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
interface BeadsImportRuntime {
|
|
92
|
+
sdk: BeadsSdkModule;
|
|
93
|
+
pmRoot: string;
|
|
94
|
+
settings: PmSettings;
|
|
95
|
+
typeRegistry: ItemTypeRegistry;
|
|
96
|
+
preserveSourceIds: boolean;
|
|
97
|
+
author: string;
|
|
98
|
+
message: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
type BeadsImportLineResult = { id: string; writeWarnings: string[] } | { warning: string };
|
|
102
|
+
type ParsedBeadsLine = { record: BeadsRecord } | { warning: string } | null;
|
|
103
|
+
|
|
91
104
|
interface BeadsSdkModule {
|
|
92
105
|
DEPENDENCY_KIND_VALUES: readonly Dependency["kind"][];
|
|
93
106
|
EXIT_CODE: {
|
|
@@ -135,50 +148,73 @@ interface BeadsSdkModule {
|
|
|
135
148
|
toNonEmptyImportString: (value: unknown) => string | undefined;
|
|
136
149
|
}
|
|
137
150
|
|
|
138
|
-
|
|
151
|
+
const BEADS_SDK_ARRAY_EXPORTS = [
|
|
152
|
+
"DEPENDENCY_KIND_VALUES",
|
|
153
|
+
] as const satisfies readonly (keyof BeadsSdkModule)[];
|
|
154
|
+
|
|
155
|
+
const BEADS_SDK_FUNCTION_EXPORTS = [
|
|
156
|
+
"PmCliError",
|
|
157
|
+
"canonicalDocument",
|
|
158
|
+
"commitImportedItem",
|
|
159
|
+
"ensureTrackerInitialized",
|
|
160
|
+
"generateItemId",
|
|
161
|
+
"getActiveExtensionRegistrations",
|
|
162
|
+
"getItemPath",
|
|
163
|
+
"isTimestampLiteral",
|
|
164
|
+
"locateItem",
|
|
165
|
+
"normalizeFrontMatter",
|
|
166
|
+
"normalizeItemId",
|
|
167
|
+
"normalizeRawItemId",
|
|
168
|
+
"nowIso",
|
|
169
|
+
"pathExists",
|
|
170
|
+
"readSettings",
|
|
171
|
+
"resolveItemTypeRegistry",
|
|
172
|
+
"resolvePmRoot",
|
|
173
|
+
"runActiveOnReadHooks",
|
|
174
|
+
"selectImportAuthor",
|
|
175
|
+
"toEstimatedMinutesValue",
|
|
176
|
+
"toImportPriority",
|
|
177
|
+
"toImportStatus",
|
|
178
|
+
"toImportTags",
|
|
179
|
+
"toNonEmptyImportString",
|
|
180
|
+
] as const satisfies readonly (keyof BeadsSdkModule)[];
|
|
181
|
+
|
|
182
|
+
function resolveBeadsSdkModulePath(): string {
|
|
139
183
|
const envRoot = process.env[PM_PACKAGE_ROOT_ENV];
|
|
140
184
|
const hasConfiguredPackageRoot = typeof envRoot === "string" && envRoot.trim().length > 0;
|
|
141
|
-
const packageRoot =
|
|
142
|
-
|
|
143
|
-
? path.resolve(envRoot.trim())
|
|
144
|
-
: path.resolve(CURRENT_RUNTIME_ROOT, "../../../..");
|
|
145
|
-
const modulePath = hasConfiguredPackageRoot
|
|
185
|
+
const packageRoot = hasConfiguredPackageRoot ? path.resolve(envRoot.trim()) : path.resolve(CURRENT_RUNTIME_ROOT, "../../../..");
|
|
186
|
+
return hasConfiguredPackageRoot
|
|
146
187
|
? path.join(packageRoot, "dist", "sdk", "index.js")
|
|
147
188
|
: path.join(packageRoot, "src", "sdk", "index.ts");
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function hasBeadsSdkArrayExports(loaded: Partial<BeadsSdkModule>): boolean {
|
|
192
|
+
return BEADS_SDK_ARRAY_EXPORTS.every((key) => Array.isArray(loaded[key]));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function hasBeadsSdkFunctionExports(loaded: Partial<BeadsSdkModule>): boolean {
|
|
196
|
+
return BEADS_SDK_FUNCTION_EXPORTS.every((key) => typeof loaded[key] === "function");
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function hasBeadsSdkExitCodeExports(loaded: Partial<BeadsSdkModule>): boolean {
|
|
200
|
+
return (
|
|
201
|
+
typeof loaded.EXIT_CODE === "object" &&
|
|
202
|
+
loaded.EXIT_CODE !== null &&
|
|
203
|
+
typeof loaded.EXIT_CODE.NOT_FOUND === "number" &&
|
|
204
|
+
typeof loaded.EXIT_CODE.USAGE === "number"
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function isBeadsSdkModule(loaded: Partial<BeadsSdkModule>): loaded is BeadsSdkModule {
|
|
209
|
+
return hasBeadsSdkArrayExports(loaded) && hasBeadsSdkFunctionExports(loaded) && hasBeadsSdkExitCodeExports(loaded);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
async function loadBeadsSdkModule(): Promise<BeadsSdkModule> {
|
|
213
|
+
const modulePath = resolveBeadsSdkModulePath();
|
|
148
214
|
try {
|
|
149
215
|
const loaded = (await import(pathToFileURL(modulePath).href)) as Partial<BeadsSdkModule>;
|
|
150
|
-
if (
|
|
151
|
-
|
|
152
|
-
typeof loaded.EXIT_CODE === "object" &&
|
|
153
|
-
loaded.EXIT_CODE !== null &&
|
|
154
|
-
typeof loaded.EXIT_CODE.NOT_FOUND === "number" &&
|
|
155
|
-
typeof loaded.EXIT_CODE.USAGE === "number" &&
|
|
156
|
-
typeof loaded.PmCliError === "function" &&
|
|
157
|
-
typeof loaded.canonicalDocument === "function" &&
|
|
158
|
-
typeof loaded.commitImportedItem === "function" &&
|
|
159
|
-
typeof loaded.ensureTrackerInitialized === "function" &&
|
|
160
|
-
typeof loaded.generateItemId === "function" &&
|
|
161
|
-
typeof loaded.getActiveExtensionRegistrations === "function" &&
|
|
162
|
-
typeof loaded.getItemPath === "function" &&
|
|
163
|
-
typeof loaded.isTimestampLiteral === "function" &&
|
|
164
|
-
typeof loaded.locateItem === "function" &&
|
|
165
|
-
typeof loaded.normalizeFrontMatter === "function" &&
|
|
166
|
-
typeof loaded.normalizeItemId === "function" &&
|
|
167
|
-
typeof loaded.normalizeRawItemId === "function" &&
|
|
168
|
-
typeof loaded.nowIso === "function" &&
|
|
169
|
-
typeof loaded.pathExists === "function" &&
|
|
170
|
-
typeof loaded.readSettings === "function" &&
|
|
171
|
-
typeof loaded.resolveItemTypeRegistry === "function" &&
|
|
172
|
-
typeof loaded.resolvePmRoot === "function" &&
|
|
173
|
-
typeof loaded.runActiveOnReadHooks === "function" &&
|
|
174
|
-
typeof loaded.selectImportAuthor === "function" &&
|
|
175
|
-
typeof loaded.toEstimatedMinutesValue === "function" &&
|
|
176
|
-
typeof loaded.toImportPriority === "function" &&
|
|
177
|
-
typeof loaded.toImportStatus === "function" &&
|
|
178
|
-
typeof loaded.toImportTags === "function" &&
|
|
179
|
-
typeof loaded.toNonEmptyImportString === "function"
|
|
180
|
-
) {
|
|
181
|
-
return loaded as BeadsSdkModule;
|
|
216
|
+
if (isBeadsSdkModule(loaded)) {
|
|
217
|
+
return loaded;
|
|
182
218
|
}
|
|
183
219
|
} catch (error: unknown) {
|
|
184
220
|
throw new Error(`builtin-beads failed to load SDK exports from ${modulePath}.`, { cause: error });
|
|
@@ -186,19 +222,15 @@ async function loadBeadsSdkModule(): Promise<BeadsSdkModule> {
|
|
|
186
222
|
throw new Error(`builtin-beads failed to load SDK exports from ${modulePath}.`);
|
|
187
223
|
}
|
|
188
224
|
|
|
225
|
+
const beadsSdk = await loadBeadsSdkModule();
|
|
226
|
+
|
|
189
227
|
const {
|
|
190
228
|
DEPENDENCY_KIND_VALUES,
|
|
191
229
|
EXIT_CODE,
|
|
192
230
|
PmCliError,
|
|
193
|
-
canonicalDocument,
|
|
194
|
-
commitImportedItem,
|
|
195
231
|
ensureTrackerInitialized,
|
|
196
|
-
generateItemId,
|
|
197
232
|
getActiveExtensionRegistrations,
|
|
198
|
-
getItemPath,
|
|
199
233
|
isTimestampLiteral,
|
|
200
|
-
locateItem,
|
|
201
|
-
normalizeFrontMatter,
|
|
202
234
|
normalizeItemId,
|
|
203
235
|
normalizeRawItemId,
|
|
204
236
|
nowIso,
|
|
@@ -213,7 +245,7 @@ const {
|
|
|
213
245
|
toImportStatus,
|
|
214
246
|
toImportTags,
|
|
215
247
|
toNonEmptyImportString,
|
|
216
|
-
} =
|
|
248
|
+
} = beadsSdk;
|
|
217
249
|
|
|
218
250
|
// Shared, behavior-identical value coercers are sourced from the SDK adapter
|
|
219
251
|
// surface; package-specific mappings (timestamps, item types, dependencies,
|
|
@@ -451,36 +483,49 @@ function toLinkedTests(value: unknown): LinkedTest[] | undefined {
|
|
|
451
483
|
if (c) tests.push({ command: c, scope: "project" });
|
|
452
484
|
continue;
|
|
453
485
|
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
const candidate = entry as Record<string, unknown>;
|
|
458
|
-
const command = toNonEmptyString(candidate.command) ?? toNonEmptyString(candidate.test);
|
|
459
|
-
const p = toNonEmptyString(candidate.path);
|
|
460
|
-
if (!command && !p) continue;
|
|
461
|
-
|
|
462
|
-
let timeout: number | undefined;
|
|
463
|
-
if (typeof candidate.timeout_seconds === "number" && Number.isFinite(candidate.timeout_seconds)) {
|
|
464
|
-
timeout = candidate.timeout_seconds;
|
|
465
|
-
} else if (typeof candidate.timeout_seconds === "string") {
|
|
466
|
-
const parsed = Number(candidate.timeout_seconds);
|
|
467
|
-
if (Number.isFinite(parsed) && parsed >= 0) {
|
|
468
|
-
timeout = parsed;
|
|
469
|
-
}
|
|
486
|
+
const linkedTest = toLinkedTestFromRecord(entry);
|
|
487
|
+
if (linkedTest) {
|
|
488
|
+
tests.push(linkedTest);
|
|
470
489
|
}
|
|
471
|
-
|
|
472
|
-
tests.push({
|
|
473
|
-
command,
|
|
474
|
-
path: p,
|
|
475
|
-
scope: toNonEmptyString(candidate.scope) === "global" ? "global" : "project",
|
|
476
|
-
timeout_seconds: timeout,
|
|
477
|
-
note: toNonEmptyString(candidate.note),
|
|
478
|
-
});
|
|
479
490
|
}
|
|
480
491
|
|
|
481
492
|
return tests.length > 0 ? tests : undefined;
|
|
482
493
|
}
|
|
483
494
|
|
|
495
|
+
function toLinkedTestTimeout(value: unknown): number | undefined {
|
|
496
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= 0) {
|
|
497
|
+
return value;
|
|
498
|
+
}
|
|
499
|
+
if (typeof value !== "string") {
|
|
500
|
+
return undefined;
|
|
501
|
+
}
|
|
502
|
+
const trimmed = value.trim();
|
|
503
|
+
if (!trimmed) {
|
|
504
|
+
return undefined;
|
|
505
|
+
}
|
|
506
|
+
const parsed = Number(trimmed);
|
|
507
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
function toLinkedTestFromRecord(value: unknown): LinkedTest | undefined {
|
|
511
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
512
|
+
return undefined;
|
|
513
|
+
}
|
|
514
|
+
const candidate = value as Record<string, unknown>;
|
|
515
|
+
const command = toNonEmptyString(candidate.command) ?? toNonEmptyString(candidate.test);
|
|
516
|
+
const p = toNonEmptyString(candidate.path);
|
|
517
|
+
if (!command && !p) {
|
|
518
|
+
return undefined;
|
|
519
|
+
}
|
|
520
|
+
return {
|
|
521
|
+
command,
|
|
522
|
+
path: p,
|
|
523
|
+
scope: toNonEmptyString(candidate.scope) === "global" ? "global" : "project",
|
|
524
|
+
timeout_seconds: toLinkedTestTimeout(candidate.timeout_seconds),
|
|
525
|
+
note: toNonEmptyString(candidate.note),
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
|
|
484
529
|
function toLinkedDocs(value: unknown): LinkedDoc[] | undefined {
|
|
485
530
|
if (typeof value === "string") {
|
|
486
531
|
const p = toNonEmptyString(value);
|
|
@@ -596,6 +641,114 @@ async function resolveBeadsSource(rawPath: string | undefined): Promise<{
|
|
|
596
641
|
);
|
|
597
642
|
}
|
|
598
643
|
|
|
644
|
+
function parseBeadsLine(line: string, lineNumber: number): ParsedBeadsLine {
|
|
645
|
+
const trimmed = line.trim();
|
|
646
|
+
if (trimmed.length === 0) {
|
|
647
|
+
return null;
|
|
648
|
+
}
|
|
649
|
+
let parsed: unknown;
|
|
650
|
+
try {
|
|
651
|
+
parsed = JSON.parse(trimmed) as unknown;
|
|
652
|
+
} catch {
|
|
653
|
+
return { warning: `beads_import_invalid_jsonl_line:${lineNumber}` };
|
|
654
|
+
}
|
|
655
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
656
|
+
return { warning: `beads_import_invalid_record:${lineNumber}` };
|
|
657
|
+
}
|
|
658
|
+
return { record: parsed as BeadsRecord };
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
async function resolveBeadsImportId(record: BeadsRecord, runtime: BeadsImportRuntime): Promise<string> {
|
|
662
|
+
const rawId = toNonEmptyString(record.id);
|
|
663
|
+
return rawId
|
|
664
|
+
? normalizeImportedId(rawId, runtime.settings.id_prefix, runtime.preserveSourceIds)
|
|
665
|
+
: await runtime.sdk.generateItemId(runtime.pmRoot, runtime.settings.id_prefix);
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
function buildBeadsImportedBody(record: BeadsRecord): string {
|
|
669
|
+
const rawBody = toNonEmptyString(record.body) ?? "";
|
|
670
|
+
const design = toNonEmptyString(record.design);
|
|
671
|
+
const externalRef = toNonEmptyString(record.external_ref);
|
|
672
|
+
let finalBody = rawBody;
|
|
673
|
+
if (design) {
|
|
674
|
+
finalBody += (finalBody ? "\n\n" : "") + "## Design\n\n" + design;
|
|
675
|
+
}
|
|
676
|
+
if (externalRef) {
|
|
677
|
+
finalBody += (finalBody ? "\n\n" : "") + "## External Reference\n" + externalRef;
|
|
678
|
+
}
|
|
679
|
+
return finalBody;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
async function importBeadsRecord(record: BeadsRecord, lineNumber: number, runtime: BeadsImportRuntime): Promise<BeadsImportLineResult> {
|
|
683
|
+
const title = toNonEmptyString(record.title);
|
|
684
|
+
if (!title) {
|
|
685
|
+
return { warning: `beads_import_missing_title:${lineNumber}` };
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
const createdAt = toIsoString(record.created_at) ?? nowIso();
|
|
689
|
+
const updatedAt = toIsoString(record.updated_at) ?? createdAt;
|
|
690
|
+
const id = await resolveBeadsImportId(record, runtime);
|
|
691
|
+
const typeMapping = toItemType(record.issue_type ?? record.type);
|
|
692
|
+
const type = typeMapping.type;
|
|
693
|
+
const closedAt = toIsoString(record.closed_at);
|
|
694
|
+
const assignee = toNonEmptyString(record.assignee) ?? toNonEmptyString(record.owner);
|
|
695
|
+
const frontMatter = runtime.sdk.normalizeFrontMatter({
|
|
696
|
+
id,
|
|
697
|
+
title,
|
|
698
|
+
description: toNonEmptyString(record.description) ?? "",
|
|
699
|
+
type,
|
|
700
|
+
source_type: typeMapping.sourceType,
|
|
701
|
+
status: toStatus(record.status),
|
|
702
|
+
priority: toPriority(record.priority),
|
|
703
|
+
tags: toTags(record.tags ?? record.labels),
|
|
704
|
+
created_at: createdAt,
|
|
705
|
+
updated_at: updatedAt,
|
|
706
|
+
deadline: toIsoString(record.due_at ?? record.deadline),
|
|
707
|
+
closed_at: closedAt,
|
|
708
|
+
assignee,
|
|
709
|
+
source_owner: toNonEmptyString(record.owner),
|
|
710
|
+
author: toNonEmptyString(record.author) ?? toNonEmptyString(record.created_by) ?? runtime.author,
|
|
711
|
+
estimated_minutes: toEstimatedMinutes(record.estimated_minutes),
|
|
712
|
+
acceptance_criteria: toNonEmptyString(record.acceptance_criteria),
|
|
713
|
+
design: toNonEmptyString(record.design),
|
|
714
|
+
external_ref: toNonEmptyString(record.external_ref),
|
|
715
|
+
close_reason: toNonEmptyString(record.close_reason),
|
|
716
|
+
dependencies: toDependencies(record.dependencies, createdAt, runtime.settings.id_prefix, runtime.preserveSourceIds),
|
|
717
|
+
comments: toLogEntries(record.comments, createdAt, runtime.author),
|
|
718
|
+
notes: toLogEntries(record.notes, createdAt, runtime.author),
|
|
719
|
+
learnings: toLogEntries(record.learnings, createdAt, runtime.author),
|
|
720
|
+
files: toLinkedFiles(record.files),
|
|
721
|
+
tests: toLinkedTests(record.tests),
|
|
722
|
+
docs: toLinkedDocs(record.docs),
|
|
723
|
+
});
|
|
724
|
+
const afterDocument = runtime.sdk.canonicalDocument({
|
|
725
|
+
metadata: frontMatter,
|
|
726
|
+
body: buildBeadsImportedBody(record),
|
|
727
|
+
});
|
|
728
|
+
const existing = await runtime.sdk.locateItem(
|
|
729
|
+
runtime.pmRoot,
|
|
730
|
+
id,
|
|
731
|
+
runtime.settings.id_prefix,
|
|
732
|
+
runtime.settings.item_format,
|
|
733
|
+
runtime.typeRegistry.type_to_folder,
|
|
734
|
+
);
|
|
735
|
+
if (existing) {
|
|
736
|
+
return { warning: `beads_import_item_exists:${id}` };
|
|
737
|
+
}
|
|
738
|
+
const itemPath = runtime.sdk.getItemPath(runtime.pmRoot, type, id, "toon", runtime.typeRegistry.type_to_folder);
|
|
739
|
+
const commit = await runtime.sdk.commitImportedItem({
|
|
740
|
+
pmRoot: runtime.pmRoot,
|
|
741
|
+
id,
|
|
742
|
+
itemPath,
|
|
743
|
+
document: afterDocument,
|
|
744
|
+
author: runtime.author,
|
|
745
|
+
message: runtime.message,
|
|
746
|
+
settings: runtime.settings,
|
|
747
|
+
conflictWarningPrefix: "beads_import_lock_conflict",
|
|
748
|
+
});
|
|
749
|
+
return commit.committed ? { id, writeWarnings: commit.writeWarnings } : { warning: commit.conflictWarning };
|
|
750
|
+
}
|
|
751
|
+
|
|
599
752
|
export async function runBeadsImport(options: BeadsImportOptions, global: GlobalOptions): Promise<BeadsImportResult> {
|
|
600
753
|
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
601
754
|
await ensureInitHasRun(pmRoot);
|
|
@@ -621,115 +774,35 @@ export async function runBeadsImport(options: BeadsImportOptions, global: Global
|
|
|
621
774
|
const ids: string[] = [];
|
|
622
775
|
let imported = 0;
|
|
623
776
|
let skipped = 0;
|
|
777
|
+
const runtime: BeadsImportRuntime = {
|
|
778
|
+
sdk: beadsSdk,
|
|
779
|
+
pmRoot,
|
|
780
|
+
settings,
|
|
781
|
+
typeRegistry,
|
|
782
|
+
preserveSourceIds,
|
|
783
|
+
author,
|
|
784
|
+
message,
|
|
785
|
+
};
|
|
624
786
|
|
|
625
787
|
for (let index = 0; index < lines.length; index += 1) {
|
|
626
788
|
const lineNumber = index + 1;
|
|
627
|
-
const
|
|
628
|
-
if (
|
|
629
|
-
continue;
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
let parsed: unknown;
|
|
633
|
-
try {
|
|
634
|
-
parsed = JSON.parse(line) as unknown;
|
|
635
|
-
} catch {
|
|
636
|
-
warnings.push(`beads_import_invalid_jsonl_line:${lineNumber}`);
|
|
637
|
-
skipped += 1;
|
|
638
|
-
continue;
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
642
|
-
warnings.push(`beads_import_invalid_record:${lineNumber}`);
|
|
643
|
-
skipped += 1;
|
|
644
|
-
continue;
|
|
645
|
-
}
|
|
646
|
-
const record = parsed as BeadsRecord;
|
|
647
|
-
|
|
648
|
-
const title = toNonEmptyString(record.title);
|
|
649
|
-
if (!title) {
|
|
650
|
-
warnings.push(`beads_import_missing_title:${lineNumber}`);
|
|
651
|
-
skipped += 1;
|
|
789
|
+
const parsed = parseBeadsLine(lines[index], lineNumber);
|
|
790
|
+
if (!parsed) {
|
|
652
791
|
continue;
|
|
653
792
|
}
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
const updatedAt = toIsoString(record.updated_at) ?? createdAt;
|
|
657
|
-
const id = toNonEmptyString(record.id)
|
|
658
|
-
? normalizeImportedId(toNonEmptyString(record.id) as string, settings.id_prefix, preserveSourceIds)
|
|
659
|
-
: await generateItemId(pmRoot, settings.id_prefix);
|
|
660
|
-
const typeMapping = toItemType(record.issue_type ?? record.type);
|
|
661
|
-
const type = typeMapping.type;
|
|
662
|
-
const closedAt = toIsoString(record.closed_at);
|
|
663
|
-
const assignee = toNonEmptyString(record.assignee) ?? toNonEmptyString(record.owner);
|
|
664
|
-
const frontMatter = normalizeFrontMatter({
|
|
665
|
-
id,
|
|
666
|
-
title,
|
|
667
|
-
description: toNonEmptyString(record.description) ?? "",
|
|
668
|
-
type,
|
|
669
|
-
source_type: typeMapping.sourceType,
|
|
670
|
-
status: toStatus(record.status),
|
|
671
|
-
priority: toPriority(record.priority),
|
|
672
|
-
tags: toTags(record.tags ?? record.labels),
|
|
673
|
-
created_at: createdAt,
|
|
674
|
-
updated_at: updatedAt,
|
|
675
|
-
deadline: toIsoString(record.due_at ?? record.deadline),
|
|
676
|
-
closed_at: closedAt,
|
|
677
|
-
assignee,
|
|
678
|
-
source_owner: toNonEmptyString(record.owner),
|
|
679
|
-
author: toNonEmptyString(record.author) ?? toNonEmptyString(record.created_by) ?? author,
|
|
680
|
-
estimated_minutes: toEstimatedMinutes(record.estimated_minutes),
|
|
681
|
-
acceptance_criteria: toNonEmptyString(record.acceptance_criteria),
|
|
682
|
-
design: toNonEmptyString(record.design),
|
|
683
|
-
external_ref: toNonEmptyString(record.external_ref),
|
|
684
|
-
close_reason: toNonEmptyString(record.close_reason),
|
|
685
|
-
dependencies: toDependencies(record.dependencies, createdAt, settings.id_prefix, preserveSourceIds),
|
|
686
|
-
comments: toLogEntries(record.comments, createdAt, author),
|
|
687
|
-
notes: toLogEntries(record.notes, createdAt, author),
|
|
688
|
-
learnings: toLogEntries(record.learnings, createdAt, author),
|
|
689
|
-
files: toLinkedFiles(record.files),
|
|
690
|
-
tests: toLinkedTests(record.tests),
|
|
691
|
-
docs: toLinkedDocs(record.docs),
|
|
692
|
-
});
|
|
693
|
-
const rawBody = toNonEmptyString(record.body) ?? "";
|
|
694
|
-
const design = toNonEmptyString(record.design);
|
|
695
|
-
const externalRef = toNonEmptyString(record.external_ref);
|
|
696
|
-
let finalBody = rawBody;
|
|
697
|
-
if (design) {
|
|
698
|
-
finalBody += (finalBody ? "\n\n" : "") + "## Design\n\n" + design;
|
|
699
|
-
}
|
|
700
|
-
if (externalRef) {
|
|
701
|
-
finalBody += (finalBody ? "\n\n" : "") + "## External Reference\n" + externalRef;
|
|
702
|
-
}
|
|
703
|
-
const afterDocument = canonicalDocument({
|
|
704
|
-
metadata: frontMatter,
|
|
705
|
-
body: finalBody,
|
|
706
|
-
});
|
|
707
|
-
const existing = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
|
|
708
|
-
if (existing) {
|
|
709
|
-
warnings.push(`beads_import_item_exists:${id}`);
|
|
793
|
+
if ("warning" in parsed) {
|
|
794
|
+
warnings.push(parsed.warning);
|
|
710
795
|
skipped += 1;
|
|
711
796
|
continue;
|
|
712
797
|
}
|
|
713
|
-
const
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
pmRoot,
|
|
717
|
-
id,
|
|
718
|
-
itemPath,
|
|
719
|
-
document: afterDocument,
|
|
720
|
-
author,
|
|
721
|
-
message,
|
|
722
|
-
settings,
|
|
723
|
-
conflictWarningPrefix: "beads_import_lock_conflict",
|
|
724
|
-
});
|
|
725
|
-
if (!commit.committed) {
|
|
726
|
-
warnings.push(commit.conflictWarning);
|
|
798
|
+
const importedLine = await importBeadsRecord(parsed.record, lineNumber, runtime);
|
|
799
|
+
if ("warning" in importedLine) {
|
|
800
|
+
warnings.push(importedLine.warning);
|
|
727
801
|
skipped += 1;
|
|
728
802
|
continue;
|
|
729
803
|
}
|
|
730
|
-
warnings.push(...
|
|
731
|
-
|
|
732
|
-
ids.push(id);
|
|
804
|
+
warnings.push(...importedLine.writeWarnings);
|
|
805
|
+
ids.push(importedLine.id);
|
|
733
806
|
imported += 1;
|
|
734
807
|
}
|
|
735
808
|
|