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/dist/index.mjs ADDED
@@ -0,0 +1,700 @@
1
+ #!/usr/bin/env node
2
+ import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import {ListToolsRequestSchema,CallToolRequestSchema,ListPromptsRequestSchema,GetPromptRequestSchema}from'@modelcontextprotocol/sdk/types.js';import*as h from'fs';import*as I from'path';import A from'minisearch';var S=class{parseMarkdown(t,e){let r=this.detectCategory(e),n=this.extractTitle(t),o=this.extractKeywords(t,n,e),i=this.extractSummary(t),a={id:this.generateId(e),title:n,category:r,filePath:e,keywords:o,summary:i,content:t};switch(r){case "ejs-api":a.apis=this.extractApiInfo(t),a.module=this.extractModuleName(e,t);break;case "ui-component":a.component=this.extractComponentInfo(t);break;case "util-tool":a.methods=this.extractMethodInfo(t),a.utilCategory=this.extractUtilCategory(e,t);break;case "standard":a.rules=this.extractStandardRules(t),a.standardType=this.extractStandardType(e);break}return a}detectCategory(t){let e=t.replace(/\\/g,"/").toLowerCase();return e.includes("ejs-doc")?"ejs-api":e.includes("009-ui\u7EC4\u4EF6")||e.includes("ui\u7EC4\u4EF6")?"ui-component":e.includes("006-util")||e.includes("util\u5DE5\u5177\u96C6")||e.includes("005-\u6838\u5FC3\u901A\u7528util")||e.includes("\u6838\u5FC3\u901A\u7528")?"util-tool":e.includes("\u5178\u578B\u6848\u4F8B")||e.includes("003-\u5178\u578B\u6848\u4F8B")?"typical-case":e.includes("standards")||e.includes("\u89C4\u8303")?"standard":"util-tool"}extractModuleName(t,e){let r=e.match(/^#\s+ejs\.(\w+)/m);if(r)return r[1];let n=t.match(/api_(\w+)/);return n?n[1]:"unknown"}extractUtilCategory(t,e){let r=t.match(/\d+-(\w+)\.md$/i);if(r)return r[1];let n=e.match(/^#\s+(?:Util\.)?(\w+)/m);return n?n[1].toLowerCase():"general"}extractStandardType(t){let e=t.toLowerCase();return e.includes("css")?"css":e.includes("js")||e.includes("javascript")?"javascript":e.includes("vue")?"vue":e.includes("project")||e.includes("structure")?"project-structure":"general"}extractTitle(t){let e=t.match(/^#\s+(.+)$/m);if(e)return e[1].trim();let r=t.match(/^##\s+(.+)$/m);return r?r[1].trim():"\u672A\u547D\u540D\u6587\u6863"}extractKeywords(t,e,r){let n=new Set;n.add(e),r.split(/[/\\]/).filter(Boolean).forEach(m=>{let g=m.replace(/\.md$/i,"").replace(/^\d+-/,"");g.length>1&&n.add(g);});let i=t.match(/`([a-zA-Z_][\w.]*)`/g);i&&i.slice(0,20).forEach(m=>{let g=m.replace(/`/g,"");g.length>2&&g.length<50&&n.add(g);});let c=t.match(/ejs\.[a-zA-Z]+\.[a-zA-Z]+/g);c&&c.forEach(m=>n.add(m));let a=t.match(/em-[a-zA-Z-]+/g);a&&a.forEach(m=>n.add(m));let p=t.match(/Util\.[a-zA-Z]+/g);p&&p.forEach(m=>n.add(m));let x=e.match(/[\u4e00-\u9fa5]+/g);return x&&x.forEach(m=>{m.length>=2&&n.add(m);}),Array.from(n)}extractSummary(t){let e=t.replace(/^#+\s+.+$/gm,"");e=e.replace(/```[\s\S]*?```/g,""),e=e.replace(/\|[\s\S]*?\|/g,""),e=e.replace(/!\[.*?\]\(.*?\)/g,""),e=e.replace(/\[.*?\]\(.*?\)/g,""),e=e.replace(/<[^>]+>/g,""),e=e.replace(/:::\s*\w+[\s\S]*?:::\s*\w*/g,"");let n=e.split(`
3
+ `).filter(o=>o.trim().length>0).slice(0,3).join(" ").trim();return n.length>200?n.substring(0,200)+"...":n}generateId(t){return t.replace(/\\/g,"/").replace(/\.md$/i,"").replace(/[^a-zA-Z0-9\u4e00-\u9fa5]/g,"-").replace(/-+/g,"-").toLowerCase()}extractApiInfo(t){let e=[],r=t.split(/^##\s+/m).slice(1);for(let n of r){let i=n.split(`
4
+ `)[0]?.trim();if(!i||i.startsWith("#"))continue;let c={name:i,description:this.extractApiDescription(n),parameters:this.extractParameters(n),returns:this.extractReturns(n),platformSupport:this.extractPlatformSupport(n),examples:this.extractCodeExamples(n)};e.push(c);}return e}extractApiDescription(t){let e=t.split(`
5
+ `).slice(1),r=[];for(let n of e){if(n.startsWith("#")||n.startsWith("|")||n.startsWith("```"))break;n.trim()&&r.push(n.trim());}return r.join(" ")}extractParameters(t){let e=[],r=t.match(/\*\*参数说明\*\*[\s\S]*?\|[\s\S]*?(?=\n\n|\*\*|$)/);if(!r)return e;let o=r[0].split(`
6
+ `).filter(i=>i.includes("|"));for(let i=2;i<o.length;i++){let c=o[i].split("|").map(a=>a.trim()).filter(Boolean);c.length>=3&&e.push({name:c[0].replace(/`/g,""),type:c[1],description:c[2],required:!c[2]?.includes("\u53EF\u9009")});}return e}extractReturns(t){let e=t.match(/\*\*返回说明\*\*[\s\S]*?\|[\s\S]*?(?=\n\n|\*\*|$)/);if(!e)return;let n=e[0].split(`
7
+ `).filter(o=>o.includes("|"));if(n.length>=3){let o=n[2].split("|").map(i=>i.trim()).filter(Boolean);if(o.length>=3)return {type:o[1],description:o[2]}}}extractPlatformSupport(t){let e={},r=t.match(/\*\*平台差异\*\*[\s\S]*?\|[\s\S]*?(?=\n\n|\*\*|$)/);if(!r)return e;let n=r[0];return e.ejsH5=n.includes("\u652F\u6301")&&n.includes("ejs"),e.h5=n.includes("H5")&&!n.includes("\u4E0D\u652F\u6301"),e.wechat=n.includes("\u5FAE\u4FE1")&&!n.includes("\u4E0D\u652F\u6301"),e.alipay=n.includes("\u652F\u4ED8\u5B9D")&&!n.includes("\u4E0D\u652F\u6301"),e.dingtalk=n.includes("\u9489\u9489")&&!n.includes("\u4E0D\u652F\u6301"),e}extractCodeExamples(t){let e=[],r=/```(?:js|javascript|html|vue|scss|css)?\n([\s\S]*?)```/g,n;for(;(n=r.exec(t))!==null;)n[1].trim()&&e.push(n[1].trim());return e}extractComponentInfo(t){let e=this.extractComponentName(t),r=this.extractComponentDescription(t),n=this.extractProps(t),o=this.extractEvents(t),i=this.extractCodeExamples(t);return {name:e,description:r,props:n,events:o,examples:i}}extractComponentName(t){let e=t.match(/^##?\s+(.+?)(?:\s+按钮|\s+组件|\s+输入框)?$/m);if(e){let n=e[1].trim(),o=n.match(/em-[a-zA-Z-]+/);return o?o[0]:n}let r=t.match(/<(em-[a-zA-Z-]+)/);return r?r[1]:"\u672A\u77E5\u7EC4\u4EF6"}extractComponentDescription(t){let e=t.match(/###\s*介绍[\s\S]*?(?=###|$)/);return e?e[0].replace(/###\s*介绍/,"").replace(/```[\s\S]*?```/g,"").trim().split(`
8
+ `).filter(n=>n.trim()).slice(0,2).join(" "):this.extractSummary(t)}extractProps(t){let e=[],r=t.match(/####?\s*Props[\s\S]*?\|[\s\S]*?(?=####|$)/i);if(!r)return e;let o=r[0].split(`
9
+ `).filter(i=>i.includes("|"));for(let i=2;i<o.length;i++){let c=o[i].split("|").map(a=>a.trim()).filter(Boolean);c.length>=3&&e.push({name:c[0].replace(/`/g,""),type:c.length>2?c[2]:"any",description:c.length>1?c[1]:"",defaultValue:c.length>3?c[3]:void 0});}return e}extractEvents(t){let e=[],r=t.match(/####?\s*Events[\s\S]*?\|[\s\S]*?(?=####|$)/i);if(!r)return e;let o=r[0].split(`
10
+ `).filter(i=>i.includes("|"));for(let i=2;i<o.length;i++){let c=o[i].split("|").map(a=>a.trim()).filter(Boolean);c.length>=2&&e.push({name:c[0].replace(/`/g,""),description:c[1],callbackParams:c.length>2?c[2]:void 0});}return e}extractMethodInfo(t){let e=[],r=t.split(/^##\s+/m).slice(1);for(let n of r){let i=n.split(`
11
+ `)[0]?.trim();if(!i||i.startsWith("#"))continue;let c={name:i,description:this.extractApiDescription(n),parameters:this.extractParameters(n),returns:this.extractReturns(n),examples:this.extractCodeExamples(n),platformSupport:this.extractPlatformSupport(n)};e.push(c);}return e}extractStandardRules(t){let e=[],r=t.split(/^##\s+/m).slice(1);for(let n of r){let o=n.split(`
12
+ `),i=o[0]?.trim();if(!i||i.startsWith("#"))continue;let c=[];for(let g=1;g<o.length;g++){let M=o[g];if(M.startsWith("#")||M.startsWith("```"))break;M.trim()&&c.push(M.trim());}let a=n.match(/✅\s*正确[\s\S]*?```[\w]*\n([\s\S]*?)```/),p=a?a[1].trim():void 0,x=n.match(/❌\s*错误[\s\S]*?```[\w]*\n([\s\S]*?)```/),m=x?x[1].trim():void 0;e.push({name:i,description:c.join(" "),goodExample:p,badExample:m});}return e}};function w(s){let t=[],e=s.match(/[a-zA-Z_][\w]*/g)||[];t.push(...e.map(o=>o.toLowerCase()));let r=s.match(/[\u4e00-\u9fa5]+/g)||[];for(let o of r){o.length>=2&&t.push(o);for(let i=0;i<o.length-1;i++)t.push(o.substring(i,i+2));for(let i of o)t.push(i);}let n=s.match(/\d+/g)||[];return t.push(...n),t.filter(o=>o.length>0)}var v=class{documents=new Map;parser;searchIndex;initialized=false;basePath;constructor(t){this.parser=new S,this.basePath=t||process.cwd(),this.searchIndex=new A({fields:["title","keywords","content"],storeFields:["id","title","category","filePath"],tokenize:w,searchOptions:{boost:{title:3,keywords:2,content:1},fuzzy:.2,prefix:true}});}async initialize(){if(this.initialized)return;let t=[{path:"ejs-doc",category:"ejs-api"},{path:"m8mpdoc-develop/009-UI\u7EC4\u4EF6",category:"ui-component"},{path:"m8mpdoc-develop/006-Util\u5DE5\u5177\u96C6",category:"util-tool"},{path:"m8mpdoc-develop/005-\u6838\u5FC3\u901A\u7528Util",category:"util-tool"},{path:"m8mpdoc-develop/003-\u5178\u578B\u6848\u4F8B",category:"typical-case"},{path:"standards",category:"standard"}];for(let e of t){let r=I.join(this.basePath,e.path);await this.scanDirectory(r);}this.initialized=true,console.error(`DocumentIndexer \u521D\u59CB\u5316\u5B8C\u6210\uFF0C\u5171\u7D22\u5F15 ${this.documents.size} \u4E2A\u6587\u6863`);}async scanDirectory(t){try{if(!h.existsSync(t)){console.error(`\u76EE\u5F55\u4E0D\u5B58\u5728: ${t}`);return}let e=h.readdirSync(t,{withFileTypes:!0});for(let r of e){let n=I.join(t,r.name);if(r.isDirectory()){if(r.name.toLowerCase()==="images")continue;await this.scanDirectory(n);}else r.isFile()&&r.name.endsWith(".md")&&await this.loadDocument(n);}}catch(e){console.error(`\u626B\u63CF\u76EE\u5F55\u5931\u8D25: ${t}`,e);}}async loadDocument(t){try{let e=h.readFileSync(t,"utf-8"),r=I.relative(this.basePath,t),n=this.parser.parseMarkdown(e,r);this.addDocument(n);}catch(e){console.error(`\u52A0\u8F7D\u6587\u6863\u5931\u8D25: ${t}`,e);}}search(t,e){if(!t||t.trim().length===0)return [];let r=e?.limit||10,n=e?.fuzzyThreshold??.2,o=this.searchIndex.search(t,{fuzzy:n,prefix:true,boost:{title:3,keywords:2,content:1}});return e?.category&&(o=o.filter(i=>i.category===e.category)),o.slice(0,r).map(i=>{let c=this.documents.get(i.id);return {id:i.id,title:i.title||c?.title||"\u672A\u77E5\u6807\u9898",category:i.category||c?.category||"util-tool",score:i.score,excerpt:this.generateExcerpt(c,t),filePath:i.filePath||c?.filePath||""}})}generateExcerpt(t,e){if(!t)return "";let r=t.content,n=w(e),o=r.split(/\n\n+/);for(let i of o){let c=i.toLowerCase();for(let a of n)if(c.includes(a.toLowerCase())){let p=i.replace(/```[\s\S]*?```/g,"").replace(/\|[\s\S]*?\|/g,"").replace(/#+\s*/g,"").replace(/\s+/g," ").trim();if(p.length>0)return p.length>200?p.substring(0,200)+"...":p}}return t.summary}getDocument(t){return this.documents.get(t)||null}getDocumentsByCategory(t){let e=[];for(let r of this.documents.values())r.category===t&&e.push(r);return e}addDocument(t){this.documents.set(t.id,t);let e={id:t.id,title:t.title,category:t.category,keywords:t.keywords.join(" "),content:t.summary+" "+this.extractSearchableContent(t),filePath:t.filePath};this.searchIndex.has(t.id)&&this.searchIndex.discard(t.id),this.searchIndex.add(e);}extractSearchableContent(t){let e=[];if(t.apis)for(let r of t.apis)e.push(r.name),e.push(r.description);if(t.component){e.push(t.component.name),e.push(t.component.description);for(let r of t.component.props)e.push(r.name);for(let r of t.component.events)e.push(r.name);}if(t.methods)for(let r of t.methods)e.push(r.name),e.push(r.description);if(t.rules)for(let r of t.rules)e.push(r.name),e.push(r.description);return t.module&&(e.push(t.module),e.push(`ejs.${t.module}`)),t.utilCategory&&(e.push(t.utilCategory),e.push(`Util.${t.utilCategory}`)),e.filter(Boolean).join(" ")}getAllDocuments(){return Array.from(this.documents.values())}getParser(){return this.parser}getDocumentCount(){return this.documents.size}isInitialized(){return this.initialized}getEjsApiByModule(t){for(let e of this.documents.values())if(e.category==="ejs-api"&&e.module===t)return e;return null}getComponentByName(t){let e=t.toLowerCase().replace(/^em-/,"");for(let r of this.documents.values())if(r.category==="ui-component"&&(r.component?.name.toLowerCase().includes(e)||r.title.toLowerCase().includes(e)||r.keywords.some(n=>n.toLowerCase().includes(e))))return r;return null}getUtilByCategory(t){let e=t.toLowerCase();for(let r of this.documents.values())if(r.category==="util-tool"&&(r.utilCategory?.toLowerCase()===e||r.title.toLowerCase().includes(e)))return r;return null}getStandardByType(t){let e=t.toLowerCase();for(let r of this.documents.values())if(r.category==="standard"&&(r.standardType?.toLowerCase()===e||r.filePath.toLowerCase().includes(e)))return r;return null}};function b(s,t){let e=new Date,r=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`;return `/**
13
+ * @file ${s}.vue
14
+ * @description ${t}
15
+ * @author Developer
16
+ * @date ${r}
17
+ * @version 1.0.0
18
+ */`}function N(s){let{name:t,description:e,components:r=[],props:n=[]}=s,o=b(t,e),i=n.length>0?`const props = defineProps<{
19
+ ${n.map(a=>` ${a.name}${a.required?"":"?"}: ${a.type};`).join(`
20
+ `)}
21
+ }>();`:"",c=r.length>0?`// \u5BFC\u5165 M8 UI \u7EC4\u4EF6
22
+ // import { ${r.join(", ")} } from '@epoint/m8-ui';`:"";return `${o}
23
+
24
+ <template>
25
+ <div class="${t.toLowerCase()}">
26
+ <!-- ${e} -->
27
+ <slot></slot>
28
+ </div>
29
+ </template>
30
+
31
+ <script setup lang="ts">
32
+ /**
33
+ * ${e}
34
+ */
35
+ ${c}
36
+
37
+ ${i}
38
+
39
+ // \u7EC4\u4EF6\u903B\u8F91
40
+ </script>
41
+
42
+ <style lang="scss" scoped>
43
+ @import './${t.toLowerCase()}.scss';
44
+ </style>
45
+ `}function j(s){let{name:t,description:e,components:r=[],props:n=[]}=s,o=b(t,e),i=n.length>0?`props: {
46
+ ${n.map(a=>` ${a.name}: {
47
+ type: ${a.type==="string"?"String":a.type==="number"?"Number":a.type==="boolean"?"Boolean":"Object"},
48
+ ${a.required?"required: true,":`default: ${a.defaultValue||"null"},`}
49
+ },`).join(`
50
+ `)}
51
+ },`:"",c=r.length>0?`components: {
52
+ // ${r.join(", ")}
53
+ },`:"";return `${o}
54
+
55
+ <template>
56
+ <div class="${t.toLowerCase()}">
57
+ <!-- ${e} -->
58
+ <slot></slot>
59
+ </div>
60
+ </template>
61
+
62
+ <script>
63
+ /**
64
+ * ${e}
65
+ */
66
+ export default {
67
+ name: '${t}',
68
+ ${c}
69
+ ${i}
70
+ data() {
71
+ return {
72
+ // \u7EC4\u4EF6\u6570\u636E
73
+ };
74
+ },
75
+ methods: {
76
+ // \u7EC4\u4EF6\u65B9\u6CD5
77
+ },
78
+ };
79
+ </script>
80
+
81
+ <style lang="scss" scoped>
82
+ @import './${t.toLowerCase()}.scss';
83
+ </style>
84
+ `}var C=class{generate(t){return t.vueVersion===3?N(t):j(t)}};var P=class{generate(t){let{description:e,includeAjax:r=false}=t;return r?this.generateAjaxCode(e):this.generateBasicCode(e)}generateBasicCode(t){return `/**
85
+ * ${t}
86
+ */
87
+
88
+ /**
89
+ * \u4E3B\u51FD\u6570
90
+ * @returns {Promise<void>}
91
+ */
92
+ async function main() {
93
+ try {
94
+ // TODO: \u5B9E\u73B0\u4E1A\u52A1\u903B\u8F91
95
+ console.log('\u6267\u884C\u5B8C\u6210');
96
+ } catch (error) {
97
+ console.error('\u6267\u884C\u5931\u8D25:', error);
98
+ }
99
+ }
100
+
101
+ // \u6267\u884C
102
+ main();
103
+ `}generateAjaxCode(t){return `/**
104
+ * ${t}
105
+ */
106
+
107
+ /**
108
+ * API \u8BF7\u6C42\u57FA\u7840\u914D\u7F6E
109
+ */
110
+ const API_CONFIG = {
111
+ // \u4F7F\u7528 Config.serverUrl \u4F5C\u4E3A\u57FA\u7840 URL
112
+ baseUrl: Config.serverUrl,
113
+ timeout: 30000,
114
+ };
115
+
116
+ /**
117
+ * \u53D1\u9001 GET \u8BF7\u6C42
118
+ * @param {string} url - \u8BF7\u6C42\u5730\u5740
119
+ * @param {Object} params - \u8BF7\u6C42\u53C2\u6570
120
+ * @returns {Promise<Object>} \u54CD\u5E94\u6570\u636E
121
+ */
122
+ async function getData(url, params = {}) {
123
+ try {
124
+ const response = await Util.ajax({
125
+ url: API_CONFIG.baseUrl + url,
126
+ type: 'GET',
127
+ data: params,
128
+ timeout: API_CONFIG.timeout,
129
+ });
130
+
131
+ return response;
132
+ } catch (error) {
133
+ console.error('GET \u8BF7\u6C42\u5931\u8D25:', error);
134
+ throw error;
135
+ }
136
+ }
137
+
138
+ /**
139
+ * \u53D1\u9001 POST \u8BF7\u6C42
140
+ * @param {string} url - \u8BF7\u6C42\u5730\u5740
141
+ * @param {Object} data - \u8BF7\u6C42\u6570\u636E
142
+ * @returns {Promise<Object>} \u54CD\u5E94\u6570\u636E
143
+ */
144
+ async function postData(url, data = {}) {
145
+ try {
146
+ const response = await Util.ajax({
147
+ url: API_CONFIG.baseUrl + url,
148
+ type: 'POST',
149
+ data: JSON.stringify(data),
150
+ contentType: 'application/json',
151
+ timeout: API_CONFIG.timeout,
152
+ });
153
+
154
+ return response;
155
+ } catch (error) {
156
+ console.error('POST \u8BF7\u6C42\u5931\u8D25:', error);
157
+ throw error;
158
+ }
159
+ }
160
+
161
+ /**
162
+ * \u4E3B\u51FD\u6570
163
+ * @returns {Promise<void>}
164
+ */
165
+ async function main() {
166
+ try {
167
+ // \u793A\u4F8B\uFF1A\u83B7\u53D6\u6570\u636E
168
+ const result = await getData('/api/example');
169
+ console.log('\u83B7\u53D6\u6570\u636E\u6210\u529F:', result);
170
+ } catch (error) {
171
+ console.error('\u6267\u884C\u5931\u8D25:', error);
172
+ }
173
+ }
174
+
175
+ // \u6267\u884C
176
+ main();
177
+ `}};var D=class{generate(t){let{className:e,description:r,useVariables:n=true}=t,o=this.normalizeClassName(e);return `/**
178
+ * ${r}
179
+ * @file ${o}.scss
180
+ */
181
+
182
+ // \u5F15\u5165\u53D8\u91CF\u6587\u4EF6
183
+ @import '@/styles/variables';
184
+
185
+ /**
186
+ * ${r}
187
+ */
188
+ .${o} {
189
+ ${n?this.generateWithVariables():this.generateBasic()}
190
+ }
191
+ `}normalizeClassName(t){return t.replace(/([A-Z])/g,"_$1").replace(/[-\s]+/g,"_").replace(/^_/,"").toLowerCase()}generateWithVariables(){return `// \u5BB9\u5668\u6837\u5F0F
192
+ display: flex;
193
+ flex-direction: column;
194
+ padding: $spacing-md;
195
+ background-color: $color-bg-primary;
196
+
197
+ // \u6807\u9898\u6837\u5F0F
198
+ &__title {
199
+ font-size: $font-size-lg;
200
+ color: $color-text-primary;
201
+ margin-bottom: $spacing-sm;
202
+ }
203
+
204
+ // \u5185\u5BB9\u6837\u5F0F
205
+ &__content {
206
+ font-size: $font-size-base;
207
+ color: $color-text-secondary;
208
+ line-height: $line-height-base;
209
+ }
210
+
211
+ // \u64CD\u4F5C\u533A\u57DF
212
+ &__actions {
213
+ display: flex;
214
+ gap: $spacing-sm;
215
+ margin-top: $spacing-md;
216
+ }`}generateBasic(){return `// \u5BB9\u5668\u6837\u5F0F
217
+ display: flex;
218
+ flex-direction: column;
219
+ padding: 16px;
220
+
221
+ // \u6807\u9898\u6837\u5F0F
222
+ &__title {
223
+ font-size: 18px;
224
+ margin-bottom: 8px;
225
+ }
226
+
227
+ // \u5185\u5BB9\u6837\u5F0F
228
+ &__content {
229
+ font-size: 14px;
230
+ line-height: 1.5;
231
+ }`}};function f(s){return {content:[{type:"text",text:JSON.stringify(s,null,2)}],isError:false}}function l(s,t,e){return {content:[{type:"text",text:JSON.stringify({code:s,message:t,suggestion:e},null,2)}],isError:true}}function $(s){return [{name:"search_docs",description:"\u641C\u7D22 M8 \u6846\u67B6\u6587\u6863\uFF0C\u652F\u6301\u5173\u952E\u8BCD\u641C\u7D22\u548C\u5206\u7C7B\u8FC7\u6EE4\u3002\u53EF\u641C\u7D22 EJS API\u3001UI \u7EC4\u4EF6\u3001Util \u5DE5\u5177\u3001\u7F16\u7801\u89C4\u8303\u7B49\u6587\u6863\u3002",inputSchema:{type:"object",properties:{query:{type:"string",description:"\u641C\u7D22\u5173\u952E\u8BCD"},category:{type:"string",enum:["ejs-api","ui-component","util-tool","typical-case","standard"],description:"\u6587\u6863\u5206\u7C7B\u8FC7\u6EE4\uFF08\u53EF\u9009\uFF09"},limit:{type:"number",description:"\u6700\u5927\u8FD4\u56DE\u6570\u91CF\uFF0C\u9ED8\u8BA4 10"}},required:["query"]}},{name:"get_component_info",description:"\u83B7\u53D6 M8 UI \u7EC4\u4EF6\u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC Props\u3001Events\u3001\u4F7F\u7528\u793A\u4F8B\u7B49\u3002",inputSchema:{type:"object",properties:{componentName:{type:"string",description:"\u7EC4\u4EF6\u540D\u79F0\uFF0C\u5982 em-button, em-field, button, field"}},required:["componentName"]}},{name:"get_api_info",description:"\u83B7\u53D6 EJS \u539F\u751F API \u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u53C2\u6570\u3001\u8FD4\u56DE\u503C\u3001\u5E73\u53F0\u652F\u6301\u3001\u4F7F\u7528\u793A\u4F8B\u7B49\u3002",inputSchema:{type:"object",properties:{module:{type:"string",description:"API \u6A21\u5757\u540D\u79F0\uFF0C\u5982 ui, page, storage, device"},method:{type:"string",description:"API \u65B9\u6CD5\u540D\u79F0\uFF08\u53EF\u9009\uFF09\uFF0C\u5982 toast, alert, open"}},required:["module"]}},{name:"get_util_info",description:"\u83B7\u53D6 M8 Util \u5DE5\u5177\u65B9\u6CD5\u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u53C2\u6570\u3001\u8FD4\u56DE\u503C\u3001\u4F7F\u7528\u793A\u4F8B\u7B49\u3002",inputSchema:{type:"object",properties:{category:{type:"string",description:"Util \u5206\u7C7B\uFF0C\u5982 string, date, base64, ajax"},method:{type:"string",description:"\u65B9\u6CD5\u540D\u79F0\uFF08\u53EF\u9009\uFF09"}},required:["category"]}},{name:"get_coding_standard",description:"\u83B7\u53D6\u7F16\u7801\u89C4\u8303\uFF0C\u5305\u62EC CSS\u3001JavaScript\u3001Vue\u3001\u9879\u76EE\u7ED3\u6784\u7B49\u89C4\u8303\u3002",inputSchema:{type:"object",properties:{type:{type:"string",enum:["css","javascript","vue","project-structure","all"],description:"\u89C4\u8303\u7C7B\u578B"},keyword:{type:"string",description:"\u5177\u4F53\u89C4\u5219\u5173\u952E\u8BCD\uFF08\u53EF\u9009\uFF09"}},required:["type"]}},{name:"generate_code",description:"\u6839\u636E\u9700\u6C42\u751F\u6210\u7B26\u5408 M8 \u6846\u67B6\u89C4\u8303\u7684\u4EE3\u7801\uFF0C\u652F\u6301 Vue \u7EC4\u4EF6\u3001JavaScript\u3001SCSS \u7B49\u3002",inputSchema:{type:"object",properties:{type:{type:"string",enum:["vue-component","javascript","scss","api-call"],description:"\u4EE3\u7801\u7C7B\u578B"},requirement:{type:"string",description:"\u9700\u6C42\u63CF\u8FF0"},vueVersion:{type:"number",enum:[2,3],description:"Vue \u7248\u672C\uFF08\u4EC5 vue-component \u7C7B\u578B\u9700\u8981\uFF09"},components:{type:"array",items:{type:"string"},description:"\u4F7F\u7528\u7684\u7EC4\u4EF6\u5217\u8868"}},required:["type","requirement"]}},{name:"recommend_solution",description:"\u6839\u636E\u9700\u6C42\u667A\u80FD\u63A8\u8350\u5408\u9002\u7684\u7EC4\u4EF6\u3001API \u6216\u5DE5\u5177\u65B9\u6CD5\uFF0C\u4F18\u5148\u63A8\u8350 EJS \u539F\u751F API\u3002",inputSchema:{type:"object",properties:{requirement:{type:"string",description:"\u9700\u6C42\u63CF\u8FF0"},type:{type:"string",enum:["ui","data","native","general"],description:"\u9700\u6C42\u7C7B\u578B\uFF08\u53EF\u9009\uFF09"}},required:["requirement"]}}]}async function _(s,t,e){try{switch(s){case "search_docs":return T(t,e);case "get_component_info":return O(t,e);case "get_api_info":return U(t,e);case "get_util_info":return L(t,e);case "get_coding_standard":return q(t,e);case "generate_code":return G(t);case "recommend_solution":return F(t,e);default:return l("INVALID_PARAMETER",`\u672A\u77E5\u5DE5\u5177: ${s}`)}}catch(r){let n=r instanceof Error?r.message:"\u672A\u77E5\u9519\u8BEF";return l("PARSE_ERROR",n)}}function T(s,t){if(!s.query||s.query.trim().length===0)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: query");let e=t.search(s.query,{category:s.category,limit:s.limit||10});if(e.length===0){let n=t.getAllDocuments().slice(0,5).map(o=>o.title);return f({results:[],message:"\u672A\u627E\u5230\u5339\u914D\u7684\u6587\u6863",suggestions:n})}return f({results:e.map(r=>({id:r.id,title:r.title,category:r.category,score:r.score,excerpt:r.excerpt})),total:e.length})}function O(s,t){if(!s.componentName||s.componentName.trim().length===0)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: componentName");let e=t.getComponentByName(s.componentName);if(!e){let n=t.search(s.componentName,{category:"ui-component",limit:5}).map(o=>o.title);return l("COMPONENT_NOT_FOUND",`\u672A\u627E\u5230\u7EC4\u4EF6: ${s.componentName}`,n.length>0?`\u60A8\u662F\u5426\u5728\u627E: ${n.join(", ")}`:void 0)}return f({name:e.component?.name||e.title,description:e.component?.description||e.summary,props:e.component?.props||[],events:e.component?.events||[],examples:e.component?.examples||[],filePath:e.filePath})}function U(s,t){if(!s.module||s.module.trim().length===0)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: module");let e=t.getEjsApiByModule(s.module);if(!e){let o=t.search(s.module,{category:"ejs-api",limit:5}).map(i=>i.title);return l("API_NOT_FOUND",`\u672A\u627E\u5230 API \u6A21\u5757: ${s.module}`,o.length>0?`\u60A8\u662F\u5426\u5728\u627E: ${o.join(", ")}`:void 0)}let r=e.apis||[];return s.method&&(r=r.filter(n=>n.name.toLowerCase().includes(s.method.toLowerCase()))),f({module:e.module,title:e.title,description:e.summary,apis:r.map(n=>({name:n.name,description:n.description,parameters:n.parameters,returns:n.returns,platformSupport:n.platformSupport,examples:n.examples})),filePath:e.filePath})}function L(s,t){if(!s.category||s.category.trim().length===0)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: category");let e=t.getUtilByCategory(s.category);if(!e){let o=t.search(s.category,{category:"util-tool",limit:5}).map(i=>i.title);return l("DOCUMENT_NOT_FOUND",`\u672A\u627E\u5230 Util \u5206\u7C7B: ${s.category}`,o.length>0?`\u60A8\u662F\u5426\u5728\u627E: ${o.join(", ")}`:void 0)}let r=e.methods||[];return s.method&&(r=r.filter(n=>n.name.toLowerCase().includes(s.method.toLowerCase()))),f({category:e.utilCategory,title:e.title,description:e.summary,methods:r.map(n=>({name:n.name,description:n.description,parameters:n.parameters,returns:n.returns,examples:n.examples})),filePath:e.filePath})}function q(s,t){if(!s.type)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: type");if(s.type==="all"){let n=t.getDocumentsByCategory("standard");return f({standards:n.map(o=>({type:o.standardType,title:o.title,summary:o.summary,rules:o.rules?.slice(0,5)||[],filePath:o.filePath}))})}let e=t.getStandardByType(s.type);if(!e)return l("DOCUMENT_NOT_FOUND",`\u672A\u627E\u5230\u89C4\u8303\u7C7B\u578B: ${s.type}`,"\u53EF\u7528\u7C7B\u578B: css, javascript, vue, project-structure");let r=e.rules||[];if(s.keyword){let n=s.keyword.toLowerCase();r=r.filter(o=>o.name.toLowerCase().includes(n)||o.description.toLowerCase().includes(n));}return f({type:e.standardType,title:e.title,description:e.summary,rules:r.map(n=>({name:n.name,description:n.description,goodExample:n.goodExample,badExample:n.badExample})),filePath:e.filePath})}function G(s){if(!s.type)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: type");if(!s.requirement)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: requirement");try{let t="",e="";switch(s.type){case "vue-component":{let r=new C,n=z(s.requirement);t=r.generate({name:n,description:s.requirement,vueVersion:s.vueVersion||3,components:s.components,props:[]}),e="vue";break}case "javascript":case "api-call":{t=new P().generate({description:s.requirement,includeAjax:s.type==="api-call",useAsync:!0}),e="javascript";break}case "scss":{let r=new D,n=k(s.requirement);t=r.generate({className:n,description:s.requirement,useVariables:!0}),e="scss";break}default:return l("INVALID_PARAMETER",`\u4E0D\u652F\u6301\u7684\u4EE3\u7801\u7C7B\u578B: ${s.type}`)}return f({type:e,code:t,standards:V(s.type)})}catch(t){let e=t instanceof Error?t.message:"\u4EE3\u7801\u751F\u6210\u5931\u8D25";return l("GENERATION_ERROR",e)}}function z(s){let t=s.match(/(?:组件|component)[::]\s*(\w+)/i);return t?t[1]:"MyComponent"}function k(s){let t=s.match(/(?:类名|class)[::]\s*([\w-]+)/i);return t?t[1]:"my-component"}function V(s){switch(s){case "vue-component":return ["\u4F7F\u7528 PascalCase \u547D\u540D\u7EC4\u4EF6\u6587\u4EF6","\u7EC4\u4EF6\u5FC5\u987B\u5305\u542B\u6587\u4EF6\u5934\u6CE8\u91CA","\u6837\u5F0F\u4F7F\u7528\u5916\u90E8 SCSS \u6587\u4EF6","\u4F7F\u7528 scoped \u6837\u5F0F"];case "javascript":case "api-call":return ["\u4F7F\u7528 camelCase \u547D\u540D\u53D8\u91CF\u548C\u51FD\u6570","\u4F7F\u7528 UPPER_SNAKE_CASE \u547D\u540D\u5E38\u91CF","\u4F7F\u7528 async/await \u5904\u7406\u5F02\u6B65","\u4F7F\u7528 Util.ajax \u53D1\u9001\u8BF7\u6C42","\u6DFB\u52A0\u4E2D\u6587\u6CE8\u91CA\u8BF4\u660E"];case "scss":return ["\u4F7F\u7528 SASS \u53D8\u91CF\u66FF\u4EE3\u786C\u7F16\u7801\u989C\u8272","\u7C7B\u540D\u4F7F\u7528\u5C0F\u5199\u4E0B\u5212\u7EBF\u683C\u5F0F","\u9009\u62E9\u5668\u5D4C\u5957\u4E0D\u8D85\u8FC7 3 \u5C42"];default:return []}}function F(s,t){if(!s.requirement)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: requirement");let e=[],r=s.requirement.toLowerCase(),o=["\u539F\u751F","\u5BB9\u5668","native","\u8BBE\u5907","\u76F8\u673A","\u5B9A\u4F4D","\u5B58\u50A8","\u6587\u4EF6"].some(a=>r.includes(a));(o||s.type==="native")&&t.search(s.requirement,{category:"ejs-api",limit:3}).forEach(p=>{e.push({type:"ejs-api",name:p.title,description:p.excerpt,reason:"\u539F\u751F API\uFF0C\u6027\u80FD\u66F4\u597D\uFF0C\u529F\u80FD\u66F4\u5B8C\u6574",priority:o?1:2});}),(s.type==="ui"||!s.type)&&t.search(s.requirement,{category:"ui-component",limit:3}).forEach(p=>{e.push({type:"ui-component",name:p.title,description:p.excerpt,reason:"M8 UI \u7EC4\u4EF6\uFF0C\u5F00\u7BB1\u5373\u7528",priority:o?3:1});}),(s.type==="data"||!s.type)&&t.search(s.requirement,{category:"util-tool",limit:3}).forEach(p=>{e.push({type:"util-tool",name:p.title,description:p.excerpt,reason:"Util \u5DE5\u5177\u65B9\u6CD5\uFF0C\u7B80\u5316\u5F00\u53D1",priority:2});}),e.sort((a,p)=>a.priority-p.priority);let c=t.getDocumentsByCategory("standard").slice(0,2).map(a=>a.title);return f({recommendations:e.slice(0,5).map(a=>({type:a.type,name:a.name,description:a.description,reason:a.reason})),relatedStandards:c,tip:o?"\u68C0\u6D4B\u5230\u539F\u751F\u76F8\u5173\u9700\u6C42\uFF0C\u4F18\u5148\u63A8\u8350 EJS API":"\u6839\u636E\u9700\u6C42\u63A8\u8350\u4EE5\u4E0B\u65B9\u6848"})}var y={form:["\u8868\u5355","form","\u8F93\u5165","input","\u63D0\u4EA4","submit","\u9A8C\u8BC1","validate","\u5B57\u6BB5","field"],list:["\u5217\u8868","list","\u5237\u65B0","refresh","\u52A0\u8F7D\u66F4\u591A","loadmore","\u5206\u9875","pagination"],api:["\u63A5\u53E3","api","\u8BF7\u6C42","request","\u6570\u636E","data","\u83B7\u53D6","fetch","\u63D0\u4EA4"],native:["\u539F\u751F","native","\u5BB9\u5668","\u8BBE\u5907","device","\u76F8\u673A","camera","\u5B9A\u4F4D","location","\u5B58\u50A8","storage"],upload:["\u4E0A\u4F20","upload","\u6587\u4EF6","file","\u56FE\u7247","image","\u9644\u4EF6","attachment"],dateTime:["\u65E5\u671F","date","\u65F6\u95F4","time","\u9009\u62E9","pick","\u65E5\u5386","calendar"]},E=class{prompts=new Map;constructor(){this.registerDefaultPrompts();}getPromptList(){return Array.from(this.prompts.values())}getPrompt(t,e){let r=this.prompts.get(t);if(!r)return this.createErrorMessage(`\u672A\u77E5\u7684\u63D0\u793A\u8BCD: ${t}\u3002\u53EF\u7528\u7684\u63D0\u793A\u8BCD: ${Array.from(this.prompts.keys()).join(", ")}`);let n=r.arguments.filter(o=>o.required&&!e[o.name]).map(o=>o.name);return n.length>0?this.createErrorMessage(`\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: ${n.join(", ")}`):this.buildPromptMessages(t,e)}registerPrompt(t){this.prompts.set(t.name,t);}analyzeRequirement(t){let e=t.toLowerCase();return {hasForm:y.form.some(r=>e.includes(r.toLowerCase())),hasList:y.list.some(r=>e.includes(r.toLowerCase())),hasApi:y.api.some(r=>e.includes(r.toLowerCase())),hasNative:y.native.some(r=>e.includes(r.toLowerCase())),hasUpload:y.upload.some(r=>e.includes(r.toLowerCase())),hasDateTime:y.dateTime.some(r=>e.includes(r.toLowerCase()))}}registerDefaultPrompts(){this.registerPrompt({name:"generate_page",description:"\u751F\u6210\u7B26\u5408 M8 \u6846\u67B6\u89C4\u8303\u7684\u9875\u9762\u4EE3\u7801\uFF0C\u81EA\u52A8\u5E94\u7528\u7F16\u7801\u89C4\u8303\u3002\u53EA\u9700\u8F93\u5165\u9875\u9762\u9700\u6C42\u5373\u53EF\u3002",arguments:[{name:"requirement",description:"\u9875\u9762\u9700\u6C42\u63CF\u8FF0",required:true},{name:"vueVersion",description:"Vue \u7248\u672C\uFF1A2 \u6216 3\uFF0C\u9ED8\u8BA4\u4E3A 3",required:false}]}),this.registerPrompt({name:"generate_component",description:"\u751F\u6210\u7B26\u5408 M8 \u6846\u67B6\u89C4\u8303\u7684 Vue \u7EC4\u4EF6\u4EE3\u7801\u3002",arguments:[{name:"requirement",description:"\u7EC4\u4EF6\u9700\u6C42\u63CF\u8FF0",required:true},{name:"vueVersion",description:"Vue \u7248\u672C\uFF1A2 \u6216 3\uFF0C\u9ED8\u8BA4\u4E3A 3",required:false}]}),this.registerPrompt({name:"generate_form",description:"\u751F\u6210\u7B26\u5408 M8 \u6846\u67B6\u89C4\u8303\u7684\u8868\u5355\u9875\u9762\uFF0C\u5305\u542B\u8868\u5355\u9A8C\u8BC1\u548C\u63D0\u4EA4\u903B\u8F91\u3002",arguments:[{name:"requirement",description:"\u8868\u5355\u9700\u6C42\u63CF\u8FF0",required:true},{name:"vueVersion",description:"Vue \u7248\u672C\uFF1A2 \u6216 3\uFF0C\u9ED8\u8BA4\u4E3A 3",required:false}]}),this.registerPrompt({name:"generate_list",description:"\u751F\u6210\u7B26\u5408 M8 \u6846\u67B6\u89C4\u8303\u7684\u5217\u8868\u9875\u9762\uFF0C\u5305\u542B\u4E0B\u62C9\u5237\u65B0\u548C\u52A0\u8F7D\u66F4\u591A\u3002",arguments:[{name:"requirement",description:"\u5217\u8868\u9700\u6C42\u63CF\u8FF0",required:true},{name:"vueVersion",description:"Vue \u7248\u672C\uFF1A2 \u6216 3\uFF0C\u9ED8\u8BA4\u4E3A 3",required:false}]}),this.registerPrompt({name:"review_code",description:"\u6839\u636E M8 \u6846\u67B6\u7F16\u7801\u89C4\u8303\u5BA1\u67E5\u4EE3\u7801\u3002",arguments:[{name:"code",description:"\u9700\u8981\u5BA1\u67E5\u7684\u4EE3\u7801",required:true},{name:"type",description:"\u4EE3\u7801\u7C7B\u578B\uFF1Avue\u3001javascript\u3001scss",required:false}]});}buildPromptMessages(t,e){let r=this.parseVueVersion(e.vueVersion),n=e.requirement||e.code||"",o=this.analyzeRequirement(n);switch(t){case "generate_page":return this.buildGeneratePageMessages(e.requirement,r,o);case "generate_component":return this.buildGenerateComponentMessages(e.requirement,r,o);case "generate_form":return this.buildGenerateFormMessages(e.requirement,r,o);case "generate_list":return this.buildGenerateListMessages(e.requirement,r,o);case "review_code":return this.buildReviewCodeMessages(e.code,e.type);default:return this.createErrorMessage(`\u672A\u5B9E\u73B0\u7684\u63D0\u793A\u8BCD: ${t}`)}}parseVueVersion(t){return t==="2"?2:3}createErrorMessage(t){return [{role:"user",content:{type:"text",text:t}}]}getCodingStandards(t){return `## \u7F16\u7801\u89C4\u8303
232
+
233
+ ### Vue \u7EC4\u4EF6\u89C4\u8303
234
+ - \u6587\u4EF6\u5934\u6CE8\u91CA\u5FC5\u987B\u5305\u542B\uFF1A@\u4F5C\u8005\u3001@\u521B\u5EFA\u65F6\u95F4\u3001@\u7248\u672C\u3001@\u63CF\u8FF0
235
+ - \u6837\u5F0F\u5FC5\u987B\u5265\u79BB\u5230\u5916\u90E8 .scss \u6587\u4EF6\uFF0C\u901A\u8FC7 @import \u5F15\u5165
236
+ - <style> \u5FC5\u987B\u4F7F\u7528 scoped
237
+ - \u91CD\u6784\u9875\u9762\u7981\u6B62\u6DFB\u52A0 em-header \u5BFC\u822A\u680F
238
+
239
+ ### JavaScript \u89C4\u8303
240
+ - \u53D8\u91CF/\u51FD\u6570\u4F7F\u7528 camelCase \u547D\u540D
241
+ - \u5E38\u91CF\u4F7F\u7528 UPPER_SNAKE_CASE \u547D\u540D
242
+ - \u5FC5\u987B\u4F7F\u7528 Util.ajax \u53D1\u9001\u8BF7\u6C42\uFF0C\u7981\u6B62 fetch/axios
243
+ - \u4F7F\u7528 Config.serverUrl \u62FC\u63A5 API \u5730\u5740
244
+ - Util \u548C Config \u662F\u5168\u5C40\u53D8\u91CF\uFF0C\u7981\u6B62 import
245
+ - \u4F7F\u7528 async/await \u5904\u7406\u5F02\u6B65
246
+ ${t===3?"- \u4F7F\u7528 onLoad((options) => {}) \u83B7\u53D6\u9875\u9762\u53C2\u6570":"- \u4F7F\u7528 Util.getExtraDataByKey() \u83B7\u53D6\u9875\u9762\u53C2\u6570"}
247
+
248
+ ### SCSS \u89C4\u8303
249
+ - \u4F7F\u7528 SASS \u53D8\u91CF\u7BA1\u7406\u989C\u8272\uFF0C\u7981\u6B62\u786C\u7F16\u7801
250
+ - \u7C7B\u540D\u4F7F\u7528\u5C0F\u5199\u82F1\u6587 + \u4E0B\u5212\u7EBF
251
+ - \u9009\u62E9\u5668\u5D4C\u5957\u4E0D\u8D85\u8FC7 3 \u5C42
252
+ - position \u5B9A\u4F4D\u5FC5\u987B\u52A0 z-index
253
+ ${t===3?"- \u6837\u5F0F\u7A7F\u900F\u4F7F\u7528 :deep()":"- \u6837\u5F0F\u7A7F\u900F\u4F7F\u7528 ::v-deep"}`}getVersionDifferenceTable(){return `## M8.3 (Vue2) vs M8.4 (Vue3) \u7248\u672C\u5DEE\u5F02
254
+
255
+ | \u7279\u6027 | M8.3 (Vue2) | M8.4 (Vue3) |
256
+ |------|-------------|-------------|
257
+ | \u7EC4\u4EF6\u8BED\u6CD5 | Options API | Composition API + script setup |
258
+ | \u72B6\u6001\u7BA1\u7406 | Vuex | Pinia |
259
+ | \u9875\u9762\u53C2\u6570 | Util.getExtraDataByKey() | onLoad((options) => {}) |
260
+ | \u6837\u5F0F\u7A7F\u900F | ::v-deep | :deep() |
261
+ | \u54CD\u5E94\u5F0F | data() return | ref() / reactive() |
262
+ | \u751F\u547D\u5468\u671F | created/mounted | onMounted/onUnmounted |`}getApiSelectionGuide(){return `## EJS API vs M8 \u7EC4\u4EF6\u9009\u62E9\u6307\u5357
263
+
264
+ | \u529F\u80FD | \u4F18\u5148\u4F7F\u7528 | \u8BF4\u660E |
265
+ |------|----------|------|
266
+ | Toast \u63D0\u793A | ejs.ui.toast() | \u539F\u751F API |
267
+ | \u786E\u8BA4\u5F39\u7A97 | ejs.ui.confirm() | \u539F\u751F API |
268
+ | \u65E5\u671F\u9009\u62E9 | ejs.ui.pickDate() | \u539F\u751F API |
269
+ | Loading | ejs.ui.showWaiting() | \u539F\u751F API |
270
+ | \u9875\u9762\u8DF3\u8F6C | ejs.page.open() | \u539F\u751F API |
271
+ | \u6309\u94AE | em-button | M8 \u7EC4\u4EF6 |
272
+ | \u8F93\u5165\u6846 | em-field | M8 \u7EC4\u4EF6 |
273
+ | \u5217\u8868\u9879 | em-cell | M8 \u7EC4\u4EF6 |
274
+ | \u4E0B\u62C9\u5237\u65B0 | em-minirefresh | M8 \u7EC4\u4EF6 |
275
+
276
+ **\u539F\u5219\uFF1A\u4EA4\u4E92\u7C7B\u4F18\u5148 EJS API\uFF0CUI \u5C55\u793A\u7C7B\u4F7F\u7528 M8 \u7EC4\u4EF6**`}getVueTemplate(t){return t===3?`\`\`\`vue
277
+ <!--
278
+ * @\u4F5C\u8005: [\u4F5C\u8005\u540D]
279
+ * @\u521B\u5EFA\u65F6\u95F4: YYYY-MM-DD HH:mm:ss
280
+ * @\u7248\u672C: [1.0]
281
+ * @\u63CF\u8FF0: [\u7EC4\u4EF6\u529F\u80FD\u63CF\u8FF0]
282
+ -->
283
+ <template>
284
+ <div class="page_container">
285
+ <!-- \u9875\u9762\u5185\u5BB9 -->
286
+ </div>
287
+ </template>
288
+
289
+ <script setup>
290
+ import { ref, onMounted } from 'vue';
291
+
292
+ const loading = ref(false);
293
+ const dataList = ref([]);
294
+
295
+ onMounted(() => {
296
+ loadData();
297
+ });
298
+
299
+ async function loadData() {
300
+ loading.value = true;
301
+ try {
302
+ const result = await Util.ajax({
303
+ url: Config.serverUrl + '/api/list',
304
+ type: 'POST',
305
+ data: { params: JSON.stringify({}) }
306
+ });
307
+ if (result.status?.code === 1) {
308
+ dataList.value = result.data || [];
309
+ }
310
+ } finally {
311
+ loading.value = false;
312
+ }
313
+ }
314
+ </script>
315
+
316
+ <style lang="scss" scoped>
317
+ @import "./css/page-name.scss";
318
+ </style>
319
+ \`\`\``:`\`\`\`vue
320
+ <!--
321
+ * @\u4F5C\u8005: [\u4F5C\u8005\u540D]
322
+ * @\u521B\u5EFA\u65F6\u95F4: YYYY-MM-DD HH:mm:ss
323
+ * @\u7248\u672C: [1.0]
324
+ * @\u63CF\u8FF0: [\u7EC4\u4EF6\u529F\u80FD\u63CF\u8FF0]
325
+ -->
326
+ <template>
327
+ <div class="page_container">
328
+ <!-- \u9875\u9762\u5185\u5BB9 -->
329
+ </div>
330
+ </template>
331
+
332
+ <script>
333
+ export default {
334
+ name: 'PageName',
335
+ data() {
336
+ return {
337
+ loading: false,
338
+ dataList: []
339
+ };
340
+ },
341
+ created() {
342
+ this.loadData();
343
+ },
344
+ methods: {
345
+ async loadData() {
346
+ this.loading = true;
347
+ try {
348
+ const result = await Util.ajax({
349
+ url: Config.serverUrl + '/api/list',
350
+ type: 'POST',
351
+ data: { params: JSON.stringify({}) }
352
+ });
353
+ if (result.status?.code === 1) {
354
+ this.dataList = result.data || [];
355
+ }
356
+ } finally {
357
+ this.loading = false;
358
+ }
359
+ }
360
+ }
361
+ };
362
+ </script>
363
+
364
+ <style lang="scss" scoped>
365
+ @import "./css/page-name.scss";
366
+ </style>
367
+ \`\`\``}generateContextContent(t){let e=[];return t.hasForm&&e.push(`### \u8868\u5355\u76F8\u5173
368
+ - \u4F7F\u7528 em-field \u7EC4\u4EF6\u6784\u5EFA\u8868\u5355
369
+ - \u8868\u5355\u9A8C\u8BC1\u4F7F\u7528 rules \u5C5E\u6027
370
+ - \u63D0\u4EA4\u524D\u8C03\u7528 validate() \u65B9\u6CD5\u9A8C\u8BC1`),t.hasList&&e.push(`### \u5217\u8868\u76F8\u5173
371
+ - \u4F7F\u7528 em-minirefresh \u5B9E\u73B0\u4E0B\u62C9\u5237\u65B0\u548C\u52A0\u8F7D\u66F4\u591A
372
+ - \u5206\u9875\u53C2\u6570\uFF1ApageNo, pageSize
373
+ - \u5237\u65B0\u56DE\u8C03\uFF1A@refresh, \u52A0\u8F7D\u66F4\u591A\u56DE\u8C03\uFF1A@loadmore`),t.hasApi&&e.push(`### API \u8BF7\u6C42
374
+ - \u4F7F\u7528 Util.ajax \u53D1\u9001\u8BF7\u6C42
375
+ - URL \u4F7F\u7528 Config.serverUrl \u62FC\u63A5
376
+ - \u54CD\u5E94\u5224\u65AD\uFF1Aresult.status?.code === 1`),t.hasNative&&e.push(`### \u539F\u751F\u529F\u80FD
377
+ - \u4F18\u5148\u4F7F\u7528 EJS API
378
+ - Toast: ejs.ui.toast()
379
+ - \u786E\u8BA4\u6846: ejs.ui.confirm()
380
+ - \u65E5\u671F\u9009\u62E9: ejs.ui.pickDate()`),e.length>0?`
381
+ ## \u4E0A\u4E0B\u6587\u76F8\u5173\u5185\u5BB9
382
+ ${e.join(`
383
+
384
+ `)}`:""}buildGeneratePageMessages(t,e,r){let n=`# M8 \u6846\u67B6\u4EE3\u7801\u751F\u6210\u52A9\u624B
385
+
386
+ ## \u5F53\u524D\u9879\u76EE\u7248\u672C
387
+ - \u6846\u67B6\u7248\u672C: M8.${e===3?"4":"3"}
388
+ - Vue \u7248\u672C: Vue${e}
389
+ ${e===3?"- \u7EC4\u4EF6\u8BED\u6CD5: Composition API + script setup":"- \u7EC4\u4EF6\u8BED\u6CD5: Options API"}
390
+
391
+ ${this.getCodingStandards(e)}
392
+
393
+ ${this.getVersionDifferenceTable()}
394
+
395
+ ${this.getApiSelectionGuide()}
396
+
397
+ ## \u4EE3\u7801\u6A21\u677F
398
+ ${this.getVueTemplate(e)}
399
+ ${this.generateContextContent(r)}
400
+
401
+ ## \u91CD\u8981\u63D0\u9192
402
+ - Util \u548C Config \u662F\u5168\u5C40\u53D8\u91CF\uFF0C\u7981\u6B62 import
403
+ - \u6837\u5F0F\u5FC5\u987B\u5265\u79BB\u5230\u5916\u90E8 SCSS \u6587\u4EF6`;return [{role:"user",content:{type:"text",text:`\u8BF7\u6839\u636E\u4EE5\u4E0B\u9700\u6C42\u751F\u6210 M8 \u6846\u67B6\u9875\u9762\u4EE3\u7801\uFF1A
404
+
405
+ **\u9700\u6C42\u63CF\u8FF0**\uFF1A${t}
406
+ **\u9879\u76EE\u7248\u672C**\uFF1AM8.${e===3?"4":"3"} (Vue${e})
407
+
408
+ \u8BF7\u751F\u6210\uFF1A
409
+ 1. \u5B8C\u6574\u7684 .vue \u6587\u4EF6\u4EE3\u7801
410
+ 2. \u5BF9\u5E94\u7684 .scss \u6837\u5F0F\u6587\u4EF6`}},{role:"assistant",content:{type:"text",text:n}}]}buildGenerateComponentMessages(t,e,r){let n=`# M8 \u6846\u67B6\u7EC4\u4EF6\u751F\u6210\u52A9\u624B
411
+
412
+ ## \u5F53\u524D\u9879\u76EE\u7248\u672C
413
+ - \u6846\u67B6\u7248\u672C: M8.${e===3?"4":"3"}
414
+ - Vue \u7248\u672C: Vue${e}
415
+ ${e===3?"- \u7EC4\u4EF6\u8BED\u6CD5: Composition API + script setup":"- \u7EC4\u4EF6\u8BED\u6CD5: Options API"}
416
+
417
+ ${this.getCodingStandards(e)}
418
+
419
+ ${this.getVersionDifferenceTable()}
420
+
421
+ ${this.getApiSelectionGuide()}
422
+
423
+ ## \u4EE3\u7801\u6A21\u677F
424
+ ${this.getVueTemplate(e)}
425
+ ${this.generateContextContent(r)}
426
+
427
+ ## \u91CD\u8981\u63D0\u9192
428
+ - Util \u548C Config \u662F\u5168\u5C40\u53D8\u91CF\uFF0C\u7981\u6B62 import
429
+ - \u7EC4\u4EF6\u9700\u8981\u5B9A\u4E49 Props \u548C Events`;return [{role:"user",content:{type:"text",text:`\u8BF7\u6839\u636E\u4EE5\u4E0B\u9700\u6C42\u751F\u6210 M8 \u6846\u67B6\u7EC4\u4EF6\u4EE3\u7801\uFF1A
430
+
431
+ **\u7EC4\u4EF6\u9700\u6C42**\uFF1A${t}
432
+ **\u9879\u76EE\u7248\u672C**\uFF1AM8.${e===3?"4":"3"} (Vue${e})
433
+
434
+ \u8BF7\u751F\u6210\uFF1A
435
+ 1. \u5B8C\u6574\u7684 .vue \u7EC4\u4EF6\u6587\u4EF6
436
+ 2. Props \u548C Events \u5B9A\u4E49
437
+ 3. \u5BF9\u5E94\u7684 .scss \u6837\u5F0F\u6587\u4EF6`}},{role:"assistant",content:{type:"text",text:n}}]}buildGenerateFormMessages(t,e,r){let n=e===3?`\`\`\`vue
438
+ <template>
439
+ <div class="form_container">
440
+ <em-form ref="formRef" :model="formData" :rules="rules">
441
+ <em-field v-model="formData.name" label="\u59D3\u540D" placeholder="\u8BF7\u8F93\u5165\u59D3\u540D" required />
442
+ <em-field v-model="formData.phone" label="\u624B\u673A\u53F7" placeholder="\u8BF7\u8F93\u5165\u624B\u673A\u53F7" type="tel" />
443
+ </em-form>
444
+ <em-button type="primary" @click="handleSubmit">\u63D0\u4EA4</em-button>
445
+ </div>
446
+ </template>
447
+
448
+ <script setup>
449
+ import { ref } from 'vue';
450
+
451
+ const formRef = ref(null);
452
+ const formData = ref({ name: '', phone: '' });
453
+ const rules = {
454
+ name: [{ required: true, message: '\u8BF7\u8F93\u5165\u59D3\u540D' }],
455
+ phone: [{ pattern: /^1[3-9]\\d{9}$/, message: '\u624B\u673A\u53F7\u683C\u5F0F\u4E0D\u6B63\u786E' }]
456
+ };
457
+
458
+ async function handleSubmit() {
459
+ const valid = await formRef.value?.validate();
460
+ if (!valid) return;
461
+ // \u8868\u5355\u9A8C\u8BC1\u901A\u8FC7\uFF0C\u63D0\u4EA4\u6570\u636E
462
+ const result = await Util.ajax({
463
+ url: Config.serverUrl + '/api/submit',
464
+ type: 'POST',
465
+ data: { params: JSON.stringify(formData.value) }
466
+ });
467
+ if (result.status?.code === 1) {
468
+ ejs.ui.toast({ message: '\u63D0\u4EA4\u6210\u529F' });
469
+ }
470
+ }
471
+ </script>
472
+ \`\`\``:`\`\`\`vue
473
+ <template>
474
+ <div class="form_container">
475
+ <em-form ref="formRef" :model="formData" :rules="rules">
476
+ <em-field v-model="formData.name" label="\u59D3\u540D" placeholder="\u8BF7\u8F93\u5165\u59D3\u540D" required />
477
+ <em-field v-model="formData.phone" label="\u624B\u673A\u53F7" placeholder="\u8BF7\u8F93\u5165\u624B\u673A\u53F7" type="tel" />
478
+ </em-form>
479
+ <em-button type="primary" @click="handleSubmit">\u63D0\u4EA4</em-button>
480
+ </div>
481
+ </template>
482
+
483
+ <script>
484
+ export default {
485
+ data() {
486
+ return {
487
+ formData: { name: '', phone: '' },
488
+ rules: {
489
+ name: [{ required: true, message: '\u8BF7\u8F93\u5165\u59D3\u540D' }],
490
+ phone: [{ pattern: /^1[3-9]\\d{9}$/, message: '\u624B\u673A\u53F7\u683C\u5F0F\u4E0D\u6B63\u786E' }]
491
+ }
492
+ };
493
+ },
494
+ methods: {
495
+ async handleSubmit() {
496
+ const valid = await this.$refs.formRef?.validate();
497
+ if (!valid) return;
498
+ const result = await Util.ajax({
499
+ url: Config.serverUrl + '/api/submit',
500
+ type: 'POST',
501
+ data: { params: JSON.stringify(this.formData) }
502
+ });
503
+ if (result.status?.code === 1) {
504
+ ejs.ui.toast({ message: '\u63D0\u4EA4\u6210\u529F' });
505
+ }
506
+ }
507
+ }
508
+ };
509
+ </script>
510
+ \`\`\``,o=`# M8 \u6846\u67B6\u8868\u5355\u751F\u6210\u52A9\u624B
511
+
512
+ ## \u5F53\u524D\u9879\u76EE\u7248\u672C
513
+ - \u6846\u67B6\u7248\u672C: M8.${e===3?"4":"3"}
514
+ - Vue \u7248\u672C: Vue${e}
515
+
516
+ ${this.getCodingStandards(e)}
517
+
518
+ ${this.getApiSelectionGuide()}
519
+
520
+ ## \u8868\u5355\u6A21\u677F
521
+ ${n}
522
+
523
+ ## \u8868\u5355\u9A8C\u8BC1\u89C4\u5219
524
+ - required: \u5FC5\u586B\u9A8C\u8BC1
525
+ - pattern: \u6B63\u5219\u9A8C\u8BC1
526
+ - validator: \u81EA\u5B9A\u4E49\u9A8C\u8BC1\u51FD\u6570
527
+
528
+ ## \u91CD\u8981\u63D0\u9192
529
+ - \u4F7F\u7528 em-field \u7EC4\u4EF6\u6784\u5EFA\u8868\u5355
530
+ - \u8868\u5355\u9A8C\u8BC1\u4F7F\u7528 rules \u5C5E\u6027
531
+ - Util \u548C Config \u662F\u5168\u5C40\u53D8\u91CF\uFF0C\u7981\u6B62 import`;return [{role:"user",content:{type:"text",text:`\u8BF7\u6839\u636E\u4EE5\u4E0B\u9700\u6C42\u751F\u6210 M8 \u6846\u67B6\u8868\u5355\u9875\u9762\uFF1A
532
+
533
+ **\u8868\u5355\u9700\u6C42**\uFF1A${t}
534
+ **\u9879\u76EE\u7248\u672C**\uFF1AM8.${e===3?"4":"3"} (Vue${e})
535
+
536
+ \u8BF7\u751F\u6210\uFF1A
537
+ 1. \u5B8C\u6574\u7684\u8868\u5355\u9875\u9762 .vue \u6587\u4EF6\uFF08\u4F7F\u7528 em-field\uFF09
538
+ 2. \u8868\u5355\u9A8C\u8BC1\u903B\u8F91
539
+ 3. \u8868\u5355\u63D0\u4EA4\u903B\u8F91
540
+ 4. \u5BF9\u5E94\u7684 .scss \u6837\u5F0F\u6587\u4EF6`}},{role:"assistant",content:{type:"text",text:o}}]}buildGenerateListMessages(t,e,r){let n=e===3?`\`\`\`vue
541
+ <template>
542
+ <div class="list_container">
543
+ <em-minirefresh @refresh="onRefresh" @loadmore="onLoadmore">
544
+ <div class="list_item" v-for="item in dataList" :key="item.id">
545
+ <em-cell :title="item.title" :label="item.desc" is-link @click="goDetail(item)" />
546
+ </div>
547
+ </em-minirefresh>
548
+ </div>
549
+ </template>
550
+
551
+ <script setup>
552
+ import { ref } from 'vue';
553
+
554
+ const dataList = ref([]);
555
+ const pageNo = ref(1);
556
+ const pageSize = 10;
557
+
558
+ async function loadData(isRefresh = false) {
559
+ if (isRefresh) pageNo.value = 1;
560
+ const result = await Util.ajax({
561
+ url: Config.serverUrl + '/api/list',
562
+ type: 'POST',
563
+ data: { params: JSON.stringify({ pageNo: pageNo.value, pageSize }) }
564
+ });
565
+ if (result.status?.code === 1) {
566
+ const list = result.data?.list || [];
567
+ dataList.value = isRefresh ? list : [...dataList.value, ...list];
568
+ pageNo.value++;
569
+ }
570
+ }
571
+
572
+ function onRefresh(done) {
573
+ loadData(true).finally(() => done());
574
+ }
575
+
576
+ function onLoadmore(done) {
577
+ loadData(false).finally(() => done());
578
+ }
579
+
580
+ function goDetail(item) {
581
+ ejs.page.open({ pageUrl: 'detail.html', data: { id: item.id } });
582
+ }
583
+ </script>
584
+ \`\`\``:`\`\`\`vue
585
+ <template>
586
+ <div class="list_container">
587
+ <em-minirefresh @refresh="onRefresh" @loadmore="onLoadmore">
588
+ <div class="list_item" v-for="item in dataList" :key="item.id">
589
+ <em-cell :title="item.title" :label="item.desc" is-link @click="goDetail(item)" />
590
+ </div>
591
+ </em-minirefresh>
592
+ </div>
593
+ </template>
594
+
595
+ <script>
596
+ export default {
597
+ data() {
598
+ return {
599
+ dataList: [],
600
+ pageNo: 1,
601
+ pageSize: 10
602
+ };
603
+ },
604
+ created() {
605
+ this.loadData(true);
606
+ },
607
+ methods: {
608
+ async loadData(isRefresh = false) {
609
+ if (isRefresh) this.pageNo = 1;
610
+ const result = await Util.ajax({
611
+ url: Config.serverUrl + '/api/list',
612
+ type: 'POST',
613
+ data: { params: JSON.stringify({ pageNo: this.pageNo, pageSize: this.pageSize }) }
614
+ });
615
+ if (result.status?.code === 1) {
616
+ const list = result.data?.list || [];
617
+ this.dataList = isRefresh ? list : [...this.dataList, ...list];
618
+ this.pageNo++;
619
+ }
620
+ },
621
+ onRefresh(done) {
622
+ this.loadData(true).finally(() => done());
623
+ },
624
+ onLoadmore(done) {
625
+ this.loadData(false).finally(() => done());
626
+ },
627
+ goDetail(item) {
628
+ ejs.page.open({ pageUrl: 'detail.html', data: { id: item.id } });
629
+ }
630
+ }
631
+ };
632
+ </script>
633
+ \`\`\``,o=`# M8 \u6846\u67B6\u5217\u8868\u751F\u6210\u52A9\u624B
634
+
635
+ ## \u5F53\u524D\u9879\u76EE\u7248\u672C
636
+ - \u6846\u67B6\u7248\u672C: M8.${e===3?"4":"3"}
637
+ - Vue \u7248\u672C: Vue${e}
638
+
639
+ ${this.getCodingStandards(e)}
640
+
641
+ ${this.getApiSelectionGuide()}
642
+
643
+ ## \u5217\u8868\u6A21\u677F\uFF08\u4F7F\u7528 em-minirefresh \u4E0B\u62C9\u5237\u65B0\uFF09
644
+ ${n}
645
+
646
+ ## \u5217\u8868\u529F\u80FD\u8BF4\u660E
647
+ - em-minirefresh: \u4E0B\u62C9\u5237\u65B0\u548C\u52A0\u8F7D\u66F4\u591A\u7EC4\u4EF6
648
+ - @refresh: \u4E0B\u62C9\u5237\u65B0\u56DE\u8C03
649
+ - @loadmore: \u52A0\u8F7D\u66F4\u591A\u56DE\u8C03
650
+ - \u5206\u9875\u53C2\u6570: pageNo, pageSize
651
+
652
+ ## \u91CD\u8981\u63D0\u9192
653
+ - \u4F7F\u7528 em-minirefresh \u5B9E\u73B0\u4E0B\u62C9\u5237\u65B0
654
+ - Util \u548C Config \u662F\u5168\u5C40\u53D8\u91CF\uFF0C\u7981\u6B62 import`;return [{role:"user",content:{type:"text",text:`\u8BF7\u6839\u636E\u4EE5\u4E0B\u9700\u6C42\u751F\u6210 M8 \u6846\u67B6\u5217\u8868\u9875\u9762\uFF1A
655
+
656
+ **\u5217\u8868\u9700\u6C42**\uFF1A${t}
657
+ **\u9879\u76EE\u7248\u672C**\uFF1AM8.${e===3?"4":"3"} (Vue${e})
658
+
659
+ \u8BF7\u751F\u6210\uFF1A
660
+ 1. \u5B8C\u6574\u7684\u5217\u8868\u9875\u9762 .vue \u6587\u4EF6\uFF08\u4F7F\u7528 em-minirefresh\uFF09
661
+ 2. \u4E0B\u62C9\u5237\u65B0\u548C\u52A0\u8F7D\u66F4\u591A\u529F\u80FD
662
+ 3. \u5BF9\u5E94\u7684 .scss \u6837\u5F0F\u6587\u4EF6`}},{role:"assistant",content:{type:"text",text:o}}]}buildReviewCodeMessages(t,e){return [{role:"user",content:{type:"text",text:`\u8BF7\u6839\u636E M8 \u6846\u67B6\u7F16\u7801\u89C4\u8303\u5BA1\u67E5\u4EE5\u4E0B\u4EE3\u7801\uFF1A
663
+
664
+ **\u4EE3\u7801\u7C7B\u578B**\uFF1A${e||"\u81EA\u52A8\u68C0\u6D4B"}
665
+
666
+ \`\`\`
667
+ ${t}
668
+ \`\`\`
669
+
670
+ \u8BF7\u6307\u51FA\uFF1A
671
+ 1. \u4E0D\u7B26\u5408\u89C4\u8303\u7684\u5730\u65B9
672
+ 2. \u5177\u4F53\u7684\u4FEE\u6539\u5EFA\u8BAE
673
+ 3. \u4FEE\u6539\u540E\u7684\u4EE3\u7801\u793A\u4F8B`}},{role:"assistant",content:{type:"text",text:`# M8 \u6846\u67B6\u4EE3\u7801\u5BA1\u67E5\u52A9\u624B
674
+
675
+ ## \u5BA1\u67E5\u89C4\u8303
676
+
677
+ ### Vue \u7EC4\u4EF6\u5BA1\u67E5\u8981\u70B9
678
+ - \u6587\u4EF6\u5934\u6CE8\u91CA\u662F\u5426\u5B8C\u6574\uFF08@\u4F5C\u8005\u3001@\u521B\u5EFA\u65F6\u95F4\u3001@\u7248\u672C\u3001@\u63CF\u8FF0\uFF09
679
+ - \u6837\u5F0F\u662F\u5426\u5265\u79BB\u5230\u5916\u90E8 SCSS \u6587\u4EF6
680
+ - style \u6807\u7B7E\u662F\u5426\u4F7F\u7528 scoped
681
+ - \u662F\u5426\u6709\u4E0D\u5FC5\u8981\u7684 em-header \u5BFC\u822A\u680F
682
+ - \u6837\u5F0F\u5206\u79BB\u662F\u5426\u6B63\u786E
683
+
684
+ ### JavaScript \u5BA1\u67E5\u8981\u70B9
685
+ - \u547D\u540D\u89C4\u8303\uFF1A\u53D8\u91CF/\u51FD\u6570 camelCase\uFF0C\u5E38\u91CF UPPER_SNAKE_CASE
686
+ - \u662F\u5426\u4F7F\u7528 Util.ajax \u53D1\u9001\u8BF7\u6C42\uFF08\u7981\u6B62 fetch/axios\uFF09
687
+ - \u662F\u5426\u6B63\u786E\u4F7F\u7528 async/await
688
+ - Util \u548C Config \u662F\u5426\u88AB\u9519\u8BEF import
689
+ - \u65E5\u5FD7\u662F\u5426\u5305\u542B\u63CF\u8FF0\u4FE1\u606F
690
+
691
+ ### SCSS \u5BA1\u67E5\u8981\u70B9
692
+ - \u662F\u5426\u4F7F\u7528 SASS \u53D8\u91CF\u7BA1\u7406\u989C\u8272
693
+ - \u7C7B\u540D\u662F\u5426\u4F7F\u7528\u5C0F\u5199\u82F1\u6587 + \u4E0B\u5212\u7EBF
694
+ - \u9009\u62E9\u5668\u5D4C\u5957\u662F\u5426\u8D85\u8FC7 3 \u5C42
695
+ - position \u5B9A\u4F4D\u662F\u5426\u6709 z-index
696
+
697
+ ## \u5BA1\u67E5\u8F93\u51FA\u683C\u5F0F
698
+ 1. \u95EE\u9898\u5217\u8868\uFF08\u6309\u4E25\u91CD\u7A0B\u5EA6\u6392\u5E8F\uFF09
699
+ 2. \u5177\u4F53\u4FEE\u6539\u5EFA\u8BAE
700
+ 3. \u4FEE\u6539\u540E\u7684\u4EE3\u7801\u793A\u4F8B`}}]}};var R=class{server;indexer;promptManager;tools=[];isRunning=false;constructor(){this.server=new Server({name:"m8-mcp-server",version:"1.0.0"},{capabilities:{tools:{},prompts:{}}}),this.indexer=new v,this.promptManager=new E;}async start(){if(this.isRunning)return;await this.indexer.initialize(),this.tools=$(this.indexer),this.setupHandlers();let t=new StdioServerTransport;await this.server.connect(t),this.isRunning=true,console.error("M8 MCP Server \u5DF2\u542F\u52A8");}async stop(){this.isRunning&&(await this.server.close(),this.isRunning=false,console.error("M8 MCP Server \u5DF2\u505C\u6B62"));}setupHandlers(){this.server.setRequestHandler(ListToolsRequestSchema,async()=>({tools:this.tools.map(t=>({name:t.name,description:t.description,inputSchema:t.inputSchema}))})),this.server.setRequestHandler(CallToolRequestSchema,async t=>{let{name:e,arguments:r}=t.params,n=await _(e,r,this.indexer);return {content:n.content,isError:n.isError}}),this.server.setRequestHandler(ListPromptsRequestSchema,async()=>({prompts:this.promptManager.getPromptList()})),this.server.setRequestHandler(GetPromptRequestSchema,async t=>{let{name:e,arguments:r}=t.params;return {messages:this.promptManager.getPrompt(e,r||{})}});}};var Q=(p=>(p.INVALID_PARAMETER="INVALID_PARAMETER",p.MISSING_REQUIRED_FIELD="MISSING_REQUIRED_FIELD",p.INVALID_CATEGORY="INVALID_CATEGORY",p.DOCUMENT_NOT_FOUND="DOCUMENT_NOT_FOUND",p.COMPONENT_NOT_FOUND="COMPONENT_NOT_FOUND",p.API_NOT_FOUND="API_NOT_FOUND",p.INDEX_ERROR="INDEX_ERROR",p.PARSE_ERROR="PARSE_ERROR",p.GENERATION_ERROR="GENERATION_ERROR",p))(Q||{});async function Z(){let s=new R;process.on("SIGINT",async()=>{await s.stop(),process.exit(0);}),process.on("SIGTERM",async()=>{await s.stop(),process.exit(0);});try{await s.start();}catch(t){console.error("MCP Server \u542F\u52A8\u5931\u8D25:",t),process.exit(1);}}Z();export{Q as ErrorCode,R as M8McpServer};