@unbrained/pm-cli 2026.6.30 → 2026.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -0
- package/CHANGELOG.md +20 -0
- package/dist/cli/bootstrap-args.js +89 -79
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/calendar.js +63 -62
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/create.js +483 -434
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension/bundled-catalog.js +59 -46
- package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
- package/dist/cli/commands/extension/doctor.js +129 -78
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/managed-state.js +101 -57
- package/dist/cli/commands/extension/managed-state.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.d.ts +7 -0
- package/dist/cli/commands/extension/scaffold.js +214 -186
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +6 -1
- package/dist/cli/commands/extension.js +1034 -902
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/list-filter-shared.js +55 -48
- package/dist/cli/commands/list-filter-shared.js.map +1 -1
- package/dist/cli/commands/search.js +94 -68
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/test.js +108 -122
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update.js +27 -77
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/extension-command-options.js +48 -21
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/registration-helpers.js +117 -122
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +16 -0
- package/dist/cli-bundle/chunks/{activity-MVSEND6D.js → activity-DBLQVIP6.js} +9 -9
- package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js → aggregate-JTEF4BP7.js} +9 -9
- package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js → aggregate-SDF7DUOD.js} +9 -9
- package/dist/cli-bundle/chunks/{append-LEDBAM3K.js → append-LOVPGVPT.js} +6 -6
- package/dist/cli-bundle/chunks/{append-KDHT4GHI.js → append-QCFJSDFL.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js → chunk-22WKIL3H.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js → chunk-2466X6E4.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js → chunk-27BXPBAY.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js → chunk-2D4HATP2.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-DORJSBGJ.js → chunk-3J6JRJ3I.js} +127 -125
- package/dist/cli-bundle/chunks/chunk-3J6JRJ3I.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js → chunk-3K2M5OYU.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js → chunk-3S2KT7NG.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js → chunk-3VGN2UWE.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-K46GQ265.js → chunk-3XZCOZ5J.js} +107 -117
- package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-4A3BJ675.js +799 -0
- package/dist/cli-bundle/chunks/chunk-4A3BJ675.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js → chunk-4DSGXSBL.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js → chunk-4DUVCVLZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-UB3V5WUI.js → chunk-4XOIEKSD.js} +351 -330
- package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DJDXAU74.js → chunk-55SNVXRQ.js} +68 -69
- package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js → chunk-5CGRF3L5.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-7WDETKGP.js → chunk-5QFDBI4F.js} +1105 -965
- package/dist/cli-bundle/chunks/chunk-5QFDBI4F.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js → chunk-64HNBBFQ.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-T7ZMQI4J.js → chunk-6AQZPVHQ.js} +198 -189
- package/dist/cli-bundle/chunks/chunk-6AQZPVHQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CY5IJMUM.js → chunk-7R4QEMZZ.js} +361 -322
- package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js → chunk-A7FPBAQS.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js → chunk-AVEE5EHK.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js → chunk-AXIDKKAT.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js → chunk-BDTISOSD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZFIEEDTJ.js → chunk-BHO33VBQ.js} +509 -363
- package/dist/cli-bundle/chunks/chunk-BHO33VBQ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RM6MHL6A.js → chunk-BZCEN4JA.js} +98 -74
- package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js → chunk-CF7RL6FR.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-NIBP3I7A.js → chunk-CWFNTKQJ.js} +128 -126
- package/dist/cli-bundle/chunks/chunk-CWFNTKQJ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js → chunk-DDPTYJIM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js → chunk-EJUDVUYZ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js → chunk-EVMTBV6V.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-6YRAMXRS.js → chunk-FFMQB7WR.js} +99 -75
- package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js → chunk-G7I7DEZA.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js → chunk-GJ326ZKX.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js → chunk-HPPFYYOV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5IRVSKPS.js → chunk-HXTQJXWT.js} +150 -224
- package/dist/cli-bundle/chunks/chunk-HXTQJXWT.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js → chunk-HYTGA6GI.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js → chunk-HZZEHPRG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js → chunk-IJYK2T43.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js → chunk-IPYBJWTE.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js → chunk-IZBR4NRW.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js → chunk-JLM7BHI7.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-DU66JUGT.js → chunk-JMP4E6D7.js} +106 -116
- package/dist/cli-bundle/chunks/chunk-JMP4E6D7.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js → chunk-JPECA746.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js → chunk-JSU5P7VS.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-HIBK6H4S.js → chunk-JWXRETDF.js} +69 -70
- package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js → chunk-KNPEF7QG.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js → chunk-L5OEFZQG.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-DRPF274X.js → chunk-LB6TP6MC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js → chunk-MAUKX7JC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-6T5ZIWBS.js → chunk-MDPEOIGN.js} +150 -224
- package/dist/cli-bundle/chunks/chunk-MDPEOIGN.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js → chunk-N74UMG5H.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js → chunk-NFDPYAIP.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js → chunk-NKZAN7BD.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js → chunk-NOLPZMSV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JZG5ADVE.js → chunk-NU2UEROZ.js} +1103 -963
- package/dist/cli-bundle/chunks/chunk-NU2UEROZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-A3UNLXNJ.js → chunk-NUHHPVVS.js} +36 -86
- package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js → chunk-NWMZWYYB.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js → chunk-OGXLACHC.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js → chunk-OTUHB4HS.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-V3KLX7U7.js → chunk-QCWF6IYD.js} +510 -364
- package/dist/cli-bundle/chunks/chunk-QCWF6IYD.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js → chunk-RGEMWD6Q.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-RH5ZBYFD.js +809 -0
- package/dist/cli-bundle/chunks/chunk-RH5ZBYFD.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js → chunk-RLDHZHQS.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js → chunk-RMMQ74TG.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-SNUK7H5J.js → chunk-RVUALSJF.js} +361 -322
- package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-IZQOJR2B.js → chunk-SDR5J34Q.js} +198 -189
- package/dist/cli-bundle/chunks/chunk-SDR5J34Q.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js → chunk-SLMUGTK3.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js → chunk-TP5Q5ZD3.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js → chunk-UYUYDGIB.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js → chunk-UZIWVBE6.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JTRKME24.js → chunk-V3NOKJF2.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-5T6WPLRO.js → chunk-VARHOHYV.js} +350 -329
- package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js → chunk-VICZWYGZ.js} +4 -4
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js → chunk-W4ULYO7Z.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js → chunk-WYDHYJPO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js → chunk-YITK2PJ6.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-VD3LKZFX.js → chunk-ZETXE4SE.js} +37 -87
- package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js → chunk-ZRP4VG5U.js} +2 -2
- package/dist/cli-bundle/chunks/{claim-6NINZYB3.js → claim-EMQLYPRW.js} +8 -8
- package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js → claim-T3GCKV7C.js} +8 -8
- package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +14 -0
- package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js → close-TQYAAFJP.js} +7 -7
- package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js → close-many-BG5QQIDQ.js} +15 -15
- package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js → close-many-LDRVEQY2.js} +15 -15
- package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js → comments-QCKR2YY2.js} +8 -8
- package/dist/cli-bundle/chunks/{comments-ETHABIY6.js → comments-YUXJRZPQ.js} +8 -8
- package/dist/cli-bundle/chunks/{config-FIXJZEQK.js → config-DMSU64QO.js} +7 -7
- package/dist/cli-bundle/chunks/{config-X3ZVCUUG.js → config-QH2DICD6.js} +7 -7
- package/dist/cli-bundle/chunks/{context-XDI4DKKT.js → context-B6275WPX.js} +12 -12
- package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js → context-OCZ3FJ4Z.js} +12 -12
- package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js → contracts-HN7ABKLP.js} +3 -3
- package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js → contracts-W4FZVVD6.js} +3 -3
- package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js → copy-BTJOSKKT.js} +5 -5
- package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js → copy-DEM4DATS.js} +5 -5
- package/dist/cli-bundle/chunks/create-OH3BDGBB.js +28 -0
- package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js → create-RLRJMRTM.js} +12 -12
- package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js → delete-BHK7VB2Z.js} +5 -5
- package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js → delete-LSVHAB4Y.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js → deps-4UDFJRUA.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js → deps-XHYXWEPT.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-2TIFR62T.js → docs-26S44RXU.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js → docs-GYZNVS26.js} +7 -7
- package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js → eval-PGRVIJQU.js} +10 -10
- package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js → eval-UYF3ZPVO.js} +10 -10
- package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js → extension-CPSLJQVE.js} +11 -10
- package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js → extension-CXJ6RELI.js} +11 -10
- package/dist/cli-bundle/chunks/{files-T5ODMETM.js → files-MBNICQFM.js} +7 -7
- package/dist/cli-bundle/chunks/{files-DF3HO6XK.js → files-NQHEXUZD.js} +7 -7
- package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js → focus-DWYIG7GU.js} +6 -6
- package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js → focus-XZW5423D.js} +6 -6
- package/dist/cli-bundle/chunks/{gc-FULIVYR4.js → gc-7GQYOS2G.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js → gc-LPVMKJQJ.js} +3 -3
- package/dist/cli-bundle/chunks/{get-AWK324RS.js → get-A7MAOHCU.js} +9 -9
- package/dist/cli-bundle/chunks/{get-VYPIICPC.js → get-DSDEKJ3L.js} +9 -9
- package/dist/cli-bundle/chunks/{health-Q66C43GN.js → health-3IPFLKXB.js} +17 -16
- package/dist/cli-bundle/chunks/{health-Q66C43GN.js.map → health-3IPFLKXB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{health-FBCVZGSX.js → health-GZXGBZ36.js} +15 -14
- package/dist/cli-bundle/chunks/{health-FBCVZGSX.js.map → health-GZXGBZ36.js.map} +1 -1
- package/dist/cli-bundle/chunks/{history-X4OSES6K.js → history-NERDJNUB.js} +8 -8
- package/dist/cli-bundle/chunks/history-WSZHY3PN.js +18 -0
- package/dist/cli-bundle/chunks/{history-compact-WLCQEKXS.js → history-compact-2WRZ2WK4.js} +10 -10
- package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.js → history-compact-HR7BB4LR.js} +10 -10
- package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +19 -0
- package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js → history-redact-O3NBCNWC.js} +9 -9
- package/dist/cli-bundle/chunks/{history-repair-GABSDSVD.js → history-repair-LCMOS45X.js} +10 -10
- package/dist/cli-bundle/chunks/{history-repair-FY75IC26.js → history-repair-XA3LC4GA.js} +10 -10
- package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js → init-64XDLQJB.js} +12 -11
- package/dist/cli-bundle/chunks/init-PAX32BJA.js +22 -0
- package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js → learnings-JR6MA5TI.js} +8 -8
- package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js → learnings-LPKCSJX7.js} +8 -8
- package/dist/cli-bundle/chunks/{list-ROT7JF62.js → list-DNBJVO3E.js} +8 -8
- package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js → list-G5Y65VF6.js} +8 -8
- package/dist/cli-bundle/chunks/{next-66BJB4N2.js → next-BCERKDUR.js} +13 -13
- package/dist/cli-bundle/chunks/{next-N5MWJTBY.js → next-FYTQF6HG.js} +13 -13
- package/dist/cli-bundle/chunks/{notes-FW6YFLND.js → notes-2BMU3VVQ.js} +8 -8
- package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js → notes-6KTGO2OJ.js} +8 -8
- package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js → plan-4WXEQCTN.js} +12 -12
- package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js → plan-RKZHQVXR.js} +12 -12
- package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js → profile-4OMM32CD.js} +8 -8
- package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js → profile-QLER5ENE.js} +8 -8
- package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.js → register-list-query-7LV46VAU.js} +18 -18
- package/dist/cli-bundle/chunks/{register-list-query-KY6Z6WV7.js → register-list-query-SNG5PGA4.js} +18 -18
- package/dist/cli-bundle/chunks/{register-mutation-PCARIGZS.js → register-mutation-ENNDUAZG.js} +35 -35
- package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js → register-mutation-KK7PHYYU.js} +35 -35
- package/dist/cli-bundle/chunks/{register-operations-YAT6FUUB.js → register-operations-C6OWLDSH.js} +30 -30
- package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.js → register-operations-HZ6XERQG.js} +30 -30
- package/dist/cli-bundle/chunks/{register-setup-N7UGXYJC.js → register-setup-P67EMBDJ.js} +15 -15
- package/dist/cli-bundle/chunks/{register-setup-MPANILQF.js → register-setup-ZKJ53RS7.js} +15 -15
- package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js → restore-4MHZFJ2E.js} +9 -9
- package/dist/cli-bundle/chunks/restore-YALDGTQR.js +17 -0
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js → scheduling-shortcuts-LB6DOLRL.js} +12 -12
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js → scheduling-shortcuts-UTOYKLXQ.js} +12 -12
- package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js → schema-73HR2OJW.js} +7 -7
- package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js → schema-U6LJKSIR.js} +7 -7
- package/dist/cli-bundle/chunks/{search-CX5UMV4H.js → search-AXPXKZER.js} +10 -10
- package/dist/cli-bundle/chunks/{search-KP6H7COV.js → search-KILGT37L.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js → stats-PSYVVTNZ.js} +6 -6
- package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js → stats-W5KNVJWQ.js} +6 -6
- package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js → telemetry-BZUF6H7G.js} +4 -4
- package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js → telemetry-GAHHQTOS.js} +4 -4
- package/dist/cli-bundle/chunks/{test-QNDXZQCW.js → test-ACD52Z3S.js} +15 -14
- package/dist/cli-bundle/chunks/{test-HU2BS7EY.js → test-PWDIZ255.js} +15 -14
- package/dist/cli-bundle/chunks/{test-all-XLPI4USF.js → test-all-L2MDDUCA.js} +17 -16
- package/dist/cli-bundle/chunks/{test-all-XLPI4USF.js.map → test-all-L2MDDUCA.js.map} +1 -1
- package/dist/cli-bundle/chunks/{test-all-PZTBLLQ6.js → test-all-RBZ6DLU2.js} +15 -14
- package/dist/cli-bundle/chunks/{test-all-PZTBLLQ6.js.map → test-all-RBZ6DLU2.js.map} +1 -1
- package/dist/cli-bundle/chunks/{test-runs-LANLLPVO.js → test-runs-PLRAZEFW.js} +4 -4
- package/dist/cli-bundle/chunks/{test-runs-CA6K32RD.js → test-runs-UXIXPDKU.js} +4 -4
- package/dist/cli-bundle/chunks/update-AMRSOIWP.js +24 -0
- package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js → update-KFX2SIAC.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js → update-many-RNSBX2TA.js} +23 -23
- package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js → update-many-Z5GJS5LC.js} +23 -23
- package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js → upgrade-BRL6KCOJ.js} +13 -12
- package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js.map → upgrade-BRL6KCOJ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js → upgrade-HAK6JG2O.js} +11 -10
- package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js.map → upgrade-HAK6JG2O.js.map} +1 -1
- package/dist/cli-bundle/chunks/{validate-2G566PKQ.js → validate-MTUVL5VC.js} +20 -19
- package/dist/cli-bundle/chunks/{validate-2G566PKQ.js.map → validate-MTUVL5VC.js.map} +1 -1
- package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js → validate-X5W76YJL.js} +22 -21
- package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js.map → validate-X5W76YJL.js.map} +1 -1
- package/dist/cli-bundle/main.js +55 -702
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/core/extensions/activation-summary-markdown.js +23 -12
- package/dist/core/extensions/activation-summary-markdown.js.map +1 -1
- package/dist/core/extensions/extension-policy.d.ts +18 -3
- package/dist/core/extensions/extension-policy.js +116 -106
- package/dist/core/extensions/extension-policy.js.map +1 -1
- package/dist/core/extensions/loader.js +310 -232
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/item/item-format.js +523 -410
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/mcp/server.js +387 -367
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +111 -180
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +76 -45
- package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
- package/dist/sdk/compose.d.ts +4 -1
- package/dist/sdk/compose.js +181 -115
- package/dist/sdk/compose.js.map +1 -1
- package/docs/RELEASING.md +2 -3
- package/package.json +1 -1
- package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +0 -16
- package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js +0 -115
- package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js +0 -118
- package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
- package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-V3KLX7U7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
- package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ZFIEEDTJ.js.map +0 -7
- package/dist/cli-bundle/chunks/close-37KEHLYM.js +0 -14
- package/dist/cli-bundle/chunks/create-DFMNBKBS.js +0 -28
- package/dist/cli-bundle/chunks/history-5XUSLAJA.js +0 -18
- package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +0 -19
- package/dist/cli-bundle/chunks/init-TRYJELH4.js +0 -21
- package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +0 -17
- package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +0 -24
- /package/dist/cli-bundle/chunks/{activity-EJBMXUBH.js.map → activity-AW6XVFH6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-MVSEND6D.js.map → activity-DBLQVIP6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js.map → aggregate-JTEF4BP7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js.map → aggregate-SDF7DUOD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-LEDBAM3K.js.map → append-LOVPGVPT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-KDHT4GHI.js.map → append-QCFJSDFL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js.map → chunk-22WKIL3H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js.map → chunk-2466X6E4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js.map → chunk-27BXPBAY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js.map → chunk-2D4HATP2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js.map → chunk-3K2M5OYU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js.map → chunk-3S2KT7NG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js.map → chunk-3VGN2UWE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js.map → chunk-4DSGXSBL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js.map → chunk-4DUVCVLZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js.map → chunk-5CGRF3L5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js.map → chunk-64HNBBFQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js.map → chunk-A7FPBAQS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js.map → chunk-AVEE5EHK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js.map → chunk-AXIDKKAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js.map → chunk-BDTISOSD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js.map → chunk-CF7RL6FR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js.map → chunk-DDPTYJIM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js.map → chunk-EJUDVUYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js.map → chunk-EVMTBV6V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js.map → chunk-G7I7DEZA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js.map → chunk-GJ326ZKX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js.map → chunk-HPPFYYOV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js.map → chunk-HYTGA6GI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js.map → chunk-HZZEHPRG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js.map → chunk-IJYK2T43.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js.map → chunk-IPYBJWTE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js.map → chunk-IZBR4NRW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js.map → chunk-JLM7BHI7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js.map → chunk-JPECA746.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js.map → chunk-JSU5P7VS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js.map → chunk-KNPEF7QG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js.map → chunk-L5OEFZQG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DRPF274X.js.map → chunk-LB6TP6MC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js.map → chunk-MAUKX7JC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js.map → chunk-N74UMG5H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js.map → chunk-NFDPYAIP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js.map → chunk-NKZAN7BD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js.map → chunk-NOLPZMSV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js.map → chunk-NWMZWYYB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js.map → chunk-OGXLACHC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js.map → chunk-OTUHB4HS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js.map → chunk-RGEMWD6Q.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js.map → chunk-RLDHZHQS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js.map → chunk-RMMQ74TG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js.map → chunk-SLMUGTK3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js.map → chunk-TP5Q5ZD3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js.map → chunk-UYUYDGIB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js.map → chunk-UZIWVBE6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JTRKME24.js.map → chunk-V3NOKJF2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js.map → chunk-VICZWYGZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js.map → chunk-W4ULYO7Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js.map → chunk-WYDHYJPO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js.map → chunk-YITK2PJ6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js.map → chunk-ZRP4VG5U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-6NINZYB3.js.map → claim-EMQLYPRW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js.map → claim-T3GCKV7C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-37KEHLYM.js.map → close-E6ZZGCJY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js.map → close-TQYAAFJP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js.map → close-many-BG5QQIDQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js.map → close-many-LDRVEQY2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js.map → comments-QCKR2YY2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-ETHABIY6.js.map → comments-YUXJRZPQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-FIXJZEQK.js.map → config-DMSU64QO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-X3ZVCUUG.js.map → config-QH2DICD6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-XDI4DKKT.js.map → context-B6275WPX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js.map → context-OCZ3FJ4Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js.map → contracts-HN7ABKLP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js.map → contracts-W4FZVVD6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js.map → copy-BTJOSKKT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js.map → copy-DEM4DATS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-DFMNBKBS.js.map → create-OH3BDGBB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js.map → create-RLRJMRTM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js.map → delete-BHK7VB2Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js.map → delete-LSVHAB4Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js.map → deps-4UDFJRUA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js.map → deps-XHYXWEPT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-2TIFR62T.js.map → docs-26S44RXU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js.map → docs-GYZNVS26.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js.map → eval-PGRVIJQU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js.map → eval-UYF3ZPVO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js.map → extension-CPSLJQVE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js.map → extension-CXJ6RELI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-T5ODMETM.js.map → files-MBNICQFM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-DF3HO6XK.js.map → files-NQHEXUZD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js.map → focus-DWYIG7GU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js.map → focus-XZW5423D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-FULIVYR4.js.map → gc-7GQYOS2G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js.map → gc-LPVMKJQJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-AWK324RS.js.map → get-A7MAOHCU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-VYPIICPC.js.map → get-DSDEKJ3L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-X4OSES6K.js.map → history-NERDJNUB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-5XUSLAJA.js.map → history-WSZHY3PN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-WLCQEKXS.js.map → history-compact-2WRZ2WK4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.js.map → history-compact-HR7BB4LR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-BVHWDXPR.js.map → history-redact-MP6CH7U5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js.map → history-redact-O3NBCNWC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-GABSDSVD.js.map → history-repair-LCMOS45X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-FY75IC26.js.map → history-repair-XA3LC4GA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js.map → init-64XDLQJB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-TRYJELH4.js.map → init-PAX32BJA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js.map → learnings-JR6MA5TI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js.map → learnings-LPKCSJX7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-ROT7JF62.js.map → list-DNBJVO3E.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js.map → list-G5Y65VF6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{next-66BJB4N2.js.map → next-BCERKDUR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{next-N5MWJTBY.js.map → next-FYTQF6HG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-FW6YFLND.js.map → notes-2BMU3VVQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js.map → notes-6KTGO2OJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js.map → plan-4WXEQCTN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js.map → plan-RKZHQVXR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js.map → profile-4OMM32CD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js.map → profile-QLER5ENE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.js.map → register-list-query-7LV46VAU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-KY6Z6WV7.js.map → register-list-query-SNG5PGA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-PCARIGZS.js.map → register-mutation-ENNDUAZG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js.map → register-mutation-KK7PHYYU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-operations-YAT6FUUB.js.map → register-operations-C6OWLDSH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.js.map → register-operations-HZ6XERQG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-N7UGXYJC.js.map → register-setup-P67EMBDJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-MPANILQF.js.map → register-setup-ZKJ53RS7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js.map → restore-4MHZFJ2E.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-IRAKSWIW.js.map → restore-YALDGTQR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js.map → scheduling-shortcuts-LB6DOLRL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js.map → scheduling-shortcuts-UTOYKLXQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js.map → schema-73HR2OJW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js.map → schema-U6LJKSIR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-CX5UMV4H.js.map → search-AXPXKZER.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-KP6H7COV.js.map → search-KILGT37L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js.map → stats-PSYVVTNZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js.map → stats-W5KNVJWQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js.map → telemetry-BZUF6H7G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js.map → telemetry-GAHHQTOS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-QNDXZQCW.js.map → test-ACD52Z3S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-HU2BS7EY.js.map → test-PWDIZ255.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-LANLLPVO.js.map → test-runs-PLRAZEFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-CA6K32RD.js.map → test-runs-UXIXPDKU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-UXDLTEOZ.js.map → update-AMRSOIWP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js.map → update-KFX2SIAC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js.map → update-many-RNSBX2TA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js.map → update-many-Z5GJS5LC.js.map} +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Implements extension runtime contracts and governance for Loader.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
7
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c04aa899-5cba-5907-be3e-4db7c63b7f13")}catch(e){}}();
|
|
8
8
|
import fs from "node:fs/promises";
|
|
9
9
|
import path from "node:path";
|
|
10
10
|
import { pathToFileURL } from "node:url";
|
|
@@ -72,33 +72,151 @@ function parseManifestEngines(value) {
|
|
|
72
72
|
}
|
|
73
73
|
return Object.keys(engines).length > 0 ? engines : undefined;
|
|
74
74
|
}
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
/** Parse a required manifest string field, returning `null` when it is absent, non-string, or blank. */
|
|
76
|
+
function parseRequiredManifestString(candidate, field) {
|
|
77
|
+
const value = candidate[field];
|
|
78
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
77
79
|
return null;
|
|
78
80
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
return value.trim();
|
|
82
|
+
}
|
|
83
|
+
/** Parse an optional integer value (`undefined` when absent, `null` when present but not an integer). */
|
|
84
|
+
function parseOptionalIntegerValue(value) {
|
|
85
|
+
if (value === undefined || value === null) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
if (typeof value !== "number" || !Number.isInteger(value)) {
|
|
81
89
|
return null;
|
|
82
90
|
}
|
|
83
|
-
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
/** Parse an optional boolean value (`undefined` when absent, `null` when present but not a boolean). */
|
|
94
|
+
function parseOptionalBooleanValue(value) {
|
|
95
|
+
if (value === undefined || value === null) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
if (typeof value !== "boolean") {
|
|
84
99
|
return null;
|
|
85
100
|
}
|
|
86
|
-
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
/** Parse the optional integer `priority`, defaulting to {@link DEFAULT_EXTENSION_PRIORITY} when absent and rejecting (`null`) a non-integer. */
|
|
104
|
+
function parseManifestPriority(candidate) {
|
|
105
|
+
const value = parseOptionalIntegerValue(candidate.priority);
|
|
106
|
+
return value === undefined ? DEFAULT_EXTENSION_PRIORITY : value;
|
|
107
|
+
}
|
|
108
|
+
/** Parse the optional `sandbox_profile`, rejecting (`null`) any value that does not round-trip through {@link normalizePolicySandboxProfile}. */
|
|
109
|
+
function parseManifestSandboxProfile(candidate) {
|
|
110
|
+
const value = candidate.sandbox_profile;
|
|
111
|
+
if (value === undefined || value === null) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
if (typeof value !== "string") {
|
|
87
115
|
return null;
|
|
88
116
|
}
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
priority = candidate.priority;
|
|
117
|
+
const normalizedProfile = normalizePolicySandboxProfile(value);
|
|
118
|
+
if (normalizedProfile !== value.trim().toLowerCase()) {
|
|
119
|
+
return null;
|
|
95
120
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
121
|
+
return normalizedProfile;
|
|
122
|
+
}
|
|
123
|
+
/** Return the trimmed string when `value` is a non-blank string, otherwise `undefined`. */
|
|
124
|
+
function optionalTrimmedString(value) {
|
|
125
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
126
|
+
}
|
|
127
|
+
/** Parse the optional `provenance` record (`undefined` absent, `null` malformed), keeping only the present trimmed string fields and a boolean `verified`. */
|
|
128
|
+
function parseManifestProvenance(value) {
|
|
129
|
+
if (value === undefined || value === null) {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
const provenanceRecord = asRecordLoose(value);
|
|
133
|
+
if (!provenanceRecord) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
const source = optionalTrimmedString(provenanceRecord.source);
|
|
137
|
+
const signature = optionalTrimmedString(provenanceRecord.signature);
|
|
138
|
+
const attestation = optionalTrimmedString(provenanceRecord.attestation);
|
|
139
|
+
const verified = provenanceRecord.verified === undefined || provenanceRecord.verified === null
|
|
140
|
+
? undefined
|
|
141
|
+
: typeof provenanceRecord.verified === "boolean"
|
|
142
|
+
? provenanceRecord.verified
|
|
143
|
+
: null;
|
|
144
|
+
if (verified === null) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
...(source ? { source } : {}),
|
|
149
|
+
...(signature ? { signature } : {}),
|
|
150
|
+
...(attestation ? { attestation } : {}),
|
|
151
|
+
...(typeof verified === "boolean" ? { verified } : {}),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/** Parse the optional `permissions` record (`undefined` absent, `null` malformed), keeping only the boolean grants that are present. */
|
|
155
|
+
function parseManifestPermissions(value) {
|
|
156
|
+
if (value === undefined || value === null) {
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
const permissionsRecord = asRecordLoose(value);
|
|
160
|
+
if (!permissionsRecord) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const fsRead = parseOptionalBooleanValue(permissionsRecord.fs_read);
|
|
164
|
+
const fsWrite = parseOptionalBooleanValue(permissionsRecord.fs_write);
|
|
165
|
+
const network = parseOptionalBooleanValue(permissionsRecord.network);
|
|
166
|
+
const envRead = parseOptionalBooleanValue(permissionsRecord.env_read);
|
|
167
|
+
const envWrite = parseOptionalBooleanValue(permissionsRecord.env_write);
|
|
168
|
+
const processSpawn = parseOptionalBooleanValue(permissionsRecord.process_spawn);
|
|
169
|
+
if ([fsRead, fsWrite, network, envRead, envWrite, processSpawn].includes(null)) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
...(typeof fsRead === "boolean" ? { fs_read: fsRead } : {}),
|
|
174
|
+
...(typeof fsWrite === "boolean" ? { fs_write: fsWrite } : {}),
|
|
175
|
+
...(typeof network === "boolean" ? { network } : {}),
|
|
176
|
+
...(typeof envRead === "boolean" ? { env_read: envRead } : {}),
|
|
177
|
+
...(typeof envWrite === "boolean" ? { env_write: envWrite } : {}),
|
|
178
|
+
...(typeof processSpawn === "boolean" ? { process_spawn: processSpawn } : {}),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/** Parse the optional `capabilities` array, normalizing legacy aliases; returns empty lists when absent and `null` when the field is not a string array. */
|
|
182
|
+
function parseManifestCapabilities(value) {
|
|
183
|
+
if (value === undefined || value === null) {
|
|
184
|
+
return { capabilities: [], legacy_aliases: [] };
|
|
185
|
+
}
|
|
186
|
+
if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
const normalizedCapabilities = normalizeManifestCapabilities(value);
|
|
190
|
+
return { capabilities: normalizedCapabilities.capabilities, legacy_aliases: normalizedCapabilities.legacy_aliases };
|
|
191
|
+
}
|
|
192
|
+
/** Parse the optional `activation` block, returning the de-duplicated sorted `commands` set, `undefined` when no command activation is declared, and `null` when the block is malformed. */
|
|
193
|
+
function parseManifestActivation(value) {
|
|
194
|
+
if (value === undefined || value === null) {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
const activationRecord = asRecordLoose(value);
|
|
198
|
+
if (!activationRecord) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
const rawCommands = activationRecord.commands;
|
|
202
|
+
if (rawCommands === undefined || rawCommands === null) {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
if (!Array.isArray(rawCommands) || rawCommands.some((entry) => typeof entry !== "string")) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
const commands = [
|
|
209
|
+
...new Set(rawCommands
|
|
210
|
+
.map((entry) => normalizeCommandName(entry))
|
|
211
|
+
.filter((entry) => entry.length > 0)),
|
|
212
|
+
].sort((left, right) => left.localeCompare(right));
|
|
213
|
+
return commands.length > 0 ? { commands } : undefined;
|
|
214
|
+
}
|
|
215
|
+
/** Parse every optional manifest metadata field, returning `null` as soon as any one is malformed. */
|
|
216
|
+
function parseManifestMetadata(candidate) {
|
|
217
|
+
const manifestVersion = parseOptionalIntegerValue(candidate.manifest_version);
|
|
218
|
+
if (manifestVersion === null) {
|
|
219
|
+
return null;
|
|
102
220
|
}
|
|
103
221
|
const pmMinVersion = parseOptionalManifestString(candidate, "pm_min_version");
|
|
104
222
|
if (pmMinVersion === null) {
|
|
@@ -112,136 +230,85 @@ function parseManifest(raw) {
|
|
|
112
230
|
if (engines === null) {
|
|
113
231
|
return null;
|
|
114
232
|
}
|
|
115
|
-
|
|
116
|
-
if (
|
|
117
|
-
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
trusted = candidate.trusted;
|
|
233
|
+
const trusted = parseOptionalBooleanValue(candidate.trusted);
|
|
234
|
+
if (trusted === null) {
|
|
235
|
+
return null;
|
|
121
236
|
}
|
|
122
|
-
|
|
123
|
-
if (
|
|
124
|
-
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
const normalizedProfile = normalizePolicySandboxProfile(candidate.sandbox_profile);
|
|
128
|
-
if (normalizedProfile !== candidate.sandbox_profile.trim().toLowerCase()) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
sandboxProfile = normalizedProfile;
|
|
237
|
+
const sandboxProfile = parseManifestSandboxProfile(candidate);
|
|
238
|
+
if (sandboxProfile === null) {
|
|
239
|
+
return null;
|
|
132
240
|
}
|
|
133
|
-
|
|
134
|
-
if (
|
|
135
|
-
|
|
136
|
-
if (!provenanceRecord) {
|
|
137
|
-
return null;
|
|
138
|
-
}
|
|
139
|
-
const source = typeof provenanceRecord.source === "string" && provenanceRecord.source.trim().length > 0
|
|
140
|
-
? provenanceRecord.source.trim()
|
|
141
|
-
: undefined;
|
|
142
|
-
const signature = typeof provenanceRecord.signature === "string" && provenanceRecord.signature.trim().length > 0
|
|
143
|
-
? provenanceRecord.signature.trim()
|
|
144
|
-
: undefined;
|
|
145
|
-
const attestation = typeof provenanceRecord.attestation === "string" && provenanceRecord.attestation.trim().length > 0
|
|
146
|
-
? provenanceRecord.attestation.trim()
|
|
147
|
-
: undefined;
|
|
148
|
-
const verified = provenanceRecord.verified === undefined || provenanceRecord.verified === null
|
|
149
|
-
? undefined
|
|
150
|
-
: typeof provenanceRecord.verified === "boolean"
|
|
151
|
-
? provenanceRecord.verified
|
|
152
|
-
: null;
|
|
153
|
-
if (verified === null) {
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
provenance = {
|
|
157
|
-
...(source ? { source } : {}),
|
|
158
|
-
...(signature ? { signature } : {}),
|
|
159
|
-
...(attestation ? { attestation } : {}),
|
|
160
|
-
...(typeof verified === "boolean" ? { verified } : {}),
|
|
161
|
-
};
|
|
241
|
+
const provenance = parseManifestProvenance(candidate.provenance);
|
|
242
|
+
if (provenance === null) {
|
|
243
|
+
return null;
|
|
162
244
|
}
|
|
163
|
-
|
|
164
|
-
if (
|
|
165
|
-
|
|
166
|
-
if (!permissionsRecord) {
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
const parseOptionalBoolean = (value) => {
|
|
170
|
-
if (value === undefined || value === null) {
|
|
171
|
-
return undefined;
|
|
172
|
-
}
|
|
173
|
-
if (typeof value !== "boolean") {
|
|
174
|
-
return null;
|
|
175
|
-
}
|
|
176
|
-
return value;
|
|
177
|
-
};
|
|
178
|
-
const fsRead = parseOptionalBoolean(permissionsRecord.fs_read);
|
|
179
|
-
const fsWrite = parseOptionalBoolean(permissionsRecord.fs_write);
|
|
180
|
-
const network = parseOptionalBoolean(permissionsRecord.network);
|
|
181
|
-
const envRead = parseOptionalBoolean(permissionsRecord.env_read);
|
|
182
|
-
const envWrite = parseOptionalBoolean(permissionsRecord.env_write);
|
|
183
|
-
const processSpawn = parseOptionalBoolean(permissionsRecord.process_spawn);
|
|
184
|
-
if ([fsRead, fsWrite, network, envRead, envWrite, processSpawn].includes(null)) {
|
|
185
|
-
return null;
|
|
186
|
-
}
|
|
187
|
-
permissions = {
|
|
188
|
-
...(typeof fsRead === "boolean" ? { fs_read: fsRead } : {}),
|
|
189
|
-
...(typeof fsWrite === "boolean" ? { fs_write: fsWrite } : {}),
|
|
190
|
-
...(typeof network === "boolean" ? { network } : {}),
|
|
191
|
-
...(typeof envRead === "boolean" ? { env_read: envRead } : {}),
|
|
192
|
-
...(typeof envWrite === "boolean" ? { env_write: envWrite } : {}),
|
|
193
|
-
...(typeof processSpawn === "boolean" ? { process_spawn: processSpawn } : {}),
|
|
194
|
-
};
|
|
245
|
+
const permissions = parseManifestPermissions(candidate.permissions);
|
|
246
|
+
if (permissions === null) {
|
|
247
|
+
return null;
|
|
195
248
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
if (!Array.isArray(candidate.capabilities) || candidate.capabilities.some((value) => typeof value !== "string")) {
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
const normalizedCapabilities = normalizeManifestCapabilities(candidate.capabilities);
|
|
203
|
-
capabilities = normalizedCapabilities.capabilities;
|
|
204
|
-
legacyCapabilityAliases = normalizedCapabilities.legacy_aliases;
|
|
249
|
+
const capabilities = parseManifestCapabilities(candidate.capabilities);
|
|
250
|
+
if (capabilities === null) {
|
|
251
|
+
return null;
|
|
205
252
|
}
|
|
206
|
-
|
|
207
|
-
if (
|
|
208
|
-
|
|
209
|
-
if (!activationRecord) {
|
|
210
|
-
return null;
|
|
211
|
-
}
|
|
212
|
-
const rawCommands = activationRecord.commands;
|
|
213
|
-
if (rawCommands !== undefined && rawCommands !== null) {
|
|
214
|
-
if (!Array.isArray(rawCommands) || rawCommands.some((value) => typeof value !== "string")) {
|
|
215
|
-
return null;
|
|
216
|
-
}
|
|
217
|
-
const commands = [
|
|
218
|
-
...new Set(rawCommands
|
|
219
|
-
.map((value) => normalizeCommandName(value))
|
|
220
|
-
.filter((value) => value.length > 0)),
|
|
221
|
-
].sort((left, right) => left.localeCompare(right));
|
|
222
|
-
if (commands.length > 0) {
|
|
223
|
-
activation = {
|
|
224
|
-
commands,
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
}
|
|
253
|
+
const activation = parseManifestActivation(candidate.activation);
|
|
254
|
+
if (activation === null) {
|
|
255
|
+
return null;
|
|
228
256
|
}
|
|
229
257
|
return {
|
|
230
|
-
name: candidate.name.trim(),
|
|
231
|
-
version: candidate.version.trim(),
|
|
232
|
-
entry: candidate.entry.trim(),
|
|
233
|
-
priority,
|
|
234
258
|
manifest_version: manifestVersion,
|
|
235
259
|
pm_min_version: pmMinVersion,
|
|
236
260
|
pm_max_version: pmMaxVersion,
|
|
237
261
|
engines,
|
|
238
262
|
trusted,
|
|
239
|
-
provenance,
|
|
240
263
|
sandbox_profile: sandboxProfile,
|
|
264
|
+
provenance,
|
|
241
265
|
permissions,
|
|
266
|
+
capabilities: capabilities.capabilities,
|
|
267
|
+
legacy_capability_aliases: capabilities.legacy_aliases,
|
|
242
268
|
activation,
|
|
243
|
-
|
|
244
|
-
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
function parseManifest(raw) {
|
|
272
|
+
if (typeof raw !== "object" || raw === null) {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
const candidate = raw;
|
|
276
|
+
const name = parseRequiredManifestString(candidate, "name");
|
|
277
|
+
if (name === null) {
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
const version = parseRequiredManifestString(candidate, "version");
|
|
281
|
+
if (version === null) {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
const entry = parseRequiredManifestString(candidate, "entry");
|
|
285
|
+
if (entry === null) {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
const priority = parseManifestPriority(candidate);
|
|
289
|
+
if (priority === null) {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
const metadata = parseManifestMetadata(candidate);
|
|
293
|
+
if (metadata === null) {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
return {
|
|
297
|
+
name,
|
|
298
|
+
version,
|
|
299
|
+
entry,
|
|
300
|
+
priority,
|
|
301
|
+
manifest_version: metadata.manifest_version,
|
|
302
|
+
pm_min_version: metadata.pm_min_version,
|
|
303
|
+
pm_max_version: metadata.pm_max_version,
|
|
304
|
+
engines: metadata.engines,
|
|
305
|
+
trusted: metadata.trusted,
|
|
306
|
+
provenance: metadata.provenance,
|
|
307
|
+
sandbox_profile: metadata.sandbox_profile,
|
|
308
|
+
permissions: metadata.permissions,
|
|
309
|
+
activation: metadata.activation,
|
|
310
|
+
capabilities: metadata.capabilities,
|
|
311
|
+
legacy_capability_aliases: metadata.legacy_capability_aliases.length > 0 ? metadata.legacy_capability_aliases : undefined,
|
|
245
312
|
};
|
|
246
313
|
}
|
|
247
314
|
function shouldEnable(name, enabled, disabled) {
|
|
@@ -380,26 +447,61 @@ async function scanExtensionLayer(layer, extensionsRoot, enabled, disabled, pmMa
|
|
|
380
447
|
}
|
|
381
448
|
return { diagnostics, warnings, candidates };
|
|
382
449
|
}
|
|
450
|
+
/**
|
|
451
|
+
* Build the `warn`-status scan result for a directory whose manifest is missing
|
|
452
|
+
* or unparseable, carrying the supplied diagnostic warning and no candidate.
|
|
453
|
+
*/
|
|
454
|
+
function buildUnavailableExtensionScan(layer, directory, manifestPath, warning) {
|
|
455
|
+
return {
|
|
456
|
+
diagnostic: {
|
|
457
|
+
layer,
|
|
458
|
+
directory,
|
|
459
|
+
manifest_path: manifestPath,
|
|
460
|
+
name: null,
|
|
461
|
+
version: null,
|
|
462
|
+
entry: null,
|
|
463
|
+
priority: null,
|
|
464
|
+
entry_path: null,
|
|
465
|
+
enabled: null,
|
|
466
|
+
status: "warn",
|
|
467
|
+
},
|
|
468
|
+
warnings: [warning],
|
|
469
|
+
candidate: null,
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Collect the non-fatal load warnings for a parsed extension manifest, in
|
|
474
|
+
* detection order: legacy capability aliases, unknown capabilities, an entry
|
|
475
|
+
* outside or absent from the extension directory, then the pm version
|
|
476
|
+
* floor/ceiling incompatibility warnings.
|
|
477
|
+
*/
|
|
478
|
+
function collectScannedExtensionWarnings(layer, manifest, entryWithinDirectory, entryExists, pmVersionCompatibility, pmMaxVersionCompatibility) {
|
|
479
|
+
const extensionWarnings = [];
|
|
480
|
+
if (Array.isArray(manifest.legacy_capability_aliases) && manifest.legacy_capability_aliases.length > 0) {
|
|
481
|
+
extensionWarnings.push(formatLegacyExtensionCapabilityAliasWarning(layer, manifest.name, manifest.legacy_capability_aliases));
|
|
482
|
+
}
|
|
483
|
+
for (const capability of collectUnknownExtensionCapabilities(manifest.capabilities)) {
|
|
484
|
+
extensionWarnings.push(formatUnknownExtensionCapabilityWarning(layer, manifest.name, capability));
|
|
485
|
+
}
|
|
486
|
+
if (!entryWithinDirectory) {
|
|
487
|
+
extensionWarnings.push(`extension_entry_outside_extension:${layer}:${manifest.name}`);
|
|
488
|
+
}
|
|
489
|
+
else if (!entryExists) {
|
|
490
|
+
extensionWarnings.push(`extension_entry_missing:${layer}:${manifest.name}`);
|
|
491
|
+
}
|
|
492
|
+
if (pmVersionCompatibility.warning) {
|
|
493
|
+
extensionWarnings.push(pmVersionCompatibility.warning);
|
|
494
|
+
}
|
|
495
|
+
if (pmMaxVersionCompatibility.warning) {
|
|
496
|
+
extensionWarnings.push(pmMaxVersionCompatibility.warning);
|
|
497
|
+
}
|
|
498
|
+
return extensionWarnings;
|
|
499
|
+
}
|
|
383
500
|
async function scanExtensionDirectory(layer, extensionsRoot, directory, enabled, disabled, managedSourcePackages, pmMaxVersionExceededMode) {
|
|
384
501
|
const extensionDir = path.join(extensionsRoot, directory);
|
|
385
502
|
const manifestPath = path.join(extensionDir, "manifest.json");
|
|
386
503
|
if (!(await pathExists(manifestPath))) {
|
|
387
|
-
return {
|
|
388
|
-
diagnostic: {
|
|
389
|
-
layer,
|
|
390
|
-
directory,
|
|
391
|
-
manifest_path: manifestPath,
|
|
392
|
-
name: null,
|
|
393
|
-
version: null,
|
|
394
|
-
entry: null,
|
|
395
|
-
priority: null,
|
|
396
|
-
entry_path: null,
|
|
397
|
-
enabled: null,
|
|
398
|
-
status: "warn",
|
|
399
|
-
},
|
|
400
|
-
warnings: [`extension_manifest_missing:${layer}:${directory}`],
|
|
401
|
-
candidate: null,
|
|
402
|
-
};
|
|
504
|
+
return buildUnavailableExtensionScan(layer, directory, manifestPath, `extension_manifest_missing:${layer}:${directory}`);
|
|
403
505
|
}
|
|
404
506
|
let manifest = null;
|
|
405
507
|
try {
|
|
@@ -410,22 +512,7 @@ async function scanExtensionDirectory(layer, extensionsRoot, directory, enabled,
|
|
|
410
512
|
manifest = null;
|
|
411
513
|
}
|
|
412
514
|
if (!manifest) {
|
|
413
|
-
return {
|
|
414
|
-
diagnostic: {
|
|
415
|
-
layer,
|
|
416
|
-
directory,
|
|
417
|
-
manifest_path: manifestPath,
|
|
418
|
-
name: null,
|
|
419
|
-
version: null,
|
|
420
|
-
entry: null,
|
|
421
|
-
priority: null,
|
|
422
|
-
entry_path: null,
|
|
423
|
-
enabled: null,
|
|
424
|
-
status: "warn",
|
|
425
|
-
},
|
|
426
|
-
warnings: [`extension_manifest_invalid:${layer}:${directory}`],
|
|
427
|
-
candidate: null,
|
|
428
|
-
};
|
|
515
|
+
return buildUnavailableExtensionScan(layer, directory, manifestPath, `extension_manifest_invalid:${layer}:${directory}`);
|
|
429
516
|
}
|
|
430
517
|
const entryPath = path.resolve(extensionDir, manifest.entry);
|
|
431
518
|
const entryWithinDirectoryByPath = isPathWithinDirectory(extensionDir, entryPath);
|
|
@@ -434,27 +521,9 @@ async function scanExtensionDirectory(layer, extensionsRoot, directory, enabled,
|
|
|
434
521
|
? await isCanonicalPathWithinDirectory(extensionDir, entryPath)
|
|
435
522
|
: entryWithinDirectoryByPath;
|
|
436
523
|
const enabledForLoad = shouldEnable(manifest.name, enabled, disabled);
|
|
437
|
-
const extensionWarnings = [];
|
|
438
|
-
if (Array.isArray(manifest.legacy_capability_aliases) && manifest.legacy_capability_aliases.length > 0) {
|
|
439
|
-
extensionWarnings.push(formatLegacyExtensionCapabilityAliasWarning(layer, manifest.name, manifest.legacy_capability_aliases));
|
|
440
|
-
}
|
|
441
|
-
for (const capability of collectUnknownExtensionCapabilities(manifest.capabilities)) {
|
|
442
|
-
extensionWarnings.push(formatUnknownExtensionCapabilityWarning(layer, manifest.name, capability));
|
|
443
|
-
}
|
|
444
|
-
if (!entryWithinDirectory) {
|
|
445
|
-
extensionWarnings.push(`extension_entry_outside_extension:${layer}:${manifest.name}`);
|
|
446
|
-
}
|
|
447
|
-
else if (!entryExists) {
|
|
448
|
-
extensionWarnings.push(`extension_entry_missing:${layer}:${manifest.name}`);
|
|
449
|
-
}
|
|
450
524
|
const pmVersionCompatibility = await evaluatePmMinVersionCompatibility(layer, manifest);
|
|
451
|
-
if (pmVersionCompatibility.warning) {
|
|
452
|
-
extensionWarnings.push(pmVersionCompatibility.warning);
|
|
453
|
-
}
|
|
454
525
|
const pmMaxVersionCompatibility = await evaluatePmMaxVersionCompatibility(layer, manifest, pmMaxVersionExceededMode);
|
|
455
|
-
|
|
456
|
-
extensionWarnings.push(pmMaxVersionCompatibility.warning);
|
|
457
|
-
}
|
|
526
|
+
const extensionWarnings = collectScannedExtensionWarnings(layer, manifest, entryWithinDirectory, entryExists, pmVersionCompatibility, pmMaxVersionCompatibility);
|
|
458
527
|
const extensionReady = entryWithinDirectory &&
|
|
459
528
|
entryExists &&
|
|
460
529
|
pmVersionCompatibility.allowed &&
|
|
@@ -1374,69 +1443,70 @@ function createExtensionApi(extension, hooks, commands, parsers, preflight, serv
|
|
|
1374
1443
|
received: sanitizeRegistrationValue(received),
|
|
1375
1444
|
hint,
|
|
1376
1445
|
});
|
|
1377
|
-
const
|
|
1378
|
-
|
|
1379
|
-
if (
|
|
1380
|
-
|
|
1381
|
-
if (normalizedCommand.length === 0) {
|
|
1382
|
-
throw createRegistrationValidationError("registerCommand requires a non-empty command name", registerCommandTrace("override", commandOrDefinition, 'registerCommand("<command>", (context) => unknown)', commandOrDefinition, "Provide a non-empty command path as the first argument."));
|
|
1383
|
-
}
|
|
1384
|
-
if (typeof override !== "function") {
|
|
1385
|
-
const trace = registerCommandTrace("override", normalizedCommand, 'registerCommand("<command>", (context) => unknown)', { command: commandOrDefinition, override }, "Provide a function as the second registerCommand argument.");
|
|
1386
|
-
throw createRegistrationValidationError(`registerCommand requires an override function when command name is provided (command="${normalizedCommand}", registration_index=${trace.registration_index})`, trace);
|
|
1387
|
-
}
|
|
1388
|
-
if (!allowRegistration("commands.override", "registerCommand", "commands", { command: normalizedCommand })) {
|
|
1389
|
-
return;
|
|
1390
|
-
}
|
|
1391
|
-
commands.overrides.push({
|
|
1392
|
-
layer: extension.layer,
|
|
1393
|
-
name: extension.name,
|
|
1394
|
-
command: normalizedCommand,
|
|
1395
|
-
run: override,
|
|
1396
|
-
});
|
|
1397
|
-
return;
|
|
1398
|
-
}
|
|
1399
|
-
if (typeof commandOrDefinition !== "object" || commandOrDefinition === null) {
|
|
1400
|
-
throw createRegistrationValidationError("registerCommand requires a command definition object", registerCommandTrace("definition", undefined, "{ name: string; run: (context) => unknown; }", commandOrDefinition, "Use registerCommand({ name: \"command path\", run: (context) => ... })."));
|
|
1446
|
+
const registerCommandOverride = (command, override) => {
|
|
1447
|
+
const normalizedCommand = normalizeCommandName(command);
|
|
1448
|
+
if (normalizedCommand.length === 0) {
|
|
1449
|
+
throw createRegistrationValidationError("registerCommand requires a non-empty command name", registerCommandTrace("override", command, 'registerCommand("<command>", (context) => unknown)', command, "Provide a non-empty command path as the first argument."));
|
|
1401
1450
|
}
|
|
1402
|
-
if (typeof
|
|
1403
|
-
|
|
1451
|
+
if (typeof override !== "function") {
|
|
1452
|
+
const trace = registerCommandTrace("override", normalizedCommand, 'registerCommand("<command>", (context) => unknown)', { command, override }, "Provide a function as the second registerCommand argument.");
|
|
1453
|
+
throw createRegistrationValidationError(`registerCommand requires an override function when command name is provided (command="${normalizedCommand}", registration_index=${trace.registration_index})`, trace);
|
|
1404
1454
|
}
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
throw createRegistrationValidationError("registerCommand requires a non-empty command definition name", registerCommandTrace("definition", commandOrDefinition.name, "{ name: string; run: (context) => unknown; }", commandOrDefinition, "Ensure command definition.name contains a non-empty command path."));
|
|
1455
|
+
if (!allowRegistration("commands.override", "registerCommand", "commands", { command: normalizedCommand })) {
|
|
1456
|
+
return;
|
|
1408
1457
|
}
|
|
1409
|
-
|
|
1410
|
-
|
|
1458
|
+
commands.overrides.push({
|
|
1459
|
+
layer: extension.layer,
|
|
1460
|
+
name: extension.name,
|
|
1461
|
+
command: normalizedCommand,
|
|
1462
|
+
run: override,
|
|
1463
|
+
});
|
|
1464
|
+
};
|
|
1465
|
+
const resolveCommandDefinitionRunHandler = (definition, normalizedCommand) => {
|
|
1466
|
+
const runHandler = typeof definition.run === "function" ? definition.run : undefined;
|
|
1467
|
+
const legacyHandler = typeof definition.handler === "function" ? definition.handler : undefined;
|
|
1411
1468
|
if (!runHandler && legacyHandler) {
|
|
1412
1469
|
activationWarnings.push(`extension_command_definition_legacy_handler_alias:${extension.layer}:${extension.name}:${normalizedCommand}`);
|
|
1413
1470
|
}
|
|
1414
|
-
|
|
1471
|
+
return runHandler ?? legacyHandler;
|
|
1472
|
+
};
|
|
1473
|
+
const registerCommandDefinition = (definition) => {
|
|
1474
|
+
if (typeof definition !== "object" || definition === null) {
|
|
1475
|
+
throw createRegistrationValidationError("registerCommand requires a command definition object", registerCommandTrace("definition", undefined, "{ name: string; run: (context) => unknown; }", definition, "Use registerCommand({ name: \"command path\", run: (context) => ... })."));
|
|
1476
|
+
}
|
|
1477
|
+
if (typeof definition.name !== "string") {
|
|
1478
|
+
throw createRegistrationValidationError("registerCommand requires a command definition name", registerCommandTrace("definition", undefined, "{ name: string; run: (context) => unknown; }", definition, "Set command definition.name to a non-empty string command path."));
|
|
1479
|
+
}
|
|
1480
|
+
const normalizedCommand = normalizeCommandName(definition.name);
|
|
1481
|
+
if (normalizedCommand.length === 0) {
|
|
1482
|
+
throw createRegistrationValidationError("registerCommand requires a non-empty command definition name", registerCommandTrace("definition", definition.name, "{ name: string; run: (context) => unknown; }", definition, "Ensure command definition.name contains a non-empty command path."));
|
|
1483
|
+
}
|
|
1484
|
+
const resolvedHandler = resolveCommandDefinitionRunHandler(definition, normalizedCommand);
|
|
1415
1485
|
if (typeof resolvedHandler !== "function") {
|
|
1416
|
-
const trace = registerCommandTrace("definition", normalizedCommand, "{ name: string; run: (context) => unknown; }",
|
|
1486
|
+
const trace = registerCommandTrace("definition", normalizedCommand, "{ name: string; run: (context) => unknown; }", definition, "Define command definition.run as a function.");
|
|
1417
1487
|
throw createRegistrationValidationError(`registerCommand requires a command definition run handler (command="${normalizedCommand}", registration_index=${trace.registration_index})`, trace);
|
|
1418
1488
|
}
|
|
1419
1489
|
try {
|
|
1420
|
-
assertOptionalStringField("registerCommand definition.action",
|
|
1421
|
-
assertOptionalStringField("registerCommand definition.description",
|
|
1422
|
-
assertOptionalStringField("registerCommand definition.intent",
|
|
1423
|
-
const action = resolveCommandDefinitionAction(normalizedCommand,
|
|
1490
|
+
assertOptionalStringField("registerCommand definition.action", definition.action);
|
|
1491
|
+
assertOptionalStringField("registerCommand definition.description", definition.description);
|
|
1492
|
+
assertOptionalStringField("registerCommand definition.intent", definition.intent);
|
|
1493
|
+
const action = resolveCommandDefinitionAction(normalizedCommand, definition.action);
|
|
1424
1494
|
if (!allowRegistration("commands.handler", "registerCommand", "commands", { command: normalizedCommand, action })) {
|
|
1425
1495
|
return;
|
|
1426
1496
|
}
|
|
1427
|
-
const description =
|
|
1428
|
-
const intent =
|
|
1429
|
-
const examples = normalizeOptionalStringArrayField("registerCommand definition.examples",
|
|
1430
|
-
const failureHints = normalizeOptionalStringArrayField("registerCommand definition.failure_hints",
|
|
1431
|
-
const argumentsDefinition = normalizeCommandDefinitionArguments(
|
|
1432
|
-
if (
|
|
1497
|
+
const description = definition.description?.trim();
|
|
1498
|
+
const intent = definition.intent?.trim();
|
|
1499
|
+
const examples = normalizeOptionalStringArrayField("registerCommand definition.examples", definition.examples);
|
|
1500
|
+
const failureHints = normalizeOptionalStringArrayField("registerCommand definition.failure_hints", definition.failure_hints);
|
|
1501
|
+
const argumentsDefinition = normalizeCommandDefinitionArguments(definition.arguments);
|
|
1502
|
+
if (definition.flags !== undefined) {
|
|
1433
1503
|
assertExtensionCapability(extension, "schema", "registerCommand flags");
|
|
1434
|
-
validateFlagDefinitions(
|
|
1504
|
+
validateFlagDefinitions(definition.flags);
|
|
1435
1505
|
registrations.flags.push({
|
|
1436
1506
|
layer: extension.layer,
|
|
1437
1507
|
name: extension.name,
|
|
1438
1508
|
target_command: normalizedCommand,
|
|
1439
|
-
flags: normalizeRegistrationRecordList("registerCommand definition.flags",
|
|
1509
|
+
flags: normalizeRegistrationRecordList("registerCommand definition.flags", definition.flags),
|
|
1440
1510
|
});
|
|
1441
1511
|
}
|
|
1442
1512
|
const registration = {
|
|
@@ -1459,7 +1529,7 @@ function createExtensionApi(extension, hooks, commands, parsers, preflight, serv
|
|
|
1459
1529
|
}
|
|
1460
1530
|
catch (error) {
|
|
1461
1531
|
const reason = formatUnknownError(error);
|
|
1462
|
-
const trace = registerCommandTrace("definition", normalizedCommand, "{ name: string; run: (context) => unknown; action?: string; arguments?: object[]; flags?: object[]; }",
|
|
1532
|
+
const trace = registerCommandTrace("definition", normalizedCommand, "{ name: string; run: (context) => unknown; action?: string; arguments?: object[]; flags?: object[]; }", definition, "Use schema-style metadata (action/arguments/flags/examples/intent) with valid values.");
|
|
1463
1533
|
throw createRegistrationValidationError(`registerCommand definition metadata invalid (command="${normalizedCommand}", registration_index=${trace.registration_index}): ${reason}`, trace);
|
|
1464
1534
|
}
|
|
1465
1535
|
commands.handlers.push({
|
|
@@ -1469,6 +1539,14 @@ function createExtensionApi(extension, hooks, commands, parsers, preflight, serv
|
|
|
1469
1539
|
run: resolvedHandler,
|
|
1470
1540
|
});
|
|
1471
1541
|
};
|
|
1542
|
+
const registerCommand = (commandOrDefinition, override) => {
|
|
1543
|
+
assertExtensionCapability(extension, "commands", "registerCommand");
|
|
1544
|
+
if (typeof commandOrDefinition === "string") {
|
|
1545
|
+
registerCommandOverride(commandOrDefinition, override);
|
|
1546
|
+
return;
|
|
1547
|
+
}
|
|
1548
|
+
registerCommandDefinition(commandOrDefinition);
|
|
1549
|
+
};
|
|
1472
1550
|
const registerParser = (command, override) => {
|
|
1473
1551
|
assertExtensionCapability(extension, "parser", "registerParser");
|
|
1474
1552
|
if (!allowRegistration("parser.override", "registerParser", "parser")) {
|
|
@@ -2063,4 +2141,4 @@ export const _testOnlyLoader = {
|
|
|
2063
2141
|
},
|
|
2064
2142
|
};
|
|
2065
2143
|
//# sourceMappingURL=loader.js.map
|
|
2066
|
-
//# debugId=
|
|
2144
|
+
//# debugId=c04aa899-5cba-5907-be3e-4db7c63b7f13
|