oc-browser-relay 1.0.3 → 1.0.4

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 (377) hide show
  1. package/bundled-relay/index.js +260 -59
  2. package/bundled-relay/package.json +1 -4
  3. package/bundled-relay/public/configs/pages/sycm-taobao-home.json +85 -0
  4. package/bundled-relay/public/configs/pages/taobao-item-detail.json +10 -10
  5. package/bundled-relay/public/configs/pages/xiaohongshu-creator-publish.json +17 -17
  6. package/bundled-relay/public/configs/pages/xiaohongshu-web-explore.json +13 -13
  7. package/bundled-relay/public/configs/pages/xiaohongshu-web-search-result.json +23 -21
  8. package/bundled-relay/public/configs/task-templates/sycm-taobao-home-live-metrics.json +108 -1
  9. package/bundled-relay/public/configs/task-templates/taobao-item-detail-comments.json +11 -0
  10. package/index.js +1 -1
  11. package/install.mjs +5 -11
  12. package/package.json +1 -1
  13. package/skills/oc-browser-relay-xiaohongshu/SKILL.md +3 -1
  14. package/skills/oc-sycm-live-metrics/SKILL.md +15 -3
  15. package/bundled-relay/node_modules/playwright-core/LICENSE +0 -202
  16. package/bundled-relay/node_modules/playwright-core/NOTICE +0 -5
  17. package/bundled-relay/node_modules/playwright-core/README.md +0 -3
  18. package/bundled-relay/node_modules/playwright-core/ThirdPartyNotices.txt +0 -4076
  19. package/bundled-relay/node_modules/playwright-core/bin/install_media_pack.ps1 +0 -5
  20. package/bundled-relay/node_modules/playwright-core/bin/install_webkit_wsl.ps1 +0 -33
  21. package/bundled-relay/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +0 -42
  22. package/bundled-relay/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +0 -13
  23. package/bundled-relay/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +0 -24
  24. package/bundled-relay/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +0 -42
  25. package/bundled-relay/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +0 -12
  26. package/bundled-relay/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +0 -24
  27. package/bundled-relay/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +0 -48
  28. package/bundled-relay/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +0 -11
  29. package/bundled-relay/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +0 -23
  30. package/bundled-relay/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +0 -48
  31. package/bundled-relay/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +0 -11
  32. package/bundled-relay/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +0 -23
  33. package/bundled-relay/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +0 -48
  34. package/bundled-relay/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +0 -11
  35. package/bundled-relay/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +0 -24
  36. package/bundled-relay/node_modules/playwright-core/browsers.json +0 -79
  37. package/bundled-relay/node_modules/playwright-core/cli.js +0 -18
  38. package/bundled-relay/node_modules/playwright-core/index.d.ts +0 -17
  39. package/bundled-relay/node_modules/playwright-core/index.js +0 -32
  40. package/bundled-relay/node_modules/playwright-core/index.mjs +0 -28
  41. package/bundled-relay/node_modules/playwright-core/lib/androidServerImpl.js +0 -65
  42. package/bundled-relay/node_modules/playwright-core/lib/browserServerImpl.js +0 -120
  43. package/bundled-relay/node_modules/playwright-core/lib/cli/driver.js +0 -97
  44. package/bundled-relay/node_modules/playwright-core/lib/cli/program.js +0 -589
  45. package/bundled-relay/node_modules/playwright-core/lib/cli/programWithTestStub.js +0 -74
  46. package/bundled-relay/node_modules/playwright-core/lib/client/android.js +0 -361
  47. package/bundled-relay/node_modules/playwright-core/lib/client/api.js +0 -137
  48. package/bundled-relay/node_modules/playwright-core/lib/client/artifact.js +0 -79
  49. package/bundled-relay/node_modules/playwright-core/lib/client/browser.js +0 -161
  50. package/bundled-relay/node_modules/playwright-core/lib/client/browserContext.js +0 -582
  51. package/bundled-relay/node_modules/playwright-core/lib/client/browserType.js +0 -185
  52. package/bundled-relay/node_modules/playwright-core/lib/client/cdpSession.js +0 -51
  53. package/bundled-relay/node_modules/playwright-core/lib/client/channelOwner.js +0 -194
  54. package/bundled-relay/node_modules/playwright-core/lib/client/clientHelper.js +0 -64
  55. package/bundled-relay/node_modules/playwright-core/lib/client/clientInstrumentation.js +0 -55
  56. package/bundled-relay/node_modules/playwright-core/lib/client/clientStackTrace.js +0 -69
  57. package/bundled-relay/node_modules/playwright-core/lib/client/clock.js +0 -68
  58. package/bundled-relay/node_modules/playwright-core/lib/client/connection.js +0 -318
  59. package/bundled-relay/node_modules/playwright-core/lib/client/consoleMessage.js +0 -58
  60. package/bundled-relay/node_modules/playwright-core/lib/client/coverage.js +0 -44
  61. package/bundled-relay/node_modules/playwright-core/lib/client/dialog.js +0 -56
  62. package/bundled-relay/node_modules/playwright-core/lib/client/download.js +0 -62
  63. package/bundled-relay/node_modules/playwright-core/lib/client/electron.js +0 -138
  64. package/bundled-relay/node_modules/playwright-core/lib/client/elementHandle.js +0 -284
  65. package/bundled-relay/node_modules/playwright-core/lib/client/errors.js +0 -77
  66. package/bundled-relay/node_modules/playwright-core/lib/client/eventEmitter.js +0 -314
  67. package/bundled-relay/node_modules/playwright-core/lib/client/events.js +0 -103
  68. package/bundled-relay/node_modules/playwright-core/lib/client/fetch.js +0 -368
  69. package/bundled-relay/node_modules/playwright-core/lib/client/fileChooser.js +0 -46
  70. package/bundled-relay/node_modules/playwright-core/lib/client/fileUtils.js +0 -34
  71. package/bundled-relay/node_modules/playwright-core/lib/client/frame.js +0 -409
  72. package/bundled-relay/node_modules/playwright-core/lib/client/harRouter.js +0 -87
  73. package/bundled-relay/node_modules/playwright-core/lib/client/input.js +0 -84
  74. package/bundled-relay/node_modules/playwright-core/lib/client/jsHandle.js +0 -109
  75. package/bundled-relay/node_modules/playwright-core/lib/client/jsonPipe.js +0 -39
  76. package/bundled-relay/node_modules/playwright-core/lib/client/localUtils.js +0 -60
  77. package/bundled-relay/node_modules/playwright-core/lib/client/locator.js +0 -369
  78. package/bundled-relay/node_modules/playwright-core/lib/client/network.js +0 -747
  79. package/bundled-relay/node_modules/playwright-core/lib/client/page.js +0 -745
  80. package/bundled-relay/node_modules/playwright-core/lib/client/pageAgent.js +0 -64
  81. package/bundled-relay/node_modules/playwright-core/lib/client/platform.js +0 -77
  82. package/bundled-relay/node_modules/playwright-core/lib/client/playwright.js +0 -71
  83. package/bundled-relay/node_modules/playwright-core/lib/client/selectors.js +0 -55
  84. package/bundled-relay/node_modules/playwright-core/lib/client/stream.js +0 -39
  85. package/bundled-relay/node_modules/playwright-core/lib/client/timeoutSettings.js +0 -79
  86. package/bundled-relay/node_modules/playwright-core/lib/client/tracing.js +0 -119
  87. package/bundled-relay/node_modules/playwright-core/lib/client/types.js +0 -28
  88. package/bundled-relay/node_modules/playwright-core/lib/client/video.js +0 -59
  89. package/bundled-relay/node_modules/playwright-core/lib/client/waiter.js +0 -142
  90. package/bundled-relay/node_modules/playwright-core/lib/client/webError.js +0 -39
  91. package/bundled-relay/node_modules/playwright-core/lib/client/webSocket.js +0 -93
  92. package/bundled-relay/node_modules/playwright-core/lib/client/worker.js +0 -85
  93. package/bundled-relay/node_modules/playwright-core/lib/client/writableStream.js +0 -39
  94. package/bundled-relay/node_modules/playwright-core/lib/generated/bindingsControllerSource.js +0 -28
  95. package/bundled-relay/node_modules/playwright-core/lib/generated/clockSource.js +0 -28
  96. package/bundled-relay/node_modules/playwright-core/lib/generated/injectedScriptSource.js +0 -28
  97. package/bundled-relay/node_modules/playwright-core/lib/generated/pollingRecorderSource.js +0 -28
  98. package/bundled-relay/node_modules/playwright-core/lib/generated/storageScriptSource.js +0 -28
  99. package/bundled-relay/node_modules/playwright-core/lib/generated/utilityScriptSource.js +0 -28
  100. package/bundled-relay/node_modules/playwright-core/lib/generated/webSocketMockSource.js +0 -336
  101. package/bundled-relay/node_modules/playwright-core/lib/inProcessFactory.js +0 -60
  102. package/bundled-relay/node_modules/playwright-core/lib/inprocess.js +0 -3
  103. package/bundled-relay/node_modules/playwright-core/lib/mcpBundle.js +0 -84
  104. package/bundled-relay/node_modules/playwright-core/lib/mcpBundleImpl/index.js +0 -147
  105. package/bundled-relay/node_modules/playwright-core/lib/outofprocess.js +0 -76
  106. package/bundled-relay/node_modules/playwright-core/lib/protocol/serializers.js +0 -197
  107. package/bundled-relay/node_modules/playwright-core/lib/protocol/validator.js +0 -2969
  108. package/bundled-relay/node_modules/playwright-core/lib/protocol/validatorPrimitives.js +0 -193
  109. package/bundled-relay/node_modules/playwright-core/lib/remote/playwrightConnection.js +0 -129
  110. package/bundled-relay/node_modules/playwright-core/lib/remote/playwrightServer.js +0 -334
  111. package/bundled-relay/node_modules/playwright-core/lib/server/agent/actionRunner.js +0 -335
  112. package/bundled-relay/node_modules/playwright-core/lib/server/agent/actions.js +0 -128
  113. package/bundled-relay/node_modules/playwright-core/lib/server/agent/codegen.js +0 -111
  114. package/bundled-relay/node_modules/playwright-core/lib/server/agent/context.js +0 -150
  115. package/bundled-relay/node_modules/playwright-core/lib/server/agent/expectTools.js +0 -156
  116. package/bundled-relay/node_modules/playwright-core/lib/server/agent/pageAgent.js +0 -204
  117. package/bundled-relay/node_modules/playwright-core/lib/server/agent/performTools.js +0 -262
  118. package/bundled-relay/node_modules/playwright-core/lib/server/agent/tool.js +0 -109
  119. package/bundled-relay/node_modules/playwright-core/lib/server/android/android.js +0 -465
  120. package/bundled-relay/node_modules/playwright-core/lib/server/android/backendAdb.js +0 -177
  121. package/bundled-relay/node_modules/playwright-core/lib/server/artifact.js +0 -127
  122. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiBrowser.js +0 -549
  123. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiChromium.js +0 -149
  124. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiConnection.js +0 -213
  125. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiDeserializer.js +0 -116
  126. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiExecutionContext.js +0 -267
  127. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiFirefox.js +0 -128
  128. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiInput.js +0 -146
  129. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiNetworkManager.js +0 -383
  130. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiOverCdp.js +0 -102
  131. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiPage.js +0 -583
  132. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/bidiPdf.js +0 -106
  133. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/third_party/bidiCommands.d.js +0 -22
  134. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/third_party/bidiKeyboard.js +0 -256
  135. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocol.js +0 -24
  136. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocolCore.js +0 -180
  137. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocolPermissions.js +0 -42
  138. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/third_party/bidiSerializer.js +0 -148
  139. package/bundled-relay/node_modules/playwright-core/lib/server/bidi/third_party/firefoxPrefs.js +0 -259
  140. package/bundled-relay/node_modules/playwright-core/lib/server/browser.js +0 -149
  141. package/bundled-relay/node_modules/playwright-core/lib/server/browserContext.js +0 -702
  142. package/bundled-relay/node_modules/playwright-core/lib/server/browserType.js +0 -336
  143. package/bundled-relay/node_modules/playwright-core/lib/server/callLog.js +0 -82
  144. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
  145. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/chromium.js +0 -397
  146. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/chromiumSwitches.js +0 -104
  147. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crBrowser.js +0 -520
  148. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crConnection.js +0 -197
  149. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crCoverage.js +0 -235
  150. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crDevTools.js +0 -111
  151. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crDragDrop.js +0 -131
  152. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crExecutionContext.js +0 -146
  153. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crInput.js +0 -187
  154. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crNetworkManager.js +0 -707
  155. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crPage.js +0 -1001
  156. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crPdf.js +0 -121
  157. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crProtocolHelper.js +0 -145
  158. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/crServiceWorker.js +0 -136
  159. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/defaultFontFamilies.js +0 -162
  160. package/bundled-relay/node_modules/playwright-core/lib/server/chromium/protocol.d.js +0 -16
  161. package/bundled-relay/node_modules/playwright-core/lib/server/clock.js +0 -149
  162. package/bundled-relay/node_modules/playwright-core/lib/server/codegen/csharp.js +0 -327
  163. package/bundled-relay/node_modules/playwright-core/lib/server/codegen/java.js +0 -274
  164. package/bundled-relay/node_modules/playwright-core/lib/server/codegen/javascript.js +0 -247
  165. package/bundled-relay/node_modules/playwright-core/lib/server/codegen/jsonl.js +0 -52
  166. package/bundled-relay/node_modules/playwright-core/lib/server/codegen/language.js +0 -132
  167. package/bundled-relay/node_modules/playwright-core/lib/server/codegen/languages.js +0 -68
  168. package/bundled-relay/node_modules/playwright-core/lib/server/codegen/python.js +0 -279
  169. package/bundled-relay/node_modules/playwright-core/lib/server/codegen/types.js +0 -16
  170. package/bundled-relay/node_modules/playwright-core/lib/server/console.js +0 -57
  171. package/bundled-relay/node_modules/playwright-core/lib/server/cookieStore.js +0 -206
  172. package/bundled-relay/node_modules/playwright-core/lib/server/debugController.js +0 -191
  173. package/bundled-relay/node_modules/playwright-core/lib/server/debugger.js +0 -119
  174. package/bundled-relay/node_modules/playwright-core/lib/server/deviceDescriptors.js +0 -39
  175. package/bundled-relay/node_modules/playwright-core/lib/server/deviceDescriptorsSource.json +0 -1779
  176. package/bundled-relay/node_modules/playwright-core/lib/server/dialog.js +0 -116
  177. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/androidDispatcher.js +0 -325
  178. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/artifactDispatcher.js +0 -118
  179. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/browserContextDispatcher.js +0 -384
  180. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/browserDispatcher.js +0 -118
  181. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/browserTypeDispatcher.js +0 -64
  182. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/cdpSessionDispatcher.js +0 -44
  183. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/debugControllerDispatcher.js +0 -78
  184. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/dialogDispatcher.js +0 -47
  185. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/dispatcher.js +0 -364
  186. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/electronDispatcher.js +0 -89
  187. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/elementHandlerDispatcher.js +0 -181
  188. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/frameDispatcher.js +0 -227
  189. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/jsHandleDispatcher.js +0 -85
  190. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/jsonPipeDispatcher.js +0 -58
  191. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/localUtilsDispatcher.js +0 -149
  192. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/networkDispatchers.js +0 -213
  193. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/pageAgentDispatcher.js +0 -96
  194. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/pageDispatcher.js +0 -393
  195. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/playwrightDispatcher.js +0 -108
  196. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/streamDispatcher.js +0 -67
  197. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/tracingDispatcher.js +0 -68
  198. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/webSocketRouteDispatcher.js +0 -165
  199. package/bundled-relay/node_modules/playwright-core/lib/server/dispatchers/writableStreamDispatcher.js +0 -79
  200. package/bundled-relay/node_modules/playwright-core/lib/server/dom.js +0 -815
  201. package/bundled-relay/node_modules/playwright-core/lib/server/download.js +0 -70
  202. package/bundled-relay/node_modules/playwright-core/lib/server/electron/electron.js +0 -273
  203. package/bundled-relay/node_modules/playwright-core/lib/server/electron/loader.js +0 -29
  204. package/bundled-relay/node_modules/playwright-core/lib/server/errors.js +0 -69
  205. package/bundled-relay/node_modules/playwright-core/lib/server/fetch.js +0 -621
  206. package/bundled-relay/node_modules/playwright-core/lib/server/fileChooser.js +0 -43
  207. package/bundled-relay/node_modules/playwright-core/lib/server/fileUploadUtils.js +0 -84
  208. package/bundled-relay/node_modules/playwright-core/lib/server/firefox/ffBrowser.js +0 -418
  209. package/bundled-relay/node_modules/playwright-core/lib/server/firefox/ffConnection.js +0 -142
  210. package/bundled-relay/node_modules/playwright-core/lib/server/firefox/ffExecutionContext.js +0 -150
  211. package/bundled-relay/node_modules/playwright-core/lib/server/firefox/ffInput.js +0 -159
  212. package/bundled-relay/node_modules/playwright-core/lib/server/firefox/ffNetworkManager.js +0 -256
  213. package/bundled-relay/node_modules/playwright-core/lib/server/firefox/ffPage.js +0 -497
  214. package/bundled-relay/node_modules/playwright-core/lib/server/firefox/firefox.js +0 -114
  215. package/bundled-relay/node_modules/playwright-core/lib/server/firefox/protocol.d.js +0 -16
  216. package/bundled-relay/node_modules/playwright-core/lib/server/formData.js +0 -147
  217. package/bundled-relay/node_modules/playwright-core/lib/server/frameSelectors.js +0 -160
  218. package/bundled-relay/node_modules/playwright-core/lib/server/frames.js +0 -1471
  219. package/bundled-relay/node_modules/playwright-core/lib/server/har/harRecorder.js +0 -147
  220. package/bundled-relay/node_modules/playwright-core/lib/server/har/harTracer.js +0 -607
  221. package/bundled-relay/node_modules/playwright-core/lib/server/harBackend.js +0 -157
  222. package/bundled-relay/node_modules/playwright-core/lib/server/helper.js +0 -96
  223. package/bundled-relay/node_modules/playwright-core/lib/server/index.js +0 -58
  224. package/bundled-relay/node_modules/playwright-core/lib/server/input.js +0 -277
  225. package/bundled-relay/node_modules/playwright-core/lib/server/instrumentation.js +0 -72
  226. package/bundled-relay/node_modules/playwright-core/lib/server/javascript.js +0 -291
  227. package/bundled-relay/node_modules/playwright-core/lib/server/launchApp.js +0 -128
  228. package/bundled-relay/node_modules/playwright-core/lib/server/localUtils.js +0 -214
  229. package/bundled-relay/node_modules/playwright-core/lib/server/macEditingCommands.js +0 -143
  230. package/bundled-relay/node_modules/playwright-core/lib/server/network.js +0 -667
  231. package/bundled-relay/node_modules/playwright-core/lib/server/page.js +0 -830
  232. package/bundled-relay/node_modules/playwright-core/lib/server/pipeTransport.js +0 -89
  233. package/bundled-relay/node_modules/playwright-core/lib/server/playwright.js +0 -69
  234. package/bundled-relay/node_modules/playwright-core/lib/server/progress.js +0 -132
  235. package/bundled-relay/node_modules/playwright-core/lib/server/protocolError.js +0 -52
  236. package/bundled-relay/node_modules/playwright-core/lib/server/recorder/chat.js +0 -161
  237. package/bundled-relay/node_modules/playwright-core/lib/server/recorder/recorderApp.js +0 -366
  238. package/bundled-relay/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +0 -138
  239. package/bundled-relay/node_modules/playwright-core/lib/server/recorder/recorderSignalProcessor.js +0 -83
  240. package/bundled-relay/node_modules/playwright-core/lib/server/recorder/recorderUtils.js +0 -157
  241. package/bundled-relay/node_modules/playwright-core/lib/server/recorder/throttledFile.js +0 -57
  242. package/bundled-relay/node_modules/playwright-core/lib/server/recorder.js +0 -499
  243. package/bundled-relay/node_modules/playwright-core/lib/server/registry/browserFetcher.js +0 -177
  244. package/bundled-relay/node_modules/playwright-core/lib/server/registry/dependencies.js +0 -371
  245. package/bundled-relay/node_modules/playwright-core/lib/server/registry/index.js +0 -1422
  246. package/bundled-relay/node_modules/playwright-core/lib/server/registry/nativeDeps.js +0 -1280
  247. package/bundled-relay/node_modules/playwright-core/lib/server/registry/oopDownloadBrowserMain.js +0 -127
  248. package/bundled-relay/node_modules/playwright-core/lib/server/screencast.js +0 -190
  249. package/bundled-relay/node_modules/playwright-core/lib/server/screenshotter.js +0 -333
  250. package/bundled-relay/node_modules/playwright-core/lib/server/selectors.js +0 -112
  251. package/bundled-relay/node_modules/playwright-core/lib/server/socksClientCertificatesInterceptor.js +0 -383
  252. package/bundled-relay/node_modules/playwright-core/lib/server/socksInterceptor.js +0 -95
  253. package/bundled-relay/node_modules/playwright-core/lib/server/trace/recorder/snapshotter.js +0 -147
  254. package/bundled-relay/node_modules/playwright-core/lib/server/trace/recorder/snapshotterInjected.js +0 -561
  255. package/bundled-relay/node_modules/playwright-core/lib/server/trace/recorder/tracing.js +0 -604
  256. package/bundled-relay/node_modules/playwright-core/lib/server/trace/viewer/traceParser.js +0 -72
  257. package/bundled-relay/node_modules/playwright-core/lib/server/trace/viewer/traceViewer.js +0 -245
  258. package/bundled-relay/node_modules/playwright-core/lib/server/transport.js +0 -181
  259. package/bundled-relay/node_modules/playwright-core/lib/server/types.js +0 -28
  260. package/bundled-relay/node_modules/playwright-core/lib/server/usKeyboardLayout.js +0 -145
  261. package/bundled-relay/node_modules/playwright-core/lib/server/utils/ascii.js +0 -44
  262. package/bundled-relay/node_modules/playwright-core/lib/server/utils/comparators.js +0 -139
  263. package/bundled-relay/node_modules/playwright-core/lib/server/utils/crypto.js +0 -216
  264. package/bundled-relay/node_modules/playwright-core/lib/server/utils/debug.js +0 -42
  265. package/bundled-relay/node_modules/playwright-core/lib/server/utils/debugLogger.js +0 -122
  266. package/bundled-relay/node_modules/playwright-core/lib/server/utils/env.js +0 -73
  267. package/bundled-relay/node_modules/playwright-core/lib/server/utils/eventsHelper.js +0 -39
  268. package/bundled-relay/node_modules/playwright-core/lib/server/utils/expectUtils.js +0 -123
  269. package/bundled-relay/node_modules/playwright-core/lib/server/utils/fileUtils.js +0 -191
  270. package/bundled-relay/node_modules/playwright-core/lib/server/utils/happyEyeballs.js +0 -207
  271. package/bundled-relay/node_modules/playwright-core/lib/server/utils/hostPlatform.js +0 -138
  272. package/bundled-relay/node_modules/playwright-core/lib/server/utils/httpServer.js +0 -203
  273. package/bundled-relay/node_modules/playwright-core/lib/server/utils/imageUtils.js +0 -141
  274. package/bundled-relay/node_modules/playwright-core/lib/server/utils/image_tools/colorUtils.js +0 -89
  275. package/bundled-relay/node_modules/playwright-core/lib/server/utils/image_tools/compare.js +0 -109
  276. package/bundled-relay/node_modules/playwright-core/lib/server/utils/image_tools/imageChannel.js +0 -78
  277. package/bundled-relay/node_modules/playwright-core/lib/server/utils/image_tools/stats.js +0 -102
  278. package/bundled-relay/node_modules/playwright-core/lib/server/utils/linuxUtils.js +0 -71
  279. package/bundled-relay/node_modules/playwright-core/lib/server/utils/network.js +0 -242
  280. package/bundled-relay/node_modules/playwright-core/lib/server/utils/nodePlatform.js +0 -154
  281. package/bundled-relay/node_modules/playwright-core/lib/server/utils/pipeTransport.js +0 -84
  282. package/bundled-relay/node_modules/playwright-core/lib/server/utils/processLauncher.js +0 -241
  283. package/bundled-relay/node_modules/playwright-core/lib/server/utils/profiler.js +0 -65
  284. package/bundled-relay/node_modules/playwright-core/lib/server/utils/socksProxy.js +0 -511
  285. package/bundled-relay/node_modules/playwright-core/lib/server/utils/spawnAsync.js +0 -41
  286. package/bundled-relay/node_modules/playwright-core/lib/server/utils/task.js +0 -51
  287. package/bundled-relay/node_modules/playwright-core/lib/server/utils/userAgent.js +0 -98
  288. package/bundled-relay/node_modules/playwright-core/lib/server/utils/wsServer.js +0 -121
  289. package/bundled-relay/node_modules/playwright-core/lib/server/utils/zipFile.js +0 -74
  290. package/bundled-relay/node_modules/playwright-core/lib/server/utils/zones.js +0 -57
  291. package/bundled-relay/node_modules/playwright-core/lib/server/videoRecorder.js +0 -124
  292. package/bundled-relay/node_modules/playwright-core/lib/server/webkit/protocol.d.js +0 -16
  293. package/bundled-relay/node_modules/playwright-core/lib/server/webkit/webkit.js +0 -108
  294. package/bundled-relay/node_modules/playwright-core/lib/server/webkit/wkBrowser.js +0 -335
  295. package/bundled-relay/node_modules/playwright-core/lib/server/webkit/wkConnection.js +0 -144
  296. package/bundled-relay/node_modules/playwright-core/lib/server/webkit/wkExecutionContext.js +0 -154
  297. package/bundled-relay/node_modules/playwright-core/lib/server/webkit/wkInput.js +0 -181
  298. package/bundled-relay/node_modules/playwright-core/lib/server/webkit/wkInterceptableRequest.js +0 -197
  299. package/bundled-relay/node_modules/playwright-core/lib/server/webkit/wkPage.js +0 -1159
  300. package/bundled-relay/node_modules/playwright-core/lib/server/webkit/wkProvisionalPage.js +0 -83
  301. package/bundled-relay/node_modules/playwright-core/lib/server/webkit/wkWorkers.js +0 -105
  302. package/bundled-relay/node_modules/playwright-core/lib/third_party/pixelmatch.js +0 -255
  303. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/ariaSnapshot.js +0 -455
  304. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/assert.js +0 -31
  305. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/colors.js +0 -72
  306. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/cssParser.js +0 -245
  307. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/cssTokenizer.js +0 -1051
  308. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/headers.js +0 -53
  309. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/locatorGenerators.js +0 -689
  310. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/locatorParser.js +0 -176
  311. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/locatorUtils.js +0 -81
  312. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/lruCache.js +0 -51
  313. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/manualPromise.js +0 -114
  314. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/mimeType.js +0 -459
  315. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/multimap.js +0 -80
  316. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/protocolFormatter.js +0 -81
  317. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/protocolMetainfo.js +0 -330
  318. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/rtti.js +0 -43
  319. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/selectorParser.js +0 -386
  320. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/semaphore.js +0 -54
  321. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/stackTrace.js +0 -158
  322. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/stringUtils.js +0 -204
  323. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/time.js +0 -49
  324. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/timeoutRunner.js +0 -66
  325. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/entries.js +0 -16
  326. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/snapshotRenderer.js +0 -499
  327. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/snapshotServer.js +0 -120
  328. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/snapshotStorage.js +0 -89
  329. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/traceLoader.js +0 -131
  330. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/traceModel.js +0 -365
  331. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/traceModernizer.js +0 -400
  332. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV3.js +0 -16
  333. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV4.js +0 -16
  334. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV5.js +0 -16
  335. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV6.js +0 -16
  336. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV7.js +0 -16
  337. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/trace/versions/traceV8.js +0 -16
  338. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/traceUtils.js +0 -58
  339. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/types.js +0 -16
  340. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/urlMatch.js +0 -190
  341. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/utilityScriptSerializers.js +0 -251
  342. package/bundled-relay/node_modules/playwright-core/lib/utils/isomorphic/yaml.js +0 -84
  343. package/bundled-relay/node_modules/playwright-core/lib/utils.js +0 -111
  344. package/bundled-relay/node_modules/playwright-core/lib/utilsBundle.js +0 -109
  345. package/bundled-relay/node_modules/playwright-core/lib/utilsBundleImpl/index.js +0 -218
  346. package/bundled-relay/node_modules/playwright-core/lib/utilsBundleImpl/xdg-open +0 -1066
  347. package/bundled-relay/node_modules/playwright-core/lib/vite/htmlReport/index.html +0 -84
  348. package/bundled-relay/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DYBRYzYX.css +0 -1
  349. package/bundled-relay/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DadYNm1I.js +0 -32
  350. package/bundled-relay/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  351. package/bundled-relay/node_modules/playwright-core/lib/vite/recorder/assets/index-BSjZa4pk.css +0 -1
  352. package/bundled-relay/node_modules/playwright-core/lib/vite/recorder/assets/index-BhTWtUlo.js +0 -193
  353. package/bundled-relay/node_modules/playwright-core/lib/vite/recorder/index.html +0 -29
  354. package/bundled-relay/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +0 -9
  355. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-a5XoALAZ.js +0 -32
  356. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-CJSZINFr.js +0 -266
  357. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +0 -9
  358. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.DYBRYzYX.css +0 -1
  359. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  360. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.7ch9cixO.css +0 -1
  361. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/index.BDwrLSGN.js +0 -2
  362. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/index.BVu7tZDe.css +0 -1
  363. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/index.html +0 -43
  364. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/manifest.webmanifest +0 -16
  365. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +0 -9
  366. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +0 -21
  367. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +0 -5
  368. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/uiMode.Btcz36p_.css +0 -1
  369. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CQJ9SCIQ.js +0 -5
  370. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +0 -17
  371. package/bundled-relay/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +0 -32
  372. package/bundled-relay/node_modules/playwright-core/lib/zipBundle.js +0 -34
  373. package/bundled-relay/node_modules/playwright-core/lib/zipBundleImpl.js +0 -5
  374. package/bundled-relay/node_modules/playwright-core/package.json +0 -43
  375. package/bundled-relay/node_modules/playwright-core/types/protocol.d.ts +0 -23824
  376. package/bundled-relay/node_modules/playwright-core/types/structs.d.ts +0 -45
  377. package/bundled-relay/node_modules/playwright-core/types/types.d.ts +0 -22843
@@ -4976,8 +4976,8 @@ var require_raw_body = __commonJS({
4976
4976
  type: "entity.too.large"
4977
4977
  }));
4978
4978
  }
4979
- var state2 = stream._readableState;
4980
- if (stream._decoder || state2 && (state2.encoding || state2.decoder)) {
4979
+ var state = stream._readableState;
4980
+ if (stream._decoder || state && (state.encoding || state.decoder)) {
4981
4981
  return done(createError(500, "stream encoding should not be set", {
4982
4982
  type: "stream.encoding.set"
4983
4983
  }));
@@ -22629,6 +22629,7 @@ var ERROR_CODES = {
22629
22629
  // 步骤类
22630
22630
  ERR_INVALID_STEP: "ERR_INVALID_STEP",
22631
22631
  ERR_STEP_EXECUTION_FAILED: "ERR_STEP_EXECUTION_FAILED",
22632
+ ERR_STEP_TIMEOUT: "ERR_STEP_TIMEOUT",
22632
22633
  // Runtime 类
22633
22634
  ERR_RUNTIME_NOT_AVAILABLE: "ERR_RUNTIME_NOT_AVAILABLE",
22634
22635
  ERR_RUNTIME_BUSY: "ERR_RUNTIME_BUSY",
@@ -22726,46 +22727,6 @@ var FileService = class {
22726
22727
  }
22727
22728
  };
22728
22729
 
22729
- // relay/src/cdp-bridge/index.ts
22730
- import { chromium } from "playwright-core";
22731
- var state = null;
22732
- async function connectToChrome(port = 9222) {
22733
- const cdpUrl = `http://127.0.0.1:${port}`;
22734
- console.log(`[CDP] Connecting to Chrome via CDP at ${cdpUrl}`);
22735
- const browser = await chromium.connectOverCDP(cdpUrl);
22736
- const contexts = browser.contexts();
22737
- const context = contexts[0] ?? await browser.newContext();
22738
- state = { browser, context };
22739
- console.log("[CDP] Connected to Chrome via CDP \u2713");
22740
- return state;
22741
- }
22742
- async function getActivePage(context) {
22743
- const pages = context.pages();
22744
- if (pages.length === 0) {
22745
- return await context.newPage();
22746
- }
22747
- return pages[pages.length - 1];
22748
- }
22749
- var CDPController = class {
22750
- constructor(cdpPort = 9222) {
22751
- this.cdpPort = cdpPort;
22752
- }
22753
- async ensureConnected() {
22754
- if (!state || !state.browser.isConnected()) {
22755
- return await connectToChrome(this.cdpPort);
22756
- }
22757
- return state;
22758
- }
22759
- async snapshot() {
22760
- const { context } = await this.ensureConnected();
22761
- const page = await getActivePage(context);
22762
- return await page.content();
22763
- }
22764
- isConnected() {
22765
- return state !== null && state.browser.isConnected();
22766
- }
22767
- };
22768
-
22769
22730
  // relay/src/workspace-service/index.ts
22770
22731
  import * as crypto2 from "crypto";
22771
22732
  import * as fs2 from "fs";
@@ -23275,6 +23236,7 @@ function mapTaskStatusToCurrentNodeStatus(status) {
23275
23236
  function mapToolNameToTaskOperation(tool) {
23276
23237
  switch (tool) {
23277
23238
  case "open_tab":
23239
+ case "close_tab":
23278
23240
  case "ensure_publish_ready":
23279
23241
  return "navigate";
23280
23242
  case "fill_field":
@@ -23285,6 +23247,10 @@ function mapToolNameToTaskOperation(tool) {
23285
23247
  case "switch_tab":
23286
23248
  case "apply_search_filters":
23287
23249
  return "click";
23250
+ case "present_page_activity":
23251
+ return "unknown";
23252
+ case "invoke_page_request":
23253
+ return "extract_api_payload";
23288
23254
  case "collect_search_list":
23289
23255
  case "collect_search_item_details":
23290
23256
  case "collect_structured_data":
@@ -23339,6 +23305,8 @@ function buildTaskStatusView(input) {
23339
23305
  capability: input.capability,
23340
23306
  currentOperation: input.currentOperation,
23341
23307
  progress,
23308
+ lastProgressAt: input.lastProgressAt,
23309
+ lastProgress: input.lastProgress ?? null,
23342
23310
  currentNode,
23343
23311
  browsingContext: input.browsingContext,
23344
23312
  captureWindow: input.captureWindow,
@@ -23520,6 +23488,8 @@ function applyTaskStatusView(task, overrides) {
23520
23488
  } : void 0,
23521
23489
  captureWindow,
23522
23490
  lastArtifact: overrides?.lastArtifact ?? task.statusView?.lastArtifact,
23491
+ lastProgressAt: overrides?.lastProgressAt ?? task.statusView?.lastProgressAt,
23492
+ lastProgress: overrides?.lastProgress ?? task.statusView?.lastProgress,
23523
23493
  progressHint: overrides?.progressHint
23524
23494
  });
23525
23495
  }
@@ -23613,6 +23583,107 @@ function applyArtifactCreatedToTask(task, payload) {
23613
23583
  lastArtifact: payload.artifact
23614
23584
  });
23615
23585
  }
23586
+ function applyStepProgressToTask(task, payload) {
23587
+ task.currentNodeId = payload.stepId;
23588
+ task.updatedAt = payload.updatedAt || (/* @__PURE__ */ new Date()).toISOString();
23589
+ applyTaskStatusView(task, {
23590
+ currentNodeId: payload.stepId,
23591
+ currentNodeTool: payload.tool,
23592
+ currentOperation: mapToolNameToTaskOperation(payload.tool),
23593
+ lastProgressAt: payload.updatedAt,
23594
+ lastProgress: payload.details ?? null,
23595
+ progressHint: payload.details?.progressHint ?? payload.details?.message
23596
+ });
23597
+ }
23598
+
23599
+ // relay/src/step-watchdog.ts
23600
+ var StepWatchdogRegistry = class {
23601
+ constructor(onExpired) {
23602
+ this.onExpired = onExpired;
23603
+ this.pending = /* @__PURE__ */ new Map();
23604
+ }
23605
+ start(input) {
23606
+ const existing = this.pending.get(input.taskId);
23607
+ const preservedStartedAt = existing && existing.stepId === input.stepId ? existing.startedAt : void 0;
23608
+ this.clear(input.taskId);
23609
+ const startedAt = preservedStartedAt || input.startedAt || (/* @__PURE__ */ new Date()).toISOString();
23610
+ const lastProgressAt = input.lastProgressAt || startedAt;
23611
+ const deadlineAt = new Date(new Date(lastProgressAt).getTime() + input.timeoutMs).toISOString();
23612
+ const entry = {
23613
+ taskId: input.taskId,
23614
+ stepId: input.stepId,
23615
+ tool: input.tool,
23616
+ timeoutMs: input.timeoutMs,
23617
+ startedAt,
23618
+ lastProgressAt,
23619
+ deadlineAt,
23620
+ lastProgress: input.lastProgress,
23621
+ timer: null
23622
+ };
23623
+ entry.timer = this.createTimer(entry);
23624
+ this.pending.set(input.taskId, entry);
23625
+ }
23626
+ progress(input) {
23627
+ const existing = this.pending.get(input.taskId);
23628
+ if (!existing || existing.stepId !== input.stepId) {
23629
+ return;
23630
+ }
23631
+ clearTimeout(existing.timer);
23632
+ existing.tool = input.tool ?? existing.tool;
23633
+ existing.lastProgressAt = input.updatedAt;
23634
+ existing.deadlineAt = new Date(new Date(input.updatedAt).getTime() + existing.timeoutMs).toISOString();
23635
+ existing.lastProgress = input.details;
23636
+ existing.timer = this.createTimer(existing);
23637
+ }
23638
+ clear(taskId, stepId) {
23639
+ const existing = this.pending.get(taskId);
23640
+ if (!existing) {
23641
+ return;
23642
+ }
23643
+ if (stepId && existing.stepId !== stepId) {
23644
+ return;
23645
+ }
23646
+ clearTimeout(existing.timer);
23647
+ this.pending.delete(taskId);
23648
+ }
23649
+ get(taskId) {
23650
+ const entry = this.pending.get(taskId);
23651
+ if (!entry) {
23652
+ return null;
23653
+ }
23654
+ return {
23655
+ taskId: entry.taskId,
23656
+ stepId: entry.stepId,
23657
+ tool: entry.tool,
23658
+ timeoutMs: entry.timeoutMs,
23659
+ startedAt: entry.startedAt,
23660
+ lastProgressAt: entry.lastProgressAt,
23661
+ deadlineAt: entry.deadlineAt,
23662
+ lastProgress: entry.lastProgress
23663
+ };
23664
+ }
23665
+ createTimer(entry) {
23666
+ const timer = setTimeout(() => {
23667
+ const current = this.pending.get(entry.taskId);
23668
+ if (!current || current !== entry) {
23669
+ return;
23670
+ }
23671
+ this.pending.delete(entry.taskId);
23672
+ this.onExpired({
23673
+ taskId: current.taskId,
23674
+ stepId: current.stepId,
23675
+ tool: current.tool,
23676
+ timeoutMs: current.timeoutMs,
23677
+ startedAt: current.startedAt,
23678
+ lastProgressAt: current.lastProgressAt,
23679
+ deadlineAt: current.deadlineAt,
23680
+ lastProgress: current.lastProgress
23681
+ });
23682
+ }, entry.timeoutMs);
23683
+ timer.unref?.();
23684
+ return timer;
23685
+ }
23686
+ };
23616
23687
 
23617
23688
  // relay/src/task-ready-registry.ts
23618
23689
  var TaskReadyRegistry = class {
@@ -23826,7 +23897,10 @@ function resolveFallbackStepIndex(task, currentStepIndex, result) {
23826
23897
  }
23827
23898
 
23828
23899
  // relay/src/task-node-result.ts
23829
- function mapNodeResultToExecutionStatus(result) {
23900
+ function resolveNodeExecutionStatusFromResult(result) {
23901
+ if (result.ok && result?.observation?.skipped === true) {
23902
+ return "skipped";
23903
+ }
23830
23904
  return result.ok ? "success" : "failed";
23831
23905
  }
23832
23906
  function normalizeNodeResult(result, normalizedError) {
@@ -23841,7 +23915,7 @@ function persistNodeResultOnTask(task, result) {
23841
23915
  if (!matchedNode) {
23842
23916
  return false;
23843
23917
  }
23844
- updateNodeExecutionStatus(task, result.nodeId, mapNodeResultToExecutionStatus(result), {
23918
+ updateNodeExecutionStatus(task, result.nodeId, resolveNodeExecutionStatusFromResult(result), {
23845
23919
  result,
23846
23920
  error: result.error
23847
23921
  });
@@ -24002,13 +24076,14 @@ function applyTaskExecutionResult(task, orchestrator, result) {
24002
24076
  } : null);
24003
24077
  const persistedNodeResult = normalizeNodeResult(result, normalizedNodeError);
24004
24078
  persistNodeResultOnTask(task, persistedNodeResult);
24079
+ const executionStatus = resolveNodeExecutionStatusFromResult(persistedNodeResult);
24005
24080
  const fallbackStepIndex = resolveFallbackStepIndex(
24006
24081
  task,
24007
24082
  orchestrator.currentStepIndex,
24008
24083
  persistedNodeResult
24009
24084
  );
24010
24085
  task.status = result.ok || fallbackStepIndex != null ? "running" : "failed";
24011
- task.currentNodeId = result.nodeId;
24086
+ task.currentNodeId = executionStatus === "skipped" ? void 0 : result.nodeId;
24012
24087
  task.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
24013
24088
  task.lastError = result.ok || fallbackStepIndex != null ? null : normalizedNodeError;
24014
24089
  return {
@@ -24024,7 +24099,6 @@ var app = (0, import_express.default)();
24024
24099
  var server = createServer(app);
24025
24100
  var PORT = process.env.PORT || DEFAULT_RELAY_PORT;
24026
24101
  var fileService = new FileService();
24027
- var cdpController = new CDPController();
24028
24102
  var workspaceService = new WorkspaceService();
24029
24103
  var templateExecutor = new TemplateExecutor();
24030
24104
  var CLIENT_RECONNECT_GRACE_MS = 3e3;
@@ -24033,6 +24107,12 @@ var STEP_DISPATCH_INTERVAL_MS = Number(process.env.STEP_DISPATCH_INTERVAL_MS) ||
24033
24107
  var RUNTIME_ONLINE_GRACE_MS = 1e4;
24034
24108
  var RUNTIME_PRESENCE_TTL_MS = 5 * 60 * 1e3;
24035
24109
  var COMPLETED_TASK_TTL_MS = Number(process.env.COMPLETED_TASK_TTL_MS) || 60 * 60 * 1e3;
24110
+ var STEP_WATCHDOG_FALLBACK_TIMEOUT_MS = 6e4;
24111
+ var STEP_WATCHDOG_DEFAULT_TIMEOUTS = {
24112
+ upload_assets: 18e4,
24113
+ fill_field: 12e4,
24114
+ collect_structured_data: 18e4
24115
+ };
24036
24116
  var runtimeConnections = /* @__PURE__ */ new Map();
24037
24117
  var runtimePresence = /* @__PURE__ */ new Map();
24038
24118
  var tasks = /* @__PURE__ */ new Map();
@@ -24046,6 +24126,9 @@ var taskReadyRegistry = new TaskReadyRegistry(
24046
24126
  );
24047
24127
  var taskTemplateCache = /* @__PURE__ */ new Map();
24048
24128
  var taskTemplateIndexCache = null;
24129
+ var stepWatchdogs = new StepWatchdogRegistry((entry) => {
24130
+ handleStepTimeout(entry);
24131
+ });
24049
24132
  var RELAY_PROJECT_ROOT = process.env.CHROMEAGENT_RELAY_PROJECT_ROOT ? path3.resolve(process.env.CHROMEAGENT_RELAY_PROJECT_ROOT) : path3.resolve(path3.dirname(fileURLToPath(import.meta.url)), "..", "..");
24050
24133
  app.use((req, res, next) => {
24051
24134
  res.header("Access-Control-Allow-Origin", "*");
@@ -24070,6 +24153,17 @@ function createRelayError(message, code = ERROR_CODES.ERR_INVALID_TASK, status =
24070
24153
  error.status = status;
24071
24154
  return error;
24072
24155
  }
24156
+ function resolveStepWatchdogTimeoutMs(step) {
24157
+ const explicitTimeoutMs = Number(step?.args?.timeoutMs);
24158
+ if (Number.isFinite(explicitTimeoutMs) && explicitTimeoutMs > 0) {
24159
+ return explicitTimeoutMs;
24160
+ }
24161
+ const defaultTimeoutMs = step.tool ? STEP_WATCHDOG_DEFAULT_TIMEOUTS[step.tool] : void 0;
24162
+ if (typeof defaultTimeoutMs === "number" && defaultTimeoutMs > 0) {
24163
+ return defaultTimeoutMs;
24164
+ }
24165
+ return STEP_WATCHDOG_FALLBACK_TIMEOUT_MS;
24166
+ }
24073
24167
  function registerRuntimeConnection(clientId, res) {
24074
24168
  const existing = runtimeConnections.get(clientId);
24075
24169
  if (existing && existing.res !== res) {
@@ -24687,6 +24781,9 @@ async function handleRuntimeMessage(msg) {
24687
24781
  case "node.status":
24688
24782
  handleNodeStatus(msg);
24689
24783
  break;
24784
+ case "step.progress":
24785
+ handleStepProgress(msg);
24786
+ break;
24690
24787
  case "capture.started":
24691
24788
  handleCaptureStarted(msg);
24692
24789
  break;
@@ -24739,6 +24836,24 @@ function handleNodeStarted(msg) {
24739
24836
  if (!task) {
24740
24837
  return;
24741
24838
  }
24839
+ const existingWatchdog = stepWatchdogs.get(payload.taskId);
24840
+ if (!existingWatchdog || existingWatchdog.stepId !== payload.nodeId) {
24841
+ const orchestrator = orchestrators.get(payload.taskId);
24842
+ const step = orchestrator ? resolveCurrentTaskExecutionStep(task, orchestrator) : null;
24843
+ if (step && step.nodeId === payload.nodeId) {
24844
+ const timeoutMs = resolveStepWatchdogTimeoutMs(step);
24845
+ if (typeof timeoutMs === "number") {
24846
+ stepWatchdogs.start({
24847
+ taskId: payload.taskId,
24848
+ stepId: payload.nodeId,
24849
+ tool: payload.tool,
24850
+ timeoutMs,
24851
+ startedAt: payload.updatedAt,
24852
+ lastProgressAt: payload.updatedAt
24853
+ });
24854
+ }
24855
+ }
24856
+ }
24742
24857
  task.currentNodeId = payload.nodeId;
24743
24858
  task.updatedAt = payload.updatedAt || (/* @__PURE__ */ new Date()).toISOString();
24744
24859
  updateTaskNodeProcessView(task, {
@@ -24771,6 +24886,23 @@ function handleNodeStatus(msg) {
24771
24886
  message: payload.message
24772
24887
  });
24773
24888
  }
24889
+ function handleStepProgress(msg) {
24890
+ const payload = msg.payload;
24891
+ const task = tasks.get(payload.taskId);
24892
+ if (!task) {
24893
+ return;
24894
+ }
24895
+ stepWatchdogs.progress(payload);
24896
+ task.currentNodeId = payload.stepId;
24897
+ task.updatedAt = payload.updatedAt || (/* @__PURE__ */ new Date()).toISOString();
24898
+ if (typeof payload.details?.tabId === "number") {
24899
+ task.currentTabId = payload.details.tabId;
24900
+ }
24901
+ if (typeof payload.details?.pageState === "string" && payload.details.pageState.length > 0) {
24902
+ task.currentPageId = payload.details.pageState;
24903
+ }
24904
+ applyStepProgressToTask(task, payload);
24905
+ }
24774
24906
  function handleNodeResult(msg) {
24775
24907
  const rawResult = msg.payload;
24776
24908
  logRelayFlow("Received node result", {
@@ -24800,10 +24932,12 @@ function handleNodeResult(msg) {
24800
24932
  }
24801
24933
  const resolvedTask = task;
24802
24934
  const resolvedOrchestrator = orchestrator;
24935
+ stepWatchdogs.clear(rawResult.taskId, rawResult.nodeId);
24803
24936
  const appliedResult = applyTaskExecutionResult(resolvedTask, resolvedOrchestrator, rawResult);
24937
+ const executionStatus = resolvedTask.payload?.nodeResults?.[rawResult.nodeId]?.status;
24804
24938
  updateTaskStatusView(resolvedTask, {
24805
- currentNodeId: rawResult.nodeId,
24806
- currentNodeStatus: appliedResult.persistedNodeResult.ok ? "succeeded" : "failed"
24939
+ currentNodeId: executionStatus === "skipped" ? void 0 : rawResult.nodeId,
24940
+ currentNodeStatus: executionStatus === "skipped" ? "skipped" : appliedResult.persistedNodeResult.ok ? "succeeded" : "failed"
24807
24941
  });
24808
24942
  if (appliedResult.shouldContinue) {
24809
24943
  continueOrchestrator(rawResult.taskId, rawResult.nodeId, appliedResult.nextStepIndex ?? void 0);
@@ -24836,7 +24970,11 @@ function handleTaskStatus(msg) {
24836
24970
  task.lastTriggeredNavigation = status.lastTriggeredNavigation ?? task.lastTriggeredNavigation;
24837
24971
  task.browsingContexts = Array.isArray(status.browsingContexts) ? status.browsingContexts : task.browsingContexts;
24838
24972
  task.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
24839
- task.statusView = status.statusView ?? task.statusView;
24973
+ task.statusView = status.statusView ? {
24974
+ ...status.statusView,
24975
+ lastProgressAt: status.statusView.lastProgressAt ?? task.statusView?.lastProgressAt,
24976
+ lastProgress: status.statusView.lastProgress ?? task.statusView?.lastProgress ?? null
24977
+ } : task.statusView;
24840
24978
  if (!task.statusView) {
24841
24979
  updateTaskStatusView(task, {
24842
24980
  currentNodeId: status.currentNodeId
@@ -24845,15 +24983,18 @@ function handleTaskStatus(msg) {
24845
24983
  if (status.status === "queued") {
24846
24984
  resolveTaskReady(status.taskId);
24847
24985
  } else if (status.status === "failed") {
24986
+ stepWatchdogs.clear(status.taskId);
24848
24987
  rejectTaskReady(status.taskId, task.lastError || createRelayError("Task failed before ready", ERROR_CODES.ERR_RUNTIME_NOT_AVAILABLE, 503));
24849
24988
  orchestrators.delete(status.taskId);
24850
24989
  notifyRuntimeTaskFinalized(task, "failed");
24851
24990
  void handleBatchTaskTerminal(status.taskId, "failed", task.lastError);
24852
24991
  } else if (status.status === "completed") {
24992
+ stepWatchdogs.clear(status.taskId);
24853
24993
  rejectTaskReady(status.taskId, createRelayError("Task completed before orchestrator start", ERROR_CODES.ERR_TASK_TIMEOUT, 500));
24854
24994
  notifyRuntimeTaskFinalized(task, "completed");
24855
24995
  void handleBatchTaskTerminal(status.taskId, "completed", null);
24856
24996
  } else if (status.status === "cancelled") {
24997
+ stepWatchdogs.clear(status.taskId);
24857
24998
  rejectTaskReady(status.taskId, createRelayError("Task cancelled before completion", ERROR_CODES.ERR_TASK_TIMEOUT, 499));
24858
24999
  orchestrators.delete(status.taskId);
24859
25000
  notifyRuntimeTaskFinalized(task, "cancelled");
@@ -25481,16 +25622,6 @@ app.get("/api/file/content/:fileId", async (req, res) => {
25481
25622
  res.status(500).json({ ok: false, error: { code: ERROR_CODES.ERR_FILE_PREPARE_FAILED, message: err.message } });
25482
25623
  }
25483
25624
  });
25484
- app.post("/api/debug/snapshot", async (req, res) => {
25485
- try {
25486
- const { taskId } = req.body;
25487
- const task = tasks.get(taskId);
25488
- const snapshot = await cdpController.snapshot();
25489
- res.json({ ok: true, task, snapshot });
25490
- } catch (err) {
25491
- res.status(500).json({ ok: false, error: { code: ERROR_CODES.ERR_RUNTIME_NOT_AVAILABLE, message: err.message } });
25492
- }
25493
- });
25494
25625
  app.get("/health", (req, res) => {
25495
25626
  res.json({ status: "ok", runtimes: runtimeConnections.size, tasks: tasks.size });
25496
25627
  });
@@ -25511,6 +25642,60 @@ function startOrchestrator(taskId) {
25511
25642
  orchestrators.set(taskId, orchestrator);
25512
25643
  void sendNextStep(taskId);
25513
25644
  }
25645
+ function handleStepTimeout(entry) {
25646
+ const task = tasks.get(entry.taskId);
25647
+ const orchestrator = orchestrators.get(entry.taskId);
25648
+ if (!task || !orchestrator) {
25649
+ return;
25650
+ }
25651
+ const currentStep = resolveCurrentTaskExecutionStep(task, orchestrator);
25652
+ if (!currentStep || currentStep.nodeId !== entry.stepId) {
25653
+ return;
25654
+ }
25655
+ const diagnosticReason = entry.lastProgress ? entry.lastProgress.phase === "wait_for_login" ? "waiting_login_stalled" : "progress_stalled" : "no_progress_reported";
25656
+ const timeoutResult = {
25657
+ type: "node.result",
25658
+ taskId: entry.taskId,
25659
+ nodeId: entry.stepId,
25660
+ tool: entry.tool || currentStep.tool,
25661
+ ok: false,
25662
+ status: "failed",
25663
+ observation: {
25664
+ error: `Step timed out after ${entry.timeoutMs}ms without progress`,
25665
+ code: ERROR_CODES.ERR_STEP_TIMEOUT,
25666
+ executor: "relay_watchdog"
25667
+ },
25668
+ error: {
25669
+ code: ERROR_CODES.ERR_STEP_TIMEOUT,
25670
+ message: `Step timed out after ${entry.timeoutMs}ms without progress`,
25671
+ details: {
25672
+ timeoutAt: entry.deadlineAt,
25673
+ startedAt: entry.startedAt,
25674
+ lastProgressAt: entry.lastProgressAt,
25675
+ timeoutMs: entry.timeoutMs,
25676
+ tool: entry.tool || currentStep.tool,
25677
+ stepId: entry.stepId,
25678
+ currentTabId: task.currentTabId ?? null,
25679
+ currentPageState: task.statusView?.lastProgress?.pageState ?? task.currentPageId ?? null,
25680
+ diagnosticReason,
25681
+ lastProgress: entry.lastProgress ?? null
25682
+ }
25683
+ },
25684
+ timestamp: Date.now()
25685
+ };
25686
+ logRelayFlow("Step watchdog timed out", {
25687
+ taskId: entry.taskId,
25688
+ stepId: entry.stepId,
25689
+ timeoutMs: entry.timeoutMs,
25690
+ diagnosticReason
25691
+ });
25692
+ handleNodeResult({
25693
+ type: "node.result",
25694
+ requestId: null,
25695
+ timestamp: Date.now(),
25696
+ payload: timeoutResult
25697
+ });
25698
+ }
25514
25699
  async function sendNextStep(taskId) {
25515
25700
  console.log(`[Relay] sendNextStep \u88AB\u8C03\u7528: ${taskId}`);
25516
25701
  const task = tasks.get(taskId);
@@ -25530,6 +25715,7 @@ async function sendNextStep(taskId) {
25530
25715
  }
25531
25716
  console.log(`[Relay] \u5F53\u524D\u8282\u70B9\u7D22\u5F15: ${orch.currentStepIndex}, \u603B\u8282\u70B9\u6570: ${executionLength}`);
25532
25717
  if (orch.currentStepIndex >= executionLength) {
25718
+ stepWatchdogs.clear(taskId);
25533
25719
  task.status = "completed";
25534
25720
  task.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
25535
25721
  updateTaskStatusView(task, {
@@ -25543,6 +25729,7 @@ async function sendNextStep(taskId) {
25543
25729
  }
25544
25730
  const step = markTaskExecutionDispatch(task, orch);
25545
25731
  if (!step) {
25732
+ stepWatchdogs.clear(taskId);
25546
25733
  task.status = "failed";
25547
25734
  task.lastError = {
25548
25735
  code: ERROR_CODES.ERR_INVALID_TASK,
@@ -25570,6 +25757,7 @@ async function sendNextStep(taskId) {
25570
25757
  try {
25571
25758
  targetRuntimeId = requireTaskRuntimeId(task);
25572
25759
  } catch (error) {
25760
+ stepWatchdogs.clear(taskId);
25573
25761
  task.status = "failed";
25574
25762
  task.lastError = {
25575
25763
  code: error?.code || ERROR_CODES.ERR_RUNTIME_NOT_AVAILABLE,
@@ -25585,6 +25773,7 @@ async function sendNextStep(taskId) {
25585
25773
  }
25586
25774
  const sent = await sendToClientWithGracePeriod(targetRuntimeId, stepMessage);
25587
25775
  if (!sent) {
25776
+ stepWatchdogs.clear(taskId);
25588
25777
  task.status = "failed";
25589
25778
  task.lastError = {
25590
25779
  code: ERROR_CODES.ERR_RUNTIME_NOT_AVAILABLE,
@@ -25598,6 +25787,18 @@ async function sendNextStep(taskId) {
25598
25787
  void handleBatchTaskTerminal(taskId, "failed", task.lastError);
25599
25788
  return;
25600
25789
  }
25790
+ const watchdogTimeoutMs = resolveStepWatchdogTimeoutMs(step);
25791
+ if (typeof watchdogTimeoutMs === "number") {
25792
+ const startedAt = (/* @__PURE__ */ new Date()).toISOString();
25793
+ stepWatchdogs.start({
25794
+ taskId,
25795
+ stepId: step.nodeId,
25796
+ tool: step.tool,
25797
+ timeoutMs: watchdogTimeoutMs,
25798
+ startedAt,
25799
+ lastProgressAt: startedAt
25800
+ });
25801
+ }
25601
25802
  console.log(`[Relay] Sent node ${orch.currentStepIndex + 1}/${executionLength} for task ${taskId}`);
25602
25803
  }
25603
25804
  function continueOrchestrator(taskId, completedNodeId, nextStepIndex) {
@@ -3,8 +3,5 @@
3
3
  "private": true,
4
4
  "type": "module",
5
5
  "version": "1.0.0",
6
- "description": "Bundled runtime dependencies for the oc-browser-relay OpenClaw plugin.",
7
- "dependencies": {
8
- "playwright-core": "^1.58.2"
9
- }
6
+ "description": "Bundled runtime dependencies for the oc-browser-relay OpenClaw plugin."
10
7
  }
@@ -95,6 +95,59 @@
95
95
  ]
96
96
  }
97
97
  },
98
+ "apiSources": {
99
+ "live_metrics_overview": {
100
+ "method": "GET",
101
+ "urlVariants": [
102
+ {
103
+ "whenPath": "payload.dateType",
104
+ "equals": "today",
105
+ "url": "https://sycm.taobao.com/portal/live/new/index/overview/v3.json"
106
+ },
107
+ {
108
+ "default": true,
109
+ "url": "https://sycm.taobao.com/portal/coreIndex/new/overview/v3.json"
110
+ }
111
+ ],
112
+ "query": {
113
+ "needCycleCrc": "true",
114
+ "dateType": "{{payload.dateType}}",
115
+ "dateRange": "{{payload.dateRange}}",
116
+ "_": "{{runtime.timestamp}}",
117
+ "token": "{{session.token}}"
118
+ },
119
+ "headers": {
120
+ "sycm-referer": "/portal/home.htm"
121
+ },
122
+ "responsePath": "content.data.data",
123
+ "metaPath": "content.data"
124
+ },
125
+ "live_metrics_trend": {
126
+ "method": "GET",
127
+ "urlVariants": [
128
+ {
129
+ "whenPath": "payload.dateType",
130
+ "equals": "today",
131
+ "url": "https://sycm.taobao.com/portal/live/new/index/trend/v3.json"
132
+ },
133
+ {
134
+ "default": true,
135
+ "url": "https://sycm.taobao.com/portal/coreIndex/new/trend/v3.json"
136
+ }
137
+ ],
138
+ "query": {
139
+ "dateType": "{{payload.dateType}}",
140
+ "dateRange": "{{payload.dateRange}}",
141
+ "_": "{{runtime.timestamp}}",
142
+ "token": "{{session.token}}"
143
+ },
144
+ "headers": {
145
+ "sycm-referer": "/portal/home.htm"
146
+ },
147
+ "responsePath": "content.data.data",
148
+ "metaPath": "content.data"
149
+ }
150
+ },
98
151
  "crawlerHints": {
99
152
  "structuredDataExtractors": {
100
153
  "live_metrics": {
@@ -118,6 +171,38 @@
118
171
  "meta": "sources.live_metrics.meta"
119
172
  }
120
173
  }
174
+ },
175
+ "live_metrics_direct": {
176
+ "observationSources": [
177
+ {
178
+ "sourceId": "live_overview",
179
+ "nodeIdArg": "overviewNodeId",
180
+ "sourceType": "step_observation",
181
+ "observationPath": "$self"
182
+ },
183
+ {
184
+ "sourceId": "live_trend",
185
+ "nodeIdArg": "trendNodeId",
186
+ "sourceType": "step_observation",
187
+ "observationPath": "$self"
188
+ }
189
+ ],
190
+ "outputSchema": {
191
+ "root": {
192
+ "overview": "sources.live_overview.response.data",
193
+ "trend": "sources.live_trend.response.data",
194
+ "capturedAt": "sources.live_overview.invokedAt",
195
+ "meta": {
196
+ "overviewUrl": "sources.live_overview.response.url",
197
+ "trendUrl": "sources.live_trend.response.url",
198
+ "overviewStatus": "sources.live_overview.response.status",
199
+ "trendStatus": "sources.live_trend.response.status",
200
+ "interval": "sources.live_overview.response.meta.interval",
201
+ "timestamp": "sources.live_overview.response.meta.timestamp",
202
+ "updateTime": "sources.live_overview.response.meta.updateTime"
203
+ }
204
+ }
205
+ }
121
206
  }
122
207
  }
123
208
  }
@@ -35,20 +35,20 @@
35
35
  "scrollIntoView": true,
36
36
  "requireVisible": true,
37
37
  "preHover": true,
38
- "hoverDurationMsRange": [100, 220],
39
- "preClickPauseMsRange": [60, 160]
38
+ "hoverDurationMsRange": [70, 180],
39
+ "preClickPauseMsRange": [40, 120]
40
40
  },
41
41
  "humanBehavior": {
42
- "cursorMoveSpeedRange": [78, 128],
43
- "cursorStepDelayMsRange": [4, 10],
44
- "cursorVisibleDurationMsRange": [180, 320],
45
- "minCursorStepCount": 12,
46
- "mouseDownUpDelayMsRange": [40, 120],
47
- "postClickPauseMsRange": [60, 180]
42
+ "cursorMoveSpeedRange": [110, 180],
43
+ "cursorStepDelayMsRange": [3, 7],
44
+ "cursorVisibleDurationMsRange": [120, 220],
45
+ "minCursorStepCount": 9,
46
+ "mouseDownUpDelayMsRange": [30, 80],
47
+ "postClickPauseMsRange": [40, 120]
48
48
  },
49
49
  "actionPausePolicy": {
50
- "minPauseMs": 160,
51
- "maxPauseMs": 900
50
+ "minPauseMs": 120,
51
+ "maxPauseMs": 560
52
52
  }
53
53
  },
54
54
  "actions": {