@rainbow-robotics/muscat-plugin-kit 0.1.2-dev.5 → 0.1.2-dev.50

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 (269) hide show
  1. package/README.md +82 -49
  2. package/cli/README.md +191 -5
  3. package/cli/bin/create-muscat-plugin.mjs +1 -1
  4. package/cli/bin/muscat-pk.mjs +25 -10
  5. package/cli/bundle-templates.mjs +28 -0
  6. package/cli/docker/Dockerfile.bridge +17 -0
  7. package/cli/docker/Dockerfile.cpp +22 -0
  8. package/cli/docker/Dockerfile.dev +1 -2
  9. package/cli/docker/Dockerfile.python +20 -0
  10. package/cli/docker/bridge-package.json +8 -0
  11. package/cli/prepack.mjs +10 -0
  12. package/cli/src/bridge.mjs +90 -0
  13. package/cli/src/build.mjs +377 -85
  14. package/cli/src/check-package.mjs +8 -23
  15. package/cli/src/cpp.mjs +61 -0
  16. package/cli/src/dev.mjs +40 -4
  17. package/cli/src/devBack.mjs +274 -49
  18. package/cli/src/devUi.mjs +198 -19
  19. package/cli/src/esbuild.mjs +27 -10
  20. package/cli/src/manifest.mjs +208 -0
  21. package/cli/src/mcp.mjs +592 -0
  22. package/cli/src/new.mjs +143 -43
  23. package/cli/src/pluginDevServer.mjs +112 -0
  24. package/cli/src/ports.mjs +160 -0
  25. package/cli/src/python.mjs +109 -0
  26. package/cli/src/ros2.mjs +43 -18
  27. package/cli/src/sdk.mjs +11 -9
  28. package/cli/src/socketBridge.mjs +129 -0
  29. package/cli/src/storybook.mjs +168 -0
  30. package/cli/src/templates-embedded.mjs +3 -0
  31. package/cli/src/type.mjs +52 -29
  32. package/cli/src/uninstall.mjs +98 -0
  33. package/cli/src/update.mjs +259 -30
  34. package/cli/src/util.mjs +114 -7
  35. package/cli/storybook-dist/_design-tokens.css +4957 -0
  36. package/cli/storybook-dist/_stories-src/NxAvatar.stories.tsx +27 -0
  37. package/cli/storybook-dist/_stories-src/NxPagination.stories.tsx +28 -0
  38. package/cli/storybook-dist/_stories-src/RBAccordion/RBAccordion.stories.tsx +46 -0
  39. package/cli/storybook-dist/_stories-src/RBAccordion/RBAccordionGroup.stories.tsx +73 -0
  40. package/cli/storybook-dist/_stories-src/RBBadge/RBBadge.stories.tsx +93 -0
  41. package/cli/storybook-dist/_stories-src/RBBattery/RBBattery.stories.tsx +74 -0
  42. package/cli/storybook-dist/_stories-src/RBButton/RBCheckIconButton.stories.tsx +28 -0
  43. package/cli/storybook-dist/_stories-src/RBButton/RBCheckLabelButton.stories.tsx +84 -0
  44. package/cli/storybook-dist/_stories-src/RBButton/RBIconButton.stories.tsx +57 -0
  45. package/cli/storybook-dist/_stories-src/RBButton/RBInlineLabelButton.stories.tsx +41 -0
  46. package/cli/storybook-dist/_stories-src/RBButton/RBLabelButton.stories.tsx +60 -0
  47. package/cli/storybook-dist/_stories-src/RBDatePicker/RBDateInput.stories.tsx +44 -0
  48. package/cli/storybook-dist/_stories-src/RBDatePicker/RBRangeDateInput.stories.tsx +44 -0
  49. package/cli/storybook-dist/_stories-src/RBDialog/RBAlert.stories.tsx +51 -0
  50. package/cli/storybook-dist/_stories-src/RBDialog/RBConfirm.stories.tsx +55 -0
  51. package/cli/storybook-dist/_stories-src/RBDialog/RBPrompt.stories.tsx +52 -0
  52. package/cli/storybook-dist/_stories-src/RBDivider/RBDivider.stories.tsx +93 -0
  53. package/cli/storybook-dist/_stories-src/RBEmptyView/RBEmptyView.stories.tsx +49 -0
  54. package/cli/storybook-dist/_stories-src/RBIcons/RBColorIcons.stories.tsx +108 -0
  55. package/cli/storybook-dist/_stories-src/RBIcons/RBIcons.stories.tsx +106 -0
  56. package/cli/storybook-dist/_stories-src/RBIcons/RBMenuTreeIcons.stories.tsx +108 -0
  57. package/cli/storybook-dist/_stories-src/RBIcons/RBProgramIcons.stories.tsx +116 -0
  58. package/cli/storybook-dist/_stories-src/RBInput/RBCheckBox.stories.tsx +89 -0
  59. package/cli/storybook-dist/_stories-src/RBInput/RBMultiRangeInput.stories.tsx +64 -0
  60. package/cli/storybook-dist/_stories-src/RBInput/RBRadioBox.stories.tsx +65 -0
  61. package/cli/storybook-dist/_stories-src/RBInput/RBRadioButton.stories.tsx +68 -0
  62. package/cli/storybook-dist/_stories-src/RBInput/RBSelectBox.stories.tsx +119 -0
  63. package/cli/storybook-dist/_stories-src/RBInput/RBSideNumberInput.stories.tsx +90 -0
  64. package/cli/storybook-dist/_stories-src/RBInput/RBText/RBTextArea.stories.tsx +45 -0
  65. package/cli/storybook-dist/_stories-src/RBInput/RBText/RBTextInput.stories.tsx +50 -0
  66. package/cli/storybook-dist/_stories-src/RBInput/RBTextField.stories.tsx +102 -0
  67. package/cli/storybook-dist/_stories-src/RBJoyStick/RBJoyStick.stories.tsx +31 -0
  68. package/cli/storybook-dist/_stories-src/RBLight/RBLight.stories.tsx +36 -0
  69. package/cli/storybook-dist/_stories-src/RBPagination/RBPagination.stories.tsx +49 -0
  70. package/cli/storybook-dist/_stories-src/RBShadcn/RBCard/RBCard.stories.tsx +89 -0
  71. package/cli/storybook-dist/_stories-src/RBShadcn/RBCommand/RBCommand.stories.tsx +116 -0
  72. package/cli/storybook-dist/_stories-src/RBShadcn/RBDialog/RBDialog.stories.tsx +74 -0
  73. package/cli/storybook-dist/_stories-src/RBShadcn/RBDrawer/RBDrawer.stories.tsx +99 -0
  74. package/cli/storybook-dist/_stories-src/RBShadcn/RBDropdownMenu/RBDropdownMenu.stories.tsx +123 -0
  75. package/cli/storybook-dist/_stories-src/RBShadcn/RBMenubar/RBMenubar.stories.tsx +135 -0
  76. package/cli/storybook-dist/_stories-src/RBShadcn/RBPopover/RBPopover.stories.tsx +69 -0
  77. package/cli/storybook-dist/_stories-src/RBShadcn/RBResizable/RBResizable.stories.tsx +49 -0
  78. package/cli/storybook-dist/_stories-src/RBShadcn/RBSheet/RBSheet.stories.tsx +91 -0
  79. package/cli/storybook-dist/_stories-src/RBShadcn/RBSlider/RBSlider.stories.tsx +38 -0
  80. package/cli/storybook-dist/_stories-src/RBShadcn/RBSwitch/RBSwitch.stories.tsx +112 -0
  81. package/cli/storybook-dist/_stories-src/RBShadcn/RBTabs/RBTabs.stories.tsx +75 -0
  82. package/cli/storybook-dist/_stories-src/RBShadcn/RBToggle/RBToggle.stories.tsx +51 -0
  83. package/cli/storybook-dist/_stories-src/RBShadcn/RBToggleGroup/RBToggleGroup.stories.tsx +84 -0
  84. package/cli/storybook-dist/_stories-src/RBTab/RBChipTab.stories.tsx +102 -0
  85. package/cli/storybook-dist/_stories-src/RBTab/RBChipsBoxTab.stories.tsx +78 -0
  86. package/cli/storybook-dist/_stories-src/RBTab/RBTab.stories.tsx +57 -0
  87. package/cli/storybook-dist/_stories-src/RBTable/RBTable.stories.tsx +177 -0
  88. package/cli/storybook-dist/_stories-src/RBTable/RBTableRow.stories.tsx +64 -0
  89. package/cli/storybook-dist/_stories-src/RBToast/RBToast.stories.tsx +117 -0
  90. package/cli/storybook-dist/_stories-src/RBTooltip/RBTooltip.stories.tsx +50 -0
  91. package/cli/storybook-dist/_stories-src/loading/RBSpinner.stories.tsx +30 -0
  92. package/cli/storybook-dist/_stories-src/nx-button/NxButton.stories.tsx +54 -0
  93. package/cli/storybook-dist/_stories-src/nx-button/NxPointerHoldButton.stories.tsx +57 -0
  94. package/cli/storybook-dist/_stories-src/nx-icons/NxIcons.stories.tsx +48 -0
  95. package/cli/storybook-dist/_stories-src/nx-inputs/NxNumberInput.stories.tsx +103 -0
  96. package/cli/storybook-dist/_stories-src/nx-inputs/NxRangeInput.stories.tsx +27 -0
  97. package/cli/storybook-dist/_stories-src/nx-inputs/NxSelectBox.stories.tsx +67 -0
  98. package/cli/storybook-dist/_stories-src/nx-inputs/NxSlideRange.stories.tsx +45 -0
  99. package/cli/storybook-dist/_stories-src/nx-inputs/NxSwitch.stories.tsx +27 -0
  100. package/cli/storybook-dist/_stories-src/nx-inputs/NxTextArea.stories.tsx +48 -0
  101. package/cli/storybook-dist/_stories-src/nx-inputs/NxTextInput.stories.tsx +46 -0
  102. package/cli/storybook-dist/assets/Color-YHDXOIA2-BjuzF3Je.js +1 -0
  103. package/cli/storybook-dist/assets/Docs-BAFZYTMR.js +12 -0
  104. package/cli/storybook-dist/assets/Docs-BQesYW-Q.js +8 -0
  105. package/cli/storybook-dist/assets/Docs-BsMEe093.js +7 -0
  106. package/cli/storybook-dist/assets/Docs-By6k6vcM.js +20 -0
  107. package/cli/storybook-dist/assets/Docs-D1J63cJc.js +7 -0
  108. package/cli/storybook-dist/assets/Docs-GoNbntAU.js +8 -0
  109. package/cli/storybook-dist/assets/DocsRenderer-CFRXHY34-BwY_WiM7.js +2 -0
  110. package/cli/storybook-dist/assets/NxAvatar.stories-CvzBHfYa.js +13 -0
  111. package/cli/storybook-dist/assets/NxButton.stories-B83PesgN.js +20 -0
  112. package/cli/storybook-dist/assets/NxIcons.stories-Ca7qpAaO.js +3 -0
  113. package/cli/storybook-dist/assets/NxNumberInput.stories-DpNcCG6B.js +26 -0
  114. package/cli/storybook-dist/assets/NxPagination.stories-Xnvd3xhH.js +11 -0
  115. package/cli/storybook-dist/assets/NxPointerHoldButton.stories-C3YSIpM0.js +14 -0
  116. package/cli/storybook-dist/assets/NxRangeInput.stories-DIhaNZig.js +17 -0
  117. package/cli/storybook-dist/assets/NxSelectBox.stories-BGwO2mYJ.js +17 -0
  118. package/cli/storybook-dist/assets/NxSlideRange.stories-BXlt5Bgt.js +14 -0
  119. package/cli/storybook-dist/assets/NxSwitch.stories-C5ZqIRtw.js +11 -0
  120. package/cli/storybook-dist/assets/NxTextArea.stories-hm_ycALo.js +11 -0
  121. package/cli/storybook-dist/assets/NxTextInput.stories-DkZAySr_.js +11 -0
  122. package/cli/storybook-dist/assets/PretendardVariable-CJuje-Rk.woff2 +0 -0
  123. package/cli/storybook-dist/assets/RBAccordion.stories--bY36GZY.js +17 -0
  124. package/cli/storybook-dist/assets/RBAccordionGroup.stories-BVr1ccI4.js +33 -0
  125. package/cli/storybook-dist/assets/RBAlert.stories-CkjFBEkv.js +17 -0
  126. package/cli/storybook-dist/assets/RBBadge.stories-CNXILDPh.js +1 -0
  127. package/cli/storybook-dist/assets/RBBattery.stories-AokMv8ZY.js +10 -0
  128. package/cli/storybook-dist/assets/RBCard.stories-CX1sLKB2.js +45 -0
  129. package/cli/storybook-dist/assets/RBCheckBox.stories-By3QHBFm.js +1 -0
  130. package/cli/storybook-dist/assets/RBCheckIconButton.stories-Dud1uK3X.js +1 -0
  131. package/cli/storybook-dist/assets/RBCheckLabelButton.stories-C8iBkZxY.js +24 -0
  132. package/cli/storybook-dist/assets/RBChipTab.stories-DsgbiS2U.js +21 -0
  133. package/cli/storybook-dist/assets/RBChipsBoxTab.stories-C3DZGmq0.js +1 -0
  134. package/cli/storybook-dist/assets/RBColorIcons.stories-CusR20qk.js +3 -0
  135. package/cli/storybook-dist/assets/RBCommand.stories-DhJNgaLZ.js +73 -0
  136. package/cli/storybook-dist/assets/RBConfirm.stories-B6LKpCDa.js +20 -0
  137. package/cli/storybook-dist/assets/RBDateInput.stories-PEEhQ1wJ.js +15 -0
  138. package/cli/storybook-dist/assets/RBDialog.stories-CAtOdRen.js +38 -0
  139. package/cli/storybook-dist/assets/RBDivider.stories-0zpIUlXT.js +1 -0
  140. package/cli/storybook-dist/assets/RBDrawer.stories-CWMG4glY.js +14 -0
  141. package/cli/storybook-dist/assets/RBDropdownMenu.stories-6fbEYZfk.js +86 -0
  142. package/cli/storybook-dist/assets/RBEmptyView.stories-BRDZHjn4.js +12 -0
  143. package/cli/storybook-dist/assets/RBIconButton.stories-sYrRLYob.js +1 -0
  144. package/cli/storybook-dist/assets/RBIcons.stories-DFe8O1_g.js +3 -0
  145. package/cli/storybook-dist/assets/RBInlineLabelButton.stories-DX4VdUfk.js +1 -0
  146. package/cli/storybook-dist/assets/RBJoyStick.stories-SA2Foelf.js +11 -0
  147. package/cli/storybook-dist/assets/RBLabelButton.stories-CicBns_Y.js +1 -0
  148. package/cli/storybook-dist/assets/RBLight.stories-WlP3oEmY.js +1 -0
  149. package/cli/storybook-dist/assets/RBMenuTreeIcons.stories-CrWjPfxj.js +3 -0
  150. package/cli/storybook-dist/assets/RBMenubar.stories-Di4phWw7.js +3 -0
  151. package/cli/storybook-dist/assets/RBMultiRangeInput.stories-DS3wrR3l.js +14 -0
  152. package/cli/storybook-dist/assets/RBPagination.stories-BDVPAUVD.js +17 -0
  153. package/cli/storybook-dist/assets/RBPopover.stories-DL9b_iX9.js +11 -0
  154. package/cli/storybook-dist/assets/RBProgramIcons.stories-ByRVx-on.js +3 -0
  155. package/cli/storybook-dist/assets/RBPrompt.stories-vTmKWyA5.js +20 -0
  156. package/cli/storybook-dist/assets/RBRadioBox.stories-C9WHt4jb.js +1 -0
  157. package/cli/storybook-dist/assets/RBRadioButton.stories-D8KYq63j.js +11 -0
  158. package/cli/storybook-dist/assets/RBRangeDateInput.stories-Bvcf4Su7.js +15 -0
  159. package/cli/storybook-dist/assets/RBResizable.stories-3O2OMuH_.js +20 -0
  160. package/cli/storybook-dist/assets/RBSelectBox.stories-CKZLmPzX.js +6 -0
  161. package/cli/storybook-dist/assets/RBSheet.stories-Dko0It1W.js +39 -0
  162. package/cli/storybook-dist/assets/RBSideNumberInput.stories-CUvqVtId.js +5 -0
  163. package/cli/storybook-dist/assets/RBSlider.stories-CcbaKRYo.js +5 -0
  164. package/cli/storybook-dist/assets/RBSpinner.stories-D15e_JlE.js +14 -0
  165. package/cli/storybook-dist/assets/RBSwitch.stories-C4JRsYJ6.js +65 -0
  166. package/cli/storybook-dist/assets/RBTab.stories-BPvzQSM-.js +1 -0
  167. package/cli/storybook-dist/assets/RBTable.stories-nr8OS1mV.js +62 -0
  168. package/cli/storybook-dist/assets/RBTableRow.stories-rI0rK8Ci.js +11 -0
  169. package/cli/storybook-dist/assets/RBTabs.stories-CxMtHGWA.js +21 -0
  170. package/cli/storybook-dist/assets/RBTextArea.stories-Bru4AhJ3.js +5 -0
  171. package/cli/storybook-dist/assets/RBTextField.stories-Ah3D9lto.js +45 -0
  172. package/cli/storybook-dist/assets/RBTextInput.stories-C3qAVngJ.js +5 -0
  173. package/cli/storybook-dist/assets/RBToast.stories-C1occsvf.js +11 -0
  174. package/cli/storybook-dist/assets/RBToggle.stories-BNrNERc7.js +12 -0
  175. package/cli/storybook-dist/assets/RBToggleGroup.stories-D_RRBwxY.js +17 -0
  176. package/cli/storybook-dist/assets/RBTooltip.stories-DuyOQqrB.js +9 -0
  177. package/cli/storybook-dist/assets/RainbowUiProvider-BYlbsa69.css +1 -0
  178. package/cli/storybook-dist/assets/RainbowUiProvider-B_piZBLb.js +31 -0
  179. package/cli/storybook-dist/assets/browserUtils-DeopUpDy.js +1 -0
  180. package/cli/storybook-dist/assets/chunk-XP5HYGXS-BHXC9YeQ.js +1 -0
  181. package/cli/storybook-dist/assets/client-DTf7SId2.js +1 -0
  182. package/cli/storybook-dist/assets/createConveyorBeltLayer-Cn41pFRH.js +6210 -0
  183. package/cli/storybook-dist/assets/createConveyorBeltLayer-Ds5AOper.css +21 -0
  184. package/cli/storybook-dist/assets/entry-preview-D-mLV0cS.js +2 -0
  185. package/cli/storybook-dist/assets/entry-preview-docs-b8bpVBXy.js +46 -0
  186. package/cli/storybook-dist/assets/iframe-DNru2eN7.js +211 -0
  187. package/cli/storybook-dist/assets/index-B4FGfHer.js +1 -0
  188. package/cli/storybook-dist/assets/index-BRq5TIsn.js +24 -0
  189. package/cli/storybook-dist/assets/index-C1OzuK6-.js +240 -0
  190. package/cli/storybook-dist/assets/index-CT3U1fyk.js +1 -0
  191. package/cli/storybook-dist/assets/index-ChsGqxH_.js +9 -0
  192. package/cli/storybook-dist/assets/index-Cwr2bQOB.js +575 -0
  193. package/cli/storybook-dist/assets/index-DKFBREX_.js +1 -0
  194. package/cli/storybook-dist/assets/index-DgH-xKnr.js +11 -0
  195. package/cli/storybook-dist/assets/index-Dmy2JGbm.js +1 -0
  196. package/cli/storybook-dist/assets/index-DrFu-skq.js +6 -0
  197. package/cli/storybook-dist/assets/jsx-runtime-BTJTZTIL.js +9 -0
  198. package/cli/storybook-dist/assets/keymapTileIndex.worker-BsNYNbqs.js +1 -0
  199. package/cli/storybook-dist/assets/preview-B8lJiyuQ.js +34 -0
  200. package/cli/storybook-dist/assets/preview-BBWR9nbA.js +1 -0
  201. package/cli/storybook-dist/assets/preview-BWzBA1C2.js +396 -0
  202. package/cli/storybook-dist/assets/preview-CILRoSnB.js +1 -0
  203. package/cli/storybook-dist/assets/preview-CVgpLj3b.js +1 -0
  204. package/cli/storybook-dist/assets/preview-CvbIS5ZJ.js +1 -0
  205. package/cli/storybook-dist/assets/preview-DD_OYowb.js +1 -0
  206. package/cli/storybook-dist/assets/preview-DGUiP6tS.js +7 -0
  207. package/cli/storybook-dist/assets/preview-DHQbi4pV.js +1 -0
  208. package/cli/storybook-dist/assets/preview-DUTcCPBe.css +1 -0
  209. package/cli/storybook-dist/assets/preview-QAsoD6Sa.js +2 -0
  210. package/cli/storybook-dist/assets/preview-rcRMbKPr.js +3 -0
  211. package/cli/storybook-dist/assets/react-18-hB3smqWJ.js +1 -0
  212. package/cli/storybook-dist/assets/react-resizable-panels.browser-CvAJUcrm.js +72 -0
  213. package/cli/storybook-dist/assets/test-utils-BQudk2xt.js +9 -0
  214. package/cli/storybook-dist/favicon.svg +1 -0
  215. package/cli/storybook-dist/iframe.html +666 -0
  216. package/cli/storybook-dist/index.html +190 -0
  217. package/cli/storybook-dist/index.json +1 -0
  218. package/cli/storybook-dist/nunito-sans-bold-italic.woff2 +0 -0
  219. package/cli/storybook-dist/nunito-sans-bold.woff2 +0 -0
  220. package/cli/storybook-dist/nunito-sans-italic.woff2 +0 -0
  221. package/cli/storybook-dist/nunito-sans-regular.woff2 +0 -0
  222. package/cli/storybook-dist/project.json +1 -0
  223. package/cli/storybook-dist/sb-addons/chromatic-com-storybook-10/manager-bundle.js +331 -0
  224. package/cli/storybook-dist/sb-addons/chromatic-com-storybook-10/manager-bundle.js.LEGAL.txt +51 -0
  225. package/cli/storybook-dist/sb-addons/essentials-actions-3/manager-bundle.js +3 -0
  226. package/cli/storybook-dist/sb-addons/essentials-backgrounds-5/manager-bundle.js +12 -0
  227. package/cli/storybook-dist/sb-addons/essentials-controls-2/manager-bundle.js +405 -0
  228. package/cli/storybook-dist/sb-addons/essentials-docs-4/manager-bundle.js +245 -0
  229. package/cli/storybook-dist/sb-addons/essentials-measure-8/manager-bundle.js +3 -0
  230. package/cli/storybook-dist/sb-addons/essentials-outline-9/manager-bundle.js +3 -0
  231. package/cli/storybook-dist/sb-addons/essentials-toolbars-7/manager-bundle.js +3 -0
  232. package/cli/storybook-dist/sb-addons/essentials-viewport-6/manager-bundle.js +3 -0
  233. package/cli/storybook-dist/sb-addons/links-1/manager-bundle.js +3 -0
  234. package/cli/storybook-dist/sb-addons/storybook-13/manager-bundle.js +3 -0
  235. package/cli/storybook-dist/sb-addons/storybook-core-core-server-presets-0/common-manager-bundle.js +3 -0
  236. package/cli/storybook-dist/sb-addons/storybook-experimental-addon-test-12/manager-bundle.js +223 -0
  237. package/cli/storybook-dist/sb-addons/themes-11/manager-bundle.js +3 -0
  238. package/cli/storybook-dist/sb-common-assets/favicon.svg +1 -0
  239. package/cli/storybook-dist/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  240. package/cli/storybook-dist/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  241. package/cli/storybook-dist/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  242. package/cli/storybook-dist/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  243. package/cli/storybook-dist/sb-manager/globals-module-info.js +1052 -0
  244. package/cli/storybook-dist/sb-manager/globals-runtime.js +41775 -0
  245. package/cli/storybook-dist/sb-manager/globals.js +48 -0
  246. package/cli/storybook-dist/sb-manager/runtime.js +12048 -0
  247. package/cli/templates/common/.mcp.json +8 -0
  248. package/cli/templates/common/README.md +817 -9
  249. package/cli/templates/common/assets/icon.svg +44 -2
  250. package/cli/templates/common/manifest.json +13 -13
  251. package/cli/templates/common/package.json +9 -11
  252. package/cli/templates/common/py/main.py +98 -0
  253. package/cli/templates/common/requirements.txt +4 -3
  254. package/cli/templates/common/tsconfig.json +1 -1
  255. package/cli/templates/common/ui/content.tsx +216 -0
  256. package/cli/templates/common/ui/style.css +6 -0
  257. package/cli/templates/common/vite.config.ts +6 -25
  258. package/cli/templates/cpp/cpp/CMakeLists.txt +14 -0
  259. package/cli/templates/cpp/cpp/main.cpp +26 -0
  260. package/cli/templates/ros2/ros2_ws/src/__PLUGIN_SLUG__/__PLUGIN_SLUG__/node.py +5 -0
  261. package/cli/templates/ros2-cpp/ros2_ws/src/__PLUGIN_SLUG__/CMakeLists.txt +17 -0
  262. package/cli/templates/ros2-cpp/ros2_ws/src/__PLUGIN_SLUG__/package.xml +11 -0
  263. package/cli/templates/ros2-cpp/ros2_ws/src/__PLUGIN_SLUG__/src/node.cpp +22 -0
  264. package/cli/vite.d.mts +25 -0
  265. package/cli/vite.mjs +281 -0
  266. package/package.json +32 -5
  267. package/cli/src/pack.mjs +0 -61
  268. package/cli/templates/common/main.py +0 -21
  269. package/cli/templates/common/src/content.tsx +0 -32
package/cli/src/util.mjs CHANGED
@@ -1,8 +1,10 @@
1
1
  // Shared helpers for muscat-pk.
2
2
  import { spawnSync } from "node:child_process";
3
- import { existsSync, readFileSync } from "node:fs";
3
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
4
4
  import { dirname, resolve } from "node:path";
5
+ import { tmpdir } from "node:os";
5
6
  import { fileURLToPath } from "node:url";
7
+ import { createInterface } from "node:readline/promises";
6
8
 
7
9
  /** True if an executable is on PATH (cross-platform). */
8
10
  export function hasBin(bin) {
@@ -37,6 +39,32 @@ export function venvPython(venvDir) {
37
39
  : resolve(venvDir, "bin", "python");
38
40
  }
39
41
 
42
+ /**
43
+ * Create/refresh a local `.venv` with requirements.txt installed, for the
44
+ * editor/linter only (the backend actually runs in Docker). Uses `uv` if
45
+ * present, else the system Python. Returns true if the venv is ready.
46
+ */
47
+ export function ensureIdeVenv(root) {
48
+ const venvDir = resolve(root, ".venv");
49
+ const py = venvPython(venvDir);
50
+
51
+ if (!existsSync(py)) {
52
+ let created;
53
+ if (hasBin("uv")) {
54
+ created = spawnSync("uv", ["venv", venvDir, "--python", "3.12", "--seed"], { cwd: root, stdio: "ignore" });
55
+ } else {
56
+ const { cmd } = detectPythonCmd();
57
+ created = spawnSync(cmd[0], [...cmd.slice(1), "-m", "venv", venvDir], { cwd: root, stdio: "ignore" });
58
+ }
59
+ if (created.status !== 0 || !existsSync(py)) return false;
60
+ }
61
+
62
+ const reqs = resolve(root, "requirements.txt");
63
+ const args = ["-m", "pip", "install", "-q"];
64
+ if (existsSync(reqs)) args.push("-r", reqs);
65
+ return spawnSync(py, args, { cwd: root, stdio: "ignore" }).status === 0;
66
+ }
67
+
40
68
  /** Published install/CLI package name. Author imports use @rainbow-robotics/plugin-ui separately. */
41
69
  export const KIT_PUBLISHED_NAME = "@rainbow-robotics/muscat-plugin-kit";
42
70
 
@@ -65,6 +93,40 @@ export function parseArgs(args, { booleans = [] } = {}) {
65
93
  return out;
66
94
  }
67
95
 
96
+ /** Prompt user for input. Returns trimmed answer or fallback (non-TTY or empty). */
97
+ export async function prompt(question, fallback = "") {
98
+ if (!process.stdin.isTTY) return fallback;
99
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
100
+ const answer = (await rl.question(question)).trim();
101
+ rl.close();
102
+ return answer || fallback;
103
+ }
104
+
105
+ const LOCAL_HOSTS = new Set(["", "localhost", "127.0.0.1", "::1"]);
106
+
107
+ /**
108
+ * Ask for robot IP (and token if remote). Returns { robotIp, robotToken }.
109
+ * Skips prompts if already set in process.env (from a parent command like `dev`).
110
+ * Supports --robot-ip / --robot-token flags for non-interactive use.
111
+ */
112
+ export async function promptRobotConnection(args = []) {
113
+ const parsed = parseArgs(args);
114
+ const robotIp =
115
+ parsed["robot-ip"] ??
116
+ process.env.MUSCAT_ROBOT_HOST ??
117
+ (await prompt(" Robot IP (skip if no robot): "));
118
+
119
+ if (LOCAL_HOSTS.has(robotIp)) return { robotIp, robotToken: "" };
120
+
121
+ const robotToken =
122
+ parsed["robot-token"] ??
123
+ process.env.MUSCAT_ROBOT_TOKEN ??
124
+ (await prompt(" SDK Token (required for remote): "));
125
+
126
+ if (!robotToken) throw new Error("SDK token is required for remote robot connection.");
127
+ return { robotIp, robotToken };
128
+ }
129
+
68
130
  /** Walk up from cwd to find the plugin project root (has manifest.json). */
69
131
  export function findPluginRoot(start = process.cwd()) {
70
132
  let dir = resolve(start);
@@ -79,19 +141,64 @@ export function findPluginRoot(start = process.cwd()) {
79
141
  );
80
142
  }
81
143
 
144
+ const RED = "\x1b[31m";
145
+ const ORANGE = "\x1b[33m";
146
+ const RESET = "\x1b[0m";
147
+
82
148
  export const log = {
83
- info: (...m) => console.log(...m),
84
- step: (...m) => console.log("›", ...m),
85
- ok: (...m) => console.log("✓", ...m),
86
- warn: (...m) => console.warn("⚠", ...m),
149
+ info: (...m) => console.log(...m),
150
+ step: (...m) => console.log("›", ...m),
151
+ ok: (...m) => console.log("✓", ...m),
152
+ warn: (...m) => console.warn(`${ORANGE}⚠${RESET}`, ...m.map(s => `${ORANGE}${s}${RESET}`)),
153
+ error: (...m) => console.error(`${RED}✖${RESET}`, ...m.map(s => `${RED}${s}${RESET}`)),
87
154
  };
88
155
 
156
+ // dev / dev:back / build run the plugin back end, the dev bridge, and cpp/ros2
157
+ // compilation in Docker. Show a clear install hint when Docker is missing.
158
+ export function ensureDocker() {
159
+ if (hasBin("docker")) return;
160
+ log.warn("Docker not found.");
161
+ log.warn(" muscat-pk runs the plugin back end, the dev bridge, and cpp/ros2 builds in Docker.");
162
+ log.warn(" Install Docker, then retry: https://docs.docker.com/get-docker/");
163
+ throw new Error("Docker is required for dev / dev:back / build.");
164
+ }
165
+
166
+ /**
167
+ * Remove dangling (untagged) muscat-pk images left behind after a rebuild.
168
+ * Uses label filter so only our images are touched — other Docker images are safe.
169
+ */
170
+ export function pruneMuskatImages() {
171
+ spawnSync(
172
+ "docker",
173
+ ["image", "prune", "--force", "--filter", "label=com.rainbow-robotics.muscat-pk=true"],
174
+ { stdio: "ignore" },
175
+ );
176
+ }
177
+
89
178
  export function humanSize(bytes) {
90
179
  if (bytes < 1024) return `${bytes} B`;
91
180
  if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
92
181
  return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
93
182
  }
94
183
 
184
+ /**
185
+ * Return the on-disk path of a bundled Dockerfile.
186
+ * In npm-install mode the real file exists under cli/docker/.
187
+ * In compiled-binary mode it doesn't — extract from the embedded snapshot to tmpdir.
188
+ */
189
+ export async function resolveDockerfile(name) {
190
+ const real = resolve(kitRoot, "cli/docker", name);
191
+ if (existsSync(real)) return real;
192
+ const { TEMPLATES } = await import("./templates-embedded.mjs");
193
+ const b64 = TEMPLATES[`docker/${name}`];
194
+ if (!b64) throw new Error(`Embedded Dockerfile missing: docker/${name}. Reinstall muscat-plugin-kit.`);
195
+ const dir = resolve(tmpdir(), "muscat-pk-docker");
196
+ mkdirSync(dir, { recursive: true });
197
+ const tmp = resolve(dir, name);
198
+ writeFileSync(tmp, Buffer.from(b64, "base64"));
199
+ return tmp;
200
+ }
201
+
95
202
  /** This kit's installed version (from its package.json). */
96
203
  export function kitVersion() {
97
204
  try {
@@ -141,8 +248,8 @@ export async function checkKitUpdate({ timeoutMs = 2000 } = {}) {
141
248
  [
142
249
  "",
143
250
  line,
144
- ` muscat-plugin-kit 새 버전이 있습니다: ${current} → ${latest}`,
145
- ` 업데이트: muscat-pk update`,
251
+ ` muscat-plugin-kit update available: ${current} → ${latest}`,
252
+ ` Update: muscat-pk update`,
146
253
  line,
147
254
  "",
148
255
  ].join("\n"),