@creatoria/miniapp-mcp 0.1.3 → 0.2.2

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 (414) hide show
  1. package/README.md +131 -66
  2. package/dist/app/cli/index.d.ts +6 -0
  3. package/dist/app/cli/index.d.ts.map +1 -0
  4. package/dist/app/cli/index.js +6 -0
  5. package/dist/app/cli/index.js.map +1 -0
  6. package/dist/app/index.d.ts +6 -0
  7. package/dist/app/index.d.ts.map +1 -0
  8. package/dist/app/index.js +6 -0
  9. package/dist/app/index.js.map +1 -0
  10. package/dist/app/server/index.d.ts +7 -0
  11. package/dist/app/server/index.d.ts.map +1 -0
  12. package/dist/app/server/index.js +6 -0
  13. package/dist/app/server/index.js.map +1 -0
  14. package/dist/capabilities/assert/handlers/assert-handlers.d.ts +98 -0
  15. package/dist/capabilities/assert/handlers/assert-handlers.d.ts.map +1 -0
  16. package/dist/capabilities/assert/handlers/assert-handlers.js +179 -0
  17. package/dist/capabilities/assert/handlers/assert-handlers.js.map +1 -0
  18. package/dist/capabilities/assert/handlers/index.d.ts +7 -0
  19. package/dist/capabilities/assert/handlers/index.d.ts.map +1 -0
  20. package/dist/capabilities/assert/handlers/index.js +7 -0
  21. package/dist/capabilities/assert/handlers/index.js.map +1 -0
  22. package/dist/capabilities/assert/index.d.ts +15 -0
  23. package/dist/capabilities/assert/index.d.ts.map +1 -0
  24. package/dist/capabilities/assert/index.js +90 -0
  25. package/dist/capabilities/assert/index.js.map +1 -0
  26. package/dist/capabilities/assert/schemas/index.d.ts +101 -0
  27. package/dist/capabilities/assert/schemas/index.d.ts.map +1 -0
  28. package/dist/capabilities/assert/schemas/index.js +62 -0
  29. package/dist/capabilities/assert/schemas/index.js.map +1 -0
  30. package/dist/capabilities/automator/handlers/close.d.ts +18 -0
  31. package/dist/capabilities/automator/handlers/close.d.ts.map +1 -0
  32. package/dist/capabilities/automator/handlers/close.js +45 -0
  33. package/dist/capabilities/automator/handlers/close.js.map +1 -0
  34. package/dist/capabilities/automator/handlers/connect.d.ts +24 -0
  35. package/dist/capabilities/automator/handlers/connect.d.ts.map +1 -0
  36. package/dist/capabilities/automator/handlers/connect.js +51 -0
  37. package/dist/capabilities/automator/handlers/connect.js.map +1 -0
  38. package/dist/capabilities/automator/handlers/disconnect.d.ts +16 -0
  39. package/dist/capabilities/automator/handlers/disconnect.d.ts.map +1 -0
  40. package/dist/capabilities/automator/handlers/disconnect.js +44 -0
  41. package/dist/capabilities/automator/handlers/disconnect.js.map +1 -0
  42. package/dist/capabilities/automator/handlers/index.d.ts +8 -0
  43. package/dist/capabilities/automator/handlers/index.d.ts.map +1 -0
  44. package/dist/capabilities/automator/handlers/index.js +8 -0
  45. package/dist/capabilities/automator/handlers/index.js.map +1 -0
  46. package/dist/capabilities/automator/handlers/launch.d.ts +25 -0
  47. package/dist/capabilities/automator/handlers/launch.d.ts.map +1 -0
  48. package/dist/capabilities/automator/handlers/launch.js +61 -0
  49. package/dist/capabilities/automator/handlers/launch.js.map +1 -0
  50. package/dist/capabilities/automator/index.d.ts +15 -0
  51. package/dist/capabilities/automator/index.d.ts.map +1 -0
  52. package/dist/capabilities/automator/index.js +55 -0
  53. package/dist/capabilities/automator/index.js.map +1 -0
  54. package/dist/capabilities/automator/schemas/close.d.ts +5 -0
  55. package/dist/capabilities/automator/schemas/close.d.ts.map +1 -0
  56. package/dist/capabilities/automator/schemas/close.js +11 -0
  57. package/dist/capabilities/automator/schemas/close.js.map +1 -0
  58. package/dist/capabilities/automator/schemas/connect.d.ts +11 -0
  59. package/dist/capabilities/automator/schemas/connect.d.ts.map +1 -0
  60. package/dist/capabilities/automator/schemas/connect.js +19 -0
  61. package/dist/capabilities/automator/schemas/connect.js.map +1 -0
  62. package/dist/capabilities/automator/schemas/disconnect.d.ts +5 -0
  63. package/dist/capabilities/automator/schemas/disconnect.d.ts.map +1 -0
  64. package/dist/capabilities/automator/schemas/disconnect.js +11 -0
  65. package/dist/capabilities/automator/schemas/disconnect.js.map +1 -0
  66. package/dist/capabilities/automator/schemas/index.d.ts +9 -0
  67. package/dist/capabilities/automator/schemas/index.d.ts.map +1 -0
  68. package/dist/capabilities/automator/schemas/index.js +14 -0
  69. package/dist/capabilities/automator/schemas/index.js.map +1 -0
  70. package/dist/capabilities/automator/schemas/launch.d.ts +17 -0
  71. package/dist/capabilities/automator/schemas/launch.d.ts.map +1 -0
  72. package/dist/capabilities/automator/schemas/launch.js +26 -0
  73. package/dist/capabilities/automator/schemas/launch.js.map +1 -0
  74. package/dist/capabilities/element/handlers/element-handlers.d.ts +212 -0
  75. package/dist/capabilities/element/handlers/element-handlers.d.ts.map +1 -0
  76. package/dist/capabilities/element/handlers/element-handlers.js +383 -0
  77. package/dist/capabilities/element/handlers/element-handlers.js.map +1 -0
  78. package/dist/capabilities/element/handlers/index.d.ts +7 -0
  79. package/dist/capabilities/element/handlers/index.d.ts.map +1 -0
  80. package/dist/capabilities/element/handlers/index.js +27 -0
  81. package/dist/capabilities/element/handlers/index.js.map +1 -0
  82. package/dist/capabilities/element/index.d.ts +20 -0
  83. package/dist/capabilities/element/index.d.ts.map +1 -0
  84. package/dist/capabilities/element/index.js +199 -0
  85. package/dist/capabilities/element/index.js.map +1 -0
  86. package/dist/capabilities/element/schemas/index.d.ts +325 -0
  87. package/dist/capabilities/element/schemas/index.d.ts.map +1 -0
  88. package/dist/capabilities/element/schemas/index.js +168 -0
  89. package/dist/capabilities/element/schemas/index.js.map +1 -0
  90. package/dist/capabilities/index.d.ts +34 -0
  91. package/dist/capabilities/index.d.ts.map +1 -0
  92. package/dist/capabilities/index.js +40 -0
  93. package/dist/capabilities/index.js.map +1 -0
  94. package/dist/capabilities/loader.d.ts +61 -0
  95. package/dist/capabilities/loader.d.ts.map +1 -0
  96. package/dist/capabilities/loader.js +164 -0
  97. package/dist/capabilities/loader.js.map +1 -0
  98. package/dist/capabilities/miniprogram/handlers/call-wx.d.ts +24 -0
  99. package/dist/capabilities/miniprogram/handlers/call-wx.d.ts.map +1 -0
  100. package/dist/capabilities/miniprogram/handlers/call-wx.js +37 -0
  101. package/dist/capabilities/miniprogram/handlers/call-wx.js.map +1 -0
  102. package/dist/capabilities/miniprogram/handlers/evaluate.d.ts +32 -0
  103. package/dist/capabilities/miniprogram/handlers/evaluate.d.ts.map +1 -0
  104. package/dist/capabilities/miniprogram/handlers/evaluate.js +51 -0
  105. package/dist/capabilities/miniprogram/handlers/evaluate.js.map +1 -0
  106. package/dist/capabilities/miniprogram/handlers/index.d.ts +12 -0
  107. package/dist/capabilities/miniprogram/handlers/index.d.ts.map +1 -0
  108. package/dist/capabilities/miniprogram/handlers/index.js +12 -0
  109. package/dist/capabilities/miniprogram/handlers/index.js.map +1 -0
  110. package/dist/capabilities/miniprogram/handlers/navigate.d.ts +26 -0
  111. package/dist/capabilities/miniprogram/handlers/navigate.d.ts.map +1 -0
  112. package/dist/capabilities/miniprogram/handlers/navigate.js +56 -0
  113. package/dist/capabilities/miniprogram/handlers/navigate.js.map +1 -0
  114. package/dist/capabilities/miniprogram/handlers/page-stack.d.ts +20 -0
  115. package/dist/capabilities/miniprogram/handlers/page-stack.d.ts.map +1 -0
  116. package/dist/capabilities/miniprogram/handlers/page-stack.js +37 -0
  117. package/dist/capabilities/miniprogram/handlers/page-stack.js.map +1 -0
  118. package/dist/capabilities/miniprogram/handlers/screenshot.d.ts +33 -0
  119. package/dist/capabilities/miniprogram/handlers/screenshot.d.ts.map +1 -0
  120. package/dist/capabilities/miniprogram/handlers/screenshot.js +132 -0
  121. package/dist/capabilities/miniprogram/handlers/screenshot.js.map +1 -0
  122. package/dist/capabilities/miniprogram/handlers/system-info.d.ts +17 -0
  123. package/dist/capabilities/miniprogram/handlers/system-info.d.ts.map +1 -0
  124. package/dist/capabilities/miniprogram/handlers/system-info.js +31 -0
  125. package/dist/capabilities/miniprogram/handlers/system-info.js.map +1 -0
  126. package/dist/capabilities/miniprogram/index.d.ts +15 -0
  127. package/dist/capabilities/miniprogram/index.d.ts.map +1 -0
  128. package/dist/capabilities/miniprogram/index.js +69 -0
  129. package/dist/capabilities/miniprogram/index.js.map +1 -0
  130. package/dist/capabilities/miniprogram/schemas/call-wx.d.ts +15 -0
  131. package/dist/capabilities/miniprogram/schemas/call-wx.d.ts.map +1 -0
  132. package/dist/capabilities/miniprogram/schemas/call-wx.js +11 -0
  133. package/dist/capabilities/miniprogram/schemas/call-wx.js.map +1 -0
  134. package/dist/capabilities/miniprogram/schemas/evaluate.d.ts +15 -0
  135. package/dist/capabilities/miniprogram/schemas/evaluate.d.ts.map +1 -0
  136. package/dist/capabilities/miniprogram/schemas/evaluate.js +11 -0
  137. package/dist/capabilities/miniprogram/schemas/evaluate.js.map +1 -0
  138. package/dist/capabilities/miniprogram/schemas/index.d.ts +10 -0
  139. package/dist/capabilities/miniprogram/schemas/index.d.ts.map +1 -0
  140. package/dist/capabilities/miniprogram/schemas/index.js +10 -0
  141. package/dist/capabilities/miniprogram/schemas/index.js.map +1 -0
  142. package/dist/capabilities/miniprogram/schemas/navigate.d.ts +18 -0
  143. package/dist/capabilities/miniprogram/schemas/navigate.d.ts.map +1 -0
  144. package/dist/capabilities/miniprogram/schemas/navigate.js +22 -0
  145. package/dist/capabilities/miniprogram/schemas/navigate.js.map +1 -0
  146. package/dist/capabilities/miniprogram/schemas/page-stack.d.ts +6 -0
  147. package/dist/capabilities/miniprogram/schemas/page-stack.d.ts.map +1 -0
  148. package/dist/capabilities/miniprogram/schemas/page-stack.js +6 -0
  149. package/dist/capabilities/miniprogram/schemas/page-stack.js.map +1 -0
  150. package/dist/capabilities/miniprogram/schemas/screenshot.d.ts +18 -0
  151. package/dist/capabilities/miniprogram/schemas/screenshot.d.ts.map +1 -0
  152. package/dist/capabilities/miniprogram/schemas/screenshot.js +21 -0
  153. package/dist/capabilities/miniprogram/schemas/screenshot.js.map +1 -0
  154. package/dist/capabilities/miniprogram/schemas/system-info.d.ts +6 -0
  155. package/dist/capabilities/miniprogram/schemas/system-info.d.ts.map +1 -0
  156. package/dist/capabilities/miniprogram/schemas/system-info.js +6 -0
  157. package/dist/capabilities/miniprogram/schemas/system-info.js.map +1 -0
  158. package/dist/capabilities/network/handlers/index.d.ts +7 -0
  159. package/dist/capabilities/network/handlers/index.d.ts.map +1 -0
  160. package/dist/capabilities/network/handlers/index.js +7 -0
  161. package/dist/capabilities/network/handlers/index.js.map +1 -0
  162. package/dist/capabilities/network/handlers/network-handlers.d.ts +53 -0
  163. package/dist/capabilities/network/handlers/network-handlers.d.ts.map +1 -0
  164. package/dist/capabilities/network/handlers/network-handlers.js +127 -0
  165. package/dist/capabilities/network/handlers/network-handlers.js.map +1 -0
  166. package/dist/capabilities/network/index.d.ts +15 -0
  167. package/dist/capabilities/network/index.d.ts.map +1 -0
  168. package/dist/capabilities/network/index.js +69 -0
  169. package/dist/capabilities/network/index.js.map +1 -0
  170. package/dist/capabilities/network/schemas/index.d.ts +53 -0
  171. package/dist/capabilities/network/schemas/index.d.ts.map +1 -0
  172. package/dist/capabilities/network/schemas/index.js +33 -0
  173. package/dist/capabilities/network/schemas/index.js.map +1 -0
  174. package/dist/capabilities/page/handlers/index.d.ts +7 -0
  175. package/dist/capabilities/page/handlers/index.d.ts.map +1 -0
  176. package/dist/capabilities/page/handlers/index.js +7 -0
  177. package/dist/capabilities/page/handlers/index.js.map +1 -0
  178. package/dist/capabilities/page/handlers/page-handlers.d.ts +165 -0
  179. package/dist/capabilities/page/handlers/page-handlers.d.ts.map +1 -0
  180. package/dist/capabilities/page/handlers/page-handlers.js +258 -0
  181. package/dist/capabilities/page/handlers/page-handlers.js.map +1 -0
  182. package/dist/capabilities/page/index.d.ts +15 -0
  183. package/dist/capabilities/page/index.d.ts.map +1 -0
  184. package/dist/capabilities/page/index.js +83 -0
  185. package/dist/capabilities/page/index.js.map +1 -0
  186. package/dist/capabilities/page/schemas/index.d.ts +91 -0
  187. package/dist/capabilities/page/schemas/index.d.ts.map +1 -0
  188. package/dist/capabilities/page/schemas/index.js +55 -0
  189. package/dist/capabilities/page/schemas/index.js.map +1 -0
  190. package/dist/capabilities/record/handlers/index.d.ts +7 -0
  191. package/dist/capabilities/record/handlers/index.d.ts.map +1 -0
  192. package/dist/capabilities/record/handlers/index.js +7 -0
  193. package/dist/capabilities/record/handlers/index.js.map +1 -0
  194. package/dist/capabilities/record/handlers/record-handlers.d.ts +76 -0
  195. package/dist/capabilities/record/handlers/record-handlers.d.ts.map +1 -0
  196. package/dist/capabilities/record/handlers/record-handlers.js +255 -0
  197. package/dist/capabilities/record/handlers/record-handlers.js.map +1 -0
  198. package/dist/capabilities/record/index.d.ts +15 -0
  199. package/dist/capabilities/record/index.d.ts.map +1 -0
  200. package/dist/capabilities/record/index.js +69 -0
  201. package/dist/capabilities/record/index.js.map +1 -0
  202. package/dist/capabilities/record/schemas/index.d.ts +47 -0
  203. package/dist/capabilities/record/schemas/index.d.ts.map +1 -0
  204. package/dist/capabilities/record/schemas/index.js +33 -0
  205. package/dist/capabilities/record/schemas/index.js.map +1 -0
  206. package/dist/capabilities/registry.d.ts +138 -0
  207. package/dist/capabilities/registry.d.ts.map +1 -0
  208. package/dist/capabilities/registry.js +261 -0
  209. package/dist/capabilities/registry.js.map +1 -0
  210. package/dist/capabilities/schema-registry.d.ts +4 -0
  211. package/dist/capabilities/schema-registry.d.ts.map +1 -0
  212. package/dist/capabilities/schema-registry.js +18 -0
  213. package/dist/capabilities/schema-registry.js.map +1 -0
  214. package/dist/capabilities/schema-types.d.ts +22 -0
  215. package/dist/capabilities/schema-types.d.ts.map +1 -0
  216. package/dist/capabilities/schema-types.js +2 -0
  217. package/dist/capabilities/schema-types.js.map +1 -0
  218. package/dist/capabilities/snapshot/handlers/index.d.ts +7 -0
  219. package/dist/capabilities/snapshot/handlers/index.d.ts.map +1 -0
  220. package/dist/capabilities/snapshot/handlers/index.js +7 -0
  221. package/dist/capabilities/snapshot/handlers/index.js.map +1 -0
  222. package/dist/capabilities/snapshot/handlers/snapshot-handlers.d.ts +75 -0
  223. package/dist/capabilities/snapshot/handlers/snapshot-handlers.d.ts.map +1 -0
  224. package/dist/capabilities/snapshot/handlers/snapshot-handlers.js +201 -0
  225. package/dist/capabilities/snapshot/handlers/snapshot-handlers.js.map +1 -0
  226. package/dist/capabilities/snapshot/index.d.ts +15 -0
  227. package/dist/capabilities/snapshot/index.d.ts.map +1 -0
  228. package/dist/capabilities/snapshot/index.js +48 -0
  229. package/dist/capabilities/snapshot/index.js.map +1 -0
  230. package/dist/capabilities/snapshot/schemas/index.d.ts +47 -0
  231. package/dist/capabilities/snapshot/schemas/index.d.ts.map +1 -0
  232. package/dist/capabilities/snapshot/schemas/index.js +28 -0
  233. package/dist/capabilities/snapshot/schemas/index.js.map +1 -0
  234. package/dist/config/loader.js +1 -1
  235. package/dist/config/loader.js.map +1 -1
  236. package/dist/core/element-ref.d.ts +1 -43
  237. package/dist/core/element-ref.d.ts.map +1 -1
  238. package/dist/core/element-ref.js +1 -212
  239. package/dist/core/element-ref.js.map +1 -1
  240. package/dist/core/logger.d.ts +1 -54
  241. package/dist/core/logger.d.ts.map +1 -1
  242. package/dist/core/logger.js +1 -377
  243. package/dist/core/logger.js.map +1 -1
  244. package/dist/core/output.d.ts +1 -20
  245. package/dist/core/output.d.ts.map +1 -1
  246. package/dist/core/output.js +1 -55
  247. package/dist/core/output.js.map +1 -1
  248. package/dist/core/report-generator.d.ts +1 -23
  249. package/dist/core/report-generator.d.ts.map +1 -1
  250. package/dist/core/report-generator.js +1 -211
  251. package/dist/core/report-generator.js.map +1 -1
  252. package/dist/core/session.d.ts +2 -82
  253. package/dist/core/session.d.ts.map +1 -1
  254. package/dist/core/session.js +2 -305
  255. package/dist/core/session.js.map +1 -1
  256. package/dist/core/timeout.d.ts +1 -48
  257. package/dist/core/timeout.d.ts.map +1 -1
  258. package/dist/core/timeout.js +1 -66
  259. package/dist/core/timeout.js.map +1 -1
  260. package/dist/core/tool-logger.d.ts +1 -82
  261. package/dist/core/tool-logger.d.ts.map +1 -1
  262. package/dist/core/tool-logger.js +1 -452
  263. package/dist/core/tool-logger.js.map +1 -1
  264. package/dist/core/validation.d.ts +1 -38
  265. package/dist/core/validation.d.ts.map +1 -1
  266. package/dist/core/validation.js +1 -92
  267. package/dist/core/validation.js.map +1 -1
  268. package/dist/runtime/element/element-ref.d.ts +44 -0
  269. package/dist/runtime/element/element-ref.d.ts.map +1 -0
  270. package/dist/runtime/element/element-ref.js +214 -0
  271. package/dist/runtime/element/element-ref.js.map +1 -0
  272. package/dist/runtime/element/index.d.ts +2 -0
  273. package/dist/runtime/element/index.d.ts.map +1 -0
  274. package/dist/runtime/element/index.js +2 -0
  275. package/dist/runtime/element/index.js.map +1 -0
  276. package/dist/runtime/index.d.ts +11 -0
  277. package/dist/runtime/index.d.ts.map +1 -0
  278. package/dist/runtime/index.js +11 -0
  279. package/dist/runtime/index.js.map +1 -0
  280. package/dist/runtime/logging/index.d.ts +3 -0
  281. package/dist/runtime/logging/index.d.ts.map +1 -0
  282. package/dist/runtime/logging/index.js +3 -0
  283. package/dist/runtime/logging/index.js.map +1 -0
  284. package/dist/runtime/logging/logger.d.ts +55 -0
  285. package/dist/runtime/logging/logger.d.ts.map +1 -0
  286. package/dist/runtime/logging/logger.js +379 -0
  287. package/dist/runtime/logging/logger.js.map +1 -0
  288. package/dist/runtime/logging/tool-logger.d.ts +83 -0
  289. package/dist/runtime/logging/tool-logger.d.ts.map +1 -0
  290. package/dist/runtime/logging/tool-logger.js +454 -0
  291. package/dist/runtime/logging/tool-logger.js.map +1 -0
  292. package/dist/runtime/outputs/index.d.ts +3 -0
  293. package/dist/runtime/outputs/index.d.ts.map +1 -0
  294. package/dist/runtime/outputs/index.js +3 -0
  295. package/dist/runtime/outputs/index.js.map +1 -0
  296. package/dist/runtime/outputs/output-manager.d.ts +12 -0
  297. package/dist/runtime/outputs/output-manager.d.ts.map +1 -0
  298. package/dist/runtime/outputs/output-manager.js +39 -0
  299. package/dist/runtime/outputs/output-manager.js.map +1 -0
  300. package/dist/runtime/outputs/report-generator.d.ts +5 -0
  301. package/dist/runtime/outputs/report-generator.d.ts.map +1 -0
  302. package/dist/runtime/outputs/report-generator.js +175 -0
  303. package/dist/runtime/outputs/report-generator.js.map +1 -0
  304. package/dist/runtime/retry/index.d.ts +5 -0
  305. package/dist/runtime/retry/index.d.ts.map +1 -0
  306. package/dist/runtime/retry/index.js +5 -0
  307. package/dist/runtime/retry/index.js.map +1 -0
  308. package/dist/runtime/retry/retry.d.ts +61 -0
  309. package/dist/runtime/retry/retry.d.ts.map +1 -0
  310. package/dist/runtime/retry/retry.js +90 -0
  311. package/dist/runtime/retry/retry.js.map +1 -0
  312. package/dist/runtime/session/index.d.ts +3 -0
  313. package/dist/runtime/session/index.d.ts.map +1 -0
  314. package/dist/runtime/session/index.js +3 -0
  315. package/dist/runtime/session/index.js.map +1 -0
  316. package/dist/runtime/session/store.d.ts +28 -0
  317. package/dist/runtime/session/store.d.ts.map +1 -0
  318. package/dist/runtime/session/store.js +154 -0
  319. package/dist/runtime/session/store.js.map +1 -0
  320. package/dist/runtime/session/utils/cleanup.d.ts +3 -0
  321. package/dist/runtime/session/utils/cleanup.d.ts.map +1 -0
  322. package/dist/runtime/session/utils/cleanup.js +78 -0
  323. package/dist/runtime/session/utils/cleanup.js.map +1 -0
  324. package/dist/runtime/timeout/index.d.ts +2 -0
  325. package/dist/runtime/timeout/index.d.ts.map +1 -0
  326. package/dist/runtime/timeout/index.js +2 -0
  327. package/dist/runtime/timeout/index.js.map +1 -0
  328. package/dist/runtime/timeout/timeout.d.ts +59 -0
  329. package/dist/runtime/timeout/timeout.d.ts.map +1 -0
  330. package/dist/runtime/timeout/timeout.js +77 -0
  331. package/dist/runtime/timeout/timeout.js.map +1 -0
  332. package/dist/runtime/validation/index.d.ts +2 -0
  333. package/dist/runtime/validation/index.d.ts.map +1 -0
  334. package/dist/runtime/validation/index.js +2 -0
  335. package/dist/runtime/validation/index.js.map +1 -0
  336. package/dist/runtime/validation/validation.d.ts +39 -0
  337. package/dist/runtime/validation/validation.d.ts.map +1 -0
  338. package/dist/runtime/validation/validation.js +93 -0
  339. package/dist/runtime/validation/validation.js.map +1 -0
  340. package/dist/schemas/automator/miniprogram_close.json +12 -0
  341. package/dist/schemas/automator/miniprogram_connect.json +19 -0
  342. package/dist/schemas/automator/miniprogram_disconnect.json +12 -0
  343. package/dist/schemas/automator/miniprogram_launch.json +30 -0
  344. package/dist/server.js +5 -5
  345. package/dist/server.js.map +1 -1
  346. package/dist/tools/index.d.ts.map +1 -1
  347. package/dist/tools/index.js +8 -4
  348. package/dist/tools/index.js.map +1 -1
  349. package/dist/tools/miniprogram.d.ts +11 -2
  350. package/dist/tools/miniprogram.d.ts.map +1 -1
  351. package/dist/tools/miniprogram.js +111 -41
  352. package/dist/tools/miniprogram.js.map +1 -1
  353. package/dist/tools/page.js +2 -2
  354. package/dist/tools/page.js.map +1 -1
  355. package/docs/current/01-architecture-migration.md +337 -0
  356. package/docs/current/02-screenshot-timeout-fix.md +589 -0
  357. package/docs/current/README.md +226 -0
  358. package/docs/directory-structure-and-code-style-best-practices.md +91 -0
  359. package/docs/migration/README.md +34 -0
  360. package/docs/migration/TC-ALIGN-01-notes.md +35 -0
  361. package/docs/migration/runtime-skeleton.md +50 -0
  362. package/docs/migration/tool-schema-strategy.md +75 -0
  363. package/docs//345/256/214/346/225/264/345/256/236/347/216/260/346/226/271/346/241/210.md +14 -14
  364. package/docs//347/254/254/344/270/200/347/211/210/346/234/254/346/226/271/346/241/210.md +7 -7
  365. package/package.json +4 -2
  366. package/docs/SIMPLE_USAGE.md +0 -210
  367. package/docs/architecture.E-Docs.md +0 -1359
  368. package/docs/architecture.F1.md +0 -720
  369. package/docs/architecture.F2.md +0 -871
  370. package/docs/architecture.F3.md +0 -905
  371. package/docs/architecture.md +0 -90
  372. package/docs/charter.A1.align.yaml +0 -170
  373. package/docs/charter.A2.align.yaml +0 -199
  374. package/docs/charter.A3.align.yaml +0 -242
  375. package/docs/charter.A4.align.yaml +0 -227
  376. package/docs/charter.B1.align.yaml +0 -179
  377. package/docs/charter.B2.align.yaml +0 -200
  378. package/docs/charter.B3.align.yaml +0 -200
  379. package/docs/charter.B4.align.yaml +0 -188
  380. package/docs/charter.C1.align.yaml +0 -190
  381. package/docs/charter.C2.align.yaml +0 -202
  382. package/docs/charter.C3.align.yaml +0 -211
  383. package/docs/charter.C4.align.yaml +0 -263
  384. package/docs/charter.C5.align.yaml +0 -220
  385. package/docs/charter.D1.align.yaml +0 -190
  386. package/docs/charter.D2.align.yaml +0 -234
  387. package/docs/charter.D3.align.yaml +0 -206
  388. package/docs/charter.E-Docs.align.yaml +0 -294
  389. package/docs/charter.F1.align.yaml +0 -193
  390. package/docs/charter.F2.align.yaml +0 -248
  391. package/docs/charter.F3.align.yaml +0 -287
  392. package/docs/charter.G.align.yaml +0 -174
  393. package/docs/charter.align.yaml +0 -111
  394. package/docs/maintenance.md +0 -682
  395. package/docs/playwright-mcp/350/260/203/347/240/224.md +0 -53
  396. package/docs/setup-guide.md +0 -775
  397. package/docs/tasks.A1.atomize.md +0 -296
  398. package/docs/tasks.A2.atomize.md +0 -408
  399. package/docs/tasks.A3.atomize.md +0 -564
  400. package/docs/tasks.A4.atomize.md +0 -496
  401. package/docs/tasks.B1.atomize.md +0 -352
  402. package/docs/tasks.B2.atomize.md +0 -561
  403. package/docs/tasks.B3.atomize.md +0 -508
  404. package/docs/tasks.B4.atomize.md +0 -504
  405. package/docs/tasks.C1.atomize.md +0 -540
  406. package/docs/tasks.C2.atomize.md +0 -665
  407. package/docs/tasks.C3.atomize.md +0 -745
  408. package/docs/tasks.C4.atomize.md +0 -908
  409. package/docs/tasks.C5.atomize.md +0 -755
  410. package/docs/tasks.D1.atomize.md +0 -547
  411. package/docs/tasks.D2.atomize.md +0 -619
  412. package/docs/tasks.D3.atomize.md +0 -790
  413. package/docs/tasks.E-Docs.atomize.md +0 -1204
  414. package/docs/tasks.atomize.md +0 -189
@@ -0,0 +1,589 @@
1
+ # 截图超时问题修复方案
2
+
3
+ > 版本: 1.0.0
4
+ > 日期: 2025-12-27
5
+ > 状态: ✅ 已完成
6
+
7
+ ## 1. 问题概述
8
+
9
+ ### 1.1 问题现象
10
+
11
+ 调用截图工具 (`miniprogram_screenshot`) 时经常出现超时卡住,导致:
12
+ - MCP 工具调用无响应
13
+ - 后续工具调用被阻塞
14
+ - 集成测试超时失败
15
+
16
+ ### 1.2 影响范围
17
+
18
+ | 工具 | 受影响 | 原因 |
19
+ |------|--------|------|
20
+ | miniprogram_screenshot | ✅ 直接受影响 | 无超时保护 |
21
+ | snapshot_page | ✅ 级联受影响 | 调用 screenshot |
22
+ | snapshot_full | ✅ 级联受影响 | 调用 screenshot |
23
+ | snapshot_element | ✅ 级联受影响 | 调用 screenshot |
24
+
25
+ ---
26
+
27
+ ## 2. 根本原因分析
28
+
29
+ ### 2.1 核心问题:缺少超时保护
30
+
31
+ **位置**:`src/tools/miniprogram.ts` 第 250-253 行
32
+
33
+ ```typescript
34
+ // ❌ 当前代码 - 无超时保护
35
+ const screenshotBuffer = await session.miniProgram.screenshot({
36
+ path: fullPath,
37
+ fullPage,
38
+ })
39
+ ```
40
+
41
+ **对比**:`evaluate()` 函数正确使用了超时保护
42
+
43
+ ```typescript
44
+ // ✅ evaluate 的正确做法 (第 174-177 行)
45
+ const result = await withTimeout(
46
+ session.miniProgram.evaluate(expression, ...evalArgs),
47
+ timeoutMs,
48
+ 'Evaluate expression'
49
+ )
50
+ ```
51
+
52
+ ### 2.2 超时保护对比
53
+
54
+ | 操作 | 超时保护 | 代码位置 |
55
+ |------|---------|---------|
56
+ | evaluate | ✅ 有 | miniprogram.ts:174-177 |
57
+ | navigate | ❌ 无 | miniprogram.ts:46,50 |
58
+ | callWx | ❌ 无 | miniprogram.ts:107 |
59
+ | **screenshot** | ❌ **无** | miniprogram.ts:250-253 |
60
+ | pageStack | ❌ 无 | miniprogram.ts:297 |
61
+ | systemInfo | ❌ 无 | miniprogram.ts:341 |
62
+
63
+ ### 2.3 功能退化:base64 返回被删除
64
+
65
+ **历史**:commit `e8599ed` 添加了 base64 返回功能
66
+ **当前**:HEAD 版本删除了所有 base64 相关代码
67
+
68
+ ```typescript
69
+ // e8599ed 版本 - 有快速路径
70
+ if (!filename) {
71
+ const base64String = await session.miniProgram.screenshot()
72
+ return { success: true, message: '...', base64: base64String }
73
+ }
74
+
75
+ // 当前版本 - 强制必须有 OutputManager
76
+ if (!outputManager) {
77
+ throw new Error('OutputManager not available')
78
+ }
79
+ ```
80
+
81
+ ### 2.4 可能导致长时间卡顿的原因
82
+
83
+ 1. **fullPage 模式**:需要多次截图拼接,非常耗时
84
+ 2. **WebSocket 连接中断**:DevTools 连接丢失
85
+ 3. **图片编码**:大分辨率下编码耗时
86
+ 4. **UI 线程阻塞**:开发者工具 UI 冻结
87
+ 5. **内存压力**:大型 fullPage 截图导致 GC 暂停
88
+
89
+ ---
90
+
91
+ ## 3. 修复方案
92
+
93
+ ### 3.1 P0:添加超时保护(必须)
94
+
95
+ **文件**:`src/tools/miniprogram.ts`
96
+
97
+ ```typescript
98
+ // 修改后的 screenshot 函数
99
+ export async function screenshot(
100
+ session: SessionState,
101
+ args: {
102
+ filename?: string
103
+ fullPage?: boolean
104
+ returnBase64?: boolean // 恢复 base64 选项
105
+ }
106
+ ): Promise<{
107
+ success: boolean
108
+ message: string
109
+ path?: string
110
+ base64?: string
111
+ }> {
112
+ const { filename, fullPage = false, returnBase64 = false } = args
113
+
114
+ // 导入超时工具
115
+ const { withTimeout, getTimeout, DEFAULT_TIMEOUTS } = await import('../runtime/timeout/timeout.js')
116
+
117
+ // fullPage 模式使用更长的超时
118
+ const baseTimeout = getTimeout(
119
+ session.loggerConfig?.screenshotTimeout,
120
+ DEFAULT_TIMEOUTS.screenshot
121
+ )
122
+ const timeoutMs = fullPage ? baseTimeout * 2 : baseTimeout
123
+
124
+ session.logger?.info('Taking screenshot', { filename, fullPage, timeoutMs })
125
+
126
+ // 如果只需要 base64,走快速路径
127
+ if (returnBase64 && !filename) {
128
+ const buffer = await withTimeout(
129
+ session.miniProgram.screenshot({ fullPage }),
130
+ timeoutMs,
131
+ 'Screenshot capture (base64)'
132
+ )
133
+ return {
134
+ success: true,
135
+ message: 'Screenshot captured successfully',
136
+ base64: buffer.toString('base64'),
137
+ }
138
+ }
139
+
140
+ // 文件保存路径
141
+ const outputManager = session.outputManager
142
+ if (!outputManager) {
143
+ throw new Error('OutputManager not available')
144
+ }
145
+
146
+ const resolvedFilename = filename || outputManager.generateFilename('screenshot', 'png')
147
+ const fullPath = join(outputManager.getOutputDir(), resolvedFilename)
148
+
149
+ await outputManager.ensureOutputDir()
150
+
151
+ // 🔧 关键修复:添加超时保护
152
+ const screenshotBuffer = await withTimeout(
153
+ session.miniProgram.screenshot({
154
+ path: fullPath,
155
+ fullPage,
156
+ }),
157
+ timeoutMs,
158
+ 'Screenshot capture'
159
+ )
160
+
161
+ if (screenshotBuffer) {
162
+ await outputManager.writeFile(resolvedFilename, screenshotBuffer)
163
+ }
164
+
165
+ session.logger?.info('Screenshot saved', { path: fullPath })
166
+
167
+ return {
168
+ success: true,
169
+ message: `Screenshot saved to ${resolvedFilename}`,
170
+ path: fullPath,
171
+ }
172
+ }
173
+ ```
174
+
175
+ ### 3.2 P0:恢复 base64 返回能力
176
+
177
+ **修改 schema**:`src/tools/index.ts` 中 screenshot 工具定义
178
+
179
+ ```typescript
180
+ // 添加 returnBase64 参数
181
+ {
182
+ name: 'miniprogram_screenshot',
183
+ description: 'Take a screenshot of the Mini Program',
184
+ inputSchema: {
185
+ type: 'object',
186
+ properties: {
187
+ filename: {
188
+ type: 'string',
189
+ description: 'Filename for screenshot (optional, auto-generated if not provided)',
190
+ },
191
+ fullPage: {
192
+ type: 'boolean',
193
+ description: 'Capture full page including scroll area',
194
+ default: false,
195
+ },
196
+ returnBase64: { // 🆕 新增
197
+ type: 'boolean',
198
+ description: 'Return screenshot as base64 string instead of saving to file',
199
+ default: false,
200
+ },
201
+ },
202
+ },
203
+ }
204
+ ```
205
+
206
+ **修改返回类型**:
207
+
208
+ ```typescript
209
+ // 更新 ScreenshotResult 类型
210
+ interface ScreenshotResult {
211
+ success: boolean
212
+ message: string
213
+ path?: string // 文件路径(保存时)
214
+ base64?: string // Base64 数据(returnBase64=true 时)
215
+ }
216
+ ```
217
+
218
+ ### 3.3 P1:为其他操作添加超时保护
219
+
220
+ 需要添加超时保护的函数:
221
+
222
+ | 函数 | 位置 | 超时值 |
223
+ |------|------|--------|
224
+ | navigate | miniprogram.ts:46 | 30s |
225
+ | callWx | miniprogram.ts:107 | 10s |
226
+ | getPageStack | miniprogram.ts:297 | 5s |
227
+ | getSystemInfo | miniprogram.ts:341 | 5s |
228
+
229
+ **示例:navigate 修复**
230
+
231
+ ```typescript
232
+ export async function navigate(
233
+ session: SessionState,
234
+ args: { url: string }
235
+ ): Promise<{ success: boolean; message: string }> {
236
+ const { withTimeout, getTimeout, DEFAULT_TIMEOUTS } = await import('../runtime/timeout/timeout.js')
237
+
238
+ const timeoutMs = getTimeout(
239
+ session.loggerConfig?.navigationTimeout,
240
+ DEFAULT_TIMEOUTS.navigation
241
+ )
242
+
243
+ await withTimeout(
244
+ session.miniProgram.navigateTo({ url: args.url }),
245
+ timeoutMs,
246
+ 'Page navigation'
247
+ )
248
+
249
+ return { success: true, message: `Navigated to ${args.url}` }
250
+ }
251
+ ```
252
+
253
+ ### 3.4 P1:添加重试机制
254
+
255
+ **新建**:`src/runtime/retry/retry.ts`
256
+
257
+ ```typescript
258
+ export interface RetryOptions {
259
+ maxRetries: number
260
+ delayMs: number
261
+ backoffMultiplier?: number
262
+ shouldRetry?: (error: Error) => boolean
263
+ }
264
+
265
+ export async function withRetry<T>(
266
+ operation: () => Promise<T>,
267
+ options: RetryOptions
268
+ ): Promise<T> {
269
+ const {
270
+ maxRetries,
271
+ delayMs,
272
+ backoffMultiplier = 1.5,
273
+ shouldRetry = () => true,
274
+ } = options
275
+
276
+ let lastError: Error
277
+
278
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
279
+ try {
280
+ return await operation()
281
+ } catch (error) {
282
+ lastError = error as Error
283
+
284
+ if (attempt === maxRetries || !shouldRetry(lastError)) {
285
+ throw lastError
286
+ }
287
+
288
+ const delay = delayMs * Math.pow(backoffMultiplier, attempt)
289
+ await new Promise(resolve => setTimeout(resolve, delay))
290
+ }
291
+ }
292
+
293
+ throw lastError!
294
+ }
295
+ ```
296
+
297
+ **使用示例**:
298
+
299
+ ```typescript
300
+ const screenshotBuffer = await withRetry(
301
+ () => withTimeout(
302
+ session.miniProgram.screenshot({ fullPage }),
303
+ timeoutMs,
304
+ 'Screenshot capture'
305
+ ),
306
+ {
307
+ maxRetries: 2,
308
+ delayMs: 1000,
309
+ shouldRetry: (error) => error.message.includes('timeout'),
310
+ }
311
+ )
312
+ ```
313
+
314
+ ### 3.5 P2:优化 fullPage 超时
315
+
316
+ **配置更新**:`src/config/defaults.ts`
317
+
318
+ ```typescript
319
+ export const DEFAULT_TIMEOUTS = {
320
+ screenshot: 10 * 1000, // 10s 普通截图
321
+ screenshotFullPage: 30 * 1000, // 30s 全页截图
322
+ navigation: 30 * 1000, // 30s 导航
323
+ evaluate: 5 * 1000, // 5s 脚本执行
324
+ callWx: 10 * 1000, // 10s wx API
325
+ pageStack: 5 * 1000, // 5s 页面栈
326
+ systemInfo: 5 * 1000, // 5s 系统信息
327
+ }
328
+ ```
329
+
330
+ ### 3.6 P2:添加性能日志
331
+
332
+ ```typescript
333
+ export async function screenshot(session: SessionState, args: ScreenshotArgs) {
334
+ const startTime = Date.now()
335
+
336
+ try {
337
+ // ... 截图逻辑 ...
338
+
339
+ const duration = Date.now() - startTime
340
+ session.logger?.info('Screenshot performance', {
341
+ duration,
342
+ fullPage,
343
+ size: screenshotBuffer?.length,
344
+ })
345
+
346
+ return result
347
+ } catch (error) {
348
+ const duration = Date.now() - startTime
349
+ session.logger?.error('Screenshot failed', {
350
+ duration,
351
+ fullPage,
352
+ error: (error as Error).message,
353
+ })
354
+ throw error
355
+ }
356
+ }
357
+ ```
358
+
359
+ ---
360
+
361
+ ## 4. 改动文件清单
362
+
363
+ ### 4.1 修改文件
364
+
365
+ | 文件 | 改动描述 |
366
+ |------|---------|
367
+ | src/tools/miniprogram.ts | 添加超时保护、恢复 base64 |
368
+ | src/tools/index.ts | 更新 schema 定义 |
369
+ | src/config/defaults.ts | 添加新的超时配置 |
370
+ | src/types.ts | 更新返回类型定义 |
371
+
372
+ ### 4.2 新建文件
373
+
374
+ | 文件 | 描述 |
375
+ |------|------|
376
+ | src/runtime/retry/retry.ts | 重试机制 |
377
+ | src/runtime/retry/index.ts | 导出入口 |
378
+
379
+ ### 4.3 测试文件
380
+
381
+ | 文件 | 描述 |
382
+ |------|------|
383
+ | tests/unit/screenshot.test.ts | 截图超时测试 |
384
+ | tests/unit/retry.test.ts | 重试机制测试 |
385
+
386
+ ---
387
+
388
+ ## 5. 代码改动示例
389
+
390
+ ### 5.1 miniprogram.ts 完整修改
391
+
392
+ ```diff
393
+ // src/tools/miniprogram.ts
394
+
395
+ + import { withTimeout, getTimeout, DEFAULT_TIMEOUTS } from '../runtime/timeout/timeout.js'
396
+
397
+ export async function screenshot(
398
+ session: SessionState,
399
+ args: {
400
+ filename?: string
401
+ fullPage?: boolean
402
+ + returnBase64?: boolean
403
+ }
404
+ ): Promise<{
405
+ success: boolean
406
+ message: string
407
+ path?: string
408
+ + base64?: string
409
+ }> {
410
+ - const { filename, fullPage = false } = args
411
+ + const { filename, fullPage = false, returnBase64 = false } = args
412
+
413
+ + // 计算超时时间
414
+ + const baseTimeout = getTimeout(
415
+ + session.loggerConfig?.screenshotTimeout,
416
+ + DEFAULT_TIMEOUTS.screenshot
417
+ + )
418
+ + const timeoutMs = fullPage ? baseTimeout * 2 : baseTimeout
419
+
420
+ + session.logger?.info('Taking screenshot', { filename, fullPage, timeoutMs })
421
+
422
+ + // base64 快速路径
423
+ + if (returnBase64 && !filename) {
424
+ + const buffer = await withTimeout(
425
+ + session.miniProgram.screenshot({ fullPage }),
426
+ + timeoutMs,
427
+ + 'Screenshot capture (base64)'
428
+ + )
429
+ + return {
430
+ + success: true,
431
+ + message: 'Screenshot captured successfully',
432
+ + base64: buffer.toString('base64'),
433
+ + }
434
+ + }
435
+
436
+ const outputManager = session.outputManager
437
+ if (!outputManager) {
438
+ throw new Error('OutputManager not available')
439
+ }
440
+
441
+ const resolvedFilename = filename || outputManager.generateFilename('screenshot', 'png')
442
+ const fullPath = join(outputManager.getOutputDir(), resolvedFilename)
443
+
444
+ await outputManager.ensureOutputDir()
445
+
446
+ - const screenshotBuffer = await session.miniProgram.screenshot({
447
+ - path: fullPath,
448
+ - fullPage,
449
+ - })
450
+ + const screenshotBuffer = await withTimeout(
451
+ + session.miniProgram.screenshot({
452
+ + path: fullPath,
453
+ + fullPage,
454
+ + }),
455
+ + timeoutMs,
456
+ + 'Screenshot capture'
457
+ + )
458
+
459
+ if (screenshotBuffer) {
460
+ await outputManager.writeFile(resolvedFilename, screenshotBuffer)
461
+ }
462
+
463
+ session.logger?.info('Screenshot saved', { path: fullPath })
464
+
465
+ return {
466
+ success: true,
467
+ message: `Screenshot saved to ${resolvedFilename}`,
468
+ path: fullPath,
469
+ }
470
+ }
471
+ ```
472
+
473
+ ### 5.2 defaults.ts 修改
474
+
475
+ ```diff
476
+ // src/config/defaults.ts
477
+
478
+ export const DEFAULT_TIMEOUTS = {
479
+ screenshot: 10 * 1000,
480
+ + screenshotFullPage: 30 * 1000,
481
+ evaluate: 5 * 1000,
482
+ launch: 60 * 1000,
483
+ + navigation: 30 * 1000,
484
+ + callWx: 10 * 1000,
485
+ + pageStack: 5 * 1000,
486
+ + systemInfo: 5 * 1000,
487
+ }
488
+ ```
489
+
490
+ ---
491
+
492
+ ## 6. 测试计划
493
+
494
+ ### 6.1 单元测试
495
+
496
+ ```typescript
497
+ // tests/unit/screenshot.test.ts
498
+ describe('screenshot', () => {
499
+ it('should timeout after configured duration', async () => {
500
+ // Mock miniProgram.screenshot to never resolve
501
+ const mockScreenshot = jest.fn(() => new Promise(() => {}))
502
+ session.miniProgram = { screenshot: mockScreenshot }
503
+
504
+ await expect(screenshot(session, {}))
505
+ .rejects.toThrow('Screenshot capture timed out')
506
+ })
507
+
508
+ it('should return base64 when returnBase64 is true', async () => {
509
+ const mockBuffer = Buffer.from('test-image')
510
+ session.miniProgram = {
511
+ screenshot: jest.fn().mockResolvedValue(mockBuffer)
512
+ }
513
+
514
+ const result = await screenshot(session, { returnBase64: true })
515
+
516
+ expect(result.base64).toBe(mockBuffer.toString('base64'))
517
+ expect(result.path).toBeUndefined()
518
+ })
519
+
520
+ it('should use longer timeout for fullPage', async () => {
521
+ // Verify timeout is doubled for fullPage
522
+ })
523
+ })
524
+ ```
525
+
526
+ ### 6.2 集成测试
527
+
528
+ ```typescript
529
+ // tests/integration/screenshot.test.ts
530
+ describe('screenshot integration', () => {
531
+ it('should capture and return screenshot', async () => {
532
+ const result = await client.callTool('miniprogram_screenshot', {
533
+ returnBase64: true,
534
+ })
535
+
536
+ expect(result.success).toBe(true)
537
+ expect(result.base64).toMatch(/^[A-Za-z0-9+/=]+$/)
538
+ })
539
+
540
+ it('should not hang on fullPage screenshot', async () => {
541
+ const startTime = Date.now()
542
+
543
+ const result = await client.callTool('miniprogram_screenshot', {
544
+ fullPage: true,
545
+ })
546
+
547
+ const duration = Date.now() - startTime
548
+ expect(duration).toBeLessThan(35000) // 30s timeout + buffer
549
+ })
550
+ })
551
+ ```
552
+
553
+ ---
554
+
555
+ ## 7. 时间估算
556
+
557
+ | 任务 | 预计时间 | 优先级 |
558
+ |------|---------|--------|
559
+ | 添加 screenshot 超时保护 | 1h | P0 |
560
+ | 恢复 base64 返回能力 | 1h | P0 |
561
+ | 其他操作添加超时保护 | 2h | P1 |
562
+ | 添加重试机制 | 1.5h | P1 |
563
+ | 优化 fullPage 超时配置 | 0.5h | P2 |
564
+ | 添加性能日志 | 0.5h | P2 |
565
+ | 编写测试 | 2h | P1 |
566
+ | **总计** | **8-9h** | - |
567
+
568
+ ---
569
+
570
+ ## 8. 验收标准
571
+
572
+ - [ ] 截图工具在 10 秒内必须返回结果或超时错误
573
+ - [ ] fullPage 截图在 30 秒内必须返回结果或超时错误
574
+ - [ ] returnBase64=true 时正确返回 base64 数据
575
+ - [ ] 超时错误信息清晰,包含操作名称和超时时长
576
+ - [ ] 所有 miniprogram 操作都有超时保护
577
+ - [ ] 单元测试覆盖超时场景
578
+ - [ ] 集成测试验证不会卡住
579
+
580
+ ---
581
+
582
+ ## 9. 风险与缓解
583
+
584
+ | 风险 | 影响 | 缓解措施 |
585
+ |------|------|---------|
586
+ | 超时时间设置过短 | 正常截图被误杀 | 添加配置项,允许用户调整 |
587
+ | fullPage 页面过长 | 30s 仍不够 | 添加进度回调,支持分段截图 |
588
+ | 重试导致更长等待 | 用户体验差 | 重试次数可配置,默认 2 次 |
589
+ | SDK 本身有 bug | 无法根本解决 | 添加详细日志,便于排查 |