@unbrained/pm-cli 2026.6.23 → 2026.6.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +120 -0
- package/CONTRIBUTING.md +30 -0
- package/README.md +16 -3
- package/dist/cli/commander-usage.js +3 -3
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/aggregate.js +8 -7
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/close.d.ts +2 -4
- package/dist/cli/commands/close.js +5 -17
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/completion.js +158 -9
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.d.ts +1 -1
- package/dist/cli/commands/config.js +2 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.d.ts +31 -4
- package/dist/cli/commands/context.js +33 -10
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.js +48 -8
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.d.ts +1 -6
- package/dist/cli/commands/create.js +10 -155
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension/describe.d.ts +15 -0
- package/dist/cli/commands/extension/describe.js +48 -2
- package/dist/cli/commands/extension/describe.js.map +1 -1
- package/dist/cli/commands/extension/doctor.js +5 -2
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/install-sources.js +37 -7
- package/dist/cli/commands/extension/install-sources.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.d.ts +31 -8
- package/dist/cli/commands/extension/scaffold.js +1956 -182
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +22 -2
- package/dist/cli/commands/extension.js +189 -13
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/index.d.ts +3 -1
- package/dist/cli/commands/index.js +5 -3
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/item-filter-options.d.ts +63 -0
- package/dist/cli/commands/item-filter-options.js +10 -0
- package/dist/cli/commands/item-filter-options.js.map +1 -0
- package/dist/cli/commands/legacy-none-tokens.d.ts +14 -0
- package/dist/cli/commands/legacy-none-tokens.js +31 -2
- package/dist/cli/commands/legacy-none-tokens.js.map +1 -1
- package/dist/cli/commands/linked-artifacts.d.ts +7 -0
- package/dist/cli/commands/linked-artifacts.js +12 -2
- package/dist/cli/commands/linked-artifacts.js.map +1 -1
- package/dist/cli/commands/list.d.ts +16 -39
- package/dist/cli/commands/list.js +127 -118
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/next.d.ts +98 -0
- package/dist/cli/commands/next.js +304 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/profile.d.ts +208 -0
- package/dist/cli/commands/profile.js +418 -0
- package/dist/cli/commands/profile.js.map +1 -0
- package/dist/cli/commands/repeatable-metadata-parsers.js +12 -13
- package/dist/cli/commands/repeatable-metadata-parsers.js.map +1 -1
- package/dist/cli/commands/schema.d.ts +7 -0
- package/dist/cli/commands/schema.js +9 -3
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +2 -39
- package/dist/cli/commands/search.js +104 -106
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/shared-unset-fields.d.ts +30 -0
- package/dist/cli/commands/shared-unset-fields.js +161 -0
- package/dist/cli/commands/shared-unset-fields.js.map +1 -0
- package/dist/cli/commands/stats.js +15 -3
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/test.js +9 -5
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update.d.ts +1 -6
- package/dist/cli/commands/update.js +12 -157
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.js +20 -5
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/help-content.js +26 -2
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/help-json-payload.js +3 -3
- package/dist/cli/help-json-payload.js.map +1 -1
- package/dist/cli/main.js +27 -12
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +42 -3
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +86 -2
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-setup.js +67 -6
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.d.ts +9 -1
- package/dist/cli/registration-helpers.js +34 -3
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +16 -0
- package/dist/cli-bundle/chunks/{activity-H2LMOSSW.js → activity-MVSEND6D.js} +9 -11
- package/dist/cli-bundle/chunks/{aggregate-R725FC3S.js → aggregate-MOC4TR2G.js} +16 -17
- package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-EGJLZQBI.js → aggregate-XJHLZQ5X.js} +15 -16
- package/dist/cli-bundle/chunks/aggregate-XJHLZQ5X.js.map +7 -0
- package/dist/cli-bundle/chunks/{append-5J345QGU.js → append-KDHT4GHI.js} +10 -12
- package/dist/cli-bundle/chunks/{append-5J345QGU.js.map → append-KDHT4GHI.js.map} +1 -1
- package/dist/cli-bundle/chunks/{append-O5HPBMRN.js → append-LEDBAM3K.js} +8 -10
- package/dist/cli-bundle/chunks/{append-O5HPBMRN.js.map → append-LEDBAM3K.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-IB3GYLQE.js → chunk-3JWQCLR5.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-2A34E3BA.js → chunk-4TXTVZL3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-G6N5VEOK.js → chunk-4YIMPANT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-7AUB5HNA.js → chunk-53ARXF2O.js} +9 -11
- package/dist/cli-bundle/chunks/{chunk-7AUB5HNA.js.map → chunk-53ARXF2O.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-5ABGFWR4.js +116 -0
- package/dist/cli-bundle/chunks/chunk-5ABGFWR4.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2BFPAUAF.js → chunk-5IRVSKPS.js} +2990 -2890
- package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JR2LV3M4.js → chunk-5T6WPLRO.js} +233 -190
- package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CKGNPJAG.js → chunk-6T5ZIWBS.js} +3011 -2888
- package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QH3PJYON.js → chunk-6YRAMXRS.js} +111 -114
- package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7XGQXHFB.js → chunk-73PTKMAE.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-Y4SUQQYH.js → chunk-74PUWBGN.js} +53 -54
- package/dist/cli-bundle/chunks/chunk-74PUWBGN.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-T5472OMV.js → chunk-7L6TXOOC.js} +4 -6
- package/dist/cli-bundle/chunks/{chunk-T5472OMV.js.map → chunk-7L6TXOOC.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-7M2HAZEB.js +17 -0
- package/dist/cli-bundle/chunks/chunk-7M2HAZEB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3VY3YQO6.js → chunk-7RIJGN4R.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-G6PYHBBR.js → chunk-7WDETKGP.js} +192 -113
- package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-AONIHR2C.js → chunk-A3UNLXNJ.js} +40 -260
- package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4KD54S3Z.js → chunk-AWN4PPH5.js} +10 -14
- package/dist/cli-bundle/chunks/{chunk-4KD54S3Z.js.map → chunk-AWN4PPH5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-FXR67XVQ.js → chunk-BN3CWK6G.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KFWBJPSG.js → chunk-BOWQWXLI.js} +12 -24
- package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4BHT5VDC.js → chunk-C2KCIZKZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-O6LLO73I.js → chunk-CHRNYKNI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-UELRKQQU.js → chunk-CY5IJMUM.js} +1239 -495
- package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-CZVISY5A.js +87 -0
- package/dist/cli-bundle/chunks/chunk-CZVISY5A.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7K2XXO4I.js → chunk-D5LYZVGB.js} +7 -9
- package/dist/cli-bundle/chunks/{chunk-7K2XXO4I.js.map → chunk-D5LYZVGB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-ZQ3ZVXX2.js → chunk-D6USKAMA.js} +2 -2
- package/dist/cli-bundle/chunks/{context-BLBD3PUB.js → chunk-DJDXAU74.js} +19 -21
- package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-WZQWHN4R.js → chunk-DLDCPF5X.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HFFUQR73.js → chunk-DORJSBGJ.js} +35 -9
- package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-XVF4YARA.js → chunk-DRPF274X.js} +5 -7
- package/dist/cli-bundle/chunks/{chunk-XVF4YARA.js.map → chunk-DRPF274X.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QL5RVYOA.js → chunk-DU66JUGT.js} +16 -14
- package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UVC5LOR7.js → chunk-E2Q2ULMR.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-U2Z5YUSO.js → chunk-EVWYAG46.js} +9 -11
- package/dist/cli-bundle/chunks/{chunk-U2Z5YUSO.js.map → chunk-EVWYAG46.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-5VOINNKT.js → chunk-F6VH3LFC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VFAQ4LMN.js → chunk-F7G53BOA.js} +18 -11
- package/dist/cli-bundle/chunks/chunk-F7G53BOA.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-Q2KNGP7C.js → chunk-FBZ5XAAF.js} +9 -11
- package/dist/cli-bundle/chunks/{chunk-Q2KNGP7C.js.map → chunk-FBZ5XAAF.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-H4IIJDE4.js → chunk-FDEVKXC4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7UGEAPRY.js → chunk-GF7EAR22.js} +10 -14
- package/dist/cli-bundle/chunks/{chunk-7UGEAPRY.js.map → chunk-GF7EAR22.js.map} +1 -1
- package/dist/cli-bundle/chunks/{context-DHLVPXN3.js → chunk-HIBK6H4S.js} +20 -22
- package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-34EONI5F.js → chunk-HUYYMTGW.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-IBMFIKVS.js +14 -0
- package/dist/cli-bundle/chunks/chunk-IBMFIKVS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BB6MDVNQ.js → chunk-IBU2LLWM.js} +8 -12
- package/dist/cli-bundle/chunks/{chunk-BB6MDVNQ.js.map → chunk-IBU2LLWM.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-55ISXAQH.js → chunk-IDYCAK35.js} +53 -54
- package/dist/cli-bundle/chunks/chunk-IDYCAK35.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-M4T5DXD5.js → chunk-IF4ERU6A.js} +7 -9
- package/dist/cli-bundle/chunks/{chunk-M4T5DXD5.js.map → chunk-IF4ERU6A.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-CIIK67GW.js → chunk-IHXXUIXS.js} +4 -4
- package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js +2459 -0
- package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-SBQTAVJZ.js → chunk-JIP67N2K.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-JJ4SG243.js +119 -0
- package/dist/cli-bundle/chunks/chunk-JJ4SG243.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TQZH6OD6.js → chunk-JTRKME24.js} +11 -13
- package/dist/cli-bundle/chunks/{chunk-TQZH6OD6.js.map → chunk-JTRKME24.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-WBRKK5QR.js → chunk-JVQ7UOYC.js} +6 -8
- package/dist/cli-bundle/chunks/{chunk-WBRKK5QR.js.map → chunk-JVQ7UOYC.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-KQMUV6LX.js → chunk-JZG5ADVE.js} +191 -98
- package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-46G6RSB6.js → chunk-K46GQ265.js} +17 -15
- package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5UVVASSA.js → chunk-KGQ3W65B.js} +100 -35
- package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2T3JG6V4.js → chunk-KRASIL6M.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SR3EKWZG.js → chunk-KTMMTOIP.js} +127 -127
- package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DT5LPYOD.js → chunk-KYDYQMNW.js} +5 -7
- package/dist/cli-bundle/chunks/{chunk-DT5LPYOD.js.map → chunk-KYDYQMNW.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-IPKJ6B36.js → chunk-LBH7UYKY.js} +106 -34
- package/dist/cli-bundle/chunks/chunk-LBH7UYKY.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-P77P2ILI.js → chunk-MLHX6DN5.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YUDJD3XO.js → chunk-NIBP3I7A.js} +36 -10
- package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +1 -0
- package/dist/cli-bundle/chunks/{schema-RBTJ2YXW.js → chunk-NO6Y6FB2.js} +144 -67
- package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-2CKH2LMV.js → chunk-OB3RJV5F.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-OKQ22KTH.js +379 -0
- package/dist/cli-bundle/chunks/chunk-OKQ22KTH.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-FIGAZ4Y7.js → chunk-OUQ5JEFM.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NK3UPBVG.js → chunk-QE5UFCCO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-MJTINN54.js → chunk-RM6MHL6A.js} +110 -113
- package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-LRKKONT2.js → chunk-RPRW26NG.js} +12 -16
- package/dist/cli-bundle/chunks/{chunk-LRKKONT2.js.map → chunk-RPRW26NG.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-WM5ZVBPE.js → chunk-SJZTPVFT.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-MJTSZKK5.js → chunk-SNUK7H5J.js} +1363 -605
- package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js +2435 -0
- package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-W72GHSJE.js → chunk-TQ6E76BE.js} +11 -13
- package/dist/cli-bundle/chunks/{chunk-W72GHSJE.js.map → chunk-TQ6E76BE.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-ZRK4O56R.js → chunk-UB3V5WUI.js} +225 -189
- package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SKN7LC5W.js → chunk-UFKNF23C.js} +11 -23
- package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VAYA4XFX.js → chunk-V3KLX7U7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-GAJVRGGA.js → chunk-VD3LKZFX.js} +41 -254
- package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-AD3A7ZD6.js → chunk-VMY7MZEM.js} +10 -14
- package/dist/cli-bundle/chunks/{chunk-AD3A7ZD6.js.map → chunk-VMY7MZEM.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-VZDBVEZR.js +382 -0
- package/dist/cli-bundle/chunks/chunk-VZDBVEZR.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CE5P2NQR.js → chunk-WFJZDUM7.js} +19 -12
- package/dist/cli-bundle/chunks/chunk-WFJZDUM7.js.map +1 -0
- package/dist/cli-bundle/chunks/{schema-MNTAVQCY.js → chunk-WTRUDJ3R.js} +136 -66
- package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-T72AZDBA.js → chunk-YEDFE4DC.js} +6 -8
- package/dist/cli-bundle/chunks/{chunk-T72AZDBA.js.map → chunk-YEDFE4DC.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-YJIEJRZB.js +84 -0
- package/dist/cli-bundle/chunks/chunk-YJIEJRZB.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-H2IP4QLJ.js → chunk-Z55WX4IQ.js} +12 -16
- package/dist/cli-bundle/chunks/{chunk-H2IP4QLJ.js.map → chunk-Z55WX4IQ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-2RDVQEWV.js → chunk-Z5BM2FKQ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-66MEDTUD.js → chunk-ZEATCVAC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NCVCO3NZ.js → chunk-ZFIEEDTJ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-7SV63ZHD.js → chunk-ZIE6WXJ2.js} +128 -128
- package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +1 -0
- package/dist/cli-bundle/chunks/{claim-4KHAA2RN.js → claim-6NINZYB3.js} +10 -12
- package/dist/cli-bundle/chunks/{claim-4KHAA2RN.js.map → claim-6NINZYB3.js.map} +1 -1
- package/dist/cli-bundle/chunks/{claim-CSPJFLNH.js → claim-HMCLSLUE.js} +8 -10
- package/dist/cli-bundle/chunks/{claim-CSPJFLNH.js.map → claim-HMCLSLUE.js.map} +1 -1
- package/dist/cli-bundle/chunks/close-37KEHLYM.js +14 -0
- package/dist/cli-bundle/chunks/{close-W56IOGYG.js → close-OP3LK7Z2.js} +7 -8
- package/dist/cli-bundle/chunks/{close-many-BX5DCSVV.js → close-many-BFMP6HHK.js} +15 -17
- package/dist/cli-bundle/chunks/{close-many-BX5DCSVV.js.map → close-many-BFMP6HHK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{close-many-TQU5F4E4.js → close-many-CXJBOWWY.js} +17 -19
- package/dist/cli-bundle/chunks/{close-many-TQU5F4E4.js.map → close-many-CXJBOWWY.js.map} +1 -1
- package/dist/cli-bundle/chunks/{comments-VRECH75R.js → comments-ETHABIY6.js} +9 -11
- package/dist/cli-bundle/chunks/{comments-VRECH75R.js.map → comments-ETHABIY6.js.map} +1 -1
- package/dist/cli-bundle/chunks/{comments-U5KUC4EU.js → comments-MU2WMBUY.js} +11 -13
- package/dist/cli-bundle/chunks/{comments-U5KUC4EU.js.map → comments-MU2WMBUY.js.map} +1 -1
- package/dist/cli-bundle/chunks/{config-D3OKQO52.js → config-FIXJZEQK.js} +18 -387
- package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +7 -0
- package/dist/cli-bundle/chunks/{config-MMJA4LLK.js → config-X3ZVCUUG.js} +18 -380
- package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +1 -0
- package/dist/cli-bundle/chunks/context-7ZEZV3BV.js +42 -0
- package/dist/cli-bundle/chunks/context-XDI4DKKT.js +46 -0
- package/dist/cli-bundle/chunks/{contracts-XGVMMPC5.js → contracts-KP4QAGVW.js} +72 -15
- package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-C3SZCXXG.js → contracts-SMOAN5NF.js} +72 -15
- package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +7 -0
- package/dist/cli-bundle/chunks/{copy-HHL3K4QP.js → copy-CWM6SBY6.js} +7 -11
- package/dist/cli-bundle/chunks/{copy-HHL3K4QP.js.map → copy-CWM6SBY6.js.map} +1 -1
- package/dist/cli-bundle/chunks/{copy-5D5DX3VK.js → copy-JJ3KOQW2.js} +9 -13
- package/dist/cli-bundle/chunks/{copy-5D5DX3VK.js.map → copy-JJ3KOQW2.js.map} +1 -1
- package/dist/cli-bundle/chunks/create-DFMNBKBS.js +28 -0
- package/dist/cli-bundle/chunks/{create-IXY43O4H.js → create-J5Q2ELZT.js} +12 -14
- package/dist/cli-bundle/chunks/{delete-IBUR3M42.js → delete-2GZLQEUQ.js} +7 -9
- package/dist/cli-bundle/chunks/{delete-IBUR3M42.js.map → delete-2GZLQEUQ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{delete-QQC2FGUH.js → delete-OOQS4KVD.js} +5 -7
- package/dist/cli-bundle/chunks/{delete-QQC2FGUH.js.map → delete-OOQS4KVD.js.map} +1 -1
- package/dist/cli-bundle/chunks/{deps-KWKRHXIN.js → deps-IF4IGL4R.js} +6 -9
- package/dist/cli-bundle/chunks/{deps-KWKRHXIN.js.map → deps-IF4IGL4R.js.map} +1 -1
- package/dist/cli-bundle/chunks/{deps-VTPO4BSE.js → deps-ZVGGCRR6.js} +8 -11
- package/dist/cli-bundle/chunks/{deps-VTPO4BSE.js.map → deps-ZVGGCRR6.js.map} +1 -1
- package/dist/cli-bundle/chunks/{docs-IIO3FEUO.js → docs-2TIFR62T.js} +8 -9
- package/dist/cli-bundle/chunks/{docs-IIO3FEUO.js.map → docs-2TIFR62T.js.map} +1 -1
- package/dist/cli-bundle/chunks/{docs-7CHFHXLN.js → docs-NFTBCQQC.js} +10 -11
- package/dist/cli-bundle/chunks/{docs-7CHFHXLN.js.map → docs-NFTBCQQC.js.map} +1 -1
- package/dist/cli-bundle/chunks/{eval-IO7LREOL.js → eval-2F6EH4XN.js} +12 -14
- package/dist/cli-bundle/chunks/{eval-IO7LREOL.js.map → eval-2F6EH4XN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{eval-CEYYEPSX.js → eval-PFKXQR3B.js} +10 -12
- package/dist/cli-bundle/chunks/{eval-CEYYEPSX.js.map → eval-PFKXQR3B.js.map} +1 -1
- package/dist/cli-bundle/chunks/{extension-KCPUWSY2.js → extension-3LRYX7SW.js} +11 -7
- package/dist/cli-bundle/chunks/{extension-UTTQDUYI.js → extension-GMVOIP4O.js} +11 -7
- package/dist/cli-bundle/chunks/{files-Z2HHEFGP.js → files-DF3HO6XK.js} +11 -13
- package/dist/cli-bundle/chunks/{files-Z2HHEFGP.js.map → files-DF3HO6XK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{files-TPUL6KWB.js → files-T5ODMETM.js} +9 -11
- package/dist/cli-bundle/chunks/{files-TPUL6KWB.js.map → files-T5ODMETM.js.map} +1 -1
- package/dist/cli-bundle/chunks/{focus-YRNNH7IP.js → focus-DLXKK4AH.js} +10 -14
- package/dist/cli-bundle/chunks/{focus-YRNNH7IP.js.map → focus-DLXKK4AH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{focus-JVJCGC2D.js → focus-MY5ARIEK.js} +8 -12
- package/dist/cli-bundle/chunks/{focus-JVJCGC2D.js.map → focus-MY5ARIEK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{gc-O5GUO3SU.js → gc-FULIVYR4.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-PYVVEELM.js → gc-MDGRR2SU.js} +3 -3
- package/dist/cli-bundle/chunks/{get-X4O3HBEY.js → get-AWK324RS.js} +10 -13
- package/dist/cli-bundle/chunks/{get-X4O3HBEY.js.map → get-AWK324RS.js.map} +1 -1
- package/dist/cli-bundle/chunks/{get-ENLTEGTX.js → get-VYPIICPC.js} +12 -15
- package/dist/cli-bundle/chunks/{get-ENLTEGTX.js.map → get-VYPIICPC.js.map} +1 -1
- package/dist/cli-bundle/chunks/{health-5EXTY44Q.js → health-FBCVZGSX.js} +16 -17
- package/dist/cli-bundle/chunks/{health-5EXTY44Q.js.map → health-FBCVZGSX.js.map} +1 -1
- package/dist/cli-bundle/chunks/{health-BOTB7YSU.js → health-Q66C43GN.js} +18 -19
- package/dist/cli-bundle/chunks/{health-BOTB7YSU.js.map → health-Q66C43GN.js.map} +1 -1
- package/dist/cli-bundle/chunks/history-5XUSLAJA.js +18 -0
- package/dist/cli-bundle/chunks/{history-AJTXLT6S.js → history-X4OSES6K.js} +8 -10
- package/dist/cli-bundle/chunks/{history-compact-46MRHW3I.js → history-compact-2GHT32UX.js} +13 -16
- package/dist/cli-bundle/chunks/{history-compact-46MRHW3I.js.map → history-compact-2GHT32UX.js.map} +1 -1
- package/dist/cli-bundle/chunks/{history-compact-43OOUAWD.js → history-compact-WLCQEKXS.js} +11 -14
- package/dist/cli-bundle/chunks/{history-compact-43OOUAWD.js.map → history-compact-WLCQEKXS.js.map} +1 -1
- package/dist/cli-bundle/chunks/{history-redact-KUUUVUFM.js → history-redact-45YW65BK.js} +9 -11
- package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +19 -0
- package/dist/cli-bundle/chunks/{history-repair-B5PZBOPU.js → history-repair-FY75IC26.js} +13 -16
- package/dist/cli-bundle/chunks/{history-repair-B5PZBOPU.js.map → history-repair-FY75IC26.js.map} +1 -1
- package/dist/cli-bundle/chunks/{history-repair-VQTYOSRS.js → history-repair-GABSDSVD.js} +11 -14
- package/dist/cli-bundle/chunks/{history-repair-VQTYOSRS.js.map → history-repair-GABSDSVD.js.map} +1 -1
- package/dist/cli-bundle/chunks/{init-BNLVFPRG.js → init-KO7CGIRQ.js} +11 -11
- package/dist/cli-bundle/chunks/init-TRYJELH4.js +21 -0
- package/dist/cli-bundle/chunks/{learnings-MUUU5KMC.js → learnings-3F7YLI45.js} +9 -11
- package/dist/cli-bundle/chunks/{learnings-MUUU5KMC.js.map → learnings-3F7YLI45.js.map} +1 -1
- package/dist/cli-bundle/chunks/{learnings-XSGX52S7.js → learnings-LHZT5BHW.js} +11 -13
- package/dist/cli-bundle/chunks/{learnings-XSGX52S7.js.map → learnings-LHZT5BHW.js.map} +1 -1
- package/dist/cli-bundle/chunks/{list-32U7BSKE.js → list-ROT7JF62.js} +10 -10
- package/dist/cli-bundle/chunks/{list-ZEEOHLTQ.js → list-Y6AU5BJS.js} +10 -10
- package/dist/cli-bundle/chunks/next-66BJB4N2.js +277 -0
- package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +7 -0
- package/dist/cli-bundle/chunks/next-N5MWJTBY.js +274 -0
- package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +1 -0
- package/dist/cli-bundle/chunks/{notes-OHU25L3M.js → notes-EVJZ3VAB.js} +11 -13
- package/dist/cli-bundle/chunks/{notes-OHU25L3M.js.map → notes-EVJZ3VAB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{notes-NJ45OZGF.js → notes-FW6YFLND.js} +9 -11
- package/dist/cli-bundle/chunks/{notes-NJ45OZGF.js.map → notes-FW6YFLND.js.map} +1 -1
- package/dist/cli-bundle/chunks/{plan-LWWAEV5Y.js → plan-DQ7G4EDC.js} +15 -18
- package/dist/cli-bundle/chunks/{plan-LWWAEV5Y.js.map → plan-DQ7G4EDC.js.map} +1 -1
- package/dist/cli-bundle/chunks/{plan-KQA7CAKI.js → plan-ZHKZ7JVF.js} +17 -20
- package/dist/cli-bundle/chunks/{plan-KQA7CAKI.js.map → plan-ZHKZ7JVF.js.map} +1 -1
- package/dist/cli-bundle/chunks/profile-CHAW6SEA.js +1197 -0
- package/dist/cli-bundle/chunks/profile-CHAW6SEA.js.map +1 -0
- package/dist/cli-bundle/chunks/profile-UPZGCDOG.js +1235 -0
- package/dist/cli-bundle/chunks/profile-UPZGCDOG.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-DDCHPONM.js → register-list-query-KY6Z6WV7.js} +44 -20
- package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-YNPBVIKM.js → register-list-query-Y2VRHPCL.js} +45 -21
- package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-LAVKYY63.js → register-mutation-N6AYSKPM.js} +103 -37
- package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-7ALWDDAX.js → register-mutation-PCARIGZS.js} +104 -38
- package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-U5JAW3WE.js → register-operations-L6CYTOIH.js} +30 -32
- package/dist/cli-bundle/chunks/{register-operations-U5JAW3WE.js.map → register-operations-L6CYTOIH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-operations-R4VOQ6EF.js → register-operations-YAT6FUUB.js} +32 -34
- package/dist/cli-bundle/chunks/{register-operations-R4VOQ6EF.js.map → register-operations-YAT6FUUB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-setup-KBXQDCXE.js → register-setup-MPANILQF.js} +67 -24
- package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-RCRUHMSZ.js → register-setup-N7UGXYJC.js} +68 -25
- package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +1 -0
- package/dist/cli-bundle/chunks/{restore-6K53WOWO.js → restore-DKMCLPI5.js} +9 -11
- package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +17 -0
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-NJ5UVJFB.js → scheduling-shortcuts-3F4QUEDH.js} +14 -16
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-NJ5UVJFB.js.map → scheduling-shortcuts-3F4QUEDH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-OQVJXG3M.js → scheduling-shortcuts-BNZLQK36.js} +12 -14
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-OQVJXG3M.js.map → scheduling-shortcuts-BNZLQK36.js.map} +1 -1
- package/dist/cli-bundle/chunks/schema-OLT6LVKH.js +75 -0
- package/dist/cli-bundle/chunks/schema-XJXKJQF5.js +71 -0
- package/dist/cli-bundle/chunks/{search-6HOIVZDU.js → search-CX5UMV4H.js} +10 -12
- package/dist/cli-bundle/chunks/{search-ZWYEMASC.js → search-KP6H7COV.js} +10 -12
- package/dist/cli-bundle/chunks/{stats-R5OAJVZK.js → stats-7XW4OEMK.js} +20 -12
- package/dist/cli-bundle/chunks/stats-7XW4OEMK.js.map +7 -0
- package/dist/cli-bundle/chunks/{stats-FS742AMA.js → stats-QZUG6MX5.js} +21 -13
- package/dist/cli-bundle/chunks/stats-QZUG6MX5.js.map +1 -0
- package/dist/cli-bundle/chunks/{telemetry-7DIGDQUO.js → telemetry-DIFPXCAT.js} +4 -4
- package/dist/cli-bundle/chunks/{telemetry-FWEXSJLQ.js → telemetry-WTYFUPRL.js} +4 -4
- package/dist/cli-bundle/chunks/{test-NZF7OT2F.js → test-HU2BS7EY.js} +14 -16
- package/dist/cli-bundle/chunks/test-HU2BS7EY.js.map +1 -0
- package/dist/cli-bundle/chunks/test-QNDXZQCW.js +34 -0
- package/dist/cli-bundle/chunks/test-QNDXZQCW.js.map +7 -0
- package/dist/cli-bundle/chunks/{test-all-DPN62TX7.js → test-all-PZTBLLQ6.js} +17 -20
- package/dist/cli-bundle/chunks/{test-all-DPN62TX7.js.map → test-all-PZTBLLQ6.js.map} +1 -1
- package/dist/cli-bundle/chunks/{test-all-KL7TLMJF.js → test-all-XLPI4USF.js} +19 -22
- package/dist/cli-bundle/chunks/{test-all-KL7TLMJF.js.map → test-all-XLPI4USF.js.map} +1 -1
- package/dist/cli-bundle/chunks/{test-runs-C6CFIVOS.js → test-runs-CA6K32RD.js} +6 -7
- package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-IAJDL6CA.js → test-runs-LANLLPVO.js} +5 -6
- package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +7 -0
- package/dist/cli-bundle/chunks/update-DJKWLBWJ.js +28 -0
- package/dist/cli-bundle/chunks/update-DJKWLBWJ.js.map +1 -0
- package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +24 -0
- package/dist/cli-bundle/chunks/update-UXDLTEOZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{update-many-YEH2DQL6.js → update-many-LU3SCNK5.js} +32 -33
- package/dist/cli-bundle/chunks/{update-many-YEH2DQL6.js.map → update-many-LU3SCNK5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{update-many-MUTIOAP3.js → update-many-VW5DGF3S.js} +34 -35
- package/dist/cli-bundle/chunks/{update-many-MUTIOAP3.js.map → update-many-VW5DGF3S.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-HYJ3SWWU.js → upgrade-77FRUAXN.js} +12 -8
- package/dist/cli-bundle/chunks/{upgrade-HYJ3SWWU.js.map → upgrade-77FRUAXN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-UBNLBZNR.js → upgrade-ICXY244R.js} +10 -6
- package/dist/cli-bundle/chunks/{upgrade-UBNLBZNR.js.map → upgrade-ICXY244R.js.map} +1 -1
- package/dist/cli-bundle/chunks/{validate-6QWQVCX2.js → validate-2G566PKQ.js} +37 -28
- package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +7 -0
- package/dist/cli-bundle/chunks/{validate-W5V5ZGQX.js → validate-BDPVXHHH.js} +38 -29
- package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +1 -0
- package/dist/cli-bundle/main.js +56 -38
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/core/config/positional-value.d.ts +2 -0
- package/dist/core/config/positional-value.js +2 -2
- package/dist/core/config/positional-value.js.map +1 -1
- package/dist/core/extensions/activation-summary-markdown.d.ts +71 -0
- package/dist/core/extensions/activation-summary-markdown.js +140 -0
- package/dist/core/extensions/activation-summary-markdown.js.map +1 -0
- package/dist/core/extensions/activation-summary.d.ts +2 -0
- package/dist/core/extensions/activation-summary.js +3 -2
- package/dist/core/extensions/activation-summary.js.map +1 -1
- package/dist/core/extensions/capability-usage.d.ts +1 -1
- package/dist/core/extensions/capability-usage.js +4 -3
- package/dist/core/extensions/capability-usage.js.map +1 -1
- package/dist/core/extensions/extension-registries.js +3 -2
- package/dist/core/extensions/extension-registries.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +21 -1
- package/dist/core/extensions/extension-types.js +3 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +1 -2
- package/dist/core/extensions/loader.js +169 -103
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/version-compat.d.ts +107 -0
- package/dist/core/extensions/version-compat.js +130 -0
- package/dist/core/extensions/version-compat.js.map +1 -0
- package/dist/core/fs/fs-utils.js +27 -2
- package/dist/core/fs/fs-utils.js.map +1 -1
- package/dist/core/item/actionability.d.ts +57 -0
- package/dist/core/item/actionability.js +178 -0
- package/dist/core/item/actionability.js.map +1 -0
- package/dist/core/item/type-registry.js +18 -45
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/profile/profile-describe.d.ts +64 -0
- package/dist/core/profile/profile-describe.js +83 -0
- package/dist/core/profile/profile-describe.js.map +1 -0
- package/dist/core/profile/profile-lint.d.ts +53 -0
- package/dist/core/profile/profile-lint.js +422 -0
- package/dist/core/profile/profile-lint.js.map +1 -0
- package/dist/core/profile/profile-plan.d.ts +145 -0
- package/dist/core/profile/profile-plan.js +0 -0
- package/dist/core/profile/profile-plan.js.map +1 -0
- package/dist/core/profile/profile-presets.d.ts +218 -0
- package/dist/core/profile/profile-presets.js +325 -0
- package/dist/core/profile/profile-presets.js.map +1 -0
- package/dist/core/schema/fields-file.js +25 -25
- package/dist/core/schema/fields-file.js.map +1 -1
- package/dist/core/schema/item-types-file.js +3 -3
- package/dist/core/schema/item-types-file.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +4 -4
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/schema/status-defs-file.js +3 -3
- package/dist/core/schema/status-defs-file.js.map +1 -1
- package/dist/core/shared/serialization.js +83 -62
- package/dist/core/shared/serialization.js.map +1 -1
- package/dist/core/store/item-store.d.ts +1 -0
- package/dist/core/store/item-store.js +16 -8
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/paths.js +4 -32
- package/dist/core/store/paths.js.map +1 -1
- package/dist/core/store/settings.js +14 -14
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/observability.js +50 -54
- package/dist/core/telemetry/observability.js.map +1 -1
- package/dist/core/telemetry/runtime.js +11 -2
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/core/test/background-runs.js +3 -2
- package/dist/core/test/background-runs.js.map +1 -1
- package/dist/core/validate/linked-artifact-reference.d.ts +24 -0
- package/dist/core/validate/linked-artifact-reference.js +41 -0
- package/dist/core/validate/linked-artifact-reference.js.map +1 -0
- package/dist/mcp/server.js +183 -83
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-definitions.js +33 -2
- package/dist/mcp/tool-definitions.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-types.d.ts +1 -0
- package/dist/sdk/cli-contracts/commander-types.js +15 -2
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +3 -3
- package/dist/sdk/cli-contracts/enum-contracts.js +6 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.d.ts +149 -0
- package/dist/sdk/cli-contracts/flag-contracts.js +1583 -0
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -0
- package/dist/sdk/cli-contracts/string-lists.d.ts +14 -0
- package/dist/sdk/cli-contracts/string-lists.js +20 -0
- package/dist/sdk/cli-contracts/string-lists.js.map +1 -0
- package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.js +51 -109
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +17 -0
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +54 -5
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-schema.d.ts +74 -0
- package/dist/sdk/cli-contracts/tool-schema.js +840 -0
- package/dist/sdk/cli-contracts/tool-schema.js.map +1 -0
- package/dist/sdk/cli-contracts.d.ts +13 -193
- package/dist/sdk/cli-contracts.js +5 -2277
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/compose.d.ts +346 -4
- package/dist/sdk/compose.js +486 -15
- package/dist/sdk/compose.js.map +1 -1
- package/dist/sdk/define.d.ts +29 -14
- package/dist/sdk/define.js +21 -7
- package/dist/sdk/define.js.map +1 -1
- package/dist/sdk/index.d.ts +14 -3
- package/dist/sdk/index.js +14 -3
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/testing.d.ts +156 -3
- package/dist/sdk/testing.js +172 -4
- package/dist/sdk/testing.js.map +1 -1
- package/docs/AGENT_GUIDE.md +2 -0
- package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +37 -0
- package/docs/EXTENSIONS.md +20 -20
- package/docs/RELEASING.md +6 -1
- package/docs/SDK.md +387 -20
- package/docs/TESTING.md +12 -0
- package/docs/examples/policy-restricted-extension/README.md +6 -0
- package/docs/examples/policy-restricted-extension/index.ts +40 -0
- package/docs/examples/policy-restricted-extension/manifest.json +2 -2
- package/docs/examples/starter-extension/README.md +14 -2
- package/docs/examples/starter-extension/{index.js → index.ts} +51 -6
- package/docs/examples/starter-extension/manifest.json +2 -2
- package/package.json +20 -7
- package/packages/pm-beads/extensions/beads/index.ts +3 -3
- package/packages/pm-beads/extensions/beads/manifest.json +2 -2
- package/packages/pm-beads/extensions/beads/runtime-loader.ts +19 -7
- package/packages/pm-beads/extensions/beads/runtime.ts +155 -37
- package/packages/pm-calendar/extensions/calendar/index.ts +3 -3
- package/packages/pm-calendar/extensions/calendar/manifest.json +2 -2
- package/packages/pm-calendar/extensions/calendar/runtime.ts +2 -2
- package/packages/pm-command-kit/extensions/command-kit/index.ts +1 -1
- package/packages/pm-command-kit/extensions/command-kit/manifest.json +2 -2
- package/packages/pm-governance-audit/extensions/governance-audit/index.ts +2 -2
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +2 -2
- package/packages/pm-governance-audit/extensions/governance-audit/runtime.ts +1 -1
- package/packages/pm-guide-shell/extensions/guide-shell/index.ts +2 -2
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +2 -2
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +1 -1
- package/packages/pm-kanban/README.md +97 -0
- package/packages/pm-kanban/extensions/kanban/index.ts +191 -0
- package/packages/pm-kanban/extensions/kanban/manifest.json +19 -0
- package/packages/pm-kanban/package.json +57 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.ts +1 -1
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +2 -2
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.ts +2 -2
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +2 -2
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.ts +1 -1
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +2 -2
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +2 -2
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +1 -1
- package/packages/pm-templates/extensions/templates/index.ts +2 -2
- package/packages/pm-templates/extensions/templates/manifest.json +2 -2
- package/packages/pm-templates/extensions/templates/runtime.ts +1 -1
- package/packages/pm-todos/extensions/todos/index.ts +3 -3
- package/packages/pm-todos/extensions/todos/manifest.json +2 -2
- package/packages/pm-todos/extensions/todos/runtime-loader.ts +19 -7
- package/packages/pm-todos/extensions/todos/runtime.ts +177 -43
- package/plugins/pm-claude/scripts/pm-mcp-server.mjs +2 -2
- package/plugins/pm-codex/scripts/pm-mcp-server.mjs +2 -2
- package/scripts/bundle-cli.mjs +1 -1
- package/dist/cli-bundle/chunks/activity-XUZ2AHCW.js +0 -18
- package/dist/cli-bundle/chunks/aggregate-EGJLZQBI.js.map +0 -7
- package/dist/cli-bundle/chunks/aggregate-R725FC3S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2BFPAUAF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-46G6RSB6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-55ISXAQH.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5UVVASSA.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7MRQ4HMK.js +0 -78
- package/dist/cli-bundle/chunks/chunk-7MRQ4HMK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7SV63ZHD.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-AONIHR2C.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-C5AOG6D2.js +0 -691
- package/dist/cli-bundle/chunks/chunk-C5AOG6D2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-CE5P2NQR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-CKGNPJAG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-G6PYHBBR.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-GAJVRGGA.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-HFFUQR73.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IPKJ6B36.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JR2LV3M4.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KFWBJPSG.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KQMUV6LX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-MJTINN54.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MJTSZKK5.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MVKFOLLM.js +0 -694
- package/dist/cli-bundle/chunks/chunk-MVKFOLLM.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QH3PJYON.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-QL5RVYOA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-S26C36QC.js +0 -83
- package/dist/cli-bundle/chunks/chunk-S26C36QC.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-S2RUQSX2.js +0 -75
- package/dist/cli-bundle/chunks/chunk-S2RUQSX2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SKH7OGE5.js +0 -86
- package/dist/cli-bundle/chunks/chunk-SKH7OGE5.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SKN7LC5W.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SR3EKWZG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-UELRKQQU.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VFAQ4LMN.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-Y4SUQQYH.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YDEXO24S.js +0 -654
- package/dist/cli-bundle/chunks/chunk-YDEXO24S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YJ3SUEPD.js +0 -657
- package/dist/cli-bundle/chunks/chunk-YJ3SUEPD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YUDJD3XO.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ZRK4O56R.js.map +0 -1
- package/dist/cli-bundle/chunks/close-A3EMKBBY.js +0 -15
- package/dist/cli-bundle/chunks/config-D3OKQO52.js.map +0 -7
- package/dist/cli-bundle/chunks/config-MMJA4LLK.js.map +0 -1
- package/dist/cli-bundle/chunks/context-BLBD3PUB.js.map +0 -7
- package/dist/cli-bundle/chunks/context-DHLVPXN3.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-C3SZCXXG.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-XGVMMPC5.js.map +0 -1
- package/dist/cli-bundle/chunks/create-QVGFYA2X.js +0 -30
- package/dist/cli-bundle/chunks/history-AK3E5Z3C.js +0 -20
- package/dist/cli-bundle/chunks/history-redact-TWIYQV5J.js +0 -21
- package/dist/cli-bundle/chunks/init-RCRKW5PL.js +0 -21
- package/dist/cli-bundle/chunks/register-list-query-DDCHPONM.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-YNPBVIKM.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-7ALWDDAX.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-LAVKYY63.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-KBXQDCXE.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-RCRUHMSZ.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-2ZKT6UDC.js +0 -19
- package/dist/cli-bundle/chunks/schema-MNTAVQCY.js.map +0 -1
- package/dist/cli-bundle/chunks/schema-RBTJ2YXW.js.map +0 -7
- package/dist/cli-bundle/chunks/stats-FS742AMA.js.map +0 -1
- package/dist/cli-bundle/chunks/stats-R5OAJVZK.js.map +0 -7
- package/dist/cli-bundle/chunks/test-QJXLKV26.js +0 -36
- package/dist/cli-bundle/chunks/test-runs-C6CFIVOS.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-IAJDL6CA.js.map +0 -7
- package/dist/cli-bundle/chunks/update-2XCQNOD6.js +0 -28
- package/dist/cli-bundle/chunks/update-IWUCXVH2.js +0 -24
- package/dist/cli-bundle/chunks/validate-6QWQVCX2.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-W5V5ZGQX.js.map +0 -1
- package/docs/examples/policy-restricted-extension/index.js +0 -21
- package/packages/pm-beads/extensions/beads/index.js +0 -64
- package/packages/pm-beads/extensions/beads/runtime-loader.js +0 -86
- package/packages/pm-beads/extensions/beads/runtime.js +0 -482
- package/packages/pm-calendar/extensions/calendar/index.js +0 -150
- package/packages/pm-calendar/extensions/calendar/runtime.js +0 -126
- package/packages/pm-command-kit/extensions/command-kit/index.js +0 -181
- package/packages/pm-governance-audit/extensions/governance-audit/index.js +0 -177
- package/packages/pm-governance-audit/extensions/governance-audit/runtime.js +0 -153
- package/packages/pm-guide-shell/extensions/guide-shell/index.js +0 -98
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +0 -294
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.js +0 -18
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.js +0 -124
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.js +0 -110
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +0 -258
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +0 -361
- package/packages/pm-templates/extensions/templates/index.js +0 -132
- package/packages/pm-templates/extensions/templates/runtime.js +0 -35
- package/packages/pm-todos/extensions/todos/index.js +0 -81
- package/packages/pm-todos/extensions/todos/runtime-loader.js +0 -86
- package/packages/pm-todos/extensions/todos/runtime.js +0 -545
- /package/dist/cli-bundle/chunks/{activity-XUZ2AHCW.js.map → activity-EJBMXUBH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-H2LMOSSW.js.map → activity-MVSEND6D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IB3GYLQE.js.map → chunk-3JWQCLR5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2A34E3BA.js.map → chunk-4TXTVZL3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-G6N5VEOK.js.map → chunk-4YIMPANT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7XGQXHFB.js.map → chunk-73PTKMAE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3VY3YQO6.js.map → chunk-7RIJGN4R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FXR67XVQ.js.map → chunk-BN3CWK6G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4BHT5VDC.js.map → chunk-C2KCIZKZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-O6LLO73I.js.map → chunk-CHRNYKNI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZQ3ZVXX2.js.map → chunk-D6USKAMA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WZQWHN4R.js.map → chunk-DLDCPF5X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UVC5LOR7.js.map → chunk-E2Q2ULMR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5VOINNKT.js.map → chunk-F6VH3LFC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-H4IIJDE4.js.map → chunk-FDEVKXC4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-34EONI5F.js.map → chunk-HUYYMTGW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CIIK67GW.js.map → chunk-IHXXUIXS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SBQTAVJZ.js.map → chunk-JIP67N2K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2T3JG6V4.js.map → chunk-KRASIL6M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-P77P2ILI.js.map → chunk-MLHX6DN5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2CKH2LMV.js.map → chunk-OB3RJV5F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FIGAZ4Y7.js.map → chunk-OUQ5JEFM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NK3UPBVG.js.map → chunk-QE5UFCCO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WM5ZVBPE.js.map → chunk-SJZTPVFT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VAYA4XFX.js.map → chunk-V3KLX7U7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2RDVQEWV.js.map → chunk-Z5BM2FKQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-66MEDTUD.js.map → chunk-ZEATCVAC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NCVCO3NZ.js.map → chunk-ZFIEEDTJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-A3EMKBBY.js.map → close-37KEHLYM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-W56IOGYG.js.map → close-OP3LK7Z2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-QVGFYA2X.js.map → context-7ZEZV3BV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-IXY43O4H.js.map → context-XDI4DKKT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-UTTQDUYI.js.map → create-DFMNBKBS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-KCPUWSY2.js.map → create-J5Q2ELZT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-AJTXLT6S.js.map → extension-3LRYX7SW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-AK3E5Z3C.js.map → extension-GMVOIP4O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-O5GUO3SU.js.map → gc-FULIVYR4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-PYVVEELM.js.map → gc-MDGRR2SU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-TWIYQV5J.js.map → history-5XUSLAJA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-KUUUVUFM.js.map → history-X4OSES6K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-BNLVFPRG.js.map → history-redact-45YW65BK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-RCRKW5PL.js.map → history-redact-BVHWDXPR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-32U7BSKE.js.map → init-KO7CGIRQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-ZEEOHLTQ.js.map → init-TRYJELH4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-6K53WOWO.js.map → list-ROT7JF62.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-2ZKT6UDC.js.map → list-Y6AU5BJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-6HOIVZDU.js.map → restore-DKMCLPI5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-ZWYEMASC.js.map → restore-IRAKSWIW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-NZF7OT2F.js.map → schema-OLT6LVKH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-QJXLKV26.js.map → schema-XJXKJQF5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-2XCQNOD6.js.map → search-CX5UMV4H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-IWUCXVH2.js.map → search-KP6H7COV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-7DIGDQUO.js.map → telemetry-DIFPXCAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-FWEXSJLQ.js.map → telemetry-WTYFUPRL.js.map} +0 -0
package/docs/SDK.md
CHANGED
|
@@ -37,7 +37,13 @@ Common authoring exports:
|
|
|
37
37
|
|
|
38
38
|
- `defineExtension`
|
|
39
39
|
- `composeExtension` / `deriveExtensionCapabilities`
|
|
40
|
+
- `mergeExtensionBlueprints` (combine partial blueprints into one for modular authoring)
|
|
41
|
+
- `composeExtensionPackage` (author-once capstone: returns both the module and its synthesized manifest)
|
|
42
|
+
- `synthesizeExtensionManifest` (generate a complete least-privilege manifest from a blueprint)
|
|
40
43
|
- `describeExtensionBlueprint` (static surface map of a blueprint) / `lintExtensionBlueprint` (author-time preflight)
|
|
44
|
+
- `renderExtensionSurfaceMarkdown` (render a describe summary to a drift-free Markdown reference doc for a package README)
|
|
45
|
+
- `checkExtensionManifestCompatibility` (author-time `pm_min_version`/`pm_max_version` check against a target pm version)
|
|
46
|
+
- `preflightExtension` (one-call capstone: lint + manifest synthesis + version-compat in a single consolidated report)
|
|
41
47
|
- `EXTENSION_CAPABILITIES`
|
|
42
48
|
- `EXTENSION_CAPABILITY_CONTRACT`
|
|
43
49
|
- `EXTENSION_CAPABILITY_CONTRACT_VERSION`
|
|
@@ -53,11 +59,29 @@ Common authoring exports:
|
|
|
53
59
|
Registration builders (`define*`, zero-cost identity — see [Authoring Builders](#authoring-builders)):
|
|
54
60
|
|
|
55
61
|
- `defineCommand` / `defineFlag` / `defineItemType` / `defineItemField` / `defineMigration`
|
|
62
|
+
- `defineProjectProfile` (archetype bundle of types/statuses/fields/workflows/config/templates/packages — powers `pm profile`)
|
|
56
63
|
- `defineSearchProvider` / `defineVectorStoreAdapter`
|
|
57
64
|
- `defineCommandOverride` / `defineParserOverride` / `definePreflightOverride` / `defineServiceOverride` / `defineRendererOverride`
|
|
58
65
|
- `defineImporter` / `defineExporter`
|
|
59
66
|
- `defineBeforeCommandHook` / `defineAfterCommandHook` / `defineOnWriteHook` / `defineOnReadHook` / `defineOnIndexHook`
|
|
60
67
|
|
|
68
|
+
Project profiles:
|
|
69
|
+
|
|
70
|
+
- `defineProjectProfile` / `BUILTIN_PROFILES` / `PROFILE_NAMES` / `resolveProfile` / `listProfiles` / `normalizeProfileName`
|
|
71
|
+
- `describeProjectProfile` (pure composition summary — per-dimension counts plus resolved entry identifiers; the project-profile analogue of `describeExtensionBlueprint`) and `describeProfileComposition`
|
|
72
|
+
- `lintProjectProfile` (pure, tracker-independent author-time consistency check that grades findings `error`/`warning` across every dimension — invalid/duplicate types, statuses, fields; workflows governing undeclared types or referencing undeclared statuses; unknown/invalid config knobs; templates creating undeclared types; empty package specs) and its `ProjectProfileLintReport` / `ProjectProfileLintFinding` types
|
|
73
|
+
- `assertProjectProfile` (the throwing test counterpart: fails on any `error` finding, or on warnings too with `{ strict: true }` — the profile analogue of `assertExtensionBlueprint`)
|
|
74
|
+
- `planProfileApplication` (pure, idempotent diff of a profile against the current tracker state) and its `ProfileApplicationPlan` / `ProfileCurrentState` types
|
|
75
|
+
- The bundled [pm-kanban exemplar](../packages/pm-kanban/README.md) ships a complete archetype as an installable package: it registers the live schema (`Card` type + flow fields) and exports a `ProjectProfileDefinition` the planner can stage, all on public SDK primitives.
|
|
76
|
+
|
|
77
|
+
Author-time lifecycle: `defineProjectProfile` → `lintProjectProfile` / `assertProjectProfile` (validate before registering) → `api.registerProfile` → `describeProjectProfile` / `planProfileApplication` (preview) → `pm profile apply`. Validate a profile in a package test before it ships:
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
import { assertProjectProfile } from "@unbrained/pm-cli/sdk/testing";
|
|
81
|
+
|
|
82
|
+
assertProjectProfile(kanbanProfile); // throws on any error finding
|
|
83
|
+
```
|
|
84
|
+
|
|
61
85
|
Package manifest exports:
|
|
62
86
|
|
|
63
87
|
- `PM_PACKAGE_RESOURCE_KINDS` (`extensions`, `docs`, `examples`, `assets`, `prompts`)
|
|
@@ -113,12 +137,17 @@ Testing helper exports (also under `@unbrained/pm-cli/sdk/testing`):
|
|
|
113
137
|
- `assertRegisteredVectorStoreAdapter`
|
|
114
138
|
- `assertRegisteredItemField`
|
|
115
139
|
- `assertRegisteredItemType`
|
|
140
|
+
- `assertRegisteredProfile`
|
|
116
141
|
- `assertRegisteredServiceOverride`
|
|
117
142
|
- `assertRegisteredMigration`
|
|
118
143
|
- `assertExtensionCapabilityUsage`
|
|
119
144
|
- `assertExtensionBlueprint` (throwing preflight; pairs with `lintExtensionBlueprint`)
|
|
145
|
+
- `assertExtensionManifestMatchesBlueprint` (strict manifest↔blueprint capability guard)
|
|
146
|
+
- `assertExtensionManifestCompatible` (throwing version-bound guard; pairs with `checkExtensionManifestCompatibility`)
|
|
147
|
+
- `assertExtensionPreflight` (one-line throwing capstone over `preflightExtension`; replaces chaining the three asserts above)
|
|
120
148
|
- `describeExtensionActivation`
|
|
121
149
|
- `describeExtensionBlueprint` / `lintExtensionBlueprint` (also surfaced here for the full author → describe → preflight → test loop)
|
|
150
|
+
- `renderExtensionSurfaceMarkdown` (render the describe summary to a drift-free Markdown reference; powers `describe --markdown`)
|
|
122
151
|
|
|
123
152
|
`createExtensionTestHarness(module, options)` is the recommended entry point and
|
|
124
153
|
the ergonomic capstone over every standalone helper below: it activates the
|
|
@@ -129,8 +158,13 @@ never threads `activation.registrations` vs `activation.commands` vs
|
|
|
129
158
|
surfaces as a confusing `available: (none)` error. Write
|
|
130
159
|
`const ext = await createExtensionTestHarness(module, { capabilities: ["commands"] })`,
|
|
131
160
|
then `ext.assertCommandContract({ command })`, `await ext.runCommand({ command })`,
|
|
132
|
-
|
|
133
|
-
|
|
161
|
+
`ext.activationSummary()`, `ext.renderMarkdown({ title: "My package" })`, and
|
|
162
|
+
`await ext.deactivate()`. `activationSummary()` returns the same
|
|
163
|
+
`ExtensionActivationSummary` as `describeExtensionActivation(ext.activation)`;
|
|
164
|
+
`renderMarkdown()` feeds that summary through `renderExtensionSurfaceMarkdown`,
|
|
165
|
+
with an optional `extensionName` filter for scoped package docs. The methods do
|
|
166
|
+
not use `this`, so they remain safe to destructure
|
|
167
|
+
(`const { runCommand, renderMarkdown } = ext;`), and the raw `ext.activation`
|
|
134
168
|
stays public as an escape hatch to the standalone helpers for any surface a
|
|
135
169
|
convenience method does not cover.
|
|
136
170
|
|
|
@@ -281,6 +315,33 @@ to "what does this installed package add to my context?" — distinct from
|
|
|
281
315
|
`pm package doctor` (errors/policy) and `pm package manage` (update metadata), which
|
|
282
316
|
report only command/action paths, not the full registration surface.
|
|
283
317
|
|
|
318
|
+
`renderExtensionSurfaceMarkdown(summary, options?)` is the **render** leg of the
|
|
319
|
+
describe verb: it projects any `ExtensionActivationSummary` to a deterministic
|
|
320
|
+
Markdown reference document — a title heading, a one-line capabilities summary,
|
|
321
|
+
and a section per registered surface. Pipe `describeExtensionBlueprint(blueprint)`
|
|
322
|
+
straight into it during a build or test step and embed the result in your
|
|
323
|
+
README, and the "commands & capabilities" reference can never drift from the
|
|
324
|
+
surface the loader actually registers ("project management = context
|
|
325
|
+
management"). `options.title` / `options.headingLevel` (an integer in `[1, 6]`,
|
|
326
|
+
default `2`; section headings render one level deeper) control nesting, and
|
|
327
|
+
`options.includeEmpty` renders every section (as `_None._`) rather than omitting
|
|
328
|
+
empty ones.
|
|
329
|
+
|
|
330
|
+
```ts
|
|
331
|
+
import { describeExtensionBlueprint, renderExtensionSurfaceMarkdown } from "@unbrained/pm-cli/sdk";
|
|
332
|
+
|
|
333
|
+
const reference = renderExtensionSurfaceMarkdown(describeExtensionBlueprint(blueprint), { title: "my-pkg", headingLevel: 2 });
|
|
334
|
+
// → "## my-pkg\n\nCapabilities: `commands`, `schema`\n\n### Commands\n\n- `greet hello`\n…"
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
The same renderer powers `pm extension describe --markdown` / `pm package
|
|
338
|
+
describe --markdown`, which compose a per-extension section plus a union section
|
|
339
|
+
across every loaded extension. Add `--output docs/package-reference.md` to write
|
|
340
|
+
the generated Markdown directly to a file for README/reference-doc refreshes.
|
|
341
|
+
`--markdown` is a presentation format (it cannot be combined with `--json`);
|
|
342
|
+
MCP `describe` keeps returning the structured summary, which a caller can hand to
|
|
343
|
+
`renderExtensionSurfaceMarkdown` itself.
|
|
344
|
+
|
|
284
345
|
Commander option contract exports:
|
|
285
346
|
|
|
286
347
|
- `CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS`
|
|
@@ -405,6 +466,8 @@ const ext = await createExtensionTestHarness(extensionModule, { capabilities: ["
|
|
|
405
466
|
ext.assertCommandContract({ command: "incident triage", flags: ["--severity"] });
|
|
406
467
|
ext.assertFlags({ targetCommand: "list", flags: ["--incident-filter"] });
|
|
407
468
|
const { result } = await ext.runCommand({ command: "incident triage", options: { severity: "high" } });
|
|
469
|
+
const summary = ext.activationSummary();
|
|
470
|
+
const reference = ext.renderMarkdown({ title: "incident package surfaces" });
|
|
408
471
|
await ext.deactivate();
|
|
409
472
|
```
|
|
410
473
|
|
|
@@ -420,6 +483,7 @@ For provider-safe schemas, use `PM_PROVIDER_TOOL_PARAMETERS_SCHEMA`. It is flat
|
|
|
420
483
|
| `registerItemFields` | `schema` |
|
|
421
484
|
| `registerItemTypes` | `schema` |
|
|
422
485
|
| `registerMigration` | `schema` |
|
|
486
|
+
| `registerProfile` | `schema` |
|
|
423
487
|
| `registerImporter` | `importers` |
|
|
424
488
|
| `registerExporter` | `importers` |
|
|
425
489
|
| `registerParser` | `parser` |
|
|
@@ -470,7 +534,7 @@ Manifest:
|
|
|
470
534
|
{
|
|
471
535
|
"name": "hello",
|
|
472
536
|
"version": "0.1.0",
|
|
473
|
-
"entry": "./index.
|
|
537
|
+
"entry": "./index.ts",
|
|
474
538
|
"pm_min_version": "2026.5.31",
|
|
475
539
|
"trusted": true,
|
|
476
540
|
"sandbox_profile": "strict",
|
|
@@ -494,7 +558,7 @@ Manifest typing also accepts optional `engines` metadata:
|
|
|
494
558
|
{
|
|
495
559
|
"engines": {
|
|
496
560
|
"pm": ">=2026.5.31",
|
|
497
|
-
"node": ">=
|
|
561
|
+
"node": ">=22.18"
|
|
498
562
|
}
|
|
499
563
|
}
|
|
500
564
|
```
|
|
@@ -519,7 +583,59 @@ scaffold paired import/export commands with example flag metadata and a runnable
|
|
|
519
583
|
`node:test` file that exercises `assertRegisteredImporter`,
|
|
520
584
|
`assertRegisteredExporter`, `runRegisteredImporterForTest`, and
|
|
521
585
|
`runRegisteredExporterForTest`; the generated manifest declares both `importers`
|
|
522
|
-
and `schema` because extension flag metadata is schema-governed.
|
|
586
|
+
and `schema` because extension flag metadata is schema-governed. Pass
|
|
587
|
+
`--capability schema` to scaffold a command plus a custom item type, item field,
|
|
588
|
+
and migration (via `registerItemTypes`/`registerItemFields`/`registerMigration`)
|
|
589
|
+
and a runnable `node:test` file that exercises `assertRegisteredItemType`,
|
|
590
|
+
`assertRegisteredItemField`, `assertRegisteredMigration`, and
|
|
591
|
+
`runRegisteredMigrationForTest` — a copyable starting point for modeling a
|
|
592
|
+
project domain. Pass `--capability profile` to scaffold a command plus a complete
|
|
593
|
+
project-profile archetype (item types, statuses, fields, a per-type workflow,
|
|
594
|
+
config, a create template, and package recommendations via `registerProfile`) and
|
|
595
|
+
a `node:test` file exercising the harness-bound `assertProfile` (the public
|
|
596
|
+
`assertRegisteredProfile`); it omits
|
|
597
|
+
`activation.commands` (granted by the same `schema` capability) so the contributed
|
|
598
|
+
profile resolves through `pm profile list/show/apply` and `pm profile apply <name>`
|
|
599
|
+
tailors a fresh tracker in one shot — the broadest customization primitive in one
|
|
600
|
+
copyable starter.
|
|
601
|
+
|
|
602
|
+
The four override surfaces complete the matrix to one starter per SDK
|
|
603
|
+
registration capability. Pass `--capability renderers` to scaffold a `toon`
|
|
604
|
+
output renderer override (via `registerRenderer`, scoped to its own command so
|
|
605
|
+
other output passes through) with a `node:test` file exercising
|
|
606
|
+
`assertRegisteredRendererOverride` and `runRegisteredRendererOverrideForTest`;
|
|
607
|
+
`--capability parser` for a parser override (via `registerParser`) that rewrites
|
|
608
|
+
the command's parsed options — the starter command declares matching
|
|
609
|
+
`--shout`/`--upper` flags (so the manifest also declares `schema`) and surfaces
|
|
610
|
+
the normalized value, making the override runnable through `pm <command> --shout`
|
|
611
|
+
— exercising `assertRegisteredParserOverride` and
|
|
612
|
+
`runRegisteredParserOverrideForTest`; `--capability preflight` for a preflight
|
|
613
|
+
override (via `registerPreflight`) over pm's pre-run migration/format gate
|
|
614
|
+
decision, exercising `assertRegisteredPreflightOverride` and
|
|
615
|
+
`runRegisteredPreflightOverrideForTest`; and `--capability services` for an
|
|
616
|
+
`output_format` service override (via `registerService`, scoped to its own
|
|
617
|
+
command), exercising `assertRegisteredServiceOverride` and
|
|
618
|
+
`runRegisteredServiceOverrideForTest`.
|
|
619
|
+
|
|
620
|
+
Every command-bearing variant's generated `manifest.json` also declares
|
|
621
|
+
`activation.commands` — the exact command paths the starter registers — so pm
|
|
622
|
+
activates the package lazily, importing and running `activate` only when an
|
|
623
|
+
invoked command matches. This mirrors every first-party bundled package and is
|
|
624
|
+
the contract authors keep in sync with their registrations: an omitted or stale
|
|
625
|
+
entry means the matching command will not dispatch from the CLI (globally-scoped
|
|
626
|
+
surfaces such as hooks and search providers for built-in search commands still
|
|
627
|
+
activate regardless). The `schema` starter is the deliberate exception: it omits
|
|
628
|
+
`activation.commands` so its custom item type — a global contribution that
|
|
629
|
+
built-in commands like `pm create <type>` must see — activates conservatively for
|
|
630
|
+
every command rather than gating on the package's own commands.
|
|
631
|
+
|
|
632
|
+
Each `--capability` starter authors an imperative `activate` body. To scaffold the
|
|
633
|
+
declarative `composeExtension` form instead, pass `--declarative` to
|
|
634
|
+
`pm package init` / `pm package scaffold` (it is an init/scaffold flag, package-mode
|
|
635
|
+
only — every `--capability` variant emits its blueprint form, since `composeExtension`
|
|
636
|
+
is a runtime SDK value import that only package-mode authoring links) — see
|
|
637
|
+
[Declarative Authoring](#declarative-authoring). See [EXTENSIONS.md](EXTENSIONS.md)
|
|
638
|
+
for the manifest-field reference.
|
|
523
639
|
|
|
524
640
|
## Self-Identity and Lifecycle
|
|
525
641
|
|
|
@@ -637,17 +753,20 @@ argument unchanged), exactly like `defineExtension` and the wider
|
|
|
637
753
|
`defineConfig`/`defineComponent` ecosystem convention — the value is entirely at
|
|
638
754
|
the type level.
|
|
639
755
|
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
756
|
+
pm packages are authored **and loaded** as TypeScript (ADR
|
|
757
|
+
[pm-2c28](../.agents/pm/decisions/pm-2c28.toon) / [pm-m1uz](../.agents/pm/decisions/pm-m1uz.toon)). A bare `const cmd = { ... }`
|
|
758
|
+
satisfies the registration types only structurally and widens its literals;
|
|
759
|
+
wrapping it in a builder checks the object against the contract *and* preserves
|
|
760
|
+
the narrow literal types, while inferring the nested handler's `context`
|
|
761
|
+
parameter from the builder signature — the same ergonomics `defineConfig` gives a
|
|
762
|
+
Vite config. It also lets you colocate, export, reuse, and unit-test a definition
|
|
645
763
|
apart from `activate`:
|
|
646
764
|
|
|
647
|
-
```
|
|
765
|
+
```ts
|
|
648
766
|
import { defineCommand, defineAfterCommandHook } from "@unbrained/pm-cli/sdk";
|
|
767
|
+
import type { ExtensionApi } from "@unbrained/pm-cli/sdk";
|
|
649
768
|
|
|
650
|
-
// `context` is inferred
|
|
769
|
+
// `context` is inferred from the builder signature; the literal name/action are preserved.
|
|
651
770
|
export const greetCommand = defineCommand({
|
|
652
771
|
name: "greet hello",
|
|
653
772
|
action: "greet-hello",
|
|
@@ -660,7 +779,7 @@ export const auditHook = defineAfterCommandHook((context) => {
|
|
|
660
779
|
// react to context.affected — "project management = context management"
|
|
661
780
|
});
|
|
662
781
|
|
|
663
|
-
export function activate(api) {
|
|
782
|
+
export function activate(api: ExtensionApi): void {
|
|
664
783
|
api.registerCommand(greetCommand);
|
|
665
784
|
api.hooks.afterCommand(auditHook);
|
|
666
785
|
}
|
|
@@ -693,8 +812,9 @@ SDK generate the `activate` for you. Every field is optional; populate the
|
|
|
693
812
|
surfaces you use (ideally with `define*`-authored definitions) and leave the rest
|
|
694
813
|
out:
|
|
695
814
|
|
|
696
|
-
```
|
|
815
|
+
```ts
|
|
697
816
|
import { composeExtension, defineCommand, deriveExtensionCapabilities } from "@unbrained/pm-cli/sdk";
|
|
817
|
+
import type { ExtensionBlueprint } from "@unbrained/pm-cli/sdk";
|
|
698
818
|
|
|
699
819
|
const echo = defineCommand({
|
|
700
820
|
name: "command-kit echo",
|
|
@@ -703,7 +823,7 @@ const echo = defineCommand({
|
|
|
703
823
|
run: (context) => ({ message: context.args.join(" ") }),
|
|
704
824
|
});
|
|
705
825
|
|
|
706
|
-
const blueprint = {
|
|
826
|
+
const blueprint: ExtensionBlueprint = {
|
|
707
827
|
commands: [echo],
|
|
708
828
|
parsers: { "command-kit echo": (context) => ({ options: context.options }) },
|
|
709
829
|
flags: { list: [{ long: "--kit-note", value_type: "string", value_name: "text" }] },
|
|
@@ -724,7 +844,7 @@ drift. It is the author-time inverse of the runtime
|
|
|
724
844
|
it returns is the set `composeExtension`'s generated `activate` requires — they
|
|
725
845
|
agree by construction:
|
|
726
846
|
|
|
727
|
-
```
|
|
847
|
+
```ts
|
|
728
848
|
deriveExtensionCapabilities(blueprint); // ["commands", "parser", "schema"]
|
|
729
849
|
```
|
|
730
850
|
|
|
@@ -738,6 +858,124 @@ malformed definition surfaces the same activation diagnostic as a hand-written
|
|
|
738
858
|
hand-written `activate` bodies so they load in extension-only installs; reach for
|
|
739
859
|
`composeExtension` in npm package-mode authoring where the SDK is a dependency.
|
|
740
860
|
|
|
861
|
+
For a generated starting point, `pm package init <path> --declarative` scaffolds
|
|
862
|
+
this loop end to end for any `--capability`: an `index.ts` that authors a
|
|
863
|
+
`defineExtensionBlueprint` blueprint (the capability's surfaces wired through the
|
|
864
|
+
`define*` builders) and exports `composeExtension(blueprint)`, plus an
|
|
865
|
+
`index.test.ts` that guards it with the author-time `assertExtensionPreflight`
|
|
866
|
+
capstone and exercises the composed module through `createExtensionTestHarness`. It
|
|
867
|
+
is package-mode only (`composeExtension` is a runtime SDK value import, so it belongs
|
|
868
|
+
in package-mode authoring where the SDK is a linked dependency, not the import-free
|
|
869
|
+
extension-only starters).
|
|
870
|
+
|
|
871
|
+
### Modular blueprints
|
|
872
|
+
|
|
873
|
+
Tracked: [pm-high](../.agents/pm/tasks/pm-high.toon),
|
|
874
|
+
[pm-nvgy](../.agents/pm/tasks/pm-nvgy.toon).
|
|
875
|
+
|
|
876
|
+
A large extension's surface does not have to live in one object. `mergeExtensionBlueprints(...blueprints)`
|
|
877
|
+
combines several partial blueprints into one — a commands module, a search module,
|
|
878
|
+
a hooks module — so each concern is authored (and tested) in its own file and
|
|
879
|
+
assembled at the entry point. Wrap each fragment in `defineExtensionBlueprint(...)`
|
|
880
|
+
so it is contract-checked at its own definition site (with editor completion) —
|
|
881
|
+
the blueprint-level companion to `defineExtension` (a whole module) and
|
|
882
|
+
`defineExtensionManifest` (a manifest):
|
|
883
|
+
|
|
884
|
+
```ts
|
|
885
|
+
// commands.ts
|
|
886
|
+
import { defineExtensionBlueprint } from "@unbrained/pm-cli/sdk";
|
|
887
|
+
export const commandsModule = defineExtensionBlueprint({
|
|
888
|
+
commands: [{ name: "kit run", action: "kit-run", run: () => ({ ok: true }) }],
|
|
889
|
+
});
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
```ts
|
|
893
|
+
// index.ts — the manifest entry; import sibling .ts modules by their real extension (loaded directly via native type stripping).
|
|
894
|
+
import { composeExtension, mergeExtensionBlueprints } from "@unbrained/pm-cli/sdk";
|
|
895
|
+
import { commandsModule } from "./commands.ts";
|
|
896
|
+
import { searchModule } from "./search.ts";
|
|
897
|
+
|
|
898
|
+
export default composeExtension(mergeExtensionBlueprints(commandsModule, searchModule));
|
|
899
|
+
```
|
|
900
|
+
|
|
901
|
+
The merge is pure, deterministic, and never mutates an input. Each surface combines
|
|
902
|
+
the way its `api.register*` call composes: array surfaces (`commands`, `itemTypes`,
|
|
903
|
+
`migrations`, `searchProviders`, `importers`, …) concatenate in order; `flags`
|
|
904
|
+
concatenates the flag arrays of a shared target command; single-handler records
|
|
905
|
+
(`commandOverrides`, `parsers`, `renderers`, `services`) take last-defined-wins
|
|
906
|
+
precedence on a key collision; `hooks` concatenate per lifecycle kind; imperative
|
|
907
|
+
`activate` hatches chain forward (acquisition order) while `deactivate` hooks chain
|
|
908
|
+
in reverse (LIFO teardown); the `manifest` mirror is last-defined-wins. Because the
|
|
909
|
+
result is an ordinary blueprint, every downstream helper (`deriveExtensionCapabilities`,
|
|
910
|
+
`describeExtensionBlueprint`, `lintExtensionBlueprint`, `preflightExtension`) reads it
|
|
911
|
+
exactly as it would a hand-written one — a command two modules both define survives
|
|
912
|
+
as a duplicate and `lintExtensionBlueprint` flags it. Merging zero blueprints returns
|
|
913
|
+
an empty blueprint (`{}`).
|
|
914
|
+
|
|
915
|
+
### Generate the manifest (author once)
|
|
916
|
+
|
|
917
|
+
Tracked: [pm-u5le](../.agents/pm/features/pm-u5le.toon).
|
|
918
|
+
|
|
919
|
+
`deriveExtensionCapabilities` gives you only the capability set; every other
|
|
920
|
+
manifest field is still yours to hand-write. `synthesizeExtensionManifest(blueprint, identity)`
|
|
921
|
+
closes that gap — it is the **generate** verb that completes the declarative loop
|
|
922
|
+
(`compose → derive → describe/lint → synthesize`). Supply the identity fields a
|
|
923
|
+
blueprint cannot determine (`name`, `version`, `entry`, `priority`, plus any
|
|
924
|
+
optional `engines`/`permissions`/version floors/etc.) and it returns a complete
|
|
925
|
+
`ExtensionManifest` with `capabilities` derived, sorted, and de-duplicated. Write
|
|
926
|
+
the blueprint once; never hand-sync `capabilities` again:
|
|
927
|
+
|
|
928
|
+
```ts
|
|
929
|
+
import { synthesizeExtensionManifest } from "@unbrained/pm-cli/sdk";
|
|
930
|
+
|
|
931
|
+
const manifest = synthesizeExtensionManifest(blueprint, {
|
|
932
|
+
name: "command-kit",
|
|
933
|
+
version: "1.0.0",
|
|
934
|
+
entry: "./index.ts",
|
|
935
|
+
priority: 0,
|
|
936
|
+
});
|
|
937
|
+
manifest.capabilities; // ["commands", "parser", "schema"] — derived, not hand-written
|
|
938
|
+
```
|
|
939
|
+
|
|
940
|
+
Where `defineExtensionManifest` only *types* a manifest you wrote by hand, this
|
|
941
|
+
*generates* it. For the rare surface registered through the imperative `activate`
|
|
942
|
+
escape hatch (invisible to static derivation — e.g. a renderer wired in
|
|
943
|
+
`activate`), pass `additionalCapabilities` and they are unioned in (legacy-alias
|
|
944
|
+
resolved, unknown names dropped). Use the result as the on-disk `manifest.json`
|
|
945
|
+
content or the in-module `manifest` mirror; guard a hand-maintained manifest
|
|
946
|
+
against drift with `assertExtensionManifestMatchesBlueprint` (below).
|
|
947
|
+
|
|
948
|
+
### Ship both halves (author once)
|
|
949
|
+
|
|
950
|
+
Tracked: [pm-cn0c](../.agents/pm/tasks/pm-cn0c.toon).
|
|
951
|
+
|
|
952
|
+
`composeExtension` produces the runtime module; `synthesizeExtensionManifest`
|
|
953
|
+
produces the manifest. `composeExtensionPackage(blueprint, identity)` is the
|
|
954
|
+
author-once capstone that returns both halves of a shippable package from one call,
|
|
955
|
+
with the synthesized manifest set as the module's authoritative in-module mirror —
|
|
956
|
+
so the runtime module and the on-disk `manifest.json` are generated from one source
|
|
957
|
+
and cannot drift:
|
|
958
|
+
|
|
959
|
+
```ts
|
|
960
|
+
import { composeExtensionPackage } from "@unbrained/pm-cli/sdk";
|
|
961
|
+
|
|
962
|
+
const { module, manifest } = composeExtensionPackage(blueprint, {
|
|
963
|
+
name: "command-kit",
|
|
964
|
+
version: "1.0.0",
|
|
965
|
+
entry: "./index.ts",
|
|
966
|
+
priority: 0,
|
|
967
|
+
});
|
|
968
|
+
export default module; // the package entry's default export
|
|
969
|
+
// write `manifest` verbatim as manifest.json — capabilities derived, never hand-synced
|
|
970
|
+
```
|
|
971
|
+
|
|
972
|
+
It is a pure assembler (no validation, loading, or filesystem access), exactly like
|
|
973
|
+
the two functions it composes; pair it with `preflightExtension` /
|
|
974
|
+
`assertExtensionPreflight` for the author-time verify step. Combined with
|
|
975
|
+
`mergeExtensionBlueprints`, the full declarative loop is: author each concern with
|
|
976
|
+
`define*`, assemble them modularly with `mergeExtensionBlueprints`, then ship both
|
|
977
|
+
halves with `composeExtensionPackage`.
|
|
978
|
+
|
|
741
979
|
### Author-time introspection and preflight
|
|
742
980
|
|
|
743
981
|
Tracked: [pm-tlpv](../.agents/pm/features/pm-tlpv.toon),
|
|
@@ -749,7 +987,7 @@ inspectable and verifiable before it is ever loaded — the author-time inverse
|
|
|
749
987
|
the runtime guardrails (the same discipline as `deriveExtensionCapabilities`
|
|
750
988
|
inverting [`reconcileExtensionCapabilityUsage`](#capability-requirements)):
|
|
751
989
|
|
|
752
|
-
```
|
|
990
|
+
```ts
|
|
753
991
|
import { describeExtensionBlueprint, lintExtensionBlueprint } from "@unbrained/pm-cli/sdk";
|
|
754
992
|
|
|
755
993
|
// describeExtensionBlueprint returns the same ExtensionActivationSummary shape as
|
|
@@ -793,7 +1031,7 @@ const activation = await activateExtensionForTest({
|
|
|
793
1031
|
manifest: {
|
|
794
1032
|
name: "hello-ext",
|
|
795
1033
|
version: "0.1.0",
|
|
796
|
-
entry: "./index.
|
|
1034
|
+
entry: "./index.ts",
|
|
797
1035
|
priority: 0,
|
|
798
1036
|
capabilities: ["commands", "schema"],
|
|
799
1037
|
},
|
|
@@ -836,6 +1074,86 @@ import { assertExtensionBlueprint } from "@unbrained/pm-cli/sdk/testing";
|
|
|
836
1074
|
const report = assertExtensionBlueprint(blueprint);
|
|
837
1075
|
```
|
|
838
1076
|
|
|
1077
|
+
`assertExtensionManifestMatchesBlueprint(manifest, blueprint)` is the **strict**
|
|
1078
|
+
bookend to that lenient preflight: where `assertExtensionBlueprint` only fails on
|
|
1079
|
+
an *undeclared* capability and merely warns on an unused one, this assertion fails
|
|
1080
|
+
on **both** — so a hand-maintained `manifest.json` stays exactly the least-privilege
|
|
1081
|
+
set the blueprint requires (assert what `synthesizeExtensionManifest` would
|
|
1082
|
+
otherwise generate). Only `capabilities` are reconciled, since that is the one
|
|
1083
|
+
manifest field a blueprint determines:
|
|
1084
|
+
|
|
1085
|
+
```ts
|
|
1086
|
+
import { assertExtensionManifestMatchesBlueprint } from "@unbrained/pm-cli/sdk/testing";
|
|
1087
|
+
|
|
1088
|
+
// Throws if manifest.capabilities is missing any capability the blueprint uses, or
|
|
1089
|
+
// declares any the blueprint never exercises. Returns { used, declared, missing,
|
|
1090
|
+
// unused, findings } on an exact match.
|
|
1091
|
+
assertExtensionManifestMatchesBlueprint(manifest, blueprint);
|
|
1092
|
+
```
|
|
1093
|
+
|
|
1094
|
+
Where the blueprint guards `capabilities`, a manifest's `pm_min_version` /
|
|
1095
|
+
`pm_max_version` bounds guard *which pm CLI versions the package supports*.
|
|
1096
|
+
Tracker references: `pm-knma` introduced `checkExtensionManifestCompatibility`;
|
|
1097
|
+
`pm-hng2` introduced `assertExtensionManifestCompatible`.
|
|
1098
|
+
`checkExtensionManifestCompatibility(manifest, { pmVersion, pmMaxVersionExceededMode? })`
|
|
1099
|
+
is the author-time inverse of the loader's runtime version gate: it takes the pm
|
|
1100
|
+
version you target and returns structured per-bound findings (the same
|
|
1101
|
+
`extension_pm_*_version_*` outcomes the loader emits), so you can verify the window
|
|
1102
|
+
without installing the package against a real CLI. `assertExtensionManifestCompatible`
|
|
1103
|
+
is the throwing CI guard — it fails on a blocking incompatibility (a malformed
|
|
1104
|
+
bound, a `pm_min_version` the target is below, or a `block`-mode `pm_max_version`
|
|
1105
|
+
the target exceeds) and stays quiet on advisory `*_unchecked` / `*_exceeded_warn`
|
|
1106
|
+
warnings, which still load:
|
|
1107
|
+
|
|
1108
|
+
```ts
|
|
1109
|
+
import { checkExtensionManifestCompatibility } from "@unbrained/pm-cli/sdk";
|
|
1110
|
+
import { assertExtensionManifestCompatible } from "@unbrained/pm-cli/sdk/testing";
|
|
1111
|
+
|
|
1112
|
+
// Inspect every bound outcome against a target version…
|
|
1113
|
+
const report = checkExtensionManifestCompatibility(manifest, { pmVersion: "2026.6.23" });
|
|
1114
|
+
// report.compatible === false, report.findings[0].code === "pm_min_version_unmet", …
|
|
1115
|
+
|
|
1116
|
+
// …or fail the package's own suite when a bound would block the load.
|
|
1117
|
+
assertExtensionManifestCompatible(manifest, { pmVersion: "2026.6.23" });
|
|
1118
|
+
```
|
|
1119
|
+
|
|
1120
|
+
Tracked: [pm-ozaf](../.agents/pm/features/pm-ozaf.toon).
|
|
1121
|
+
|
|
1122
|
+
`preflightExtension(blueprint, { identity?, target?, declaredCapabilities? })` is the
|
|
1123
|
+
author-time **capstone** that runs all of the above in one call — the static analog
|
|
1124
|
+
of `createExtensionTestHarness`, which unified the runtime-test helpers. Rather than
|
|
1125
|
+
chaining `lintExtensionBlueprint`, `synthesizeExtensionManifest`, and
|
|
1126
|
+
`checkExtensionManifestCompatibility` (and reconciling their separate results)
|
|
1127
|
+
before publishing, you read one `ExtensionPreflightReport`: the blueprint is always
|
|
1128
|
+
linted; when `identity` is given the complete least-privilege manifest is synthesized
|
|
1129
|
+
and returned; when `target` is given the synthesized bounds (or, absent an identity,
|
|
1130
|
+
the blueprint's in-module `manifest` mirror) are version-checked. The per-stage
|
|
1131
|
+
results are exposed unmodified (`report.blueprint` / `report.manifest` /
|
|
1132
|
+
`report.compatibility`) alongside a flattened `report.findings` where each entry is
|
|
1133
|
+
tagged by `source` (`"blueprint"` | `"compatibility"`); `report.ok` is `false` if any
|
|
1134
|
+
stage produced an `error`. `assertExtensionPreflight(blueprint, options?)` is the
|
|
1135
|
+
throwing one-line CI guard over it — it fails listing every blocking finding tagged
|
|
1136
|
+
`[source:code]` and stays quiet on advisory warnings, returning the full report on
|
|
1137
|
+
success:
|
|
1138
|
+
|
|
1139
|
+
```ts
|
|
1140
|
+
import { preflightExtension } from "@unbrained/pm-cli/sdk";
|
|
1141
|
+
import { assertExtensionPreflight } from "@unbrained/pm-cli/sdk/testing";
|
|
1142
|
+
|
|
1143
|
+
// Inspect every author-time stage in one report…
|
|
1144
|
+
const report = preflightExtension(blueprint, {
|
|
1145
|
+
identity: { name: "command-kit", version: "1.0.0", entry: "./index.ts", priority: 0 },
|
|
1146
|
+
target: { pmVersion: "2026.6.23" },
|
|
1147
|
+
});
|
|
1148
|
+
// report.manifest.capabilities (derived), report.compatibility.compatible, report.findings[]
|
|
1149
|
+
|
|
1150
|
+
// …or guard the whole package in one CI line.
|
|
1151
|
+
assertExtensionPreflight(blueprint, {
|
|
1152
|
+
identity: { name: "command-kit", version: "1.0.0", entry: "./index.ts", priority: 0 },
|
|
1153
|
+
target: { pmVersion: "2026.6.23" },
|
|
1154
|
+
});
|
|
1155
|
+
```
|
|
1156
|
+
|
|
839
1157
|
Invoke a registered command handler to assert its behavior (not just that it was
|
|
840
1158
|
registered). `runRegisteredCommandForTest` dispatches through pm's real engine and
|
|
841
1159
|
returns the `CommandHandlerResult`:
|
|
@@ -1034,9 +1352,58 @@ const migration = assertRegisteredMigration(activation.registrations, {
|
|
|
1034
1352
|
// migration.definition is the normalized SchemaMigrationDefinition
|
|
1035
1353
|
```
|
|
1036
1354
|
|
|
1355
|
+
### Project profiles (`registerProfile`)
|
|
1356
|
+
|
|
1357
|
+
Tracked: [pm-08sv](../.agents/pm/features/pm-08sv.toon).
|
|
1358
|
+
|
|
1359
|
+
A **project profile** is the broadest customization primitive a package can ship:
|
|
1360
|
+
one declarative `ProjectProfileDefinition` that bundles item types, custom
|
|
1361
|
+
statuses, fields, per-type workflows, config knobs, create templates, and package
|
|
1362
|
+
recommendations into a single archetype `pm profile apply` stages idempotently.
|
|
1363
|
+
The three core archetypes (`agile`/`ops`/`research`) are baked in; a package adds
|
|
1364
|
+
its own with `api.registerProfile(profile)` under the `schema` capability:
|
|
1365
|
+
|
|
1366
|
+
```ts
|
|
1367
|
+
import { defineProjectProfile, type ExtensionApi } from "@unbrained/pm-cli/sdk";
|
|
1368
|
+
|
|
1369
|
+
export const kanbanProfile = defineProjectProfile({
|
|
1370
|
+
name: "kanban",
|
|
1371
|
+
title: "Kanban continuous flow",
|
|
1372
|
+
summary: "WIP-limited flow with a verifying stage.",
|
|
1373
|
+
types: [{ name: "Card", folder: "cards" }],
|
|
1374
|
+
statuses: [{ id: "doing", roles: ["active"] }],
|
|
1375
|
+
fields: [{ key: "wip_limit", type: "number", commands: ["create", "update"] }],
|
|
1376
|
+
workflows: [{ type: "Card", allowed_transitions: [["open", "doing"]] }],
|
|
1377
|
+
config: [{ key: "search_provider", value: "bm25", summary: "Offline lexical search." }],
|
|
1378
|
+
templates: [{ name: "card", options: { type: "Card" } }],
|
|
1379
|
+
packages: [{ spec: "templates", reason: "Reusable card shapes." }],
|
|
1380
|
+
});
|
|
1381
|
+
|
|
1382
|
+
export function activate(api: ExtensionApi): void {
|
|
1383
|
+
api.registerProfile(kanbanProfile);
|
|
1384
|
+
}
|
|
1385
|
+
```
|
|
1386
|
+
|
|
1387
|
+
Once the package is active, the profile resolves by name through `pm profile list`
|
|
1388
|
+
(labelled with its source package), `pm profile show <name>`, and
|
|
1389
|
+
`pm profile apply <name>` — exactly like a core archetype, with no consumer code.
|
|
1390
|
+
Built-in names are reserved: a registered profile that collides with a core name
|
|
1391
|
+
(or another package's profile) is ignored with a warning rather than shadowing it.
|
|
1392
|
+
Profiles flow through the declarative loop too — `composeExtension({ profiles: [...] })`
|
|
1393
|
+
auto-wires `registerProfile`, and `deriveExtensionCapabilities` maps a `profiles`
|
|
1394
|
+
surface to `schema`. Prove a profile registered with `assertRegisteredProfile`:
|
|
1395
|
+
|
|
1396
|
+
```ts
|
|
1397
|
+
import { assertRegisteredProfile } from "@unbrained/pm-cli/sdk/testing";
|
|
1398
|
+
|
|
1399
|
+
const { profile } = assertRegisteredProfile(activation.registrations, { profile: "kanban" });
|
|
1400
|
+
// profile is the normalized ProjectProfileDefinition
|
|
1401
|
+
```
|
|
1402
|
+
|
|
1037
1403
|
Together these complete the SDK assertion surface: every extension `register*`
|
|
1038
|
-
method now has a matching `assertRegistered*`
|
|
1039
|
-
registration without importing private registry
|
|
1404
|
+
method (including `registerProfile`) now has a matching `assertRegistered*`
|
|
1405
|
+
helper, so packages can prove any registration without importing private registry
|
|
1406
|
+
internals.
|
|
1040
1407
|
|
|
1041
1408
|
The three executable registration surfaces add `runRegistered*ForTest` invoke
|
|
1042
1409
|
helpers on top of those assertions, so a package can exercise the real behavior of
|
package/docs/TESTING.md
CHANGED
|
@@ -20,6 +20,7 @@ Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon).
|
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
pnpm build
|
|
23
|
+
pnpm lint
|
|
23
24
|
pnpm typecheck
|
|
24
25
|
node scripts/run-tests.mjs test
|
|
25
26
|
node scripts/run-tests.mjs coverage
|
|
@@ -27,6 +28,17 @@ node scripts/run-tests.mjs coverage
|
|
|
27
28
|
|
|
28
29
|
`node scripts/run-tests.mjs` wraps Vitest in temporary tracker roots, then cleans them up.
|
|
29
30
|
|
|
31
|
+
`pnpm lint` is the local CodeFactor parity check. It layers ESLint rules for
|
|
32
|
+
shipped source, package, plugin, and script surfaces that match the CodeFactor
|
|
33
|
+
maintainability findings this repo tracks (`complexity`,
|
|
34
|
+
`no-unsafe-optional-chaining`, and the relevant `eslint-plugin-unicorn`
|
|
35
|
+
mechanical rules), jscpd duplicate detection across source and tests, and the
|
|
36
|
+
repo-specific `quality:static` gate. The dedicated `quality:static` gate remains
|
|
37
|
+
authoritative for source/exported docstring coverage, orphan-module checks,
|
|
38
|
+
directory-load caps, and the TypeScript-aware duplicate/complexity checks that
|
|
39
|
+
are tailored to pm's source layout; `pnpm lint` delegates to it instead of
|
|
40
|
+
running a second threshold profile.
|
|
41
|
+
|
|
30
42
|
## Focused Test Runs
|
|
31
43
|
|
|
32
44
|
```bash
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
This example demonstrates governance policy behavior with real registrations.
|
|
4
4
|
|
|
5
|
+
It is authored **and loaded** as TypeScript (ADR pm-2c28 / pm-m1uz): `index.ts` is
|
|
6
|
+
both the source and the manifest `entry`, imported directly via Node's native type
|
|
7
|
+
stripping — there is no compile step and no committed `index.js`. Edit `index.ts`
|
|
8
|
+
and the change takes effect on the next install/reload; run `npx tsc --noEmit` to
|
|
9
|
+
type-check.
|
|
10
|
+
|
|
5
11
|
The extension declares:
|
|
6
12
|
|
|
7
13
|
- `commands` (handler registration)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module docs/examples/policy-restricted-extension
|
|
3
|
+
*
|
|
4
|
+
* Minimal TypeScript-first reference extension for governance-policy demos. It
|
|
5
|
+
* registers exactly three surfaces — a command handler, a `beforeCommand` hook,
|
|
6
|
+
* and an `output_format` service override — so an operator can enforce policy
|
|
7
|
+
* that keeps the command and hook allowed while blocking the service override
|
|
8
|
+
* (see the accompanying README).
|
|
9
|
+
*
|
|
10
|
+
* As with the starter example, the source is authored in TypeScript against the
|
|
11
|
+
* published SDK types and is itself the `./index.ts` manifest entry the loader
|
|
12
|
+
* imports directly via Node's native type stripping (ADR pm-2c28 / pm-m1uz) — no
|
|
13
|
+
* compile step and no committed `.js`. Typing `activate(api: ExtensionApi)` is
|
|
14
|
+
* enough for the service override's `context` parameter to be inferred as a
|
|
15
|
+
* `ServiceOverrideContext`, which is why this handler returns `context.payload`
|
|
16
|
+
* (the value to format) rather than the whole context object.
|
|
17
|
+
*/
|
|
18
|
+
import { defineExtension } from "@unbrained/pm-cli/sdk";
|
|
19
|
+
import type { ExtensionApi } from "@unbrained/pm-cli/sdk";
|
|
20
|
+
|
|
21
|
+
export default defineExtension({
|
|
22
|
+
activate(api: ExtensionApi): void {
|
|
23
|
+
api.registerCommand({
|
|
24
|
+
name: "policy demo",
|
|
25
|
+
action: "policy-demo",
|
|
26
|
+
description: "Emit a deterministic payload to validate policy-gated activation.",
|
|
27
|
+
run: async (context) => ({
|
|
28
|
+
ok: true,
|
|
29
|
+
command: context.command,
|
|
30
|
+
source: "policy-restricted-extension",
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
api.hooks.beforeCommand(() => {});
|
|
35
|
+
|
|
36
|
+
// This registration is intentionally useful for policy demos: an identity
|
|
37
|
+
// output_format override that returns the formatting payload unchanged.
|
|
38
|
+
api.registerService("output_format", (context) => context.payload);
|
|
39
|
+
},
|
|
40
|
+
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "policy-restricted-extension",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"entry": "./index.
|
|
4
|
+
"entry": "./index.ts",
|
|
5
5
|
"manifest_version": 2,
|
|
6
|
-
"pm_min_version": "2026.
|
|
6
|
+
"pm_min_version": "2026.6.24",
|
|
7
7
|
"trusted": true,
|
|
8
8
|
"provenance": {
|
|
9
9
|
"source": "docs/examples/policy-restricted-extension",
|