@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../cli/register-setup.ts"],"sourcesContent":["/**\n * @module cli/register-setup\n *\n * Provides CLI runtime support for Register Setup.\n */\nimport type { Command } from \"commander\";\nimport fs from \"node:fs/promises\";\nimport type { GlobalOptions } from \"../core/shared/command-types.js\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport {\n collect,\n getGlobalOptions,\n printError,\n printResult,\n} from \"./registration-helpers.js\";\nimport { SCAFFOLD_CAPABILITIES } from \"./commands/extension/scaffold.js\";\n\n\n\ntype ExtensionSubcommandAction =\n | \"init\"\n | \"install\"\n | \"uninstall\"\n | \"explore\"\n | \"manage\"\n | \"describe\"\n | \"reload\"\n | \"doctor\"\n | \"catalog\"\n | \"adopt\"\n | \"adopt-all\"\n | \"activate\"\n | \"deactivate\";\n\ntype LifecycleCommandVocabulary = \"extension\" | \"package\";\n\nfunction normalizeExtensionOptions(\n options: Record<string, unknown>,\n forcedAction?: ExtensionSubcommandAction,\n vocabulary: LifecycleCommandVocabulary = \"extension\",\n): Record<string, unknown> {\n const isForcedAction = (action: ExtensionSubcommandAction): boolean => forcedAction === action;\n const readBoolean = (...keys: string[]): boolean => keys.some((key) => options[key] === true);\n const readString = (...keys: string[]): string | undefined => {\n for (const key of keys) {\n if (typeof options[key] === \"string\") {\n return options[key] as string;\n }\n }\n return undefined;\n };\n return {\n init: isForcedAction(\"init\") || readBoolean(\"init\"),\n scaffold: readBoolean(\"scaffold\"),\n install: isForcedAction(\"install\") || readBoolean(\"install\"),\n uninstall: isForcedAction(\"uninstall\") || readBoolean(\"uninstall\"),\n explore: isForcedAction(\"explore\") || readBoolean(\"explore\", \"list\"),\n manage: isForcedAction(\"manage\") || readBoolean(\"manage\"),\n describe: isForcedAction(\"describe\") || readBoolean(\"describe\"),\n reload: isForcedAction(\"reload\") || readBoolean(\"reload\"),\n doctor: isForcedAction(\"doctor\") || readBoolean(\"doctor\"),\n catalog: isForcedAction(\"catalog\") || readBoolean(\"catalog\"),\n adopt: isForcedAction(\"adopt\") || readBoolean(\"adopt\"),\n adoptAll: isForcedAction(\"adopt-all\") || readBoolean(\"adoptAll\", \"adopt_all\", \"adopt-all\"),\n activate: isForcedAction(\"activate\") || readBoolean(\"activate\"),\n deactivate: isForcedAction(\"deactivate\") || readBoolean(\"deactivate\"),\n project: readBoolean(\"project\"),\n local: readBoolean(\"local\"),\n global: readBoolean(\"global\"),\n gh: readString(\"gh\"),\n github: readString(\"github\"),\n ref: readString(\"ref\"),\n capability: readString(\"capability\"),\n fields: readString(\"fields\"),\n detail: readString(\"detail\"),\n trace: readBoolean(\"trace\"),\n watch: readBoolean(\"watch\"),\n runtimeProbe: readBoolean(\"runtimeProbe\", \"runtime_probe\", \"runtime-probe\"),\n fixManagedState: readBoolean(\"fixManagedState\", \"fix_managed_state\", \"fix-managed-state\"),\n strictExit: readBoolean(\"strictExit\", \"strict_exit\", \"strict-exit\"),\n failOnWarn: readBoolean(\"failOnWarn\", \"fail_on_warn\", \"fail-on-warn\"),\n vocabulary,\n };\n}\n\nasync function looksLikeShellExpandedWildcard(targets: string[]): Promise<boolean> {\n // Only ever called by normalizeInstallTargets after it has already returned\n // early for length <= 1, so targets always has more than one entry here.\n const visibleEntries = (await fs.readdir(process.cwd()))\n .filter((entry) => !entry.startsWith(\".\"))\n .sort((left, right) => left.localeCompare(right));\n const normalizedTargets = [...targets].sort((left, right) => left.localeCompare(right));\n return (\n visibleEntries.length === normalizedTargets.length &&\n visibleEntries.every((entry, index) => entry === normalizedTargets[index])\n );\n}\n\nasync function normalizeInstallTargets(targets: string[] | undefined): Promise<string | undefined> {\n // Commander variadic `[targets...]` always yields an array (empty when no\n // targets are given), so a single nullish coalesce covers every input.\n /* c8 ignore start -- commander variadic `[targets...]` always passes an array; the `?? []` arm is an unreachable nullish guard */\n const normalizedTargets = (targets ?? [])\n .map((target) => target.trim())\n .filter((target) => target.length > 0);\n /* c8 ignore stop */\n if (normalizedTargets.length <= 1) {\n return normalizedTargets[0];\n }\n if (await looksLikeShellExpandedWildcard(normalizedTargets)) {\n return \"*\";\n }\n throw new PmCliError(\n `Install accepts one package source at a time. To install bundled first-party packages, quote the wildcard: pm install '*'`,\n EXIT_CODE.USAGE,\n );\n}\n\nasync function executeExtensionCommand(\n target: string | undefined,\n options: Record<string, unknown>,\n command: Command,\n forcedAction?: ExtensionSubcommandAction,\n vocabulary: LifecycleCommandVocabulary = \"extension\",\n): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const normalizedOptions = normalizeExtensionOptions(options, forcedAction, vocabulary);\n const { runExtension } = await import(\"./commands/extension.js\");\n const result = await runExtension(target, normalizedOptions, globalOptions);\n printResult(result, globalOptions);\n const strictExit = Boolean(normalizedOptions.strictExit) || Boolean(normalizedOptions.failOnWarn);\n if (result.action === \"doctor\" && strictExit) {\n const detailsRecord = result.details as Record<string, unknown>;\n const summary = (detailsRecord.summary ?? null) as Record<string, unknown> | null;\n const summaryStatus = summary && typeof summary.status === \"string\" ? summary.status : undefined;\n const shouldFail = summaryStatus ? summaryStatus !== \"ok\" : result.warnings.length > 0;\n if (shouldFail) {\n process.exitCode = EXIT_CODE.GENERIC_FAILURE;\n }\n }\n if (globalOptions.profile) {\n printError(`profile:command=extension took_ms=${Date.now() - startedAt}`);\n }\n}\n\nfunction addExtensionScopeOptions<T extends Command>(command: T): T {\n return command\n .option(\"--project\", \"Use project extension scope (default)\")\n .option(\"--local\", \"Alias for --project\")\n .option(\"--global\", \"Use global extension scope\");\n}\n\nfunction addPackageScopeOptions<T extends Command>(command: T): T {\n return command\n .option(\"--project\", \"Use project package scope (default)\")\n .option(\"--local\", \"Alias for --project\")\n .option(\"--global\", \"Use global package scope\");\n}\n\nfunction addLifecycleScopeOptions<T extends Command>(command: T, vocabulary: LifecycleCommandVocabulary): T {\n return vocabulary === \"package\" ? addPackageScopeOptions(command) : addExtensionScopeOptions(command);\n}\n\nfunction registerLifecycleCommand(\n program: Command,\n vocabulary: LifecycleCommandVocabulary,\n): void {\n const noun = vocabulary === \"package\" ? \"package\" : \"extension\";\n const plural = vocabulary === \"package\" ? \"packages\" : \"extensions\";\n const commandName = vocabulary;\n const lifecycleCommand = program\n .command(commandName)\n .argument(\"[target]\", `${noun[0]!.toUpperCase()}${noun.slice(1)} source/name or scaffold target path (for --init/--scaffold)`)\n .option(\"--init\", `Generate a starter ${noun} scaffold at target path`)\n .option(\"--scaffold\", \"Alias for --init\")\n .option(\"--capability <kind>\", `Capability the --init starter targets (${SCAFFOLD_CAPABILITIES.join(\"|\")}; default commands)`)\n .option(\"--install\", `Install ${noun} from local path, bundled alias, npm: source, wildcard, or GitHub source`)\n .option(\"--uninstall\", `Uninstall an installed ${noun}`)\n .option(\"--explore\", `List discovered ${plural} in selected scope`)\n .option(\"--list\", \"Alias for --explore\")\n .option(\"--manage\", `List managed ${plural} with update-check metadata`)\n .option(\"--describe\", `Map every surface a loaded ${noun} registers (optionally one by name)`)\n .option(\"--reload\", `Reload ${plural} with cache-busted module imports`)\n .option(\"--watch\", \"Use watch mode with --reload\")\n .option(\"--doctor\", `Run consolidated ${noun} diagnostics (summary/deep modes)`)\n .option(\"--catalog\", `List bundled first-party ${noun} catalog metadata`)\n .option(\"--adopt\", `Adopt an existing unmanaged ${noun} into managed metadata`)\n .option(\"--adopt-all\", `Adopt all unmanaged ${plural} into managed metadata`)\n .option(\"--activate\", `Activate a ${noun} in selected scope settings`)\n .option(\"--deactivate\", `Deactivate a ${noun} in selected scope settings`)\n .option(\"--project\", `Use project ${noun} scope (default)`)\n .option(\"--local\", \"Alias for --project\")\n .option(\"--global\", `Use global ${noun} scope`)\n .option(\"--gh <github-source>\", \"Install from GitHub shorthand source (owner/repo[/path])\")\n .option(\"--github <github-source>\", \"Alias for --gh\")\n .option(\"--ref <ref>\", \"Git ref/branch/tag for GitHub install sources\")\n .option(\"--detail <mode>\", `${noun[0]!.toUpperCase()}${noun.slice(1)} diagnostics detail mode (summary|deep)`)\n .option(\"--trace\", \"Include actionable registration traces in doctor deep diagnostics\")\n .option(\"--runtime-probe\", \"Opt-in runtime activation probe for manage output parity\")\n .option(\"--fix-managed-state\", `Adopt unmanaged ${plural} before diagnostics/update checks`)\n .option(\"--strict-exit\", \"Return non-zero exit when doctor warnings are present (ok=false)\")\n .option(\"--fail-on-warn\", \"Alias for --strict-exit (doctor)\")\n .description(\n vocabulary === \"package\"\n ? \"Manage package lifecycle operations for project or global scope. Backward-compatible with extension packages.\"\n : \"Manage extension lifecycle operations for project or global scope.\",\n )\n .action(async (target: string | undefined, _options: Record<string, unknown>, command) => {\n await executeExtensionCommand(target, command.optsWithGlobals() as Record<string, unknown>, command, undefined, vocabulary);\n });\n\n if (vocabulary === \"package\") {\n lifecycleCommand.alias(\"packages\");\n }\n\n addLifecycleScopeOptions(\n lifecycleCommand\n .command(\"init\")\n .alias(\"scaffold\")\n .argument(\"<target>\", `Scaffold target directory path`)\n .option(\"--capability <kind>\", `Capability the starter targets (${SCAFFOLD_CAPABILITIES.join(\"|\")}; default commands)`)\n .description(\n vocabulary === \"package\"\n ? \"Generate a starter package scaffold with package metadata, manifest, and entrypoint.\"\n : \"Generate a starter extension scaffold with manifest and entrypoint.\",\n ),\n vocabulary,\n ).action(async (target: string, _options: Record<string, unknown>, command) => {\n await executeExtensionCommand(target, command.optsWithGlobals() as Record<string, unknown>, command, \"init\", vocabulary);\n });\n\n addLifecycleScopeOptions(\n lifecycleCommand\n .command(\"install\")\n .argument(\"[targets...]\", `${noun[0]!.toUpperCase()}${noun.slice(1)} source (local path, bundled alias, npm: source, wildcard, or GitHub source)`)\n .option(\"--gh <github-source>\", \"Install from GitHub shorthand source (owner/repo[/path])\")\n .option(\"--github <github-source>\", \"Alias for --gh\")\n .option(\"--ref <ref>\", \"Git ref/branch/tag for GitHub install sources\")\n .description(`Install ${noun} from local path, bundled alias, npm: source, wildcard, or GitHub source.`),\n vocabulary,\n ).action(async (targets: string[] | undefined, _options: Record<string, unknown>, command) => {\n const target = await normalizeInstallTargets(targets);\n await executeExtensionCommand(target, command.optsWithGlobals() as Record<string, unknown>, command, \"install\", vocabulary);\n });\n\n addLifecycleScopeOptions(\n lifecycleCommand.command(\"uninstall\").argument(\"<target>\", `${noun[0]!.toUpperCase()}${noun.slice(1)} name`).description(`Uninstall an installed ${noun}.`),\n vocabulary,\n ).action(async (target: string, _options: Record<string, unknown>, command) => {\n await executeExtensionCommand(target, command.optsWithGlobals() as Record<string, unknown>, command, \"uninstall\", vocabulary);\n });\n\n addLifecycleScopeOptions(lifecycleCommand.command(\"explore\").description(`List discovered ${plural} in selected scope.`), vocabulary).action(\n async (_options: Record<string, unknown>, command) => {\n await executeExtensionCommand(undefined, command.optsWithGlobals() as Record<string, unknown>, command, \"explore\", vocabulary);\n },\n );\n\n addLifecycleScopeOptions(\n lifecycleCommand\n .command(\"manage\")\n .option(\"--runtime-probe\", \"Opt-in runtime activation probe for manage output parity\")\n .option(\"--fix-managed-state\", `Adopt unmanaged ${plural} before diagnostics/update checks`)\n .description(`List managed ${plural} with update-check metadata.`),\n vocabulary,\n ).action(async (_options: Record<string, unknown>, command) => {\n await executeExtensionCommand(undefined, command.optsWithGlobals() as Record<string, unknown>, command, \"manage\", vocabulary);\n });\n\n addLifecycleScopeOptions(\n lifecycleCommand\n .command(\"describe\")\n .argument(\"[target]\", `${noun[0]!.toUpperCase()}${noun.slice(1)} name to describe (omit for every loaded ${noun})`)\n .description(`Map every surface a loaded ${noun} registers (commands, hooks, item types, providers, overrides, ...).`),\n vocabulary,\n ).action(async (target: string | undefined, _options: Record<string, unknown>, command) => {\n await executeExtensionCommand(target, command.optsWithGlobals() as Record<string, unknown>, command, \"describe\", vocabulary);\n });\n\n addLifecycleScopeOptions(\n lifecycleCommand\n .command(\"reload\")\n .option(\"--watch\", \"Use watch mode for repeated reload checks\")\n .description(`Reload ${plural} with cache-busted module imports.`),\n vocabulary,\n ).action(async (_options: Record<string, unknown>, command) => {\n await executeExtensionCommand(undefined, command.optsWithGlobals() as Record<string, unknown>, command, \"reload\", vocabulary);\n });\n\n addLifecycleScopeOptions(\n lifecycleCommand\n .command(\"doctor\")\n .option(\"--detail <mode>\", `Detail mode for ${noun} diagnostics (summary|deep)`)\n .option(\"--trace\", \"Include actionable registration traces in doctor deep diagnostics\")\n .option(\"--fix-managed-state\", `Adopt unmanaged ${plural} before diagnostics/update checks`)\n .option(\"--strict-exit\", \"Return non-zero exit when doctor warnings are present (ok=false)\")\n .option(\"--fail-on-warn\", \"Alias for --strict-exit (doctor)\")\n .description(`Run consolidated ${noun} diagnostics (summary/deep modes).`),\n vocabulary,\n ).action(async (_options: Record<string, unknown>, command) => {\n await executeExtensionCommand(undefined, command.optsWithGlobals() as Record<string, unknown>, command, \"doctor\", vocabulary);\n });\n\n addLifecycleScopeOptions(\n lifecycleCommand\n .command(\"catalog\")\n .alias(\"list\")\n .option(\"--fields <value>\", \"Render compact comma-separated catalog fields, for example: alias,installed,install_command\")\n .description(`List bundled first-party ${noun} catalog metadata.`),\n vocabulary,\n ).action(async (_options: Record<string, unknown>, command) => {\n await executeExtensionCommand(undefined, command.optsWithGlobals() as Record<string, unknown>, command, \"catalog\", vocabulary);\n });\n\n addLifecycleScopeOptions(\n lifecycleCommand\n .command(\"adopt\")\n .argument(\"<target>\", `${noun[0]!.toUpperCase()}${noun.slice(1)} name`)\n .option(\"--gh <owner/repo[/path]>\", `GitHub provenance shorthand for adopted ${noun}`)\n .option(\"--github <owner/repo[/path]>\", \"Alias for --gh\")\n .option(\"--ref <ref>\", \"Git ref/branch/tag for GitHub shorthand source\")\n .description(`Adopt an existing unmanaged ${noun} into managed metadata.`),\n vocabulary,\n ).action(async (target: string, _options: Record<string, unknown>, command) => {\n await executeExtensionCommand(target, command.optsWithGlobals() as Record<string, unknown>, command, \"adopt\", vocabulary);\n });\n\n addLifecycleScopeOptions(\n lifecycleCommand.command(\"adopt-all\").description(`Adopt all unmanaged ${plural} into managed metadata.`),\n vocabulary,\n ).action(async (_options: Record<string, unknown>, command) => {\n await executeExtensionCommand(undefined, command.optsWithGlobals() as Record<string, unknown>, command, \"adopt-all\", vocabulary);\n });\n\n addLifecycleScopeOptions(\n lifecycleCommand.command(\"activate\").argument(\"<target>\", `${noun[0]!.toUpperCase()}${noun.slice(1)} name`).description(`Activate a ${noun} in selected scope settings.`),\n vocabulary,\n ).action(async (target: string, _options: Record<string, unknown>, command) => {\n await executeExtensionCommand(target, command.optsWithGlobals() as Record<string, unknown>, command, \"activate\", vocabulary);\n });\n\n addLifecycleScopeOptions(\n lifecycleCommand.command(\"deactivate\").argument(\"<target>\", `${noun[0]!.toUpperCase()}${noun.slice(1)} name`).description(`Deactivate a ${noun} in selected scope settings.`),\n vocabulary,\n ).action(async (target: string, _options: Record<string, unknown>, command) => {\n await executeExtensionCommand(target, command.optsWithGlobals() as Record<string, unknown>, command, \"deactivate\", vocabulary);\n });\n}\n\n/**\n * Implements register setup commands for the public runtime surface of this module.\n */\nexport function registerSetupCommands(program: Command): void {\n program\n .command(\"init\")\n .argument(\"[prefix-or-path]\", \"Optional id prefix, or path-like tracker target such as ./pm-sandbox\")\n .option(\"--preset <value>\", \"Governance preset for new setups: minimal|default|strict\")\n .option(\"--defaults\", \"Use non-interactive setup defaults without opening the wizard\")\n .option(\"-y, --yes\", \"Alias for --defaults (non-interactive setup)\")\n .option(\"--author <value>\", \"Set the default mutation author for this project\")\n .option(\"--agent-guidance <mode>\", \"Agent guidance mode: ask|add|skip|status\")\n .option(\"--type-preset <name>\", \"Register domain item types during init: agile|ops|research\")\n .option(\"--with-packages\", \"Install all bundled first-party packages during initialization\")\n .option(\"--force\", \"Allow initializing tracker files directly in a directory that looks like a workspace root\")\n .option(\"--verbose\", \"Include the full resolved settings tree in the output (default output is a concise summary)\")\n .description(\"Initialize pm storage and defaults for the current workspace or a path-like tracker target.\")\n .action(async (prefix: string | undefined, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runInit, summarizeInitResult } = await import(\"./commands/init.js\");\n const result = await runInit(\n prefix,\n globalOptions,\n {\n preset: typeof options.preset === \"string\" ? options.preset : undefined,\n defaults: options.defaults === true || options.yes === true,\n author: typeof options.author === \"string\" ? options.author : undefined,\n agentGuidance: typeof options.agentGuidance === \"string\" ? options.agentGuidance : undefined,\n typePreset: typeof options.typePreset === \"string\" ? options.typePreset : undefined,\n withPackages: options.withPackages === true,\n force: options.force === true,\n },\n );\n // Default (toon) output is a concise summary to minimize agent token cost.\n // --json consumers and --verbose both receive the full settings tree.\n const verbose = options.verbose === true;\n const emitFullTree = verbose || globalOptions.json === true;\n printResult(emitFullTree ? result : summarizeInitResult(result), globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=init took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"config\")\n .argument(\"[scope]\", \"Config scope: project|global, or action shorthand list|export|get|set for project scope\")\n .argument(\"[action]\", \"Config action: get|set|list|export\")\n .argument(\n \"[key]\",\n \"Config key for get|set: definition-of-done|item-format|history-missing-stream-policy|sprint-release-format-policy|parent-reference-policy|metadata-validation-profile|metadata-required-fields|lifecycle-stale-blocker-reason-patterns|lifecycle-closure-like-blocked-reason-patterns|lifecycle-closure-like-resolution-patterns|lifecycle-closure-like-actual-result-patterns|governance-preset|governance-ownership-enforcement|governance-create-mode-default|governance-close-validation-default|governance-require-close-reason|governance-parent-reference-policy|governance-metadata-validation-profile|governance-force-required-for-stale-lock|test-result-tracking|telemetry-tracking|context\",\n )\n .argument(\n \"[value]\",\n \"Optional value for set: routed to the right typed flag by key (e.g. config set telemetry-tracking off, config set item-format toon, config set definition-of-done \\\"Tests pass\\\"). Equivalent to --policy/--format/--criterion. context keys still require --default-depth/--section-* flags.\",\n )\n .option(\n \"--criterion <text>\",\n \"Criteria value for definition-of-done, metadata-required-fields, or lifecycle pattern keys (repeatable for set)\",\n collect,\n )\n .option(\"--clear-criteria\", \"Clear criteria-list keys for config set operations\")\n .option(\"--format <value>\", \"Item format for item-format key: toon\")\n .option(\n \"--policy <value>\",\n \"Policy key values: history-missing-stream-policy=auto_create|strict_error; sprint-release-format-policy=warn|strict_error; parent-reference-policy=warn|strict_error; governance-preset=minimal|default|strict|custom; governance-ownership-enforcement=none|warn|strict; governance-create-mode-default=progressive|strict; governance-close-validation-default=off|warn|strict; governance-require-close-reason=enabled|disabled; governance-parent-reference-policy=warn|strict_error; governance-metadata-validation-profile=core|strict|custom; governance-force-required-for-stale-lock=enabled|disabled; test-result-tracking=enabled|disabled; telemetry-tracking=enabled|disabled\",\n )\n .option(\n \"--value <value>\",\n \"Value for nested leaf settings keys (search_provider, search_mutation_refresh_policy, search_query_expansion_enabled, search_rerank_enabled, openai_base_url, ollama_model, vector_store_adapter, vector_store_collection_name, qdrant_url, lancedb_path, etc.). Equivalent to the positional value.\",\n )\n .option(\"--default-depth <value>\", \"Context default depth: brief|standard|deep\")\n .option(\"--activity-limit <n>\", \"Context default activity limit\")\n .option(\"--stale-threshold-days <n>\", \"Context staleness cutoff in days\")\n .option(\"--section-hierarchy <value>\", \"Enable/disable context hierarchy section (true|false)\")\n .option(\"--section-activity <value>\", \"Enable/disable context activity section (true|false)\")\n .option(\"--section-progress <value>\", \"Enable/disable context progress section (true|false)\")\n .option(\"--section-blockers <value>\", \"Enable/disable context blockers section (true|false)\")\n .option(\"--section-files <value>\", \"Enable/disable context files section (true|false)\")\n .option(\"--section-workload <value>\", \"Enable/disable context workload section (true|false)\")\n .option(\"--section-staleness <value>\", \"Enable/disable context staleness section (true|false)\")\n .option(\"--section-tests <value>\", \"Enable/disable context tests section (true|false)\")\n .description(\"Read or update pm settings for the current workspace or global profile.\")\n .action(async (scope: string | undefined, action: string | undefined, key: string | undefined, value: string | undefined, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const criteria = Array.isArray(options.criterion) ? (options.criterion as string[]) : [];\n const { runConfig } = await import(\"./commands/config.js\");\n const actionShorthands = new Set([\"get\", \"set\", \"list\", \"export\"]);\n const scopeShorthand = scope !== undefined && actionShorthands.has(scope);\n const resolvedScope = scopeShorthand ? \"project\" : (scope ?? \"project\");\n const resolvedAction = scopeShorthand ? scope : (action ?? \"list\");\n // When scope is an action shorthand, positionals shift left by one:\n // [set] [key] [value] -> action=set, key=key, value=value.\n const resolvedKey = scopeShorthand ? action : key;\n const resolvedValue = scopeShorthand ? key : value;\n const result = await runConfig(\n resolvedScope,\n resolvedAction,\n resolvedKey,\n {\n criterion: criteria,\n format: typeof options.format === \"string\" ? options.format : undefined,\n policy: typeof options.policy === \"string\" ? options.policy : undefined,\n value: typeof options.value === \"string\" ? options.value : undefined,\n clearCriteria: options.clearCriteria === true,\n defaultDepth: typeof options.defaultDepth === \"string\" ? options.defaultDepth : undefined,\n activityLimit: typeof options.activityLimit === \"string\" ? options.activityLimit : undefined,\n staleThresholdDays: typeof options.staleThresholdDays === \"string\" ? options.staleThresholdDays : undefined,\n sectionHierarchy: typeof options.sectionHierarchy === \"string\" ? options.sectionHierarchy : undefined,\n sectionActivity: typeof options.sectionActivity === \"string\" ? options.sectionActivity : undefined,\n sectionProgress: typeof options.sectionProgress === \"string\" ? options.sectionProgress : undefined,\n sectionBlockers: typeof options.sectionBlockers === \"string\" ? options.sectionBlockers : undefined,\n sectionFiles: typeof options.sectionFiles === \"string\" ? options.sectionFiles : undefined,\n sectionWorkload: typeof options.sectionWorkload === \"string\" ? options.sectionWorkload : undefined,\n sectionStaleness: typeof options.sectionStaleness === \"string\" ? options.sectionStaleness : undefined,\n sectionTests: typeof options.sectionTests === \"string\" ? options.sectionTests : undefined,\n },\n globalOptions,\n typeof resolvedValue === \"string\" ? resolvedValue : undefined,\n );\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=config took_ms=${Date.now() - startedAt}`);\n }\n });\n\n registerLifecycleCommand(program, \"extension\");\n registerLifecycleCommand(program, \"package\");\n\n addPackageScopeOptions(\n program\n .command(\"install\")\n .argument(\"[targets...]\", \"Package source (local path, bundled alias, npm: source, wildcard, or GitHub source)\")\n .option(\"--gh <github-source>\", \"Install from GitHub shorthand source (owner/repo[/path])\")\n .option(\"--github <github-source>\", \"Alias for --gh\")\n .option(\"--ref <ref>\", \"Git ref/branch/tag for GitHub install sources\")\n .description(\"Install a pm package into the project package scope by default.\"),\n ).action(async (targets: string[] | undefined, _options: Record<string, unknown>, command) => {\n const target = await normalizeInstallTargets(targets);\n await executeExtensionCommand(target, command.optsWithGlobals() as Record<string, unknown>, command, \"install\", \"package\");\n });\n\n addPackageScopeOptions(\n program\n .command(\"upgrade\")\n .argument(\"[target]\", \"Optional managed package name/source to upgrade; omit to upgrade pm CLI and all managed packages\")\n .option(\"--dry-run\", \"Plan CLI/package upgrades without running npm or reinstalling packages\")\n .option(\"--cli-only\", \"Upgrade only the pm CLI/SDK npm package\")\n .option(\"--packages-only\", \"Upgrade only managed pm packages\")\n .option(\"--repair\", \"Force npm global reinstall when upgrading the pm CLI/SDK\")\n .option(\"--tag <value>\", \"npm dist-tag/version for CLI and registry package upgrades\")\n .option(\"--package-name <value>\", \"Override the CLI package name for self-upgrade testing\")\n .description(\"Upgrade the pm CLI/SDK and refresh managed installable pm packages.\"),\n ).action(async (target: string | undefined, _options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runUpgrade } = await import(\"./commands/upgrade.js\");\n const result = await runUpgrade(target, command.opts() as Record<string, unknown>, globalOptions);\n printResult(result, globalOptions);\n if (!result.ok) {\n process.exitCode = EXIT_CODE.GENERIC_FAILURE;\n }\n if (globalOptions.profile) {\n printError(`profile:command=upgrade took_ms=${Date.now() - startedAt}`);\n }\n });\n}\n"],"names":[],"mappings":"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","debugId":"269b58b5-580f-5937-a240-9bd4b8bd6414"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
_testOnlyRestoreCommand,
|
|
3
|
-
runRestore
|
|
4
|
-
} from "./chunk-7UGEAPRY.js";
|
|
5
|
-
import "./chunk-WW4E2DC3.js";
|
|
6
|
-
import "./chunk-BB6MDVNQ.js";
|
|
7
|
-
import "./chunk-UVC5LOR7.js";
|
|
8
|
-
import "./chunk-T5472OMV.js";
|
|
9
|
-
import "./chunk-IPKJ6B36.js";
|
|
10
|
-
import "./chunk-7MRQ4HMK.js";
|
|
11
|
-
import "./chunk-NCVCO3NZ.js";
|
|
12
|
-
import "./chunk-YJ3SUEPD.js";
|
|
13
|
-
import "./chunk-P77P2ILI.js";
|
|
14
|
-
import "./chunk-MJTSZKK5.js";
|
|
15
|
-
export {
|
|
16
|
-
_testOnlyRestoreCommand,
|
|
17
|
-
runRestore
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=restore-2ZKT6UDC.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../cli/commands/schema.ts","../../../../../../../../core/schema/status-defs-file.ts","../../../../../../../../core/schema/fields-file.ts","../../../../../../../../core/schema/type-inference.ts"],"sourcesContent":["/**\n * @module cli/commands/schema\n *\n * Implements the pm schema command surface and its agent-facing runtime behavior.\n */\nimport path from \"node:path\";\nimport { mkdir } from \"node:fs/promises\";\nimport { pathExists, readFileIfExists, writeFileAtomic } from \"../../core/fs/fs-utils.js\";\nimport { acquireLock } from \"../../core/lock/lock.js\";\nimport {\n assertAliasesAvailable,\n assertTypeFolderAvailable,\n buildInvalidTypeHint,\n escapeForDoubleQuotes,\n normalizeAddTypeInput,\n parseItemTypesFile,\n removeItemType,\n serializeItemTypesFile,\n upsertItemType,\n type ItemTypeDefinition,\n} from \"../../core/schema/item-types-file.js\";\nimport {\n assertStatusTokensAvailable,\n BUILTIN_STATUS_IDS,\n normalizeAddStatusInput,\n normalizeStatusToken,\n parseStatusDefsFile,\n removeStatusDef,\n serializeStatusDefsFile,\n upsertStatusDef,\n type RuntimeStatusDefinition,\n} from \"../../core/schema/status-defs-file.js\";\nimport {\n BUILTIN_FIELD_KEYS,\n normalizeAddFieldInput,\n normalizeFieldKey,\n parseFieldsFile,\n removeField,\n serializeFieldsFile,\n upsertField,\n type RuntimeFieldDefinition,\n} from \"../../core/schema/fields-file.js\";\nimport {\n normalizeTypePresetName,\n resolveTypePresetDefinitions,\n TYPE_PRESET_NAMES,\n type TypePresetName,\n} from \"../../core/schema/type-presets.js\";\nimport { inferTypesFromTitles, type InferredTypeCandidate } from \"../../core/schema/type-inference.js\";\nimport {\n DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,\n filePathForSchemaSection,\n normalizeRuntimeSchemaSettings,\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport { resolveItemTypeRegistry, toDefaultFolder, type ResolvedItemTypeDefinition } from \"../../core/item/type-registry.js\";\nimport { listAllFrontMatterLight } from \"../../core/store/item-store.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport type { PmSettings } from \"../../types/index.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { getActiveExtensionRegistrations, runActiveOnWriteHooks } from \"../../core/extensions/index.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings, resolveGovernanceKnobs } from \"../../core/store/settings.js\";\n\nexport const SCHEMA_SUBCOMMANDS = [\n \"add-type\",\n \"remove-type\",\n \"add-status\",\n \"remove-status\",\n \"add-field\",\n \"remove-field\",\n \"list-fields\",\n \"show-field\",\n \"apply-preset\",\n \"list\",\n \"show\",\n \"show-status\",\n] as const;\n/**\n * Restricts schema subcommand values accepted by command, SDK, and storage contracts.\n */\nexport type SchemaSubcommand = (typeof SCHEMA_SUBCOMMANDS)[number];\n\nconst SCHEMA_TYPES_LOCK_ID = \"schema-types\";\nconst SCHEMA_STATUSES_LOCK_ID = \"schema-statuses\";\nconst SCHEMA_FIELDS_LOCK_ID = \"schema-fields\";\n\n/**\n * Documents the schema add type command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaAddTypeCommandOptions {\n description?: string;\n defaultStatus?: string;\n folder?: string;\n alias?: string[];\n author?: string;\n force?: boolean;\n}\n\n/**\n * Documents the schema remove type command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaRemoveTypeCommandOptions {\n author?: string;\n force?: boolean;\n}\n\n/**\n * Documents the schema add status command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaAddStatusCommandOptions {\n role?: string[];\n alias?: string[];\n description?: string;\n order?: number;\n author?: string;\n force?: boolean;\n}\n\n/**\n * Documents the schema remove status command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaRemoveStatusCommandOptions {\n author?: string;\n force?: boolean;\n}\n\n/**\n * Documents the schema add type result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaAddTypeResult {\n action: \"add-type\";\n registered: boolean;\n replaced: boolean;\n type: ItemTypeDefinition;\n file: {\n path: string;\n definitions: number;\n };\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the schema remove type result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaRemoveTypeResult {\n action: \"remove-type\";\n removed: boolean;\n type?: ItemTypeDefinition;\n file: {\n path: string;\n definitions: number;\n };\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the schema add status result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaAddStatusResult {\n action: \"add-status\";\n registered: boolean;\n replaced: boolean;\n status: RuntimeStatusDefinition;\n file: {\n path: string;\n statuses: number;\n };\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the schema remove status result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaRemoveStatusResult {\n action: \"remove-status\";\n removed: boolean;\n status?: RuntimeStatusDefinition;\n file: {\n path: string;\n statuses: number;\n };\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the schema add field command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaAddFieldCommandOptions {\n type?: string;\n commands?: string[];\n description?: string;\n cliFlag?: string;\n alias?: string[];\n required?: boolean;\n requiredOnCreate?: boolean;\n allowUnset?: boolean;\n requiredTypes?: string[];\n author?: string;\n force?: boolean;\n}\n\n/**\n * Documents the schema remove field command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaRemoveFieldCommandOptions {\n author?: string;\n force?: boolean;\n}\n\n/**\n * Documents the schema apply preset command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaApplyPresetCommandOptions {\n author?: string;\n force?: boolean;\n}\n\n/**\n * Documents the schema add type infer command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaAddTypeInferCommandOptions {\n minCount?: number;\n apply?: boolean;\n author?: string;\n force?: boolean;\n}\n\n/**\n * Documents the schema field summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaFieldSummary {\n key: string;\n type: string;\n commands: string[];\n cli_flag: string;\n cli_aliases: string[];\n description?: string;\n required: boolean;\n required_on_create: boolean;\n allow_unset: boolean;\n required_types: string[];\n}\n\n/**\n * Documents the schema add field result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaAddFieldResult {\n action: \"add-field\";\n registered: boolean;\n replaced: boolean;\n field: RuntimeFieldDefinition;\n file: {\n path: string;\n fields: number;\n };\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the schema remove field result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaRemoveFieldResult {\n action: \"remove-field\";\n removed: boolean;\n field?: RuntimeFieldDefinition;\n file: {\n path: string;\n fields: number;\n };\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the schema list fields result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaListFieldsResult {\n action: \"list-fields\";\n fields: SchemaFieldSummary[];\n counts: {\n total: number;\n };\n file: {\n path: string;\n };\n generated_at: string;\n}\n\n/**\n * Documents the schema show field result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaShowFieldResult {\n action: \"show-field\";\n field: SchemaFieldSummary;\n file: {\n path: string;\n };\n generated_at: string;\n}\n\n/**\n * Documents the schema apply preset result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaApplyPresetResult {\n action: \"apply-preset\";\n preset: TypePresetName;\n registered: string[];\n replaced: string[];\n file: {\n path: string;\n definitions: number;\n };\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the schema add type infer result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaAddTypeInferResult {\n action: \"infer-types\";\n applied: boolean;\n min_count: number;\n candidates: InferredTypeCandidate[];\n registered: string[];\n replaced: string[];\n skipped: Array<{ name: string; reason: string }>;\n file: {\n path: string;\n definitions: number;\n };\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the schema type summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaTypeSummary {\n name: string;\n folder: string;\n aliases: string[];\n default_status?: string;\n description?: string;\n}\n\n/**\n * Documents the schema status summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaStatusSummary {\n id: string;\n source: \"builtin\" | \"custom\";\n roles: string[];\n aliases: string[];\n description?: string;\n order?: number;\n}\n\n/**\n * Documents the schema type definition result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaTypeDefinitionResult extends SchemaTypeSummary {\n source: \"builtin\" | \"custom\" | \"extension\";\n extension?: {\n layer: string;\n name: string;\n };\n required_create_fields: string[];\n required_create_repeatables: string[];\n options: ResolvedItemTypeDefinition[\"options\"];\n command_option_policies: ResolvedItemTypeDefinition[\"command_option_policies\"];\n}\n\n/**\n * Documents the schema list result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaListResult {\n action: \"list\";\n builtin: SchemaTypeSummary[];\n custom: SchemaTypeSummary[];\n extension: SchemaTypeSummary[];\n counts: {\n builtin: number;\n custom: number;\n extension: number;\n total: number;\n };\n statuses: {\n builtin: SchemaStatusSummary[];\n custom: SchemaStatusSummary[];\n counts: {\n builtin: number;\n custom: number;\n total: number;\n };\n };\n fields: {\n custom: SchemaFieldSummary[];\n counts: {\n total: number;\n };\n };\n file: {\n path: string;\n };\n generated_at: string;\n}\n\n/**\n * Documents the schema show result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaShowResult {\n action: \"show\";\n type: SchemaTypeDefinitionResult;\n file: {\n path: string;\n };\n generated_at: string;\n}\n\n/**\n * Documents the schema show status result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaShowStatusResult {\n action: \"show-status\";\n status: SchemaStatusSummary;\n file: {\n path: string;\n };\n generated_at: string;\n}\n\n/**\n * Restricts schema inspect result values accepted by command, SDK, and storage contracts.\n */\nexport type SchemaInspectResult =\n | SchemaListResult\n | SchemaShowResult\n | SchemaShowStatusResult\n | SchemaListFieldsResult\n | SchemaShowFieldResult;\n\nfunction toAuthor(candidate: string | undefined, defaultAuthor: string): string {\n const resolved = candidate ?? process.env.PM_AUTHOR ?? defaultAuthor;\n const trimmed = resolved.trim();\n return trimmed.length > 0 ? trimmed : \"unknown\";\n}\n\n/* c8 ignore start -- schema command mutation/inspection branches are covered by broader schema integration workflows. */\n/**\n * Implements run schema add type for the public runtime surface of this module.\n */\nexport async function runSchemaAddType(\n name: string | undefined,\n options: SchemaAddTypeCommandOptions,\n global: GlobalOptions,\n): Promise<SchemaAddTypeResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n let normalized;\n try {\n normalized = normalizeAddTypeInput({\n name,\n description: options.description,\n defaultStatus: options.defaultStatus,\n folder: options.folder,\n aliases: options.alias,\n });\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);\n }\n\n const settings = await readSettings(pmRoot);\n const schema = normalizeRuntimeSchemaSettings(settings.schema);\n const typesPath = filePathForSchemaSection(pmRoot, schema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);\n\n const warnings: string[] = [];\n const author = toAuthor(options.author, settings.author_default);\n const governance = resolveGovernanceKnobs(settings);\n\n const releaseLock = await acquireLock(\n pmRoot,\n SCHEMA_TYPES_LOCK_ID,\n settings.locks.ttl_seconds,\n author,\n Boolean(options.force),\n governance.force_required_for_stale_lock,\n );\n let upsert;\n try {\n const previousRaw = await readFileIfExists(typesPath);\n let parsed;\n try {\n parsed = parseItemTypesFile(previousRaw);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.GENERIC_FAILURE);\n }\n try {\n assertAliasesAvailable(normalized, parsed);\n // GH-248: reject distinct type names that would slug to the same storage\n // folder (e.g. \"Spike\"/\"Spikes\") so item files never silently share a\n // directory. Same-named upserts (recase/idempotent re-runs) are exempt.\n // reservedFolders covers built-in + extension + settings-resolved custom\n // folders so a slug like \"Tasks\" can't collide with the built-in Task.\n const reservedFolders = new Map<string, string>();\n const resolvedRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n for (const [typeName, folder] of Object.entries(resolvedRegistry.type_to_folder)) {\n const folderKey = folder.trim().toLowerCase();\n if (folderKey.length > 0 && !reservedFolders.has(folderKey)) {\n reservedFolders.set(folderKey, typeName);\n }\n }\n assertTypeFolderAvailable(normalized, parsed, reservedFolders);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);\n }\n upsert = upsertItemType(parsed, normalized);\n // GH-248: an upsert that only differs in case from the existing canonical\n // name silently renames the stored type (e.g. registering \"spike\" over\n // \"Spike\"). Surface it as a non-blocking warning so the operator knows the\n // existing definition was replaced rather than a new type created.\n if (upsert.replaced && upsert.previousName !== undefined && upsert.previousName !== upsert.definition.name) {\n warnings.push(`type_recased:${upsert.previousName}->${upsert.definition.name}`);\n }\n // writeFileAtomic writes to a temp file then renames, so a failure leaves the\n // existing types.json untouched; no manual rollback is needed.\n await writeFileAtomic(typesPath, serializeItemTypesFile(upsert.file));\n await ensureTypeFolderScaffold(pmRoot, [upsert.definition], warnings, \"schema:add-type-folder\");\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: typesPath,\n scope: \"project\",\n op: \"schema:add-type\",\n })),\n );\n } finally {\n await releaseLock();\n }\n\n return {\n action: \"add-type\",\n registered: true,\n replaced: upsert.replaced,\n type: upsert.definition,\n file: {\n path: typesPath,\n definitions: upsert.file.definitions.length,\n },\n warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),\n generated_at: nowIso(),\n };\n}\n\nasync function ensureInitialized(pmRoot: string): Promise<void> {\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n}\n\n/**\n * Counts items whose resolved type matches `typeName` (case-insensitive). Uses\n * the lightest existing read path (listAllFrontMatterLight skips the heavy\n * collections cache). All items are counted — not just open ones — so the\n * advisory warning surfaces every item the removed definition would orphan;\n * the count is non-blocking. The caller passes its already-loaded `settings`\n * so we never re-read settings.json from disk here.\n */\nasync function countItemsUsingType(\n pmRoot: string,\n settings: PmSettings,\n schema: ReturnType<typeof normalizeRuntimeSchemaSettings>,\n typeName: string,\n): Promise<number> {\n const registry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const lowerName = typeName.trim().toLowerCase();\n const items = await listAllFrontMatterLight(pmRoot, settings.item_format, registry.type_to_folder, [], schema);\n return items.filter((item) => typeof item.type === \"string\" && item.type.toLowerCase() === lowerName).length;\n}\n\n/**\n * Counts items currently set to the status whose id/aliases resolve to\n * `statusId`. Uses listAllFrontMatterLight (the lightest read path). All items\n * are counted regardless of lifecycle phase; the count is advisory only. The\n * caller passes its already-loaded `settings` so we never re-read from disk.\n */\nasync function countItemsUsingStatus(\n pmRoot: string,\n settings: PmSettings,\n schema: ReturnType<typeof normalizeRuntimeSchemaSettings>,\n statusId: string,\n): Promise<number> {\n const registry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const statusRegistry = resolveRuntimeStatusRegistry(schema);\n const normalizedId = normalizeStatusToken(statusId);\n const items = await listAllFrontMatterLight(pmRoot, settings.item_format, registry.type_to_folder, [], schema);\n return items.filter((item) => {\n const itemStatus = typeof item.status === \"string\" ? item.status : \"\";\n const resolved = statusRegistry.alias_to_id.get(normalizeStatusToken(itemStatus)) ?? normalizeStatusToken(itemStatus);\n return resolved === normalizedId;\n }).length;\n}\n\n/**\n * Returns the workflow role-slot names (open_status, close_status, ...) that\n * currently point at `statusId` (normalized). Used to warn before removing a\n * status that a workflow default still references.\n */\nfunction workflowSlotsReferencing(\n workflow: {\n draft_status?: string;\n open_status?: string;\n in_progress_status?: string;\n blocked_status?: string;\n close_status?: string;\n canceled_status?: string;\n },\n statusId: string,\n): string[] {\n const slots: Array<[string, string | undefined]> = [\n [\"draft_status\", workflow.draft_status],\n [\"open_status\", workflow.open_status],\n [\"in_progress_status\", workflow.in_progress_status],\n [\"blocked_status\", workflow.blocked_status],\n [\"close_status\", workflow.close_status],\n [\"canceled_status\", workflow.canceled_status],\n ];\n return slots\n .filter(([, value]) => value !== undefined && normalizeStatusToken(value) === statusId)\n .map(([slot]) => slot);\n}\n\n/**\n * Implements run schema remove type for the public runtime surface of this module.\n */\nexport async function runSchemaRemoveType(\n name: string | undefined,\n options: SchemaRemoveTypeCommandOptions,\n global: GlobalOptions,\n): Promise<SchemaRemoveTypeResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n\n const settings = await readSettings(pmRoot);\n const schema = normalizeRuntimeSchemaSettings(settings.schema);\n const typesPath = filePathForSchemaSection(pmRoot, schema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);\n\n const warnings: string[] = [];\n const author = toAuthor(options.author, settings.author_default);\n const governance = resolveGovernanceKnobs(settings);\n\n const releaseLock = await acquireLock(\n pmRoot,\n SCHEMA_TYPES_LOCK_ID,\n settings.locks.ttl_seconds,\n author,\n Boolean(options.force),\n governance.force_required_for_stale_lock,\n );\n let removal;\n try {\n const previousRaw = await readFileIfExists(typesPath);\n let parsed;\n try {\n parsed = parseItemTypesFile(previousRaw);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.GENERIC_FAILURE);\n }\n try {\n removal = removeItemType(parsed, name);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);\n }\n if (removal.removed) {\n // Only emit the advisory orphan-count warning once a removable custom\n // definition was actually removed; a no-op/unknown removal would otherwise\n // surface a misleading items_using_type:* warning. The count is\n // non-blocking and reuses the already-loaded settings (no disk re-read).\n const removedName = (removal.definition?.name ?? name ?? \"\").trim();\n if (removedName.length > 0) {\n const usingType = await countItemsUsingType(pmRoot, settings, schema, removedName);\n if (usingType > 0) {\n warnings.push(`items_using_type:${usingType}`);\n }\n }\n // writeFileAtomic writes to a temp file then renames, so a failure leaves\n // the existing types.json untouched; no manual rollback is needed.\n await writeFileAtomic(typesPath, serializeItemTypesFile(removal.file));\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: typesPath,\n scope: \"project\",\n op: \"schema:remove-type\",\n })),\n );\n }\n } finally {\n await releaseLock();\n }\n\n return {\n action: \"remove-type\",\n removed: removal.removed,\n ...(removal.definition ? { type: removal.definition } : {}),\n file: {\n path: typesPath,\n definitions: removal.file.definitions.length,\n },\n warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),\n generated_at: nowIso(),\n };\n}\n\nfunction statusesPathFor(pmRoot: string, schema: ReturnType<typeof normalizeRuntimeSchemaSettings>): string {\n return filePathForSchemaSection(pmRoot, schema.files.statuses, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses);\n}\n\nfunction fieldsPathFor(pmRoot: string, schema: ReturnType<typeof normalizeRuntimeSchemaSettings>): string {\n return filePathForSchemaSection(pmRoot, schema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields);\n}\n\nfunction typesPathFor(pmRoot: string, schema: ReturnType<typeof normalizeRuntimeSchemaSettings>): string {\n return filePathForSchemaSection(pmRoot, schema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);\n}\n\nasync function ensureTypeFolderScaffold(\n pmRoot: string,\n definitions: readonly ItemTypeDefinition[],\n warnings: string[],\n op: string,\n): Promise<void> {\n for (const definition of definitions) {\n const folder = definition.folder ?? toDefaultFolder(definition.name);\n const target = path.join(pmRoot, folder);\n if (await pathExists(target)) {\n continue;\n }\n await mkdir(target, { recursive: true });\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: target,\n scope: \"project\",\n op,\n })),\n );\n }\n}\n\nfunction toSchemaFieldSummary(field: ReturnType<typeof resolveRuntimeFieldRegistry>[\"definitions\"][number]): SchemaFieldSummary {\n return {\n key: field.key,\n type: field.type,\n commands: [...field.commands],\n cli_flag: `--${field.cli_flag}`,\n cli_aliases: field.cli_aliases.map((alias) => `--${alias}`),\n ...(field.description ? { description: field.description } : {}),\n required: field.required,\n required_on_create: field.required_on_create,\n allow_unset: field.allow_unset,\n required_types: [...field.required_types],\n };\n}\n\n/**\n * Implements run schema add status for the public runtime surface of this module.\n */\nexport async function runSchemaAddStatus(\n id: string | undefined,\n options: SchemaAddStatusCommandOptions,\n global: GlobalOptions,\n): Promise<SchemaAddStatusResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n\n let normalized;\n try {\n normalized = normalizeAddStatusInput({\n id,\n roles: options.role,\n aliases: options.alias,\n description: options.description,\n order: options.order,\n });\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);\n }\n\n const settings = await readSettings(pmRoot);\n const schema = normalizeRuntimeSchemaSettings(settings.schema);\n const statusesPath = statusesPathFor(pmRoot, schema);\n const statusRegistry = resolveRuntimeStatusRegistry(schema);\n\n // Reject id/alias collisions with a DIFFERENT existing status so a custom\n // status can never shadow a built-in lifecycle token (e.g. --alias open).\n try {\n assertStatusTokensAvailable(normalized, statusRegistry.alias_to_id);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);\n }\n\n // Seed the upsert from the resolved (settings-or-file) definition so omitting\n // --role/--alias preserves metadata defined in settings.schema.statuses, not\n // only what is already in statuses.json.\n const resolvedExisting = statusRegistry.by_id.get(normalized.id);\n const baseDefinition: RuntimeStatusDefinition | undefined = resolvedExisting\n ? {\n id: resolvedExisting.id,\n ...(Array.isArray(resolvedExisting.roles) && resolvedExisting.roles.length > 0\n ? { roles: [...resolvedExisting.roles] }\n : {}),\n ...(Array.isArray(resolvedExisting.aliases) && resolvedExisting.aliases.length > 0\n ? { aliases: [...resolvedExisting.aliases] }\n : {}),\n ...(resolvedExisting.description ? { description: resolvedExisting.description } : {}),\n ...(typeof resolvedExisting.order === \"number\" ? { order: resolvedExisting.order } : {}),\n }\n : undefined;\n\n const warnings: string[] = [];\n const author = toAuthor(options.author, settings.author_default);\n const governance = resolveGovernanceKnobs(settings);\n\n const releaseLock = await acquireLock(\n pmRoot,\n SCHEMA_STATUSES_LOCK_ID,\n settings.locks.ttl_seconds,\n author,\n Boolean(options.force),\n governance.force_required_for_stale_lock,\n );\n let upsert;\n try {\n const previousRaw = await readFileIfExists(statusesPath);\n let parsed;\n try {\n parsed = parseStatusDefsFile(previousRaw);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.GENERIC_FAILURE);\n }\n // Re-check collisions against the CURRENT file under the lock: the pre-lock\n // check used the registry loaded before acquiring schema-statuses, so a\n // concurrent add-status could have written a colliding id/alias in between.\n // The lock serializes writes; this serializes the collision decision too.\n const fileAliasToId = new Map<string, string>();\n for (const definition of parsed.statuses) {\n const defId = normalizeStatusToken(definition.id);\n if (defId.length === 0) {\n continue;\n }\n fileAliasToId.set(defId, defId);\n for (const alias of Array.isArray(definition.aliases) ? definition.aliases : []) {\n const aliasToken = normalizeStatusToken(alias);\n if (aliasToken.length > 0 && !fileAliasToId.has(aliasToken)) {\n fileAliasToId.set(aliasToken, defId);\n }\n }\n }\n try {\n assertStatusTokensAvailable(normalized, fileAliasToId);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);\n }\n upsert = upsertStatusDef(parsed, normalized, baseDefinition);\n // writeFileAtomic writes to a temp file then renames, so a failure leaves\n // the existing statuses.json untouched; no manual rollback is needed.\n await writeFileAtomic(statusesPath, serializeStatusDefsFile(upsert.file));\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: statusesPath,\n scope: \"project\",\n op: \"schema:add-status\",\n })),\n );\n } finally {\n await releaseLock();\n }\n\n return {\n action: \"add-status\",\n registered: true,\n replaced: upsert.replaced,\n status: upsert.definition,\n file: {\n path: statusesPath,\n statuses: upsert.file.statuses.length,\n },\n warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),\n generated_at: nowIso(),\n };\n}\n\n/**\n * Implements run schema remove status for the public runtime surface of this module.\n */\nexport async function runSchemaRemoveStatus(\n id: string | undefined,\n options: SchemaRemoveStatusCommandOptions,\n global: GlobalOptions,\n): Promise<SchemaRemoveStatusResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n\n const settings = await readSettings(pmRoot);\n const schema = normalizeRuntimeSchemaSettings(settings.schema);\n const statusesPath = statusesPathFor(pmRoot, schema);\n\n const warnings: string[] = [];\n const author = toAuthor(options.author, settings.author_default);\n const governance = resolveGovernanceKnobs(settings);\n\n const releaseLock = await acquireLock(\n pmRoot,\n SCHEMA_STATUSES_LOCK_ID,\n settings.locks.ttl_seconds,\n author,\n Boolean(options.force),\n governance.force_required_for_stale_lock,\n );\n let removal;\n try {\n const previousRaw = await readFileIfExists(statusesPath);\n let parsed;\n try {\n parsed = parseStatusDefsFile(previousRaw);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.GENERIC_FAILURE);\n }\n try {\n removal = removeStatusDef(parsed, id);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);\n }\n if (removal.removed) {\n // Only emit the advisory orphan-count warning once a removable custom\n // status was actually removed; a no-op/unknown removal would otherwise\n // surface a misleading items_using_status:* warning. The count reuses the\n // already-loaded settings (no disk re-read) and is non-blocking.\n const removedId = normalizeStatusToken(removal.definition?.id ?? id);\n if (removedId.length > 0 && !BUILTIN_STATUS_IDS.has(removedId)) {\n const usingStatus = await countItemsUsingStatus(pmRoot, settings, schema, removedId);\n if (usingStatus > 0) {\n warnings.push(`items_using_status:${usingStatus}`);\n }\n // Removing a status that a workflow default still points at would leave\n // pm close / default pm create resolving to an unregistered status. Warn\n // (non-blocking, consistent with remove-type) so the operator re-points\n // the workflow slot via schema/workflows.json or pm config.\n const referencingSlots = workflowSlotsReferencing(schema.workflow, removedId);\n if (referencingSlots.length > 0) {\n warnings.push(`status_referenced_by_workflow:${referencingSlots.join(\",\")}`);\n }\n }\n await writeFileAtomic(statusesPath, serializeStatusDefsFile(removal.file));\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: statusesPath,\n scope: \"project\",\n op: \"schema:remove-status\",\n })),\n );\n }\n } finally {\n await releaseLock();\n }\n\n return {\n action: \"remove-status\",\n removed: removal.removed,\n ...(removal.definition ? { status: removal.definition } : {}),\n file: {\n path: statusesPath,\n statuses: removal.file.statuses.length,\n },\n warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),\n generated_at: nowIso(),\n };\n}\n\nfunction toSchemaTypeSummary(definition: ResolvedItemTypeDefinition): SchemaTypeSummary {\n return {\n name: definition.name,\n folder: definition.folder,\n aliases: Array.isArray(definition.aliases) ? [...definition.aliases] : [],\n ...(definition.default_status ? { default_status: definition.default_status } : {}),\n ...(definition.description ? { description: definition.description } : {}),\n };\n}\n\nfunction toSchemaTypeDefinition(\n definition: ResolvedItemTypeDefinition,\n source: SchemaTypeDefinitionResult[\"source\"],\n extensionProvenance?: SchemaTypeDefinitionResult[\"extension\"],\n): SchemaTypeDefinitionResult {\n return {\n ...toSchemaTypeSummary(definition),\n source,\n ...(extensionProvenance ? { extension: extensionProvenance } : {}),\n required_create_fields: [...definition.required_create_fields],\n required_create_repeatables: [...definition.required_create_repeatables],\n options: structuredClone(definition.options),\n command_option_policies: structuredClone(definition.command_option_policies),\n };\n}\n\nfunction toSchemaStatusSummary(definition: RuntimeStatusDefinition): SchemaStatusSummary {\n return {\n id: definition.id,\n source: BUILTIN_STATUS_IDS.has(definition.id) ? \"builtin\" : \"custom\",\n roles: Array.isArray(definition.roles) ? [...definition.roles] : [],\n aliases: Array.isArray(definition.aliases) ? [...definition.aliases] : [],\n ...(definition.description ? { description: definition.description } : {}),\n ...(typeof definition.order === \"number\" ? { order: definition.order } : {}),\n };\n}\n\nfunction classifyTypeSource(\n name: string,\n customNames: Set<string>,\n extensionNames: Set<string>,\n): SchemaTypeDefinitionResult[\"source\"] {\n const lowerName = name.toLowerCase();\n if (extensionNames.has(lowerName)) {\n return \"extension\";\n }\n if (customNames.has(lowerName)) {\n return \"custom\";\n }\n return \"builtin\";\n}\n\nfunction collectExtensionTypeProvenance(): Map<string, SchemaTypeDefinitionResult[\"extension\"]> {\n const provenance = new Map<string, SchemaTypeDefinitionResult[\"extension\"]>();\n const registrations = getActiveExtensionRegistrations();\n for (const registration of registrations?.item_types ?? []) {\n const rawTypes = (registration as { types?: unknown[] }).types;\n if (!Array.isArray(rawTypes)) {\n continue;\n }\n for (const rawType of rawTypes) {\n if (typeof rawType !== \"object\" || rawType === null || Array.isArray(rawType)) {\n continue;\n }\n const name = (rawType as { name?: unknown }).name;\n if (typeof name === \"string\" && name.trim().length > 0) {\n provenance.set(name.trim().toLowerCase(), {\n layer: registration.layer,\n name: registration.name,\n });\n }\n }\n }\n return provenance;\n}\n\nfunction buildSchemaStatusSummaries(\n schema: ReturnType<typeof normalizeRuntimeSchemaSettings>,\n): { builtin: SchemaStatusSummary[]; custom: SchemaStatusSummary[] } {\n const registry = resolveRuntimeStatusRegistry(schema);\n const builtin: SchemaStatusSummary[] = [];\n const custom: SchemaStatusSummary[] = [];\n for (const definition of registry.definitions) {\n const summary = toSchemaStatusSummary(definition);\n if (summary.source === \"builtin\") {\n builtin.push(summary);\n } else {\n custom.push(summary);\n }\n }\n return { builtin, custom };\n}\n\nasync function loadSchemaInspectionContext(global: GlobalOptions): Promise<{\n pmRoot: string;\n typesPath: string;\n statusesPath: string;\n byType: Record<string, ResolvedItemTypeDefinition>;\n customNames: Set<string>;\n extensionProvenance: Map<string, SchemaTypeDefinitionResult[\"extension\"]>;\n schema: ReturnType<typeof normalizeRuntimeSchemaSettings>;\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n const schema = normalizeRuntimeSchemaSettings(settings.schema);\n const typesPath = filePathForSchemaSection(pmRoot, schema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);\n const statusesPath = statusesPathFor(pmRoot, schema);\n const registry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const extensionProvenance = collectExtensionTypeProvenance();\n const customNames = new Set(\n (settings.item_types?.definitions ?? [])\n .map((definition) => definition.name.trim().toLowerCase())\n .filter((name) => name.length > 0 && !extensionProvenance.has(name)),\n );\n return {\n pmRoot,\n typesPath,\n statusesPath,\n byType: registry.by_type,\n customNames,\n extensionProvenance,\n schema,\n };\n}\n\n/**\n * Implements run schema list for the public runtime surface of this module.\n */\nexport async function runSchemaList(global: GlobalOptions): Promise<SchemaListResult> {\n const context = await loadSchemaInspectionContext(global);\n const builtin: SchemaTypeSummary[] = [];\n const custom: SchemaTypeSummary[] = [];\n const extension: SchemaTypeSummary[] = [];\n for (const definition of Object.values(context.byType).sort((left, right) => left.name.localeCompare(right.name))) {\n const source = classifyTypeSource(definition.name, context.customNames, new Set(context.extensionProvenance.keys()));\n const summary = toSchemaTypeSummary(definition);\n if (source === \"extension\") {\n extension.push(summary);\n } else if (source === \"custom\") {\n custom.push(summary);\n } else {\n builtin.push(summary);\n }\n }\n const statusSummaries = buildSchemaStatusSummaries(context.schema);\n const fieldSummaries = resolveRuntimeFieldRegistry(context.schema).definitions.map(toSchemaFieldSummary);\n return {\n action: \"list\",\n builtin,\n custom,\n extension,\n counts: {\n builtin: builtin.length,\n custom: custom.length,\n extension: extension.length,\n total: builtin.length + custom.length + extension.length,\n },\n statuses: {\n builtin: statusSummaries.builtin,\n custom: statusSummaries.custom,\n counts: {\n builtin: statusSummaries.builtin.length,\n custom: statusSummaries.custom.length,\n total: statusSummaries.builtin.length + statusSummaries.custom.length,\n },\n },\n fields: {\n custom: fieldSummaries,\n counts: {\n total: fieldSummaries.length,\n },\n },\n file: {\n path: context.typesPath,\n },\n generated_at: nowIso(),\n };\n}\n\n/**\n * Implements run schema show for the public runtime surface of this module.\n */\nexport async function runSchemaShow(name: string | undefined, global: GlobalOptions): Promise<SchemaShowResult> {\n const typeName = (name ?? \"\").trim();\n if (typeName.length === 0) {\n throw new PmCliError(\"Type name must not be empty.\", EXIT_CODE.USAGE);\n }\n const context = await loadSchemaInspectionContext(global);\n const match = Object.values(context.byType).find(\n (definition) =>\n definition.name.toLowerCase() === typeName.toLowerCase() ||\n definition.aliases.some((alias) => alias.toLowerCase() === typeName.toLowerCase()),\n );\n if (!match) {\n throw new PmCliError(\n `Unknown item type \"${typeName}\". Run pm schema list to inspect registered types, or pm schema add-type \"${escapeForDoubleQuotes(typeName)}\" to register it.`,\n EXIT_CODE.NOT_FOUND,\n { code: \"unknown_item_type\" },\n );\n }\n return {\n action: \"show\",\n type: toSchemaTypeDefinition(\n match,\n classifyTypeSource(match.name, context.customNames, new Set(context.extensionProvenance.keys())),\n context.extensionProvenance.get(match.name.toLowerCase()),\n ),\n file: {\n path: context.typesPath,\n },\n generated_at: nowIso(),\n };\n}\n\n/**\n * Implements run schema show status for the public runtime surface of this module.\n */\nexport async function runSchemaShowStatus(\n id: string | undefined,\n global: GlobalOptions,\n): Promise<SchemaShowStatusResult> {\n const statusToken = normalizeStatusToken(id);\n if (statusToken.length === 0) {\n throw new PmCliError(\"Status id must not be empty.\", EXIT_CODE.USAGE);\n }\n const context = await loadSchemaInspectionContext(global);\n const statusRegistry = resolveRuntimeStatusRegistry(context.schema);\n const resolvedId = statusRegistry.alias_to_id.get(statusToken) ?? statusToken;\n const match = statusRegistry.by_id.get(resolvedId);\n if (!match) {\n throw new PmCliError(\n `Unknown status \"${id}\". Run pm schema list to inspect registered statuses, or pm schema add-status \"${escapeForDoubleQuotes(\n id ?? \"\",\n )}\" to register it.`,\n EXIT_CODE.NOT_FOUND,\n { code: \"unknown_status\" },\n );\n }\n return {\n action: \"show-status\",\n status: toSchemaStatusSummary(match),\n file: {\n path: context.statusesPath,\n },\n generated_at: nowIso(),\n };\n}\n\n/**\n * Implements run schema add field for the public runtime surface of this module.\n */\nexport async function runSchemaAddField(\n key: string | undefined,\n options: SchemaAddFieldCommandOptions,\n global: GlobalOptions,\n): Promise<SchemaAddFieldResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n\n let normalized;\n try {\n normalized = normalizeAddFieldInput({\n key,\n type: options.type,\n commands: options.commands,\n description: options.description,\n cliFlag: options.cliFlag,\n aliases: options.alias,\n required: options.required,\n requiredOnCreate: options.requiredOnCreate,\n allowUnset: options.allowUnset,\n requiredTypes: options.requiredTypes,\n });\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);\n }\n\n const settings = await readSettings(pmRoot);\n const schema = normalizeRuntimeSchemaSettings(settings.schema);\n const fieldsPath = fieldsPathFor(pmRoot, schema);\n\n const warnings: string[] = [];\n const author = toAuthor(options.author, settings.author_default);\n const governance = resolveGovernanceKnobs(settings);\n\n const releaseLock = await acquireLock(\n pmRoot,\n SCHEMA_FIELDS_LOCK_ID,\n settings.locks.ttl_seconds,\n author,\n Boolean(options.force),\n governance.force_required_for_stale_lock,\n );\n let upsert;\n try {\n const previousRaw = await readFileIfExists(fieldsPath);\n let parsed;\n try {\n parsed = parseFieldsFile(previousRaw);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.GENERIC_FAILURE);\n }\n upsert = upsertField(parsed, normalized);\n await writeFileAtomic(fieldsPath, serializeFieldsFile(upsert.file));\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: fieldsPath,\n scope: \"project\",\n op: \"schema:add-field\",\n })),\n );\n } finally {\n await releaseLock();\n }\n\n return {\n action: \"add-field\",\n registered: true,\n replaced: upsert.replaced,\n field: upsert.definition,\n file: {\n path: fieldsPath,\n fields: upsert.file.fields.length,\n },\n warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),\n generated_at: nowIso(),\n };\n}\n\n/**\n * Counts items carrying a non-empty value for the custom field's metadata key.\n * Advisory only (non-blocking) so remove-field can surface how many items would\n * lose a managed column. Reuses the already-loaded settings (no disk re-read).\n */\nasync function countItemsUsingField(\n pmRoot: string,\n settings: PmSettings,\n schema: ReturnType<typeof normalizeRuntimeSchemaSettings>,\n metadataKey: string,\n): Promise<number> {\n const registry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const items = await listAllFrontMatterLight(pmRoot, settings.item_format, registry.type_to_folder, [], schema);\n return items.filter((item) => {\n const value = (item as unknown as Record<string, unknown>)[metadataKey];\n if (value === undefined || value === null) {\n return false;\n }\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === \"string\") {\n return value.trim().length > 0;\n }\n return true;\n }).length;\n}\n\n/**\n * Implements run schema remove field for the public runtime surface of this module.\n */\nexport async function runSchemaRemoveField(\n key: string | undefined,\n options: SchemaRemoveFieldCommandOptions,\n global: GlobalOptions,\n): Promise<SchemaRemoveFieldResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n\n const settings = await readSettings(pmRoot);\n const schema = normalizeRuntimeSchemaSettings(settings.schema);\n const fieldsPath = fieldsPathFor(pmRoot, schema);\n\n const warnings: string[] = [];\n const author = toAuthor(options.author, settings.author_default);\n const governance = resolveGovernanceKnobs(settings);\n\n const releaseLock = await acquireLock(\n pmRoot,\n SCHEMA_FIELDS_LOCK_ID,\n settings.locks.ttl_seconds,\n author,\n Boolean(options.force),\n governance.force_required_for_stale_lock,\n );\n let removal;\n try {\n const previousRaw = await readFileIfExists(fieldsPath);\n let parsed;\n try {\n parsed = parseFieldsFile(previousRaw);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.GENERIC_FAILURE);\n }\n try {\n removal = removeField(parsed, key);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);\n }\n if (removal.removed) {\n const removedKey = normalizeFieldKey(removal.definition?.key ?? key);\n const metadataKey = normalizeFieldKey(removal.definition?.metadata_key ?? removal.definition?.front_matter_key ?? removedKey);\n if (metadataKey.length > 0) {\n const usingField = await countItemsUsingField(pmRoot, settings, schema, metadataKey);\n if (usingField > 0) {\n warnings.push(`items_using_field:${usingField}`);\n }\n }\n await writeFileAtomic(fieldsPath, serializeFieldsFile(removal.file));\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: fieldsPath,\n scope: \"project\",\n op: \"schema:remove-field\",\n })),\n );\n }\n } finally {\n await releaseLock();\n }\n\n return {\n action: \"remove-field\",\n removed: removal.removed,\n ...(removal.definition ? { field: removal.definition } : {}),\n file: {\n path: fieldsPath,\n fields: removal.file.fields.length,\n },\n warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),\n generated_at: nowIso(),\n };\n}\n\n/**\n * Implements run schema list fields for the public runtime surface of this module.\n */\nexport async function runSchemaListFields(global: GlobalOptions): Promise<SchemaListFieldsResult> {\n const context = await loadSchemaInspectionContext(global);\n const fields = resolveRuntimeFieldRegistry(context.schema).definitions.map(toSchemaFieldSummary);\n return {\n action: \"list-fields\",\n fields,\n counts: {\n total: fields.length,\n },\n file: {\n path: fieldsPathFor(context.pmRoot, context.schema),\n },\n generated_at: nowIso(),\n };\n}\n\n/**\n * Implements run schema show field for the public runtime surface of this module.\n */\nexport async function runSchemaShowField(\n key: string | undefined,\n global: GlobalOptions,\n): Promise<SchemaShowFieldResult> {\n const fieldKey = normalizeFieldKey(key);\n if (fieldKey.length === 0) {\n throw new PmCliError(\"Field key must not be empty.\", EXIT_CODE.USAGE);\n }\n const context = await loadSchemaInspectionContext(global);\n const match = resolveRuntimeFieldRegistry(context.schema).by_key.get(fieldKey);\n if (!match) {\n throw new PmCliError(\n `Unknown custom field \"${key}\". Run pm schema list-fields to inspect registered fields, or pm schema add-field \"${escapeForDoubleQuotes(\n key ?? \"\",\n )}\" to register it.`,\n EXIT_CODE.NOT_FOUND,\n { code: \"unknown_field\" },\n );\n }\n return {\n action: \"show-field\",\n field: toSchemaFieldSummary(match),\n file: {\n path: fieldsPathFor(context.pmRoot, context.schema),\n },\n generated_at: nowIso(),\n };\n}\n\n/**\n * Implements run schema apply preset for the public runtime surface of this module.\n */\nexport async function runSchemaApplyPreset(\n preset: string | undefined,\n options: SchemaApplyPresetCommandOptions,\n global: GlobalOptions,\n): Promise<SchemaApplyPresetResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n\n let presetName: TypePresetName;\n try {\n const normalized = normalizeTypePresetName(preset);\n if (normalized === undefined) {\n throw new Error(`Type preset name is required. Allowed: ${TYPE_PRESET_NAMES.join(\", \")}.`);\n }\n presetName = normalized;\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);\n }\n\n const settings = await readSettings(pmRoot);\n const schema = normalizeRuntimeSchemaSettings(settings.schema);\n const typesPath = typesPathFor(pmRoot, schema);\n\n const warnings: string[] = [];\n const author = toAuthor(options.author, settings.author_default);\n const governance = resolveGovernanceKnobs(settings);\n\n const registered: string[] = [];\n const replaced: string[] = [];\n let definitionsCount = 0;\n const releaseLock = await acquireLock(\n pmRoot,\n SCHEMA_TYPES_LOCK_ID,\n settings.locks.ttl_seconds,\n author,\n Boolean(options.force),\n governance.force_required_for_stale_lock,\n );\n try {\n const previousRaw = await readFileIfExists(typesPath);\n let parsed;\n try {\n parsed = parseItemTypesFile(previousRaw);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.GENERIC_FAILURE);\n }\n let nextFile = parsed;\n for (const normalized of resolveTypePresetDefinitions(presetName)) {\n const upsert = upsertItemType(nextFile, normalized);\n nextFile = upsert.file;\n (upsert.replaced ? replaced : registered).push(upsert.definition.name);\n }\n definitionsCount = nextFile.definitions.length;\n await writeFileAtomic(typesPath, serializeItemTypesFile(nextFile));\n await ensureTypeFolderScaffold(\n pmRoot,\n resolveTypePresetDefinitions(presetName),\n warnings,\n \"schema:apply-preset-folder\",\n );\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: typesPath,\n scope: \"project\",\n op: \"schema:apply-preset\",\n })),\n );\n } finally {\n await releaseLock();\n }\n\n return {\n action: \"apply-preset\",\n preset: presetName,\n registered,\n replaced,\n file: {\n path: typesPath,\n definitions: definitionsCount,\n },\n warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),\n generated_at: nowIso(),\n };\n}\n\n/**\n * Implements run schema infer types for the public runtime surface of this module.\n */\nexport async function runSchemaInferTypes(\n options: SchemaAddTypeInferCommandOptions,\n global: GlobalOptions,\n): Promise<SchemaAddTypeInferResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n\n const settings = await readSettings(pmRoot);\n const schema = normalizeRuntimeSchemaSettings(settings.schema);\n const typesPath = typesPathFor(pmRoot, schema);\n let minCount = 10;\n if (options.minCount !== undefined) {\n if (!Number.isInteger(options.minCount) || options.minCount < 1) {\n throw new PmCliError(\"--min-count must be a positive integer (>= 1).\", EXIT_CODE.USAGE);\n }\n minCount = options.minCount;\n }\n\n const registry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const items = await listAllFrontMatterLight(pmRoot, settings.item_format, registry.type_to_folder, [], schema);\n const titles = items.map((item) => (typeof item.title === \"string\" ? item.title : \"\"));\n const candidates = inferTypesFromTitles(titles, { minCount });\n\n const warnings: string[] = [];\n const registered: string[] = [];\n const replaced: string[] = [];\n const skipped: Array<{ name: string; reason: string }> = [];\n let definitionsCount: number;\n\n // Dry-run preview by default: only --apply mutates schema/types.json.\n if (!options.apply) {\n let parsed;\n try {\n parsed = parseItemTypesFile(await readFileIfExists(typesPath));\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.GENERIC_FAILURE);\n }\n definitionsCount = parsed.definitions.length;\n return {\n action: \"infer-types\",\n applied: false,\n min_count: minCount,\n candidates,\n registered,\n replaced,\n skipped,\n file: {\n path: typesPath,\n definitions: definitionsCount,\n },\n warnings,\n generated_at: nowIso(),\n };\n }\n\n const author = toAuthor(options.author, settings.author_default);\n const governance = resolveGovernanceKnobs(settings);\n const releaseLock = await acquireLock(\n pmRoot,\n SCHEMA_TYPES_LOCK_ID,\n settings.locks.ttl_seconds,\n author,\n Boolean(options.force),\n governance.force_required_for_stale_lock,\n );\n try {\n const previousRaw = await readFileIfExists(typesPath);\n let parsed;\n try {\n parsed = parseItemTypesFile(previousRaw);\n } catch (error) {\n throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.GENERIC_FAILURE);\n }\n let nextFile = parsed;\n for (const candidate of candidates) {\n if (candidate.shadows_builtin) {\n skipped.push({ name: candidate.name, reason: \"shadows_builtin\" });\n continue;\n }\n let normalized;\n try {\n normalized = normalizeAddTypeInput({ name: candidate.name });\n } catch {\n // A title prefix that does not normalize to a valid type token (rare,\n // given the inference pattern) is skipped rather than aborting the batch.\n skipped.push({ name: candidate.name, reason: \"invalid_type_token\" });\n continue;\n }\n const upsert = upsertItemType(nextFile, normalized);\n nextFile = upsert.file;\n (upsert.replaced ? replaced : registered).push(upsert.definition.name);\n }\n definitionsCount = nextFile.definitions.length;\n await writeFileAtomic(typesPath, serializeItemTypesFile(nextFile));\n await ensureTypeFolderScaffold(\n pmRoot,\n nextFile.definitions.filter((definition) => registered.includes(definition.name) || replaced.includes(definition.name)),\n warnings,\n \"schema:infer-types-folder\",\n );\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: typesPath,\n scope: \"project\",\n op: \"schema:infer-types\",\n })),\n );\n } finally {\n await releaseLock();\n }\n\n return {\n action: \"infer-types\",\n applied: true,\n min_count: minCount,\n candidates,\n registered,\n replaced,\n skipped,\n file: {\n path: typesPath,\n definitions: definitionsCount,\n },\n warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),\n generated_at: nowIso(),\n };\n}\n\n/**\n * Implements format schema add type human for the public runtime surface of this module.\n */\nexport function formatSchemaAddTypeHuman(result: SchemaAddTypeResult): string {\n const verb = result.replaced ? \"Updated\" : \"Registered\";\n const aliasSuffix =\n result.type.aliases && result.type.aliases.length > 0 ? ` (aliases: ${result.type.aliases.join(\", \")})` : \"\";\n return `${verb} custom item type \"${result.type.name}\"${aliasSuffix} in ${result.file.path}. Run: pm create \"${escapeForDoubleQuotes(result.type.name)}\" \"<title>\"`;\n}\n\n/**\n * Implements format schema remove type human for the public runtime surface of this module.\n */\nexport function formatSchemaRemoveTypeHuman(result: SchemaRemoveTypeResult): string {\n if (!result.removed) {\n return `No custom item type matched; nothing removed from ${result.file.path}.`;\n }\n const name = result.type?.name ?? \"(unknown)\";\n return `Removed custom item type \"${name}\" from ${result.file.path}.`;\n}\n\n/**\n * Implements format schema add status human for the public runtime surface of this module.\n */\nexport function formatSchemaAddStatusHuman(result: SchemaAddStatusResult): string {\n const verb = result.replaced ? \"Updated\" : \"Registered\";\n const roleSuffix =\n result.status.roles && result.status.roles.length > 0 ? ` (roles: ${result.status.roles.join(\", \")})` : \"\";\n const aliasSuffix =\n result.status.aliases && result.status.aliases.length > 0 ? ` (aliases: ${result.status.aliases.join(\", \")})` : \"\";\n return `${verb} status \"${result.status.id}\"${roleSuffix}${aliasSuffix} in ${result.file.path}.`;\n}\n\n/**\n * Implements format schema remove status human for the public runtime surface of this module.\n */\nexport function formatSchemaRemoveStatusHuman(result: SchemaRemoveStatusResult): string {\n if (!result.removed) {\n return `No custom status matched; nothing removed from ${result.file.path}.`;\n }\n const id = result.status?.id ?? \"(unknown)\";\n return `Removed custom status \"${id}\" from ${result.file.path}.`;\n}\n\n/**\n * Implements format schema list human for the public runtime surface of this module.\n */\nexport function formatSchemaListHuman(result: SchemaListResult): string {\n const lines = [\n `Schema types: ${result.counts.total} total (${result.counts.builtin} builtin, ${result.counts.custom} custom, ${result.counts.extension} extension)`,\n ];\n for (const [label, entries] of [\n [\"builtin\", result.builtin],\n [\"custom\", result.custom],\n [\"extension\", result.extension],\n ] as const) {\n if (entries.length === 0) {\n continue;\n }\n lines.push(`${label}: ${entries.map((entry) => entry.name).join(\", \")}`);\n }\n lines.push(\n `statuses: ${result.statuses.counts.total} total (${result.statuses.counts.builtin} builtin, ${result.statuses.counts.custom} custom)`,\n );\n for (const [label, entries] of [\n [\"builtin statuses\", result.statuses.builtin],\n [\"custom statuses\", result.statuses.custom],\n ] as const) {\n if (entries.length === 0) {\n continue;\n }\n lines.push(`${label}: ${entries.map((entry) => entry.id).join(\", \")}`);\n }\n lines.push(`custom fields: ${result.fields.counts.total} total`);\n if (result.fields.custom.length > 0) {\n lines.push(`fields: ${result.fields.custom.map((field) => `${field.key} (${field.type}, ${field.cli_flag})`).join(\", \")}`);\n }\n lines.push(`Inspect one: pm schema show <Type>`);\n lines.push(`Inspect one status: pm schema show-status <status>`);\n lines.push(`Inspect one field: pm schema show-field <key>`);\n return lines.join(\"\\n\");\n}\n\n/**\n * Implements format schema show human for the public runtime surface of this module.\n */\nexport function formatSchemaShowHuman(result: SchemaShowResult): string {\n const parts = [\n `type: ${result.type.name}`,\n `source: ${result.type.source}`,\n `folder: ${result.type.folder}`,\n ];\n if (result.type.default_status) {\n parts.push(`default_status: ${result.type.default_status}`);\n }\n if (result.type.aliases.length > 0) {\n parts.push(`aliases: ${result.type.aliases.join(\", \")}`);\n }\n if (result.type.description) {\n parts.push(`description: ${result.type.description}`);\n }\n if (result.type.options.length > 0) {\n parts.push(`options: ${result.type.options.map((option) => option.key).join(\", \")}`);\n }\n return parts.join(\"\\n\");\n}\n\n/**\n * Implements format schema show status human for the public runtime surface of this module.\n */\nexport function formatSchemaShowStatusHuman(result: SchemaShowStatusResult): string {\n const parts = [\n `status: ${result.status.id}`,\n `source: ${result.status.source}`,\n ];\n if (result.status.roles.length > 0) {\n parts.push(`roles: ${result.status.roles.join(\", \")}`);\n }\n if (result.status.aliases.length > 0) {\n parts.push(`aliases: ${result.status.aliases.join(\", \")}`);\n }\n if (result.status.description) {\n parts.push(`description: ${result.status.description}`);\n }\n if (typeof result.status.order === \"number\") {\n parts.push(`order: ${result.status.order}`);\n }\n return parts.join(\"\\n\");\n}\n\nfunction formatFieldSummaryLine(field: SchemaFieldSummary): string {\n const flags: string[] = [];\n if (field.required) {\n flags.push(\"required\");\n }\n if (field.required_on_create) {\n flags.push(\"required_on_create\");\n }\n if (!field.allow_unset) {\n flags.push(\"no_unset\");\n }\n const flagSuffix = flags.length > 0 ? ` [${flags.join(\", \")}]` : \"\";\n return `${field.key} (${field.type}) ${field.cli_flag} commands=${field.commands.join(\"/\")}${flagSuffix}`;\n}\n\n/**\n * Implements format schema add field human for the public runtime surface of this module.\n */\nexport function formatSchemaAddFieldHuman(result: SchemaAddFieldResult): string {\n const verb = result.replaced ? \"Updated\" : \"Registered\";\n return `${verb} custom field \"${result.field.key}\" in ${result.file.path}. Use it: pm create \"<title>\" --${(result.field.cli_flag ?? result.field.key).replaceAll(\"_\", \"-\")} <value>`;\n}\n\n/**\n * Implements format schema remove field human for the public runtime surface of this module.\n */\nexport function formatSchemaRemoveFieldHuman(result: SchemaRemoveFieldResult): string {\n if (!result.removed) {\n return `No custom field matched; nothing removed from ${result.file.path}.`;\n }\n const key = result.field?.key ?? \"(unknown)\";\n return `Removed custom field \"${key}\" from ${result.file.path}.`;\n}\n\n/**\n * Implements format schema list fields human for the public runtime surface of this module.\n */\nexport function formatSchemaListFieldsHuman(result: SchemaListFieldsResult): string {\n const lines = [`Custom fields: ${result.counts.total} total`];\n for (const field of result.fields) {\n lines.push(` ${formatFieldSummaryLine(field)}`);\n }\n lines.push(`Inspect one: pm schema show-field <key>`);\n return lines.join(\"\\n\");\n}\n\n/**\n * Implements format schema show field human for the public runtime surface of this module.\n */\nexport function formatSchemaShowFieldHuman(result: SchemaShowFieldResult): string {\n const field = result.field;\n const parts = [\n `field: ${field.key}`,\n `type: ${field.type}`,\n `cli_flag: ${field.cli_flag}`,\n `commands: ${field.commands.join(\", \")}`,\n ];\n if (field.cli_aliases.length > 0) {\n parts.push(`cli_aliases: ${field.cli_aliases.join(\", \")}`);\n }\n if (field.description) {\n parts.push(`description: ${field.description}`);\n }\n if (field.required) {\n parts.push(`required: true`);\n }\n if (field.required_on_create) {\n parts.push(`required_on_create: true`);\n }\n if (!field.allow_unset) {\n parts.push(`allow_unset: false`);\n }\n if (field.required_types.length > 0) {\n parts.push(`required_types: ${field.required_types.join(\", \")}`);\n }\n return parts.join(\"\\n\");\n}\n\n/**\n * Implements format schema apply preset human for the public runtime surface of this module.\n */\nexport function formatSchemaApplyPresetHuman(result: SchemaApplyPresetResult): string {\n const registered = result.registered.length > 0 ? `registered: ${result.registered.join(\", \")}` : \"\";\n const replaced = result.replaced.length > 0 ? `updated: ${result.replaced.join(\", \")}` : \"\";\n const detail = [registered, replaced].filter((part) => part.length > 0).join(\"; \");\n return `Applied \"${result.preset}\" type preset to ${result.file.path}${detail.length > 0 ? ` (${detail})` : \"\"}.`;\n}\n\n/**\n * Implements format schema infer types human for the public runtime surface of this module.\n */\nexport function formatSchemaInferTypesHuman(result: SchemaAddTypeInferResult): string {\n if (result.candidates.length === 0) {\n return `No title-prefix conventions found with at least ${result.min_count} items. Lower the threshold with --min-count <n>.`;\n }\n const lines = result.applied\n ? [`Inferred and registered custom types from title prefixes (min-count ${result.min_count}):`]\n : [`Inferred custom type candidates from title prefixes (min-count ${result.min_count}, dry-run):`];\n for (const candidate of result.candidates) {\n const note = candidate.shadows_builtin ? \" [shadows built-in, skipped]\" : \"\";\n lines.push(` ${candidate.name} <- \"${candidate.prefix}\" (${candidate.count} items)${note}`);\n }\n if (!result.applied) {\n lines.push(`Re-run with --apply to register the non-shadowing candidates.`);\n } else {\n if (result.registered.length > 0) {\n lines.push(`registered: ${result.registered.join(\", \")}`);\n }\n if (result.replaced.length > 0) {\n lines.push(`updated: ${result.replaced.join(\", \")}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\n/* c8 ignore stop */\n\n/**\n * Re-export so register-mutation can surface the hint in usage examples\n * without importing the core module directly.\n */\nexport { buildInvalidTypeHint };\n\nexport const _testOnlySchemaCommand = {\n toAuthor,\n workflowSlotsReferencing,\n};\n","/**\n * @module core/schema/status-defs-file\n *\n * Resolves configurable schema, fields, statuses, and workflows for Status Defs File.\n */\nimport { RUNTIME_STATUS_ROLE_VALUES } from \"../../types/index.js\";\nimport type { RuntimeStatusDefinition, RuntimeStatusRole } from \"../../types/index.js\";\nimport { DEFAULT_RUNTIME_STATUS_DEFINITIONS } from \"./runtime-schema.js\";\n\nexport type { RuntimeStatusDefinition, RuntimeStatusRole } from \"../../types/index.js\";\n\n/**\n * Pure logic for the `pm schema add-status` / `pm schema remove-status`\n * commands. The CLI command file (schema.ts) owns IO/governance; everything\n * testable and side-effect-free lives here so it can be coverage-gated to 100%.\n *\n * Statuses persist at `.agents/pm/schema/statuses.json` under the shape\n * `{ statuses: RuntimeStatusDefinition[] }`. When the file is absent the runtime\n * merge layer (src/core/store/settings.ts) still supplies the built-in defaults\n * from DEFAULT_RUNTIME_STATUS_DEFINITIONS, so this module never duplicates them\n * into the persisted file.\n */\n\nconst RUNTIME_STATUS_ROLE_SET = new Set<string>(RUNTIME_STATUS_ROLE_VALUES);\n\n/**\n * The 5 lifecycle status ids that ship as built-in defaults and may never be\n * removed (their normalized ids match DEFAULT_RUNTIME_STATUS_DEFINITIONS:\n * open/in_progress/blocked/closed/canceled). `draft` is also a default but the\n * acceptance criteria enumerate the 5 terminal/active ids explicitly, so the\n * guard derives the full set from the canonical defaults to stay in sync.\n */\nexport const BUILTIN_STATUS_IDS: ReadonlySet<string> = new Set(\n DEFAULT_RUNTIME_STATUS_DEFINITIONS.map((definition) => normalizeStatusToken(definition.id)).filter(\n (id) => id.length > 0,\n ),\n);\n\n/**\n * The shape persisted at `.agents/pm/schema/statuses.json`.\n */\nexport interface StatusDefsFile {\n statuses: RuntimeStatusDefinition[];\n}\n\n/**\n * Documents the raw add status input payload exchanged by command, SDK, and package integrations.\n */\nexport interface RawAddStatusInput {\n id: string | undefined;\n roles?: string[];\n aliases?: string[];\n description?: string;\n order?: number;\n}\n\n/**\n * Documents the normalized add status input payload exchanged by command, SDK, and package integrations.\n */\nexport interface NormalizedAddStatusInput {\n id: string;\n /**\n * Normalized roles, or `undefined` when the raw input did not supply a roles\n * field at all. `undefined` means \"leave existing roles untouched\" on upsert;\n * an explicit empty array means \"clear roles\". This distinction is what keeps\n * `add-status review --description x` from wiping a previously-set role.\n */\n roles?: RuntimeStatusRole[];\n /** Same omitted-vs-explicit-empty semantics as `roles`. */\n aliases?: string[];\n description?: string;\n order?: number;\n}\n\n/**\n * Documents the upsert status def result payload exchanged by command, SDK, and package integrations.\n */\nexport interface UpsertStatusDefResult {\n file: StatusDefsFile;\n /** The definition as stored after the upsert (existing fields preserved). */\n definition: RuntimeStatusDefinition;\n /** True when an existing definition with the same (normalized) id was replaced. */\n replaced: boolean;\n}\n\n/**\n * Documents the remove status def result payload exchanged by command, SDK, and package integrations.\n */\nexport interface RemoveStatusDefResult {\n file: StatusDefsFile;\n /** True when a matching definition existed and was dropped from the file. */\n removed: boolean;\n /** The removed definition, when one matched the requested id. */\n definition?: RuntimeStatusDefinition;\n}\n\n/**\n * Normalizes a status token using the same rules as runtime-schema.ts: lowercase\n * and collapse any run of whitespace/hyphens into a single underscore.\n */\nexport function normalizeStatusToken(value: unknown): string {\n return typeof value === \"string\" ? value.trim().toLowerCase().replaceAll(/[\\s-]+/g, \"_\") : \"\";\n}\n\nfunction dedupeTokens(values: Iterable<string>): string[] {\n const seen = new Set<string>();\n for (const value of values) {\n const token = normalizeStatusToken(value);\n if (token.length > 0) {\n seen.add(token);\n }\n }\n return [...seen].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Validates and normalizes raw add-status CLI input. Throws a plain Error with a\n * stable message when the id is missing/empty or a role is not one of\n * RUNTIME_STATUS_ROLE_VALUES; the CLI layer maps these to PmCliError exit codes.\n *\n * Omitted vs explicit-empty is preserved end-to-end: when `raw.roles`/`raw.aliases`\n * is `undefined` (flag not supplied) the normalized field is `undefined` so the\n * upsert leaves the existing value untouched; when supplied (even an empty array)\n * the field is normalized to an array so the upsert can apply an explicit clear.\n */\nexport function normalizeAddStatusInput(raw: RawAddStatusInput): NormalizedAddStatusInput {\n const id = normalizeStatusToken(raw.id);\n if (id.length === 0) {\n throw new Error(\"Status id must not be empty.\");\n }\n // Built-in lifecycle statuses are reserved and cannot be overridden: an\n // add-status override would change reserved metadata yet remove-status refuses\n // to delete a built-in id, leaving no CLI path to undo it. Reject up front,\n // symmetric with removeStatusDef.\n if (BUILTIN_STATUS_IDS.has(id)) {\n throw new Error(\n `Cannot add-status the built-in status \"${id}\". Built-in statuses are reserved: ${[...BUILTIN_STATUS_IDS].join(\", \")}.`,\n );\n }\n let roles: RuntimeStatusRole[] | undefined;\n if (raw.roles !== undefined) {\n roles = [];\n const seenRoles = new Set<string>();\n for (const rawRole of raw.roles) {\n const role = typeof rawRole === \"string\" ? rawRole.trim().toLowerCase() : \"\";\n if (role.length === 0) {\n continue;\n }\n if (!RUNTIME_STATUS_ROLE_SET.has(role)) {\n throw new Error(\n `Invalid status role \"${rawRole}\". Allowed roles: ${RUNTIME_STATUS_ROLE_VALUES.join(\", \")}.`,\n );\n }\n if (!seenRoles.has(role)) {\n seenRoles.add(role);\n roles.push(role as RuntimeStatusRole);\n }\n }\n }\n const aliases =\n raw.aliases === undefined ? undefined : dedupeTokens(raw.aliases).filter((alias) => alias !== id);\n const description = raw.description?.trim();\n const order =\n typeof raw.order === \"number\" && Number.isFinite(raw.order) ? Math.trunc(raw.order) : undefined;\n return {\n id,\n roles,\n aliases,\n description: description && description.length > 0 ? description : undefined,\n order,\n };\n}\n\nfunction selectStatusesArray(parsed: unknown): unknown[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed;\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.statuses)) {\n return record.statuses;\n }\n if (Array.isArray(record.definitions)) {\n return record.definitions;\n }\n return undefined;\n}\n\nfunction extractStatusDefinitions(parsed: unknown): RuntimeStatusDefinition[] {\n const candidate = selectStatusesArray(parsed);\n if (!candidate) {\n return [];\n }\n const definitions: RuntimeStatusDefinition[] = [];\n for (const entry of candidate) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n continue;\n }\n const record = entry as Record<string, unknown>;\n if (typeof record.id !== \"string\" || record.id.trim().length === 0) {\n continue;\n }\n definitions.push(record as unknown as RuntimeStatusDefinition);\n }\n return definitions;\n}\n\n/**\n * Coerces an arbitrary parsed value from statuses.json into a StatusDefsFile.\n * Accepts the canonical `{ statuses: [...] }` shape, a bare array of\n * definitions, or a `{ definitions: [...] }` form, and tolerates a\n * missing/invalid file by returning an empty statuses list.\n */\nexport function parseStatusDefsFile(raw: string | null | undefined): StatusDefsFile {\n if (raw === null || raw === undefined || raw.trim().length === 0) {\n return { statuses: [] };\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n throw new Error(\"schema/statuses.json contains invalid JSON.\");\n }\n return { statuses: extractStatusDefinitions(parsed) };\n}\n\n/**\n * Serializes the status definitions file with a trailing newline (matches the\n * rest of the schema scaffold files written by pm).\n */\nexport function serializeStatusDefsFile(file: StatusDefsFile): string {\n return `${JSON.stringify({ statuses: file.statuses }, null, 2)}\\n`;\n}\n\n/**\n * Idempotent UPSERT of a status definition into the parsed file. Matching is by\n * normalized id. When a definition already exists, fields supplied in `input`\n * override the previous values (roles/aliases replace when a non-empty array is\n * given, clear when an explicit empty array is given, and are left UNTOUCHED\n * when the field is `undefined` — i.e. the add-status flag was omitted);\n * description/order override when provided. Fields not addressed by add-status\n * flags are preserved untouched, so `add-status <id> --description x` keeps any\n * previously-set roles/aliases.\n */\nexport function upsertStatusDef(\n file: StatusDefsFile,\n input: NormalizedAddStatusInput,\n baseDefinition?: RuntimeStatusDefinition,\n): UpsertStatusDefResult {\n const statuses = file.statuses.slice();\n const existingIndex = statuses.findIndex(\n (definition) => normalizeStatusToken(definition.id) === input.id,\n );\n // A file-backed definition is the primary seed; when the status is not yet in\n // statuses.json fall back to `baseDefinition` (the resolved settings-backed\n // definition) so omitting --role/--alias preserves metadata that lives in\n // settings.schema.statuses rather than the file.\n const existing = existingIndex >= 0 ? statuses[existingIndex] : baseDefinition;\n\n const next: RuntimeStatusDefinition = {\n ...(existing ?? {}),\n id: input.id,\n };\n if (input.roles !== undefined) {\n if (input.roles.length > 0) {\n next.roles = [...input.roles];\n } else if (next.roles !== undefined) {\n delete next.roles;\n }\n }\n if (input.aliases !== undefined) {\n if (input.aliases.length > 0) {\n next.aliases = [...input.aliases];\n } else if (next.aliases !== undefined) {\n delete next.aliases;\n }\n }\n if (input.description !== undefined) {\n next.description = input.description;\n }\n if (input.order !== undefined) {\n next.order = input.order;\n }\n\n if (existingIndex >= 0) {\n statuses[existingIndex] = next;\n } else {\n statuses.push(next);\n }\n\n return {\n file: { statuses },\n definition: next,\n // \"replaced\" reflects whether the status already existed effectively (in the\n // file OR in resolved settings), so the CLI reports \"Updated\" vs \"Registered\"\n // correctly even when the prior definition lived only in settings.\n replaced: existing !== undefined,\n };\n}\n\n/**\n * Removes a status definition from the parsed file by id (normalized). Throws a\n * plain Error when `id` is empty or matches a reserved built-in default status\n * (those are never stored in the file and must never be deletable). Returns\n * `removed: false` when no matching definition exists so the CLI layer can treat\n * the call as an idempotent no-op.\n */\nexport function removeStatusDef(file: StatusDefsFile, id: string | undefined): RemoveStatusDefResult {\n const normalizedId = normalizeStatusToken(id);\n if (normalizedId.length === 0) {\n throw new Error(\"Status id must not be empty.\");\n }\n if (BUILTIN_STATUS_IDS.has(normalizedId)) {\n throw new Error(\n `Cannot remove built-in status \"${normalizedId}\". Built-in statuses are reserved: ${[...BUILTIN_STATUS_IDS].join(\", \")}.`,\n );\n }\n const statuses = file.statuses.slice();\n const existingIndex = statuses.findIndex(\n (definition) => normalizeStatusToken(definition.id) === normalizedId,\n );\n if (existingIndex < 0) {\n return { file: { statuses }, removed: false };\n }\n const [definition] = statuses.splice(existingIndex, 1);\n return { file: { statuses }, removed: true, definition };\n}\n\n/**\n * Throws when the new status id or any explicitly-supplied alias collides with a\n * DIFFERENT existing status's id/alias. `resolvedAliasToId` maps a normalized\n * token to its owning status id (the runtime status registry's alias_to_id map,\n * which stores ids and aliases in one namespace). Re-adding the same status\n * (matching id) is allowed — only cross-status collisions throw. This prevents a\n * custom status from shadowing a built-in lifecycle token (for example\n * `add-status review --alias open`, or a custom id `cancelled` that aliases the\n * built-in `canceled`), which would make `pm update --status open` resolve to the\n * wrong status. The CLI layer maps the thrown Error to a USAGE exit code.\n */\nexport function assertStatusTokensAvailable(\n input: { id: string; aliases?: string[] },\n resolvedAliasToId: ReadonlyMap<string, string>,\n): void {\n const candidates = [input.id, ...(input.aliases ?? [])];\n for (const candidate of candidates) {\n const token = normalizeStatusToken(candidate);\n if (token.length === 0) {\n continue;\n }\n const owner = resolvedAliasToId.get(token);\n if (owner !== undefined && owner !== input.id) {\n throw new Error(\n `Status token \"${token}\" already belongs to status \"${owner}\". Choose a different id/alias to avoid shadowing it.`,\n );\n }\n }\n}\n","/**\n * @module core/schema/fields-file\n *\n * Resolves configurable schema, fields, statuses, and workflows for Fields File.\n */\nimport {\n RUNTIME_FIELD_COMMAND_VALUES,\n RUNTIME_FIELD_TYPE_VALUES,\n} from \"../../types/index.js\";\nimport type { RuntimeFieldCommand, RuntimeFieldDefinition, RuntimeFieldType } from \"../../types/index.js\";\n\nexport type { RuntimeFieldCommand, RuntimeFieldDefinition, RuntimeFieldType } from \"../../types/index.js\";\n\n/**\n * Pure logic for the `pm schema add-field` / `pm schema remove-field` commands\n * and the `list-fields` / `show-field` inspectors. The CLI command file\n * (schema.ts) owns IO/governance; everything testable and side-effect-free lives\n * here so it can be coverage-gated to 100%.\n *\n * Custom fields persist at `.agents/pm/schema/fields.json` under the shape\n * `{ fields: RuntimeFieldDefinition[] }`. The runtime merge layer\n * (loadRuntimeSchemaFromOptionalFiles) reads that file and dynamically registers\n * a CLI flag per field on create/update/list/search/context, so this module only\n * has to manage the persisted entries; it never duplicates the registration.\n */\n\nconst RUNTIME_FIELD_TYPE_SET = new Set<string>(RUNTIME_FIELD_TYPE_VALUES);\nconst RUNTIME_FIELD_COMMAND_SET = new Set<string>(RUNTIME_FIELD_COMMAND_VALUES);\n\n/**\n * Built-in front-matter field names a custom field key must never shadow. A\n * custom key that collides with one of these would let `pm create --<key>` write\n * over reserved metadata, so add-field rejects them up front (symmetric with the\n * built-in-type guard in item-types-file.ts).\n */\nexport const BUILTIN_FIELD_KEYS: ReadonlySet<string> = new Set([\n \"id\",\n \"title\",\n \"type\",\n \"status\",\n \"priority\",\n \"tags\",\n \"assignee\",\n \"parent\",\n \"description\",\n \"body\",\n \"created_at\",\n \"updated_at\",\n \"closed_at\",\n \"author\",\n \"deadline\",\n \"estimate\",\n \"sprint\",\n \"release\",\n \"risk\",\n \"confidence\",\n \"reviewer\",\n \"resolution\",\n \"expected\",\n \"actual\",\n]);\n\n/**\n * The default commands a field is wired onto when `--commands` is omitted,\n * matching the runtime default in runtime-schema.ts (normalizeRuntimeFieldDefinition).\n */\nconst DEFAULT_FIELD_COMMANDS: RuntimeFieldCommand[] = [\"create\", \"update\"];\n\n/**\n * The shape persisted at `.agents/pm/schema/fields.json`.\n */\nexport interface FieldsFile {\n fields: RuntimeFieldDefinition[];\n}\n\n/**\n * Documents the raw add field input payload exchanged by command, SDK, and package integrations.\n */\nexport interface RawAddFieldInput {\n key: string | undefined;\n type?: string;\n commands?: string[];\n description?: string;\n cliFlag?: string;\n aliases?: string[];\n required?: boolean;\n requiredOnCreate?: boolean;\n allowUnset?: boolean;\n requiredTypes?: string[];\n}\n\n/**\n * Documents the normalized add field input payload exchanged by command, SDK, and package integrations.\n */\nexport interface NormalizedAddFieldInput {\n key: string;\n type: RuntimeFieldType;\n commands: RuntimeFieldCommand[];\n description?: string;\n cliFlag?: string;\n cliAliases: string[];\n required: boolean;\n requiredOnCreate: boolean;\n allowUnset: boolean;\n requiredTypes: string[];\n}\n\n/**\n * Documents the upsert field result payload exchanged by command, SDK, and package integrations.\n */\nexport interface UpsertFieldResult {\n file: FieldsFile;\n /** The definition as stored after the upsert. */\n definition: RuntimeFieldDefinition;\n /** True when an existing definition with the same (normalized) key was replaced. */\n replaced: boolean;\n}\n\n/**\n * Documents the remove field result payload exchanged by command, SDK, and package integrations.\n */\nexport interface RemoveFieldResult {\n file: FieldsFile;\n /** True when a matching definition existed and was dropped from the file. */\n removed: boolean;\n /** The removed definition, when one matched the requested key. */\n definition?: RuntimeFieldDefinition;\n}\n\n/**\n * Normalizes a field key using the same rule as runtime-schema.ts: lowercase and\n * collapse any run of whitespace/hyphens into a single underscore.\n */\nexport function normalizeFieldKey(value: unknown): string {\n return typeof value === \"string\" ? value.trim().toLowerCase().replaceAll(/[\\s-]+/g, \"_\") : \"\";\n}\n\n/**\n * Normalizes a CLI flag token: strip a leading `--`, lowercase, and collapse\n * whitespace/underscore runs to a single hyphen (matches normalizeCliToken in\n * runtime-schema.ts).\n */\nfunction normalizeCliToken(value: unknown): string {\n if (typeof value !== \"string\") {\n return \"\";\n }\n const collapsed = value.trim().toLowerCase().replaceAll(/[\\s_]+/g, \"-\");\n return collapsed.startsWith(\"--\") ? collapsed.slice(2) : collapsed;\n}\n\nfunction keyToDefaultCliFlag(key: string): string {\n return key.replaceAll(\"_\", \"-\");\n}\n\nfunction dedupeCliTokens(values: Iterable<string>, exclude: string): string[] {\n const seen = new Set<string>();\n for (const value of values) {\n const token = normalizeCliToken(value);\n if (token.length > 0 && token !== exclude) {\n seen.add(token);\n }\n }\n return [...seen].sort((left, right) => left.localeCompare(right));\n}\n\nfunction dedupeStringList(values: string[] | undefined): string[] {\n const seen = new Set<string>();\n for (const value of values ?? []) {\n const trimmed = value.trim();\n if (trimmed.length > 0) {\n seen.add(trimmed);\n }\n }\n return [...seen].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Validates and normalizes raw add-field CLI input. Throws a plain Error with a\n * stable message when the key is missing/empty, collides with a built-in field,\n * or carries an invalid type/command; the CLI layer maps these to PmCliError\n * exit codes. A `string_array` type implies a repeatable field downstream\n * (runtime-schema.ts derives `repeatable`), so no separate repeatable flag is\n * exposed.\n */\nexport function normalizeAddFieldInput(raw: RawAddFieldInput): NormalizedAddFieldInput {\n const key = normalizeFieldKey(raw.key);\n if (key.length === 0) {\n throw new Error(\"Field key must not be empty.\");\n }\n if (BUILTIN_FIELD_KEYS.has(key)) {\n throw new Error(\n `Cannot define custom field \"${key}\": it shadows a built-in field. Built-in fields are reserved.`,\n );\n }\n\n const typeCandidate = typeof raw.type === \"string\" && raw.type.trim().length > 0 ? raw.type.trim().toLowerCase() : \"string\";\n if (!RUNTIME_FIELD_TYPE_SET.has(typeCandidate)) {\n throw new Error(`Invalid field type \"${raw.type}\". Allowed: ${RUNTIME_FIELD_TYPE_VALUES.join(\", \")}.`);\n }\n const type = typeCandidate as RuntimeFieldType;\n\n let commands: RuntimeFieldCommand[];\n if (raw.commands === undefined) {\n commands = [...DEFAULT_FIELD_COMMANDS];\n } else {\n const seen = new Set<string>();\n const normalized: RuntimeFieldCommand[] = [];\n for (const rawCommand of raw.commands) {\n const command = rawCommand.trim().toLowerCase();\n if (command.length === 0) {\n continue;\n }\n if (!RUNTIME_FIELD_COMMAND_SET.has(command)) {\n throw new Error(`Invalid field command \"${rawCommand}\". Allowed: ${RUNTIME_FIELD_COMMAND_VALUES.join(\", \")}.`);\n }\n if (!seen.has(command)) {\n seen.add(command);\n normalized.push(command as RuntimeFieldCommand);\n }\n }\n commands = normalized.length > 0 ? normalized : [...DEFAULT_FIELD_COMMANDS];\n }\n\n const cliFlagToken = normalizeCliToken(raw.cliFlag);\n const cliFlag = cliFlagToken.length > 0 && cliFlagToken !== keyToDefaultCliFlag(key) ? cliFlagToken : undefined;\n const effectiveFlag = cliFlag ?? keyToDefaultCliFlag(key);\n const cliAliases = dedupeCliTokens(raw.aliases ?? [], effectiveFlag);\n\n const description = raw.description?.trim();\n return {\n key,\n type,\n commands,\n description: description && description.length > 0 ? description : undefined,\n cliFlag,\n cliAliases,\n required: raw.required === true,\n requiredOnCreate: raw.requiredOnCreate === true,\n // allow_unset defaults to true (omitted) and is only persisted when an\n // operator explicitly disables it with --no-allow-unset (allowUnset === false).\n allowUnset: raw.allowUnset !== false,\n requiredTypes: dedupeStringList(raw.requiredTypes),\n };\n}\n\nfunction selectFieldsArray(parsed: unknown): unknown[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed;\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.fields)) {\n return record.fields;\n }\n if (Array.isArray(record.definitions)) {\n return record.definitions;\n }\n return undefined;\n}\n\nfunction extractFieldDefinitions(parsed: unknown): RuntimeFieldDefinition[] {\n const candidate = selectFieldsArray(parsed);\n if (!candidate) {\n return [];\n }\n const definitions: RuntimeFieldDefinition[] = [];\n for (const entry of candidate) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n continue;\n }\n const record = entry as Record<string, unknown>;\n if (typeof record.key !== \"string\" || record.key.trim().length === 0) {\n continue;\n }\n definitions.push(record as unknown as RuntimeFieldDefinition);\n }\n return definitions;\n}\n\n/**\n * Coerces an arbitrary parsed value from fields.json into a FieldsFile. Accepts\n * the canonical `{ fields: [...] }` shape, a bare array, or a `{ definitions: [...] }`\n * form, and tolerates a missing/invalid file by returning an empty fields list.\n */\nexport function parseFieldsFile(raw: string | null | undefined): FieldsFile {\n if (raw === null || raw === undefined || raw.trim().length === 0) {\n return { fields: [] };\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n throw new Error(\"schema/fields.json contains invalid JSON.\");\n }\n return { fields: extractFieldDefinitions(parsed) };\n}\n\n/**\n * Serializes the fields file with a trailing newline (matches the rest of the\n * schema scaffold files written by pm).\n */\nexport function serializeFieldsFile(file: FieldsFile): string {\n return `${JSON.stringify({ fields: file.fields }, null, 2)}\\n`;\n}\n\n/**\n * Idempotent UPSERT of a custom field into the parsed file. Matching is by\n * normalized key. When a definition already exists, the supplied input fully\n * replaces its add-field-managed attributes (type/commands/description/flags/\n * required flags) while preserving any unrelated keys the file may carry; any\n * `metadata_key` already stored is preserved so existing item data keeps mapping\n * to the same front-matter column.\n */\nexport function upsertField(file: FieldsFile, input: NormalizedAddFieldInput): UpsertFieldResult {\n // Match by normalized key. A hand-authored file may carry more than one entry\n // for the same key, so drop ALL matches and re-insert a single merged result\n // (collapsing duplicates) rather than only rewriting the first occurrence. The\n // first existing match seeds preserved attributes (e.g. metadata_key).\n const existing = file.fields.find((definition) => normalizeFieldKey(definition.key) === input.key);\n const replaced = existing !== undefined;\n const fields = file.fields.filter((definition) => normalizeFieldKey(definition.key) !== input.key);\n\n const next: RuntimeFieldDefinition = {\n ...(existing ?? {}),\n key: input.key,\n type: input.type,\n commands: [...input.commands],\n };\n applyOptionalString(next, \"description\", input.description);\n applyOptionalString(next, \"cli_flag\", input.cliFlag);\n if (input.cliAliases.length > 0) {\n next.cli_aliases = [...input.cliAliases];\n } else {\n delete next.cli_aliases;\n }\n applyBooleanFlag(next, \"required\", input.required);\n applyBooleanFlag(next, \"required_on_create\", input.requiredOnCreate);\n // allow_unset defaults true; only persist the explicit false override.\n if (input.allowUnset === false) {\n next.allow_unset = false;\n } else {\n delete next.allow_unset;\n }\n if (input.requiredTypes.length > 0) {\n next.required_types = [...input.requiredTypes];\n } else {\n delete next.required_types;\n }\n\n fields.push(next);\n fields.sort((left, right) => normalizeFieldKey(left.key).localeCompare(normalizeFieldKey(right.key)));\n\n return {\n file: { fields },\n definition: next,\n replaced,\n };\n}\n\n/**\n * Removes a custom field definition from the parsed file by key (normalized).\n * Throws a plain Error when `key` is empty. Returns `removed: false` when no\n * matching definition exists so the CLI layer can treat the call as an\n * idempotent no-op.\n */\nexport function removeField(file: FieldsFile, key: string | undefined): RemoveFieldResult {\n const normalizedKey = normalizeFieldKey(key);\n if (normalizedKey.length === 0) {\n throw new Error(\"Field key must not be empty.\");\n }\n // Remove ALL matches (a hand-authored file may carry duplicate entries for the\n // same normalized key) so no stale duplicate survives the removal.\n const removed: RuntimeFieldDefinition[] = [];\n const fields = file.fields.filter((definition) => {\n if (normalizeFieldKey(definition.key) === normalizedKey) {\n removed.push(definition);\n return false;\n }\n return true;\n });\n if (removed.length === 0) {\n return { file: { fields }, removed: false };\n }\n return { file: { fields }, removed: true, definition: removed[0] };\n}\n\nfunction applyOptionalString(definition: RuntimeFieldDefinition, key: string, value: string | undefined): void {\n const record = definition as unknown as Record<string, unknown>;\n if (value !== undefined && value.length > 0) {\n record[key] = value;\n } else {\n delete record[key];\n }\n}\n\nfunction applyBooleanFlag(definition: RuntimeFieldDefinition, key: string, value: boolean): void {\n const record = definition as unknown as Record<string, unknown>;\n if (value) {\n record[key] = true;\n } else {\n delete record[key];\n }\n}\n","/**\n * @module core/schema/type-inference\n *\n * Resolves configurable schema, fields, statuses, and workflows for Type Inference.\n */\nimport { matchBuiltinTypeName } from \"./item-types-file.js\";\n\n/**\n * Pure logic for `pm schema add-type --infer`: scan existing item titles for\n * stable `PREFIX-`/`PREFIX:` conventions and propose them as custom item types.\n * The CLI command file (schema.ts) owns IO and the optional registration; this\n * module only derives candidates from a list of titles so it is fully testable\n * and coverage-gated to 100%.\n *\n * Conventions recognized (case-insensitive, first run wins per title):\n * - `INFRA- ...` / `SECURITY-...` (hyphen-delimited prefix)\n * - `BUG: ...` / `SPIKE: ...` (colon-delimited prefix)\n * The prefix token must be a letter-led identifier of letters, digits, and\n * internal hyphens/underscores so it maps cleanly to a single PascalCase type\n * name. Purely numeric or sequence-style prefixes (e.g. `S001-`, `E12-`) are\n * intentionally skipped: they index items, they are not type boundaries.\n */\n\nconst PREFIX_PATTERN = /^([A-Za-z][A-Za-z0-9_-]*?)\\s*[-:]\\s+\\S/;\n\n/**\n * Documents the inferred type candidate payload exchanged by command, SDK, and package integrations.\n */\nexport interface InferredTypeCandidate {\n /** Suggested PascalCase type name derived from the prefix. */\n name: string;\n /** The normalized prefix token (lowercase) the items share. */\n prefix: string;\n /** How many scanned titles carry this prefix. */\n count: number;\n /** A few example titles (capped) for human/agent review. */\n examples: string[];\n /** True when `name` already resolves to a reserved built-in type. */\n shadows_builtin: boolean;\n}\n\n/**\n * Documents the infer types options payload exchanged by command, SDK, and package integrations.\n */\nexport interface InferTypesOptions {\n /** Minimum number of titles that must share a prefix to surface it (default 10). */\n minCount?: number;\n /** Maximum example titles retained per candidate (default 3). */\n maxExamples?: number;\n}\n\n/**\n * Extracts the leading prefix token from a title, or undefined when the title has\n * no stable letter-led `PREFIX-`/`PREFIX:` convention.\n */\nexport function extractTitlePrefix(title: string): string | undefined {\n const match = PREFIX_PATTERN.exec(title.trim());\n if (!match) {\n return undefined;\n }\n const token = match[1];\n // Reject single-character prefixes (e.g. \"S-\", \"E-\"): they are sequence/index\n // markers far more often than genuine type boundaries.\n if (token.length < 2) {\n return undefined;\n }\n // Reject sequence/index-style prefixes — a single leading letter followed by\n // only digits (e.g. \"S001-\", \"E12-\", \"V1-\"). These index items rather than\n // mark a type boundary, matching the convention documented above.\n if (/^[A-Za-z]\\d+$/.test(token)) {\n return undefined;\n }\n return token.toLowerCase();\n}\n\n/**\n * Converts a normalized prefix token into a PascalCase type name. Internal\n * hyphen/underscore runs become word boundaries; each word is capitalized.\n */\nexport function prefixToTypeName(prefix: string): string {\n return prefix\n .split(/[-_]+/)\n .filter((segment) => segment.length > 0)\n .map((segment) => `${segment.slice(0, 1).toUpperCase()}${segment.slice(1).toLowerCase()}`)\n .join(\"\");\n}\n\n/**\n * Scans titles for shared prefix conventions and returns candidate custom types,\n * sorted by descending frequency then name. Only prefixes carried by at least\n * `minCount` titles are returned.\n */\nexport function inferTypesFromTitles(titles: string[], options: InferTypesOptions = {}): InferredTypeCandidate[] {\n const minCount = typeof options.minCount === \"number\" && options.minCount > 0 ? Math.trunc(options.minCount) : 10;\n const maxExamples = typeof options.maxExamples === \"number\" && options.maxExamples > 0 ? Math.trunc(options.maxExamples) : 3;\n const byPrefix = new Map<string, { count: number; examples: string[] }>();\n for (const rawTitle of titles) {\n const title = typeof rawTitle === \"string\" ? rawTitle.trim() : \"\";\n if (title.length === 0) {\n continue;\n }\n const prefix = extractTitlePrefix(title);\n if (prefix === undefined) {\n continue;\n }\n const bucket = byPrefix.get(prefix) ?? { count: 0, examples: [] };\n bucket.count += 1;\n if (bucket.examples.length < maxExamples) {\n bucket.examples.push(title);\n }\n byPrefix.set(prefix, bucket);\n }\n const candidates: InferredTypeCandidate[] = [];\n for (const [prefix, bucket] of byPrefix.entries()) {\n if (bucket.count < minCount) {\n continue;\n }\n const name = prefixToTypeName(prefix);\n candidates.push({\n name,\n prefix,\n count: bucket.count,\n examples: bucket.examples,\n shadows_builtin: matchBuiltinTypeName(name) !== undefined,\n });\n }\n candidates.sort((left, right) => (right.count - left.count) || left.name.localeCompare(right.name));\n return candidates;\n}\n"],"names":["definition"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,UAAU;AACjB,SAAS,aAAa;;;ACiBtB,IAAM,0BAA0B,IAAI,IAAY,0BAA0B;AASnE,IAAM,qBAA0C,IAAI,IACzD,mCAAmC,IAAI,CAAC,eAAe,qBAAqB,WAAW,EAAE,CAAC,EAAE,OAC1F,CAAC,OAAO,GAAG,SAAS,CAAC,CACtB;AAiEG,SAAU,qBAAqB,OAAc;AACjD,SAAO,OAAO,UAAU,WAAW,MAAM,KAAI,EAAG,YAAW,EAAG,WAAW,WAAW,GAAG,IAAI;AAC7F;AAEA,SAAS,aAAa,QAAwB;AAC5C,QAAM,OAAO,oBAAI,IAAG;AACpB,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,qBAAqB,KAAK;AACxC,QAAI,MAAM,SAAS,GAAG;AACpB,WAAK,IAAI,KAAK;IAChB;EACF;AACA,SAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;AAClE;AAYM,SAAU,wBAAwB,KAAsB;AAC5D,QAAM,KAAK,qBAAqB,IAAI,EAAE;AACtC,MAAI,GAAG,WAAW,GAAG;AACnB,UAAM,IAAI,MAAM,8BAA8B;EAChD;AAKA,MAAI,mBAAmB,IAAI,EAAE,GAAG;AAC9B,UAAM,IAAI,MACR,0CAA0C,EAAE,sCAAsC,CAAC,GAAG,kBAAkB,EAAE,KAAK,IAAI,CAAC,GAAG;EAE3H;AACA,MAAI;AACJ,MAAI,IAAI,UAAU,QAAW;AAC3B,YAAQ,CAAA;AACR,UAAM,YAAY,oBAAI,IAAG;AACzB,eAAW,WAAW,IAAI,OAAO;AAC/B,YAAM,OAAO,OAAO,YAAY,WAAW,QAAQ,KAAI,EAAG,YAAW,IAAK;AAC1E,UAAI,KAAK,WAAW,GAAG;AACrB;MACF;AACA,UAAI,CAAC,wBAAwB,IAAI,IAAI,GAAG;AACtC,cAAM,IAAI,MACR,wBAAwB,OAAO,qBAAqB,2BAA2B,KAAK,IAAI,CAAC,GAAG;MAEhG;AACA,UAAI,CAAC,UAAU,IAAI,IAAI,GAAG;AACxB,kBAAU,IAAI,IAAI;AAClB,cAAM,KAAK,IAAyB;MACtC;IACF;EACF;AACA,QAAM,UACJ,IAAI,YAAY,SAAY,SAAY,aAAa,IAAI,OAAO,EAAE,OAAO,CAAC,UAAU,UAAU,EAAE;AAClG,QAAM,cAAc,IAAI,aAAa,KAAI;AACzC,QAAM,QACJ,OAAO,IAAI,UAAU,YAAY,OAAO,SAAS,IAAI,KAAK,IAAI,KAAK,MAAM,IAAI,KAAK,IAAI;AACxF,SAAO;IACL;IACA;IACA;IACA,aAAa,eAAe,YAAY,SAAS,IAAI,cAAc;IACnE;;AAEJ;AAEA,SAAS,oBAAoB,QAAe;AAC1C,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO;EACT;AACA,MAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,WAAO;EACT;AACA,QAAM,SAAS;AACf,MAAI,MAAM,QAAQ,OAAO,QAAQ,GAAG;AAClC,WAAO,OAAO;EAChB;AACA,MAAI,MAAM,QAAQ,OAAO,WAAW,GAAG;AACrC,WAAO,OAAO;EAChB;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,QAAe;AAC/C,QAAM,YAAY,oBAAoB,MAAM;AAC5C,MAAI,CAAC,WAAW;AACd,WAAO,CAAA;EACT;AACA,QAAM,cAAyC,CAAA;AAC/C,aAAW,SAAS,WAAW;AAC7B,QAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACvE;IACF;AACA,UAAM,SAAS;AACf,QAAI,OAAO,OAAO,OAAO,YAAY,OAAO,GAAG,KAAI,EAAG,WAAW,GAAG;AAClE;IACF;AACA,gBAAY,KAAK,MAA4C;EAC/D;AACA,SAAO;AACT;AAQM,SAAU,oBAAoB,KAA8B;AAChE,MAAI,QAAQ,QAAQ,QAAQ,UAAa,IAAI,KAAI,EAAG,WAAW,GAAG;AAChE,WAAO,EAAE,UAAU,CAAA,EAAE;EACvB;AACA,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,GAAG;EACzB,QAAQ;AACN,UAAM,IAAI,MAAM,6CAA6C;EAC/D;AACA,SAAO,EAAE,UAAU,yBAAyB,MAAM,EAAC;AACrD;AAMM,SAAU,wBAAwB,MAAoB;AAC1D,SAAO,GAAG,KAAK,UAAU,EAAE,UAAU,KAAK,SAAQ,GAAI,MAAM,CAAC,CAAC;;AAChE;AAYM,SAAU,gBACd,MACA,OACA,gBAAwC;AAExC,QAAM,WAAW,KAAK,SAAS,MAAK;AACpC,QAAM,gBAAgB,SAAS,UAC7B,CAAC,eAAe,qBAAqB,WAAW,EAAE,MAAM,MAAM,EAAE;AAMlE,QAAM,WAAW,iBAAiB,IAAI,SAAS,aAAa,IAAI;AAEhE,QAAM,OAAgC;IACpC,GAAI,YAAY,CAAA;IAChB,IAAI,MAAM;;AAEZ,MAAI,MAAM,UAAU,QAAW;AAC7B,QAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,WAAK,QAAQ,CAAC,GAAG,MAAM,KAAK;IAC9B,WAAW,KAAK,UAAU,QAAW;AACnC,aAAO,KAAK;IACd;EACF;AACA,MAAI,MAAM,YAAY,QAAW;AAC/B,QAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,WAAK,UAAU,CAAC,GAAG,MAAM,OAAO;IAClC,WAAW,KAAK,YAAY,QAAW;AACrC,aAAO,KAAK;IACd;EACF;AACA,MAAI,MAAM,gBAAgB,QAAW;AACnC,SAAK,cAAc,MAAM;EAC3B;AACA,MAAI,MAAM,UAAU,QAAW;AAC7B,SAAK,QAAQ,MAAM;EACrB;AAEA,MAAI,iBAAiB,GAAG;AACtB,aAAS,aAAa,IAAI;EAC5B,OAAO;AACL,aAAS,KAAK,IAAI;EACpB;AAEA,SAAO;IACL,MAAM,EAAE,SAAQ;IAChB,YAAY;;;;IAIZ,UAAU,aAAa;;AAE3B;AASM,SAAU,gBAAgB,MAAsB,IAAsB;AAC1E,QAAM,eAAe,qBAAqB,EAAE;AAC5C,MAAI,aAAa,WAAW,GAAG;AAC7B,UAAM,IAAI,MAAM,8BAA8B;EAChD;AACA,MAAI,mBAAmB,IAAI,YAAY,GAAG;AACxC,UAAM,IAAI,MACR,kCAAkC,YAAY,sCAAsC,CAAC,GAAG,kBAAkB,EAAE,KAAK,IAAI,CAAC,GAAG;EAE7H;AACA,QAAM,WAAW,KAAK,SAAS,MAAK;AACpC,QAAM,gBAAgB,SAAS,UAC7B,CAACA,gBAAe,qBAAqBA,YAAW,EAAE,MAAM,YAAY;AAEtE,MAAI,gBAAgB,GAAG;AACrB,WAAO,EAAE,MAAM,EAAE,SAAQ,GAAI,SAAS,MAAK;EAC7C;AACA,QAAM,CAAC,UAAU,IAAI,SAAS,OAAO,eAAe,CAAC;AACrD,SAAO,EAAE,MAAM,EAAE,SAAQ,GAAI,SAAS,MAAM,WAAU;AACxD;AAaM,SAAU,4BACd,OACA,mBAA8C;AAE9C,QAAM,aAAa,CAAC,MAAM,IAAI,GAAI,MAAM,WAAW,CAAA,CAAG;AACtD,aAAW,aAAa,YAAY;AAClC,UAAM,QAAQ,qBAAqB,SAAS;AAC5C,QAAI,MAAM,WAAW,GAAG;AACtB;IACF;AACA,UAAM,QAAQ,kBAAkB,IAAI,KAAK;AACzC,QAAI,UAAU,UAAa,UAAU,MAAM,IAAI;AAC7C,YAAM,IAAI,MACR,iBAAiB,KAAK,gCAAgC,KAAK,uDAAuD;IAEtH;EACF;AACF;;;AC5UA,IAAM,yBAAyB,IAAI,IAAY,yBAAyB;AACxE,IAAM,4BAA4B,IAAI,IAAY,4BAA4B;AAQvE,IAAM,qBAA0C,oBAAI,IAAI;EAC7D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD;AAMD,IAAM,yBAAgD,CAAC,UAAU,QAAQ;AAmEnE,SAAU,kBAAkB,OAAc;AAC9C,SAAO,OAAO,UAAU,WAAW,MAAM,KAAI,EAAG,YAAW,EAAG,WAAW,WAAW,GAAG,IAAI;AAC7F;AAOA,SAAS,kBAAkB,OAAc;AACvC,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;EACT;AACA,QAAM,YAAY,MAAM,KAAI,EAAG,YAAW,EAAG,WAAW,WAAW,GAAG;AACtE,SAAO,UAAU,WAAW,IAAI,IAAI,UAAU,MAAM,CAAC,IAAI;AAC3D;AAEA,SAAS,oBAAoB,KAAW;AACtC,SAAO,IAAI,WAAW,KAAK,GAAG;AAChC;AAEA,SAAS,gBAAgB,QAA0B,SAAe;AAChE,QAAM,OAAO,oBAAI,IAAG;AACpB,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,kBAAkB,KAAK;AACrC,QAAI,MAAM,SAAS,KAAK,UAAU,SAAS;AACzC,WAAK,IAAI,KAAK;IAChB;EACF;AACA,SAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;AAClE;AAEA,SAAS,iBAAiB,QAA4B;AACpD,QAAM,OAAO,oBAAI,IAAG;AACpB,aAAW,SAAS,UAAU,CAAA,GAAI;AAChC,UAAM,UAAU,MAAM,KAAI;AAC1B,QAAI,QAAQ,SAAS,GAAG;AACtB,WAAK,IAAI,OAAO;IAClB;EACF;AACA,SAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;AAClE;AAUM,SAAU,uBAAuB,KAAqB;AAC1D,QAAM,MAAM,kBAAkB,IAAI,GAAG;AACrC,MAAI,IAAI,WAAW,GAAG;AACpB,UAAM,IAAI,MAAM,8BAA8B;EAChD;AACA,MAAI,mBAAmB,IAAI,GAAG,GAAG;AAC/B,UAAM,IAAI,MACR,+BAA+B,GAAG,+DAA+D;EAErG;AAEA,QAAM,gBAAgB,OAAO,IAAI,SAAS,YAAY,IAAI,KAAK,KAAI,EAAG,SAAS,IAAI,IAAI,KAAK,KAAI,EAAG,YAAW,IAAK;AACnH,MAAI,CAAC,uBAAuB,IAAI,aAAa,GAAG;AAC9C,UAAM,IAAI,MAAM,uBAAuB,IAAI,IAAI,eAAe,0BAA0B,KAAK,IAAI,CAAC,GAAG;EACvG;AACA,QAAM,OAAO;AAEb,MAAI;AACJ,MAAI,IAAI,aAAa,QAAW;AAC9B,eAAW,CAAC,GAAG,sBAAsB;EACvC,OAAO;AACL,UAAM,OAAO,oBAAI,IAAG;AACpB,UAAM,aAAoC,CAAA;AAC1C,eAAW,cAAc,IAAI,UAAU;AACrC,YAAM,UAAU,WAAW,KAAI,EAAG,YAAW;AAC7C,UAAI,QAAQ,WAAW,GAAG;AACxB;MACF;AACA,UAAI,CAAC,0BAA0B,IAAI,OAAO,GAAG;AAC3C,cAAM,IAAI,MAAM,0BAA0B,UAAU,eAAe,6BAA6B,KAAK,IAAI,CAAC,GAAG;MAC/G;AACA,UAAI,CAAC,KAAK,IAAI,OAAO,GAAG;AACtB,aAAK,IAAI,OAAO;AAChB,mBAAW,KAAK,OAA8B;MAChD;IACF;AACA,eAAW,WAAW,SAAS,IAAI,aAAa,CAAC,GAAG,sBAAsB;EAC5E;AAEA,QAAM,eAAe,kBAAkB,IAAI,OAAO;AAClD,QAAM,UAAU,aAAa,SAAS,KAAK,iBAAiB,oBAAoB,GAAG,IAAI,eAAe;AACtG,QAAM,gBAAgB,WAAW,oBAAoB,GAAG;AACxD,QAAM,aAAa,gBAAgB,IAAI,WAAW,CAAA,GAAI,aAAa;AAEnE,QAAM,cAAc,IAAI,aAAa,KAAI;AACzC,SAAO;IACL;IACA;IACA;IACA,aAAa,eAAe,YAAY,SAAS,IAAI,cAAc;IACnE;IACA;IACA,UAAU,IAAI,aAAa;IAC3B,kBAAkB,IAAI,qBAAqB;;;IAG3C,YAAY,IAAI,eAAe;IAC/B,eAAe,iBAAiB,IAAI,aAAa;;AAErD;AAEA,SAAS,kBAAkB,QAAe;AACxC,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO;EACT;AACA,MAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,WAAO;EACT;AACA,QAAM,SAAS;AACf,MAAI,MAAM,QAAQ,OAAO,MAAM,GAAG;AAChC,WAAO,OAAO;EAChB;AACA,MAAI,MAAM,QAAQ,OAAO,WAAW,GAAG;AACrC,WAAO,OAAO;EAChB;AACA,SAAO;AACT;AAEA,SAAS,wBAAwB,QAAe;AAC9C,QAAM,YAAY,kBAAkB,MAAM;AAC1C,MAAI,CAAC,WAAW;AACd,WAAO,CAAA;EACT;AACA,QAAM,cAAwC,CAAA;AAC9C,aAAW,SAAS,WAAW;AAC7B,QAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACvE;IACF;AACA,UAAM,SAAS;AACf,QAAI,OAAO,OAAO,QAAQ,YAAY,OAAO,IAAI,KAAI,EAAG,WAAW,GAAG;AACpE;IACF;AACA,gBAAY,KAAK,MAA2C;EAC9D;AACA,SAAO;AACT;AAOM,SAAU,gBAAgB,KAA8B;AAC5D,MAAI,QAAQ,QAAQ,QAAQ,UAAa,IAAI,KAAI,EAAG,WAAW,GAAG;AAChE,WAAO,EAAE,QAAQ,CAAA,EAAE;EACrB;AACA,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,GAAG;EACzB,QAAQ;AACN,UAAM,IAAI,MAAM,2CAA2C;EAC7D;AACA,SAAO,EAAE,QAAQ,wBAAwB,MAAM,EAAC;AAClD;AAMM,SAAU,oBAAoB,MAAgB;AAClD,SAAO,GAAG,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAM,GAAI,MAAM,CAAC,CAAC;;AAC5D;AAUM,SAAU,YAAY,MAAkB,OAA8B;AAK1E,QAAM,WAAW,KAAK,OAAO,KAAK,CAAC,eAAe,kBAAkB,WAAW,GAAG,MAAM,MAAM,GAAG;AACjG,QAAM,WAAW,aAAa;AAC9B,QAAM,SAAS,KAAK,OAAO,OAAO,CAAC,eAAe,kBAAkB,WAAW,GAAG,MAAM,MAAM,GAAG;AAEjG,QAAM,OAA+B;IACnC,GAAI,YAAY,CAAA;IAChB,KAAK,MAAM;IACX,MAAM,MAAM;IACZ,UAAU,CAAC,GAAG,MAAM,QAAQ;;AAE9B,sBAAoB,MAAM,eAAe,MAAM,WAAW;AAC1D,sBAAoB,MAAM,YAAY,MAAM,OAAO;AACnD,MAAI,MAAM,WAAW,SAAS,GAAG;AAC/B,SAAK,cAAc,CAAC,GAAG,MAAM,UAAU;EACzC,OAAO;AACL,WAAO,KAAK;EACd;AACA,mBAAiB,MAAM,YAAY,MAAM,QAAQ;AACjD,mBAAiB,MAAM,sBAAsB,MAAM,gBAAgB;AAEnE,MAAI,MAAM,eAAe,OAAO;AAC9B,SAAK,cAAc;EACrB,OAAO;AACL,WAAO,KAAK;EACd;AACA,MAAI,MAAM,cAAc,SAAS,GAAG;AAClC,SAAK,iBAAiB,CAAC,GAAG,MAAM,aAAa;EAC/C,OAAO;AACL,WAAO,KAAK;EACd;AAEA,SAAO,KAAK,IAAI;AAChB,SAAO,KAAK,CAAC,MAAM,UAAU,kBAAkB,KAAK,GAAG,EAAE,cAAc,kBAAkB,MAAM,GAAG,CAAC,CAAC;AAEpG,SAAO;IACL,MAAM,EAAE,OAAM;IACd,YAAY;IACZ;;AAEJ;AAQM,SAAU,YAAY,MAAkB,KAAuB;AACnE,QAAM,gBAAgB,kBAAkB,GAAG;AAC3C,MAAI,cAAc,WAAW,GAAG;AAC9B,UAAM,IAAI,MAAM,8BAA8B;EAChD;AAGA,QAAM,UAAoC,CAAA;AAC1C,QAAM,SAAS,KAAK,OAAO,OAAO,CAAC,eAAc;AAC/C,QAAI,kBAAkB,WAAW,GAAG,MAAM,eAAe;AACvD,cAAQ,KAAK,UAAU;AACvB,aAAO;IACT;AACA,WAAO;EACT,CAAC;AACD,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO,EAAE,MAAM,EAAE,OAAM,GAAI,SAAS,MAAK;EAC3C;AACA,SAAO,EAAE,MAAM,EAAE,OAAM,GAAI,SAAS,MAAM,YAAY,QAAQ,CAAC,EAAC;AAClE;AAEA,SAAS,oBAAoB,YAAoC,KAAa,OAAyB;AACrG,QAAM,SAAS;AACf,MAAI,UAAU,UAAa,MAAM,SAAS,GAAG;AAC3C,WAAO,GAAG,IAAI;EAChB,OAAO;AACL,WAAO,OAAO,GAAG;EACnB;AACF;AAEA,SAAS,iBAAiB,YAAoC,KAAa,OAAc;AACvF,QAAM,SAAS;AACf,MAAI,OAAO;AACT,WAAO,GAAG,IAAI;EAChB,OAAO;AACL,WAAO,OAAO,GAAG;EACnB;AACF;;;AC7XA,IAAM,iBAAiB;AAgCjB,SAAU,mBAAmB,OAAa;AAC9C,QAAM,QAAQ,eAAe,KAAK,MAAM,KAAI,CAAE;AAC9C,MAAI,CAAC,OAAO;AACV,WAAO;EACT;AACA,QAAM,QAAQ,MAAM,CAAC;AAGrB,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;EACT;AAIA,MAAI,gBAAgB,KAAK,KAAK,GAAG;AAC/B,WAAO;EACT;AACA,SAAO,MAAM,YAAW;AAC1B;AAMM,SAAU,iBAAiB,QAAc;AAC7C,SAAO,OACJ,MAAM,OAAO,EACb,OAAO,CAAC,YAAY,QAAQ,SAAS,CAAC,EACtC,IAAI,CAAC,YAAY,GAAG,QAAQ,MAAM,GAAG,CAAC,EAAE,YAAW,CAAE,GAAG,QAAQ,MAAM,CAAC,EAAE,YAAW,CAAE,EAAE,EACxF,KAAK,EAAE;AACZ;AAOM,SAAU,qBAAqB,QAAkB,UAA6B,CAAA,GAAE;AACpF,QAAM,WAAW,OAAO,QAAQ,aAAa,YAAY,QAAQ,WAAW,IAAI,KAAK,MAAM,QAAQ,QAAQ,IAAI;AAC/G,QAAM,cAAc,OAAO,QAAQ,gBAAgB,YAAY,QAAQ,cAAc,IAAI,KAAK,MAAM,QAAQ,WAAW,IAAI;AAC3H,QAAM,WAAW,oBAAI,IAAG;AACxB,aAAW,YAAY,QAAQ;AAC7B,UAAM,QAAQ,OAAO,aAAa,WAAW,SAAS,KAAI,IAAK;AAC/D,QAAI,MAAM,WAAW,GAAG;AACtB;IACF;AACA,UAAM,SAAS,mBAAmB,KAAK;AACvC,QAAI,WAAW,QAAW;AACxB;IACF;AACA,UAAM,SAAS,SAAS,IAAI,MAAM,KAAK,EAAE,OAAO,GAAG,UAAU,CAAA,EAAE;AAC/D,WAAO,SAAS;AAChB,QAAI,OAAO,SAAS,SAAS,aAAa;AACxC,aAAO,SAAS,KAAK,KAAK;IAC5B;AACA,aAAS,IAAI,QAAQ,MAAM;EAC7B;AACA,QAAM,aAAsC,CAAA;AAC5C,aAAW,CAAC,QAAQ,MAAM,KAAK,SAAS,QAAO,GAAI;AACjD,QAAI,OAAO,QAAQ,UAAU;AAC3B;IACF;AACA,UAAM,OAAO,iBAAiB,MAAM;AACpC,eAAW,KAAK;MACd;MACA;MACA,OAAO,OAAO;MACd,UAAU,OAAO;MACjB,iBAAiB,qBAAqB,IAAI,MAAM;KACjD;EACH;AACA,aAAW,KAAK,CAAC,MAAM,UAAW,MAAM,QAAQ,KAAK,SAAU,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC;AAClG,SAAO;AACT;;;AH7DO,IAAM,qBAAqB;EAChC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOF,IAAM,uBAAuB;AAC7B,IAAM,0BAA0B;AAChC,IAAM,wBAAwB;AA2W9B,SAAS,SAAS,WAA+B,eAAqB;AACpE,QAAM,WAAW,aAAa,QAAQ,IAAI,aAAa;AACvD,QAAM,UAAU,SAAS,KAAI;AAC7B,SAAO,QAAQ,SAAS,IAAI,UAAU;AACxC;AAMA,eAAsB,iBACpB,MACA,SACA,QAAqB;AAErB,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,MAAI,CAAE,MAAM,WAAW,gBAAgB,MAAM,CAAC,GAAI;AAChD,UAAM,IAAI,WAAW,iCAAiC,MAAM,wBAAwB,UAAU,SAAS;EACzG;AAEA,MAAI;AACJ,MAAI;AACF,iBAAa,sBAAsB;MACjC;MACA,aAAa,QAAQ;MACrB,eAAe,QAAQ;MACvB,QAAQ,QAAQ;MAChB,SAAS,QAAQ;KAClB;EACH,SAAS,OAAO;AACd,UAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,KAAK;EAC9F;AAEA,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,+BAA+B,SAAS,MAAM;AAC7D,QAAM,YAAY,yBAAyB,QAAQ,OAAO,MAAM,OAAO,kCAAkC,KAAK;AAE9G,QAAM,WAAqB,CAAA;AAC3B,QAAM,SAAS,SAAS,QAAQ,QAAQ,SAAS,cAAc;AAC/D,QAAM,aAAa,uBAAuB,QAAQ;AAElD,QAAM,cAAc,MAAM,YACxB,QACA,sBACA,SAAS,MAAM,aACf,QACA,QAAQ,QAAQ,KAAK,GACrB,WAAW,6BAA6B;AAE1C,MAAI;AACJ,MAAI;AACF,UAAM,cAAc,MAAM,iBAAiB,SAAS;AACpD,QAAI;AACJ,QAAI;AACF,eAAS,mBAAmB,WAAW;IACzC,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,eAAe;IACxG;AACA,QAAI;AACF,6BAAuB,YAAY,MAAM;AAMzC,YAAM,kBAAkB,oBAAI,IAAG;AAC/B,YAAM,mBAAmB,wBAAwB,UAAU,gCAA+B,CAAE;AAC5F,iBAAW,CAAC,UAAU,MAAM,KAAK,OAAO,QAAQ,iBAAiB,cAAc,GAAG;AAChF,cAAM,YAAY,OAAO,KAAI,EAAG,YAAW;AAC3C,YAAI,UAAU,SAAS,KAAK,CAAC,gBAAgB,IAAI,SAAS,GAAG;AAC3D,0BAAgB,IAAI,WAAW,QAAQ;QACzC;MACF;AACA,gCAA0B,YAAY,QAAQ,eAAe;IAC/D,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,KAAK;IAC9F;AACA,aAAS,eAAe,QAAQ,UAAU;AAK1C,QAAI,OAAO,YAAY,OAAO,iBAAiB,UAAa,OAAO,iBAAiB,OAAO,WAAW,MAAM;AAC1G,eAAS,KAAK,gBAAgB,OAAO,YAAY,KAAK,OAAO,WAAW,IAAI,EAAE;IAChF;AAGA,UAAM,gBAAgB,WAAW,uBAAuB,OAAO,IAAI,CAAC;AACpE,UAAM,yBAAyB,QAAQ,CAAC,OAAO,UAAU,GAAG,UAAU,wBAAwB;AAC9F,aAAS,KACP,GAAI,MAAM,sBAAsB;MAC9B,MAAM;MACN,OAAO;MACP,IAAI;KACL,CAAE;EAEP;AACE,UAAM,YAAW;EACnB;AAEA,SAAO;IACL,QAAQ;IACR,YAAY;IACZ,UAAU,OAAO;IACjB,MAAM,OAAO;IACb,MAAM;MACJ,MAAM;MACN,aAAa,OAAO,KAAK,YAAY;;IAEvC,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;IAChF,cAAc,OAAM;;AAExB;AAEA,eAAe,kBAAkB,QAAc;AAC7C,MAAI,CAAE,MAAM,WAAW,gBAAgB,MAAM,CAAC,GAAI;AAChD,UAAM,IAAI,WAAW,iCAAiC,MAAM,wBAAwB,UAAU,SAAS;EACzG;AACF;AAUA,eAAe,oBACb,QACA,UACA,QACA,UAAgB;AAEhB,QAAM,WAAW,wBAAwB,UAAU,gCAA+B,CAAE;AACpF,QAAM,YAAY,SAAS,KAAI,EAAG,YAAW;AAC7C,QAAM,QAAQ,MAAM,wBAAwB,QAAQ,SAAS,aAAa,SAAS,gBAAgB,CAAA,GAAI,MAAM;AAC7G,SAAO,MAAM,OAAO,CAAC,SAAS,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,YAAW,MAAO,SAAS,EAAE;AACxG;AAQA,eAAe,sBACb,QACA,UACA,QACA,UAAgB;AAEhB,QAAM,WAAW,wBAAwB,UAAU,gCAA+B,CAAE;AACpF,QAAM,iBAAiB,6BAA6B,MAAM;AAC1D,QAAM,eAAe,qBAAqB,QAAQ;AAClD,QAAM,QAAQ,MAAM,wBAAwB,QAAQ,SAAS,aAAa,SAAS,gBAAgB,CAAA,GAAI,MAAM;AAC7G,SAAO,MAAM,OAAO,CAAC,SAAQ;AAC3B,UAAM,aAAa,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AACnE,UAAM,WAAW,eAAe,YAAY,IAAI,qBAAqB,UAAU,CAAC,KAAK,qBAAqB,UAAU;AACpH,WAAO,aAAa;EACtB,CAAC,EAAE;AACL;AAOA,SAAS,yBACP,UAQA,UAAgB;AAEhB,QAAM,QAA6C;IACjD,CAAC,gBAAgB,SAAS,YAAY;IACtC,CAAC,eAAe,SAAS,WAAW;IACpC,CAAC,sBAAsB,SAAS,kBAAkB;IAClD,CAAC,kBAAkB,SAAS,cAAc;IAC1C,CAAC,gBAAgB,SAAS,YAAY;IACtC,CAAC,mBAAmB,SAAS,eAAe;;AAE9C,SAAO,MACJ,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,UAAa,qBAAqB,KAAK,MAAM,QAAQ,EACrF,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI;AACzB;AAKA,eAAsB,oBACpB,MACA,SACA,QAAqB;AAErB,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,QAAM,kBAAkB,MAAM;AAE9B,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,+BAA+B,SAAS,MAAM;AAC7D,QAAM,YAAY,yBAAyB,QAAQ,OAAO,MAAM,OAAO,kCAAkC,KAAK;AAE9G,QAAM,WAAqB,CAAA;AAC3B,QAAM,SAAS,SAAS,QAAQ,QAAQ,SAAS,cAAc;AAC/D,QAAM,aAAa,uBAAuB,QAAQ;AAElD,QAAM,cAAc,MAAM,YACxB,QACA,sBACA,SAAS,MAAM,aACf,QACA,QAAQ,QAAQ,KAAK,GACrB,WAAW,6BAA6B;AAE1C,MAAI;AACJ,MAAI;AACF,UAAM,cAAc,MAAM,iBAAiB,SAAS;AACpD,QAAI;AACJ,QAAI;AACF,eAAS,mBAAmB,WAAW;IACzC,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,eAAe;IACxG;AACA,QAAI;AACF,gBAAU,eAAe,QAAQ,IAAI;IACvC,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,KAAK;IAC9F;AACA,QAAI,QAAQ,SAAS;AAKnB,YAAM,eAAe,QAAQ,YAAY,QAAQ,QAAQ,IAAI,KAAI;AACjE,UAAI,YAAY,SAAS,GAAG;AAC1B,cAAM,YAAY,MAAM,oBAAoB,QAAQ,UAAU,QAAQ,WAAW;AACjF,YAAI,YAAY,GAAG;AACjB,mBAAS,KAAK,oBAAoB,SAAS,EAAE;QAC/C;MACF;AAGA,YAAM,gBAAgB,WAAW,uBAAuB,QAAQ,IAAI,CAAC;AACrE,eAAS,KACP,GAAI,MAAM,sBAAsB;QAC9B,MAAM;QACN,OAAO;QACP,IAAI;OACL,CAAE;IAEP;EACF;AACE,UAAM,YAAW;EACnB;AAEA,SAAO;IACL,QAAQ;IACR,SAAS,QAAQ;IACjB,GAAI,QAAQ,aAAa,EAAE,MAAM,QAAQ,WAAU,IAAK,CAAA;IACxD,MAAM;MACJ,MAAM;MACN,aAAa,QAAQ,KAAK,YAAY;;IAExC,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;IAChF,cAAc,OAAM;;AAExB;AAEA,SAAS,gBAAgB,QAAgB,QAAyD;AAChG,SAAO,yBAAyB,QAAQ,OAAO,MAAM,UAAU,kCAAkC,QAAQ;AAC3G;AAEA,SAAS,cAAc,QAAgB,QAAyD;AAC9F,SAAO,yBAAyB,QAAQ,OAAO,MAAM,QAAQ,kCAAkC,MAAM;AACvG;AAEA,SAAS,aAAa,QAAgB,QAAyD;AAC7F,SAAO,yBAAyB,QAAQ,OAAO,MAAM,OAAO,kCAAkC,KAAK;AACrG;AAEA,eAAe,yBACb,QACA,aACA,UACA,IAAU;AAEV,aAAW,cAAc,aAAa;AACpC,UAAM,SAAS,WAAW,UAAU,gBAAgB,WAAW,IAAI;AACnE,UAAM,SAAS,KAAK,KAAK,QAAQ,MAAM;AACvC,QAAI,MAAM,WAAW,MAAM,GAAG;AAC5B;IACF;AACA,UAAM,MAAM,QAAQ,EAAE,WAAW,KAAI,CAAE;AACvC,aAAS,KACP,GAAI,MAAM,sBAAsB;MAC9B,MAAM;MACN,OAAO;MACP;KACD,CAAE;EAEP;AACF;AAEA,SAAS,qBAAqB,OAA4E;AACxG,SAAO;IACL,KAAK,MAAM;IACX,MAAM,MAAM;IACZ,UAAU,CAAC,GAAG,MAAM,QAAQ;IAC5B,UAAU,KAAK,MAAM,QAAQ;IAC7B,aAAa,MAAM,YAAY,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE;IAC1D,GAAI,MAAM,cAAc,EAAE,aAAa,MAAM,YAAW,IAAK,CAAA;IAC7D,UAAU,MAAM;IAChB,oBAAoB,MAAM;IAC1B,aAAa,MAAM;IACnB,gBAAgB,CAAC,GAAG,MAAM,cAAc;;AAE5C;AAKA,eAAsB,mBACpB,IACA,SACA,QAAqB;AAErB,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,QAAM,kBAAkB,MAAM;AAE9B,MAAI;AACJ,MAAI;AACF,iBAAa,wBAAwB;MACnC;MACA,OAAO,QAAQ;MACf,SAAS,QAAQ;MACjB,aAAa,QAAQ;MACrB,OAAO,QAAQ;KAChB;EACH,SAAS,OAAO;AACd,UAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,KAAK;EAC9F;AAEA,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,+BAA+B,SAAS,MAAM;AAC7D,QAAM,eAAe,gBAAgB,QAAQ,MAAM;AACnD,QAAM,iBAAiB,6BAA6B,MAAM;AAI1D,MAAI;AACF,gCAA4B,YAAY,eAAe,WAAW;EACpE,SAAS,OAAO;AACd,UAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,KAAK;EAC9F;AAKA,QAAM,mBAAmB,eAAe,MAAM,IAAI,WAAW,EAAE;AAC/D,QAAM,iBAAsD,mBACxD;IACE,IAAI,iBAAiB;IACrB,GAAI,MAAM,QAAQ,iBAAiB,KAAK,KAAK,iBAAiB,MAAM,SAAS,IACzE,EAAE,OAAO,CAAC,GAAG,iBAAiB,KAAK,EAAC,IACpC,CAAA;IACJ,GAAI,MAAM,QAAQ,iBAAiB,OAAO,KAAK,iBAAiB,QAAQ,SAAS,IAC7E,EAAE,SAAS,CAAC,GAAG,iBAAiB,OAAO,EAAC,IACxC,CAAA;IACJ,GAAI,iBAAiB,cAAc,EAAE,aAAa,iBAAiB,YAAW,IAAK,CAAA;IACnF,GAAI,OAAO,iBAAiB,UAAU,WAAW,EAAE,OAAO,iBAAiB,MAAK,IAAK,CAAA;MAEvF;AAEJ,QAAM,WAAqB,CAAA;AAC3B,QAAM,SAAS,SAAS,QAAQ,QAAQ,SAAS,cAAc;AAC/D,QAAM,aAAa,uBAAuB,QAAQ;AAElD,QAAM,cAAc,MAAM,YACxB,QACA,yBACA,SAAS,MAAM,aACf,QACA,QAAQ,QAAQ,KAAK,GACrB,WAAW,6BAA6B;AAE1C,MAAI;AACJ,MAAI;AACF,UAAM,cAAc,MAAM,iBAAiB,YAAY;AACvD,QAAI;AACJ,QAAI;AACF,eAAS,oBAAoB,WAAW;IAC1C,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,eAAe;IACxG;AAKA,UAAM,gBAAgB,oBAAI,IAAG;AAC7B,eAAW,cAAc,OAAO,UAAU;AACxC,YAAM,QAAQ,qBAAqB,WAAW,EAAE;AAChD,UAAI,MAAM,WAAW,GAAG;AACtB;MACF;AACA,oBAAc,IAAI,OAAO,KAAK;AAC9B,iBAAW,SAAS,MAAM,QAAQ,WAAW,OAAO,IAAI,WAAW,UAAU,CAAA,GAAI;AAC/E,cAAM,aAAa,qBAAqB,KAAK;AAC7C,YAAI,WAAW,SAAS,KAAK,CAAC,cAAc,IAAI,UAAU,GAAG;AAC3D,wBAAc,IAAI,YAAY,KAAK;QACrC;MACF;IACF;AACA,QAAI;AACF,kCAA4B,YAAY,aAAa;IACvD,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,KAAK;IAC9F;AACA,aAAS,gBAAgB,QAAQ,YAAY,cAAc;AAG3D,UAAM,gBAAgB,cAAc,wBAAwB,OAAO,IAAI,CAAC;AACxE,aAAS,KACP,GAAI,MAAM,sBAAsB;MAC9B,MAAM;MACN,OAAO;MACP,IAAI;KACL,CAAE;EAEP;AACE,UAAM,YAAW;EACnB;AAEA,SAAO;IACL,QAAQ;IACR,YAAY;IACZ,UAAU,OAAO;IACjB,QAAQ,OAAO;IACf,MAAM;MACJ,MAAM;MACN,UAAU,OAAO,KAAK,SAAS;;IAEjC,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;IAChF,cAAc,OAAM;;AAExB;AAKA,eAAsB,sBACpB,IACA,SACA,QAAqB;AAErB,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,QAAM,kBAAkB,MAAM;AAE9B,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,+BAA+B,SAAS,MAAM;AAC7D,QAAM,eAAe,gBAAgB,QAAQ,MAAM;AAEnD,QAAM,WAAqB,CAAA;AAC3B,QAAM,SAAS,SAAS,QAAQ,QAAQ,SAAS,cAAc;AAC/D,QAAM,aAAa,uBAAuB,QAAQ;AAElD,QAAM,cAAc,MAAM,YACxB,QACA,yBACA,SAAS,MAAM,aACf,QACA,QAAQ,QAAQ,KAAK,GACrB,WAAW,6BAA6B;AAE1C,MAAI;AACJ,MAAI;AACF,UAAM,cAAc,MAAM,iBAAiB,YAAY;AACvD,QAAI;AACJ,QAAI;AACF,eAAS,oBAAoB,WAAW;IAC1C,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,eAAe;IACxG;AACA,QAAI;AACF,gBAAU,gBAAgB,QAAQ,EAAE;IACtC,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,KAAK;IAC9F;AACA,QAAI,QAAQ,SAAS;AAKnB,YAAM,YAAY,qBAAqB,QAAQ,YAAY,MAAM,EAAE;AACnE,UAAI,UAAU,SAAS,KAAK,CAAC,mBAAmB,IAAI,SAAS,GAAG;AAC9D,cAAM,cAAc,MAAM,sBAAsB,QAAQ,UAAU,QAAQ,SAAS;AACnF,YAAI,cAAc,GAAG;AACnB,mBAAS,KAAK,sBAAsB,WAAW,EAAE;QACnD;AAKA,cAAM,mBAAmB,yBAAyB,OAAO,UAAU,SAAS;AAC5E,YAAI,iBAAiB,SAAS,GAAG;AAC/B,mBAAS,KAAK,iCAAiC,iBAAiB,KAAK,GAAG,CAAC,EAAE;QAC7E;MACF;AACA,YAAM,gBAAgB,cAAc,wBAAwB,QAAQ,IAAI,CAAC;AACzE,eAAS,KACP,GAAI,MAAM,sBAAsB;QAC9B,MAAM;QACN,OAAO;QACP,IAAI;OACL,CAAE;IAEP;EACF;AACE,UAAM,YAAW;EACnB;AAEA,SAAO;IACL,QAAQ;IACR,SAAS,QAAQ;IACjB,GAAI,QAAQ,aAAa,EAAE,QAAQ,QAAQ,WAAU,IAAK,CAAA;IAC1D,MAAM;MACJ,MAAM;MACN,UAAU,QAAQ,KAAK,SAAS;;IAElC,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;IAChF,cAAc,OAAM;;AAExB;AAEA,SAAS,oBAAoB,YAAsC;AACjE,SAAO;IACL,MAAM,WAAW;IACjB,QAAQ,WAAW;IACnB,SAAS,MAAM,QAAQ,WAAW,OAAO,IAAI,CAAC,GAAG,WAAW,OAAO,IAAI,CAAA;IACvE,GAAI,WAAW,iBAAiB,EAAE,gBAAgB,WAAW,eAAc,IAAK,CAAA;IAChF,GAAI,WAAW,cAAc,EAAE,aAAa,WAAW,YAAW,IAAK,CAAA;;AAE3E;AAEA,SAAS,uBACP,YACA,QACA,qBAA6D;AAE7D,SAAO;IACL,GAAG,oBAAoB,UAAU;IACjC;IACA,GAAI,sBAAsB,EAAE,WAAW,oBAAmB,IAAK,CAAA;IAC/D,wBAAwB,CAAC,GAAG,WAAW,sBAAsB;IAC7D,6BAA6B,CAAC,GAAG,WAAW,2BAA2B;IACvE,SAAS,gBAAgB,WAAW,OAAO;IAC3C,yBAAyB,gBAAgB,WAAW,uBAAuB;;AAE/E;AAEA,SAAS,sBAAsB,YAAmC;AAChE,SAAO;IACL,IAAI,WAAW;IACf,QAAQ,mBAAmB,IAAI,WAAW,EAAE,IAAI,YAAY;IAC5D,OAAO,MAAM,QAAQ,WAAW,KAAK,IAAI,CAAC,GAAG,WAAW,KAAK,IAAI,CAAA;IACjE,SAAS,MAAM,QAAQ,WAAW,OAAO,IAAI,CAAC,GAAG,WAAW,OAAO,IAAI,CAAA;IACvE,GAAI,WAAW,cAAc,EAAE,aAAa,WAAW,YAAW,IAAK,CAAA;IACvE,GAAI,OAAO,WAAW,UAAU,WAAW,EAAE,OAAO,WAAW,MAAK,IAAK,CAAA;;AAE7E;AAEA,SAAS,mBACP,MACA,aACA,gBAA2B;AAE3B,QAAM,YAAY,KAAK,YAAW;AAClC,MAAI,eAAe,IAAI,SAAS,GAAG;AACjC,WAAO;EACT;AACA,MAAI,YAAY,IAAI,SAAS,GAAG;AAC9B,WAAO;EACT;AACA,SAAO;AACT;AAEA,SAAS,iCAA8B;AACrC,QAAM,aAAa,oBAAI,IAAG;AAC1B,QAAM,gBAAgB,gCAA+B;AACrD,aAAW,gBAAgB,eAAe,cAAc,CAAA,GAAI;AAC1D,UAAM,WAAY,aAAuC;AACzD,QAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC5B;IACF;AACA,eAAW,WAAW,UAAU;AAC9B,UAAI,OAAO,YAAY,YAAY,YAAY,QAAQ,MAAM,QAAQ,OAAO,GAAG;AAC7E;MACF;AACA,YAAM,OAAQ,QAA+B;AAC7C,UAAI,OAAO,SAAS,YAAY,KAAK,KAAI,EAAG,SAAS,GAAG;AACtD,mBAAW,IAAI,KAAK,KAAI,EAAG,YAAW,GAAI;UACxC,OAAO,aAAa;UACpB,MAAM,aAAa;SACpB;MACH;IACF;EACF;AACA,SAAO;AACT;AAEA,SAAS,2BACP,QAAyD;AAEzD,QAAM,WAAW,6BAA6B,MAAM;AACpD,QAAM,UAAiC,CAAA;AACvC,QAAM,SAAgC,CAAA;AACtC,aAAW,cAAc,SAAS,aAAa;AAC7C,UAAM,UAAU,sBAAsB,UAAU;AAChD,QAAI,QAAQ,WAAW,WAAW;AAChC,cAAQ,KAAK,OAAO;IACtB,OAAO;AACL,aAAO,KAAK,OAAO;IACrB;EACF;AACA,SAAO,EAAE,SAAS,OAAM;AAC1B;AAEA,eAAe,4BAA4B,QAAqB;AAS9D,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,MAAI,CAAE,MAAM,WAAW,gBAAgB,MAAM,CAAC,GAAI;AAChD,UAAM,IAAI,WAAW,iCAAiC,MAAM,wBAAwB,UAAU,SAAS;EACzG;AACA,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,+BAA+B,SAAS,MAAM;AAC7D,QAAM,YAAY,yBAAyB,QAAQ,OAAO,MAAM,OAAO,kCAAkC,KAAK;AAC9G,QAAM,eAAe,gBAAgB,QAAQ,MAAM;AACnD,QAAM,WAAW,wBAAwB,UAAU,gCAA+B,CAAE;AACpF,QAAM,sBAAsB,+BAA8B;AAC1D,QAAM,cAAc,IAAI,KACrB,SAAS,YAAY,eAAe,CAAA,GAClC,IAAI,CAAC,eAAe,WAAW,KAAK,KAAI,EAAG,YAAW,CAAE,EACxD,OAAO,CAAC,SAAS,KAAK,SAAS,KAAK,CAAC,oBAAoB,IAAI,IAAI,CAAC,CAAC;AAExE,SAAO;IACL;IACA;IACA;IACA,QAAQ,SAAS;IACjB;IACA;IACA;;AAEJ;AAKA,eAAsB,cAAc,QAAqB;AACvD,QAAM,UAAU,MAAM,4BAA4B,MAAM;AACxD,QAAM,UAA+B,CAAA;AACrC,QAAM,SAA8B,CAAA;AACpC,QAAM,YAAiC,CAAA;AACvC,aAAW,cAAc,OAAO,OAAO,QAAQ,MAAM,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC,GAAG;AACjH,UAAM,SAAS,mBAAmB,WAAW,MAAM,QAAQ,aAAa,IAAI,IAAI,QAAQ,oBAAoB,KAAI,CAAE,CAAC;AACnH,UAAM,UAAU,oBAAoB,UAAU;AAC9C,QAAI,WAAW,aAAa;AAC1B,gBAAU,KAAK,OAAO;IACxB,WAAW,WAAW,UAAU;AAC9B,aAAO,KAAK,OAAO;IACrB,OAAO;AACL,cAAQ,KAAK,OAAO;IACtB;EACF;AACA,QAAM,kBAAkB,2BAA2B,QAAQ,MAAM;AACjE,QAAM,iBAAiB,4BAA4B,QAAQ,MAAM,EAAE,YAAY,IAAI,oBAAoB;AACvG,SAAO;IACL,QAAQ;IACR;IACA;IACA;IACA,QAAQ;MACN,SAAS,QAAQ;MACjB,QAAQ,OAAO;MACf,WAAW,UAAU;MACrB,OAAO,QAAQ,SAAS,OAAO,SAAS,UAAU;;IAEpD,UAAU;MACR,SAAS,gBAAgB;MACzB,QAAQ,gBAAgB;MACxB,QAAQ;QACN,SAAS,gBAAgB,QAAQ;QACjC,QAAQ,gBAAgB,OAAO;QAC/B,OAAO,gBAAgB,QAAQ,SAAS,gBAAgB,OAAO;;;IAGnE,QAAQ;MACN,QAAQ;MACR,QAAQ;QACN,OAAO,eAAe;;;IAG1B,MAAM;MACJ,MAAM,QAAQ;;IAEhB,cAAc,OAAM;;AAExB;AAKA,eAAsB,cAAc,MAA0B,QAAqB;AACjF,QAAM,YAAY,QAAQ,IAAI,KAAI;AAClC,MAAI,SAAS,WAAW,GAAG;AACzB,UAAM,IAAI,WAAW,gCAAgC,UAAU,KAAK;EACtE;AACA,QAAM,UAAU,MAAM,4BAA4B,MAAM;AACxD,QAAM,QAAQ,OAAO,OAAO,QAAQ,MAAM,EAAE,KAC1C,CAAC,eACC,WAAW,KAAK,YAAW,MAAO,SAAS,YAAW,KACtD,WAAW,QAAQ,KAAK,CAAC,UAAU,MAAM,YAAW,MAAO,SAAS,YAAW,CAAE,CAAC;AAEtF,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,WACR,sBAAsB,QAAQ,6EAA6E,sBAAsB,QAAQ,CAAC,qBAC1I,UAAU,WACV,EAAE,MAAM,oBAAmB,CAAE;EAEjC;AACA,SAAO;IACL,QAAQ;IACR,MAAM,uBACJ,OACA,mBAAmB,MAAM,MAAM,QAAQ,aAAa,IAAI,IAAI,QAAQ,oBAAoB,KAAI,CAAE,CAAC,GAC/F,QAAQ,oBAAoB,IAAI,MAAM,KAAK,YAAW,CAAE,CAAC;IAE3D,MAAM;MACJ,MAAM,QAAQ;;IAEhB,cAAc,OAAM;;AAExB;AAKA,eAAsB,oBACpB,IACA,QAAqB;AAErB,QAAM,cAAc,qBAAqB,EAAE;AAC3C,MAAI,YAAY,WAAW,GAAG;AAC5B,UAAM,IAAI,WAAW,gCAAgC,UAAU,KAAK;EACtE;AACA,QAAM,UAAU,MAAM,4BAA4B,MAAM;AACxD,QAAM,iBAAiB,6BAA6B,QAAQ,MAAM;AAClE,QAAM,aAAa,eAAe,YAAY,IAAI,WAAW,KAAK;AAClE,QAAM,QAAQ,eAAe,MAAM,IAAI,UAAU;AACjD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,WACR,mBAAmB,EAAE,kFAAkF,sBACrG,MAAM,EAAE,CACT,qBACD,UAAU,WACV,EAAE,MAAM,iBAAgB,CAAE;EAE9B;AACA,SAAO;IACL,QAAQ;IACR,QAAQ,sBAAsB,KAAK;IACnC,MAAM;MACJ,MAAM,QAAQ;;IAEhB,cAAc,OAAM;;AAExB;AAKA,eAAsB,kBACpB,KACA,SACA,QAAqB;AAErB,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,QAAM,kBAAkB,MAAM;AAE9B,MAAI;AACJ,MAAI;AACF,iBAAa,uBAAuB;MAClC;MACA,MAAM,QAAQ;MACd,UAAU,QAAQ;MAClB,aAAa,QAAQ;MACrB,SAAS,QAAQ;MACjB,SAAS,QAAQ;MACjB,UAAU,QAAQ;MAClB,kBAAkB,QAAQ;MAC1B,YAAY,QAAQ;MACpB,eAAe,QAAQ;KACxB;EACH,SAAS,OAAO;AACd,UAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,KAAK;EAC9F;AAEA,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,+BAA+B,SAAS,MAAM;AAC7D,QAAM,aAAa,cAAc,QAAQ,MAAM;AAE/C,QAAM,WAAqB,CAAA;AAC3B,QAAM,SAAS,SAAS,QAAQ,QAAQ,SAAS,cAAc;AAC/D,QAAM,aAAa,uBAAuB,QAAQ;AAElD,QAAM,cAAc,MAAM,YACxB,QACA,uBACA,SAAS,MAAM,aACf,QACA,QAAQ,QAAQ,KAAK,GACrB,WAAW,6BAA6B;AAE1C,MAAI;AACJ,MAAI;AACF,UAAM,cAAc,MAAM,iBAAiB,UAAU;AACrD,QAAI;AACJ,QAAI;AACF,eAAS,gBAAgB,WAAW;IACtC,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,eAAe;IACxG;AACA,aAAS,YAAY,QAAQ,UAAU;AACvC,UAAM,gBAAgB,YAAY,oBAAoB,OAAO,IAAI,CAAC;AAClE,aAAS,KACP,GAAI,MAAM,sBAAsB;MAC9B,MAAM;MACN,OAAO;MACP,IAAI;KACL,CAAE;EAEP;AACE,UAAM,YAAW;EACnB;AAEA,SAAO;IACL,QAAQ;IACR,YAAY;IACZ,UAAU,OAAO;IACjB,OAAO,OAAO;IACd,MAAM;MACJ,MAAM;MACN,QAAQ,OAAO,KAAK,OAAO;;IAE7B,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;IAChF,cAAc,OAAM;;AAExB;AAOA,eAAe,qBACb,QACA,UACA,QACA,aAAmB;AAEnB,QAAM,WAAW,wBAAwB,UAAU,gCAA+B,CAAE;AACpF,QAAM,QAAQ,MAAM,wBAAwB,QAAQ,SAAS,aAAa,SAAS,gBAAgB,CAAA,GAAI,MAAM;AAC7G,SAAO,MAAM,OAAO,CAAC,SAAQ;AAC3B,UAAM,QAAS,KAA4C,WAAW;AACtE,QAAI,UAAU,UAAa,UAAU,MAAM;AACzC,aAAO;IACT;AACA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,MAAM,SAAS;IACxB;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,MAAM,KAAI,EAAG,SAAS;IAC/B;AACA,WAAO;EACT,CAAC,EAAE;AACL;AAKA,eAAsB,qBACpB,KACA,SACA,QAAqB;AAErB,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,QAAM,kBAAkB,MAAM;AAE9B,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,+BAA+B,SAAS,MAAM;AAC7D,QAAM,aAAa,cAAc,QAAQ,MAAM;AAE/C,QAAM,WAAqB,CAAA;AAC3B,QAAM,SAAS,SAAS,QAAQ,QAAQ,SAAS,cAAc;AAC/D,QAAM,aAAa,uBAAuB,QAAQ;AAElD,QAAM,cAAc,MAAM,YACxB,QACA,uBACA,SAAS,MAAM,aACf,QACA,QAAQ,QAAQ,KAAK,GACrB,WAAW,6BAA6B;AAE1C,MAAI;AACJ,MAAI;AACF,UAAM,cAAc,MAAM,iBAAiB,UAAU;AACrD,QAAI;AACJ,QAAI;AACF,eAAS,gBAAgB,WAAW;IACtC,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,eAAe;IACxG;AACA,QAAI;AACF,gBAAU,YAAY,QAAQ,GAAG;IACnC,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,KAAK;IAC9F;AACA,QAAI,QAAQ,SAAS;AACnB,YAAM,aAAa,kBAAkB,QAAQ,YAAY,OAAO,GAAG;AACnE,YAAM,cAAc,kBAAkB,QAAQ,YAAY,gBAAgB,QAAQ,YAAY,oBAAoB,UAAU;AAC5H,UAAI,YAAY,SAAS,GAAG;AAC1B,cAAM,aAAa,MAAM,qBAAqB,QAAQ,UAAU,QAAQ,WAAW;AACnF,YAAI,aAAa,GAAG;AAClB,mBAAS,KAAK,qBAAqB,UAAU,EAAE;QACjD;MACF;AACA,YAAM,gBAAgB,YAAY,oBAAoB,QAAQ,IAAI,CAAC;AACnE,eAAS,KACP,GAAI,MAAM,sBAAsB;QAC9B,MAAM;QACN,OAAO;QACP,IAAI;OACL,CAAE;IAEP;EACF;AACE,UAAM,YAAW;EACnB;AAEA,SAAO;IACL,QAAQ;IACR,SAAS,QAAQ;IACjB,GAAI,QAAQ,aAAa,EAAE,OAAO,QAAQ,WAAU,IAAK,CAAA;IACzD,MAAM;MACJ,MAAM;MACN,QAAQ,QAAQ,KAAK,OAAO;;IAE9B,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;IAChF,cAAc,OAAM;;AAExB;AAKA,eAAsB,oBAAoB,QAAqB;AAC7D,QAAM,UAAU,MAAM,4BAA4B,MAAM;AACxD,QAAM,SAAS,4BAA4B,QAAQ,MAAM,EAAE,YAAY,IAAI,oBAAoB;AAC/F,SAAO;IACL,QAAQ;IACR;IACA,QAAQ;MACN,OAAO,OAAO;;IAEhB,MAAM;MACJ,MAAM,cAAc,QAAQ,QAAQ,QAAQ,MAAM;;IAEpD,cAAc,OAAM;;AAExB;AAKA,eAAsB,mBACpB,KACA,QAAqB;AAErB,QAAM,WAAW,kBAAkB,GAAG;AACtC,MAAI,SAAS,WAAW,GAAG;AACzB,UAAM,IAAI,WAAW,gCAAgC,UAAU,KAAK;EACtE;AACA,QAAM,UAAU,MAAM,4BAA4B,MAAM;AACxD,QAAM,QAAQ,4BAA4B,QAAQ,MAAM,EAAE,OAAO,IAAI,QAAQ;AAC7E,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,WACR,yBAAyB,GAAG,sFAAsF,sBAChH,OAAO,EAAE,CACV,qBACD,UAAU,WACV,EAAE,MAAM,gBAAe,CAAE;EAE7B;AACA,SAAO;IACL,QAAQ;IACR,OAAO,qBAAqB,KAAK;IACjC,MAAM;MACJ,MAAM,cAAc,QAAQ,QAAQ,QAAQ,MAAM;;IAEpD,cAAc,OAAM;;AAExB;AAKA,eAAsB,qBACpB,QACA,SACA,QAAqB;AAErB,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,QAAM,kBAAkB,MAAM;AAE9B,MAAI;AACJ,MAAI;AACF,UAAM,aAAa,wBAAwB,MAAM;AACjD,QAAI,eAAe,QAAW;AAC5B,YAAM,IAAI,MAAM,0CAA0C,kBAAkB,KAAK,IAAI,CAAC,GAAG;IAC3F;AACA,iBAAa;EACf,SAAS,OAAO;AACd,UAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,KAAK;EAC9F;AAEA,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,+BAA+B,SAAS,MAAM;AAC7D,QAAM,YAAY,aAAa,QAAQ,MAAM;AAE7C,QAAM,WAAqB,CAAA;AAC3B,QAAM,SAAS,SAAS,QAAQ,QAAQ,SAAS,cAAc;AAC/D,QAAM,aAAa,uBAAuB,QAAQ;AAElD,QAAM,aAAuB,CAAA;AAC7B,QAAM,WAAqB,CAAA;AAC3B,MAAI,mBAAmB;AACvB,QAAM,cAAc,MAAM,YACxB,QACA,sBACA,SAAS,MAAM,aACf,QACA,QAAQ,QAAQ,KAAK,GACrB,WAAW,6BAA6B;AAE1C,MAAI;AACF,UAAM,cAAc,MAAM,iBAAiB,SAAS;AACpD,QAAI;AACJ,QAAI;AACF,eAAS,mBAAmB,WAAW;IACzC,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,eAAe;IACxG;AACA,QAAI,WAAW;AACf,eAAW,cAAc,6BAA6B,UAAU,GAAG;AACjE,YAAM,SAAS,eAAe,UAAU,UAAU;AAClD,iBAAW,OAAO;AAClB,OAAC,OAAO,WAAW,WAAW,YAAY,KAAK,OAAO,WAAW,IAAI;IACvE;AACA,uBAAmB,SAAS,YAAY;AACxC,UAAM,gBAAgB,WAAW,uBAAuB,QAAQ,CAAC;AACjE,UAAM,yBACJ,QACA,6BAA6B,UAAU,GACvC,UACA,4BAA4B;AAE9B,aAAS,KACP,GAAI,MAAM,sBAAsB;MAC9B,MAAM;MACN,OAAO;MACP,IAAI;KACL,CAAE;EAEP;AACE,UAAM,YAAW;EACnB;AAEA,SAAO;IACL,QAAQ;IACR,QAAQ;IACR;IACA;IACA,MAAM;MACJ,MAAM;MACN,aAAa;;IAEf,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;IAChF,cAAc,OAAM;;AAExB;AAKA,eAAsB,oBACpB,SACA,QAAqB;AAErB,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,QAAM,kBAAkB,MAAM;AAE9B,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,+BAA+B,SAAS,MAAM;AAC7D,QAAM,YAAY,aAAa,QAAQ,MAAM;AAC7C,MAAI,WAAW;AACf,MAAI,QAAQ,aAAa,QAAW;AAClC,QAAI,CAAC,OAAO,UAAU,QAAQ,QAAQ,KAAK,QAAQ,WAAW,GAAG;AAC/D,YAAM,IAAI,WAAW,kDAAkD,UAAU,KAAK;IACxF;AACA,eAAW,QAAQ;EACrB;AAEA,QAAM,WAAW,wBAAwB,UAAU,gCAA+B,CAAE;AACpF,QAAM,QAAQ,MAAM,wBAAwB,QAAQ,SAAS,aAAa,SAAS,gBAAgB,CAAA,GAAI,MAAM;AAC7G,QAAM,SAAS,MAAM,IAAI,CAAC,SAAU,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,EAAG;AACrF,QAAM,aAAa,qBAAqB,QAAQ,EAAE,SAAQ,CAAE;AAE5D,QAAM,WAAqB,CAAA;AAC3B,QAAM,aAAuB,CAAA;AAC7B,QAAM,WAAqB,CAAA;AAC3B,QAAM,UAAmD,CAAA;AACzD,MAAI;AAGJ,MAAI,CAAC,QAAQ,OAAO;AAClB,QAAI;AACJ,QAAI;AACF,eAAS,mBAAmB,MAAM,iBAAiB,SAAS,CAAC;IAC/D,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,eAAe;IACxG;AACA,uBAAmB,OAAO,YAAY;AACtC,WAAO;MACL,QAAQ;MACR,SAAS;MACT,WAAW;MACX;MACA;MACA;MACA;MACA,MAAM;QACJ,MAAM;QACN,aAAa;;MAEf;MACA,cAAc,OAAM;;EAExB;AAEA,QAAM,SAAS,SAAS,QAAQ,QAAQ,SAAS,cAAc;AAC/D,QAAM,aAAa,uBAAuB,QAAQ;AAClD,QAAM,cAAc,MAAM,YACxB,QACA,sBACA,SAAS,MAAM,aACf,QACA,QAAQ,QAAQ,KAAK,GACrB,WAAW,6BAA6B;AAE1C,MAAI;AACF,UAAM,cAAc,MAAM,iBAAiB,SAAS;AACpD,QAAI;AACJ,QAAI;AACF,eAAS,mBAAmB,WAAW;IACzC,SAAS,OAAO;AACd,YAAM,IAAI,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,UAAU,eAAe;IACxG;AACA,QAAI,WAAW;AACf,eAAW,aAAa,YAAY;AAClC,UAAI,UAAU,iBAAiB;AAC7B,gBAAQ,KAAK,EAAE,MAAM,UAAU,MAAM,QAAQ,kBAAiB,CAAE;AAChE;MACF;AACA,UAAI;AACJ,UAAI;AACF,qBAAa,sBAAsB,EAAE,MAAM,UAAU,KAAI,CAAE;MAC7D,QAAQ;AAGN,gBAAQ,KAAK,EAAE,MAAM,UAAU,MAAM,QAAQ,qBAAoB,CAAE;AACnE;MACF;AACA,YAAM,SAAS,eAAe,UAAU,UAAU;AAClD,iBAAW,OAAO;AAClB,OAAC,OAAO,WAAW,WAAW,YAAY,KAAK,OAAO,WAAW,IAAI;IACvE;AACA,uBAAmB,SAAS,YAAY;AACxC,UAAM,gBAAgB,WAAW,uBAAuB,QAAQ,CAAC;AACjE,UAAM,yBACJ,QACA,SAAS,YAAY,OAAO,CAAC,eAAe,WAAW,SAAS,WAAW,IAAI,KAAK,SAAS,SAAS,WAAW,IAAI,CAAC,GACtH,UACA,2BAA2B;AAE7B,aAAS,KACP,GAAI,MAAM,sBAAsB;MAC9B,MAAM;MACN,OAAO;MACP,IAAI;KACL,CAAE;EAEP;AACE,UAAM,YAAW;EACnB;AAEA,SAAO;IACL,QAAQ;IACR,SAAS;IACT,WAAW;IACX;IACA;IACA;IACA;IACA,MAAM;MACJ,MAAM;MACN,aAAa;;IAEf,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;IAChF,cAAc,OAAM;;AAExB;AAKM,SAAU,yBAAyB,QAA2B;AAClE,QAAM,OAAO,OAAO,WAAW,YAAY;AAC3C,QAAM,cACJ,OAAO,KAAK,WAAW,OAAO,KAAK,QAAQ,SAAS,IAAI,cAAc,OAAO,KAAK,QAAQ,KAAK,IAAI,CAAC,MAAM;AAC5G,SAAO,GAAG,IAAI,sBAAsB,OAAO,KAAK,IAAI,IAAI,WAAW,OAAO,OAAO,KAAK,IAAI,qBAAqB,sBAAsB,OAAO,KAAK,IAAI,CAAC;AACxJ;AAKM,SAAU,4BAA4B,QAA8B;AACxE,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,qDAAqD,OAAO,KAAK,IAAI;EAC9E;AACA,QAAM,OAAO,OAAO,MAAM,QAAQ;AAClC,SAAO,6BAA6B,IAAI,UAAU,OAAO,KAAK,IAAI;AACpE;AAKM,SAAU,2BAA2B,QAA6B;AACtE,QAAM,OAAO,OAAO,WAAW,YAAY;AAC3C,QAAM,aACJ,OAAO,OAAO,SAAS,OAAO,OAAO,MAAM,SAAS,IAAI,YAAY,OAAO,OAAO,MAAM,KAAK,IAAI,CAAC,MAAM;AAC1G,QAAM,cACJ,OAAO,OAAO,WAAW,OAAO,OAAO,QAAQ,SAAS,IAAI,cAAc,OAAO,OAAO,QAAQ,KAAK,IAAI,CAAC,MAAM;AAClH,SAAO,GAAG,IAAI,YAAY,OAAO,OAAO,EAAE,IAAI,UAAU,GAAG,WAAW,OAAO,OAAO,KAAK,IAAI;AAC/F;AAKM,SAAU,8BAA8B,QAAgC;AAC5E,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,kDAAkD,OAAO,KAAK,IAAI;EAC3E;AACA,QAAM,KAAK,OAAO,QAAQ,MAAM;AAChC,SAAO,0BAA0B,EAAE,UAAU,OAAO,KAAK,IAAI;AAC/D;AAKM,SAAU,sBAAsB,QAAwB;AAC5D,QAAM,QAAQ;IACZ,iBAAiB,OAAO,OAAO,KAAK,WAAW,OAAO,OAAO,OAAO,aAAa,OAAO,OAAO,MAAM,YAAY,OAAO,OAAO,SAAS;;AAE1I,aAAW,CAAC,OAAO,OAAO,KAAK;IAC7B,CAAC,WAAW,OAAO,OAAO;IAC1B,CAAC,UAAU,OAAO,MAAM;IACxB,CAAC,aAAa,OAAO,SAAS;KACpB;AACV,QAAI,QAAQ,WAAW,GAAG;AACxB;IACF;AACA,UAAM,KAAK,GAAG,KAAK,KAAK,QAAQ,IAAI,CAAC,UAAU,MAAM,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE;EACzE;AACA,QAAM,KACJ,aAAa,OAAO,SAAS,OAAO,KAAK,WAAW,OAAO,SAAS,OAAO,OAAO,aAAa,OAAO,SAAS,OAAO,MAAM,UAAU;AAExI,aAAW,CAAC,OAAO,OAAO,KAAK;IAC7B,CAAC,oBAAoB,OAAO,SAAS,OAAO;IAC5C,CAAC,mBAAmB,OAAO,SAAS,MAAM;KAChC;AACV,QAAI,QAAQ,WAAW,GAAG;AACxB;IACF;AACA,UAAM,KAAK,GAAG,KAAK,KAAK,QAAQ,IAAI,CAAC,UAAU,MAAM,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;EACvE;AACA,QAAM,KAAK,kBAAkB,OAAO,OAAO,OAAO,KAAK,QAAQ;AAC/D,MAAI,OAAO,OAAO,OAAO,SAAS,GAAG;AACnC,UAAM,KAAK,WAAW,OAAO,OAAO,OAAO,IAAI,CAAC,UAAU,GAAG,MAAM,GAAG,KAAK,MAAM,IAAI,KAAK,MAAM,QAAQ,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE;EAC3H;AACA,QAAM,KAAK,oCAAoC;AAC/C,QAAM,KAAK,oDAAoD;AAC/D,QAAM,KAAK,+CAA+C;AAC1D,SAAO,MAAM,KAAK,IAAI;AACxB;AAKM,SAAU,sBAAsB,QAAwB;AAC5D,QAAM,QAAQ;IACZ,SAAS,OAAO,KAAK,IAAI;IACzB,WAAW,OAAO,KAAK,MAAM;IAC7B,WAAW,OAAO,KAAK,MAAM;;AAE/B,MAAI,OAAO,KAAK,gBAAgB;AAC9B,UAAM,KAAK,mBAAmB,OAAO,KAAK,cAAc,EAAE;EAC5D;AACA,MAAI,OAAO,KAAK,QAAQ,SAAS,GAAG;AAClC,UAAM,KAAK,YAAY,OAAO,KAAK,QAAQ,KAAK,IAAI,CAAC,EAAE;EACzD;AACA,MAAI,OAAO,KAAK,aAAa;AAC3B,UAAM,KAAK,gBAAgB,OAAO,KAAK,WAAW,EAAE;EACtD;AACA,MAAI,OAAO,KAAK,QAAQ,SAAS,GAAG;AAClC,UAAM,KAAK,YAAY,OAAO,KAAK,QAAQ,IAAI,CAAC,WAAW,OAAO,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE;EACrF;AACA,SAAO,MAAM,KAAK,IAAI;AACxB;AAKM,SAAU,4BAA4B,QAA8B;AACxE,QAAM,QAAQ;IACZ,WAAW,OAAO,OAAO,EAAE;IAC3B,WAAW,OAAO,OAAO,MAAM;;AAEjC,MAAI,OAAO,OAAO,MAAM,SAAS,GAAG;AAClC,UAAM,KAAK,UAAU,OAAO,OAAO,MAAM,KAAK,IAAI,CAAC,EAAE;EACvD;AACA,MAAI,OAAO,OAAO,QAAQ,SAAS,GAAG;AACpC,UAAM,KAAK,YAAY,OAAO,OAAO,QAAQ,KAAK,IAAI,CAAC,EAAE;EAC3D;AACA,MAAI,OAAO,OAAO,aAAa;AAC7B,UAAM,KAAK,gBAAgB,OAAO,OAAO,WAAW,EAAE;EACxD;AACA,MAAI,OAAO,OAAO,OAAO,UAAU,UAAU;AAC3C,UAAM,KAAK,UAAU,OAAO,OAAO,KAAK,EAAE;EAC5C;AACA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,SAAS,uBAAuB,OAAyB;AACvD,QAAM,QAAkB,CAAA;AACxB,MAAI,MAAM,UAAU;AAClB,UAAM,KAAK,UAAU;EACvB;AACA,MAAI,MAAM,oBAAoB;AAC5B,UAAM,KAAK,oBAAoB;EACjC;AACA,MAAI,CAAC,MAAM,aAAa;AACtB,UAAM,KAAK,UAAU;EACvB;AACA,QAAM,aAAa,MAAM,SAAS,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM;AACjE,SAAO,GAAG,MAAM,GAAG,KAAK,MAAM,IAAI,KAAK,MAAM,QAAQ,aAAa,MAAM,SAAS,KAAK,GAAG,CAAC,GAAG,UAAU;AACzG;AAKM,SAAU,0BAA0B,QAA4B;AACpE,QAAM,OAAO,OAAO,WAAW,YAAY;AAC3C,SAAO,GAAG,IAAI,kBAAkB,OAAO,MAAM,GAAG,QAAQ,OAAO,KAAK,IAAI,oCAAoC,OAAO,MAAM,YAAY,OAAO,MAAM,KAAK,WAAW,KAAK,GAAG,CAAC;AAC7K;AAKM,SAAU,6BAA6B,QAA+B;AAC1E,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,iDAAiD,OAAO,KAAK,IAAI;EAC1E;AACA,QAAM,MAAM,OAAO,OAAO,OAAO;AACjC,SAAO,yBAAyB,GAAG,UAAU,OAAO,KAAK,IAAI;AAC/D;AAKM,SAAU,4BAA4B,QAA8B;AACxE,QAAM,QAAQ,CAAC,kBAAkB,OAAO,OAAO,KAAK,QAAQ;AAC5D,aAAW,SAAS,OAAO,QAAQ;AACjC,UAAM,KAAK,KAAK,uBAAuB,KAAK,CAAC,EAAE;EACjD;AACA,QAAM,KAAK,yCAAyC;AACpD,SAAO,MAAM,KAAK,IAAI;AACxB;AAKM,SAAU,2BAA2B,QAA6B;AACtE,QAAM,QAAQ,OAAO;AACrB,QAAM,QAAQ;IACZ,UAAU,MAAM,GAAG;IACnB,SAAS,MAAM,IAAI;IACnB,aAAa,MAAM,QAAQ;IAC3B,aAAa,MAAM,SAAS,KAAK,IAAI,CAAC;;AAExC,MAAI,MAAM,YAAY,SAAS,GAAG;AAChC,UAAM,KAAK,gBAAgB,MAAM,YAAY,KAAK,IAAI,CAAC,EAAE;EAC3D;AACA,MAAI,MAAM,aAAa;AACrB,UAAM,KAAK,gBAAgB,MAAM,WAAW,EAAE;EAChD;AACA,MAAI,MAAM,UAAU;AAClB,UAAM,KAAK,gBAAgB;EAC7B;AACA,MAAI,MAAM,oBAAoB;AAC5B,UAAM,KAAK,0BAA0B;EACvC;AACA,MAAI,CAAC,MAAM,aAAa;AACtB,UAAM,KAAK,oBAAoB;EACjC;AACA,MAAI,MAAM,eAAe,SAAS,GAAG;AACnC,UAAM,KAAK,mBAAmB,MAAM,eAAe,KAAK,IAAI,CAAC,EAAE;EACjE;AACA,SAAO,MAAM,KAAK,IAAI;AACxB;AAKM,SAAU,6BAA6B,QAA+B;AAC1E,QAAM,aAAa,OAAO,WAAW,SAAS,IAAI,eAAe,OAAO,WAAW,KAAK,IAAI,CAAC,KAAK;AAClG,QAAM,WAAW,OAAO,SAAS,SAAS,IAAI,YAAY,OAAO,SAAS,KAAK,IAAI,CAAC,KAAK;AACzF,QAAM,SAAS,CAAC,YAAY,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI;AACjF,SAAO,YAAY,OAAO,MAAM,oBAAoB,OAAO,KAAK,IAAI,GAAG,OAAO,SAAS,IAAI,KAAK,MAAM,MAAM,EAAE;AAChH;AAKM,SAAU,4BAA4B,QAAgC;AAC1E,MAAI,OAAO,WAAW,WAAW,GAAG;AAClC,WAAO,mDAAmD,OAAO,SAAS;EAC5E;AACA,QAAM,QAAQ,OAAO,UACjB,CAAC,uEAAuE,OAAO,SAAS,IAAI,IAC5F,CAAC,kEAAkE,OAAO,SAAS,aAAa;AACpG,aAAW,aAAa,OAAO,YAAY;AACzC,UAAM,OAAO,UAAU,kBAAkB,iCAAiC;AAC1E,UAAM,KAAK,KAAK,UAAU,IAAI,QAAQ,UAAU,MAAM,MAAM,UAAU,KAAK,UAAU,IAAI,EAAE;EAC7F;AACA,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,KAAK,+DAA+D;EAC5E,OAAO;AACL,QAAI,OAAO,WAAW,SAAS,GAAG;AAChC,YAAM,KAAK,eAAe,OAAO,WAAW,KAAK,IAAI,CAAC,EAAE;IAC1D;AACA,QAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,YAAM,KAAK,YAAY,OAAO,SAAS,KAAK,IAAI,CAAC,EAAE;IACrD;EACF;AACA,SAAO,MAAM,KAAK,IAAI;AACxB;AAUO,IAAM,yBAAyB;EACpC;EACA","debugId":"f5df32b2-3a3e-5516-993f-e28cdedf0e24"}
|