@rainbow-robotics/muscat-plugin-kit 1.10.1-dev.1 → 1.10.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.
Files changed (205) hide show
  1. package/README.md +282 -282
  2. package/cli/README.md +274 -274
  3. package/cli/bin/create-muscat-plugin.mjs +8 -8
  4. package/cli/bin/muscat-pk.mjs +155 -155
  5. package/cli/bundle-templates.mjs +31 -31
  6. package/cli/docker/Dockerfile.cpp +28 -28
  7. package/cli/docker/Dockerfile.dev +30 -30
  8. package/cli/docker/Dockerfile.python +21 -21
  9. package/cli/m5-e2e.mjs +69 -69
  10. package/cli/prepack.mjs +10 -10
  11. package/cli/src/ai-rules.mjs +70 -70
  12. package/cli/src/build.mjs +447 -447
  13. package/cli/src/check-package.mjs +13 -13
  14. package/cli/src/completion.mjs +166 -166
  15. package/cli/src/cpp.mjs +78 -78
  16. package/cli/src/cppIde.mjs +75 -75
  17. package/cli/src/dev.mjs +165 -165
  18. package/cli/src/devBack.mjs +734 -727
  19. package/cli/src/devUi.mjs +247 -243
  20. package/cli/src/esbuild.mjs +56 -56
  21. package/cli/src/host_agent.py +223 -223
  22. package/cli/src/manifest.mjs +287 -287
  23. package/cli/src/mcp.mjs +1071 -1071
  24. package/cli/src/muscatLocal.mjs +209 -209
  25. package/cli/src/new.mjs +343 -343
  26. package/cli/src/pluginDevServer.mjs +111 -111
  27. package/cli/src/ports.mjs +193 -193
  28. package/cli/src/python.mjs +112 -112
  29. package/cli/src/ros2.mjs +109 -109
  30. package/cli/src/sdk.mjs +117 -117
  31. package/cli/src/storybook.mjs +168 -168
  32. package/cli/src/type.mjs +141 -141
  33. package/cli/src/uninstall.mjs +81 -81
  34. package/cli/src/update.mjs +295 -295
  35. package/cli/src/util.mjs +441 -441
  36. package/cli/src/zenohDev.mjs +83 -81
  37. package/cli/storybook-dist/_design-tokens.css +4957 -4957
  38. package/cli/storybook-dist/_stories-src/NxAvatar.stories.tsx +27 -27
  39. package/cli/storybook-dist/_stories-src/NxPagination.stories.tsx +28 -28
  40. package/cli/storybook-dist/_stories-src/RBAccordion/RBAccordion.stories.tsx +46 -46
  41. package/cli/storybook-dist/_stories-src/RBAccordion/RBAccordionGroup.stories.tsx +73 -73
  42. package/cli/storybook-dist/_stories-src/RBBadge/RBBadge.stories.tsx +93 -93
  43. package/cli/storybook-dist/_stories-src/RBBattery/RBBattery.stories.tsx +74 -74
  44. package/cli/storybook-dist/_stories-src/RBButton/RBCheckIconButton.stories.tsx +28 -28
  45. package/cli/storybook-dist/_stories-src/RBButton/RBCheckLabelButton.stories.tsx +84 -84
  46. package/cli/storybook-dist/_stories-src/RBButton/RBIconButton.stories.tsx +57 -57
  47. package/cli/storybook-dist/_stories-src/RBButton/RBInlineLabelButton.stories.tsx +41 -41
  48. package/cli/storybook-dist/_stories-src/RBButton/RBLabelButton.stories.tsx +60 -60
  49. package/cli/storybook-dist/_stories-src/RBDatePicker/RBDateInput.stories.tsx +44 -44
  50. package/cli/storybook-dist/_stories-src/RBDatePicker/RBRangeDateInput.stories.tsx +56 -56
  51. package/cli/storybook-dist/_stories-src/RBDialog/RBAlert.stories.tsx +51 -51
  52. package/cli/storybook-dist/_stories-src/RBDialog/RBConfirm.stories.tsx +55 -55
  53. package/cli/storybook-dist/_stories-src/RBDialog/RBPrompt.stories.tsx +52 -52
  54. package/cli/storybook-dist/_stories-src/RBDivider/RBDivider.stories.tsx +93 -93
  55. package/cli/storybook-dist/_stories-src/RBEmptyView/RBEmptyView.stories.tsx +49 -49
  56. package/cli/storybook-dist/_stories-src/RBIcons/RBColorIcons.stories.tsx +108 -108
  57. package/cli/storybook-dist/_stories-src/RBIcons/RBIcons.stories.tsx +106 -106
  58. package/cli/storybook-dist/_stories-src/RBInput/RBCheckBox.stories.tsx +89 -89
  59. package/cli/storybook-dist/_stories-src/RBInput/RBMultiRangeInput.stories.tsx +64 -64
  60. package/cli/storybook-dist/_stories-src/RBInput/RBRadioBox.stories.tsx +65 -65
  61. package/cli/storybook-dist/_stories-src/RBInput/RBRadioButton.stories.tsx +68 -68
  62. package/cli/storybook-dist/_stories-src/RBInput/RBSelectBox.stories.tsx +216 -216
  63. package/cli/storybook-dist/_stories-src/RBInput/RBSideNumberInput.stories.tsx +90 -90
  64. package/cli/storybook-dist/_stories-src/RBInput/RBText/RBTextArea.stories.tsx +45 -45
  65. package/cli/storybook-dist/_stories-src/RBInput/RBText/RBTextInput.stories.tsx +50 -50
  66. package/cli/storybook-dist/_stories-src/RBInput/RBTextField.stories.tsx +102 -102
  67. package/cli/storybook-dist/_stories-src/RBJoyStick/RBJoyStick.stories.tsx +31 -31
  68. package/cli/storybook-dist/_stories-src/RBLight/RBLight.stories.tsx +36 -36
  69. package/cli/storybook-dist/_stories-src/RBPagination/RBPagination.stories.tsx +49 -49
  70. package/cli/storybook-dist/_stories-src/RBShadcn/RBCard/RBCard.stories.tsx +89 -89
  71. package/cli/storybook-dist/_stories-src/RBShadcn/RBCommand/RBCommand.stories.tsx +116 -116
  72. package/cli/storybook-dist/_stories-src/RBShadcn/RBDialog/RBDialog.stories.tsx +74 -74
  73. package/cli/storybook-dist/_stories-src/RBShadcn/RBDrawer/RBDrawer.stories.tsx +99 -99
  74. package/cli/storybook-dist/_stories-src/RBShadcn/RBDropdownMenu/RBDropdownMenu.stories.tsx +123 -123
  75. package/cli/storybook-dist/_stories-src/RBShadcn/RBMenubar/RBMenubar.stories.tsx +135 -135
  76. package/cli/storybook-dist/_stories-src/RBShadcn/RBPopover/RBPopover.stories.tsx +69 -69
  77. package/cli/storybook-dist/_stories-src/RBShadcn/RBResizable/RBResizable.stories.tsx +49 -49
  78. package/cli/storybook-dist/_stories-src/RBShadcn/RBSheet/RBSheet.stories.tsx +91 -91
  79. package/cli/storybook-dist/_stories-src/RBShadcn/RBSlider/RBSlider.stories.tsx +38 -38
  80. package/cli/storybook-dist/_stories-src/RBShadcn/RBSwitch/RBSwitch.stories.tsx +112 -112
  81. package/cli/storybook-dist/_stories-src/RBShadcn/RBTabs/RBTabs.stories.tsx +75 -75
  82. package/cli/storybook-dist/_stories-src/RBShadcn/RBToggle/RBToggle.stories.tsx +51 -51
  83. package/cli/storybook-dist/_stories-src/RBShadcn/RBToggleGroup/RBToggleGroup.stories.tsx +84 -84
  84. package/cli/storybook-dist/_stories-src/RBTab/RBChipTab.stories.tsx +102 -102
  85. package/cli/storybook-dist/_stories-src/RBTab/RBChipsBoxTab.stories.tsx +78 -78
  86. package/cli/storybook-dist/_stories-src/RBTab/RBTab.stories.tsx +57 -57
  87. package/cli/storybook-dist/_stories-src/RBTable/RBTable.stories.tsx +177 -177
  88. package/cli/storybook-dist/_stories-src/RBTable/RBTableRow.stories.tsx +64 -64
  89. package/cli/storybook-dist/_stories-src/RBToast/RBToast.stories.tsx +117 -117
  90. package/cli/storybook-dist/_stories-src/RBTooltip/RBTooltip.stories.tsx +50 -50
  91. package/cli/storybook-dist/_stories-src/loading/RBSpinner.stories.tsx +30 -30
  92. package/cli/storybook-dist/_stories-src/nx-button/NxButton.stories.tsx +54 -54
  93. package/cli/storybook-dist/_stories-src/nx-button/NxPointerHoldButton.stories.tsx +57 -57
  94. package/cli/storybook-dist/_stories-src/nx-icons/NxIcons.stories.tsx +48 -48
  95. package/cli/storybook-dist/_stories-src/nx-inputs/NxNumberInput.stories.tsx +103 -103
  96. package/cli/storybook-dist/_stories-src/nx-inputs/NxRangeInput.stories.tsx +27 -27
  97. package/cli/storybook-dist/_stories-src/nx-inputs/NxSelectBox.stories.tsx +67 -67
  98. package/cli/storybook-dist/_stories-src/nx-inputs/NxSlideRange.stories.tsx +45 -45
  99. package/cli/storybook-dist/_stories-src/nx-inputs/NxSwitch.stories.tsx +27 -27
  100. package/cli/storybook-dist/_stories-src/nx-inputs/NxTextArea.stories.tsx +48 -48
  101. package/cli/storybook-dist/_stories-src/nx-inputs/NxTextInput.stories.tsx +46 -46
  102. package/cli/storybook-dist/assets/{Color-YHDXOIA2-D6JqZzDJ.js → Color-YHDXOIA2-B4IER17l.js} +1 -1
  103. package/cli/storybook-dist/assets/{Docs-ESb7JAHg.js → Docs-C8GCHFtK.js} +3 -3
  104. package/cli/storybook-dist/assets/{Docs-6gD2kUo1.js → Docs-CgdEMPQP.js} +2 -2
  105. package/cli/storybook-dist/assets/{Docs-B9wd8Ok7.js → Docs-Ck3WHvk6.js} +3 -3
  106. package/cli/storybook-dist/assets/{Docs-CgFbWWXM.js → Docs-D9NHsoeZ.js} +2 -2
  107. package/cli/storybook-dist/assets/{Docs-DBQup8Bu.js → Docs-DNYQC7nl.js} +3 -3
  108. package/cli/storybook-dist/assets/{Docs-CMjovnSY.js → Docs-DUfeiM4I.js} +4 -4
  109. package/cli/storybook-dist/assets/{DocsRenderer-CFRXHY34-BOUI1AHi.js → DocsRenderer-CFRXHY34-C0WhyDoR.js} +1 -1
  110. package/cli/storybook-dist/assets/{NxAvatar.stories-DsYFMUh3.js → NxAvatar.stories-CwnK8AUF.js} +1 -1
  111. package/cli/storybook-dist/assets/{NxButton.stories-CHfNcqsc.js → NxButton.stories-ueYdosfQ.js} +8 -8
  112. package/cli/storybook-dist/assets/{NxNumberInput.stories-BFw_4vFE.js → NxNumberInput.stories-M5ZCLbrK.js} +1 -1
  113. package/cli/storybook-dist/assets/{NxPagination.stories-DVfxyw4M.js → NxPagination.stories-bxxUnHEL.js} +1 -1
  114. package/cli/storybook-dist/assets/{NxPointerHoldButton.stories-BzyxUWoZ.js → NxPointerHoldButton.stories-BHxB2kr5.js} +1 -1
  115. package/cli/storybook-dist/assets/{NxRangeInput.stories-DmRdzBc1.js → NxRangeInput.stories-BKfr-fp4.js} +6 -6
  116. package/cli/storybook-dist/assets/{NxSelectBox.stories-B1KkNUOf.js → NxSelectBox.stories-CG8FuTBq.js} +1 -1
  117. package/cli/storybook-dist/assets/{NxSlideRange.stories-CyOdvfQ6.js → NxSlideRange.stories-BRTFtMTL.js} +1 -1
  118. package/cli/storybook-dist/assets/{NxSwitch.stories-DrDBw0qp.js → NxSwitch.stories-Bwuyzn-R.js} +1 -1
  119. package/cli/storybook-dist/assets/{NxTextArea.stories-DTB2aqNS.js → NxTextArea.stories-COq2sGqu.js} +1 -1
  120. package/cli/storybook-dist/assets/{NxTextInput.stories-DU0rucmM.js → NxTextInput.stories-CjsBLz05.js} +1 -1
  121. package/cli/storybook-dist/assets/{RBAccordion.stories-DTfOtXtp.js → RBAccordion.stories-BARwuZ0Q.js} +3 -3
  122. package/cli/storybook-dist/assets/{RBAccordionGroup.stories-9y9BjrUe.js → RBAccordionGroup.stories-COrPxETW.js} +10 -10
  123. package/cli/storybook-dist/assets/{RBAlert.stories-DLTAv9fT.js → RBAlert.stories-BQrkjZPt.js} +3 -3
  124. package/cli/storybook-dist/assets/{RBBadge.stories-BNMACewA.js → RBBadge.stories-BTsLL-lK.js} +1 -1
  125. package/cli/storybook-dist/assets/{RBBattery.stories-B3kXMAt5.js → RBBattery.stories-DAeQdJbc.js} +1 -1
  126. package/cli/storybook-dist/assets/{RBCard.stories-Y-s8R2n7.js → RBCard.stories-HyhOE80R.js} +39 -39
  127. package/cli/storybook-dist/assets/{RBCheckBox.stories-DBuT9tL4.js → RBCheckBox.stories-KFk0WqX_.js} +1 -1
  128. package/cli/storybook-dist/assets/{RBCheckIconButton.stories-CWu1TL56.js → RBCheckIconButton.stories-CXbbktF5.js} +1 -1
  129. package/cli/storybook-dist/assets/{RBCheckLabelButton.stories-sCu2MGCX.js → RBCheckLabelButton.stories-DWfYz_9Z.js} +17 -17
  130. package/cli/storybook-dist/assets/{RBChipTab.stories-BX9qLJkR.js → RBChipTab.stories-JPEgVFAS.js} +5 -5
  131. package/cli/storybook-dist/assets/{RBChipsBoxTab.stories-35u1aJ-P.js → RBChipsBoxTab.stories-CTPuWXrQ.js} +1 -1
  132. package/cli/storybook-dist/assets/{RBColorIcons.stories-DAOZ5Ies.js → RBColorIcons.stories-DiFRZ5jk.js} +1 -1
  133. package/cli/storybook-dist/assets/RBCommand.stories-Pf1HAVIR.js +73 -0
  134. package/cli/storybook-dist/assets/{RBConfirm.stories-iMXcUh7Z.js → RBConfirm.stories-D1cEPUXk.js} +3 -3
  135. package/cli/storybook-dist/assets/{RBDateInput.stories-hK5rXECf.js → RBDateInput.stories-RPYpCjig.js} +1 -1
  136. package/cli/storybook-dist/assets/RBDialog.stories-DJH-0XSR.js +38 -0
  137. package/cli/storybook-dist/assets/{RBDivider.stories-BAK-iZ1Z.js → RBDivider.stories-uEj1vOgK.js} +1 -1
  138. package/cli/storybook-dist/assets/{RBDrawer.stories-B2nqf2Nh.js → RBDrawer.stories-BiMzElb2.js} +12 -12
  139. package/cli/storybook-dist/assets/RBDropdownMenu.stories-Da_TBkla.js +86 -0
  140. package/cli/storybook-dist/assets/{RBEmptyView.stories-nCenrgBh.js → RBEmptyView.stories-BHeKGfPS.js} +1 -1
  141. package/cli/storybook-dist/assets/{RBIconButton.stories-DRH7O3sp.js → RBIconButton.stories-NEsRFoYp.js} +1 -1
  142. package/cli/storybook-dist/assets/{RBIcons.stories-D3PyJXG8.js → RBIcons.stories-CcZ-TTLS.js} +1 -1
  143. package/cli/storybook-dist/assets/{RBInlineLabelButton.stories-modQbt10.js → RBInlineLabelButton.stories-B0wpdQyR.js} +1 -1
  144. package/cli/storybook-dist/assets/{RBJoyStick.stories-BY14qVgR.js → RBJoyStick.stories-DEgBou3K.js} +1 -1
  145. package/cli/storybook-dist/assets/{RBLabelButton.stories-DzF7vGwm.js → RBLabelButton.stories-DT8drIsF.js} +1 -1
  146. package/cli/storybook-dist/assets/{RBLight.stories-lF4FRmVh.js → RBLight.stories-Dh-aoeyG.js} +1 -1
  147. package/cli/storybook-dist/assets/{RBMenubar.stories-XhrI7bsV.js → RBMenubar.stories-D-H7UqVh.js} +1 -1
  148. package/cli/storybook-dist/assets/{RBMultiRangeInput.stories-DprllQDl.js → RBMultiRangeInput.stories-hlclv6jI.js} +1 -1
  149. package/cli/storybook-dist/assets/{RBPagination.stories-2v2gBJfC.js → RBPagination.stories-DWCeoZ_S.js} +1 -1
  150. package/cli/storybook-dist/assets/{RBPopover.stories-C8iLIZpv.js → RBPopover.stories-C514M09_.js} +1 -1
  151. package/cli/storybook-dist/assets/{RBPrompt.stories-Th_HrWHI.js → RBPrompt.stories-BSItvfiT.js} +1 -1
  152. package/cli/storybook-dist/assets/{RBRadioBox.stories-CoHuLaN3.js → RBRadioBox.stories-BBb4YbFU.js} +1 -1
  153. package/cli/storybook-dist/assets/{RBRadioButton.stories-DULxE_ff.js → RBRadioButton.stories-CXyOGJCv.js} +1 -1
  154. package/cli/storybook-dist/assets/{RBRangeDateInput.stories-D8A9KBSS.js → RBRangeDateInput.stories-qvhubu0e.js} +1 -1
  155. package/cli/storybook-dist/assets/{RBResizable.stories-C41QfrQ3.js → RBResizable.stories-CZKeyGjH.js} +14 -14
  156. package/cli/storybook-dist/assets/{RBSelectBox.stories-C1gNmwzw.js → RBSelectBox.stories-CRKP3ybf.js} +1 -1
  157. package/cli/storybook-dist/assets/RBSheet.stories-sCM3ZJUa.js +39 -0
  158. package/cli/storybook-dist/assets/{RBSideNumberInput.stories-9LlgQ8nh.js → RBSideNumberInput.stories-Bb7gw8RF.js} +3 -3
  159. package/cli/storybook-dist/assets/{RBSlider.stories-oUgo5K9d.js → RBSlider.stories-23OAQU5z.js} +3 -3
  160. package/cli/storybook-dist/assets/{RBSpinner.stories-DDpohbY2.js → RBSpinner.stories-2xcQdcmt.js} +1 -1
  161. package/cli/storybook-dist/assets/{RBSwitch.stories-gW-GN7QO.js → RBSwitch.stories-BACUaJm_.js} +7 -7
  162. package/cli/storybook-dist/assets/{RBTab.stories-CN-PV3HH.js → RBTab.stories-CDHE3sVs.js} +1 -1
  163. package/cli/storybook-dist/assets/{RBTable.stories-BAZLpxtM.js → RBTable.stories-C0Cfhfl7.js} +29 -29
  164. package/cli/storybook-dist/assets/{RBTableRow.stories-CwjVrszB.js → RBTableRow.stories-BF8kIkpp.js} +1 -1
  165. package/cli/storybook-dist/assets/{RBTabs.stories-JuEo2sUL.js → RBTabs.stories-BdJWRq1o.js} +7 -7
  166. package/cli/storybook-dist/assets/{RBTextArea.stories-D0_Pv4qZ.js → RBTextArea.stories-CGy2xeYH.js} +3 -3
  167. package/cli/storybook-dist/assets/{RBTextField.stories-CCsOvZqV.js → RBTextField.stories-IfUOzxCM.js} +15 -15
  168. package/cli/storybook-dist/assets/{RBTextInput.stories-Cccn3VNm.js → RBTextInput.stories-VjXNFo4R.js} +3 -3
  169. package/cli/storybook-dist/assets/{RBToast.stories-I5617t0K.js → RBToast.stories-BzcobblV.js} +1 -1
  170. package/cli/storybook-dist/assets/{RBToggle.stories-DsgKjGsJ.js → RBToggle.stories-DuLE5mKv.js} +4 -4
  171. package/cli/storybook-dist/assets/{RBToggleGroup.stories-BZEzSDuz.js → RBToggleGroup.stories-CuR0N0GJ.js} +5 -5
  172. package/cli/storybook-dist/assets/{RBTooltip.stories-4oSyAWsA.js → RBTooltip.stories--aAgNC8_.js} +1 -1
  173. package/cli/storybook-dist/assets/{SideNumberInput-DSKbd0bG.js → SideNumberInput-DyWQxYUj.js} +743 -743
  174. package/cli/storybook-dist/assets/{entry-preview-B35XREGs.js → entry-preview-D7IHsza_.js} +1 -1
  175. package/cli/storybook-dist/assets/{iframe-BB797lmL.js → iframe-CbaIp5I-.js} +2 -2
  176. package/cli/storybook-dist/assets/{index-BU2567EP.js → index-C6CBgMuG.js} +3 -3
  177. package/cli/storybook-dist/assets/{preview-C7DaSWyc.js → preview-B-iYLDuW.js} +2 -2
  178. package/cli/storybook-dist/assets/{preview-CbuRHit4.js → preview-CRWqc9DH.js} +1 -1
  179. package/cli/storybook-dist/assets/{react-resizable-panels.browser-ChIvlwo7.js → react-resizable-panels.browser-8hC8dr-6.js} +8 -8
  180. package/cli/storybook-dist/iframe.html +2 -2
  181. package/cli/storybook-dist/index.html +1 -1
  182. package/cli/storybook-dist/project.json +1 -1
  183. package/cli/templates/common/.mcp.json +8 -8
  184. package/cli/templates/common/README.md +1231 -1231
  185. package/cli/templates/common/assets/icon.svg +45 -45
  186. package/cli/templates/common/manifest.json +26 -26
  187. package/cli/templates/common/package.json +22 -22
  188. package/cli/templates/common/py/main.py +125 -125
  189. package/cli/templates/common/tsconfig.json +13 -13
  190. package/cli/templates/common/ui/content.tsx +216 -216
  191. package/cli/templates/common/ui/style.css +6 -6
  192. package/cli/templates/common/vite.config.ts +10 -10
  193. package/cli/templates/cpp/cpp/main.cpp +73 -73
  194. package/cli/templates/ros2/ros2_ws/src/__PLUGIN_SLUG__/__PLUGIN_SLUG__/node.py +25 -25
  195. package/cli/templates/ros2/ros2_ws/src/__PLUGIN_SLUG__/package.xml +10 -10
  196. package/cli/templates/ros2/ros2_ws/src/__PLUGIN_SLUG__/setup.py +18 -18
  197. package/cli/templates/ros2-cpp/ros2_ws/src/__PLUGIN_SLUG__/package.xml +11 -11
  198. package/cli/templates/ros2-cpp/ros2_ws/src/__PLUGIN_SLUG__/src/node.cpp +23 -23
  199. package/cli/vite.d.mts +25 -25
  200. package/cli/vite.mjs +292 -292
  201. package/package.json +3 -3
  202. package/cli/storybook-dist/assets/RBCommand.stories-BSqXDkKw.js +0 -73
  203. package/cli/storybook-dist/assets/RBDialog.stories-BAktz-ku.js +0 -38
  204. package/cli/storybook-dist/assets/RBDropdownMenu.stories-DbW2fWAj.js +0 -86
  205. package/cli/storybook-dist/assets/RBSheet.stories-_6VH-RUm.js +0 -39
package/cli/m5-e2e.mjs CHANGED
@@ -1,69 +1,69 @@
1
- // M5 e2e: full developer loop. Verifies a plugin scaffolded by `muscat-pk new`,
2
- // built by `muscat-pk build`, and served by `muscat-pk dev:ui` renders inside the
3
- // preview-host mini-Muscat. Requires `muscat-pk dev:ui` running on :4180 for a
4
- // plugin whose name is "Mpk Test".
5
- // Run from repo root: node packages/rb-plugin-kit/cli/m5-e2e.mjs
6
- import { chromium } from "playwright-core";
7
- import { homedir } from "node:os";
8
- import { join } from "node:path";
9
-
10
- const EXEC = join(
11
- homedir(),
12
- "Library/Caches/ms-playwright/chromium-1223/chrome-mac-arm64",
13
- "Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",
14
- );
15
- const BASE = "http://localhost:4180";
16
- const PLUGIN_NAME = "Mpk Test";
17
-
18
- const R = [];
19
- const ok = (n, c, e = "") => R.push({ n, c: !!c, e });
20
-
21
- const b = await chromium.launch({ executablePath: EXEC });
22
- const p = await b.newPage({ viewport: { width: 1280, height: 800 } });
23
- const errs = [];
24
- p.on("pageerror", (e) => errs.push(e.message));
25
- const logs = [];
26
- p.on("console", (m) => logs.push(m.text()));
27
- const wait = (t, to = 40000) =>
28
- p.waitForFunction(
29
- (x) => document.body && document.body.innerText.includes(x),
30
- t,
31
- { timeout: to },
32
- );
33
-
34
- try {
35
- await p.goto(`${BASE}/muscat/plugin`, { waitUntil: "commit" });
36
- await wait("D.Board");
37
- ok("mini-Muscat shell renders", true);
38
- await wait(PLUGIN_NAME, 20000);
39
- ok("scaffolded plugin loaded (LNB/content)", true);
40
- await wait(`${PLUGIN_NAME} width`, 30000);
41
- ok("scaffolded plugin content renders via rb-components", true);
42
-
43
- // Grip action round-trips to the preview SDK
44
- logs.length = 0;
45
- await p.locator("button", { hasText: "Grip" }).first().click();
46
- await p.waitForTimeout(1500);
47
- ok(
48
- "Grip action round-trips to host SDK",
49
- logs.some((l) => l.includes("action") && l.includes("grip")),
50
- logs.join(" | "),
51
- );
52
-
53
- const body = await p.evaluate(() => document.body.innerText);
54
- ok("no API-failure toast", !body.includes("API Request Failed"));
55
- ok("no page errors", errs.length === 0, errs.slice(0, 2).join(" | "));
56
- await p.screenshot({ path: "/tmp/m5-built.png" });
57
- } catch (e) {
58
- ok("e2e completed", false, String(e));
59
- } finally {
60
- await b.close();
61
- }
62
-
63
- let pass = true;
64
- for (const r of R) {
65
- console.log(`${r.c ? "PASS" : "FAIL"} ${r.n}${!r.c && r.e ? " :: " + r.e : ""}`);
66
- if (!r.c) pass = false;
67
- }
68
- console.log(pass ? "\nALL CHECKS PASSED" : "\nSOME CHECKS FAILED");
69
- process.exit(pass ? 0 : 1);
1
+ // M5 e2e: full developer loop. Verifies a plugin scaffolded by `muscat-pk new`,
2
+ // built by `muscat-pk build`, and served by `muscat-pk dev:ui` renders inside the
3
+ // preview-host mini-Muscat. Requires `muscat-pk dev:ui` running on :4180 for a
4
+ // plugin whose name is "Mpk Test".
5
+ // Run from repo root: node packages/rb-plugin-kit/cli/m5-e2e.mjs
6
+ import { chromium } from "playwright-core";
7
+ import { homedir } from "node:os";
8
+ import { join } from "node:path";
9
+
10
+ const EXEC = join(
11
+ homedir(),
12
+ "Library/Caches/ms-playwright/chromium-1223/chrome-mac-arm64",
13
+ "Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",
14
+ );
15
+ const BASE = "http://localhost:4180";
16
+ const PLUGIN_NAME = "Mpk Test";
17
+
18
+ const R = [];
19
+ const ok = (n, c, e = "") => R.push({ n, c: !!c, e });
20
+
21
+ const b = await chromium.launch({ executablePath: EXEC });
22
+ const p = await b.newPage({ viewport: { width: 1280, height: 800 } });
23
+ const errs = [];
24
+ p.on("pageerror", (e) => errs.push(e.message));
25
+ const logs = [];
26
+ p.on("console", (m) => logs.push(m.text()));
27
+ const wait = (t, to = 40000) =>
28
+ p.waitForFunction(
29
+ (x) => document.body && document.body.innerText.includes(x),
30
+ t,
31
+ { timeout: to },
32
+ );
33
+
34
+ try {
35
+ await p.goto(`${BASE}/muscat/plugin`, { waitUntil: "commit" });
36
+ await wait("D.Board");
37
+ ok("mini-Muscat shell renders", true);
38
+ await wait(PLUGIN_NAME, 20000);
39
+ ok("scaffolded plugin loaded (LNB/content)", true);
40
+ await wait(`${PLUGIN_NAME} width`, 30000);
41
+ ok("scaffolded plugin content renders via rb-components", true);
42
+
43
+ // Grip action round-trips to the preview SDK
44
+ logs.length = 0;
45
+ await p.locator("button", { hasText: "Grip" }).first().click();
46
+ await p.waitForTimeout(1500);
47
+ ok(
48
+ "Grip action round-trips to host SDK",
49
+ logs.some((l) => l.includes("action") && l.includes("grip")),
50
+ logs.join(" | "),
51
+ );
52
+
53
+ const body = await p.evaluate(() => document.body.innerText);
54
+ ok("no API-failure toast", !body.includes("API Request Failed"));
55
+ ok("no page errors", errs.length === 0, errs.slice(0, 2).join(" | "));
56
+ await p.screenshot({ path: "/tmp/m5-built.png" });
57
+ } catch (e) {
58
+ ok("e2e completed", false, String(e));
59
+ } finally {
60
+ await b.close();
61
+ }
62
+
63
+ let pass = true;
64
+ for (const r of R) {
65
+ console.log(`${r.c ? "PASS" : "FAIL"} ${r.n}${!r.c && r.e ? " :: " + r.e : ""}`);
66
+ if (!r.c) pass = false;
67
+ }
68
+ console.log(pass ? "\nALL CHECKS PASSED" : "\nSOME CHECKS FAILED");
69
+ process.exit(pass ? 0 : 1);
package/cli/prepack.mjs CHANGED
@@ -1,10 +1,10 @@
1
- // Runs on `npm publish` / `yarn npm publish` (and `npm pack`) via the "prepack"
2
- // lifecycle hook. Builds the bundled Storybook (foundations + muscat) and stages
3
- // it into cli/storybook-dist so it ships inside the published muscat-pk and
4
- // `muscat-pk storybook` works from an external install.
5
- //
6
- // In the monorepo this runs the real build; outside it (re-packing an already
7
- // published copy) buildStorybook() no-ops and the pre-staged dist is used.
8
- import { buildStorybook } from "./src/storybook.mjs";
9
-
10
- buildStorybook();
1
+ // Runs on `npm publish` / `yarn npm publish` (and `npm pack`) via the "prepack"
2
+ // lifecycle hook. Builds the bundled Storybook (foundations + muscat) and stages
3
+ // it into cli/storybook-dist so it ships inside the published muscat-pk and
4
+ // `muscat-pk storybook` works from an external install.
5
+ //
6
+ // In the monorepo this runs the real build; outside it (re-packing an already
7
+ // published copy) buildStorybook() no-ops and the pre-staged dist is used.
8
+ import { buildStorybook } from "./src/storybook.mjs";
9
+
10
+ buildStorybook();
@@ -1,70 +1,70 @@
1
- // Rules for AI coding agents working on a Muscat plugin. One source for both the MCP server's
2
- // instructions (mcp.mjs) and the AGENTS.md / CLAUDE.md that `muscat-pk new` scaffolds, so the
3
- // two never drift. Kept free of heavy imports: `new` loads it too.
4
-
5
- // Native elements and the plugin-ui component to use instead.
6
- export const NATIVE_TO_RB = [
7
- ["select / dropdown", "RBSelectBox + Option (children)"],
8
- ["input type=text", "RBTextInput (RBTextField for label + helper text)"],
9
- ["input type=number", "RBSideNumberInput"],
10
- ["input type=range", "RBSlider (RBMultiRangeInput for a range)"],
11
- ["input type=checkbox", "RBCheckBox"],
12
- ["input type=radio", "RBRadioButton / RBRadioBox"],
13
- ["toggle / switch", "RBSwitch (RBSwitchField with a label)"],
14
- ["input type=date", "RBDateInput / RBRangeDateInput"],
15
- ["textarea", "RBTextArea"],
16
- ["button", "RBLabelButton (text), RBIconButton (icon only)"],
17
- ["label", "RBTextLabel"],
18
- ["table", "RBTable + RBTableRow + RBTdColumn"],
19
- ["dialog / modal", "RBDialog… / RBModal; rb.confirm() / rb.alert() / rb.prompt() for simple prompts"],
20
- ["tabs", "RBTabs + RBTabsList + RBTabsTrigger + RBTabsContent"],
21
- ["tooltip (title=)", "RBTooltip"],
22
- ["hr", "RBDivider"],
23
- ["loading spinner", "RBSpinner"],
24
- ];
25
-
26
- const UI_RULES = [
27
- "Use plugin-ui components, never native form/control elements (<select>, <input>, <button>, <textarea>, <table>, <dialog>) or another UI library. Layout-only elements (<div>, <span>, <p>) are fine; prefer HStack/VStack for stacks.",
28
- "Before writing a component, call get_component_example (working usage) or get_component_props (its type). Names are exact; when one is not found, use the suggestion returned, not a native element.",
29
- "Colors and type come from tokens (bg-bg-*, text-fg-*, typo-*), not hex values or arbitrary Tailwind colors.",
30
- ];
31
-
32
- const nativeTable = () => NATIVE_TO_RB.map(([el, rb]) => `- ${el}: ${rb}`).join("\n");
33
-
34
- export const SERVER_INSTRUCTIONS = `Muscat plugin UI (ui/*.tsx) is built only from @rainbow-robotics/plugin-ui/react, styled with the design-token Tailwind classes (list_design_tokens).
35
-
36
- Rules for UI work:
37
- ${UI_RULES.map((r) => `- ${r}`).join("\n")}
38
-
39
- Native element -> plugin-ui component:
40
- ${nativeTable()}
41
-
42
- Backend, manifest and SDK questions: search_rb_sdk, list_rb_sdk, get_rb_sdk_api.`;
43
-
44
- // AGENTS.md (Codex, Cursor, Gemini CLI, Copilot …). CLAUDE.md imports it with `@AGENTS.md`.
45
- // The backend type is not named: `muscat-pk type change` would leave it stale.
46
- export function agentsMd({ pluginName }) {
47
- return `# ${pluginName} — Muscat plugin
48
-
49
- A Muscat plugin: \`manifest.json\`, a React UI in \`ui/*.tsx\`, and a backend whose type is \`runtime\` in \`manifest.json\`.
50
- \`README.md\` is the full plugin-author guide. The \`muscat\` MCP server (\`.mcp.json\`, \`muscat-pk mcp\`) looks up
51
- components, design tokens and the SDK: use it instead of guessing names or props.
52
-
53
- ## Commands
54
-
55
- - \`muscat-pk dev\`: UI preview + backend with hot reload (\`dev:ui\` / \`dev:back\` for one side)
56
- - \`muscat-pk build\`: validates \`manifest.json\`, builds \`dist/\` and the distributable ZIP
57
-
58
- ## UI rules
59
-
60
- UI is built only from \`@rainbow-robotics/plugin-ui/react\`, styled with design-token Tailwind classes.
61
-
62
- ${UI_RULES.map((r) => `- ${r}`).join("\n")}
63
-
64
- Native element → plugin-ui component:
65
-
66
- ${nativeTable()}
67
- `;
68
- }
69
-
70
- export const CLAUDE_MD = "@AGENTS.md\n";
1
+ // Rules for AI coding agents working on a Muscat plugin. One source for both the MCP server's
2
+ // instructions (mcp.mjs) and the AGENTS.md / CLAUDE.md that `muscat-pk new` scaffolds, so the
3
+ // two never drift. Kept free of heavy imports: `new` loads it too.
4
+
5
+ // Native elements and the plugin-ui component to use instead.
6
+ export const NATIVE_TO_RB = [
7
+ ["select / dropdown", "RBSelectBox + Option (children)"],
8
+ ["input type=text", "RBTextInput (RBTextField for label + helper text)"],
9
+ ["input type=number", "RBSideNumberInput"],
10
+ ["input type=range", "RBSlider (RBMultiRangeInput for a range)"],
11
+ ["input type=checkbox", "RBCheckBox"],
12
+ ["input type=radio", "RBRadioButton / RBRadioBox"],
13
+ ["toggle / switch", "RBSwitch (RBSwitchField with a label)"],
14
+ ["input type=date", "RBDateInput / RBRangeDateInput"],
15
+ ["textarea", "RBTextArea"],
16
+ ["button", "RBLabelButton (text), RBIconButton (icon only)"],
17
+ ["label", "RBTextLabel"],
18
+ ["table", "RBTable + RBTableRow + RBTdColumn"],
19
+ ["dialog / modal", "RBDialog… / RBModal; rb.confirm() / rb.alert() / rb.prompt() for simple prompts"],
20
+ ["tabs", "RBTabs + RBTabsList + RBTabsTrigger + RBTabsContent"],
21
+ ["tooltip (title=)", "RBTooltip"],
22
+ ["hr", "RBDivider"],
23
+ ["loading spinner", "RBSpinner"],
24
+ ];
25
+
26
+ const UI_RULES = [
27
+ "Use plugin-ui components, never native form/control elements (<select>, <input>, <button>, <textarea>, <table>, <dialog>) or another UI library. Layout-only elements (<div>, <span>, <p>) are fine; prefer HStack/VStack for stacks.",
28
+ "Before writing a component, call get_component_example (working usage) or get_component_props (its type). Names are exact; when one is not found, use the suggestion returned, not a native element.",
29
+ "Colors and type come from tokens (bg-bg-*, text-fg-*, typo-*), not hex values or arbitrary Tailwind colors.",
30
+ ];
31
+
32
+ const nativeTable = () => NATIVE_TO_RB.map(([el, rb]) => `- ${el}: ${rb}`).join("\n");
33
+
34
+ export const SERVER_INSTRUCTIONS = `Muscat plugin UI (ui/*.tsx) is built only from @rainbow-robotics/plugin-ui/react, styled with the design-token Tailwind classes (list_design_tokens).
35
+
36
+ Rules for UI work:
37
+ ${UI_RULES.map((r) => `- ${r}`).join("\n")}
38
+
39
+ Native element -> plugin-ui component:
40
+ ${nativeTable()}
41
+
42
+ Backend, manifest and SDK questions: search_rb_sdk, list_rb_sdk, get_rb_sdk_api.`;
43
+
44
+ // AGENTS.md (Codex, Cursor, Gemini CLI, Copilot …). CLAUDE.md imports it with `@AGENTS.md`.
45
+ // The backend type is not named: `muscat-pk type change` would leave it stale.
46
+ export function agentsMd({ pluginName }) {
47
+ return `# ${pluginName} — Muscat plugin
48
+
49
+ A Muscat plugin: \`manifest.json\`, a React UI in \`ui/*.tsx\`, and a backend whose type is \`runtime\` in \`manifest.json\`.
50
+ \`README.md\` is the full plugin-author guide. The \`muscat\` MCP server (\`.mcp.json\`, \`muscat-pk mcp\`) looks up
51
+ components, design tokens and the SDK: use it instead of guessing names or props.
52
+
53
+ ## Commands
54
+
55
+ - \`muscat-pk dev\`: UI preview + backend with hot reload (\`dev:ui\` / \`dev:back\` for one side)
56
+ - \`muscat-pk build\`: validates \`manifest.json\`, builds \`dist/\` and the distributable ZIP
57
+
58
+ ## UI rules
59
+
60
+ UI is built only from \`@rainbow-robotics/plugin-ui/react\`, styled with design-token Tailwind classes.
61
+
62
+ ${UI_RULES.map((r) => `- ${r}`).join("\n")}
63
+
64
+ Native element → plugin-ui component:
65
+
66
+ ${nativeTable()}
67
+ `;
68
+ }
69
+
70
+ export const CLAUDE_MD = "@AGENTS.md\n";