m8-mcp-server 1.0.0 → 1.1.0

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 (164) hide show
  1. package/README.md +118 -32
  2. package/dist/index.d.mts +449 -0
  3. package/dist/index.d.ts +449 -0
  4. package/dist/index.js +700 -1
  5. package/dist/index.mjs +700 -0
  6. package/package.json +34 -21
  7. package/prompts/PROMPTS.md +476 -0
  8. package/bin/m8-mcp.js +0 -2
  9. package/dist/constants.js +0 -1
  10. package/dist/data/ejs-doc/api_audio/api_audio.md +0 -225
  11. package/dist/data/ejs-doc/api_auth/api_auth.md +0 -256
  12. package/dist/data/ejs-doc/api_contact/api_contact.md +0 -295
  13. package/dist/data/ejs-doc/api_contact/images/component_contact.jpg +0 -0
  14. package/dist/data/ejs-doc/api_device/api_device.md +0 -761
  15. package/dist/data/ejs-doc/api_event/api_event.md +0 -244
  16. package/dist/data/ejs-doc/api_global/api_global.md +0 -440
  17. package/dist/data/ejs-doc/api_io/api_io.md +0 -369
  18. package/dist/data/ejs-doc/api_navigator/api_navigator.md +0 -654
  19. package/dist/data/ejs-doc/api_navigator/images/navigator.backbtn.png +0 -0
  20. package/dist/data/ejs-doc/api_navigator/images/navigator.hide.png +0 -0
  21. package/dist/data/ejs-doc/api_navigator/images/navigator.hidestatus.png +0 -0
  22. package/dist/data/ejs-doc/api_navigator/images/navigator.leftarrowbtn.jpg +0 -0
  23. package/dist/data/ejs-doc/api_navigator/images/navigator.leftbtn.png +0 -0
  24. package/dist/data/ejs-doc/api_navigator/images/navigator.leftbtnimg.png +0 -0
  25. package/dist/data/ejs-doc/api_navigator/images/navigator.multititle.jpg +0 -0
  26. package/dist/data/ejs-doc/api_navigator/images/navigator.rightbtn.png +0 -0
  27. package/dist/data/ejs-doc/api_navigator/images/navigator.rightbtn2.png +0 -0
  28. package/dist/data/ejs-doc/api_navigator/images/navigator.rightbtnimg.png +0 -0
  29. package/dist/data/ejs-doc/api_navigator/images/navigator.rightbtnimg2.png +0 -0
  30. package/dist/data/ejs-doc/api_navigator/images/navigator.rightmenu.png +0 -0
  31. package/dist/data/ejs-doc/api_navigator/images/navigator.searchbar.png +0 -0
  32. package/dist/data/ejs-doc/api_navigator/images/navigator.subtitle.jpg +0 -0
  33. package/dist/data/ejs-doc/api_navigator/images/navigator.title.png +0 -0
  34. package/dist/data/ejs-doc/api_page/api_page.md +0 -261
  35. package/dist/data/ejs-doc/api_runtime/api_runtime.md +0 -788
  36. package/dist/data/ejs-doc/api_storage/api_storage.md +0 -320
  37. package/dist/data/ejs-doc/api_stream/api_stream.md +0 -152
  38. package/dist/data/ejs-doc/api_stream/images/body_multiform.jpg +0 -0
  39. package/dist/data/ejs-doc/api_ui/api_ui.md +0 -836
  40. package/dist/data/ejs-doc/api_ui/images/ui.popwindow.png +0 -0
  41. package/dist/data/ejs-doc/api_ui/images/ui_actionsheet.png +0 -0
  42. package/dist/data/ejs-doc/api_ui/images/ui_alert.png +0 -0
  43. package/dist/data/ejs-doc/api_ui/images/ui_confirm.png +0 -0
  44. package/dist/data/ejs-doc/api_ui/images/ui_pickDateTime.png +0 -0
  45. package/dist/data/ejs-doc/api_ui/images/ui_pickdate.png +0 -0
  46. package/dist/data/ejs-doc/api_ui/images/ui_pickmonth.png +0 -0
  47. package/dist/data/ejs-doc/api_ui/images/ui_picktime.png +0 -0
  48. package/dist/data/ejs-doc/api_ui/images/ui_poppicker.png +0 -0
  49. package/dist/data/ejs-doc/api_ui/images/ui_poppicker2.png +0 -0
  50. package/dist/data/ejs-doc/api_ui/images/ui_poppicker3.png +0 -0
  51. package/dist/data/ejs-doc/api_ui/images/ui_prompt.png +0 -0
  52. package/dist/data/ejs-doc/api_ui/images/ui_select.png +0 -0
  53. package/dist/data/ejs-doc/api_ui/images/ui_select2.png +0 -0
  54. package/dist/data/ejs-doc/api_ui/images/ui_select3.png +0 -0
  55. package/dist/data/ejs-doc/api_ui/images/ui_showdebugdialog.png +0 -0
  56. package/dist/data/ejs-doc/api_ui/images/ui_showwaiting.png +0 -0
  57. package/dist/data/ejs-doc/api_ui/images/ui_toast.png +0 -0
  58. package/dist/data/ejs-doc/api_ui/images/ui_toastAndEvent.png +0 -0
  59. package/dist/data/ejs-doc/api_util/api_util.md +0 -615
  60. package/dist/data/ejs-doc/api_util/images/util.playvideo.png +0 -0
  61. package/dist/data/ejs-doc/api_util/images/util.previmage.png +0 -0
  62. package/dist/data/ejs-doc/api_util/images/util.selectfile.png +0 -0
  63. package/dist/data/ejs-doc/api_util/images/util.selectimage.png +0 -0
  64. package/dist/data/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/345/210/227/350/241/250/350/257/246/346/203/205.md +0 -247
  65. package/dist/data/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/345/210/227/350/241/250/350/257/246/346/203/205vue3.md +0 -276
  66. package/dist/data/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/350/241/250/345/215/225/346/217/220/344/272/244.md +0 -130
  67. package/dist/data/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/350/241/250/345/215/225/346/217/220/344/272/244vue3.md +0 -115
  68. package/dist/data/m8mpdoc-develop/005-/346/240/270/345/277/203/351/200/232/347/224/250Util/000-/346/240/270/345/277/203/346/226/271/346/263/225.md +0 -398
  69. package/dist/data/m8mpdoc-develop/005-/346/240/270/345/277/203/351/200/232/347/224/250Util/001-Ajax/344/270/216/346/226/207/344/273/266/344/270/212/344/274/240.md +0 -456
  70. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/000-charset.md +0 -128
  71. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/001-base64.md +0 -142
  72. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/002-date.md +0 -210
  73. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/004-math.md +0 -85
  74. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/006-sha1.md +0 -21
  75. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/007-sha256.md +0 -36
  76. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/008-storage.md +0 -128
  77. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/009-string.md +0 -148
  78. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/010-Util/346/211/251/345/261/225/346/214/207/345/215/227.md +0 -76
  79. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/011-cookie.md +0 -59
  80. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/012-util-sm.md +0 -95
  81. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-1.baseapi.md +0 -76
  82. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-2.network.md +0 -202
  83. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-2.socketTask.md +0 -92
  84. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-3.uiapi.md +0 -412
  85. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-4.eventapi.md +0 -146
  86. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-5.otherapi.md +0 -137
  87. package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/014-util-mpVerifyManager.md +0 -363
  88. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/000-/347/273/204/344/273/266/345/272/223/344/270/213/350/275/275/344/275/277/347/224/250.md +0 -188
  89. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/001-actionsheet/345/212/250/344/275/234/351/235/242/346/235/277.md +0 -460
  90. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/004-amap/345/234/260/345/233/276.md +0 -285
  91. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/005-button/346/214/211/351/222/256.md +0 -211
  92. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/008-cell/345/215/225/345/205/203/346/240/274.md +0 -213
  93. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/009-checkbox/345/244/215/351/200/211/346/241/206.md +0 -501
  94. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/010-circle/347/216/257/345/275/242/350/277/233/345/272/246/346/235/241.md +0 -168
  95. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/011-datepicker/346/227/245/346/234/237/351/200/211/346/213/251.md +0 -617
  96. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/013-field/350/276/223/345/205/245/346/241/206.md +0 -539
  97. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/015-form/350/241/250/345/215/225.md +0 -999
  98. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/018-header/345/244/264/351/203/250/345/257/274/350/210/252/346/240/217.md +0 -150
  99. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/019-icon/345/233/276/346/240/207.md +0 -133
  100. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/020-loading/345/212/240/350/275/275.md +0 -117
  101. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/021-noticebar/351/200/232/347/237/245/346/240/217.md +0 -152
  102. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/022-numberkeyboard/346/225/260/345/255/227/351/224/256/347/233/230.md +0 -427
  103. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/023-pagination/345/210/206/351/241/265.md +0 -212
  104. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/024-panel/351/235/242/346/235/277.md +0 -85
  105. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/025-passwordinput/345/257/206/347/240/201/350/276/223/345/205/245/346/241/206.md +0 -175
  106. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/026-picker/351/200/211/346/213/251/345/231/250.md +0 -519
  107. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/027-popup/345/274/271/345/207/272/345/261/202.md +0 -152
  108. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/028-progress/350/277/233/345/272/246/346/235/241.md +0 -103
  109. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/029-radio/345/215/225/351/200/211/346/241/206.md +0 -285
  110. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/030-rate/350/257/204/345/210/206.md +0 -189
  111. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/031-search/346/220/234/347/264/242.md +0 -217
  112. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/032-slider/346/273/221/345/235/227.md +0 -166
  113. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/033-stepper/346/255/245/350/277/233/345/231/250.md +0 -340
  114. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/035-swipecell/346/273/221/345/212/250/345/215/225/345/205/203/346/240/274.md +0 -265
  115. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/036-switch/345/274/200/345/205/263.md +0 -196
  116. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/037-switchcell/345/274/200/345/205/263/345/215/225/345/205/203/346/240/274.md +0 -115
  117. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/038-tag/346/240/207/350/256/260.md +0 -232
  118. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/039-treeselect/345/210/206/347/261/273/351/200/211/346/213/251.md +0 -631
  119. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/040-uploader/346/226/207/344/273/266/344/270/212/344/274/240.md +0 -531
  120. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/041-verifycode/351/252/214/350/257/201/347/240/201.md +0 -111
  121. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/042-minirefresh/344/270/213/346/213/211/345/210/267/346/226/260.md +0 -337
  122. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/043-layout/345/270/203/345/261/200.md +0 -150
  123. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/044-image/345/233/276/347/211/207.md +0 -144
  124. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/045-toast/350/275/273/346/217/220/347/244/272.md +0 -429
  125. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/046-calendar/346/227/245/345/216/206.md +0 -467
  126. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/047-area/347/234/201/345/270/202/345/214/272/351/200/211/346/213/251.md +0 -295
  127. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/048-tab/346/240/207/347/255/276/351/241/265.md +0 -577
  128. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/049-dialog/345/274/271/345/207/272/346/241/206.md +0 -491
  129. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/050-dropdownmenu/344/270/213/346/213/211/350/217/234/345/215/225.md +0 -265
  130. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/051-notify/346/266/210/346/201/257/351/200/232/347/237/245.md +0 -203
  131. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/052-overlay/351/201/256/347/275/251/345/261/202.md +0 -139
  132. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/053-collapse/346/212/230/345/217/240/351/235/242/346/235/277.md +0 -199
  133. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/054-grid/345/256/253/346/240/274.md +0 -183
  134. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/055-countdown/345/200/222/350/256/241/346/227/266.md +0 -289
  135. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/056-divider/345/210/206/345/211/262/347/272/277.md +0 -97
  136. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/057-empty/347/251/272/347/212/266/346/200/201.md +0 -146
  137. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/058-imagepreview/345/233/276/347/211/207/351/242/204/350/247/210.md +0 -292
  138. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/059-lazyload/346/207/222/345/212/240/350/275/275.md +0 -120
  139. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/060-skeleton/351/252/250/346/236/266/345/261/217.md +0 -114
  140. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/061-steps/346/255/245/351/252/244/346/235/241.md +0 -119
  141. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/062-sticky/347/262/230/346/200/247/345/270/203/345/261/200.md +0 -208
  142. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/063-indexbar/347/264/242/345/274/225/346/240/217.md +0 -161
  143. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/064-sidebar/344/276/247/350/276/271/345/257/274/350/210/252.md +0 -248
  144. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/065-tabbar/346/240/207/347/255/276/346/240/217.md +0 -314
  145. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/066-badge/345/276/275/346/240/207.md +0 -162
  146. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/067-popover/346/260/224/346/263/241/345/274/271/345/207/272/346/241/206.md +0 -325
  147. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/068-cascader/347/272/247/350/201/224/351/200/211/346/213/251.md +0 -360
  148. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/069-selectperson/351/200/211/344/272/272/347/273/204/344/273/266.md +0 -595
  149. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/070-swipe/350/275/256/346/222/255.md +0 -262
  150. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/071-/345/233/275/351/231/205/345/214/226.md +0 -51
  151. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/072-easycalendar/346/227/245/345/216/206.md +0 -132
  152. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/073-qrcode/344/272/214/347/273/264/347/240/201.md +0 -1538
  153. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/074-imagescale/345/233/276/347/211/207/350/243/201/345/211/252.md +0 -261
  154. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/075-dragsort/346/213/226/346/213/275/346/216/222/345/272/217.md +0 -161
  155. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/076-chart/345/233/276/350/241/250.md +0 -381
  156. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/077-rtc/351/237/263/350/247/206/351/242/221.md +0 -531
  157. package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/078-table/350/241/250/346/240/274.md +0 -849
  158. package/dist/data/m8mpdoc-develop/012-Mock/347/232/204/344/275/277/347/224/250/Mock/347/232/204/344/275/277/347/224/250.md +0 -116
  159. package/dist/data/standards/css-style.md +0 -531
  160. package/dist/data/standards/js-style.md +0 -394
  161. package/dist/data/standards/project-structure.md +0 -325
  162. package/dist/data/standards/vue-style.md +0 -644
  163. package/dist/tools/search.js +0 -1
  164. package/dist/tools/standards.js +0 -1
package/package.json CHANGED
@@ -1,43 +1,56 @@
1
1
  {
2
2
  "name": "m8-mcp-server",
3
- "version": "1.0.0",
4
- "description": "MCP server for M8 framework and EJS API documentation",
3
+ "version": "1.1.0",
4
+ "description": "M8 移动前端跨端框架 MCP 智能开发辅助工具",
5
5
  "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
6
8
  "bin": {
7
- "m8-mcp": "./bin/m8-mcp.js"
9
+ "m8-mcp-server": "./dist/index.js"
8
10
  },
9
11
  "files": [
10
12
  "dist",
11
- "bin",
13
+ "docs",
14
+ "prompts",
12
15
  "README.md"
13
16
  ],
14
17
  "scripts": {
15
- "build": "tsc && npm run copy-data && npm run obfuscate",
16
- "copy-data": "node -e \"const fs=require('fs'); const path=require('path'); const src=path.join('src','data'); const dest=path.join('dist','data'); fs.cpSync(src, dest, {recursive: true});\"",
17
- "obfuscate": "javascript-obfuscator ./dist --output ./dist --compact true --self-defending true",
18
- "start": "node dist/index.js",
19
- "dev": "ts-node src/index.ts",
20
- "test": "echo \"Error: no test specified\" && exit 1"
18
+ "dev": "tsup --watch",
19
+ "build": "tsup",
20
+ "test": "vitest run",
21
+ "test:watch": "vitest",
22
+ "test:coverage": "vitest run --coverage",
23
+ "lint": "eslint src --ext .ts",
24
+ "prepublishOnly": "npm run build"
21
25
  },
22
26
  "keywords": [
23
27
  "mcp",
28
+ "model-context-protocol",
24
29
  "m8",
25
30
  "ejs",
26
- "documentation"
31
+ "mobile",
32
+ "development",
33
+ "ai-assistant",
34
+ "vue",
35
+ "cross-platform"
27
36
  ],
28
37
  "author": "",
29
- "license": "ISC",
38
+ "license": "MIT",
30
39
  "dependencies": {
31
- "@modelcontextprotocol/sdk": "^0.6.0",
32
- "fast-glob": "^3.3.2",
33
- "fuse.js": "^7.0.0",
34
- "gray-matter": "^4.0.3",
35
- "zod": "^3.23.8"
40
+ "@modelcontextprotocol/sdk": "^1.0.0",
41
+ "minisearch": "^7.1.0",
42
+ "zod": "^3.23.0"
36
43
  },
37
44
  "devDependencies": {
38
- "@types/node": "^20.12.7",
39
- "javascript-obfuscator": "^4.1.0",
40
- "ts-node": "^10.9.2",
41
- "typescript": "^5.4.5"
45
+ "@types/node": "^20.10.0",
46
+ "fast-check": "^3.15.0",
47
+ "terser": "^5.27.0",
48
+ "tsup": "^8.0.0",
49
+ "typescript": "^5.3.0",
50
+ "vitest": "^1.2.0",
51
+ "@vitest/coverage-v8": "^1.2.0"
52
+ },
53
+ "engines": {
54
+ "node": ">=18.0.0"
42
55
  }
43
56
  }
@@ -0,0 +1,476 @@
1
+ # M8 MCP Server 提示词规范
2
+
3
+ ## 🎯 MCP Prompts 使用说明
4
+
5
+ M8 MCP Server 提供了内置的 MCP Prompts,可以自动应用编码规范生成代码。使用 Prompts 时,您只需描述需求,系统会自动注入完整的编码规范和代码模板。
6
+
7
+ ### 可用的 Prompts
8
+
9
+ | Prompt 名称 | 描述 | 参数 |
10
+ |------------|------|------|
11
+ | `generate_page` | 生成符合 M8 框架规范的页面代码 | `requirement`(必需), `vueVersion`(可选) |
12
+ | `generate_component` | 生成符合 M8 框架规范的 Vue 组件 | `requirement`(必需), `vueVersion`(可选) |
13
+ | `generate_form` | 生成表单页面,包含验证和提交逻辑 | `requirement`(必需), `vueVersion`(可选) |
14
+ | `generate_list` | 生成列表页面,包含下拉刷新和加载更多 | `requirement`(必需), `vueVersion`(可选) |
15
+ | `review_code` | 根据编码规范审查代码 | `code`(必需), `type`(可选) |
16
+
17
+ ### 参数说明
18
+
19
+ - **requirement**: 需求描述,例如 "用户登录表单" 或 "商品列表页面"
20
+ - **vueVersion**: Vue 版本,`2` 表示 M8.3/Vue2,`3` 表示 M8.4/Vue3(默认为 3)
21
+ - **code**: 需要审查的代码
22
+ - **type**: 代码类型,可选值:`vue`、`javascript`、`scss`
23
+
24
+ ### 使用示例
25
+
26
+ ```
27
+ // 生成 Vue3 页面
28
+ 使用 generate_page prompt,参数:
29
+ - requirement: "用户个人中心页面,显示头像、昵称、手机号"
30
+ - vueVersion: "3"
31
+
32
+ // 生成 Vue2 表单
33
+ 使用 generate_form prompt,参数:
34
+ - requirement: "用户注册表单,包含姓名、手机号、验证码"
35
+ - vueVersion: "2"
36
+
37
+ // 审查代码
38
+ 使用 review_code prompt,参数:
39
+ - code: "<你的代码>"
40
+ - type: "vue"
41
+ ```
42
+
43
+ ### Prompts 自动注入的内容
44
+
45
+ 使用 Prompts 时,系统会自动注入:
46
+ - ✅ Vue/JavaScript/SCSS 编码规范
47
+ - ✅ 版本对应的代码模板
48
+ - ✅ EJS API vs M8 组件选择指南
49
+ - ✅ 全局变量使用提醒(Util、Config)
50
+ - ✅ 根据需求关键词注入的上下文内容
51
+
52
+ ---
53
+
54
+ ## 🚨 重要:自动化代码生成流程
55
+
56
+ 当用户请求生成页面代码、组件代码或任何 M8 框架相关代码时,**必须自动执行以下流程**,无需用户额外提示:
57
+
58
+ ### 第一步:检测 Vue 版本(必须)
59
+
60
+ 在生成任何代码前,**必须先确定项目的 Vue 版本**:
61
+
62
+ 1. 检查项目的 `package.json` 文件中的 `vue` 依赖版本
63
+ 2. 根据版本判断框架类型:
64
+ - `"vue": "^2.x.x"` → **M8.3 (Vue2)**
65
+ - `"vue": "^3.x.x"` → **M8.4 (Vue3)**
66
+ 3. 如果无法自动检测,**必须询问用户**:
67
+ ```
68
+ 请确认您的项目版本:
69
+ 1. M8.3 (Vue2)
70
+ 2. M8.4 (Vue3)
71
+ ```
72
+
73
+ ### 第二步:自动获取编码规范(必须)
74
+
75
+ 确定版本后,**自动调用以下 MCP 工具获取规范**:
76
+
77
+ ```javascript
78
+ // 1. 获取 Vue 组件规范
79
+ get_coding_standard({ type: 'vue' })
80
+
81
+ // 2. 获取 JavaScript 规范
82
+ get_coding_standard({ type: 'javascript' })
83
+
84
+ // 3. 获取 CSS/SCSS 规范
85
+ get_coding_standard({ type: 'css' })
86
+
87
+ // 4. 如果涉及项目结构,获取项目结构规范
88
+ get_coding_standard({ type: 'project-structure' })
89
+ ```
90
+
91
+ ### 第三步:查询相关组件/API(按需)
92
+
93
+ 根据用户需求,**自动查询相关组件和 API**:
94
+
95
+ ```javascript
96
+ // 如果需要 UI 组件
97
+ recommend_solution({ requirement: '用户需求描述', type: 'ui' })
98
+
99
+ // 如果需要原生功能
100
+ get_api_info({ module: 'ui' }) // 或 page, storage, device 等
101
+
102
+ // 如果需要工具方法
103
+ get_util_info({ category: 'ajax' }) // 或 string, date 等
104
+ ```
105
+
106
+ ### 第四步:生成符合规范的代码
107
+
108
+ 根据获取的规范和组件信息,生成代码。
109
+
110
+ ---
111
+
112
+ ## 版本差异速查表
113
+
114
+ | 特性 | M8.3 (Vue2) | M8.4 (Vue3) |
115
+ |------|-------------|-------------|
116
+ | 组件语法 | Options API | Composition API + `<script setup>` |
117
+ | 响应式 | `data()` 返回对象 | `ref()`, `reactive()` |
118
+ | 生命周期 | `created`, `mounted` | `onMounted`, `onUnmounted` |
119
+ | 状态管理 | Vuex | Pinia |
120
+ | 样式穿透 | `::v-deep` | `:deep()` |
121
+ | 获取页面参数 | `Util.getExtraDataByKey()` | `onLoad((options) => {})` |
122
+
123
+ ---
124
+
125
+ ## 核心编码规范(内置)
126
+
127
+ 以下规范已内置,生成代码时**必须遵守**:
128
+
129
+ ### Vue 组件规范
130
+
131
+ ```vue
132
+ <!--
133
+ * @作者: [作者名]
134
+ * @创建时间: YYYY-MM-DD HH:mm:ss
135
+ * @修改时间: YYYY-MM-DD HH:mm:ss
136
+ * @版本: [1.0]
137
+ * @版权: 国泰新点软件股份有限公司
138
+ * @描述: [组件功能描述]
139
+ -->
140
+ <template>
141
+ <div class="page_container">
142
+ <!-- 重构页面不添加导航栏 em-header -->
143
+ <!-- 内容区域 -->
144
+ </div>
145
+ </template>
146
+
147
+ <script setup>
148
+ // Vue3 使用 script setup
149
+ import { ref, computed, onMounted } from 'vue';
150
+ </script>
151
+
152
+ <style lang="scss" scoped>
153
+ @import "./css/page-name.scss";
154
+ </style>
155
+ ```
156
+
157
+ **必须遵守:**
158
+ - ✅ 文件头部必须有完整注释块
159
+ - ✅ 样式必须剥离到外部 `.scss` 文件
160
+ - ✅ `<style>` 必须使用 `scoped`
161
+ - ❌ 重构页面禁止添加 `em-header` 导航栏
162
+ - ❌ 禁止在 `.vue` 文件中写大量样式代码
163
+
164
+ ### JavaScript 规范
165
+
166
+ ```javascript
167
+ // ✅ 变量/函数: camelCase
168
+ const userName = 'John';
169
+ function getUserInfo() {}
170
+
171
+ // ✅ 常量: UPPER_SNAKE_CASE
172
+ const MAX_COUNT = 100;
173
+
174
+ // ✅ 必须使用 Util.ajax,禁止 fetch/axios
175
+ async function loadData() {
176
+ try {
177
+ const result = await Util.ajax({
178
+ url: Config.serverUrl + '/api/data',
179
+ type: 'POST',
180
+ data: { params: JSON.stringify(params) }
181
+ });
182
+ if (result.status?.code === 1) {
183
+ return result.data;
184
+ }
185
+ } catch (error) {
186
+ console.error('请求失败:', error);
187
+ ejs.ui.toast({ message: '网络错误' });
188
+ }
189
+ }
190
+
191
+ // ❌ 禁止 import Util 和 Config(它们是全局变量)
192
+ // import { Util } from '@shared'; // 错误!
193
+ // import { Config } from '@config'; // 错误!
194
+ ```
195
+
196
+ **必须遵守:**
197
+ - ✅ 使用 `Util.ajax` 发送请求
198
+ - ✅ 使用 `Config.serverUrl` 拼接 API 地址
199
+ - ✅ `Util` 和 `Config` 是全局变量,禁止 import
200
+ - ✅ 日志必须包含描述:`console.log('描述:', data)`
201
+ - ✅ 使用 `async/await` 处理异步
202
+
203
+ ### SCSS 规范
204
+
205
+ ```scss
206
+ // ✅ 使用 SASS 变量,禁止硬编码颜色
207
+ $color-primary: #1890ff;
208
+ $color-text-primary: #333;
209
+ $spacing-md: 16px;
210
+
211
+ // ✅ 类名: 小写英文 + 下划线
212
+ .page_container {
213
+ background: $color-bg-gray;
214
+
215
+ .page_header {
216
+ padding: $spacing-md;
217
+
218
+ .header_title {
219
+ color: $color-text-primary;
220
+ }
221
+ }
222
+ }
223
+
224
+ // ❌ 禁止硬编码颜色值
225
+ // ❌ 禁止超过 3 层嵌套
226
+ // ❌ 禁止使用 ID 选择器
227
+ // ❌ 禁止使用 !important
228
+ ```
229
+
230
+ **必须遵守:**
231
+ - ✅ 使用 SASS 变量管理颜色
232
+ - ✅ 类名使用小写英文 + 下划线
233
+ - ✅ 选择器嵌套不超过 3 层
234
+ - ✅ `position` 定位必须加 `z-index`
235
+
236
+ ---
237
+
238
+ ## 代码模板
239
+
240
+ ### Vue3 页面模板 (M8.4)
241
+
242
+ ```vue
243
+ <!--
244
+ * @作者: [作者名]
245
+ * @创建时间: YYYY-MM-DD HH:mm:ss
246
+ * @修改时间: YYYY-MM-DD HH:mm:ss
247
+ * @版本: [1.0]
248
+ * @版权: 国泰新点软件股份有限公司
249
+ * @描述: [页面功能描述]
250
+ -->
251
+ <template>
252
+ <div class="page_container">
253
+ <div class="page_content">
254
+ <!-- 页面内容 -->
255
+ </div>
256
+ </div>
257
+ </template>
258
+
259
+ <script setup>
260
+ import { ref, computed, onMounted } from 'vue';
261
+
262
+ // 响应式数据
263
+ const loading = ref(false);
264
+ const dataList = ref([]);
265
+
266
+ // 计算属性
267
+ const isEmpty = computed(() => dataList.value.length === 0);
268
+
269
+ // 生命周期
270
+ onMounted(() => {
271
+ loadData();
272
+ });
273
+
274
+ /**
275
+ * 加载数据
276
+ */
277
+ async function loadData() {
278
+ loading.value = true;
279
+ try {
280
+ const result = await Util.ajax({
281
+ url: Config.serverUrl + '/api/list',
282
+ type: 'POST',
283
+ data: { params: JSON.stringify({}) }
284
+ });
285
+ if (result.status?.code === 1) {
286
+ dataList.value = result.data || [];
287
+ } else {
288
+ ejs.ui.toast({ message: result.status?.text || '加载失败' });
289
+ }
290
+ } catch (error) {
291
+ console.error('加载数据失败:', error);
292
+ ejs.ui.toast({ message: '网络错误,请重试' });
293
+ } finally {
294
+ loading.value = false;
295
+ }
296
+ }
297
+ </script>
298
+
299
+ <style lang="scss" scoped>
300
+ @import "./css/page-name.scss";
301
+ </style>
302
+ ```
303
+
304
+ ### Vue2 页面模板 (M8.3)
305
+
306
+ ```vue
307
+ <!--
308
+ * @作者: [作者名]
309
+ * @创建时间: YYYY-MM-DD HH:mm:ss
310
+ * @修改时间: YYYY-MM-DD HH:mm:ss
311
+ * @版本: [1.0]
312
+ * @版权: 国泰新点软件股份有限公司
313
+ * @描述: [页面功能描述]
314
+ -->
315
+ <template>
316
+ <div class="page_container">
317
+ <div class="page_content">
318
+ <!-- 页面内容 -->
319
+ </div>
320
+ </div>
321
+ </template>
322
+
323
+ <script>
324
+ export default {
325
+ name: 'PageName',
326
+ data() {
327
+ return {
328
+ loading: false,
329
+ dataList: []
330
+ };
331
+ },
332
+ computed: {
333
+ isEmpty() {
334
+ return this.dataList.length === 0;
335
+ }
336
+ },
337
+ created() {
338
+ this.loadData();
339
+ },
340
+ methods: {
341
+ /**
342
+ * 加载数据
343
+ */
344
+ async loadData() {
345
+ this.loading = true;
346
+ try {
347
+ const result = await Util.ajax({
348
+ url: Config.serverUrl + '/api/list',
349
+ type: 'POST',
350
+ data: { params: JSON.stringify({}) }
351
+ });
352
+ if (result.status?.code === 1) {
353
+ this.dataList = result.data || [];
354
+ } else {
355
+ ejs.ui.toast({ message: result.status?.text || '加载失败' });
356
+ }
357
+ } catch (error) {
358
+ console.error('加载数据失败:', error);
359
+ ejs.ui.toast({ message: '网络错误,请重试' });
360
+ } finally {
361
+ this.loading = false;
362
+ }
363
+ }
364
+ }
365
+ };
366
+ </script>
367
+
368
+ <style lang="scss" scoped>
369
+ @import "./css/page-name.scss";
370
+ </style>
371
+ ```
372
+
373
+ ### SCSS 文件模板
374
+
375
+ ```scss
376
+ // page-name.scss
377
+
378
+ .page_container {
379
+ min-height: 100vh;
380
+ background: $color-bg-gray;
381
+
382
+ .page_content {
383
+ padding: $spacing-md;
384
+ }
385
+
386
+ .page_header {
387
+ padding: $spacing-md;
388
+ background: $color-bg-base;
389
+
390
+ .header_title {
391
+ font-size: $font-size-lg;
392
+ font-weight: 500;
393
+ color: $color-text-primary;
394
+ }
395
+ }
396
+
397
+ .page_list {
398
+ margin-top: $spacing-sm;
399
+
400
+ .list_item {
401
+ padding: $spacing-md;
402
+ background: $color-bg-base;
403
+ border-bottom: 1px solid $color-border;
404
+
405
+ &:last-child {
406
+ border-bottom: none;
407
+ }
408
+ }
409
+ }
410
+ }
411
+ ```
412
+
413
+ ---
414
+
415
+ ## EJS API vs M8 组件选择指南
416
+
417
+ | 功能 | 优先使用 | 说明 |
418
+ |------|----------|------|
419
+ | Toast 提示 | `ejs.ui.toast()` | 原生 API |
420
+ | 确认弹窗 | `ejs.ui.confirm()` | 原生 API |
421
+ | 日期选择 | `ejs.ui.pickDate()` | 原生 API |
422
+ | 时间选择 | `ejs.ui.pickTime()` | 原生 API |
423
+ | Loading | `ejs.ui.showWaiting()` | 原生 API |
424
+ | 页面跳转 | `ejs.page.open()` | 原生 API |
425
+ | 按钮 | `em-button` | M8 组件 |
426
+ | 输入框 | `em-field` | M8 组件 |
427
+ | 列表项 | `em-cell` | M8 组件 |
428
+ | 上传 | `em-uploader` | M8 组件 |
429
+ | 下拉刷新 | `em-minirefresh` | M8 组件 |
430
+
431
+ **原则:交互类优先 EJS API,UI 展示类使用 M8 组件**
432
+
433
+ ---
434
+
435
+ ## MCP 工具参考
436
+
437
+ ### search_docs - 文档搜索
438
+ ```
439
+ 参数:query(必需), category(可选), limit(可选)
440
+ ```
441
+
442
+ ### get_component_info - 组件信息
443
+ ```
444
+ 参数:componentName(必需)
445
+ 示例:em-button, em-field, em-cell
446
+ ```
447
+
448
+ ### get_api_info - EJS API 信息
449
+ ```
450
+ 参数:module(必需), method(可选)
451
+ 模块:ui, page, storage, device, auth, io
452
+ ```
453
+
454
+ ### get_util_info - Util 工具信息
455
+ ```
456
+ 参数:category(必需), method(可选)
457
+ 分类:string, date, base64, ajax
458
+ ```
459
+
460
+ ### get_coding_standard - 编码规范
461
+ ```
462
+ 参数:type(必需), keyword(可选)
463
+ 类型:css, javascript, vue, project-structure, all
464
+ ```
465
+
466
+ ### generate_code - 代码生成
467
+ ```
468
+ 参数:type(必需), requirement(必需), vueVersion(可选)
469
+ 类型:vue-component, javascript, scss, api-call
470
+ ```
471
+
472
+ ### recommend_solution - 智能推荐
473
+ ```
474
+ 参数:requirement(必需), type(可选)
475
+ 类型:ui, data, native, general
476
+ ```
package/bin/m8-mcp.js DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- require('../dist/index.js');
package/dist/constants.js DELETED
@@ -1 +0,0 @@
1
- const a0_0x4db045=a0_0x33ed;(function(_0x57558c,_0x5ac6a1){const _0x495b27=a0_0x33ed,_0x49eb16=_0x57558c();while(!![]){try{const _0x1de8c1=-parseInt(_0x495b27(0x1c4))/0x1+parseInt(_0x495b27(0x1b9))/0x2*(-parseInt(_0x495b27(0x1cc))/0x3)+-parseInt(_0x495b27(0x1c0))/0x4*(parseInt(_0x495b27(0x1c9))/0x5)+parseInt(_0x495b27(0x1b7))/0x6+-parseInt(_0x495b27(0x1c5))/0x7+-parseInt(_0x495b27(0x1d0))/0x8+parseInt(_0x495b27(0x1c1))/0x9;if(_0x1de8c1===_0x5ac6a1)break;else _0x49eb16['push'](_0x49eb16['shift']());}catch(_0x22f907){_0x49eb16['push'](_0x49eb16['shift']());}}}(a0_0x2dc6,0x5d4f8));const a0_0x41522a=(function(){let _0x493f54=!![];return function(_0x2da0b3,_0x1ec6b9){const _0x3baa30=_0x493f54?function(){if(_0x1ec6b9){const _0x4704be=_0x1ec6b9['apply'](_0x2da0b3,arguments);return _0x1ec6b9=null,_0x4704be;}}:function(){};return _0x493f54=![],_0x3baa30;};}()),a0_0x3e463f=a0_0x41522a(this,function(){const _0x58149a=a0_0x33ed;return a0_0x3e463f['toString']()[_0x58149a(0x1bf)](_0x58149a(0x1d6))[_0x58149a(0x1c3)]()[_0x58149a(0x1ce)](a0_0x3e463f)[_0x58149a(0x1bf)](_0x58149a(0x1d6));});function a0_0x2dc6(){const _0x1cffff=['2708360Iqrwoe','__esModule','data','standards','defineProperty','__importDefault','(((.+)+)+)+$','DATA_DIR','4437930PphuVN','STANDARDS_DIR','638882yFPNwr','getDataDir','m8mpdoc-develop','src/data','default','PROJECT_ROOT','search','107996YbyRrV','6664860LevGdZ','resolve','toString','151828htOxLA','505323XSvZct','extname','.ts','M8_DOCS_DIR','40olYobA','join','EJS_DOCS_DIR','3nxKjXS','../src/data','constructor','PROD_DOCS_DIR'];a0_0x2dc6=function(){return _0x1cffff;};return a0_0x2dc6();}function a0_0x33ed(_0x17e400,_0x42e155){_0x17e400=_0x17e400-0x1b6;const _0x345b33=a0_0x2dc6();let _0x3e463f=_0x345b33[_0x17e400];return _0x3e463f;}a0_0x3e463f();'use strict';var __importDefault=this&&this[a0_0x4db045(0x1d5)]||function(_0x1578df){const _0x10c994=a0_0x4db045;return _0x1578df&&_0x1578df[_0x10c994(0x1d1)]?_0x1578df:{'default':_0x1578df};};Object[a0_0x4db045(0x1d4)](exports,a0_0x4db045(0x1d1),{'value':!![]}),exports['STANDARDS_DIR']=exports[a0_0x4db045(0x1cb)]=exports['M8_DOCS_DIR']=exports[a0_0x4db045(0x1cf)]=exports['DOCS_DIR']=exports[a0_0x4db045(0x1be)]=exports[a0_0x4db045(0x1b6)]=void 0x0,exports[a0_0x4db045(0x1ba)]=getDataDir;const path_1=__importDefault(require('path'));exports[a0_0x4db045(0x1b6)]=path_1['default'][a0_0x4db045(0x1ca)](__dirname,a0_0x4db045(0x1cd));const IS_TS_NODE=path_1[a0_0x4db045(0x1bd)][a0_0x4db045(0x1c6)](__filename)===a0_0x4db045(0x1c7);exports['PROJECT_ROOT']=path_1[a0_0x4db045(0x1bd)][a0_0x4db045(0x1c2)](__dirname,IS_TS_NODE?'..':'..'),exports['DOCS_DIR']=path_1[a0_0x4db045(0x1bd)]['join'](exports['PROJECT_ROOT'],a0_0x4db045(0x1bc)),exports[a0_0x4db045(0x1cf)]=path_1['default'][a0_0x4db045(0x1ca)](exports[a0_0x4db045(0x1be)],a0_0x4db045(0x1d2));function getDataDir(){const _0x31528e=a0_0x4db045;return path_1[_0x31528e(0x1bd)][_0x31528e(0x1ca)](__dirname,_0x31528e(0x1d2));}exports[a0_0x4db045(0x1c8)]=a0_0x4db045(0x1bb),exports[a0_0x4db045(0x1cb)]='ejs-doc',exports[a0_0x4db045(0x1b8)]=a0_0x4db045(0x1d3);