@unbrained/pm-cli 2026.6.22 → 2026.6.24

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.
Files changed (425) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/cli/commands/completion.js +5 -4
  3. package/dist/cli/commands/completion.js.map +1 -1
  4. package/dist/cli/commands/contracts.js +4 -3
  5. package/dist/cli/commands/contracts.js.map +1 -1
  6. package/dist/cli/commands/extension/describe.d.ts +70 -0
  7. package/dist/cli/commands/extension/describe.js +76 -0
  8. package/dist/cli/commands/extension/describe.js.map +1 -0
  9. package/dist/cli/commands/extension/scaffold.js +183 -47
  10. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  11. package/dist/cli/commands/extension.d.ts +2 -1
  12. package/dist/cli/commands/extension.js +36 -4
  13. package/dist/cli/commands/extension.js.map +1 -1
  14. package/dist/cli/help-content.js +6 -2
  15. package/dist/cli/help-content.js.map +1 -1
  16. package/dist/cli/register-setup.js +10 -2
  17. package/dist/cli/register-setup.js.map +1 -1
  18. package/dist/cli-bundle/chunks/activity-54TXGJ2T.js +18 -0
  19. package/dist/cli-bundle/chunks/{activity-DXS2XMQU.js → activity-N7RVTLBQ.js} +11 -11
  20. package/dist/cli-bundle/chunks/{aggregate-IHM4KMQ3.js → aggregate-63NWNIBR.js} +10 -10
  21. package/dist/cli-bundle/chunks/{aggregate-NMYDVQF7.js → aggregate-YHCYX2EV.js} +10 -10
  22. package/dist/cli-bundle/chunks/{append-3HY5G7ET.js → append-PUKREFV5.js} +8 -8
  23. package/dist/cli-bundle/chunks/{append-K54MDQYC.js → append-VLQQDHMJ.js} +8 -8
  24. package/dist/cli-bundle/chunks/{chunk-DU64SZUQ.js → chunk-2WCYE3IF.js} +2 -2
  25. package/dist/cli-bundle/chunks/{chunk-NKZOJPXK.js → chunk-3BKH2CL3.js} +3 -3
  26. package/dist/cli-bundle/chunks/{chunk-7MALIV5H.js → chunk-4XDGYFHL.js} +9 -9
  27. package/dist/cli-bundle/chunks/{chunk-VB54F347.js → chunk-5BBEWX6C.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-DHBPJ7VG.js → chunk-5S4ZGDB2.js} +2 -2
  29. package/dist/cli-bundle/chunks/{chunk-UKK2VTTH.js → chunk-6EBNFQOR.js} +9 -9
  30. package/dist/cli-bundle/chunks/{chunk-5SESR24H.js → chunk-6EL7SW5C.js} +8 -8
  31. package/dist/cli-bundle/chunks/{chunk-JLSC5NPC.js → chunk-6W3Y65PL.js} +10 -10
  32. package/dist/cli-bundle/chunks/{chunk-HYQV75IB.js → chunk-A66VYUOV.js} +7 -7
  33. package/dist/cli-bundle/chunks/{chunk-I367IDZP.js → chunk-ABYCA5VX.js} +7 -7
  34. package/dist/cli-bundle/chunks/{chunk-47HTJ6BU.js → chunk-AEACLRVH.js} +5 -5
  35. package/dist/cli-bundle/chunks/{chunk-MD7XKVWI.js → chunk-ALKFCIIB.js} +7 -7
  36. package/dist/cli-bundle/chunks/{chunk-B2KR24R4.js → chunk-ALQKV6U7.js} +9 -9
  37. package/dist/cli-bundle/chunks/{chunk-NIWY4V4Z.js → chunk-AYPQUFCX.js} +3 -3
  38. package/dist/cli-bundle/chunks/{chunk-AJXYOYJV.js → chunk-B74BP6IS.js} +2 -2
  39. package/dist/cli-bundle/chunks/{chunk-THKDPOS5.js → chunk-BFFO3AIB.js} +8 -8
  40. package/dist/cli-bundle/chunks/{chunk-CR7KFPAQ.js → chunk-C4C3EJCJ.js} +3 -3
  41. package/dist/cli-bundle/chunks/{chunk-J2TSPY5L.js → chunk-CG3KP6I5.js} +4 -4
  42. package/dist/cli-bundle/chunks/{chunk-CWPBGUC7.js → chunk-CZIFFMZI.js} +2 -2
  43. package/dist/cli-bundle/chunks/{chunk-75VEYQJS.js → chunk-DTABLLVE.js} +3 -3
  44. package/dist/cli-bundle/chunks/{chunk-TIKJAXQW.js → chunk-EOGBMLCE.js} +3 -3
  45. package/dist/cli-bundle/chunks/{chunk-YATDFWYK.js → chunk-EWRSXOIZ.js} +7 -7
  46. package/dist/cli-bundle/chunks/{chunk-RZZMSY4P.js → chunk-EYPINTFR.js} +151 -98
  47. package/dist/cli-bundle/chunks/chunk-EYPINTFR.js.map +7 -0
  48. package/dist/cli-bundle/chunks/{chunk-RPRFBXND.js → chunk-F32L4HR6.js} +3 -3
  49. package/dist/cli-bundle/chunks/{chunk-NVUATMTC.js → chunk-F4BNR2IN.js} +3 -3
  50. package/dist/cli-bundle/chunks/{chunk-Y4BZEND6.js → chunk-FBLT6WGK.js} +2 -2
  51. package/dist/cli-bundle/chunks/{chunk-PCH2JTEO.js → chunk-FMWW2JDU.js} +2 -2
  52. package/dist/cli-bundle/chunks/{chunk-WQDX7DVG.js → chunk-GDUMGZK3.js} +7 -7
  53. package/dist/cli-bundle/chunks/{chunk-KBTREGVO.js → chunk-GQYJEEFX.js} +8 -5
  54. package/dist/cli-bundle/chunks/{chunk-KBTREGVO.js.map → chunk-GQYJEEFX.js.map} +1 -1
  55. package/dist/cli-bundle/chunks/{chunk-FK6MV5F5.js → chunk-HBAEFWX3.js} +12 -12
  56. package/dist/cli-bundle/chunks/{chunk-6UPTNMVW.js → chunk-HC2S36NB.js} +5 -5
  57. package/dist/cli-bundle/chunks/{chunk-XKNF3VRJ.js → chunk-HZF5RLKX.js} +5 -5
  58. package/dist/cli-bundle/chunks/{chunk-4JXWVHMN.js → chunk-I6QMJ2XT.js} +2 -2
  59. package/dist/cli-bundle/chunks/{chunk-44O4JIN6.js → chunk-IAP5KYBQ.js} +13 -13
  60. package/dist/cli-bundle/chunks/{chunk-4YJA4LGU.js → chunk-INPHFO33.js} +160 -42
  61. package/dist/cli-bundle/chunks/chunk-INPHFO33.js.map +7 -0
  62. package/dist/cli-bundle/chunks/{chunk-A7E4ZXG2.js → chunk-IOT6WRL5.js} +2 -2
  63. package/dist/cli-bundle/chunks/{chunk-KRJJPDUO.js → chunk-IXAZI443.js} +2 -2
  64. package/dist/cli-bundle/chunks/{chunk-DMT4ODVN.js → chunk-J3NMWFIN.js} +2 -2
  65. package/dist/cli-bundle/chunks/{chunk-7PBGTIN3.js → chunk-J7I4C5ZB.js} +5 -5
  66. package/dist/cli-bundle/chunks/{chunk-7GCCDXXN.js → chunk-JKL6HRMV.js} +123 -8
  67. package/dist/cli-bundle/chunks/chunk-JKL6HRMV.js.map +7 -0
  68. package/dist/cli-bundle/chunks/{chunk-CLLVBO3I.js → chunk-JPJDP4VU.js} +2 -2
  69. package/dist/cli-bundle/chunks/{chunk-PJS2J7Z4.js → chunk-JV27C7OZ.js} +3 -3
  70. package/dist/cli-bundle/chunks/{chunk-K25UDYJ4.js → chunk-KIEAK7YE.js} +2 -2
  71. package/dist/cli-bundle/chunks/{chunk-GGAXE22C.js → chunk-KJZOSF7J.js} +6 -6
  72. package/dist/cli-bundle/chunks/{chunk-GXBSFKSX.js → chunk-KKX4Z2SE.js} +4 -4
  73. package/dist/cli-bundle/chunks/{chunk-D35LTIFR.js → chunk-L7UXKP2I.js} +110 -9
  74. package/dist/cli-bundle/chunks/chunk-L7UXKP2I.js.map +1 -0
  75. package/dist/cli-bundle/chunks/{chunk-C5SWTISA.js → chunk-LNEDHJNQ.js} +12 -12
  76. package/dist/cli-bundle/chunks/{chunk-YRLLL5TY.js → chunk-LU36E6GU.js} +8 -8
  77. package/dist/cli-bundle/chunks/{chunk-I6XE47J2.js → chunk-M6TUBOGW.js} +5 -5
  78. package/dist/cli-bundle/chunks/{chunk-DBQUQ3AS.js → chunk-MEXZ5XUM.js} +7 -4
  79. package/dist/cli-bundle/chunks/{chunk-DBQUQ3AS.js.map → chunk-MEXZ5XUM.js.map} +2 -2
  80. package/dist/cli-bundle/chunks/{chunk-YJICYNAV.js → chunk-MWMHZOZZ.js} +8 -8
  81. package/dist/cli-bundle/chunks/{chunk-SFKQAVZA.js → chunk-N5B6WZC5.js} +8 -8
  82. package/dist/cli-bundle/chunks/{chunk-3GL6LTUL.js → chunk-NJ73ALW2.js} +161 -43
  83. package/dist/cli-bundle/chunks/chunk-NJ73ALW2.js.map +1 -0
  84. package/dist/cli-bundle/chunks/{chunk-WBSYW3NT.js → chunk-NVXGVEFD.js} +2 -2
  85. package/dist/cli-bundle/chunks/{chunk-7MPTFYT3.js → chunk-OF7V47P3.js} +15 -4
  86. package/dist/cli-bundle/chunks/chunk-OF7V47P3.js.map +1 -0
  87. package/dist/cli-bundle/chunks/{chunk-GNDHOR64.js → chunk-OHDQNKJB.js} +6 -6
  88. package/dist/cli-bundle/chunks/{chunk-2LEYMXI6.js → chunk-OQ2E64FH.js} +4 -4
  89. package/dist/cli-bundle/chunks/{chunk-25XZN3JD.js → chunk-PEL2NLQE.js} +2 -2
  90. package/dist/cli-bundle/chunks/{chunk-H6FNDCDI.js → chunk-PRVTGX64.js} +5 -5
  91. package/dist/cli-bundle/chunks/{chunk-TZQKEBKF.js → chunk-QOUOMPHO.js} +2 -2
  92. package/dist/cli-bundle/chunks/{chunk-77VKGH4L.js → chunk-RAWA3Y7O.js} +10 -10
  93. package/dist/cli-bundle/chunks/{chunk-Y335KFHD.js → chunk-RRP6D345.js} +9 -9
  94. package/dist/cli-bundle/chunks/{chunk-4SDKF5BG.js → chunk-SKC4UTRP.js} +3 -3
  95. package/dist/cli-bundle/chunks/{chunk-TRUFOER3.js → chunk-SMXSDY7J.js} +15 -4
  96. package/dist/cli-bundle/chunks/chunk-SMXSDY7J.js.map +7 -0
  97. package/dist/cli-bundle/chunks/{chunk-JY25IOEZ.js → chunk-SUREE24M.js} +5 -5
  98. package/dist/cli-bundle/chunks/{chunk-A25LOPRG.js → chunk-TIM4OD74.js} +2 -2
  99. package/dist/cli-bundle/chunks/{chunk-KK4TQ3ZP.js → chunk-TKPP4GOO.js} +2 -2
  100. package/dist/cli-bundle/chunks/{chunk-6FQHNHQQ.js → chunk-TSI32UEL.js} +3 -3
  101. package/dist/cli-bundle/chunks/{chunk-TJABI6PR.js → chunk-UACWNBL2.js} +5 -5
  102. package/dist/cli-bundle/chunks/{chunk-EVPVCE4R.js → chunk-V4UYNSEM.js} +3 -3
  103. package/dist/cli-bundle/chunks/{chunk-QQWEROGS.js → chunk-VFJYVXHL.js} +7 -7
  104. package/dist/cli-bundle/chunks/{chunk-KL5ELX2X.js → chunk-VSAABFGQ.js} +144 -98
  105. package/dist/cli-bundle/chunks/chunk-VSAABFGQ.js.map +1 -0
  106. package/dist/cli-bundle/chunks/{chunk-YQSWTVZF.js → chunk-WB5BYQMF.js} +4 -4
  107. package/dist/cli-bundle/chunks/{chunk-MNGAQB2E.js → chunk-XVYKWZNL.js} +8 -8
  108. package/dist/cli-bundle/chunks/{chunk-V4SM4UAL.js → chunk-XXKV4UWE.js} +13 -13
  109. package/dist/cli-bundle/chunks/{chunk-GU7YHKYP.js → chunk-YV2OSAMS.js} +2 -2
  110. package/dist/cli-bundle/chunks/{chunk-P7ZU73BO.js → chunk-ZLWRPBOW.js} +3 -3
  111. package/dist/cli-bundle/chunks/{chunk-3VLPDG3J.js → chunk-ZV7IQ23N.js} +2 -2
  112. package/dist/cli-bundle/chunks/{claim-MPXNVBZQ.js → claim-FZZZCAY6.js} +10 -10
  113. package/dist/cli-bundle/chunks/{claim-SKHJDLW6.js → claim-XK5QBZE3.js} +10 -10
  114. package/dist/cli-bundle/chunks/close-JEBZXONN.js +15 -0
  115. package/dist/cli-bundle/chunks/{close-4RKSL5L6.js → close-QHMVWM7M.js} +8 -8
  116. package/dist/cli-bundle/chunks/{close-many-SXODYBDP.js → close-many-OIXJE2JZ.js} +15 -15
  117. package/dist/cli-bundle/chunks/{close-many-AWTPXLHJ.js → close-many-SUU5BS2C.js} +15 -15
  118. package/dist/cli-bundle/chunks/{comments-YYW5P7AG.js → comments-5YM62D75.js} +10 -10
  119. package/dist/cli-bundle/chunks/{comments-OOH64LWW.js → comments-RH3IBIRH.js} +10 -10
  120. package/dist/cli-bundle/chunks/{config-3445MCQQ.js → config-NCNNWF6R.js} +8 -8
  121. package/dist/cli-bundle/chunks/{config-LCDMKRB2.js → config-SW3U7XP2.js} +8 -8
  122. package/dist/cli-bundle/chunks/{context-PJCURODY.js → context-55VEOYI3.js} +13 -13
  123. package/dist/cli-bundle/chunks/{context-DZMIBIVP.js → context-5LB7UGKE.js} +13 -13
  124. package/dist/cli-bundle/chunks/{contracts-MP2P3HL5.js → contracts-JXFGBOYT.js} +8 -6
  125. package/dist/cli-bundle/chunks/contracts-JXFGBOYT.js.map +1 -0
  126. package/dist/cli-bundle/chunks/{contracts-7YDFEJB3.js → contracts-SY6PDFIK.js} +7 -5
  127. package/dist/cli-bundle/chunks/contracts-SY6PDFIK.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{copy-63IQQRRS.js → copy-IEDBJOOX.js} +7 -7
  129. package/dist/cli-bundle/chunks/{copy-TASIH2AZ.js → copy-N3GE6FYS.js} +7 -7
  130. package/dist/cli-bundle/chunks/create-CLSCHGJJ.js +30 -0
  131. package/dist/cli-bundle/chunks/{create-TGSB5GV4.js → create-O4VONGPG.js} +14 -14
  132. package/dist/cli-bundle/chunks/{delete-ARILQQLB.js → delete-724EQ6OS.js} +7 -7
  133. package/dist/cli-bundle/chunks/{delete-ZQKBZYNK.js → delete-LPEIF7RU.js} +7 -7
  134. package/dist/cli-bundle/chunks/{deps-MSHQR2GY.js → deps-RSBU4SIU.js} +7 -7
  135. package/dist/cli-bundle/chunks/{deps-NJFJIMQ5.js → deps-T3Y6Y7RT.js} +7 -7
  136. package/dist/cli-bundle/chunks/{docs-XK2UVUXX.js → docs-75ZLCO3G.js} +9 -9
  137. package/dist/cli-bundle/chunks/{docs-SS4UKYYA.js → docs-IFS7HZPP.js} +9 -9
  138. package/dist/cli-bundle/chunks/{eval-JOTG2YHU.js → eval-L2KD7W3M.js} +12 -12
  139. package/dist/cli-bundle/chunks/{eval-FVZGX5IZ.js → eval-QGR7JCQO.js} +12 -12
  140. package/dist/cli-bundle/chunks/{extension-OQPS27B4.js → extension-3JYWJ5K2.js} +6 -6
  141. package/dist/cli-bundle/chunks/{extension-NLMS47I4.js → extension-YQF4CPIR.js} +6 -6
  142. package/dist/cli-bundle/chunks/{files-Y2P6LN5A.js → files-5BQWDRDT.js} +9 -9
  143. package/dist/cli-bundle/chunks/{files-3EVJQZ2N.js → files-EPEJMJHQ.js} +9 -9
  144. package/dist/cli-bundle/chunks/{focus-D5ZUPTII.js → focus-DQVJAPOE.js} +8 -8
  145. package/dist/cli-bundle/chunks/{focus-ZPIFTY4R.js → focus-RWGKD76E.js} +8 -8
  146. package/dist/cli-bundle/chunks/{gc-LXXDY456.js → gc-BEJMQT64.js} +3 -3
  147. package/dist/cli-bundle/chunks/{gc-RNOEQHSX.js → gc-JEFQDJPA.js} +3 -3
  148. package/dist/cli-bundle/chunks/{get-W23G7MJX.js → get-LQG6PEVG.js} +11 -11
  149. package/dist/cli-bundle/chunks/{get-Q3SZGQHD.js → get-WVN75H42.js} +11 -11
  150. package/dist/cli-bundle/chunks/{health-UDDGJLPP.js → health-JJJOY7DJ.js} +14 -14
  151. package/dist/cli-bundle/chunks/{health-5LHSX365.js → health-P67NZ6TT.js} +14 -14
  152. package/dist/cli-bundle/chunks/history-ALTM2RRP.js +20 -0
  153. package/dist/cli-bundle/chunks/{history-6CZVFIUJ.js → history-RUKPKNY7.js} +10 -10
  154. package/dist/cli-bundle/chunks/{history-compact-VWUSQH6Z.js → history-compact-NQ7VPRVT.js} +12 -12
  155. package/dist/cli-bundle/chunks/{history-compact-M35PDQ4G.js → history-compact-ZAOWR7GD.js} +12 -12
  156. package/dist/cli-bundle/chunks/history-redact-5YGLWUDH.js +21 -0
  157. package/dist/cli-bundle/chunks/{history-redact-AJGARHT3.js → history-redact-YY4XYVEP.js} +11 -11
  158. package/dist/cli-bundle/chunks/{history-repair-YUAHIPIN.js → history-repair-EHL4ODQY.js} +12 -12
  159. package/dist/cli-bundle/chunks/{history-repair-5RDMF7K4.js → history-repair-YSQH6SY6.js} +12 -12
  160. package/dist/cli-bundle/chunks/init-C4CRHW22.js +21 -0
  161. package/dist/cli-bundle/chunks/{init-HASX3YNJ.js → init-HBFGYS66.js} +11 -11
  162. package/dist/cli-bundle/chunks/{learnings-JNGUIJDK.js → learnings-J555ZFPD.js} +10 -10
  163. package/dist/cli-bundle/chunks/{learnings-M4KA6MQE.js → learnings-KFQO7GEZ.js} +10 -10
  164. package/dist/cli-bundle/chunks/{list-6FMKTIH3.js → list-C7R33MD5.js} +10 -10
  165. package/dist/cli-bundle/chunks/{list-5UU2W24O.js → list-DSN6UNFB.js} +10 -10
  166. package/dist/cli-bundle/chunks/{notes-PYCPLA5Y.js → notes-V4VNIQL4.js} +10 -10
  167. package/dist/cli-bundle/chunks/{notes-MODH5CBT.js → notes-VYJFN2A3.js} +10 -10
  168. package/dist/cli-bundle/chunks/{plan-DXRIRYRU.js → plan-DHRSVSHR.js} +14 -14
  169. package/dist/cli-bundle/chunks/{plan-EHQALWSC.js → plan-RBHQ5PO7.js} +14 -14
  170. package/dist/cli-bundle/chunks/{register-list-query-QAASVP2J.js → register-list-query-CCMHGZTF.js} +19 -19
  171. package/dist/cli-bundle/chunks/{register-list-query-WE54YJMH.js → register-list-query-OM3E2KMY.js} +19 -19
  172. package/dist/cli-bundle/chunks/{register-mutation-B6DZJTY2.js → register-mutation-N3CDEGZU.js} +33 -33
  173. package/dist/cli-bundle/chunks/{register-mutation-CPV4C2KR.js → register-mutation-UXTTWL6N.js} +33 -33
  174. package/dist/cli-bundle/chunks/{register-operations-RC4C3423.js → register-operations-R2FLOCRI.js} +32 -32
  175. package/dist/cli-bundle/chunks/{register-operations-AT3BVVX2.js → register-operations-UDIFMQKD.js} +32 -32
  176. package/dist/cli-bundle/chunks/{register-setup-JSMJEFCJ.js → register-setup-G5LTSFYK.js} +24 -20
  177. package/dist/cli-bundle/chunks/register-setup-G5LTSFYK.js.map +1 -0
  178. package/dist/cli-bundle/chunks/{register-setup-HXEHMDHE.js → register-setup-TWHKICM2.js} +23 -19
  179. package/dist/cli-bundle/chunks/register-setup-TWHKICM2.js.map +7 -0
  180. package/dist/cli-bundle/chunks/{restore-FNBV4GWE.js → restore-LL2WLEDG.js} +11 -11
  181. package/dist/cli-bundle/chunks/restore-LQHXBAY5.js +19 -0
  182. package/dist/cli-bundle/chunks/{scheduling-shortcuts-ECL6GBMZ.js → scheduling-shortcuts-255GI3BU.js} +14 -14
  183. package/dist/cli-bundle/chunks/{scheduling-shortcuts-JRIUREEU.js → scheduling-shortcuts-M4H2ZI64.js} +14 -14
  184. package/dist/cli-bundle/chunks/{schema-74YENAJL.js → schema-C6QA367T.js} +9 -9
  185. package/dist/cli-bundle/chunks/{schema-TCW3I7QR.js → schema-QO5I4FBL.js} +9 -9
  186. package/dist/cli-bundle/chunks/{search-7USZ6XZA.js → search-2EI6EAXH.js} +12 -12
  187. package/dist/cli-bundle/chunks/{search-GNAUE65M.js → search-QBFBLQRO.js} +12 -12
  188. package/dist/cli-bundle/chunks/{stats-CVHASAEU.js → stats-TCW2SZQG.js} +8 -8
  189. package/dist/cli-bundle/chunks/{stats-DQMKJMFT.js → stats-TKC6CAKB.js} +8 -8
  190. package/dist/cli-bundle/chunks/{telemetry-PQTL5YS2.js → telemetry-BT2VSWU2.js} +4 -4
  191. package/dist/cli-bundle/chunks/{telemetry-7P5EUWCS.js → telemetry-LQ6FRTUT.js} +4 -4
  192. package/dist/cli-bundle/chunks/{test-FDQZQNZ4.js → test-NV2DRPUS.js} +16 -16
  193. package/dist/cli-bundle/chunks/test-WA6RZGM2.js +36 -0
  194. package/dist/cli-bundle/chunks/{test-all-PIPPS4S5.js → test-all-DZ76VTPQ.js} +16 -16
  195. package/dist/cli-bundle/chunks/{test-all-WQIAZVA6.js → test-all-REW67LXT.js} +16 -16
  196. package/dist/cli-bundle/chunks/{test-runs-JS6DNCCI.js → test-runs-FQ5WNQLP.js} +5 -5
  197. package/dist/cli-bundle/chunks/{test-runs-NZD2QGL5.js → test-runs-PX73DMMI.js} +5 -5
  198. package/dist/cli-bundle/chunks/update-BSKMQOYH.js +28 -0
  199. package/dist/cli-bundle/chunks/update-FIGYNQ2I.js +24 -0
  200. package/dist/cli-bundle/chunks/{update-many-B3TH5TDS.js → update-many-2ILP6E4Y.js} +23 -23
  201. package/dist/cli-bundle/chunks/{update-many-6NTZ5J5D.js → update-many-Q5ZEI64S.js} +23 -23
  202. package/dist/cli-bundle/chunks/{upgrade-76IKZ6EZ.js → upgrade-DHL74PQH.js} +6 -6
  203. package/dist/cli-bundle/chunks/{upgrade-4C7VE7MS.js → upgrade-FOZKQTQF.js} +6 -6
  204. package/dist/cli-bundle/chunks/{validate-BPM6Z3OT.js → validate-54SYJ7QW.js} +21 -21
  205. package/dist/cli-bundle/chunks/{validate-AQU7OCL3.js → validate-HYZNIB6W.js} +21 -21
  206. package/dist/cli-bundle/main.js +22 -18
  207. package/dist/cli-bundle/main.js.map +2 -2
  208. package/dist/core/extensions/activation-summary.d.ts +109 -0
  209. package/dist/core/extensions/activation-summary.js +60 -0
  210. package/dist/core/extensions/activation-summary.js.map +1 -0
  211. package/dist/core/extensions/capability-usage.d.ts +10 -0
  212. package/dist/core/extensions/capability-usage.js +12 -3
  213. package/dist/core/extensions/capability-usage.js.map +1 -1
  214. package/dist/core/extensions/loader.d.ts +1 -2
  215. package/dist/core/extensions/loader.js +40 -103
  216. package/dist/core/extensions/loader.js.map +1 -1
  217. package/dist/core/extensions/version-compat.d.ts +107 -0
  218. package/dist/core/extensions/version-compat.js +130 -0
  219. package/dist/core/extensions/version-compat.js.map +1 -0
  220. package/dist/core/telemetry/runtime.js +5 -2
  221. package/dist/core/telemetry/runtime.js.map +1 -1
  222. package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
  223. package/dist/sdk/cli-contracts/enum-contracts.js +4 -2
  224. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  225. package/dist/sdk/cli-contracts.d.ts +1 -0
  226. package/dist/sdk/cli-contracts.js +10 -2
  227. package/dist/sdk/cli-contracts.js.map +1 -1
  228. package/dist/sdk/compose.d.ts +636 -0
  229. package/dist/sdk/compose.js +841 -0
  230. package/dist/sdk/compose.js.map +1 -0
  231. package/dist/sdk/define.d.ts +195 -0
  232. package/dist/sdk/define.js +204 -0
  233. package/dist/sdk/define.js.map +1 -0
  234. package/dist/sdk/index.d.ts +4 -27
  235. package/dist/sdk/index.js +5 -12
  236. package/dist/sdk/index.js.map +1 -1
  237. package/dist/sdk/testing.d.ts +221 -2
  238. package/dist/sdk/testing.js +276 -2
  239. package/dist/sdk/testing.js.map +1 -1
  240. package/docs/COMMANDS.md +1 -0
  241. package/docs/EXTENSIONS.md +18 -14
  242. package/docs/SDK.md +445 -16
  243. package/package.json +1 -1
  244. package/dist/cli-bundle/chunks/activity-NEOI45NX.js +0 -18
  245. package/dist/cli-bundle/chunks/chunk-3GL6LTUL.js.map +0 -1
  246. package/dist/cli-bundle/chunks/chunk-4YJA4LGU.js.map +0 -7
  247. package/dist/cli-bundle/chunks/chunk-7GCCDXXN.js.map +0 -7
  248. package/dist/cli-bundle/chunks/chunk-7MPTFYT3.js.map +0 -1
  249. package/dist/cli-bundle/chunks/chunk-D35LTIFR.js.map +0 -1
  250. package/dist/cli-bundle/chunks/chunk-KL5ELX2X.js.map +0 -1
  251. package/dist/cli-bundle/chunks/chunk-RZZMSY4P.js.map +0 -7
  252. package/dist/cli-bundle/chunks/chunk-TRUFOER3.js.map +0 -7
  253. package/dist/cli-bundle/chunks/close-Z6AI736U.js +0 -15
  254. package/dist/cli-bundle/chunks/contracts-7YDFEJB3.js.map +0 -7
  255. package/dist/cli-bundle/chunks/contracts-MP2P3HL5.js.map +0 -1
  256. package/dist/cli-bundle/chunks/create-3BV2VA3Q.js +0 -30
  257. package/dist/cli-bundle/chunks/history-YRQUD4YM.js +0 -20
  258. package/dist/cli-bundle/chunks/history-redact-27OEOZRZ.js +0 -21
  259. package/dist/cli-bundle/chunks/init-DWAKYRXI.js +0 -21
  260. package/dist/cli-bundle/chunks/register-setup-HXEHMDHE.js.map +0 -7
  261. package/dist/cli-bundle/chunks/register-setup-JSMJEFCJ.js.map +0 -1
  262. package/dist/cli-bundle/chunks/restore-XY4YE2OV.js +0 -19
  263. package/dist/cli-bundle/chunks/test-COWPCGBE.js +0 -36
  264. package/dist/cli-bundle/chunks/update-7IYQHX4Q.js +0 -24
  265. package/dist/cli-bundle/chunks/update-IJKDRBIX.js +0 -28
  266. /package/dist/cli-bundle/chunks/{activity-NEOI45NX.js.map → activity-54TXGJ2T.js.map} +0 -0
  267. /package/dist/cli-bundle/chunks/{activity-DXS2XMQU.js.map → activity-N7RVTLBQ.js.map} +0 -0
  268. /package/dist/cli-bundle/chunks/{aggregate-IHM4KMQ3.js.map → aggregate-63NWNIBR.js.map} +0 -0
  269. /package/dist/cli-bundle/chunks/{aggregate-NMYDVQF7.js.map → aggregate-YHCYX2EV.js.map} +0 -0
  270. /package/dist/cli-bundle/chunks/{append-3HY5G7ET.js.map → append-PUKREFV5.js.map} +0 -0
  271. /package/dist/cli-bundle/chunks/{append-K54MDQYC.js.map → append-VLQQDHMJ.js.map} +0 -0
  272. /package/dist/cli-bundle/chunks/{chunk-DU64SZUQ.js.map → chunk-2WCYE3IF.js.map} +0 -0
  273. /package/dist/cli-bundle/chunks/{chunk-NKZOJPXK.js.map → chunk-3BKH2CL3.js.map} +0 -0
  274. /package/dist/cli-bundle/chunks/{chunk-7MALIV5H.js.map → chunk-4XDGYFHL.js.map} +0 -0
  275. /package/dist/cli-bundle/chunks/{chunk-VB54F347.js.map → chunk-5BBEWX6C.js.map} +0 -0
  276. /package/dist/cli-bundle/chunks/{chunk-DHBPJ7VG.js.map → chunk-5S4ZGDB2.js.map} +0 -0
  277. /package/dist/cli-bundle/chunks/{chunk-UKK2VTTH.js.map → chunk-6EBNFQOR.js.map} +0 -0
  278. /package/dist/cli-bundle/chunks/{chunk-5SESR24H.js.map → chunk-6EL7SW5C.js.map} +0 -0
  279. /package/dist/cli-bundle/chunks/{chunk-JLSC5NPC.js.map → chunk-6W3Y65PL.js.map} +0 -0
  280. /package/dist/cli-bundle/chunks/{chunk-HYQV75IB.js.map → chunk-A66VYUOV.js.map} +0 -0
  281. /package/dist/cli-bundle/chunks/{chunk-I367IDZP.js.map → chunk-ABYCA5VX.js.map} +0 -0
  282. /package/dist/cli-bundle/chunks/{chunk-47HTJ6BU.js.map → chunk-AEACLRVH.js.map} +0 -0
  283. /package/dist/cli-bundle/chunks/{chunk-MD7XKVWI.js.map → chunk-ALKFCIIB.js.map} +0 -0
  284. /package/dist/cli-bundle/chunks/{chunk-B2KR24R4.js.map → chunk-ALQKV6U7.js.map} +0 -0
  285. /package/dist/cli-bundle/chunks/{chunk-NIWY4V4Z.js.map → chunk-AYPQUFCX.js.map} +0 -0
  286. /package/dist/cli-bundle/chunks/{chunk-AJXYOYJV.js.map → chunk-B74BP6IS.js.map} +0 -0
  287. /package/dist/cli-bundle/chunks/{chunk-THKDPOS5.js.map → chunk-BFFO3AIB.js.map} +0 -0
  288. /package/dist/cli-bundle/chunks/{chunk-CR7KFPAQ.js.map → chunk-C4C3EJCJ.js.map} +0 -0
  289. /package/dist/cli-bundle/chunks/{chunk-J2TSPY5L.js.map → chunk-CG3KP6I5.js.map} +0 -0
  290. /package/dist/cli-bundle/chunks/{chunk-CWPBGUC7.js.map → chunk-CZIFFMZI.js.map} +0 -0
  291. /package/dist/cli-bundle/chunks/{chunk-75VEYQJS.js.map → chunk-DTABLLVE.js.map} +0 -0
  292. /package/dist/cli-bundle/chunks/{chunk-TIKJAXQW.js.map → chunk-EOGBMLCE.js.map} +0 -0
  293. /package/dist/cli-bundle/chunks/{chunk-YATDFWYK.js.map → chunk-EWRSXOIZ.js.map} +0 -0
  294. /package/dist/cli-bundle/chunks/{chunk-RPRFBXND.js.map → chunk-F32L4HR6.js.map} +0 -0
  295. /package/dist/cli-bundle/chunks/{chunk-NVUATMTC.js.map → chunk-F4BNR2IN.js.map} +0 -0
  296. /package/dist/cli-bundle/chunks/{chunk-Y4BZEND6.js.map → chunk-FBLT6WGK.js.map} +0 -0
  297. /package/dist/cli-bundle/chunks/{chunk-PCH2JTEO.js.map → chunk-FMWW2JDU.js.map} +0 -0
  298. /package/dist/cli-bundle/chunks/{chunk-WQDX7DVG.js.map → chunk-GDUMGZK3.js.map} +0 -0
  299. /package/dist/cli-bundle/chunks/{chunk-FK6MV5F5.js.map → chunk-HBAEFWX3.js.map} +0 -0
  300. /package/dist/cli-bundle/chunks/{chunk-6UPTNMVW.js.map → chunk-HC2S36NB.js.map} +0 -0
  301. /package/dist/cli-bundle/chunks/{chunk-XKNF3VRJ.js.map → chunk-HZF5RLKX.js.map} +0 -0
  302. /package/dist/cli-bundle/chunks/{chunk-4JXWVHMN.js.map → chunk-I6QMJ2XT.js.map} +0 -0
  303. /package/dist/cli-bundle/chunks/{chunk-44O4JIN6.js.map → chunk-IAP5KYBQ.js.map} +0 -0
  304. /package/dist/cli-bundle/chunks/{chunk-A7E4ZXG2.js.map → chunk-IOT6WRL5.js.map} +0 -0
  305. /package/dist/cli-bundle/chunks/{chunk-KRJJPDUO.js.map → chunk-IXAZI443.js.map} +0 -0
  306. /package/dist/cli-bundle/chunks/{chunk-DMT4ODVN.js.map → chunk-J3NMWFIN.js.map} +0 -0
  307. /package/dist/cli-bundle/chunks/{chunk-7PBGTIN3.js.map → chunk-J7I4C5ZB.js.map} +0 -0
  308. /package/dist/cli-bundle/chunks/{chunk-CLLVBO3I.js.map → chunk-JPJDP4VU.js.map} +0 -0
  309. /package/dist/cli-bundle/chunks/{chunk-PJS2J7Z4.js.map → chunk-JV27C7OZ.js.map} +0 -0
  310. /package/dist/cli-bundle/chunks/{chunk-K25UDYJ4.js.map → chunk-KIEAK7YE.js.map} +0 -0
  311. /package/dist/cli-bundle/chunks/{chunk-GGAXE22C.js.map → chunk-KJZOSF7J.js.map} +0 -0
  312. /package/dist/cli-bundle/chunks/{chunk-GXBSFKSX.js.map → chunk-KKX4Z2SE.js.map} +0 -0
  313. /package/dist/cli-bundle/chunks/{chunk-C5SWTISA.js.map → chunk-LNEDHJNQ.js.map} +0 -0
  314. /package/dist/cli-bundle/chunks/{chunk-YRLLL5TY.js.map → chunk-LU36E6GU.js.map} +0 -0
  315. /package/dist/cli-bundle/chunks/{chunk-I6XE47J2.js.map → chunk-M6TUBOGW.js.map} +0 -0
  316. /package/dist/cli-bundle/chunks/{chunk-YJICYNAV.js.map → chunk-MWMHZOZZ.js.map} +0 -0
  317. /package/dist/cli-bundle/chunks/{chunk-SFKQAVZA.js.map → chunk-N5B6WZC5.js.map} +0 -0
  318. /package/dist/cli-bundle/chunks/{chunk-WBSYW3NT.js.map → chunk-NVXGVEFD.js.map} +0 -0
  319. /package/dist/cli-bundle/chunks/{chunk-GNDHOR64.js.map → chunk-OHDQNKJB.js.map} +0 -0
  320. /package/dist/cli-bundle/chunks/{chunk-2LEYMXI6.js.map → chunk-OQ2E64FH.js.map} +0 -0
  321. /package/dist/cli-bundle/chunks/{chunk-25XZN3JD.js.map → chunk-PEL2NLQE.js.map} +0 -0
  322. /package/dist/cli-bundle/chunks/{chunk-H6FNDCDI.js.map → chunk-PRVTGX64.js.map} +0 -0
  323. /package/dist/cli-bundle/chunks/{chunk-TZQKEBKF.js.map → chunk-QOUOMPHO.js.map} +0 -0
  324. /package/dist/cli-bundle/chunks/{chunk-77VKGH4L.js.map → chunk-RAWA3Y7O.js.map} +0 -0
  325. /package/dist/cli-bundle/chunks/{chunk-Y335KFHD.js.map → chunk-RRP6D345.js.map} +0 -0
  326. /package/dist/cli-bundle/chunks/{chunk-4SDKF5BG.js.map → chunk-SKC4UTRP.js.map} +0 -0
  327. /package/dist/cli-bundle/chunks/{chunk-JY25IOEZ.js.map → chunk-SUREE24M.js.map} +0 -0
  328. /package/dist/cli-bundle/chunks/{chunk-A25LOPRG.js.map → chunk-TIM4OD74.js.map} +0 -0
  329. /package/dist/cli-bundle/chunks/{chunk-KK4TQ3ZP.js.map → chunk-TKPP4GOO.js.map} +0 -0
  330. /package/dist/cli-bundle/chunks/{chunk-6FQHNHQQ.js.map → chunk-TSI32UEL.js.map} +0 -0
  331. /package/dist/cli-bundle/chunks/{chunk-TJABI6PR.js.map → chunk-UACWNBL2.js.map} +0 -0
  332. /package/dist/cli-bundle/chunks/{chunk-EVPVCE4R.js.map → chunk-V4UYNSEM.js.map} +0 -0
  333. /package/dist/cli-bundle/chunks/{chunk-QQWEROGS.js.map → chunk-VFJYVXHL.js.map} +0 -0
  334. /package/dist/cli-bundle/chunks/{chunk-YQSWTVZF.js.map → chunk-WB5BYQMF.js.map} +0 -0
  335. /package/dist/cli-bundle/chunks/{chunk-MNGAQB2E.js.map → chunk-XVYKWZNL.js.map} +0 -0
  336. /package/dist/cli-bundle/chunks/{chunk-V4SM4UAL.js.map → chunk-XXKV4UWE.js.map} +0 -0
  337. /package/dist/cli-bundle/chunks/{chunk-GU7YHKYP.js.map → chunk-YV2OSAMS.js.map} +0 -0
  338. /package/dist/cli-bundle/chunks/{chunk-P7ZU73BO.js.map → chunk-ZLWRPBOW.js.map} +0 -0
  339. /package/dist/cli-bundle/chunks/{chunk-3VLPDG3J.js.map → chunk-ZV7IQ23N.js.map} +0 -0
  340. /package/dist/cli-bundle/chunks/{claim-MPXNVBZQ.js.map → claim-FZZZCAY6.js.map} +0 -0
  341. /package/dist/cli-bundle/chunks/{claim-SKHJDLW6.js.map → claim-XK5QBZE3.js.map} +0 -0
  342. /package/dist/cli-bundle/chunks/{close-Z6AI736U.js.map → close-JEBZXONN.js.map} +0 -0
  343. /package/dist/cli-bundle/chunks/{close-4RKSL5L6.js.map → close-QHMVWM7M.js.map} +0 -0
  344. /package/dist/cli-bundle/chunks/{close-many-SXODYBDP.js.map → close-many-OIXJE2JZ.js.map} +0 -0
  345. /package/dist/cli-bundle/chunks/{close-many-AWTPXLHJ.js.map → close-many-SUU5BS2C.js.map} +0 -0
  346. /package/dist/cli-bundle/chunks/{comments-YYW5P7AG.js.map → comments-5YM62D75.js.map} +0 -0
  347. /package/dist/cli-bundle/chunks/{comments-OOH64LWW.js.map → comments-RH3IBIRH.js.map} +0 -0
  348. /package/dist/cli-bundle/chunks/{config-3445MCQQ.js.map → config-NCNNWF6R.js.map} +0 -0
  349. /package/dist/cli-bundle/chunks/{config-LCDMKRB2.js.map → config-SW3U7XP2.js.map} +0 -0
  350. /package/dist/cli-bundle/chunks/{context-PJCURODY.js.map → context-55VEOYI3.js.map} +0 -0
  351. /package/dist/cli-bundle/chunks/{context-DZMIBIVP.js.map → context-5LB7UGKE.js.map} +0 -0
  352. /package/dist/cli-bundle/chunks/{copy-63IQQRRS.js.map → copy-IEDBJOOX.js.map} +0 -0
  353. /package/dist/cli-bundle/chunks/{copy-TASIH2AZ.js.map → copy-N3GE6FYS.js.map} +0 -0
  354. /package/dist/cli-bundle/chunks/{create-3BV2VA3Q.js.map → create-CLSCHGJJ.js.map} +0 -0
  355. /package/dist/cli-bundle/chunks/{create-TGSB5GV4.js.map → create-O4VONGPG.js.map} +0 -0
  356. /package/dist/cli-bundle/chunks/{delete-ARILQQLB.js.map → delete-724EQ6OS.js.map} +0 -0
  357. /package/dist/cli-bundle/chunks/{delete-ZQKBZYNK.js.map → delete-LPEIF7RU.js.map} +0 -0
  358. /package/dist/cli-bundle/chunks/{deps-MSHQR2GY.js.map → deps-RSBU4SIU.js.map} +0 -0
  359. /package/dist/cli-bundle/chunks/{deps-NJFJIMQ5.js.map → deps-T3Y6Y7RT.js.map} +0 -0
  360. /package/dist/cli-bundle/chunks/{docs-XK2UVUXX.js.map → docs-75ZLCO3G.js.map} +0 -0
  361. /package/dist/cli-bundle/chunks/{docs-SS4UKYYA.js.map → docs-IFS7HZPP.js.map} +0 -0
  362. /package/dist/cli-bundle/chunks/{eval-JOTG2YHU.js.map → eval-L2KD7W3M.js.map} +0 -0
  363. /package/dist/cli-bundle/chunks/{eval-FVZGX5IZ.js.map → eval-QGR7JCQO.js.map} +0 -0
  364. /package/dist/cli-bundle/chunks/{extension-OQPS27B4.js.map → extension-3JYWJ5K2.js.map} +0 -0
  365. /package/dist/cli-bundle/chunks/{extension-NLMS47I4.js.map → extension-YQF4CPIR.js.map} +0 -0
  366. /package/dist/cli-bundle/chunks/{files-Y2P6LN5A.js.map → files-5BQWDRDT.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{files-3EVJQZ2N.js.map → files-EPEJMJHQ.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{focus-D5ZUPTII.js.map → focus-DQVJAPOE.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{focus-ZPIFTY4R.js.map → focus-RWGKD76E.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{gc-LXXDY456.js.map → gc-BEJMQT64.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{gc-RNOEQHSX.js.map → gc-JEFQDJPA.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{get-W23G7MJX.js.map → get-LQG6PEVG.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{get-Q3SZGQHD.js.map → get-WVN75H42.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{health-UDDGJLPP.js.map → health-JJJOY7DJ.js.map} +0 -0
  375. /package/dist/cli-bundle/chunks/{health-5LHSX365.js.map → health-P67NZ6TT.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{history-YRQUD4YM.js.map → history-ALTM2RRP.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{history-6CZVFIUJ.js.map → history-RUKPKNY7.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{history-compact-VWUSQH6Z.js.map → history-compact-NQ7VPRVT.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{history-compact-M35PDQ4G.js.map → history-compact-ZAOWR7GD.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{history-redact-27OEOZRZ.js.map → history-redact-5YGLWUDH.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{history-redact-AJGARHT3.js.map → history-redact-YY4XYVEP.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{history-repair-YUAHIPIN.js.map → history-repair-EHL4ODQY.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{history-repair-5RDMF7K4.js.map → history-repair-YSQH6SY6.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{init-DWAKYRXI.js.map → init-C4CRHW22.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{init-HASX3YNJ.js.map → init-HBFGYS66.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{learnings-JNGUIJDK.js.map → learnings-J555ZFPD.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{learnings-M4KA6MQE.js.map → learnings-KFQO7GEZ.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{list-6FMKTIH3.js.map → list-C7R33MD5.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{list-5UU2W24O.js.map → list-DSN6UNFB.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{notes-PYCPLA5Y.js.map → notes-V4VNIQL4.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{notes-MODH5CBT.js.map → notes-VYJFN2A3.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{plan-DXRIRYRU.js.map → plan-DHRSVSHR.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{plan-EHQALWSC.js.map → plan-RBHQ5PO7.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{register-list-query-QAASVP2J.js.map → register-list-query-CCMHGZTF.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{register-list-query-WE54YJMH.js.map → register-list-query-OM3E2KMY.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{register-mutation-B6DZJTY2.js.map → register-mutation-N3CDEGZU.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{register-mutation-CPV4C2KR.js.map → register-mutation-UXTTWL6N.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{register-operations-RC4C3423.js.map → register-operations-R2FLOCRI.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{register-operations-AT3BVVX2.js.map → register-operations-UDIFMQKD.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{restore-FNBV4GWE.js.map → restore-LL2WLEDG.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{restore-XY4YE2OV.js.map → restore-LQHXBAY5.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-ECL6GBMZ.js.map → scheduling-shortcuts-255GI3BU.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-JRIUREEU.js.map → scheduling-shortcuts-M4H2ZI64.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{schema-74YENAJL.js.map → schema-C6QA367T.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{schema-TCW3I7QR.js.map → schema-QO5I4FBL.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{search-7USZ6XZA.js.map → search-2EI6EAXH.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{search-GNAUE65M.js.map → search-QBFBLQRO.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{stats-CVHASAEU.js.map → stats-TCW2SZQG.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{stats-DQMKJMFT.js.map → stats-TKC6CAKB.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{telemetry-PQTL5YS2.js.map → telemetry-BT2VSWU2.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{telemetry-7P5EUWCS.js.map → telemetry-LQ6FRTUT.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{test-FDQZQNZ4.js.map → test-NV2DRPUS.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{test-COWPCGBE.js.map → test-WA6RZGM2.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{test-all-PIPPS4S5.js.map → test-all-DZ76VTPQ.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{test-all-WQIAZVA6.js.map → test-all-REW67LXT.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{test-runs-JS6DNCCI.js.map → test-runs-FQ5WNQLP.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{test-runs-NZD2QGL5.js.map → test-runs-PX73DMMI.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{update-IJKDRBIX.js.map → update-BSKMQOYH.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{update-7IYQHX4Q.js.map → update-FIGYNQ2I.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{update-many-B3TH5TDS.js.map → update-many-2ILP6E4Y.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{update-many-6NTZ5J5D.js.map → update-many-Q5ZEI64S.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{upgrade-76IKZ6EZ.js.map → upgrade-DHL74PQH.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{upgrade-4C7VE7MS.js.map → upgrade-FOZKQTQF.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{validate-BPM6Z3OT.js.map → validate-54SYJ7QW.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{validate-AQU7OCL3.js.map → validate-HYZNIB6W.js.map} +0 -0
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @module cli/commands/extension/describe
3
+ *
4
+ * Builds the `pm extension describe` / `pm package describe` payload: a flat,
5
+ * by-name map of every surface each loaded extension registered.
6
+ *
7
+ * The SDK already ships {@link describeExtensionActivation} -- the `describe`
8
+ * (enumerate-all) verb that complements the `assert*` (verify-one) and `run*`
9
+ * (invoke-one) testing helpers -- but until now it was reachable only from a test
10
+ * that hand-built an {@link ExtensionActivationResult}. This module is the thin
11
+ * orchestration that lets an agent at the CLI (or over MCP) ask "what does this
12
+ * installed extension add to my context?" in one call, instead of stitching
13
+ * together `doctor` (errors), `manage` (update metadata), and a manifest read.
14
+ *
15
+ * It is intentionally pure: the caller performs the load+activate cycle (exactly
16
+ * as `explore`/`doctor` already do) and hands the results here, so the same
17
+ * builder is trivially unit-testable against synthetic activations.
18
+ */
19
+ import { type ExtensionActivationSummary } from "../../../core/extensions/activation-summary.js";
20
+ import type { ExtensionActivationResult, ExtensionLayer, ExtensionLoadResult } from "../../../core/extensions/loader.js";
21
+ /**
22
+ * Runtime state of a described extension. `ok` loaded and activated cleanly,
23
+ * `failed` loaded but threw during `activate`, and `not_loaded` failed to import
24
+ * at all -- the latter two register nothing, so their `surfaces` are empty and
25
+ * the status explains why (rather than implying the extension contributes
26
+ * nothing).
27
+ */
28
+ export type ExtensionDescribeActivationStatus = "ok" | "failed" | "not_loaded";
29
+ /**
30
+ * One extension's contribution to the workspace: its identity plus the
31
+ * {@link ExtensionActivationSummary} of every surface it registered.
32
+ *
33
+ * `surfaces` is matched by extension *name* (mirroring
34
+ * {@link describeExtensionActivation}'s name filter), so when the same name is
35
+ * loaded in both the project and global layers each entry reflects that name's
36
+ * combined surfaces -- the `layer`/`version` fields still distinguish the
37
+ * physical entries.
38
+ */
39
+ export interface ExtensionSurfaceDescription {
40
+ name: string;
41
+ layer: ExtensionLayer;
42
+ version: string;
43
+ activation_status: ExtensionDescribeActivationStatus;
44
+ surfaces: ExtensionActivationSummary;
45
+ }
46
+ /**
47
+ * Result of {@link buildExtensionDescribeResult}: the per-extension surface maps
48
+ * plus a deduplicated `union` across the described set. `target` echoes the
49
+ * requested name filter (or `null` for the whole workspace) and `total` counts
50
+ * the described entries so callers need not re-measure `extensions`.
51
+ */
52
+ export interface ExtensionDescribeResult {
53
+ target: string | null;
54
+ total: number;
55
+ extensions: ExtensionSurfaceDescription[];
56
+ union: ExtensionActivationSummary;
57
+ }
58
+ /**
59
+ * Summarize, by name, every registration surface the loaded extensions exercised.
60
+ *
61
+ * Walks `loadResult.loaded` (annotating each with `failed` when its layer+name is
62
+ * in `activationResult.failed`) and `loadResult.failed` (as `not_loaded`), sorts
63
+ * the entries by name then layer for deterministic output, and attaches each
64
+ * extension's {@link describeExtensionActivation} summary. When `target` is
65
+ * provided only the case-insensitively matching extensions are described and the
66
+ * `union` is scoped to that name; otherwise every loaded extension contributes.
67
+ * An unmatched `target` yields an empty `extensions` array -- the caller decides
68
+ * whether that is a not-found error.
69
+ */
70
+ export declare function buildExtensionDescribeResult(target: string | undefined, loadResult: ExtensionLoadResult, activationResult: ExtensionActivationResult): ExtensionDescribeResult;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @module cli/commands/extension/describe
3
+ *
4
+ * Builds the `pm extension describe` / `pm package describe` payload: a flat,
5
+ * by-name map of every surface each loaded extension registered.
6
+ *
7
+ * The SDK already ships {@link describeExtensionActivation} -- the `describe`
8
+ * (enumerate-all) verb that complements the `assert*` (verify-one) and `run*`
9
+ * (invoke-one) testing helpers -- but until now it was reachable only from a test
10
+ * that hand-built an {@link ExtensionActivationResult}. This module is the thin
11
+ * orchestration that lets an agent at the CLI (or over MCP) ask "what does this
12
+ * installed extension add to my context?" in one call, instead of stitching
13
+ * together `doctor` (errors), `manage` (update metadata), and a manifest read.
14
+ *
15
+ * It is intentionally pure: the caller performs the load+activate cycle (exactly
16
+ * as `explore`/`doctor` already do) and hands the results here, so the same
17
+ * builder is trivially unit-testable against synthetic activations.
18
+ */
19
+
20
+ !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]="7a92163a-99b2-5969-acc2-e2b6b0336c2e")}catch(e){}}();
21
+ import { describeExtensionActivation } from "../../../core/extensions/activation-summary.js";
22
+ import { normalizeExtensionNameForMatch } from "./shared.js";
23
+ /**
24
+ * Compose a collision-free identity key for an extension from its layer and
25
+ * normalized name. The two parts are joined with a colon; the layer prefix is
26
+ * always a colon-free enum value, so distinct (layer, name) pairs never collide
27
+ * even when a name itself contains a colon.
28
+ */
29
+ function layerNameKey(layer, name) {
30
+ return `${layer}:${normalizeExtensionNameForMatch(name)}`;
31
+ }
32
+ /**
33
+ * Summarize, by name, every registration surface the loaded extensions exercised.
34
+ *
35
+ * Walks `loadResult.loaded` (annotating each with `failed` when its layer+name is
36
+ * in `activationResult.failed`) and `loadResult.failed` (as `not_loaded`), sorts
37
+ * the entries by name then layer for deterministic output, and attaches each
38
+ * extension's {@link describeExtensionActivation} summary. When `target` is
39
+ * provided only the case-insensitively matching extensions are described and the
40
+ * `union` is scoped to that name; otherwise every loaded extension contributes.
41
+ * An unmatched `target` yields an empty `extensions` array -- the caller decides
42
+ * whether that is a not-found error.
43
+ */
44
+ export function buildExtensionDescribeResult(target, loadResult, activationResult) {
45
+ const activationFailedKeys = new Set(activationResult.failed.map((entry) => layerNameKey(entry.layer, entry.name)));
46
+ const candidates = [
47
+ ...loadResult.loaded.map((entry) => ({
48
+ name: entry.name,
49
+ layer: entry.layer,
50
+ version: entry.version,
51
+ activation_status: activationFailedKeys.has(layerNameKey(entry.layer, entry.name))
52
+ ? "failed"
53
+ : "ok",
54
+ surfaces: describeExtensionActivation(activationResult, { extensionName: entry.name }),
55
+ })),
56
+ ...loadResult.failed.map((entry) => ({
57
+ name: entry.name,
58
+ layer: entry.layer,
59
+ version: "unknown",
60
+ activation_status: "not_loaded",
61
+ surfaces: describeExtensionActivation(activationResult, { extensionName: entry.name }),
62
+ })),
63
+ ].sort((left, right) => left.name.localeCompare(right.name) || left.layer.localeCompare(right.layer));
64
+ const normalizedTarget = typeof target === "string" ? normalizeExtensionNameForMatch(target) : null;
65
+ const extensions = normalizedTarget === null
66
+ ? candidates
67
+ : candidates.filter((entry) => normalizeExtensionNameForMatch(entry.name) === normalizedTarget);
68
+ return {
69
+ target: typeof target === "string" ? target.trim() : null,
70
+ total: extensions.length,
71
+ extensions,
72
+ union: describeExtensionActivation(activationResult, normalizedTarget === null ? {} : { extensionName: target }),
73
+ };
74
+ }
75
+ //# sourceMappingURL=describe.js.map
76
+ //# debugId=7a92163a-99b2-5969-acc2-e2b6b0336c2e
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe.js","sources":["cli/commands/extension/describe.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/extension/describe\n *\n * Builds the `pm extension describe` / `pm package describe` payload: a flat,\n * by-name map of every surface each loaded extension registered.\n *\n * The SDK already ships {@link describeExtensionActivation} -- the `describe`\n * (enumerate-all) verb that complements the `assert*` (verify-one) and `run*`\n * (invoke-one) testing helpers -- but until now it was reachable only from a test\n * that hand-built an {@link ExtensionActivationResult}. This module is the thin\n * orchestration that lets an agent at the CLI (or over MCP) ask \"what does this\n * installed extension add to my context?\" in one call, instead of stitching\n * together `doctor` (errors), `manage` (update metadata), and a manifest read.\n *\n * It is intentionally pure: the caller performs the load+activate cycle (exactly\n * as `explore`/`doctor` already do) and hands the results here, so the same\n * builder is trivially unit-testable against synthetic activations.\n */\nimport { describeExtensionActivation, type ExtensionActivationSummary } from \"../../../core/extensions/activation-summary.js\";\nimport type { ExtensionActivationResult, ExtensionLayer, ExtensionLoadResult } from \"../../../core/extensions/loader.js\";\nimport { normalizeExtensionNameForMatch } from \"./shared.js\";\n\n/**\n * Runtime state of a described extension. `ok` loaded and activated cleanly,\n * `failed` loaded but threw during `activate`, and `not_loaded` failed to import\n * at all -- the latter two register nothing, so their `surfaces` are empty and\n * the status explains why (rather than implying the extension contributes\n * nothing).\n */\nexport type ExtensionDescribeActivationStatus = \"ok\" | \"failed\" | \"not_loaded\";\n\n/**\n * One extension's contribution to the workspace: its identity plus the\n * {@link ExtensionActivationSummary} of every surface it registered.\n *\n * `surfaces` is matched by extension *name* (mirroring\n * {@link describeExtensionActivation}'s name filter), so when the same name is\n * loaded in both the project and global layers each entry reflects that name's\n * combined surfaces -- the `layer`/`version` fields still distinguish the\n * physical entries.\n */\nexport interface ExtensionSurfaceDescription {\n name: string;\n layer: ExtensionLayer;\n version: string;\n activation_status: ExtensionDescribeActivationStatus;\n surfaces: ExtensionActivationSummary;\n}\n\n/**\n * Result of {@link buildExtensionDescribeResult}: the per-extension surface maps\n * plus a deduplicated `union` across the described set. `target` echoes the\n * requested name filter (or `null` for the whole workspace) and `total` counts\n * the described entries so callers need not re-measure `extensions`.\n */\nexport interface ExtensionDescribeResult {\n target: string | null;\n total: number;\n extensions: ExtensionSurfaceDescription[];\n union: ExtensionActivationSummary;\n}\n\n/**\n * Compose a collision-free identity key for an extension from its layer and\n * normalized name. The two parts are joined with a colon; the layer prefix is\n * always a colon-free enum value, so distinct (layer, name) pairs never collide\n * even when a name itself contains a colon.\n */\nfunction layerNameKey(layer: ExtensionLayer, name: string): string {\n return `${layer}:${normalizeExtensionNameForMatch(name)}`;\n}\n\n/**\n * Summarize, by name, every registration surface the loaded extensions exercised.\n *\n * Walks `loadResult.loaded` (annotating each with `failed` when its layer+name is\n * in `activationResult.failed`) and `loadResult.failed` (as `not_loaded`), sorts\n * the entries by name then layer for deterministic output, and attaches each\n * extension's {@link describeExtensionActivation} summary. When `target` is\n * provided only the case-insensitively matching extensions are described and the\n * `union` is scoped to that name; otherwise every loaded extension contributes.\n * An unmatched `target` yields an empty `extensions` array -- the caller decides\n * whether that is a not-found error.\n */\nexport function buildExtensionDescribeResult(\n target: string | undefined,\n loadResult: ExtensionLoadResult,\n activationResult: ExtensionActivationResult,\n): ExtensionDescribeResult {\n const activationFailedKeys = new Set(activationResult.failed.map((entry) => layerNameKey(entry.layer, entry.name)));\n const candidates: ExtensionSurfaceDescription[] = [\n ...loadResult.loaded.map((entry) => ({\n name: entry.name,\n layer: entry.layer,\n version: entry.version,\n activation_status: activationFailedKeys.has(layerNameKey(entry.layer, entry.name))\n ? (\"failed\" as const)\n : (\"ok\" as const),\n surfaces: describeExtensionActivation(activationResult, { extensionName: entry.name }),\n })),\n ...loadResult.failed.map((entry) => ({\n name: entry.name,\n layer: entry.layer,\n version: \"unknown\",\n activation_status: \"not_loaded\" as const,\n surfaces: describeExtensionActivation(activationResult, { extensionName: entry.name }),\n })),\n ].sort((left, right) => left.name.localeCompare(right.name) || left.layer.localeCompare(right.layer));\n\n const normalizedTarget = typeof target === \"string\" ? normalizeExtensionNameForMatch(target) : null;\n const extensions =\n normalizedTarget === null\n ? candidates\n : candidates.filter((entry) => normalizeExtensionNameForMatch(entry.name) === normalizedTarget);\n\n return {\n target: typeof target === \"string\" ? target.trim() : null,\n total: extensions.length,\n extensions,\n union: describeExtensionActivation(activationResult, normalizedTarget === null ? {} : { extensionName: target }),\n };\n}\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AACH,OAAO,EAAE,2BAA2B,EAAmC,MAAM,gDAAgD,CAAC;AAE9H,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AA0C7D;;;;;GAKG;AACH,SAAS,YAAY,CAAC,KAAqB,EAAE,IAAY;IACvD,OAAO,GAAG,KAAK,IAAI,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAA0B,EAC1B,UAA+B,EAC/B,gBAA2C;IAE3C,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpH,MAAM,UAAU,GAAkC;QAChD,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChF,CAAC,CAAE,QAAkB;gBACrB,CAAC,CAAE,IAAc;YACnB,QAAQ,EAAE,2BAA2B,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;SACvF,CAAC,CAAC;QACH,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,SAAS;YAClB,iBAAiB,EAAE,YAAqB;YACxC,QAAQ,EAAE,2BAA2B,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;SACvF,CAAC,CAAC;KACJ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtG,MAAM,gBAAgB,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpG,MAAM,UAAU,GACd,gBAAgB,KAAK,IAAI;QACvB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,8BAA8B,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,gBAAgB,CAAC,CAAC;IAEpG,OAAO;QACL,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QACzD,KAAK,EAAE,UAAU,CAAC,MAAM;QACxB,UAAU;QACV,KAAK,EAAE,2BAA2B,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;KACjH,CAAC;AACJ,CAAC","debugId":"7a92163a-99b2-5969-acc2-e2b6b0336c2e"}
@@ -4,7 +4,7 @@
4
4
  * Implements extension package-management support for Scaffold.
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]="61e2eb79-305a-5636-b5ca-ab0c6aa4afcc")}catch(e){}}();
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]="9eecdd82-fe71-5803-9186-a33244c4722d")}catch(e){}}();
8
8
  import fs from "node:fs/promises";
9
9
  import path from "node:path";
10
10
  import { pathExists } from "../../../core/fs/fs-utils.js";
@@ -25,6 +25,40 @@ const SCAFFOLD_DECLARED_PERMISSIONS = {
25
25
  env_write: false,
26
26
  process_spawn: false,
27
27
  };
28
+ // TypeScript dev-dependency floor for scaffolded packages, matching the CLI's own
29
+ // toolchain so generated packages compile against the same compiler generation.
30
+ const SCAFFOLD_TYPESCRIPT_VERSION = "^6.0.0";
31
+ // `@types/node` floor for scaffolded packages: the colocated `index.test.ts`
32
+ // imports `node:test`/`node:assert`, which need Node's ambient type definitions
33
+ // to compile. Pinned to the engines floor (Node >=20), matching the CLI itself.
34
+ const SCAFFOLD_TYPES_NODE_VERSION = "^20.0.0";
35
+ // Strict NodeNext tsconfig emitted into every scaffold (ADR pm-2c28: extensions
36
+ // are authored fully in TypeScript). It compiles `index.ts` (and the colocated
37
+ // `index.test.ts`) in place to the `./index.js` entry the manifest loads, so the
38
+ // authored source is type-checked against the SDK contracts while the loader keeps
39
+ // importing plain compiled JavaScript. NodeNext resolution matches the explicit
40
+ // `.js` import specifiers the emitted ESM uses. No `outDir` is set on purpose:
41
+ // tsc auto-excludes its `outDir`, and an in-package `outDir` would exclude the
42
+ // whole package root, leaving the `*.ts` inputs unmatched (TS18003). Emitting
43
+ // beside the source mirrors the first-party `packages/pm-*` layout.
44
+ const SCAFFOLD_TSCONFIG = {
45
+ compilerOptions: {
46
+ target: "ES2022",
47
+ module: "NodeNext",
48
+ moduleResolution: "NodeNext",
49
+ strict: true,
50
+ esModuleInterop: true,
51
+ skipLibCheck: true,
52
+ declaration: false,
53
+ // `node:test`/`node:assert` in the colocated test (and Node globals) resolve
54
+ // from `@types/node`; name it explicitly so it is loaded regardless of how the
55
+ // package manager lays out `node_modules/@types`.
56
+ types: ["node"],
57
+ },
58
+ // Recursive so a package that grows into subdirectory `*.ts` modules still
59
+ // type-checks and compiles them; tsc excludes `node_modules` by default.
60
+ include: ["**/*.ts"],
61
+ };
28
62
  /**
29
63
  * Capability shapes the package/extension scaffolder can target via the
30
64
  * `--capability` selector. `commands` emits the default command-only starter;
@@ -47,23 +81,24 @@ const SAMPLE_TEST_CAPABILITIES_LITERAL = {
47
81
  importers: '["commands", "schema", "importers"]',
48
82
  };
49
83
  const ENTRYPOINT_BULLETS = {
50
- commands: "- `index.js`: starter command registration plus a `deactivate` teardown stub.",
51
- hooks: "- `index.js`: starter command registration, an `after_command` lifecycle hook, and a `deactivate` teardown stub.",
52
- search: "- `index.js`: starter command registration, a search provider, a vector-store adapter, and a `deactivate` teardown stub.",
53
- importers: "- `index.js`: starter command registration, importer/exporter command registrations, and a `deactivate` teardown stub.",
84
+ commands: "- `index.ts`: starter command registration plus a `deactivate` teardown stub (compiled to `index.js`).",
85
+ hooks: "- `index.ts`: starter command registration, an `after_command` lifecycle hook, and a `deactivate` teardown stub (compiled to `index.js`).",
86
+ search: "- `index.ts`: starter command registration, a search provider, a vector-store adapter, and a `deactivate` teardown stub (compiled to `index.js`).",
87
+ importers: "- `index.ts`: starter command registration, importer/exporter command registrations, and a `deactivate` teardown stub (compiled to `index.js`).",
54
88
  };
55
89
  const SAMPLE_TEST_BULLETS = {
56
- commands: "- `index.test.js`: sample `node:test` suite covering activation, command invocation, and teardown via the SDK testing helpers.",
57
- hooks: "- `index.test.js`: sample `node:test` suite covering activation, command invocation, the after_command hook, and teardown via the SDK testing helpers.",
58
- search: "- `index.test.js`: sample `node:test` suite covering activation, command invocation, search provider/vector adapter invocation, and teardown via the SDK testing helpers.",
59
- importers: "- `index.test.js`: sample `node:test` suite covering activation, command invocation, importer/exporter invocation, and teardown via the SDK testing helpers.",
90
+ commands: "- `index.test.ts`: sample `node:test` suite covering activation, command invocation, and teardown via the SDK testing helpers.",
91
+ hooks: "- `index.test.ts`: sample `node:test` suite covering activation, command invocation, the after_command hook, and teardown via the SDK testing helpers.",
92
+ search: "- `index.test.ts`: sample `node:test` suite covering activation, command invocation, search provider/vector adapter invocation, and teardown via the SDK testing helpers.",
93
+ importers: "- `index.test.ts`: sample `node:test` suite covering activation, command invocation, importer/exporter invocation, and teardown via the SDK testing helpers.",
60
94
  };
95
+ const TSCONFIG_BULLET = "- `tsconfig.json`: strict TypeScript config that compiles `index.ts` to the `./index.js` entry.";
61
96
  const PACKAGE_CAPABILITY_README_SECTIONS = {
62
97
  commands: [],
63
98
  hooks: [
64
99
  "",
65
100
  "## Lifecycle Hook",
66
- "`index.js` registers an `after_command` hook via `api.hooks.afterCommand`.",
101
+ "`index.ts` registers an `after_command` hook via `api.hooks.afterCommand`.",
67
102
  "pm fires it once a command finishes, passing the command outcome and the",
68
103
  "items it mutated (`context.affected`). React there to keep external context",
69
104
  "in sync - sync records, emit telemetry, or refresh derived state. The",
@@ -73,7 +108,7 @@ const PACKAGE_CAPABILITY_README_SECTIONS = {
73
108
  search: [
74
109
  "",
75
110
  "## Search Provider",
76
- "`index.js` registers a deterministic in-memory search provider and",
111
+ "`index.ts` registers a deterministic in-memory search provider and",
77
112
  "vector-store adapter through `api.registerSearchProvider` and",
78
113
  "`api.registerVectorStoreAdapter`. Replace the sample scoring,",
79
114
  "embedding, and storage behavior with your project-specific retrieval",
@@ -83,7 +118,7 @@ const PACKAGE_CAPABILITY_README_SECTIONS = {
83
118
  importers: [
84
119
  "",
85
120
  "## Importer and Exporter",
86
- "`index.js` registers paired project-context import/export commands through",
121
+ "`index.ts` registers paired project-context import/export commands through",
87
122
  "`api.registerImporter` and `api.registerExporter`. Replace the starter",
88
123
  "payloads with your domain adapter: GitHub issues, CSV rows, documents,",
89
124
  "tickets, or another project-management source of truth. The `importers`",
@@ -96,7 +131,7 @@ const EXTENSION_CAPABILITY_README_SECTIONS = {
96
131
  hooks: [
97
132
  "",
98
133
  "## Lifecycle Hook",
99
- "`index.js` registers an `after_command` hook via `api.hooks.afterCommand`.",
134
+ "`index.ts` registers an `after_command` hook via `api.hooks.afterCommand`.",
100
135
  "pm fires it once a command finishes, passing the command outcome and the",
101
136
  "items it mutated (`context.affected`). React there to keep external context",
102
137
  "in sync. The `hooks` capability in `manifest.json` grants the registration;",
@@ -105,7 +140,7 @@ const EXTENSION_CAPABILITY_README_SECTIONS = {
105
140
  search: [
106
141
  "",
107
142
  "## Search Provider",
108
- "`index.js` registers a deterministic in-memory search provider and",
143
+ "`index.ts` registers a deterministic in-memory search provider and",
109
144
  "vector-store adapter through `api.registerSearchProvider` and",
110
145
  "`api.registerVectorStoreAdapter`. Replace the sample scoring, embedding,",
111
146
  "and storage behavior with your project-specific retrieval logic. The",
@@ -114,7 +149,7 @@ const EXTENSION_CAPABILITY_README_SECTIONS = {
114
149
  importers: [
115
150
  "",
116
151
  "## Importer and Exporter",
117
- "`index.js` registers paired project-context import/export commands through",
152
+ "`index.ts` registers paired project-context import/export commands through",
118
153
  "`api.registerImporter` and `api.registerExporter`. Replace the starter",
119
154
  "payloads with your domain adapter. The `importers` capability grants both",
120
155
  "registrations, and `schema` grants the example command flag metadata.",
@@ -253,8 +288,10 @@ function buildActivateBodyLines(extensionName, commandName, capability) {
253
288
  ];
254
289
  }
255
290
  /**
256
- * Build the colocated `node:test` sample suite for the chosen capability. Every
257
- * variant covers activation, command invocation, and teardown via the SDK
291
+ * Build the colocated `node:test` sample suite (`index.test.ts`) for the chosen
292
+ * capability. Authored in TypeScript and run through `npm test` (`tsc && node
293
+ * --test`), it imports the compiled `./index.js` entry under NodeNext resolution.
294
+ * Every variant covers activation, command invocation, and teardown via the SDK
258
295
  * testing helpers; the `hooks` variant adds a test that asserts the
259
296
  * `after_command` hook is registered and fires cleanly through the public SDK
260
297
  * testing helper `runRegisteredHookForTest`.
@@ -327,6 +364,8 @@ function buildSampleTestSource(extensionName, commandName, capability) {
327
364
  ` extensionName: ${JSON.stringify(extensionName)},`,
328
365
  " });",
329
366
  "",
367
+ " // The starter provider reads only document title/id, so `settings` is a",
368
+ " // minimal typed stub and `documents` carry just the fields it inspects.",
330
369
  " const query = await runRegisteredSearchProviderForTest(activation.registrations, {",
331
370
  ` provider: ${JSON.stringify(searchProviderName)},`,
332
371
  ' operation: "query",',
@@ -335,11 +374,11 @@ function buildSampleTestSource(extensionName, commandName, capability) {
335
374
  ' mode: "semantic",',
336
375
  ' tokens: ["sync"],',
337
376
  " options: {},",
338
- " settings: {},",
377
+ " settings: {} as PmSettings,",
339
378
  " documents: [",
340
379
  ' { metadata: { id: "pm-1", title: "Sync external context" }, body: "" },',
341
380
  ' { metadata: { id: "pm-2", title: "Unrelated task" }, body: "" },',
342
- " ],",
381
+ " ] as ItemDocument[],",
343
382
  " },",
344
383
  " });",
345
384
  ' assert.deepEqual(query, { hits: [{ id: "pm-1", score: 1, matched_fields: ["title"] }] });',
@@ -347,14 +386,14 @@ function buildSampleTestSource(extensionName, commandName, capability) {
347
386
  " const embedding = await runRegisteredSearchProviderForTest(activation.registrations, {",
348
387
  ` provider: ${JSON.stringify(searchProviderName)},`,
349
388
  ' operation: "embed",',
350
- ' context: { input: "abc", settings: {}, model: "starter-model" },',
389
+ ' context: { input: "abc", settings: {} as PmSettings, model: "starter-model" },',
351
390
  " });",
352
391
  " assert.deepEqual(embedding, [3]);",
353
392
  "",
354
393
  " const vectorHits = await runRegisteredVectorStoreAdapterForTest(activation.registrations, {",
355
394
  ` adapter: ${JSON.stringify(vectorAdapterName)},`,
356
395
  ' operation: "query",',
357
- " context: { vector: [0.1, 0.2], limit: 2, settings: {} },",
396
+ " context: { vector: [0.1, 0.2], limit: 2, settings: {} as PmSettings },",
358
397
  " });",
359
398
  ' assert.deepEqual(vectorHits, [{ id: "starter-vector-hit", score: 2 }]);',
360
399
  "});",
@@ -402,6 +441,9 @@ function buildSampleTestSource(extensionName, commandName, capability) {
402
441
  "import {",
403
442
  ...importNames,
404
443
  '} from "@unbrained/pm-cli/sdk/testing";',
444
+ // The search sample's synthetic query/vector contexts reference these SDK types
445
+ // for their typed-stub fixtures; other capabilities need no extra type imports.
446
+ ...(searchEnabled ? ['import type { ItemDocument, PmSettings } from "@unbrained/pm-cli/sdk";'] : []),
405
447
  'import extension from "./index.js";',
406
448
  "",
407
449
  `test(${JSON.stringify(`${extensionName} registers its starter command`)}, async () => {`,
@@ -427,8 +469,14 @@ function buildSampleTestSource(extensionName, commandName, capability) {
427
469
  ` command: ${JSON.stringify(commandName)},`,
428
470
  " });",
429
471
  " assert.equal(invocation.handled, true);",
430
- " assert.equal(invocation.result.ok, true);",
431
- ` assert.equal(invocation.result.command, ${JSON.stringify(commandName)});`,
472
+ " // The handler result is typed `unknown`, so deep-equality on the whole",
473
+ " // structured payload keeps the assertion type-safe without a cast.",
474
+ " assert.deepEqual(invocation.result, {",
475
+ " ok: true,",
476
+ ` source: ${JSON.stringify(extensionName)},`,
477
+ ` command: ${JSON.stringify(commandName)},`,
478
+ ' message: "Starter extension scaffold is active.",',
479
+ " });",
432
480
  "});",
433
481
  "",
434
482
  ...hookTestLines,
@@ -465,13 +513,15 @@ export function buildStarterExtensionScaffoldFiles(extensionName, commandName, v
465
513
  permissions: { ...SCAFFOLD_DECLARED_PERMISSIONS },
466
514
  capabilities,
467
515
  }, null, 2)}\n`;
468
- // Keep scaffolds dependency-light by default: even package mode can be
469
- // installed before peer dependencies are materialized in the generated root.
470
- // The JSDoc import preserves editor narrowing without forcing the runtime
471
- // loader to resolve @unbrained/pm-cli/sdk from a freshly generated scaffold.
516
+ // The entrypoint is authored fully in TypeScript (ADR pm-2c28): the `import
517
+ // type` is erased at compile time, so the typed `ExtensionApi` parameter is
518
+ // checked against the SDK contract at author time while the emitted ./index.js
519
+ // stays import-light. `npm run build` (tsc) compiles this index.ts to the
520
+ // ./index.js the manifest entry loads.
472
521
  const entrypoint = [
473
- '/** @param {import("@unbrained/pm-cli/sdk").ExtensionApi} api */',
474
- "export function activate(api) {",
522
+ 'import type { ExtensionApi } from "@unbrained/pm-cli/sdk";',
523
+ "",
524
+ "export function activate(api: ExtensionApi): void {",
475
525
  ...buildActivateBodyLines(extensionName, commandName, capability),
476
526
  "}",
477
527
  "",
@@ -479,7 +529,7 @@ export function buildStarterExtensionScaffoldFiles(extensionName, commandName, v
479
529
  "// shutdown/reload (e.g. the MCP server between requests) to release anything",
480
530
  "// `activate` opened - timers, connections, caches. This starter holds no such",
481
531
  "// resources, so it stays a documented no-op; add cleanup here as you grow.",
482
- "export function deactivate() {}",
532
+ "export function deactivate(): void {}",
483
533
  "",
484
534
  "export default {",
485
535
  " activate,",
@@ -487,7 +537,8 @@ export function buildStarterExtensionScaffoldFiles(extensionName, commandName, v
487
537
  "};",
488
538
  "",
489
539
  ].join("\n");
490
- // README bullet describing what index.js wires, kept in sync with the chosen
540
+ const tsconfig = `${JSON.stringify(SCAFFOLD_TSCONFIG, null, 2)}\n`;
541
+ // README bullet describing what index.ts wires, kept in sync with the chosen
491
542
  // capability so the generated docs match the generated code.
492
543
  const entrypointBullet = ENTRYPOINT_BULLETS[capability];
493
544
  if (vocabulary === "package") {
@@ -497,14 +548,21 @@ export function buildStarterExtensionScaffoldFiles(extensionName, commandName, v
497
548
  private: true,
498
549
  type: "module",
499
550
  keywords: ["pm-package"],
500
- // `node --test` runs the colocated *.test.js sample against the peer SDK
501
- // testing helpers; no extra dev-dependency or test runner is required.
551
+ // `build` compiles index.ts to the ./index.js the manifest loads; `test`
552
+ // compiles first (Node's `node --test` runs the emitted *.test.js, not the
553
+ // TypeScript source) then runs the colocated sample against the peer SDK
554
+ // testing helpers — no third-party test runner required.
502
555
  scripts: {
503
- test: "node --test",
556
+ build: "tsc",
557
+ test: "tsc && node --test",
504
558
  },
505
559
  peerDependencies: {
506
560
  "@unbrained/pm-cli": "*",
507
561
  },
562
+ devDependencies: {
563
+ "@types/node": SCAFFOLD_TYPES_NODE_VERSION,
564
+ typescript: SCAFFOLD_TYPESCRIPT_VERSION,
565
+ },
508
566
  pm: {
509
567
  aliases: [extensionName],
510
568
  extensions: ["."],
@@ -524,34 +582,103 @@ export function buildStarterExtensionScaffoldFiles(extensionName, commandName, v
524
582
  // capability, the after_command lifecycle hook).
525
583
  const sampleTest = buildSampleTestSource(extensionName, commandName, capability);
526
584
  const sampleTestBullet = SAMPLE_TEST_BULLETS[capability];
527
- const gitignore = ["node_modules/", "*.log", ""].join("\n");
585
+ // Ignore compiled TypeScript output wherever tsc emits it. Authors can add
586
+ // sibling or subdirectory modules, and tsc writes each .js next to its source.
587
+ const gitignore = [
588
+ "node_modules/",
589
+ "*.log",
590
+ "",
591
+ "# Compiled TypeScript output (npm run build)",
592
+ "*.js",
593
+ "*.test.js",
594
+ "*.js.map",
595
+ "*.d.ts",
596
+ "*.d.ts.map",
597
+ "",
598
+ ].join("\n");
599
+ const searchProviderName = `${extensionName}-search`;
600
+ const vectorAdapterName = `${extensionName}-vector`;
601
+ const adapterName = `${extensionName.replace(/-/g, " ")} items`;
602
+ const defineBuilderImports = [
603
+ "defineCommand",
604
+ ...(capability === "hooks" ? ["defineAfterCommandHook"] : []),
605
+ ...(capability === "search" ? ["defineSearchProvider", "defineVectorStoreAdapter"] : []),
606
+ ...(capability === "importers" ? ["defineImporter", "defineExporter"] : []),
607
+ ].join(", ");
608
+ const defineBuilderSnippet = [
609
+ "```ts",
610
+ `import { ${defineBuilderImports} } from "@unbrained/pm-cli/sdk";`,
611
+ 'import type { ExtensionApi } from "@unbrained/pm-cli/sdk";',
612
+ "",
613
+ "export const pingCommand = defineCommand({",
614
+ ` name: ${JSON.stringify(commandName)},`,
615
+ ' description: "Starter scaffold command. Replace with your own behavior.",',
616
+ " run: (context) => ({ ok: true, command: context.command }),",
617
+ "});",
618
+ ];
619
+ if (capability === "hooks") {
620
+ defineBuilderSnippet.push("", "export const afterCommandHook = defineAfterCommandHook((context) => {", " if (!context.ok) return;", " // React to context.affected here as your package grows.", "});");
621
+ }
622
+ if (capability === "search") {
623
+ defineBuilderSnippet.push("", "export const searchProvider = defineSearchProvider({", ` name: ${JSON.stringify(searchProviderName)},`, " query: async (context) => ({", " hits: context.documents", " .filter((document) => String(document.metadata.title ?? \"\").toLowerCase().includes(context.query.toLowerCase()))", " .map((document) => ({ id: document.metadata.id, score: 1, matched_fields: [\"title\"] })),", " }),", " embed: async (context) => [context.input.length],", "});", "", "export const vectorStoreAdapter = defineVectorStoreAdapter({", ` name: ${JSON.stringify(vectorAdapterName)},`, " query: async (context) => [{ id: \"starter-vector-hit\", score: context.limit }],", " upsert: async (context) => ({ upserted: context.points.length }),", " delete: async (context) => ({ deleted: context.ids.length }),", "});");
624
+ }
625
+ if (capability === "importers") {
626
+ defineBuilderSnippet.push("", "export const importer = defineImporter(async (context) => ({", " imported: 1,", " source: context.options.source ?? \"starter\",", " args: context.args,", "}));", "", "export const exporter = defineExporter(async (context) => ({", " exported: true,", " destination: context.options.destination ?? \"stdout\",", " args: context.args,", "}));");
627
+ }
628
+ defineBuilderSnippet.push("", "export function activate(api: ExtensionApi): void {", " api.registerCommand(pingCommand);");
629
+ if (capability === "hooks") {
630
+ defineBuilderSnippet.push(" api.hooks.afterCommand(afterCommandHook);");
631
+ }
632
+ if (capability === "search") {
633
+ defineBuilderSnippet.push(" api.registerSearchProvider(searchProvider);", " api.registerVectorStoreAdapter(vectorStoreAdapter);");
634
+ }
635
+ if (capability === "importers") {
636
+ defineBuilderSnippet.push(` api.registerImporter(${JSON.stringify(adapterName)}, importer, {`, ` action: ${JSON.stringify(`${adapterName} import`)},`, ' description: "Import starter records into pm context.",', " flags: [", " {", ' long: "--source",', ' value_name: "name",', ' value_type: "string",', ' description: "Source name or path to import from.",', " },", " ],", " });", ` api.registerExporter(${JSON.stringify(adapterName)}, exporter, {`, ` action: ${JSON.stringify(`${adapterName} export`)},`, ' description: "Export pm context into starter records.",', " flags: [", " {", ' long: "--destination",', ' value_name: "name",', ' value_type: "string",', ' description: "Destination name or path to export to.",', " },", " ],", " });");
637
+ }
638
+ defineBuilderSnippet.push("}", "", "export function deactivate(): void {}", "", "export default { activate, deactivate };", "```");
528
639
  const packageReadme = [
529
640
  `# ${packageName}`,
530
641
  "",
531
642
  "Generated by `pm package init`.",
532
643
  "",
533
644
  "## Included Files",
534
- "- `package.json`: package metadata, `test` script, and `pm` resource manifest.",
645
+ "- `package.json`: package metadata, `build`/`test` scripts, and `pm` resource manifest.",
535
646
  "- `manifest.json`: extension metadata and capabilities.",
536
647
  entrypointBullet,
537
648
  sampleTestBullet,
538
- "- `.gitignore`: ignores `node_modules/` and log files.",
649
+ TSCONFIG_BULLET,
650
+ "- `.gitignore`: ignores `node_modules/`, logs, and compiled JavaScript/declaration output.",
539
651
  "",
540
652
  "## Quick Start",
653
+ "This package is authored in TypeScript; build it once so the manifest's",
654
+ "`./index.js` entry exists, then install it:",
541
655
  "```bash",
656
+ "npm install",
657
+ "npm run build",
542
658
  "pm install --project <package-path>",
543
659
  `pm ${commandName}`,
544
660
  "pm package doctor --project --detail summary",
545
661
  "```",
546
662
  "",
547
663
  "## Validate the Package",
548
- "Install the peer SDK once, then run the colocated sample test:",
664
+ "`npm install` pulls the peer SDK and TypeScript; `npm test` compiles and runs",
665
+ "the colocated sample test:",
549
666
  "```bash",
550
667
  "npm install",
551
668
  "npm test",
552
669
  "```",
553
- "`npm test` runs `node --test`, which executes `index.test.js` against the",
670
+ "`npm test` runs `tsc && node --test`: it compiles `index.ts`/`index.test.ts`",
671
+ "then executes the emitted `index.test.js` against the",
554
672
  "`@unbrained/pm-cli/sdk/testing` helpers - no extra test runner required.",
673
+ "",
674
+ "## Authoring With define* Builders",
675
+ "`index.ts` is authored fully in TypeScript so every registration is checked",
676
+ "against the SDK contracts at author time. Use the public SDK authoring",
677
+ "builders for exported definitions you want literal-type preservation,",
678
+ "contextual handler inference, and direct unit tests for:",
679
+ ...defineBuilderSnippet,
680
+ "The builders return their argument unchanged; runtime validation still lives",
681
+ "in `api.register*`, and behavior validation lives in `sdk/testing`.",
555
682
  ...PACKAGE_CAPABILITY_README_SECTIONS[capability],
556
683
  "",
557
684
  "## Compatibility Bounds",
@@ -564,8 +691,8 @@ export function buildStarterExtensionScaffoldFiles(extensionName, commandName, v
564
691
  "The starter command is pure compute, so `manifest.json` declares `trusted: true`, `sandbox_profile: \"strict\"`, and all six permission keys as `false`. Keep that least-privilege shape for pure packages; relax only the specific permission your package actually needs and verify with `pm package doctor --project --detail deep --trace`.",
565
692
  "",
566
693
  "## Notes",
567
- "- Keep simple starter runtime behavior at the package root so local installs work without dependency bootstrapping.",
568
- "- Move larger runtimes into subdirectories only after adding package dependencies and validating `pm package doctor`.",
694
+ "- Author in `index.ts`; `npm run build` (tsc) emits the `./index.js` the manifest loads, so rebuild after editing before installing or reloading.",
695
+ "- Move larger runtimes into sibling or subdirectory `*.ts` modules and import them; `tsconfig.json` compiles every `*.ts` in the package (recursively).",
569
696
  "- Add capabilities to the extension manifest only when the entrypoint uses the matching SDK API.",
570
697
  "- Use `@unbrained/pm-cli/sdk` as the public SDK import for richer package runtimes.",
571
698
  "",
@@ -573,8 +700,9 @@ export function buildStarterExtensionScaffoldFiles(extensionName, commandName, v
573
700
  return {
574
701
  "package.json": packageJson,
575
702
  "manifest.json": manifest,
576
- "index.js": entrypoint,
577
- "index.test.js": sampleTest,
703
+ "index.ts": entrypoint,
704
+ "index.test.ts": sampleTest,
705
+ "tsconfig.json": tsconfig,
578
706
  ".gitignore": gitignore,
579
707
  "README.md": packageReadme,
580
708
  };
@@ -587,9 +715,16 @@ export function buildStarterExtensionScaffoldFiles(extensionName, commandName, v
587
715
  "## Included Files",
588
716
  "- `manifest.json`: extension metadata and capabilities.",
589
717
  entrypointBullet,
718
+ TSCONFIG_BULLET,
590
719
  "",
591
720
  "## Quick Start",
721
+ "This extension is authored in TypeScript; compile `index.ts` to the manifest's",
722
+ "`./index.js` entry, then install it. The SDK types resolve once",
723
+ "`@unbrained/pm-cli` is available to the compiler (install it, Node types, and TypeScript, or",
724
+ "build from a project that already depends on the CLI):",
592
725
  "```bash",
726
+ "npm install -D typescript @types/node @unbrained/pm-cli",
727
+ "npx tsc",
593
728
  "pm extension --install --project <scaffold-path>",
594
729
  `pm ${commandName}`,
595
730
  "pm extension --doctor --project --detail summary",
@@ -606,14 +741,15 @@ export function buildStarterExtensionScaffoldFiles(extensionName, commandName, v
606
741
  "The starter command is pure compute, so `manifest.json` declares `trusted: true`, `sandbox_profile: \"strict\"`, and all six permission keys as `false`. Keep that least-privilege shape for pure extensions; relax only the specific permission your extension actually needs and verify with `pm extension --doctor --project --detail deep --trace`.",
607
742
  "",
608
743
  "## Notes",
609
- "- This scaffold uses ESM exports so it works in package scopes with `type: module`.",
610
- "- Update `manifest.json` capabilities and `index.js` command behavior as your extension evolves.",
744
+ "- This scaffold uses TypeScript ESM source compiled to ESM output, so it works in package scopes with `type: module`.",
745
+ "- Author in `index.ts` and recompile to `index.js` (the manifest entry) after editing capabilities or command behavior.",
611
746
  "- Release any resources `activate` opens (timers, connections, caches) in the `deactivate` teardown hook.",
612
747
  "",
613
748
  ].join("\n");
614
749
  return {
615
750
  "manifest.json": manifest,
616
- "index.js": entrypoint,
751
+ "index.ts": entrypoint,
752
+ "tsconfig.json": tsconfig,
617
753
  "README.md": readme,
618
754
  };
619
755
  }
@@ -682,4 +818,4 @@ export async function scaffoldExtensionProject(target, vocabulary = "extension",
682
818
  };
683
819
  }
684
820
  //# sourceMappingURL=scaffold.js.map
685
- //# debugId=61e2eb79-305a-5636-b5ca-ab0c6aa4afcc
821
+ //# debugId=9eecdd82-fe71-5803-9186-a33244c4722d