@captain-app/openclaw 2026.2.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 (1686) hide show
  1. package/CHANGELOG.md +1528 -0
  2. package/LICENSE +21 -0
  3. package/README-header.png +0 -0
  4. package/README.md +539 -0
  5. package/assets/avatar-placeholder.svg +19 -0
  6. package/assets/chrome-extension/README.md +22 -0
  7. package/assets/chrome-extension/background.js +438 -0
  8. package/assets/chrome-extension/icons/icon128.png +0 -0
  9. package/assets/chrome-extension/icons/icon16.png +0 -0
  10. package/assets/chrome-extension/icons/icon32.png +0 -0
  11. package/assets/chrome-extension/icons/icon48.png +0 -0
  12. package/assets/chrome-extension/manifest.json +25 -0
  13. package/assets/chrome-extension/options.html +196 -0
  14. package/assets/chrome-extension/options.js +59 -0
  15. package/assets/dmg-background-small.png +0 -0
  16. package/assets/dmg-background.png +0 -0
  17. package/dist/accounts-ClnuDahN.js +250 -0
  18. package/dist/accounts-DzBgAM3C.js +251 -0
  19. package/dist/acp-cli-BEDDkzXH.js +926 -0
  20. package/dist/acp-cli-CwV4mdnW.js +923 -0
  21. package/dist/agent-CArjbSeE.js +695 -0
  22. package/dist/agent-CB7x5HLT.js +695 -0
  23. package/dist/agent-scope-BbT4OG2N.js +545 -0
  24. package/dist/agent-scope-C_O6Vpl0.js +545 -0
  25. package/dist/agent-scope-Csu2B6AM.js +606 -0
  26. package/dist/archive-CWrnG1CH.js +85 -0
  27. package/dist/archive-ccN9aDgq.js +85 -0
  28. package/dist/audit-DXPkQ275.js +1686 -0
  29. package/dist/audit-eH7nwgsM.js +1686 -0
  30. package/dist/auth-health-Bj7Gjbv0.js +149 -0
  31. package/dist/auth-health-CjjJhHey.js +149 -0
  32. package/dist/auth-nnRYiqpH.js +192 -0
  33. package/dist/auth-profiles-DVLfuixr.js +2954 -0
  34. package/dist/auth-y1BLPUhX.js +192 -0
  35. package/dist/boolean-Wzu0-e0P.js +30 -0
  36. package/dist/brew-Cqi8b49_.js +46 -0
  37. package/dist/brew-DyBGNK8A.js +46 -0
  38. package/dist/build-info.json +5 -0
  39. package/dist/call-B7EveN4V.js +252 -0
  40. package/dist/call-vuUQIjOj.js +252 -0
  41. package/dist/canvas-host/a2ui/.bundle.hash +1 -0
  42. package/dist/canvas-host/a2ui/a2ui.bundle.js +17780 -0
  43. package/dist/canvas-host/a2ui/index.html +307 -0
  44. package/dist/channel-options-CJfmOkol.js +32 -0
  45. package/dist/channel-options-lFguMTz1.js +62 -0
  46. package/dist/channel-selection-BmND9mWj.js +51 -0
  47. package/dist/channel-selection-cGhL9G0c.js +51 -0
  48. package/dist/channel-summary-B4G513Eb.js +1154 -0
  49. package/dist/channel-summary-MCwBCa5y.js +1154 -0
  50. package/dist/channels-cli-C2Of1mZG.js +1411 -0
  51. package/dist/channels-cli-DFynrP1H.js +1413 -0
  52. package/dist/channels-status-issues-YohTjZ-I.js +18 -0
  53. package/dist/channels-status-issues-ZcR1U-m5.js +18 -0
  54. package/dist/chrome-B3IuUad-.js +1953 -0
  55. package/dist/chrome-BZ9K48w9.js +1973 -0
  56. package/dist/clack-prompter-B9yLhyOm.js +92 -0
  57. package/dist/clack-prompter-BybM9xdL.js +92 -0
  58. package/dist/cli/daemon-cli.js +2 -0
  59. package/dist/cli-BJZdJwug.js +89 -0
  60. package/dist/cli-BQSoKu3d.js +86 -0
  61. package/dist/cli-utils-CO4jEMn0.js +43 -0
  62. package/dist/cli-utils-gtE-0a0D.js +43 -0
  63. package/dist/client-DPqNOpK3.js +1609 -0
  64. package/dist/client-DySXIFCA.js +1609 -0
  65. package/dist/command-format-CFzL448l.js +52 -0
  66. package/dist/command-format-DELazozB.js +52 -0
  67. package/dist/command-format-ayFsmwwz.js +38 -0
  68. package/dist/command-options-CsjxK4cZ.js +33 -0
  69. package/dist/commands-BRe9VTyU.js +229 -0
  70. package/dist/completion-cli-DlkjK0iC.js +390 -0
  71. package/dist/completion-cli-E6Pt41AL.js +387 -0
  72. package/dist/config-BtSTwPcH.js +4882 -0
  73. package/dist/config-DfMIMT-f.js +4881 -0
  74. package/dist/config-_d7_WcRv.js +5623 -0
  75. package/dist/config-guard-wSnm-U8a.js +5628 -0
  76. package/dist/configure-CPHAFKlg.js +895 -0
  77. package/dist/configure-DK1XgXYx.js +894 -0
  78. package/dist/constants-CNTiY-ZN.js +65 -0
  79. package/dist/constants-hpmbslG7.js +65 -0
  80. package/dist/control-service-CqX5g_ko.js +61 -0
  81. package/dist/control-service-o6xe3hEb.js +61 -0
  82. package/dist/control-ui/apple-touch-icon.png +0 -0
  83. package/dist/control-ui/assets/index-RwcW4Xl0.css +1 -0
  84. package/dist/control-ui/assets/index-ryaCcbyp.js +4584 -0
  85. package/dist/control-ui/assets/index-ryaCcbyp.js.map +1 -0
  86. package/dist/control-ui/favicon-32.png +0 -0
  87. package/dist/control-ui/favicon.ico +0 -0
  88. package/dist/control-ui/favicon.svg +22 -0
  89. package/dist/control-ui/index.html +17 -0
  90. package/dist/cron-cli-BoSaDgvH.js +453 -0
  91. package/dist/cron-cli-qVandvsD.js +456 -0
  92. package/dist/daemon-cli-C4gGWa15.js +760 -0
  93. package/dist/daemon-cli-DV_X0Krf.js +761 -0
  94. package/dist/daemon-runtime-D5hbSrdO.js +460 -0
  95. package/dist/daemon-runtime-DXUfrXBC.js +460 -0
  96. package/dist/deliver-BxK5nI2P.js +2587 -0
  97. package/dist/deliver-Dwzg9LUd.js +2557 -0
  98. package/dist/deliver-qpYZp20m.js +2587 -0
  99. package/dist/deps-CUXtMV9d.js +27 -0
  100. package/dist/deps-WBvZpFV_.js +27 -0
  101. package/dist/devices-cli-B2s18Qrh.js +207 -0
  102. package/dist/devices-cli-D1UEtMUJ.js +204 -0
  103. package/dist/directory-cli-BXQbrkfM.js +247 -0
  104. package/dist/directory-cli-CqA7tRbq.js +244 -0
  105. package/dist/dispatcher-Dyv7T-1r.js +160 -0
  106. package/dist/dns-cli-CWxKD22D.js +198 -0
  107. package/dist/dns-cli-CzKr_Fxj.js +201 -0
  108. package/dist/docs-cli-BNyxUbWr.js +159 -0
  109. package/dist/docs-cli-DYpTbo3i.js +161 -0
  110. package/dist/doctor-C8fDYZLq.js +2583 -0
  111. package/dist/doctor-hYcqp7c0.js +2585 -0
  112. package/dist/entry.js +1326 -0
  113. package/dist/env-l7QVNj6j.js +32 -0
  114. package/dist/errors-CMCg46fK.js +1952 -0
  115. package/dist/exec-B8JKbXKW.js +246 -0
  116. package/dist/exec-BMnoMcZW.js +1099 -0
  117. package/dist/exec-HEWTMJ7j.js +246 -0
  118. package/dist/exec-approvals-DtrnHx6M.js +1026 -0
  119. package/dist/exec-approvals-Y42bE8ud.js +1026 -0
  120. package/dist/exec-approvals-cli-CIedYxP3.js +385 -0
  121. package/dist/exec-approvals-cli-xpbxnj4O.js +388 -0
  122. package/dist/extensionAPI.js +66572 -0
  123. package/dist/format-Dzy9uRLE.js +34 -0
  124. package/dist/format-sj0fELBK.js +34 -0
  125. package/dist/gateway-cli-5A-KNLEC.js +16635 -0
  126. package/dist/gateway-cli-B8kS4chb.js +16637 -0
  127. package/dist/gateway-rpc-15n38Ize.js +28 -0
  128. package/dist/gateway-rpc-TMVRgGfj.js +28 -0
  129. package/dist/github-copilot-auth-DVZj4Zgh.js +1104 -0
  130. package/dist/github-copilot-auth-DeGYyLY9.js +1104 -0
  131. package/dist/github-copilot-token-B3SA95yo.js +103 -0
  132. package/dist/github-copilot-token-C8XFYz0i.js +103 -0
  133. package/dist/github-copilot-token-CnxakiSC.js +103 -0
  134. package/dist/gmail-setup-utils-CWPC386a.js +428 -0
  135. package/dist/gmail-setup-utils-eJVB5Ewp.js +428 -0
  136. package/dist/health-format-B0tMTk3C.js +1189 -0
  137. package/dist/health-format-DaURVaUn.js +1188 -0
  138. package/dist/help-format-CEsRHU2f.js +17 -0
  139. package/dist/help-format-GuCWws6r.js +17 -0
  140. package/dist/helpers-BEJ-phFf.js +25 -0
  141. package/dist/helpers-BtbBZVKZ.js +10 -0
  142. package/dist/helpers-C12w9zxf.js +10 -0
  143. package/dist/helpers-CzjGJZmJ.js +25 -0
  144. package/dist/hooks/bundled/boot-md/HOOK.md +19 -0
  145. package/dist/hooks/bundled/command-logger/HOOK.md +122 -0
  146. package/dist/hooks/bundled/session-memory/HOOK.md +109 -0
  147. package/dist/hooks/bundled/soul-evil/HOOK.md +71 -0
  148. package/dist/hooks-cli-BZCMAnW2.js +1058 -0
  149. package/dist/hooks-cli-D0CEFg3P.js +1061 -0
  150. package/dist/hooks-status-Bn7_O8PM.js +443 -0
  151. package/dist/hooks-status-BrWVfIn0.js +443 -0
  152. package/dist/image-BS022pvv.js +1421 -0
  153. package/dist/image-BzJtY34J.js +629 -0
  154. package/dist/image-CBqmIbQQ.js +629 -0
  155. package/dist/index.js +5809 -0
  156. package/dist/installs-BP4K5L33.js +388 -0
  157. package/dist/installs-DOpTt7VZ.js +388 -0
  158. package/dist/is-main-B4o72sqg.js +25 -0
  159. package/dist/is-main-PYGa3tDA.js +25 -0
  160. package/dist/links-B4nk2iDf.js +15 -0
  161. package/dist/links-DwjRqxgR.js +15 -0
  162. package/dist/loader-Cn4EV_pf.js +63690 -0
  163. package/dist/logging-CS3tbYDj.js +15 -0
  164. package/dist/logging-CY-Q5cwf.js +1 -0
  165. package/dist/logging-DhiLkhLw.js +15 -0
  166. package/dist/logging-pqyrk15z.js +1 -0
  167. package/dist/login-qr-CD164Aw1.js +478 -0
  168. package/dist/login-qr-D7Zdgji2.js +478 -0
  169. package/dist/login-qr-YgILJ4VC.js +475 -0
  170. package/dist/logs-cli-BdS0Uv0I.js +227 -0
  171. package/dist/logs-cli-CqSN1GzB.js +230 -0
  172. package/dist/manager-CfGY5zND.js +2870 -0
  173. package/dist/manager-CjuBqFRL.js +2870 -0
  174. package/dist/manager-CoBEAQKm.js +2872 -0
  175. package/dist/manifest-registry-Bwjq9Iev.js +668 -0
  176. package/dist/manifest-registry-D2Yntqcb.js +668 -0
  177. package/dist/message-channel-Cjsiqxok.js +105 -0
  178. package/dist/message-channel-D6v_oPAg.js +105 -0
  179. package/dist/model-selection-Cv5Ox_tY.js +2956 -0
  180. package/dist/model-selection-Dr-5U5-l.js +2708 -0
  181. package/dist/models-cli-B39ckynD.js +2541 -0
  182. package/dist/models-cli-DoiYsBYw.js +2544 -0
  183. package/dist/net-CFCxaipF.js +137 -0
  184. package/dist/net-DKJPqXuW.js +137 -0
  185. package/dist/node-cli-C_FYF-RA.js +1456 -0
  186. package/dist/node-cli-DWPoNsQS.js +1459 -0
  187. package/dist/node-service-DcJREOww.js +67 -0
  188. package/dist/node-service-DuZ9Us9h.js +67 -0
  189. package/dist/nodes-cli-Elo6tlen.js +1210 -0
  190. package/dist/nodes-cli-zqryRUWB.js +1207 -0
  191. package/dist/nodes-screen-C4aCrxie.js +157 -0
  192. package/dist/nodes-screen-D4PSynkR.js +157 -0
  193. package/dist/note-CQhSvgQv.js +73 -0
  194. package/dist/note-_C44YfAQ.js +73 -0
  195. package/dist/onboard-channels-CHBDi-ZA.js +670 -0
  196. package/dist/onboard-channels-DOEKyxaL.js +670 -0
  197. package/dist/onboard-skills-BUTXREDZ.js +3327 -0
  198. package/dist/onboard-skills-CSLYZmZA.js +3327 -0
  199. package/dist/onboarding-CgKb8b39.js +3232 -0
  200. package/dist/openclaw-root-9ILYSmJ9.js +84 -0
  201. package/dist/openclaw-root-Cvotktkd.js +84 -0
  202. package/dist/pairing-cli-B4UGR2at.js +114 -0
  203. package/dist/pairing-cli-BWDDl8cf.js +117 -0
  204. package/dist/pairing-labels-ClZ-fTWT.js +9 -0
  205. package/dist/pairing-labels-Ds7BPOkj.js +9 -0
  206. package/dist/pairing-store-DDLNuzmx.js +391 -0
  207. package/dist/pairing-store-DRn08lZD.js +391 -0
  208. package/dist/parse-87ybtYW1.js +23 -0
  209. package/dist/parse-OCFfznr3.js +23 -0
  210. package/dist/parse-log-line-C9aL5PUL.js +44 -0
  211. package/dist/parse-log-line-DxRaGzQb.js +44 -0
  212. package/dist/parse-timeout-CFqNj7No.js +16 -0
  213. package/dist/parse-timeout-DV8NQQWk.js +16 -0
  214. package/dist/path-env-C7kiJUgG.js +77 -0
  215. package/dist/path-env-DEj4CiFN.js +77 -0
  216. package/dist/paths-B-q1nXdY.js +43 -0
  217. package/dist/paths-B1kfl4h5.js +164 -0
  218. package/dist/paths-B4kigINg.js +40 -0
  219. package/dist/paths-CHGbP1-A.js +43 -0
  220. package/dist/paths-scjhy7N2.js +180 -0
  221. package/dist/pi-embedded-helpers-C19wUpMB.js +8451 -0
  222. package/dist/pi-embedded-helpers-CT5VuLCb.js +1293 -0
  223. package/dist/pi-embedded-helpers-Dl8e5Rf8.js +1293 -0
  224. package/dist/pi-model-discovery-B6CsmK6Y.js +20 -0
  225. package/dist/pi-model-discovery-DsRqYJLy.js +20 -0
  226. package/dist/pi-model-discovery-EhM2JAQo.js +20 -0
  227. package/dist/pi-tools.policy-BvkSDFDN.js +229 -0
  228. package/dist/plugin-auto-enable-Bd_StZzz.js +461 -0
  229. package/dist/plugin-auto-enable-DBhXb_0x.js +461 -0
  230. package/dist/plugin-sdk/agent-scope-DdwUKIOe.js +606 -0
  231. package/dist/plugin-sdk/chrome-G8apFa5p.js +1953 -0
  232. package/dist/plugin-sdk/command-format-qUVxzqYm.js +52 -0
  233. package/dist/plugin-sdk/config-Cm1M7tgH.js +5623 -0
  234. package/dist/plugin-sdk/deliver-Cl8uowiO.js +2557 -0
  235. package/dist/plugin-sdk/exec-Cm9b2r9Q.js +1107 -0
  236. package/dist/plugin-sdk/github-copilot-token-BHNcM4_B.js +103 -0
  237. package/dist/plugin-sdk/image-7PgoS2VD.js +1421 -0
  238. package/dist/plugin-sdk/index.d.ts +8908 -0
  239. package/dist/plugin-sdk/index.js +70888 -0
  240. package/dist/plugin-sdk/login-qr-qTALvWi2.js +475 -0
  241. package/dist/plugin-sdk/manager-Cs3EQZCb.js +2870 -0
  242. package/dist/plugin-sdk/model-selection-BgC1E1a7.js +2708 -0
  243. package/dist/plugin-sdk/paths-BYpoyRv5.js +164 -0
  244. package/dist/plugin-sdk/paths-DNQE-bvr.js +40 -0
  245. package/dist/plugin-sdk/pi-embedded-helpers-5jNqW_dE.js +8755 -0
  246. package/dist/plugin-sdk/pi-model-discovery-BUGEht9A.js +20 -0
  247. package/dist/plugin-sdk/pw-ai-COTtei4a.js +1649 -0
  248. package/dist/plugin-sdk/qmd-manager-ClSwiAJl.js +615 -0
  249. package/dist/plugin-sdk/redact-2AzjOfk2.js +94 -0
  250. package/dist/plugin-sdk/rolldown-runtime-Cbj13DAv.js +20 -0
  251. package/dist/plugin-sdk/sqlite-gCW7MlLs.js +215 -0
  252. package/dist/plugin-sdk/transcript-events-DGF257vD.js +17 -0
  253. package/dist/plugins-C3Bm-HQV.js +494 -0
  254. package/dist/plugins-QJjTXliB.js +495 -0
  255. package/dist/plugins-cli-DTci0JQb.js +443 -0
  256. package/dist/plugins-cli-wJsN1HHK.js +440 -0
  257. package/dist/ports-CiW9dmMq.js +96 -0
  258. package/dist/program-BWpTHh1I.js +188 -0
  259. package/dist/progress-Bcjniu7m.js +133 -0
  260. package/dist/progress-CvaSPjS9.js +133 -0
  261. package/dist/prompt-style-CFsleyxV.js +9 -0
  262. package/dist/prompt-style-DYJdrXyV.js +9 -0
  263. package/dist/prompts-Bt9fwsg2.js +10 -0
  264. package/dist/prompts-CudpZgTI.js +10 -0
  265. package/dist/pw-ai-08F3GD-3.js +1649 -0
  266. package/dist/pw-ai-ZmHxHQnx.js +1651 -0
  267. package/dist/pw-ai-tNPuRNn3.js +1649 -0
  268. package/dist/qmd-manager-2r-4n3sP.js +617 -0
  269. package/dist/qmd-manager-CF52nuBg.js +615 -0
  270. package/dist/qmd-manager-HEm5H2mk.js +616 -0
  271. package/dist/redact-BICFkpn7.js +97 -0
  272. package/dist/redact-BIMJ3ntQ.js +94 -0
  273. package/dist/redact-KzWHRS5J.js +97 -0
  274. package/dist/register.subclis-D2K25c84.js +348 -0
  275. package/dist/register.subclis-Dd8LbOLi.js +342 -0
  276. package/dist/reply-5UNWRwMn.js +63693 -0
  277. package/dist/restart-sentinel-Cr0vUxB8.js +65 -0
  278. package/dist/restart-sentinel-DUemCjgU.js +65 -0
  279. package/dist/rolldown-runtime-Cbj13DAv.js +20 -0
  280. package/dist/routes-C6UpTPas.js +2410 -0
  281. package/dist/routes-ClNyEvlm.js +2410 -0
  282. package/dist/rpc-D0mf7DIw.js +95 -0
  283. package/dist/rpc-DYdOrgd9.js +95 -0
  284. package/dist/run-main-CojI7gWx.js +194 -0
  285. package/dist/runtime-guard-68M_evhb.js +60 -0
  286. package/dist/runtime-guard-DkjmhnBD.js +60 -0
  287. package/dist/sandbox-Ca81z3Tw.js +2924 -0
  288. package/dist/sandbox-cli-D75GApgp.js +459 -0
  289. package/dist/sandbox-cli-E4SJsC1C.js +462 -0
  290. package/dist/sandbox-knontqD9.js +2925 -0
  291. package/dist/security-cli-BLihvXO-.js +503 -0
  292. package/dist/security-cli-IGQCsK4g.js +506 -0
  293. package/dist/server-context-B9GX5GOI.js +740 -0
  294. package/dist/server-context-BFH7HB_M.js +740 -0
  295. package/dist/server-node-events-CTdHBiEA.js +218 -0
  296. package/dist/server-node-events-DAV14qPr.js +215 -0
  297. package/dist/service-BZNBq9hq.js +680 -0
  298. package/dist/service-C-BLXx9U.js +680 -0
  299. package/dist/service-audit-BfJv4NqZ.js +542 -0
  300. package/dist/service-audit-Bw3M2OEI.js +542 -0
  301. package/dist/shared-5SH-45AX.js +74 -0
  302. package/dist/shared-BxRm5uLU.js +74 -0
  303. package/dist/shared-C80Rmxsd.js +150 -0
  304. package/dist/shared-fGK6_D2v.js +150 -0
  305. package/dist/skills-Bhp0l6UK.js +693 -0
  306. package/dist/skills-Tky2kCMO.js +694 -0
  307. package/dist/skills-cli-6rCClAE4.js +287 -0
  308. package/dist/skills-cli-C4nLCrLw.js +290 -0
  309. package/dist/skills-status-CENcKr3I.js +187 -0
  310. package/dist/skills-status-DX1eUYvk.js +187 -0
  311. package/dist/sqlite-CmdZSZRx.js +197 -0
  312. package/dist/sqlite-Dnmf3LS7.js +215 -0
  313. package/dist/sqlite-QDf0yuU0.js +215 -0
  314. package/dist/status-BSfGAp2D.js +27 -0
  315. package/dist/status-Bp_2NMjt.js +27 -0
  316. package/dist/status-C0ANDr0T.js +3140 -0
  317. package/dist/status-CCHBIZnm.js +21 -0
  318. package/dist/status-Vuqbw2Bb.js +21 -0
  319. package/dist/status.update-BZW5r8Su.js +79 -0
  320. package/dist/status.update-BnD93_O8.js +79 -0
  321. package/dist/subsystem-CAq3uyo7.js +834 -0
  322. package/dist/system-cli-Bb9zmCO1.js +83 -0
  323. package/dist/system-cli-TIIQ04ls.js +80 -0
  324. package/dist/systemd-0Qa_nGqe.js +438 -0
  325. package/dist/systemd-Czb0Xsm7.js +438 -0
  326. package/dist/systemd-hints-CWoEOQRb.js +19 -0
  327. package/dist/systemd-hints-Cv3RN_mZ.js +19 -0
  328. package/dist/systemd-linger-CsdvcIoS.js +75 -0
  329. package/dist/systemd-linger-DKUFHcLn.js +75 -0
  330. package/dist/table-DNPESyNj.js +279 -0
  331. package/dist/table-DS4-gmkV.js +279 -0
  332. package/dist/tailnet-Bg_vE5qi.js +42 -0
  333. package/dist/tailnet-CrNWlQRJ.js +42 -0
  334. package/dist/tailscale-CBv58toW.js +252 -0
  335. package/dist/tailscale-DCnMs7_q.js +225 -0
  336. package/dist/tool-display-BEACy9rK.js +795 -0
  337. package/dist/tool-display-NYQnSpdo.js +795 -0
  338. package/dist/transcript-events-CsB1Saa6.js +17 -0
  339. package/dist/transcript-events-DDYvbmRV.js +17 -0
  340. package/dist/transcript-events-JLH5W4He.js +17 -0
  341. package/dist/tui--NY0rnjr.js +2542 -0
  342. package/dist/tui-DqJfGtvM.js +2543 -0
  343. package/dist/tui-cli-BuHNY6wF.js +54 -0
  344. package/dist/tui-cli-LMFV982e.js +57 -0
  345. package/dist/update-CRpHtCgz.js +317 -0
  346. package/dist/update-D3qruxhj.js +317 -0
  347. package/dist/update-cli-CFF-pslM.js +948 -0
  348. package/dist/update-cli-cn9pEMX7.js +951 -0
  349. package/dist/update-runner-CxGU142L.js +1221 -0
  350. package/dist/update-runner-DNobz_ft.js +1221 -0
  351. package/dist/utils-CKSrBNwq.js +192 -0
  352. package/dist/utils-DX85MiPR.js +188 -0
  353. package/dist/webhooks-cli-BGtt2HAR.js +312 -0
  354. package/dist/webhooks-cli-DHLZrEO_.js +309 -0
  355. package/dist/widearea-dns-BpG7ATO8.js +127 -0
  356. package/dist/widearea-dns-D4wkCJly.js +127 -0
  357. package/dist/ws-3zr8WUwL.js +13 -0
  358. package/dist/ws-log-BXcT2xQk.js +267 -0
  359. package/dist/ws-log-DbDIUsgz.js +267 -0
  360. package/dist/ws-lzrgabja.js +13 -0
  361. package/dist/wsl-D2O2qOrl.js +160 -0
  362. package/docs/.i18n/README.md +31 -0
  363. package/docs/.i18n/glossary.zh-CN.json +190 -0
  364. package/docs/.i18n/zh-CN.tm.jsonl +1329 -0
  365. package/docs/CNAME +1 -0
  366. package/docs/_config.yml +53 -0
  367. package/docs/_layouts/default.html +145 -0
  368. package/docs/assets/markdown.css +179 -0
  369. package/docs/assets/openclaw-logo-text-dark.png +0 -0
  370. package/docs/assets/openclaw-logo-text.png +0 -0
  371. package/docs/assets/pixel-lobster.svg +60 -0
  372. package/docs/assets/showcase/agents-ui.jpg +0 -0
  373. package/docs/assets/showcase/bambu-cli.png +0 -0
  374. package/docs/assets/showcase/codexmonitor.png +0 -0
  375. package/docs/assets/showcase/gohome-grafana.png +0 -0
  376. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  377. package/docs/assets/showcase/oura-health.png +0 -0
  378. package/docs/assets/showcase/padel-cli.svg +11 -0
  379. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  380. package/docs/assets/showcase/papla-tts.jpg +0 -0
  381. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  382. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  383. package/docs/assets/showcase/roborock-status.svg +13 -0
  384. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  385. package/docs/assets/showcase/snag.png +0 -0
  386. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  387. package/docs/assets/showcase/wienerlinien.png +0 -0
  388. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  389. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  390. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  391. package/docs/assets/terminal.css +473 -0
  392. package/docs/assets/theme.js +55 -0
  393. package/docs/automation/auth-monitoring.md +44 -0
  394. package/docs/automation/cron-jobs.md +468 -0
  395. package/docs/automation/cron-vs-heartbeat.md +282 -0
  396. package/docs/automation/gmail-pubsub.md +256 -0
  397. package/docs/automation/poll.md +69 -0
  398. package/docs/automation/webhook.md +163 -0
  399. package/docs/bedrock.md +176 -0
  400. package/docs/brave-search.md +41 -0
  401. package/docs/broadcast-groups.md +442 -0
  402. package/docs/channels/bluebubbles.md +338 -0
  403. package/docs/channels/discord.md +475 -0
  404. package/docs/channels/feishu.md +507 -0
  405. package/docs/channels/googlechat.md +250 -0
  406. package/docs/channels/grammy.md +31 -0
  407. package/docs/channels/imessage.md +299 -0
  408. package/docs/channels/index.md +46 -0
  409. package/docs/channels/line.md +186 -0
  410. package/docs/channels/location.md +56 -0
  411. package/docs/channels/matrix.md +233 -0
  412. package/docs/channels/mattermost.md +138 -0
  413. package/docs/channels/msteams.md +768 -0
  414. package/docs/channels/nextcloud-talk.md +136 -0
  415. package/docs/channels/nostr.md +233 -0
  416. package/docs/channels/signal.md +202 -0
  417. package/docs/channels/slack.md +548 -0
  418. package/docs/channels/telegram.md +750 -0
  419. package/docs/channels/tlon.md +132 -0
  420. package/docs/channels/troubleshooting.md +29 -0
  421. package/docs/channels/twitch.md +379 -0
  422. package/docs/channels/whatsapp.md +404 -0
  423. package/docs/channels/zalo.md +189 -0
  424. package/docs/channels/zalouser.md +140 -0
  425. package/docs/cli/acp.md +170 -0
  426. package/docs/cli/agent.md +24 -0
  427. package/docs/cli/agents.md +75 -0
  428. package/docs/cli/approvals.md +50 -0
  429. package/docs/cli/browser.md +107 -0
  430. package/docs/cli/channels.md +79 -0
  431. package/docs/cli/config.md +50 -0
  432. package/docs/cli/configure.md +33 -0
  433. package/docs/cli/cron.md +42 -0
  434. package/docs/cli/dashboard.md +16 -0
  435. package/docs/cli/devices.md +67 -0
  436. package/docs/cli/directory.md +63 -0
  437. package/docs/cli/dns.md +23 -0
  438. package/docs/cli/docs.md +15 -0
  439. package/docs/cli/doctor.md +41 -0
  440. package/docs/cli/gateway.md +199 -0
  441. package/docs/cli/health.md +21 -0
  442. package/docs/cli/hooks.md +304 -0
  443. package/docs/cli/index.md +1029 -0
  444. package/docs/cli/logs.md +24 -0
  445. package/docs/cli/memory.md +45 -0
  446. package/docs/cli/message.md +239 -0
  447. package/docs/cli/models.md +79 -0
  448. package/docs/cli/node.md +112 -0
  449. package/docs/cli/nodes.md +73 -0
  450. package/docs/cli/onboard.md +29 -0
  451. package/docs/cli/pairing.md +21 -0
  452. package/docs/cli/plugins.md +62 -0
  453. package/docs/cli/reset.md +17 -0
  454. package/docs/cli/sandbox.md +152 -0
  455. package/docs/cli/security.md +26 -0
  456. package/docs/cli/sessions.md +16 -0
  457. package/docs/cli/setup.md +29 -0
  458. package/docs/cli/skills.md +26 -0
  459. package/docs/cli/status.md +26 -0
  460. package/docs/cli/system.md +60 -0
  461. package/docs/cli/tui.md +23 -0
  462. package/docs/cli/uninstall.md +17 -0
  463. package/docs/cli/update.md +98 -0
  464. package/docs/cli/voicecall.md +34 -0
  465. package/docs/cli/webhooks.md +25 -0
  466. package/docs/concepts/agent-loop.md +146 -0
  467. package/docs/concepts/agent-workspace.md +233 -0
  468. package/docs/concepts/agent.md +123 -0
  469. package/docs/concepts/architecture.md +129 -0
  470. package/docs/concepts/channel-routing.md +114 -0
  471. package/docs/concepts/compaction.md +61 -0
  472. package/docs/concepts/context.md +161 -0
  473. package/docs/concepts/group-messages.md +84 -0
  474. package/docs/concepts/groups.md +373 -0
  475. package/docs/concepts/markdown-formatting.md +130 -0
  476. package/docs/concepts/memory.md +546 -0
  477. package/docs/concepts/messages.md +154 -0
  478. package/docs/concepts/model-failover.md +149 -0
  479. package/docs/concepts/model-providers.md +316 -0
  480. package/docs/concepts/models.md +208 -0
  481. package/docs/concepts/multi-agent.md +376 -0
  482. package/docs/concepts/oauth.md +145 -0
  483. package/docs/concepts/presence.md +102 -0
  484. package/docs/concepts/queue.md +89 -0
  485. package/docs/concepts/retry.md +69 -0
  486. package/docs/concepts/session-pruning.md +122 -0
  487. package/docs/concepts/session-tool.md +193 -0
  488. package/docs/concepts/session.md +188 -0
  489. package/docs/concepts/sessions.md +10 -0
  490. package/docs/concepts/streaming.md +135 -0
  491. package/docs/concepts/system-prompt.md +115 -0
  492. package/docs/concepts/timezone.md +91 -0
  493. package/docs/concepts/typebox.md +289 -0
  494. package/docs/concepts/typing-indicators.md +68 -0
  495. package/docs/concepts/usage-tracking.md +35 -0
  496. package/docs/date-time.md +128 -0
  497. package/docs/debug/node-issue.md +83 -0
  498. package/docs/debugging.md +162 -0
  499. package/docs/diagnostics/flags.md +91 -0
  500. package/docs/docs.json +1587 -0
  501. package/docs/environment.md +81 -0
  502. package/docs/experiments/onboarding-config-protocol.md +40 -0
  503. package/docs/experiments/plans/cron-add-hardening.md +63 -0
  504. package/docs/experiments/plans/group-policy-hardening.md +40 -0
  505. package/docs/experiments/plans/openresponses-gateway.md +123 -0
  506. package/docs/experiments/proposals/model-config.md +36 -0
  507. package/docs/experiments/research/memory.md +228 -0
  508. package/docs/gateway/authentication.md +145 -0
  509. package/docs/gateway/background-process.md +93 -0
  510. package/docs/gateway/bonjour.md +167 -0
  511. package/docs/gateway/bridge-protocol.md +89 -0
  512. package/docs/gateway/cli-backends.md +223 -0
  513. package/docs/gateway/configuration-examples.md +606 -0
  514. package/docs/gateway/configuration.md +3393 -0
  515. package/docs/gateway/discovery.md +116 -0
  516. package/docs/gateway/doctor.md +282 -0
  517. package/docs/gateway/gateway-lock.md +34 -0
  518. package/docs/gateway/health.md +35 -0
  519. package/docs/gateway/heartbeat.md +302 -0
  520. package/docs/gateway/index.md +328 -0
  521. package/docs/gateway/local-models.md +150 -0
  522. package/docs/gateway/logging.md +113 -0
  523. package/docs/gateway/multiple-gateways.md +112 -0
  524. package/docs/gateway/openai-http-api.md +118 -0
  525. package/docs/gateway/openresponses-http-api.md +317 -0
  526. package/docs/gateway/pairing.md +99 -0
  527. package/docs/gateway/protocol.md +221 -0
  528. package/docs/gateway/remote-gateway-readme.md +157 -0
  529. package/docs/gateway/remote.md +127 -0
  530. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +128 -0
  531. package/docs/gateway/sandboxing.md +193 -0
  532. package/docs/gateway/security/formal-verification.md +164 -0
  533. package/docs/gateway/security/index.md +825 -0
  534. package/docs/gateway/tailscale.md +127 -0
  535. package/docs/gateway/tools-invoke-http-api.md +85 -0
  536. package/docs/gateway/troubleshooting.md +767 -0
  537. package/docs/help/faq.md +2830 -0
  538. package/docs/help/index.md +21 -0
  539. package/docs/help/troubleshooting.md +98 -0
  540. package/docs/hooks/soul-evil.md +69 -0
  541. package/docs/hooks.md +913 -0
  542. package/docs/images/feishu-step2-create-app.png +0 -0
  543. package/docs/images/feishu-step3-credentials.png +0 -0
  544. package/docs/images/feishu-step4-permissions.png +0 -0
  545. package/docs/images/feishu-step5-bot-capability.png +0 -0
  546. package/docs/images/feishu-step6-event-subscription.png +0 -0
  547. package/docs/images/groups-flow.svg +52 -0
  548. package/docs/images/mobile-ui-screenshot.png +0 -0
  549. package/docs/index.md +258 -0
  550. package/docs/install/ansible.md +208 -0
  551. package/docs/install/bun.md +59 -0
  552. package/docs/install/development-channels.md +75 -0
  553. package/docs/install/docker.md +567 -0
  554. package/docs/install/index.md +185 -0
  555. package/docs/install/installer.md +123 -0
  556. package/docs/install/migrating.md +192 -0
  557. package/docs/install/nix.md +96 -0
  558. package/docs/install/node.md +78 -0
  559. package/docs/install/uninstall.md +128 -0
  560. package/docs/install/updating.md +228 -0
  561. package/docs/logging.md +350 -0
  562. package/docs/multi-agent-sandbox-tools.md +395 -0
  563. package/docs/network.md +54 -0
  564. package/docs/nodes/audio.md +114 -0
  565. package/docs/nodes/camera.md +156 -0
  566. package/docs/nodes/images.md +72 -0
  567. package/docs/nodes/index.md +341 -0
  568. package/docs/nodes/location-command.md +113 -0
  569. package/docs/nodes/media-understanding.md +379 -0
  570. package/docs/nodes/talk.md +90 -0
  571. package/docs/nodes/voicewake.md +65 -0
  572. package/docs/northflank.mdx +53 -0
  573. package/docs/perplexity.md +80 -0
  574. package/docs/pi-dev.md +70 -0
  575. package/docs/pi.md +612 -0
  576. package/docs/platforms/android.md +148 -0
  577. package/docs/platforms/digitalocean.md +262 -0
  578. package/docs/platforms/exe-dev.md +125 -0
  579. package/docs/platforms/fly.md +486 -0
  580. package/docs/platforms/gcp.md +503 -0
  581. package/docs/platforms/hetzner.md +330 -0
  582. package/docs/platforms/index.md +53 -0
  583. package/docs/platforms/ios.md +107 -0
  584. package/docs/platforms/linux.md +94 -0
  585. package/docs/platforms/mac/bundled-gateway.md +73 -0
  586. package/docs/platforms/mac/canvas.md +125 -0
  587. package/docs/platforms/mac/child-process.md +69 -0
  588. package/docs/platforms/mac/dev-setup.md +102 -0
  589. package/docs/platforms/mac/health.md +34 -0
  590. package/docs/platforms/mac/icon.md +31 -0
  591. package/docs/platforms/mac/logging.md +57 -0
  592. package/docs/platforms/mac/menu-bar.md +81 -0
  593. package/docs/platforms/mac/peekaboo.md +65 -0
  594. package/docs/platforms/mac/permissions.md +44 -0
  595. package/docs/platforms/mac/release.md +85 -0
  596. package/docs/platforms/mac/remote.md +83 -0
  597. package/docs/platforms/mac/signing.md +47 -0
  598. package/docs/platforms/mac/skills.md +33 -0
  599. package/docs/platforms/mac/voice-overlay.md +60 -0
  600. package/docs/platforms/mac/voicewake.md +67 -0
  601. package/docs/platforms/mac/webchat.md +41 -0
  602. package/docs/platforms/mac/xpc.md +61 -0
  603. package/docs/platforms/macos-vm.md +281 -0
  604. package/docs/platforms/macos.md +203 -0
  605. package/docs/platforms/oracle.md +303 -0
  606. package/docs/platforms/raspberry-pi.md +358 -0
  607. package/docs/platforms/windows.md +159 -0
  608. package/docs/plugin.md +664 -0
  609. package/docs/plugins/agent-tools.md +99 -0
  610. package/docs/plugins/manifest.md +71 -0
  611. package/docs/plugins/voice-call.md +284 -0
  612. package/docs/plugins/zalouser.md +81 -0
  613. package/docs/prose.md +134 -0
  614. package/docs/providers/anthropic.md +152 -0
  615. package/docs/providers/claude-max-api-proxy.md +148 -0
  616. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  617. package/docs/providers/deepgram.md +93 -0
  618. package/docs/providers/github-copilot.md +72 -0
  619. package/docs/providers/glm.md +33 -0
  620. package/docs/providers/index.md +63 -0
  621. package/docs/providers/minimax.md +208 -0
  622. package/docs/providers/models.md +51 -0
  623. package/docs/providers/moonshot.md +142 -0
  624. package/docs/providers/ollama.md +223 -0
  625. package/docs/providers/openai.md +62 -0
  626. package/docs/providers/opencode.md +36 -0
  627. package/docs/providers/openrouter.md +37 -0
  628. package/docs/providers/qwen.md +53 -0
  629. package/docs/providers/synthetic.md +99 -0
  630. package/docs/providers/venice.md +267 -0
  631. package/docs/providers/vercel-ai-gateway.md +50 -0
  632. package/docs/providers/xiaomi.md +64 -0
  633. package/docs/providers/zai.md +36 -0
  634. package/docs/railway.mdx +99 -0
  635. package/docs/refactor/clawnet.md +417 -0
  636. package/docs/refactor/exec-host.md +316 -0
  637. package/docs/refactor/outbound-session-mirroring.md +85 -0
  638. package/docs/refactor/plugin-sdk.md +214 -0
  639. package/docs/refactor/strict-config.md +93 -0
  640. package/docs/reference/AGENTS.default.md +124 -0
  641. package/docs/reference/RELEASING.md +120 -0
  642. package/docs/reference/api-usage-costs.md +137 -0
  643. package/docs/reference/device-models.md +47 -0
  644. package/docs/reference/rpc.md +43 -0
  645. package/docs/reference/session-management-compaction.md +285 -0
  646. package/docs/reference/templates/AGENTS.dev.md +83 -0
  647. package/docs/reference/templates/AGENTS.md +218 -0
  648. package/docs/reference/templates/BOOT.md +10 -0
  649. package/docs/reference/templates/BOOTSTRAP.md +61 -0
  650. package/docs/reference/templates/HEARTBEAT.md +11 -0
  651. package/docs/reference/templates/IDENTITY.dev.md +47 -0
  652. package/docs/reference/templates/IDENTITY.md +27 -0
  653. package/docs/reference/templates/SOUL.dev.md +76 -0
  654. package/docs/reference/templates/SOUL.md +42 -0
  655. package/docs/reference/templates/TOOLS.dev.md +24 -0
  656. package/docs/reference/templates/TOOLS.md +46 -0
  657. package/docs/reference/templates/USER.dev.md +18 -0
  658. package/docs/reference/templates/USER.md +22 -0
  659. package/docs/reference/test.md +50 -0
  660. package/docs/reference/transcript-hygiene.md +129 -0
  661. package/docs/render.mdx +165 -0
  662. package/docs/scripts.md +28 -0
  663. package/docs/security/formal-verification.md +164 -0
  664. package/docs/start/getting-started.md +208 -0
  665. package/docs/start/hubs.md +185 -0
  666. package/docs/start/lore.md +219 -0
  667. package/docs/start/onboarding.md +110 -0
  668. package/docs/start/openclaw.md +241 -0
  669. package/docs/start/pairing.md +86 -0
  670. package/docs/start/setup.md +149 -0
  671. package/docs/start/showcase.md +416 -0
  672. package/docs/start/wizard.md +349 -0
  673. package/docs/testing.md +368 -0
  674. package/docs/token-use.md +112 -0
  675. package/docs/tools/agent-send.md +53 -0
  676. package/docs/tools/apply-patch.md +50 -0
  677. package/docs/tools/browser-linux-troubleshooting.md +139 -0
  678. package/docs/tools/browser-login.md +68 -0
  679. package/docs/tools/browser.md +576 -0
  680. package/docs/tools/chrome-extension.md +178 -0
  681. package/docs/tools/clawhub.md +257 -0
  682. package/docs/tools/creating-skills.md +54 -0
  683. package/docs/tools/elevated.md +57 -0
  684. package/docs/tools/exec-approvals.md +246 -0
  685. package/docs/tools/exec.md +179 -0
  686. package/docs/tools/firecrawl.md +61 -0
  687. package/docs/tools/index.md +509 -0
  688. package/docs/tools/llm-task.md +115 -0
  689. package/docs/tools/lobster.md +342 -0
  690. package/docs/tools/reactions.md +22 -0
  691. package/docs/tools/skills-config.md +76 -0
  692. package/docs/tools/skills.md +300 -0
  693. package/docs/tools/slash-commands.md +198 -0
  694. package/docs/tools/subagents.md +151 -0
  695. package/docs/tools/thinking.md +73 -0
  696. package/docs/tools/web.md +261 -0
  697. package/docs/tts.md +396 -0
  698. package/docs/tui.md +159 -0
  699. package/docs/vps.md +43 -0
  700. package/docs/web/control-ui.md +221 -0
  701. package/docs/web/dashboard.md +46 -0
  702. package/docs/web/index.md +116 -0
  703. package/docs/web/webchat.md +49 -0
  704. package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
  705. package/docs/whatsapp-openclaw.jpg +0 -0
  706. package/docs/zh-CN/AGENTS.md +59 -0
  707. package/docs/zh-CN/automation/auth-monitoring.md +47 -0
  708. package/docs/zh-CN/automation/cron-jobs.md +424 -0
  709. package/docs/zh-CN/automation/cron-vs-heartbeat.md +286 -0
  710. package/docs/zh-CN/automation/gmail-pubsub.md +249 -0
  711. package/docs/zh-CN/automation/poll.md +76 -0
  712. package/docs/zh-CN/automation/webhook.md +163 -0
  713. package/docs/zh-CN/bedrock.md +170 -0
  714. package/docs/zh-CN/brave-search.md +48 -0
  715. package/docs/zh-CN/broadcast-groups.md +449 -0
  716. package/docs/zh-CN/channels/bluebubbles.md +271 -0
  717. package/docs/zh-CN/channels/discord.md +468 -0
  718. package/docs/zh-CN/channels/feishu.md +513 -0
  719. package/docs/zh-CN/channels/googlechat.md +257 -0
  720. package/docs/zh-CN/channels/grammy.md +38 -0
  721. package/docs/zh-CN/channels/imessage.md +302 -0
  722. package/docs/zh-CN/channels/index.md +53 -0
  723. package/docs/zh-CN/channels/line.md +180 -0
  724. package/docs/zh-CN/channels/location.md +63 -0
  725. package/docs/zh-CN/channels/matrix.md +221 -0
  726. package/docs/zh-CN/channels/mattermost.md +144 -0
  727. package/docs/zh-CN/channels/msteams.md +775 -0
  728. package/docs/zh-CN/channels/nextcloud-talk.md +142 -0
  729. package/docs/zh-CN/channels/nostr.md +240 -0
  730. package/docs/zh-CN/channels/signal.md +209 -0
  731. package/docs/zh-CN/channels/slack.md +531 -0
  732. package/docs/zh-CN/channels/telegram.md +751 -0
  733. package/docs/zh-CN/channels/tlon.md +136 -0
  734. package/docs/zh-CN/channels/troubleshooting.md +36 -0
  735. package/docs/zh-CN/channels/twitch.md +385 -0
  736. package/docs/zh-CN/channels/whatsapp.md +411 -0
  737. package/docs/zh-CN/channels/zalo.md +196 -0
  738. package/docs/zh-CN/channels/zalouser.md +147 -0
  739. package/docs/zh-CN/cli/acp.md +173 -0
  740. package/docs/zh-CN/cli/agent.md +30 -0
  741. package/docs/zh-CN/cli/agents.md +82 -0
  742. package/docs/zh-CN/cli/approvals.md +57 -0
  743. package/docs/zh-CN/cli/browser.md +114 -0
  744. package/docs/zh-CN/cli/channels.md +86 -0
  745. package/docs/zh-CN/cli/config.md +57 -0
  746. package/docs/zh-CN/cli/configure.md +38 -0
  747. package/docs/zh-CN/cli/cron.md +43 -0
  748. package/docs/zh-CN/cli/dashboard.md +23 -0
  749. package/docs/zh-CN/cli/devices.md +74 -0
  750. package/docs/zh-CN/cli/directory.md +70 -0
  751. package/docs/zh-CN/cli/dns.md +30 -0
  752. package/docs/zh-CN/cli/docs.md +22 -0
  753. package/docs/zh-CN/cli/doctor.md +48 -0
  754. package/docs/zh-CN/cli/gateway.md +206 -0
  755. package/docs/zh-CN/cli/health.md +28 -0
  756. package/docs/zh-CN/cli/hooks.md +311 -0
  757. package/docs/zh-CN/cli/index.md +1032 -0
  758. package/docs/zh-CN/cli/logs.md +31 -0
  759. package/docs/zh-CN/cli/memory.md +52 -0
  760. package/docs/zh-CN/cli/message.md +246 -0
  761. package/docs/zh-CN/cli/models.md +85 -0
  762. package/docs/zh-CN/cli/node.md +115 -0
  763. package/docs/zh-CN/cli/nodes.md +80 -0
  764. package/docs/zh-CN/cli/onboard.md +36 -0
  765. package/docs/zh-CN/cli/pairing.md +28 -0
  766. package/docs/zh-CN/cli/plugins.md +66 -0
  767. package/docs/zh-CN/cli/reset.md +24 -0
  768. package/docs/zh-CN/cli/sandbox.md +158 -0
  769. package/docs/zh-CN/cli/security.md +33 -0
  770. package/docs/zh-CN/cli/sessions.md +23 -0
  771. package/docs/zh-CN/cli/setup.md +36 -0
  772. package/docs/zh-CN/cli/skills.md +33 -0
  773. package/docs/zh-CN/cli/status.md +33 -0
  774. package/docs/zh-CN/cli/system.md +63 -0
  775. package/docs/zh-CN/cli/tui.md +30 -0
  776. package/docs/zh-CN/cli/uninstall.md +24 -0
  777. package/docs/zh-CN/cli/update.md +101 -0
  778. package/docs/zh-CN/cli/voicecall.md +41 -0
  779. package/docs/zh-CN/cli/webhooks.md +32 -0
  780. package/docs/zh-CN/concepts/agent-loop.md +146 -0
  781. package/docs/zh-CN/concepts/agent-workspace.md +219 -0
  782. package/docs/zh-CN/concepts/agent.md +115 -0
  783. package/docs/zh-CN/concepts/architecture.md +123 -0
  784. package/docs/zh-CN/concepts/channel-routing.md +117 -0
  785. package/docs/zh-CN/concepts/compaction.md +67 -0
  786. package/docs/zh-CN/concepts/context.md +168 -0
  787. package/docs/zh-CN/concepts/group-messages.md +91 -0
  788. package/docs/zh-CN/concepts/groups.md +379 -0
  789. package/docs/zh-CN/concepts/markdown-formatting.md +117 -0
  790. package/docs/zh-CN/concepts/memory.md +412 -0
  791. package/docs/zh-CN/concepts/messages.md +141 -0
  792. package/docs/zh-CN/concepts/model-failover.md +145 -0
  793. package/docs/zh-CN/concepts/model-providers.md +320 -0
  794. package/docs/zh-CN/concepts/models.md +196 -0
  795. package/docs/zh-CN/concepts/multi-agent.md +372 -0
  796. package/docs/zh-CN/concepts/oauth.md +151 -0
  797. package/docs/zh-CN/concepts/presence.md +99 -0
  798. package/docs/zh-CN/concepts/queue.md +94 -0
  799. package/docs/zh-CN/concepts/retry.md +76 -0
  800. package/docs/zh-CN/concepts/session-pruning.md +129 -0
  801. package/docs/zh-CN/concepts/session-tool.md +200 -0
  802. package/docs/zh-CN/concepts/session.md +166 -0
  803. package/docs/zh-CN/concepts/sessions.md +17 -0
  804. package/docs/zh-CN/concepts/streaming.md +133 -0
  805. package/docs/zh-CN/concepts/system-prompt.md +101 -0
  806. package/docs/zh-CN/concepts/timezone.md +96 -0
  807. package/docs/zh-CN/concepts/typebox.md +284 -0
  808. package/docs/zh-CN/concepts/typing-indicators.md +74 -0
  809. package/docs/zh-CN/concepts/usage-tracking.md +42 -0
  810. package/docs/zh-CN/date-time.md +129 -0
  811. package/docs/zh-CN/debug/node-issue.md +90 -0
  812. package/docs/zh-CN/debugging.md +160 -0
  813. package/docs/zh-CN/diagnostics/flags.md +98 -0
  814. package/docs/zh-CN/environment.md +88 -0
  815. package/docs/zh-CN/experiments/onboarding-config-protocol.md +47 -0
  816. package/docs/zh-CN/experiments/plans/cron-add-hardening.md +70 -0
  817. package/docs/zh-CN/experiments/plans/group-policy-hardening.md +45 -0
  818. package/docs/zh-CN/experiments/plans/openresponses-gateway.md +121 -0
  819. package/docs/zh-CN/experiments/proposals/model-config.md +42 -0
  820. package/docs/zh-CN/experiments/research/memory.md +235 -0
  821. package/docs/zh-CN/gateway/authentication.md +142 -0
  822. package/docs/zh-CN/gateway/background-process.md +100 -0
  823. package/docs/zh-CN/gateway/bonjour.md +174 -0
  824. package/docs/zh-CN/gateway/bridge-protocol.md +86 -0
  825. package/docs/zh-CN/gateway/cli-backends.md +213 -0
  826. package/docs/zh-CN/gateway/configuration-examples.md +587 -0
  827. package/docs/zh-CN/gateway/configuration.md +3332 -0
  828. package/docs/zh-CN/gateway/discovery.md +123 -0
  829. package/docs/zh-CN/gateway/doctor.md +238 -0
  830. package/docs/zh-CN/gateway/gateway-lock.md +41 -0
  831. package/docs/zh-CN/gateway/health.md +42 -0
  832. package/docs/zh-CN/gateway/heartbeat.md +274 -0
  833. package/docs/zh-CN/gateway/index.md +335 -0
  834. package/docs/zh-CN/gateway/local-models.md +157 -0
  835. package/docs/zh-CN/gateway/logging.md +114 -0
  836. package/docs/zh-CN/gateway/multiple-gateways.md +119 -0
  837. package/docs/zh-CN/gateway/openai-http-api.md +125 -0
  838. package/docs/zh-CN/gateway/openresponses-http-api.md +317 -0
  839. package/docs/zh-CN/gateway/pairing.md +99 -0
  840. package/docs/zh-CN/gateway/protocol.md +220 -0
  841. package/docs/zh-CN/gateway/remote-gateway-readme.md +164 -0
  842. package/docs/zh-CN/gateway/remote.md +133 -0
  843. package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +135 -0
  844. package/docs/zh-CN/gateway/sandboxing.md +188 -0
  845. package/docs/zh-CN/gateway/security/formal-verification.md +169 -0
  846. package/docs/zh-CN/gateway/security/index.md +777 -0
  847. package/docs/zh-CN/gateway/tailscale.md +124 -0
  848. package/docs/zh-CN/gateway/tools-invoke-http-api.md +92 -0
  849. package/docs/zh-CN/gateway/troubleshooting.md +771 -0
  850. package/docs/zh-CN/help/faq.md +2628 -0
  851. package/docs/zh-CN/help/index.md +28 -0
  852. package/docs/zh-CN/help/troubleshooting.md +104 -0
  853. package/docs/zh-CN/hooks/soul-evil.md +72 -0
  854. package/docs/zh-CN/hooks.md +919 -0
  855. package/docs/zh-CN/index.md +264 -0
  856. package/docs/zh-CN/install/ansible.md +215 -0
  857. package/docs/zh-CN/install/bun.md +65 -0
  858. package/docs/zh-CN/install/development-channels.md +81 -0
  859. package/docs/zh-CN/install/docker.md +532 -0
  860. package/docs/zh-CN/install/index.md +193 -0
  861. package/docs/zh-CN/install/installer.md +128 -0
  862. package/docs/zh-CN/install/migrating.md +199 -0
  863. package/docs/zh-CN/install/nix.md +99 -0
  864. package/docs/zh-CN/install/node.md +85 -0
  865. package/docs/zh-CN/install/uninstall.md +135 -0
  866. package/docs/zh-CN/install/updating.md +233 -0
  867. package/docs/zh-CN/logging.md +329 -0
  868. package/docs/zh-CN/multi-agent-sandbox-tools.md +401 -0
  869. package/docs/zh-CN/network.md +59 -0
  870. package/docs/zh-CN/nodes/audio.md +120 -0
  871. package/docs/zh-CN/nodes/camera.md +162 -0
  872. package/docs/zh-CN/nodes/images.md +79 -0
  873. package/docs/zh-CN/nodes/index.md +348 -0
  874. package/docs/zh-CN/nodes/location-command.md +120 -0
  875. package/docs/zh-CN/nodes/media-understanding.md +380 -0
  876. package/docs/zh-CN/nodes/talk.md +97 -0
  877. package/docs/zh-CN/nodes/voicewake.md +72 -0
  878. package/docs/zh-CN/northflank.mdx +60 -0
  879. package/docs/zh-CN/perplexity.md +84 -0
  880. package/docs/zh-CN/pi-dev.md +77 -0
  881. package/docs/zh-CN/pi.md +619 -0
  882. package/docs/zh-CN/platforms/android.md +155 -0
  883. package/docs/zh-CN/platforms/digitalocean.md +269 -0
  884. package/docs/zh-CN/platforms/exe-dev.md +127 -0
  885. package/docs/zh-CN/platforms/fly.md +490 -0
  886. package/docs/zh-CN/platforms/gcp.md +510 -0
  887. package/docs/zh-CN/platforms/hetzner.md +337 -0
  888. package/docs/zh-CN/platforms/index.md +60 -0
  889. package/docs/zh-CN/platforms/ios.md +114 -0
  890. package/docs/zh-CN/platforms/linux.md +101 -0
  891. package/docs/zh-CN/platforms/mac/bundled-gateway.md +75 -0
  892. package/docs/zh-CN/platforms/mac/canvas.md +128 -0
  893. package/docs/zh-CN/platforms/mac/child-process.md +73 -0
  894. package/docs/zh-CN/platforms/mac/dev-setup.md +109 -0
  895. package/docs/zh-CN/platforms/mac/health.md +41 -0
  896. package/docs/zh-CN/platforms/mac/icon.md +38 -0
  897. package/docs/zh-CN/platforms/mac/logging.md +64 -0
  898. package/docs/zh-CN/platforms/mac/menu-bar.md +88 -0
  899. package/docs/zh-CN/platforms/mac/peekaboo.md +62 -0
  900. package/docs/zh-CN/platforms/mac/permissions.md +46 -0
  901. package/docs/zh-CN/platforms/mac/release.md +92 -0
  902. package/docs/zh-CN/platforms/mac/remote.md +90 -0
  903. package/docs/zh-CN/platforms/mac/signing.md +54 -0
  904. package/docs/zh-CN/platforms/mac/skills.md +40 -0
  905. package/docs/zh-CN/platforms/mac/voice-overlay.md +67 -0
  906. package/docs/zh-CN/platforms/mac/voicewake.md +74 -0
  907. package/docs/zh-CN/platforms/mac/webchat.md +43 -0
  908. package/docs/zh-CN/platforms/mac/xpc.md +68 -0
  909. package/docs/zh-CN/platforms/macos-vm.md +288 -0
  910. package/docs/zh-CN/platforms/macos.md +193 -0
  911. package/docs/zh-CN/platforms/oracle.md +310 -0
  912. package/docs/zh-CN/platforms/raspberry-pi.md +365 -0
  913. package/docs/zh-CN/platforms/windows.md +156 -0
  914. package/docs/zh-CN/plugin.md +639 -0
  915. package/docs/zh-CN/plugins/agent-tools.md +99 -0
  916. package/docs/zh-CN/plugins/manifest.md +68 -0
  917. package/docs/zh-CN/plugins/voice-call.md +250 -0
  918. package/docs/zh-CN/plugins/zalouser.md +88 -0
  919. package/docs/zh-CN/prose.md +141 -0
  920. package/docs/zh-CN/providers/anthropic.md +159 -0
  921. package/docs/zh-CN/providers/claude-max-api-proxy.md +155 -0
  922. package/docs/zh-CN/providers/deepgram.md +97 -0
  923. package/docs/zh-CN/providers/github-copilot.md +67 -0
  924. package/docs/zh-CN/providers/glm.md +39 -0
  925. package/docs/zh-CN/providers/index.md +68 -0
  926. package/docs/zh-CN/providers/minimax.md +206 -0
  927. package/docs/zh-CN/providers/models.md +55 -0
  928. package/docs/zh-CN/providers/moonshot.md +145 -0
  929. package/docs/zh-CN/providers/ollama.md +230 -0
  930. package/docs/zh-CN/providers/openai.md +68 -0
  931. package/docs/zh-CN/providers/opencode.md +41 -0
  932. package/docs/zh-CN/providers/openrouter.md +43 -0
  933. package/docs/zh-CN/providers/qwen.md +55 -0
  934. package/docs/zh-CN/providers/synthetic.md +102 -0
  935. package/docs/zh-CN/providers/venice.md +274 -0
  936. package/docs/zh-CN/providers/vercel-ai-gateway.md +57 -0
  937. package/docs/zh-CN/providers/xiaomi.md +68 -0
  938. package/docs/zh-CN/providers/zai.md +41 -0
  939. package/docs/zh-CN/railway.mdx +106 -0
  940. package/docs/zh-CN/refactor/clawnet.md +424 -0
  941. package/docs/zh-CN/refactor/exec-host.md +323 -0
  942. package/docs/zh-CN/refactor/outbound-session-mirroring.md +92 -0
  943. package/docs/zh-CN/refactor/plugin-sdk.md +221 -0
  944. package/docs/zh-CN/refactor/strict-config.md +100 -0
  945. package/docs/zh-CN/reference/AGENTS.default.md +131 -0
  946. package/docs/zh-CN/reference/RELEASING.md +123 -0
  947. package/docs/zh-CN/reference/api-usage-costs.md +136 -0
  948. package/docs/zh-CN/reference/device-models.md +54 -0
  949. package/docs/zh-CN/reference/rpc.md +48 -0
  950. package/docs/zh-CN/reference/session-management-compaction.md +287 -0
  951. package/docs/zh-CN/reference/templates/AGENTS.dev.md +89 -0
  952. package/docs/zh-CN/reference/templates/AGENTS.md +225 -0
  953. package/docs/zh-CN/reference/templates/BOOT.md +17 -0
  954. package/docs/zh-CN/reference/templates/BOOTSTRAP.md +68 -0
  955. package/docs/zh-CN/reference/templates/HEARTBEAT.md +18 -0
  956. package/docs/zh-CN/reference/templates/IDENTITY.dev.md +54 -0
  957. package/docs/zh-CN/reference/templates/IDENTITY.md +35 -0
  958. package/docs/zh-CN/reference/templates/SOUL.dev.md +83 -0
  959. package/docs/zh-CN/reference/templates/SOUL.md +49 -0
  960. package/docs/zh-CN/reference/templates/TOOLS.dev.md +31 -0
  961. package/docs/zh-CN/reference/templates/TOOLS.md +53 -0
  962. package/docs/zh-CN/reference/templates/USER.dev.md +25 -0
  963. package/docs/zh-CN/reference/templates/USER.md +30 -0
  964. package/docs/zh-CN/reference/test.md +57 -0
  965. package/docs/zh-CN/reference/transcript-hygiene.md +109 -0
  966. package/docs/zh-CN/render.mdx +169 -0
  967. package/docs/zh-CN/scripts.md +35 -0
  968. package/docs/zh-CN/security/formal-verification.md +171 -0
  969. package/docs/zh-CN/start/getting-started.md +206 -0
  970. package/docs/zh-CN/start/hubs.md +191 -0
  971. package/docs/zh-CN/start/lore.md +226 -0
  972. package/docs/zh-CN/start/onboarding.md +105 -0
  973. package/docs/zh-CN/start/openclaw.md +248 -0
  974. package/docs/zh-CN/start/pairing.md +89 -0
  975. package/docs/zh-CN/start/setup.md +153 -0
  976. package/docs/zh-CN/start/showcase.md +423 -0
  977. package/docs/zh-CN/start/wizard.md +331 -0
  978. package/docs/zh-CN/testing.md +375 -0
  979. package/docs/zh-CN/token-use.md +119 -0
  980. package/docs/zh-CN/tools/agent-send.md +59 -0
  981. package/docs/zh-CN/tools/apply-patch.md +57 -0
  982. package/docs/zh-CN/tools/browser-linux-troubleshooting.md +144 -0
  983. package/docs/zh-CN/tools/browser-login.md +75 -0
  984. package/docs/zh-CN/tools/browser.md +553 -0
  985. package/docs/zh-CN/tools/chrome-extension.md +183 -0
  986. package/docs/zh-CN/tools/clawhub.md +209 -0
  987. package/docs/zh-CN/tools/creating-skills.md +61 -0
  988. package/docs/zh-CN/tools/elevated.md +64 -0
  989. package/docs/zh-CN/tools/exec-approvals.md +234 -0
  990. package/docs/zh-CN/tools/exec.md +169 -0
  991. package/docs/zh-CN/tools/firecrawl.md +68 -0
  992. package/docs/zh-CN/tools/index.md +515 -0
  993. package/docs/zh-CN/tools/llm-task.md +117 -0
  994. package/docs/zh-CN/tools/lobster.md +349 -0
  995. package/docs/zh-CN/tools/reactions.md +29 -0
  996. package/docs/zh-CN/tools/skills-config.md +78 -0
  997. package/docs/zh-CN/tools/skills.md +279 -0
  998. package/docs/zh-CN/tools/slash-commands.md +205 -0
  999. package/docs/zh-CN/tools/subagents.md +156 -0
  1000. package/docs/zh-CN/tools/thinking.md +80 -0
  1001. package/docs/zh-CN/tools/web.md +257 -0
  1002. package/docs/zh-CN/tts.md +375 -0
  1003. package/docs/zh-CN/tui.md +166 -0
  1004. package/docs/zh-CN/vps.md +47 -0
  1005. package/docs/zh-CN/web/control-ui.md +191 -0
  1006. package/docs/zh-CN/web/dashboard.md +53 -0
  1007. package/docs/zh-CN/web/index.md +118 -0
  1008. package/docs/zh-CN/web/webchat.md +56 -0
  1009. package/extensions/bluebubbles/README.md +45 -0
  1010. package/extensions/bluebubbles/index.ts +19 -0
  1011. package/extensions/bluebubbles/node_modules/.bin/openclaw +21 -0
  1012. package/extensions/bluebubbles/openclaw.plugin.json +9 -0
  1013. package/extensions/bluebubbles/package.json +36 -0
  1014. package/extensions/bluebubbles/src/accounts.ts +88 -0
  1015. package/extensions/bluebubbles/src/actions.test.ts +650 -0
  1016. package/extensions/bluebubbles/src/actions.ts +438 -0
  1017. package/extensions/bluebubbles/src/attachments.test.ts +345 -0
  1018. package/extensions/bluebubbles/src/attachments.ts +300 -0
  1019. package/extensions/bluebubbles/src/channel.ts +414 -0
  1020. package/extensions/bluebubbles/src/chat.test.ts +461 -0
  1021. package/extensions/bluebubbles/src/chat.ts +378 -0
  1022. package/extensions/bluebubbles/src/config-schema.ts +51 -0
  1023. package/extensions/bluebubbles/src/media-send.ts +174 -0
  1024. package/extensions/bluebubbles/src/monitor.test.ts +2342 -0
  1025. package/extensions/bluebubbles/src/monitor.ts +2490 -0
  1026. package/extensions/bluebubbles/src/onboarding.ts +352 -0
  1027. package/extensions/bluebubbles/src/probe.ts +135 -0
  1028. package/extensions/bluebubbles/src/reactions.test.ts +392 -0
  1029. package/extensions/bluebubbles/src/reactions.ts +188 -0
  1030. package/extensions/bluebubbles/src/runtime.ts +14 -0
  1031. package/extensions/bluebubbles/src/send.test.ts +808 -0
  1032. package/extensions/bluebubbles/src/send.ts +467 -0
  1033. package/extensions/bluebubbles/src/targets.test.ts +183 -0
  1034. package/extensions/bluebubbles/src/targets.ts +422 -0
  1035. package/extensions/bluebubbles/src/types.ts +127 -0
  1036. package/extensions/copilot-proxy/README.md +24 -0
  1037. package/extensions/copilot-proxy/index.ts +148 -0
  1038. package/extensions/copilot-proxy/node_modules/.bin/openclaw +21 -0
  1039. package/extensions/copilot-proxy/openclaw.plugin.json +9 -0
  1040. package/extensions/copilot-proxy/package.json +14 -0
  1041. package/extensions/diagnostics-otel/index.ts +15 -0
  1042. package/extensions/diagnostics-otel/node_modules/.bin/openclaw +21 -0
  1043. package/extensions/diagnostics-otel/openclaw.plugin.json +8 -0
  1044. package/extensions/diagnostics-otel/package.json +27 -0
  1045. package/extensions/diagnostics-otel/src/service.test.ts +226 -0
  1046. package/extensions/diagnostics-otel/src/service.ts +635 -0
  1047. package/extensions/discord/index.ts +17 -0
  1048. package/extensions/discord/node_modules/.bin/openclaw +21 -0
  1049. package/extensions/discord/openclaw.plugin.json +9 -0
  1050. package/extensions/discord/package.json +14 -0
  1051. package/extensions/discord/src/channel.ts +422 -0
  1052. package/extensions/discord/src/runtime.ts +14 -0
  1053. package/extensions/feishu/README.md +47 -0
  1054. package/extensions/feishu/index.ts +15 -0
  1055. package/extensions/feishu/node_modules/.bin/openclaw +21 -0
  1056. package/extensions/feishu/openclaw.plugin.json +9 -0
  1057. package/extensions/feishu/package.json +33 -0
  1058. package/extensions/feishu/src/channel.ts +276 -0
  1059. package/extensions/feishu/src/config-schema.ts +46 -0
  1060. package/extensions/feishu/src/onboarding.ts +278 -0
  1061. package/extensions/google-antigravity-auth/README.md +24 -0
  1062. package/extensions/google-antigravity-auth/index.ts +461 -0
  1063. package/extensions/google-antigravity-auth/node_modules/.bin/openclaw +21 -0
  1064. package/extensions/google-antigravity-auth/openclaw.plugin.json +9 -0
  1065. package/extensions/google-antigravity-auth/package.json +14 -0
  1066. package/extensions/google-gemini-cli-auth/README.md +35 -0
  1067. package/extensions/google-gemini-cli-auth/index.ts +88 -0
  1068. package/extensions/google-gemini-cli-auth/node_modules/.bin/openclaw +21 -0
  1069. package/extensions/google-gemini-cli-auth/oauth.test.ts +240 -0
  1070. package/extensions/google-gemini-cli-auth/oauth.ts +662 -0
  1071. package/extensions/google-gemini-cli-auth/openclaw.plugin.json +9 -0
  1072. package/extensions/google-gemini-cli-auth/package.json +14 -0
  1073. package/extensions/googlechat/index.ts +19 -0
  1074. package/extensions/googlechat/node_modules/.bin/openclaw +21 -0
  1075. package/extensions/googlechat/openclaw.plugin.json +9 -0
  1076. package/extensions/googlechat/package.json +39 -0
  1077. package/extensions/googlechat/src/accounts.ts +147 -0
  1078. package/extensions/googlechat/src/actions.ts +181 -0
  1079. package/extensions/googlechat/src/api.test.ts +61 -0
  1080. package/extensions/googlechat/src/api.ts +282 -0
  1081. package/extensions/googlechat/src/auth.ts +123 -0
  1082. package/extensions/googlechat/src/channel.ts +583 -0
  1083. package/extensions/googlechat/src/monitor.test.ts +22 -0
  1084. package/extensions/googlechat/src/monitor.ts +949 -0
  1085. package/extensions/googlechat/src/onboarding.ts +269 -0
  1086. package/extensions/googlechat/src/runtime.ts +14 -0
  1087. package/extensions/googlechat/src/targets.test.ts +32 -0
  1088. package/extensions/googlechat/src/targets.ts +65 -0
  1089. package/extensions/googlechat/src/types.config.ts +3 -0
  1090. package/extensions/googlechat/src/types.ts +73 -0
  1091. package/extensions/imessage/index.ts +17 -0
  1092. package/extensions/imessage/node_modules/.bin/openclaw +21 -0
  1093. package/extensions/imessage/openclaw.plugin.json +9 -0
  1094. package/extensions/imessage/package.json +14 -0
  1095. package/extensions/imessage/src/channel.ts +294 -0
  1096. package/extensions/imessage/src/runtime.ts +14 -0
  1097. package/extensions/line/index.ts +19 -0
  1098. package/extensions/line/node_modules/.bin/openclaw +21 -0
  1099. package/extensions/line/openclaw.plugin.json +9 -0
  1100. package/extensions/line/package.json +29 -0
  1101. package/extensions/line/src/card-command.ts +344 -0
  1102. package/extensions/line/src/channel.logout.test.ts +99 -0
  1103. package/extensions/line/src/channel.sendPayload.test.ts +306 -0
  1104. package/extensions/line/src/channel.ts +780 -0
  1105. package/extensions/line/src/runtime.ts +14 -0
  1106. package/extensions/llm-task/README.md +97 -0
  1107. package/extensions/llm-task/index.ts +6 -0
  1108. package/extensions/llm-task/node_modules/.bin/openclaw +21 -0
  1109. package/extensions/llm-task/openclaw.plugin.json +21 -0
  1110. package/extensions/llm-task/package.json +14 -0
  1111. package/extensions/llm-task/src/llm-task-tool.test.ts +138 -0
  1112. package/extensions/llm-task/src/llm-task-tool.ts +245 -0
  1113. package/extensions/lobster/README.md +75 -0
  1114. package/extensions/lobster/SKILL.md +97 -0
  1115. package/extensions/lobster/index.ts +14 -0
  1116. package/extensions/lobster/node_modules/.bin/openclaw +21 -0
  1117. package/extensions/lobster/openclaw.plugin.json +10 -0
  1118. package/extensions/lobster/package.json +14 -0
  1119. package/extensions/lobster/src/lobster-tool.test.ts +247 -0
  1120. package/extensions/lobster/src/lobster-tool.ts +328 -0
  1121. package/extensions/matrix/CHANGELOG.md +87 -0
  1122. package/extensions/matrix/index.ts +17 -0
  1123. package/extensions/matrix/node_modules/.bin/markdown-it +21 -0
  1124. package/extensions/matrix/node_modules/.bin/openclaw +21 -0
  1125. package/extensions/matrix/openclaw.plugin.json +9 -0
  1126. package/extensions/matrix/package.json +36 -0
  1127. package/extensions/matrix/src/actions.ts +195 -0
  1128. package/extensions/matrix/src/channel.directory.test.ts +64 -0
  1129. package/extensions/matrix/src/channel.ts +439 -0
  1130. package/extensions/matrix/src/config-schema.ts +62 -0
  1131. package/extensions/matrix/src/directory-live.ts +188 -0
  1132. package/extensions/matrix/src/group-mentions.ts +66 -0
  1133. package/extensions/matrix/src/matrix/accounts.test.ts +82 -0
  1134. package/extensions/matrix/src/matrix/accounts.ts +65 -0
  1135. package/extensions/matrix/src/matrix/actions/client.ts +57 -0
  1136. package/extensions/matrix/src/matrix/actions/messages.ts +128 -0
  1137. package/extensions/matrix/src/matrix/actions/pins.ts +76 -0
  1138. package/extensions/matrix/src/matrix/actions/reactions.ts +96 -0
  1139. package/extensions/matrix/src/matrix/actions/room.ts +85 -0
  1140. package/extensions/matrix/src/matrix/actions/summary.ts +75 -0
  1141. package/extensions/matrix/src/matrix/actions/types.ts +84 -0
  1142. package/extensions/matrix/src/matrix/actions.ts +15 -0
  1143. package/extensions/matrix/src/matrix/active-client.ts +11 -0
  1144. package/extensions/matrix/src/matrix/client/config.ts +160 -0
  1145. package/extensions/matrix/src/matrix/client/create-client.ts +123 -0
  1146. package/extensions/matrix/src/matrix/client/logging.ts +36 -0
  1147. package/extensions/matrix/src/matrix/client/runtime.ts +4 -0
  1148. package/extensions/matrix/src/matrix/client/shared.ts +170 -0
  1149. package/extensions/matrix/src/matrix/client/storage.ts +131 -0
  1150. package/extensions/matrix/src/matrix/client/types.ts +34 -0
  1151. package/extensions/matrix/src/matrix/client.test.ts +56 -0
  1152. package/extensions/matrix/src/matrix/client.ts +5 -0
  1153. package/extensions/matrix/src/matrix/credentials.ts +105 -0
  1154. package/extensions/matrix/src/matrix/deps.ts +60 -0
  1155. package/extensions/matrix/src/matrix/format.test.ts +33 -0
  1156. package/extensions/matrix/src/matrix/format.ts +22 -0
  1157. package/extensions/matrix/src/matrix/index.ts +11 -0
  1158. package/extensions/matrix/src/matrix/monitor/allowlist.test.ts +45 -0
  1159. package/extensions/matrix/src/matrix/monitor/allowlist.ts +103 -0
  1160. package/extensions/matrix/src/matrix/monitor/auto-join.ts +71 -0
  1161. package/extensions/matrix/src/matrix/monitor/direct.ts +104 -0
  1162. package/extensions/matrix/src/matrix/monitor/events.ts +101 -0
  1163. package/extensions/matrix/src/matrix/monitor/handler.ts +661 -0
  1164. package/extensions/matrix/src/matrix/monitor/index.ts +338 -0
  1165. package/extensions/matrix/src/matrix/monitor/location.ts +100 -0
  1166. package/extensions/matrix/src/matrix/monitor/media.test.ts +102 -0
  1167. package/extensions/matrix/src/matrix/monitor/media.ts +113 -0
  1168. package/extensions/matrix/src/matrix/monitor/mentions.ts +31 -0
  1169. package/extensions/matrix/src/matrix/monitor/replies.ts +97 -0
  1170. package/extensions/matrix/src/matrix/monitor/room-info.ts +55 -0
  1171. package/extensions/matrix/src/matrix/monitor/rooms.test.ts +39 -0
  1172. package/extensions/matrix/src/matrix/monitor/rooms.ts +47 -0
  1173. package/extensions/matrix/src/matrix/monitor/threads.ts +68 -0
  1174. package/extensions/matrix/src/matrix/monitor/types.ts +39 -0
  1175. package/extensions/matrix/src/matrix/poll-types.test.ts +21 -0
  1176. package/extensions/matrix/src/matrix/poll-types.ts +166 -0
  1177. package/extensions/matrix/src/matrix/probe.ts +70 -0
  1178. package/extensions/matrix/src/matrix/send/client.ts +66 -0
  1179. package/extensions/matrix/src/matrix/send/formatting.ts +89 -0
  1180. package/extensions/matrix/src/matrix/send/media.ts +229 -0
  1181. package/extensions/matrix/src/matrix/send/targets.test.ts +98 -0
  1182. package/extensions/matrix/src/matrix/send/targets.ts +136 -0
  1183. package/extensions/matrix/src/matrix/send/types.ts +109 -0
  1184. package/extensions/matrix/src/matrix/send.test.ts +171 -0
  1185. package/extensions/matrix/src/matrix/send.ts +260 -0
  1186. package/extensions/matrix/src/onboarding.ts +449 -0
  1187. package/extensions/matrix/src/outbound.ts +52 -0
  1188. package/extensions/matrix/src/resolve-targets.test.ts +48 -0
  1189. package/extensions/matrix/src/resolve-targets.ts +135 -0
  1190. package/extensions/matrix/src/runtime.ts +14 -0
  1191. package/extensions/matrix/src/tool-actions.ts +164 -0
  1192. package/extensions/matrix/src/types.ts +95 -0
  1193. package/extensions/mattermost/index.ts +17 -0
  1194. package/extensions/mattermost/node_modules/.bin/openclaw +21 -0
  1195. package/extensions/mattermost/openclaw.plugin.json +9 -0
  1196. package/extensions/mattermost/package.json +28 -0
  1197. package/extensions/mattermost/src/channel.test.ts +48 -0
  1198. package/extensions/mattermost/src/channel.ts +337 -0
  1199. package/extensions/mattermost/src/config-schema.ts +55 -0
  1200. package/extensions/mattermost/src/group-mentions.ts +15 -0
  1201. package/extensions/mattermost/src/mattermost/accounts.ts +128 -0
  1202. package/extensions/mattermost/src/mattermost/client.ts +220 -0
  1203. package/extensions/mattermost/src/mattermost/index.ts +9 -0
  1204. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +166 -0
  1205. package/extensions/mattermost/src/mattermost/monitor.ts +987 -0
  1206. package/extensions/mattermost/src/mattermost/probe.ts +74 -0
  1207. package/extensions/mattermost/src/mattermost/send.ts +231 -0
  1208. package/extensions/mattermost/src/normalize.ts +46 -0
  1209. package/extensions/mattermost/src/onboarding-helpers.ts +44 -0
  1210. package/extensions/mattermost/src/onboarding.ts +186 -0
  1211. package/extensions/mattermost/src/runtime.ts +14 -0
  1212. package/extensions/mattermost/src/types.ts +50 -0
  1213. package/extensions/memory-core/index.ts +38 -0
  1214. package/extensions/memory-core/node_modules/.bin/openclaw +21 -0
  1215. package/extensions/memory-core/openclaw.plugin.json +9 -0
  1216. package/extensions/memory-core/package.json +17 -0
  1217. package/extensions/memory-lancedb/config.ts +139 -0
  1218. package/extensions/memory-lancedb/index.test.ts +295 -0
  1219. package/extensions/memory-lancedb/index.ts +608 -0
  1220. package/extensions/memory-lancedb/node_modules/.bin/openai +21 -0
  1221. package/extensions/memory-lancedb/node_modules/.bin/openclaw +21 -0
  1222. package/extensions/memory-lancedb/openclaw.plugin.json +60 -0
  1223. package/extensions/memory-lancedb/package.json +19 -0
  1224. package/extensions/minimax-portal-auth/README.md +33 -0
  1225. package/extensions/minimax-portal-auth/index.ts +155 -0
  1226. package/extensions/minimax-portal-auth/node_modules/.bin/openclaw +21 -0
  1227. package/extensions/minimax-portal-auth/oauth.ts +247 -0
  1228. package/extensions/minimax-portal-auth/openclaw.plugin.json +9 -0
  1229. package/extensions/minimax-portal-auth/package.json +14 -0
  1230. package/extensions/msteams/CHANGELOG.md +83 -0
  1231. package/extensions/msteams/index.ts +17 -0
  1232. package/extensions/msteams/node_modules/.bin/openclaw +21 -0
  1233. package/extensions/msteams/openclaw.plugin.json +9 -0
  1234. package/extensions/msteams/package.json +39 -0
  1235. package/extensions/msteams/src/attachments/download.ts +283 -0
  1236. package/extensions/msteams/src/attachments/graph.ts +353 -0
  1237. package/extensions/msteams/src/attachments/html.ts +90 -0
  1238. package/extensions/msteams/src/attachments/payload.ts +22 -0
  1239. package/extensions/msteams/src/attachments/shared.ts +291 -0
  1240. package/extensions/msteams/src/attachments/types.ts +37 -0
  1241. package/extensions/msteams/src/attachments.test.ts +459 -0
  1242. package/extensions/msteams/src/attachments.ts +18 -0
  1243. package/extensions/msteams/src/channel.directory.test.ts +48 -0
  1244. package/extensions/msteams/src/channel.ts +459 -0
  1245. package/extensions/msteams/src/conversation-store-fs.test.ts +88 -0
  1246. package/extensions/msteams/src/conversation-store-fs.ts +165 -0
  1247. package/extensions/msteams/src/conversation-store-memory.ts +47 -0
  1248. package/extensions/msteams/src/conversation-store.ts +41 -0
  1249. package/extensions/msteams/src/directory-live.ts +205 -0
  1250. package/extensions/msteams/src/errors.test.ts +45 -0
  1251. package/extensions/msteams/src/errors.ts +190 -0
  1252. package/extensions/msteams/src/file-consent-helpers.test.ts +243 -0
  1253. package/extensions/msteams/src/file-consent-helpers.ts +73 -0
  1254. package/extensions/msteams/src/file-consent.ts +126 -0
  1255. package/extensions/msteams/src/graph-chat.ts +53 -0
  1256. package/extensions/msteams/src/graph-upload.ts +453 -0
  1257. package/extensions/msteams/src/inbound.test.ts +66 -0
  1258. package/extensions/msteams/src/inbound.ts +48 -0
  1259. package/extensions/msteams/src/index.ts +4 -0
  1260. package/extensions/msteams/src/media-helpers.test.ts +189 -0
  1261. package/extensions/msteams/src/media-helpers.ts +86 -0
  1262. package/extensions/msteams/src/messenger.test.ts +248 -0
  1263. package/extensions/msteams/src/messenger.ts +495 -0
  1264. package/extensions/msteams/src/monitor-handler/inbound-media.ts +128 -0
  1265. package/extensions/msteams/src/monitor-handler/message-handler.ts +640 -0
  1266. package/extensions/msteams/src/monitor-handler.ts +162 -0
  1267. package/extensions/msteams/src/monitor-types.ts +5 -0
  1268. package/extensions/msteams/src/monitor.ts +295 -0
  1269. package/extensions/msteams/src/onboarding.ts +431 -0
  1270. package/extensions/msteams/src/outbound.ts +46 -0
  1271. package/extensions/msteams/src/pending-uploads.ts +89 -0
  1272. package/extensions/msteams/src/policy.test.ts +209 -0
  1273. package/extensions/msteams/src/policy.ts +273 -0
  1274. package/extensions/msteams/src/polls-store-memory.ts +32 -0
  1275. package/extensions/msteams/src/polls-store.test.ts +38 -0
  1276. package/extensions/msteams/src/polls.test.ts +72 -0
  1277. package/extensions/msteams/src/polls.ts +315 -0
  1278. package/extensions/msteams/src/probe.test.ts +58 -0
  1279. package/extensions/msteams/src/probe.ts +107 -0
  1280. package/extensions/msteams/src/reply-dispatcher.ts +130 -0
  1281. package/extensions/msteams/src/resolve-allowlist.ts +297 -0
  1282. package/extensions/msteams/src/runtime.ts +14 -0
  1283. package/extensions/msteams/src/sdk-types.ts +19 -0
  1284. package/extensions/msteams/src/sdk.ts +33 -0
  1285. package/extensions/msteams/src/send-context.ts +164 -0
  1286. package/extensions/msteams/src/send.ts +519 -0
  1287. package/extensions/msteams/src/sent-message-cache.test.ts +15 -0
  1288. package/extensions/msteams/src/sent-message-cache.ts +47 -0
  1289. package/extensions/msteams/src/storage.ts +25 -0
  1290. package/extensions/msteams/src/store-fs.ts +83 -0
  1291. package/extensions/msteams/src/token.ts +19 -0
  1292. package/extensions/nextcloud-talk/index.ts +17 -0
  1293. package/extensions/nextcloud-talk/node_modules/.bin/openclaw +21 -0
  1294. package/extensions/nextcloud-talk/openclaw.plugin.json +9 -0
  1295. package/extensions/nextcloud-talk/package.json +33 -0
  1296. package/extensions/nextcloud-talk/src/accounts.ts +174 -0
  1297. package/extensions/nextcloud-talk/src/channel.ts +409 -0
  1298. package/extensions/nextcloud-talk/src/config-schema.ts +78 -0
  1299. package/extensions/nextcloud-talk/src/format.ts +79 -0
  1300. package/extensions/nextcloud-talk/src/inbound.ts +317 -0
  1301. package/extensions/nextcloud-talk/src/monitor.ts +246 -0
  1302. package/extensions/nextcloud-talk/src/normalize.ts +39 -0
  1303. package/extensions/nextcloud-talk/src/onboarding.ts +343 -0
  1304. package/extensions/nextcloud-talk/src/policy.test.ts +33 -0
  1305. package/extensions/nextcloud-talk/src/policy.ts +180 -0
  1306. package/extensions/nextcloud-talk/src/room-info.ts +125 -0
  1307. package/extensions/nextcloud-talk/src/runtime.ts +14 -0
  1308. package/extensions/nextcloud-talk/src/send.ts +210 -0
  1309. package/extensions/nextcloud-talk/src/signature.ts +72 -0
  1310. package/extensions/nextcloud-talk/src/types.ts +179 -0
  1311. package/extensions/nostr/CHANGELOG.md +74 -0
  1312. package/extensions/nostr/README.md +136 -0
  1313. package/extensions/nostr/index.ts +68 -0
  1314. package/extensions/nostr/node_modules/.bin/openclaw +21 -0
  1315. package/extensions/nostr/openclaw.plugin.json +9 -0
  1316. package/extensions/nostr/package.json +34 -0
  1317. package/extensions/nostr/src/channel.test.ts +151 -0
  1318. package/extensions/nostr/src/channel.ts +353 -0
  1319. package/extensions/nostr/src/config-schema.ts +90 -0
  1320. package/extensions/nostr/src/metrics.ts +478 -0
  1321. package/extensions/nostr/src/nostr-bus.fuzz.test.ts +533 -0
  1322. package/extensions/nostr/src/nostr-bus.integration.test.ts +448 -0
  1323. package/extensions/nostr/src/nostr-bus.test.ts +199 -0
  1324. package/extensions/nostr/src/nostr-bus.ts +715 -0
  1325. package/extensions/nostr/src/nostr-profile-http.test.ts +378 -0
  1326. package/extensions/nostr/src/nostr-profile-http.ts +519 -0
  1327. package/extensions/nostr/src/nostr-profile-import.test.ts +119 -0
  1328. package/extensions/nostr/src/nostr-profile-import.ts +262 -0
  1329. package/extensions/nostr/src/nostr-profile.fuzz.test.ts +477 -0
  1330. package/extensions/nostr/src/nostr-profile.test.ts +410 -0
  1331. package/extensions/nostr/src/nostr-profile.ts +277 -0
  1332. package/extensions/nostr/src/nostr-state-store.test.ts +131 -0
  1333. package/extensions/nostr/src/nostr-state-store.ts +226 -0
  1334. package/extensions/nostr/src/runtime.ts +14 -0
  1335. package/extensions/nostr/src/seen-tracker.ts +303 -0
  1336. package/extensions/nostr/src/types.test.ts +157 -0
  1337. package/extensions/nostr/src/types.ts +101 -0
  1338. package/extensions/nostr/test/setup.ts +5 -0
  1339. package/extensions/open-prose/README.md +25 -0
  1340. package/extensions/open-prose/index.ts +5 -0
  1341. package/extensions/open-prose/node_modules/.bin/openclaw +21 -0
  1342. package/extensions/open-prose/openclaw.plugin.json +11 -0
  1343. package/extensions/open-prose/package.json +14 -0
  1344. package/extensions/open-prose/skills/prose/LICENSE +21 -0
  1345. package/extensions/open-prose/skills/prose/SKILL.md +323 -0
  1346. package/extensions/open-prose/skills/prose/alt-borges.md +141 -0
  1347. package/extensions/open-prose/skills/prose/alts/arabian-nights.md +358 -0
  1348. package/extensions/open-prose/skills/prose/alts/borges.md +360 -0
  1349. package/extensions/open-prose/skills/prose/alts/folk.md +322 -0
  1350. package/extensions/open-prose/skills/prose/alts/homer.md +346 -0
  1351. package/extensions/open-prose/skills/prose/alts/kafka.md +373 -0
  1352. package/extensions/open-prose/skills/prose/compiler.md +2971 -0
  1353. package/extensions/open-prose/skills/prose/examples/01-hello-world.prose +4 -0
  1354. package/extensions/open-prose/skills/prose/examples/02-research-and-summarize.prose +6 -0
  1355. package/extensions/open-prose/skills/prose/examples/03-code-review.prose +17 -0
  1356. package/extensions/open-prose/skills/prose/examples/04-write-and-refine.prose +14 -0
  1357. package/extensions/open-prose/skills/prose/examples/05-debug-issue.prose +20 -0
  1358. package/extensions/open-prose/skills/prose/examples/06-explain-codebase.prose +17 -0
  1359. package/extensions/open-prose/skills/prose/examples/07-refactor.prose +20 -0
  1360. package/extensions/open-prose/skills/prose/examples/08-blog-post.prose +20 -0
  1361. package/extensions/open-prose/skills/prose/examples/09-research-with-agents.prose +25 -0
  1362. package/extensions/open-prose/skills/prose/examples/10-code-review-agents.prose +32 -0
  1363. package/extensions/open-prose/skills/prose/examples/11-skills-and-imports.prose +27 -0
  1364. package/extensions/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +43 -0
  1365. package/extensions/open-prose/skills/prose/examples/13-variables-and-context.prose +51 -0
  1366. package/extensions/open-prose/skills/prose/examples/14-composition-blocks.prose +48 -0
  1367. package/extensions/open-prose/skills/prose/examples/15-inline-sequences.prose +23 -0
  1368. package/extensions/open-prose/skills/prose/examples/16-parallel-reviews.prose +19 -0
  1369. package/extensions/open-prose/skills/prose/examples/17-parallel-research.prose +19 -0
  1370. package/extensions/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +36 -0
  1371. package/extensions/open-prose/skills/prose/examples/19-advanced-parallel.prose +71 -0
  1372. package/extensions/open-prose/skills/prose/examples/20-fixed-loops.prose +20 -0
  1373. package/extensions/open-prose/skills/prose/examples/21-pipeline-operations.prose +35 -0
  1374. package/extensions/open-prose/skills/prose/examples/22-error-handling.prose +51 -0
  1375. package/extensions/open-prose/skills/prose/examples/23-retry-with-backoff.prose +63 -0
  1376. package/extensions/open-prose/skills/prose/examples/24-choice-blocks.prose +86 -0
  1377. package/extensions/open-prose/skills/prose/examples/25-conditionals.prose +114 -0
  1378. package/extensions/open-prose/skills/prose/examples/26-parameterized-blocks.prose +100 -0
  1379. package/extensions/open-prose/skills/prose/examples/27-string-interpolation.prose +105 -0
  1380. package/extensions/open-prose/skills/prose/examples/28-automated-pr-review.prose +37 -0
  1381. package/extensions/open-prose/skills/prose/examples/28-gas-town.prose +1572 -0
  1382. package/extensions/open-prose/skills/prose/examples/29-captains-chair.prose +218 -0
  1383. package/extensions/open-prose/skills/prose/examples/30-captains-chair-simple.prose +42 -0
  1384. package/extensions/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +145 -0
  1385. package/extensions/open-prose/skills/prose/examples/33-pr-review-autofix.prose +168 -0
  1386. package/extensions/open-prose/skills/prose/examples/34-content-pipeline.prose +204 -0
  1387. package/extensions/open-prose/skills/prose/examples/35-feature-factory.prose +296 -0
  1388. package/extensions/open-prose/skills/prose/examples/36-bug-hunter.prose +237 -0
  1389. package/extensions/open-prose/skills/prose/examples/37-the-forge.prose +1474 -0
  1390. package/extensions/open-prose/skills/prose/examples/38-skill-scan.prose +455 -0
  1391. package/extensions/open-prose/skills/prose/examples/39-architect-by-simulation.prose +277 -0
  1392. package/extensions/open-prose/skills/prose/examples/40-rlm-self-refine.prose +32 -0
  1393. package/extensions/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +38 -0
  1394. package/extensions/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +46 -0
  1395. package/extensions/open-prose/skills/prose/examples/43-rlm-pairwise.prose +50 -0
  1396. package/extensions/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +261 -0
  1397. package/extensions/open-prose/skills/prose/examples/45-plugin-release.prose +159 -0
  1398. package/extensions/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +637 -0
  1399. package/extensions/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +148 -0
  1400. package/extensions/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +225 -0
  1401. package/extensions/open-prose/skills/prose/examples/47-language-self-improvement.prose +356 -0
  1402. package/extensions/open-prose/skills/prose/examples/48-habit-miner.prose +445 -0
  1403. package/extensions/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +210 -0
  1404. package/extensions/open-prose/skills/prose/examples/README.md +391 -0
  1405. package/extensions/open-prose/skills/prose/examples/roadmap/README.md +22 -0
  1406. package/extensions/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +20 -0
  1407. package/extensions/open-prose/skills/prose/examples/roadmap/parallel-review.prose +18 -0
  1408. package/extensions/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +17 -0
  1409. package/extensions/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +223 -0
  1410. package/extensions/open-prose/skills/prose/guidance/antipatterns.md +951 -0
  1411. package/extensions/open-prose/skills/prose/guidance/patterns.md +700 -0
  1412. package/extensions/open-prose/skills/prose/guidance/system-prompt.md +180 -0
  1413. package/extensions/open-prose/skills/prose/help.md +144 -0
  1414. package/extensions/open-prose/skills/prose/lib/README.md +108 -0
  1415. package/extensions/open-prose/skills/prose/lib/calibrator.prose +215 -0
  1416. package/extensions/open-prose/skills/prose/lib/cost-analyzer.prose +174 -0
  1417. package/extensions/open-prose/skills/prose/lib/error-forensics.prose +250 -0
  1418. package/extensions/open-prose/skills/prose/lib/inspector.prose +196 -0
  1419. package/extensions/open-prose/skills/prose/lib/profiler.prose +460 -0
  1420. package/extensions/open-prose/skills/prose/lib/program-improver.prose +275 -0
  1421. package/extensions/open-prose/skills/prose/lib/project-memory.prose +118 -0
  1422. package/extensions/open-prose/skills/prose/lib/user-memory.prose +93 -0
  1423. package/extensions/open-prose/skills/prose/lib/vm-improver.prose +243 -0
  1424. package/extensions/open-prose/skills/prose/primitives/session.md +593 -0
  1425. package/extensions/open-prose/skills/prose/prose.md +1237 -0
  1426. package/extensions/open-prose/skills/prose/state/filesystem.md +498 -0
  1427. package/extensions/open-prose/skills/prose/state/in-context.md +384 -0
  1428. package/extensions/open-prose/skills/prose/state/postgres.md +880 -0
  1429. package/extensions/open-prose/skills/prose/state/sqlite.md +574 -0
  1430. package/extensions/qwen-portal-auth/README.md +24 -0
  1431. package/extensions/qwen-portal-auth/index.ts +130 -0
  1432. package/extensions/qwen-portal-auth/oauth.ts +190 -0
  1433. package/extensions/qwen-portal-auth/openclaw.plugin.json +9 -0
  1434. package/extensions/signal/index.ts +17 -0
  1435. package/extensions/signal/node_modules/.bin/openclaw +21 -0
  1436. package/extensions/signal/openclaw.plugin.json +9 -0
  1437. package/extensions/signal/package.json +14 -0
  1438. package/extensions/signal/src/channel.ts +315 -0
  1439. package/extensions/signal/src/runtime.ts +14 -0
  1440. package/extensions/slack/index.ts +17 -0
  1441. package/extensions/slack/node_modules/.bin/openclaw +21 -0
  1442. package/extensions/slack/openclaw.plugin.json +9 -0
  1443. package/extensions/slack/package.json +14 -0
  1444. package/extensions/slack/src/channel.ts +604 -0
  1445. package/extensions/slack/src/runtime.ts +14 -0
  1446. package/extensions/telegram/index.ts +17 -0
  1447. package/extensions/telegram/node_modules/.bin/openclaw +21 -0
  1448. package/extensions/telegram/openclaw.plugin.json +9 -0
  1449. package/extensions/telegram/package.json +14 -0
  1450. package/extensions/telegram/src/channel.ts +482 -0
  1451. package/extensions/telegram/src/runtime.ts +14 -0
  1452. package/extensions/tlon/README.md +5 -0
  1453. package/extensions/tlon/index.ts +17 -0
  1454. package/extensions/tlon/node_modules/.bin/openclaw +21 -0
  1455. package/extensions/tlon/openclaw.plugin.json +9 -0
  1456. package/extensions/tlon/package.json +33 -0
  1457. package/extensions/tlon/src/channel.ts +392 -0
  1458. package/extensions/tlon/src/config-schema.test.ts +31 -0
  1459. package/extensions/tlon/src/config-schema.ts +43 -0
  1460. package/extensions/tlon/src/monitor/discovery.ts +76 -0
  1461. package/extensions/tlon/src/monitor/history.ts +90 -0
  1462. package/extensions/tlon/src/monitor/index.ts +553 -0
  1463. package/extensions/tlon/src/monitor/processed-messages.test.ts +23 -0
  1464. package/extensions/tlon/src/monitor/processed-messages.ts +46 -0
  1465. package/extensions/tlon/src/monitor/utils.ts +105 -0
  1466. package/extensions/tlon/src/onboarding.ts +214 -0
  1467. package/extensions/tlon/src/runtime.ts +14 -0
  1468. package/extensions/tlon/src/targets.ts +89 -0
  1469. package/extensions/tlon/src/types.ts +92 -0
  1470. package/extensions/tlon/src/urbit/auth.ts +18 -0
  1471. package/extensions/tlon/src/urbit/http-api.ts +38 -0
  1472. package/extensions/tlon/src/urbit/send.test.ts +38 -0
  1473. package/extensions/tlon/src/urbit/send.ts +131 -0
  1474. package/extensions/tlon/src/urbit/sse-client.test.ts +40 -0
  1475. package/extensions/tlon/src/urbit/sse-client.ts +395 -0
  1476. package/extensions/twitch/CHANGELOG.md +45 -0
  1477. package/extensions/twitch/README.md +89 -0
  1478. package/extensions/twitch/index.ts +20 -0
  1479. package/extensions/twitch/node_modules/.bin/openclaw +21 -0
  1480. package/extensions/twitch/openclaw.plugin.json +9 -0
  1481. package/extensions/twitch/package.json +20 -0
  1482. package/extensions/twitch/src/access-control.test.ts +489 -0
  1483. package/extensions/twitch/src/access-control.ts +166 -0
  1484. package/extensions/twitch/src/actions.ts +173 -0
  1485. package/extensions/twitch/src/client-manager-registry.ts +115 -0
  1486. package/extensions/twitch/src/config-schema.ts +82 -0
  1487. package/extensions/twitch/src/config.test.ts +87 -0
  1488. package/extensions/twitch/src/config.ts +116 -0
  1489. package/extensions/twitch/src/monitor.ts +261 -0
  1490. package/extensions/twitch/src/onboarding.test.ts +311 -0
  1491. package/extensions/twitch/src/onboarding.ts +417 -0
  1492. package/extensions/twitch/src/outbound.test.ts +373 -0
  1493. package/extensions/twitch/src/outbound.ts +184 -0
  1494. package/extensions/twitch/src/plugin.test.ts +39 -0
  1495. package/extensions/twitch/src/plugin.ts +274 -0
  1496. package/extensions/twitch/src/probe.test.ts +195 -0
  1497. package/extensions/twitch/src/probe.ts +120 -0
  1498. package/extensions/twitch/src/resolver.ts +137 -0
  1499. package/extensions/twitch/src/runtime.ts +14 -0
  1500. package/extensions/twitch/src/send.test.ts +289 -0
  1501. package/extensions/twitch/src/send.ts +136 -0
  1502. package/extensions/twitch/src/status.test.ts +270 -0
  1503. package/extensions/twitch/src/status.ts +178 -0
  1504. package/extensions/twitch/src/token.test.ts +171 -0
  1505. package/extensions/twitch/src/token.ts +91 -0
  1506. package/extensions/twitch/src/twitch-client.test.ts +589 -0
  1507. package/extensions/twitch/src/twitch-client.ts +277 -0
  1508. package/extensions/twitch/src/types.ts +141 -0
  1509. package/extensions/twitch/src/utils/markdown.ts +98 -0
  1510. package/extensions/twitch/src/utils/twitch.ts +78 -0
  1511. package/extensions/twitch/test/setup.ts +7 -0
  1512. package/extensions/voice-call/CHANGELOG.md +109 -0
  1513. package/extensions/voice-call/README.md +139 -0
  1514. package/extensions/voice-call/index.ts +493 -0
  1515. package/extensions/voice-call/node_modules/.bin/openclaw +21 -0
  1516. package/extensions/voice-call/openclaw.plugin.json +559 -0
  1517. package/extensions/voice-call/package.json +19 -0
  1518. package/extensions/voice-call/src/allowlist.ts +19 -0
  1519. package/extensions/voice-call/src/cli.ts +279 -0
  1520. package/extensions/voice-call/src/config.test.ts +234 -0
  1521. package/extensions/voice-call/src/config.ts +523 -0
  1522. package/extensions/voice-call/src/core-bridge.ts +159 -0
  1523. package/extensions/voice-call/src/manager/context.ts +21 -0
  1524. package/extensions/voice-call/src/manager/events.ts +188 -0
  1525. package/extensions/voice-call/src/manager/lookup.ts +35 -0
  1526. package/extensions/voice-call/src/manager/outbound.ts +275 -0
  1527. package/extensions/voice-call/src/manager/state.ts +48 -0
  1528. package/extensions/voice-call/src/manager/store.ts +91 -0
  1529. package/extensions/voice-call/src/manager/timers.ts +89 -0
  1530. package/extensions/voice-call/src/manager/twiml.ts +9 -0
  1531. package/extensions/voice-call/src/manager.test.ts +194 -0
  1532. package/extensions/voice-call/src/manager.ts +887 -0
  1533. package/extensions/voice-call/src/media-stream.test.ts +96 -0
  1534. package/extensions/voice-call/src/media-stream.ts +411 -0
  1535. package/extensions/voice-call/src/providers/base.ts +67 -0
  1536. package/extensions/voice-call/src/providers/index.ts +10 -0
  1537. package/extensions/voice-call/src/providers/mock.ts +165 -0
  1538. package/extensions/voice-call/src/providers/plivo.test.ts +27 -0
  1539. package/extensions/voice-call/src/providers/plivo.ts +515 -0
  1540. package/extensions/voice-call/src/providers/stt-openai-realtime.ts +311 -0
  1541. package/extensions/voice-call/src/providers/telnyx.ts +371 -0
  1542. package/extensions/voice-call/src/providers/tts-openai.ts +259 -0
  1543. package/extensions/voice-call/src/providers/twilio/api.ts +42 -0
  1544. package/extensions/voice-call/src/providers/twilio/webhook.ts +32 -0
  1545. package/extensions/voice-call/src/providers/twilio.test.ts +60 -0
  1546. package/extensions/voice-call/src/providers/twilio.ts +626 -0
  1547. package/extensions/voice-call/src/response-generator.ts +158 -0
  1548. package/extensions/voice-call/src/runtime.ts +212 -0
  1549. package/extensions/voice-call/src/telephony-audio.ts +90 -0
  1550. package/extensions/voice-call/src/telephony-tts.ts +104 -0
  1551. package/extensions/voice-call/src/tunnel.ts +314 -0
  1552. package/extensions/voice-call/src/types.ts +272 -0
  1553. package/extensions/voice-call/src/utils.ts +14 -0
  1554. package/extensions/voice-call/src/voice-mapping.ts +67 -0
  1555. package/extensions/voice-call/src/webhook-security.test.ts +377 -0
  1556. package/extensions/voice-call/src/webhook-security.ts +689 -0
  1557. package/extensions/voice-call/src/webhook.ts +491 -0
  1558. package/extensions/whatsapp/index.ts +17 -0
  1559. package/extensions/whatsapp/node_modules/.bin/openclaw +21 -0
  1560. package/extensions/whatsapp/openclaw.plugin.json +9 -0
  1561. package/extensions/whatsapp/package.json +14 -0
  1562. package/extensions/whatsapp/src/channel.ts +508 -0
  1563. package/extensions/whatsapp/src/runtime.ts +14 -0
  1564. package/extensions/zalo/CHANGELOG.md +89 -0
  1565. package/extensions/zalo/README.md +50 -0
  1566. package/extensions/zalo/index.ts +19 -0
  1567. package/extensions/zalo/node_modules/.bin/openclaw +21 -0
  1568. package/extensions/zalo/openclaw.plugin.json +9 -0
  1569. package/extensions/zalo/package.json +36 -0
  1570. package/extensions/zalo/src/accounts.ts +80 -0
  1571. package/extensions/zalo/src/actions.ts +67 -0
  1572. package/extensions/zalo/src/api.ts +208 -0
  1573. package/extensions/zalo/src/channel.directory.test.ts +43 -0
  1574. package/extensions/zalo/src/channel.ts +414 -0
  1575. package/extensions/zalo/src/config-schema.ts +24 -0
  1576. package/extensions/zalo/src/monitor.ts +753 -0
  1577. package/extensions/zalo/src/monitor.webhook.test.ts +73 -0
  1578. package/extensions/zalo/src/onboarding.ts +401 -0
  1579. package/extensions/zalo/src/probe.ts +46 -0
  1580. package/extensions/zalo/src/proxy.ts +21 -0
  1581. package/extensions/zalo/src/runtime.ts +14 -0
  1582. package/extensions/zalo/src/send.ts +124 -0
  1583. package/extensions/zalo/src/status-issues.ts +53 -0
  1584. package/extensions/zalo/src/token.ts +63 -0
  1585. package/extensions/zalo/src/types.ts +42 -0
  1586. package/extensions/zalouser/CHANGELOG.md +61 -0
  1587. package/extensions/zalouser/README.md +225 -0
  1588. package/extensions/zalouser/index.ts +31 -0
  1589. package/extensions/zalouser/node_modules/.bin/openclaw +21 -0
  1590. package/extensions/zalouser/openclaw.plugin.json +9 -0
  1591. package/extensions/zalouser/package.json +36 -0
  1592. package/extensions/zalouser/src/accounts.ts +135 -0
  1593. package/extensions/zalouser/src/channel.test.ts +18 -0
  1594. package/extensions/zalouser/src/channel.ts +686 -0
  1595. package/extensions/zalouser/src/config-schema.ts +27 -0
  1596. package/extensions/zalouser/src/monitor.ts +590 -0
  1597. package/extensions/zalouser/src/onboarding.ts +504 -0
  1598. package/extensions/zalouser/src/probe.ts +28 -0
  1599. package/extensions/zalouser/src/runtime.ts +14 -0
  1600. package/extensions/zalouser/src/send.ts +160 -0
  1601. package/extensions/zalouser/src/status-issues.test.ts +57 -0
  1602. package/extensions/zalouser/src/status-issues.ts +89 -0
  1603. package/extensions/zalouser/src/tool.ts +164 -0
  1604. package/extensions/zalouser/src/types.ts +108 -0
  1605. package/extensions/zalouser/src/zca.ts +202 -0
  1606. package/openclaw.mjs +14 -0
  1607. package/package.json +245 -0
  1608. package/skills/1password/SKILL.md +70 -0
  1609. package/skills/1password/references/cli-examples.md +29 -0
  1610. package/skills/1password/references/get-started.md +17 -0
  1611. package/skills/apple-notes/SKILL.md +77 -0
  1612. package/skills/apple-reminders/SKILL.md +96 -0
  1613. package/skills/bear-notes/SKILL.md +107 -0
  1614. package/skills/bird/SKILL.md +224 -0
  1615. package/skills/blogwatcher/SKILL.md +69 -0
  1616. package/skills/blucli/SKILL.md +47 -0
  1617. package/skills/bluebubbles/SKILL.md +131 -0
  1618. package/skills/camsnap/SKILL.md +45 -0
  1619. package/skills/canvas/SKILL.md +198 -0
  1620. package/skills/clawhub/SKILL.md +77 -0
  1621. package/skills/coding-agent/SKILL.md +284 -0
  1622. package/skills/discord/SKILL.md +578 -0
  1623. package/skills/eightctl/SKILL.md +50 -0
  1624. package/skills/food-order/SKILL.md +48 -0
  1625. package/skills/gemini/SKILL.md +43 -0
  1626. package/skills/ghostly-projects/SKILL.md +160 -0
  1627. package/skills/gifgrep/SKILL.md +79 -0
  1628. package/skills/github/SKILL.md +77 -0
  1629. package/skills/gog/SKILL.md +116 -0
  1630. package/skills/goplaces/SKILL.md +52 -0
  1631. package/skills/healthcheck/SKILL.md +245 -0
  1632. package/skills/himalaya/SKILL.md +257 -0
  1633. package/skills/himalaya/references/configuration.md +184 -0
  1634. package/skills/himalaya/references/message-composition.md +199 -0
  1635. package/skills/imsg/SKILL.md +74 -0
  1636. package/skills/linear/SKILL.md +111 -0
  1637. package/skills/linear/linear.sh +204 -0
  1638. package/skills/local-places/SERVER_README.md +101 -0
  1639. package/skills/local-places/SKILL.md +102 -0
  1640. package/skills/local-places/pyproject.toml +21 -0
  1641. package/skills/local-places/src/local_places/__init__.py +2 -0
  1642. package/skills/local-places/src/local_places/google_places.py +314 -0
  1643. package/skills/local-places/src/local_places/main.py +65 -0
  1644. package/skills/local-places/src/local_places/schemas.py +107 -0
  1645. package/skills/mcporter/SKILL.md +61 -0
  1646. package/skills/model-usage/SKILL.md +69 -0
  1647. package/skills/model-usage/references/codexbar-cli.md +33 -0
  1648. package/skills/model-usage/scripts/model_usage.py +310 -0
  1649. package/skills/nano-banana-pro/SKILL.md +58 -0
  1650. package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
  1651. package/skills/nano-pdf/SKILL.md +38 -0
  1652. package/skills/notion/SKILL.md +172 -0
  1653. package/skills/obsidian/SKILL.md +81 -0
  1654. package/skills/openai-image-gen/SKILL.md +89 -0
  1655. package/skills/openai-image-gen/scripts/gen.py +240 -0
  1656. package/skills/openai-whisper/SKILL.md +38 -0
  1657. package/skills/openai-whisper-api/SKILL.md +52 -0
  1658. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  1659. package/skills/openhue/SKILL.md +51 -0
  1660. package/skills/oracle/SKILL.md +125 -0
  1661. package/skills/ordercli/SKILL.md +78 -0
  1662. package/skills/peekaboo/SKILL.md +190 -0
  1663. package/skills/sag/SKILL.md +87 -0
  1664. package/skills/session-logs/SKILL.md +115 -0
  1665. package/skills/sherpa-onnx-tts/SKILL.md +103 -0
  1666. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  1667. package/skills/skill-creator/SKILL.md +370 -0
  1668. package/skills/skill-creator/license.txt +202 -0
  1669. package/skills/skill-creator/scripts/init_skill.py +378 -0
  1670. package/skills/skill-creator/scripts/package_skill.py +111 -0
  1671. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  1672. package/skills/slack/SKILL.md +144 -0
  1673. package/skills/songsee/SKILL.md +49 -0
  1674. package/skills/sonoscli/SKILL.md +46 -0
  1675. package/skills/spotify-player/SKILL.md +64 -0
  1676. package/skills/summarize/SKILL.md +87 -0
  1677. package/skills/things-mac/SKILL.md +86 -0
  1678. package/skills/tmux/SKILL.md +135 -0
  1679. package/skills/tmux/scripts/find-sessions.sh +112 -0
  1680. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  1681. package/skills/trello/SKILL.md +95 -0
  1682. package/skills/video-frames/SKILL.md +46 -0
  1683. package/skills/video-frames/scripts/frame.sh +81 -0
  1684. package/skills/voice-call/SKILL.md +45 -0
  1685. package/skills/wacli/SKILL.md +72 -0
  1686. package/skills/weather/SKILL.md +54 -0
@@ -0,0 +1,1649 @@
1
+ import { t as formatCliCommand } from "./command-format-ayFsmwwz.js";
2
+ import "./utils-DX85MiPR.js";
3
+ import "./exec-B8JKbXKW.js";
4
+ import { _ as formatAriaSnapshot, i as getChromeWebSocketUrl, n as formatErrorMessage, x as getHeadersWithAuth } from "./errors-CMCg46fK.js";
5
+ import path from "node:path";
6
+ import fs from "node:fs/promises";
7
+ import crypto from "node:crypto";
8
+ import { chromium, devices } from "playwright-core";
9
+
10
+ //#region src/browser/pw-session.ts
11
+ const pageStates = /* @__PURE__ */ new WeakMap();
12
+ const contextStates = /* @__PURE__ */ new WeakMap();
13
+ const observedContexts = /* @__PURE__ */ new WeakSet();
14
+ const observedPages = /* @__PURE__ */ new WeakSet();
15
+ const roleRefsByTarget = /* @__PURE__ */ new Map();
16
+ const MAX_ROLE_REFS_CACHE = 50;
17
+ const MAX_CONSOLE_MESSAGES = 500;
18
+ const MAX_PAGE_ERRORS = 200;
19
+ const MAX_NETWORK_REQUESTS = 500;
20
+ let cached = null;
21
+ let connecting = null;
22
+ function normalizeCdpUrl(raw) {
23
+ return raw.replace(/\/$/, "");
24
+ }
25
+ function roleRefsKey(cdpUrl, targetId) {
26
+ return `${normalizeCdpUrl(cdpUrl)}::${targetId}`;
27
+ }
28
+ function rememberRoleRefsForTarget(opts) {
29
+ const targetId = opts.targetId.trim();
30
+ if (!targetId) return;
31
+ roleRefsByTarget.set(roleRefsKey(opts.cdpUrl, targetId), {
32
+ refs: opts.refs,
33
+ ...opts.frameSelector ? { frameSelector: opts.frameSelector } : {},
34
+ ...opts.mode ? { mode: opts.mode } : {}
35
+ });
36
+ while (roleRefsByTarget.size > MAX_ROLE_REFS_CACHE) {
37
+ const first = roleRefsByTarget.keys().next();
38
+ if (first.done) break;
39
+ roleRefsByTarget.delete(first.value);
40
+ }
41
+ }
42
+ function storeRoleRefsForTarget(opts) {
43
+ const state = ensurePageState(opts.page);
44
+ state.roleRefs = opts.refs;
45
+ state.roleRefsFrameSelector = opts.frameSelector;
46
+ state.roleRefsMode = opts.mode;
47
+ if (!opts.targetId?.trim()) return;
48
+ rememberRoleRefsForTarget({
49
+ cdpUrl: opts.cdpUrl,
50
+ targetId: opts.targetId,
51
+ refs: opts.refs,
52
+ frameSelector: opts.frameSelector,
53
+ mode: opts.mode
54
+ });
55
+ }
56
+ function restoreRoleRefsForTarget(opts) {
57
+ const targetId = opts.targetId?.trim() || "";
58
+ if (!targetId) return;
59
+ const cached = roleRefsByTarget.get(roleRefsKey(opts.cdpUrl, targetId));
60
+ if (!cached) return;
61
+ const state = ensurePageState(opts.page);
62
+ if (state.roleRefs) return;
63
+ state.roleRefs = cached.refs;
64
+ state.roleRefsFrameSelector = cached.frameSelector;
65
+ state.roleRefsMode = cached.mode;
66
+ }
67
+ function ensurePageState(page) {
68
+ const existing = pageStates.get(page);
69
+ if (existing) return existing;
70
+ const state = {
71
+ console: [],
72
+ errors: [],
73
+ requests: [],
74
+ requestIds: /* @__PURE__ */ new WeakMap(),
75
+ nextRequestId: 0,
76
+ armIdUpload: 0,
77
+ armIdDialog: 0,
78
+ armIdDownload: 0
79
+ };
80
+ pageStates.set(page, state);
81
+ if (!observedPages.has(page)) {
82
+ observedPages.add(page);
83
+ page.on("console", (msg) => {
84
+ const entry = {
85
+ type: msg.type(),
86
+ text: msg.text(),
87
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
88
+ location: msg.location()
89
+ };
90
+ state.console.push(entry);
91
+ if (state.console.length > MAX_CONSOLE_MESSAGES) state.console.shift();
92
+ });
93
+ page.on("pageerror", (err) => {
94
+ state.errors.push({
95
+ message: err?.message ? String(err.message) : String(err),
96
+ name: err?.name ? String(err.name) : void 0,
97
+ stack: err?.stack ? String(err.stack) : void 0,
98
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
99
+ });
100
+ if (state.errors.length > MAX_PAGE_ERRORS) state.errors.shift();
101
+ });
102
+ page.on("request", (req) => {
103
+ state.nextRequestId += 1;
104
+ const id = `r${state.nextRequestId}`;
105
+ state.requestIds.set(req, id);
106
+ state.requests.push({
107
+ id,
108
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
109
+ method: req.method(),
110
+ url: req.url(),
111
+ resourceType: req.resourceType()
112
+ });
113
+ if (state.requests.length > MAX_NETWORK_REQUESTS) state.requests.shift();
114
+ });
115
+ page.on("response", (resp) => {
116
+ const req = resp.request();
117
+ const id = state.requestIds.get(req);
118
+ if (!id) return;
119
+ let rec;
120
+ for (let i = state.requests.length - 1; i >= 0; i -= 1) {
121
+ const candidate = state.requests[i];
122
+ if (candidate && candidate.id === id) {
123
+ rec = candidate;
124
+ break;
125
+ }
126
+ }
127
+ if (!rec) return;
128
+ rec.status = resp.status();
129
+ rec.ok = resp.ok();
130
+ });
131
+ page.on("requestfailed", (req) => {
132
+ const id = state.requestIds.get(req);
133
+ if (!id) return;
134
+ let rec;
135
+ for (let i = state.requests.length - 1; i >= 0; i -= 1) {
136
+ const candidate = state.requests[i];
137
+ if (candidate && candidate.id === id) {
138
+ rec = candidate;
139
+ break;
140
+ }
141
+ }
142
+ if (!rec) return;
143
+ rec.failureText = req.failure()?.errorText;
144
+ rec.ok = false;
145
+ });
146
+ page.on("close", () => {
147
+ pageStates.delete(page);
148
+ observedPages.delete(page);
149
+ });
150
+ }
151
+ return state;
152
+ }
153
+ function observeContext(context) {
154
+ if (observedContexts.has(context)) return;
155
+ observedContexts.add(context);
156
+ ensureContextState(context);
157
+ for (const page of context.pages()) ensurePageState(page);
158
+ context.on("page", (page) => ensurePageState(page));
159
+ }
160
+ function ensureContextState(context) {
161
+ const existing = contextStates.get(context);
162
+ if (existing) return existing;
163
+ const state = { traceActive: false };
164
+ contextStates.set(context, state);
165
+ return state;
166
+ }
167
+ function observeBrowser(browser) {
168
+ for (const context of browser.contexts()) observeContext(context);
169
+ }
170
+ async function connectBrowser(cdpUrl) {
171
+ const normalized = normalizeCdpUrl(cdpUrl);
172
+ if (cached?.cdpUrl === normalized) return cached;
173
+ if (connecting) return await connecting;
174
+ const connectWithRetry = async () => {
175
+ let lastErr;
176
+ for (let attempt = 0; attempt < 3; attempt += 1) try {
177
+ const timeout = 5e3 + attempt * 2e3;
178
+ const endpoint = await getChromeWebSocketUrl(normalized, timeout).catch(() => null) ?? normalized;
179
+ const headers = getHeadersWithAuth(endpoint);
180
+ const browser = await chromium.connectOverCDP(endpoint, {
181
+ timeout,
182
+ headers
183
+ });
184
+ const connected = {
185
+ browser,
186
+ cdpUrl: normalized
187
+ };
188
+ cached = connected;
189
+ observeBrowser(browser);
190
+ browser.on("disconnected", () => {
191
+ if (cached?.browser === browser) cached = null;
192
+ });
193
+ return connected;
194
+ } catch (err) {
195
+ lastErr = err;
196
+ const delay = 250 + attempt * 250;
197
+ await new Promise((r) => setTimeout(r, delay));
198
+ }
199
+ if (lastErr instanceof Error) throw lastErr;
200
+ const message = lastErr ? formatErrorMessage(lastErr) : "CDP connect failed";
201
+ throw new Error(message);
202
+ };
203
+ connecting = connectWithRetry().finally(() => {
204
+ connecting = null;
205
+ });
206
+ return await connecting;
207
+ }
208
+ async function getAllPages(browser) {
209
+ return browser.contexts().flatMap((c) => c.pages());
210
+ }
211
+ async function pageTargetId(page) {
212
+ const session = await page.context().newCDPSession(page);
213
+ try {
214
+ const info = await session.send("Target.getTargetInfo");
215
+ return String(info?.targetInfo?.targetId ?? "").trim() || null;
216
+ } finally {
217
+ await session.detach().catch(() => {});
218
+ }
219
+ }
220
+ async function findPageByTargetId(browser, targetId, cdpUrl) {
221
+ const pages = await getAllPages(browser);
222
+ for (const page of pages) {
223
+ const tid = await pageTargetId(page).catch(() => null);
224
+ if (tid && tid === targetId) return page;
225
+ }
226
+ if (cdpUrl) try {
227
+ const listUrl = `${cdpUrl.replace(/\/+$/, "").replace(/^ws:/, "http:").replace(/\/cdp$/, "")}/json/list`;
228
+ const response = await fetch(listUrl, { headers: getHeadersWithAuth(listUrl) });
229
+ if (response.ok) {
230
+ const targets = await response.json();
231
+ const target = targets.find((t) => t.id === targetId);
232
+ if (target) {
233
+ const urlMatch = pages.filter((p) => p.url() === target.url);
234
+ if (urlMatch.length === 1) return urlMatch[0];
235
+ if (urlMatch.length > 1) {
236
+ const sameUrlTargets = targets.filter((t) => t.url === target.url);
237
+ if (sameUrlTargets.length === urlMatch.length) {
238
+ const idx = sameUrlTargets.findIndex((t) => t.id === targetId);
239
+ if (idx >= 0 && idx < urlMatch.length) return urlMatch[idx];
240
+ }
241
+ }
242
+ }
243
+ }
244
+ } catch {}
245
+ return null;
246
+ }
247
+ async function getPageForTargetId(opts) {
248
+ const { browser } = await connectBrowser(opts.cdpUrl);
249
+ const pages = await getAllPages(browser);
250
+ if (!pages.length) throw new Error("No pages available in the connected browser.");
251
+ const first = pages[0];
252
+ if (!opts.targetId) return first;
253
+ const found = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
254
+ if (!found) {
255
+ if (pages.length === 1) return first;
256
+ throw new Error("tab not found");
257
+ }
258
+ return found;
259
+ }
260
+ function refLocator(page, ref) {
261
+ const normalized = ref.startsWith("@") ? ref.slice(1) : ref.startsWith("ref=") ? ref.slice(4) : ref;
262
+ if (/^e\d+$/.test(normalized)) {
263
+ const state = pageStates.get(page);
264
+ if (state?.roleRefsMode === "aria") return (state.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page).locator(`aria-ref=${normalized}`);
265
+ const info = state?.roleRefs?.[normalized];
266
+ if (!info) throw new Error(`Unknown ref "${normalized}". Run a new snapshot and use a ref from that snapshot.`);
267
+ const locAny = state?.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page;
268
+ const locator = info.name ? locAny.getByRole(info.role, {
269
+ name: info.name,
270
+ exact: true
271
+ }) : locAny.getByRole(info.role);
272
+ return info.nth !== void 0 ? locator.nth(info.nth) : locator;
273
+ }
274
+ return page.locator(`aria-ref=${normalized}`);
275
+ }
276
+ async function closePlaywrightBrowserConnection() {
277
+ const cur = cached;
278
+ cached = null;
279
+ if (!cur) return;
280
+ await cur.browser.close().catch(() => {});
281
+ }
282
+ /**
283
+ * List all pages/tabs from the persistent Playwright connection.
284
+ * Used for remote profiles where HTTP-based /json/list is ephemeral.
285
+ */
286
+ async function listPagesViaPlaywright(opts) {
287
+ const { browser } = await connectBrowser(opts.cdpUrl);
288
+ const pages = await getAllPages(browser);
289
+ const results = [];
290
+ for (const page of pages) {
291
+ const tid = await pageTargetId(page).catch(() => null);
292
+ if (tid) results.push({
293
+ targetId: tid,
294
+ title: await page.title().catch(() => ""),
295
+ url: page.url(),
296
+ type: "page"
297
+ });
298
+ }
299
+ return results;
300
+ }
301
+ /**
302
+ * Create a new page/tab using the persistent Playwright connection.
303
+ * Used for remote profiles where HTTP-based /json/new is ephemeral.
304
+ * Returns the new page's targetId and metadata.
305
+ */
306
+ async function createPageViaPlaywright(opts) {
307
+ const { browser } = await connectBrowser(opts.cdpUrl);
308
+ const context = browser.contexts()[0] ?? await browser.newContext();
309
+ ensureContextState(context);
310
+ const page = await context.newPage();
311
+ ensurePageState(page);
312
+ const targetUrl = opts.url.trim() || "about:blank";
313
+ if (targetUrl !== "about:blank") await page.goto(targetUrl, { timeout: 3e4 }).catch(() => {});
314
+ const tid = await pageTargetId(page).catch(() => null);
315
+ if (!tid) throw new Error("Failed to get targetId for new page");
316
+ return {
317
+ targetId: tid,
318
+ title: await page.title().catch(() => ""),
319
+ url: page.url(),
320
+ type: "page"
321
+ };
322
+ }
323
+ /**
324
+ * Close a page/tab by targetId using the persistent Playwright connection.
325
+ * Used for remote profiles where HTTP-based /json/close is ephemeral.
326
+ */
327
+ async function closePageByTargetIdViaPlaywright(opts) {
328
+ const { browser } = await connectBrowser(opts.cdpUrl);
329
+ const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
330
+ if (!page) throw new Error("tab not found");
331
+ await page.close();
332
+ }
333
+ /**
334
+ * Focus a page/tab by targetId using the persistent Playwright connection.
335
+ * Used for remote profiles where HTTP-based /json/activate can be ephemeral.
336
+ */
337
+ async function focusPageByTargetIdViaPlaywright(opts) {
338
+ const { browser } = await connectBrowser(opts.cdpUrl);
339
+ const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
340
+ if (!page) throw new Error("tab not found");
341
+ try {
342
+ await page.bringToFront();
343
+ } catch (err) {
344
+ const session = await page.context().newCDPSession(page);
345
+ try {
346
+ await session.send("Page.bringToFront");
347
+ return;
348
+ } catch {
349
+ throw err;
350
+ } finally {
351
+ await session.detach().catch(() => {});
352
+ }
353
+ }
354
+ }
355
+
356
+ //#endregion
357
+ //#region src/browser/pw-tools-core.activity.ts
358
+ async function getPageErrorsViaPlaywright(opts) {
359
+ const state = ensurePageState(await getPageForTargetId(opts));
360
+ const errors = [...state.errors];
361
+ if (opts.clear) state.errors = [];
362
+ return { errors };
363
+ }
364
+ async function getNetworkRequestsViaPlaywright(opts) {
365
+ const state = ensurePageState(await getPageForTargetId(opts));
366
+ const raw = [...state.requests];
367
+ const filter = typeof opts.filter === "string" ? opts.filter.trim() : "";
368
+ const requests = filter ? raw.filter((r) => r.url.includes(filter)) : raw;
369
+ if (opts.clear) {
370
+ state.requests = [];
371
+ state.requestIds = /* @__PURE__ */ new WeakMap();
372
+ }
373
+ return { requests };
374
+ }
375
+ function consolePriority(level) {
376
+ switch (level) {
377
+ case "error": return 3;
378
+ case "warning": return 2;
379
+ case "info":
380
+ case "log": return 1;
381
+ case "debug": return 0;
382
+ default: return 1;
383
+ }
384
+ }
385
+ async function getConsoleMessagesViaPlaywright(opts) {
386
+ const state = ensurePageState(await getPageForTargetId(opts));
387
+ if (!opts.level) return [...state.console];
388
+ const min = consolePriority(opts.level);
389
+ return state.console.filter((msg) => consolePriority(msg.type) >= min);
390
+ }
391
+
392
+ //#endregion
393
+ //#region src/browser/pw-role-snapshot.ts
394
+ const INTERACTIVE_ROLES = new Set([
395
+ "button",
396
+ "link",
397
+ "textbox",
398
+ "checkbox",
399
+ "radio",
400
+ "combobox",
401
+ "listbox",
402
+ "menuitem",
403
+ "menuitemcheckbox",
404
+ "menuitemradio",
405
+ "option",
406
+ "searchbox",
407
+ "slider",
408
+ "spinbutton",
409
+ "switch",
410
+ "tab",
411
+ "treeitem"
412
+ ]);
413
+ const CONTENT_ROLES = new Set([
414
+ "heading",
415
+ "cell",
416
+ "gridcell",
417
+ "columnheader",
418
+ "rowheader",
419
+ "listitem",
420
+ "article",
421
+ "region",
422
+ "main",
423
+ "navigation"
424
+ ]);
425
+ const STRUCTURAL_ROLES = new Set([
426
+ "generic",
427
+ "group",
428
+ "list",
429
+ "table",
430
+ "row",
431
+ "rowgroup",
432
+ "grid",
433
+ "treegrid",
434
+ "menu",
435
+ "menubar",
436
+ "toolbar",
437
+ "tablist",
438
+ "tree",
439
+ "directory",
440
+ "document",
441
+ "application",
442
+ "presentation",
443
+ "none"
444
+ ]);
445
+ function getRoleSnapshotStats(snapshot, refs) {
446
+ const interactive = Object.values(refs).filter((r) => INTERACTIVE_ROLES.has(r.role)).length;
447
+ return {
448
+ lines: snapshot.split("\n").length,
449
+ chars: snapshot.length,
450
+ refs: Object.keys(refs).length,
451
+ interactive
452
+ };
453
+ }
454
+ function getIndentLevel(line) {
455
+ const match = line.match(/^(\s*)/);
456
+ return match ? Math.floor(match[1].length / 2) : 0;
457
+ }
458
+ function createRoleNameTracker() {
459
+ const counts = /* @__PURE__ */ new Map();
460
+ const refsByKey = /* @__PURE__ */ new Map();
461
+ return {
462
+ counts,
463
+ refsByKey,
464
+ getKey(role, name) {
465
+ return `${role}:${name ?? ""}`;
466
+ },
467
+ getNextIndex(role, name) {
468
+ const key = this.getKey(role, name);
469
+ const current = counts.get(key) ?? 0;
470
+ counts.set(key, current + 1);
471
+ return current;
472
+ },
473
+ trackRef(role, name, ref) {
474
+ const key = this.getKey(role, name);
475
+ const list = refsByKey.get(key) ?? [];
476
+ list.push(ref);
477
+ refsByKey.set(key, list);
478
+ },
479
+ getDuplicateKeys() {
480
+ const out = /* @__PURE__ */ new Set();
481
+ for (const [key, refs] of refsByKey) if (refs.length > 1) out.add(key);
482
+ return out;
483
+ }
484
+ };
485
+ }
486
+ function removeNthFromNonDuplicates(refs, tracker) {
487
+ const duplicates = tracker.getDuplicateKeys();
488
+ for (const [ref, data] of Object.entries(refs)) {
489
+ const key = tracker.getKey(data.role, data.name);
490
+ if (!duplicates.has(key)) delete refs[ref]?.nth;
491
+ }
492
+ }
493
+ function compactTree(tree) {
494
+ const lines = tree.split("\n");
495
+ const result = [];
496
+ for (let i = 0; i < lines.length; i += 1) {
497
+ const line = lines[i];
498
+ if (line.includes("[ref=")) {
499
+ result.push(line);
500
+ continue;
501
+ }
502
+ if (line.includes(":") && !line.trimEnd().endsWith(":")) {
503
+ result.push(line);
504
+ continue;
505
+ }
506
+ const currentIndent = getIndentLevel(line);
507
+ let hasRelevantChildren = false;
508
+ for (let j = i + 1; j < lines.length; j += 1) {
509
+ if (getIndentLevel(lines[j]) <= currentIndent) break;
510
+ if (lines[j]?.includes("[ref=")) {
511
+ hasRelevantChildren = true;
512
+ break;
513
+ }
514
+ }
515
+ if (hasRelevantChildren) result.push(line);
516
+ }
517
+ return result.join("\n");
518
+ }
519
+ function processLine(line, refs, options, tracker, nextRef) {
520
+ const depth = getIndentLevel(line);
521
+ if (options.maxDepth !== void 0 && depth > options.maxDepth) return null;
522
+ const match = line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);
523
+ if (!match) return options.interactive ? null : line;
524
+ const [, prefix, roleRaw, name, suffix] = match;
525
+ if (roleRaw.startsWith("/")) return options.interactive ? null : line;
526
+ const role = roleRaw.toLowerCase();
527
+ const isInteractive = INTERACTIVE_ROLES.has(role);
528
+ const isContent = CONTENT_ROLES.has(role);
529
+ const isStructural = STRUCTURAL_ROLES.has(role);
530
+ if (options.interactive && !isInteractive) return null;
531
+ if (options.compact && isStructural && !name) return null;
532
+ if (!(isInteractive || isContent && name)) return line;
533
+ const ref = nextRef();
534
+ const nth = tracker.getNextIndex(role, name);
535
+ tracker.trackRef(role, name, ref);
536
+ refs[ref] = {
537
+ role,
538
+ name,
539
+ nth
540
+ };
541
+ let enhanced = `${prefix}${roleRaw}`;
542
+ if (name) enhanced += ` "${name}"`;
543
+ enhanced += ` [ref=${ref}]`;
544
+ if (nth > 0) enhanced += ` [nth=${nth}]`;
545
+ if (suffix) enhanced += suffix;
546
+ return enhanced;
547
+ }
548
+ function parseRoleRef(raw) {
549
+ const trimmed = raw.trim();
550
+ if (!trimmed) return null;
551
+ const normalized = trimmed.startsWith("@") ? trimmed.slice(1) : trimmed.startsWith("ref=") ? trimmed.slice(4) : trimmed;
552
+ return /^e\d+$/.test(normalized) ? normalized : null;
553
+ }
554
+ function buildRoleSnapshotFromAriaSnapshot(ariaSnapshot, options = {}) {
555
+ const lines = ariaSnapshot.split("\n");
556
+ const refs = {};
557
+ const tracker = createRoleNameTracker();
558
+ let counter = 0;
559
+ const nextRef = () => {
560
+ counter += 1;
561
+ return `e${counter}`;
562
+ };
563
+ if (options.interactive) {
564
+ const result = [];
565
+ for (const line of lines) {
566
+ const depth = getIndentLevel(line);
567
+ if (options.maxDepth !== void 0 && depth > options.maxDepth) continue;
568
+ const match = line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);
569
+ if (!match) continue;
570
+ const [, , roleRaw, name, suffix] = match;
571
+ if (roleRaw.startsWith("/")) continue;
572
+ const role = roleRaw.toLowerCase();
573
+ if (!INTERACTIVE_ROLES.has(role)) continue;
574
+ const ref = nextRef();
575
+ const nth = tracker.getNextIndex(role, name);
576
+ tracker.trackRef(role, name, ref);
577
+ refs[ref] = {
578
+ role,
579
+ name,
580
+ nth
581
+ };
582
+ let enhanced = `- ${roleRaw}`;
583
+ if (name) enhanced += ` "${name}"`;
584
+ enhanced += ` [ref=${ref}]`;
585
+ if (nth > 0) enhanced += ` [nth=${nth}]`;
586
+ if (suffix.includes("[")) enhanced += suffix;
587
+ result.push(enhanced);
588
+ }
589
+ removeNthFromNonDuplicates(refs, tracker);
590
+ return {
591
+ snapshot: result.join("\n") || "(no interactive elements)",
592
+ refs
593
+ };
594
+ }
595
+ const result = [];
596
+ for (const line of lines) {
597
+ const processed = processLine(line, refs, options, tracker, nextRef);
598
+ if (processed !== null) result.push(processed);
599
+ }
600
+ removeNthFromNonDuplicates(refs, tracker);
601
+ const tree = result.join("\n") || "(empty)";
602
+ return {
603
+ snapshot: options.compact ? compactTree(tree) : tree,
604
+ refs
605
+ };
606
+ }
607
+ function parseAiSnapshotRef(suffix) {
608
+ const match = suffix.match(/\[ref=(e\d+)\]/i);
609
+ return match ? match[1] : null;
610
+ }
611
+ /**
612
+ * Build a role snapshot from Playwright's AI snapshot output while preserving Playwright's own
613
+ * aria-ref ids (e.g. ref=e13). This makes the refs self-resolving across calls.
614
+ */
615
+ function buildRoleSnapshotFromAiSnapshot(aiSnapshot, options = {}) {
616
+ const lines = String(aiSnapshot ?? "").split("\n");
617
+ const refs = {};
618
+ if (options.interactive) {
619
+ const out = [];
620
+ for (const line of lines) {
621
+ const depth = getIndentLevel(line);
622
+ if (options.maxDepth !== void 0 && depth > options.maxDepth) continue;
623
+ const match = line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);
624
+ if (!match) continue;
625
+ const [, , roleRaw, name, suffix] = match;
626
+ if (roleRaw.startsWith("/")) continue;
627
+ const role = roleRaw.toLowerCase();
628
+ if (!INTERACTIVE_ROLES.has(role)) continue;
629
+ const ref = parseAiSnapshotRef(suffix);
630
+ if (!ref) continue;
631
+ refs[ref] = {
632
+ role,
633
+ ...name ? { name } : {}
634
+ };
635
+ out.push(`- ${roleRaw}${name ? ` "${name}"` : ""}${suffix}`);
636
+ }
637
+ return {
638
+ snapshot: out.join("\n") || "(no interactive elements)",
639
+ refs
640
+ };
641
+ }
642
+ const out = [];
643
+ for (const line of lines) {
644
+ const depth = getIndentLevel(line);
645
+ if (options.maxDepth !== void 0 && depth > options.maxDepth) continue;
646
+ const match = line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);
647
+ if (!match) {
648
+ out.push(line);
649
+ continue;
650
+ }
651
+ const [, , roleRaw, name, suffix] = match;
652
+ if (roleRaw.startsWith("/")) {
653
+ out.push(line);
654
+ continue;
655
+ }
656
+ const role = roleRaw.toLowerCase();
657
+ const isStructural = STRUCTURAL_ROLES.has(role);
658
+ if (options.compact && isStructural && !name) continue;
659
+ const ref = parseAiSnapshotRef(suffix);
660
+ if (ref) refs[ref] = {
661
+ role,
662
+ ...name ? { name } : {}
663
+ };
664
+ out.push(line);
665
+ }
666
+ const tree = out.join("\n") || "(empty)";
667
+ return {
668
+ snapshot: options.compact ? compactTree(tree) : tree,
669
+ refs
670
+ };
671
+ }
672
+
673
+ //#endregion
674
+ //#region src/browser/pw-tools-core.shared.ts
675
+ let nextUploadArmId = 0;
676
+ let nextDialogArmId = 0;
677
+ let nextDownloadArmId = 0;
678
+ function bumpUploadArmId() {
679
+ nextUploadArmId += 1;
680
+ return nextUploadArmId;
681
+ }
682
+ function bumpDialogArmId() {
683
+ nextDialogArmId += 1;
684
+ return nextDialogArmId;
685
+ }
686
+ function bumpDownloadArmId() {
687
+ nextDownloadArmId += 1;
688
+ return nextDownloadArmId;
689
+ }
690
+ function requireRef(value) {
691
+ const raw = typeof value === "string" ? value.trim() : "";
692
+ const ref = (raw ? parseRoleRef(raw) : null) ?? (raw.startsWith("@") ? raw.slice(1) : raw);
693
+ if (!ref) throw new Error("ref is required");
694
+ return ref;
695
+ }
696
+ function normalizeTimeoutMs(timeoutMs, fallback) {
697
+ return Math.max(500, Math.min(12e4, timeoutMs ?? fallback));
698
+ }
699
+ function toAIFriendlyError(error, selector) {
700
+ const message = error instanceof Error ? error.message : String(error);
701
+ if (message.includes("strict mode violation")) {
702
+ const countMatch = message.match(/resolved to (\d+) elements/);
703
+ const count = countMatch ? countMatch[1] : "multiple";
704
+ return /* @__PURE__ */ new Error(`Selector "${selector}" matched ${count} elements. Run a new snapshot to get updated refs, or use a different ref.`);
705
+ }
706
+ if ((message.includes("Timeout") || message.includes("waiting for")) && (message.includes("to be visible") || message.includes("not visible"))) return /* @__PURE__ */ new Error(`Element "${selector}" not found or not visible. Run a new snapshot to see current page elements.`);
707
+ if (message.includes("intercepts pointer events") || message.includes("not visible") || message.includes("not receive pointer events")) return /* @__PURE__ */ new Error(`Element "${selector}" is not interactable (hidden or covered). Try scrolling it into view, closing overlays, or re-snapshotting.`);
708
+ return error instanceof Error ? error : new Error(message);
709
+ }
710
+
711
+ //#endregion
712
+ //#region src/browser/pw-tools-core.downloads.ts
713
+ function buildTempDownloadPath(fileName) {
714
+ const id = crypto.randomUUID();
715
+ const safeName = fileName.trim() ? fileName.trim() : "download.bin";
716
+ return path.join("/tmp/openclaw/downloads", `${id}-${safeName}`);
717
+ }
718
+ function createPageDownloadWaiter(page, timeoutMs) {
719
+ let done = false;
720
+ let timer;
721
+ let handler;
722
+ const cleanup = () => {
723
+ if (timer) clearTimeout(timer);
724
+ timer = void 0;
725
+ if (handler) {
726
+ page.off("download", handler);
727
+ handler = void 0;
728
+ }
729
+ };
730
+ return {
731
+ promise: new Promise((resolve, reject) => {
732
+ handler = (download) => {
733
+ if (done) return;
734
+ done = true;
735
+ cleanup();
736
+ resolve(download);
737
+ };
738
+ page.on("download", handler);
739
+ timer = setTimeout(() => {
740
+ if (done) return;
741
+ done = true;
742
+ cleanup();
743
+ reject(/* @__PURE__ */ new Error("Timeout waiting for download"));
744
+ }, timeoutMs);
745
+ }),
746
+ cancel: () => {
747
+ if (done) return;
748
+ done = true;
749
+ cleanup();
750
+ }
751
+ };
752
+ }
753
+ async function armFileUploadViaPlaywright(opts) {
754
+ const page = await getPageForTargetId(opts);
755
+ const state = ensurePageState(page);
756
+ const timeout = Math.max(500, Math.min(12e4, opts.timeoutMs ?? 12e4));
757
+ state.armIdUpload = bumpUploadArmId();
758
+ const armId = state.armIdUpload;
759
+ page.waitForEvent("filechooser", { timeout }).then(async (fileChooser) => {
760
+ if (state.armIdUpload !== armId) return;
761
+ if (!opts.paths?.length) {
762
+ try {
763
+ await page.keyboard.press("Escape");
764
+ } catch {}
765
+ return;
766
+ }
767
+ await fileChooser.setFiles(opts.paths);
768
+ try {
769
+ const input = typeof fileChooser.element === "function" ? await Promise.resolve(fileChooser.element()) : null;
770
+ if (input) await input.evaluate((el) => {
771
+ el.dispatchEvent(new Event("input", { bubbles: true }));
772
+ el.dispatchEvent(new Event("change", { bubbles: true }));
773
+ });
774
+ } catch {}
775
+ }).catch(() => {});
776
+ }
777
+ async function armDialogViaPlaywright(opts) {
778
+ const page = await getPageForTargetId(opts);
779
+ const state = ensurePageState(page);
780
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
781
+ state.armIdDialog = bumpDialogArmId();
782
+ const armId = state.armIdDialog;
783
+ page.waitForEvent("dialog", { timeout }).then(async (dialog) => {
784
+ if (state.armIdDialog !== armId) return;
785
+ if (opts.accept) await dialog.accept(opts.promptText);
786
+ else await dialog.dismiss();
787
+ }).catch(() => {});
788
+ }
789
+ async function waitForDownloadViaPlaywright(opts) {
790
+ const page = await getPageForTargetId(opts);
791
+ const state = ensurePageState(page);
792
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
793
+ state.armIdDownload = bumpDownloadArmId();
794
+ const armId = state.armIdDownload;
795
+ const waiter = createPageDownloadWaiter(page, timeout);
796
+ try {
797
+ const download = await waiter.promise;
798
+ if (state.armIdDownload !== armId) throw new Error("Download was superseded by another waiter");
799
+ const suggested = download.suggestedFilename?.() || "download.bin";
800
+ const outPath = opts.path?.trim() || buildTempDownloadPath(suggested);
801
+ await fs.mkdir(path.dirname(outPath), { recursive: true });
802
+ await download.saveAs?.(outPath);
803
+ return {
804
+ url: download.url?.() || "",
805
+ suggestedFilename: suggested,
806
+ path: path.resolve(outPath)
807
+ };
808
+ } catch (err) {
809
+ waiter.cancel();
810
+ throw err;
811
+ }
812
+ }
813
+ async function downloadViaPlaywright(opts) {
814
+ const page = await getPageForTargetId(opts);
815
+ const state = ensurePageState(page);
816
+ restoreRoleRefsForTarget({
817
+ cdpUrl: opts.cdpUrl,
818
+ targetId: opts.targetId,
819
+ page
820
+ });
821
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
822
+ const ref = requireRef(opts.ref);
823
+ const outPath = String(opts.path ?? "").trim();
824
+ if (!outPath) throw new Error("path is required");
825
+ state.armIdDownload = bumpDownloadArmId();
826
+ const armId = state.armIdDownload;
827
+ const waiter = createPageDownloadWaiter(page, timeout);
828
+ try {
829
+ const locator = refLocator(page, ref);
830
+ try {
831
+ await locator.click({ timeout });
832
+ } catch (err) {
833
+ throw toAIFriendlyError(err, ref);
834
+ }
835
+ const download = await waiter.promise;
836
+ if (state.armIdDownload !== armId) throw new Error("Download was superseded by another waiter");
837
+ const suggested = download.suggestedFilename?.() || "download.bin";
838
+ await fs.mkdir(path.dirname(outPath), { recursive: true });
839
+ await download.saveAs?.(outPath);
840
+ return {
841
+ url: download.url?.() || "",
842
+ suggestedFilename: suggested,
843
+ path: path.resolve(outPath)
844
+ };
845
+ } catch (err) {
846
+ waiter.cancel();
847
+ throw err;
848
+ }
849
+ }
850
+
851
+ //#endregion
852
+ //#region src/browser/pw-tools-core.interactions.ts
853
+ async function highlightViaPlaywright(opts) {
854
+ const page = await getPageForTargetId(opts);
855
+ ensurePageState(page);
856
+ restoreRoleRefsForTarget({
857
+ cdpUrl: opts.cdpUrl,
858
+ targetId: opts.targetId,
859
+ page
860
+ });
861
+ const ref = requireRef(opts.ref);
862
+ try {
863
+ await refLocator(page, ref).highlight();
864
+ } catch (err) {
865
+ throw toAIFriendlyError(err, ref);
866
+ }
867
+ }
868
+ async function clickViaPlaywright(opts) {
869
+ const page = await getPageForTargetId({
870
+ cdpUrl: opts.cdpUrl,
871
+ targetId: opts.targetId
872
+ });
873
+ ensurePageState(page);
874
+ restoreRoleRefsForTarget({
875
+ cdpUrl: opts.cdpUrl,
876
+ targetId: opts.targetId,
877
+ page
878
+ });
879
+ const ref = requireRef(opts.ref);
880
+ const locator = refLocator(page, ref);
881
+ const timeout = Math.max(500, Math.min(6e4, Math.floor(opts.timeoutMs ?? 8e3)));
882
+ try {
883
+ if (opts.doubleClick) await locator.dblclick({
884
+ timeout,
885
+ button: opts.button,
886
+ modifiers: opts.modifiers
887
+ });
888
+ else await locator.click({
889
+ timeout,
890
+ button: opts.button,
891
+ modifiers: opts.modifiers
892
+ });
893
+ } catch (err) {
894
+ throw toAIFriendlyError(err, ref);
895
+ }
896
+ }
897
+ async function hoverViaPlaywright(opts) {
898
+ const ref = requireRef(opts.ref);
899
+ const page = await getPageForTargetId(opts);
900
+ ensurePageState(page);
901
+ restoreRoleRefsForTarget({
902
+ cdpUrl: opts.cdpUrl,
903
+ targetId: opts.targetId,
904
+ page
905
+ });
906
+ try {
907
+ await refLocator(page, ref).hover({ timeout: Math.max(500, Math.min(6e4, opts.timeoutMs ?? 8e3)) });
908
+ } catch (err) {
909
+ throw toAIFriendlyError(err, ref);
910
+ }
911
+ }
912
+ async function dragViaPlaywright(opts) {
913
+ const startRef = requireRef(opts.startRef);
914
+ const endRef = requireRef(opts.endRef);
915
+ if (!startRef || !endRef) throw new Error("startRef and endRef are required");
916
+ const page = await getPageForTargetId(opts);
917
+ ensurePageState(page);
918
+ restoreRoleRefsForTarget({
919
+ cdpUrl: opts.cdpUrl,
920
+ targetId: opts.targetId,
921
+ page
922
+ });
923
+ try {
924
+ await refLocator(page, startRef).dragTo(refLocator(page, endRef), { timeout: Math.max(500, Math.min(6e4, opts.timeoutMs ?? 8e3)) });
925
+ } catch (err) {
926
+ throw toAIFriendlyError(err, `${startRef} -> ${endRef}`);
927
+ }
928
+ }
929
+ async function selectOptionViaPlaywright(opts) {
930
+ const ref = requireRef(opts.ref);
931
+ if (!opts.values?.length) throw new Error("values are required");
932
+ const page = await getPageForTargetId(opts);
933
+ ensurePageState(page);
934
+ restoreRoleRefsForTarget({
935
+ cdpUrl: opts.cdpUrl,
936
+ targetId: opts.targetId,
937
+ page
938
+ });
939
+ try {
940
+ await refLocator(page, ref).selectOption(opts.values, { timeout: Math.max(500, Math.min(6e4, opts.timeoutMs ?? 8e3)) });
941
+ } catch (err) {
942
+ throw toAIFriendlyError(err, ref);
943
+ }
944
+ }
945
+ async function pressKeyViaPlaywright(opts) {
946
+ const key = String(opts.key ?? "").trim();
947
+ if (!key) throw new Error("key is required");
948
+ const page = await getPageForTargetId(opts);
949
+ ensurePageState(page);
950
+ await page.keyboard.press(key, { delay: Math.max(0, Math.floor(opts.delayMs ?? 0)) });
951
+ }
952
+ async function typeViaPlaywright(opts) {
953
+ const text = String(opts.text ?? "");
954
+ const page = await getPageForTargetId(opts);
955
+ ensurePageState(page);
956
+ restoreRoleRefsForTarget({
957
+ cdpUrl: opts.cdpUrl,
958
+ targetId: opts.targetId,
959
+ page
960
+ });
961
+ const ref = requireRef(opts.ref);
962
+ const locator = refLocator(page, ref);
963
+ const timeout = Math.max(500, Math.min(6e4, opts.timeoutMs ?? 8e3));
964
+ try {
965
+ if (opts.slowly) {
966
+ await locator.click({ timeout });
967
+ await locator.type(text, {
968
+ timeout,
969
+ delay: 75
970
+ });
971
+ } else await locator.fill(text, { timeout });
972
+ if (opts.submit) await locator.press("Enter", { timeout });
973
+ } catch (err) {
974
+ throw toAIFriendlyError(err, ref);
975
+ }
976
+ }
977
+ async function fillFormViaPlaywright(opts) {
978
+ const page = await getPageForTargetId(opts);
979
+ ensurePageState(page);
980
+ restoreRoleRefsForTarget({
981
+ cdpUrl: opts.cdpUrl,
982
+ targetId: opts.targetId,
983
+ page
984
+ });
985
+ const timeout = Math.max(500, Math.min(6e4, opts.timeoutMs ?? 8e3));
986
+ for (const field of opts.fields) {
987
+ const ref = field.ref.trim();
988
+ const type = field.type.trim();
989
+ const rawValue = field.value;
990
+ const value = typeof rawValue === "string" ? rawValue : typeof rawValue === "number" || typeof rawValue === "boolean" ? String(rawValue) : "";
991
+ if (!ref || !type) continue;
992
+ const locator = refLocator(page, ref);
993
+ if (type === "checkbox" || type === "radio") {
994
+ const checked = rawValue === true || rawValue === 1 || rawValue === "1" || rawValue === "true";
995
+ try {
996
+ await locator.setChecked(checked, { timeout });
997
+ } catch (err) {
998
+ throw toAIFriendlyError(err, ref);
999
+ }
1000
+ continue;
1001
+ }
1002
+ try {
1003
+ await locator.fill(value, { timeout });
1004
+ } catch (err) {
1005
+ throw toAIFriendlyError(err, ref);
1006
+ }
1007
+ }
1008
+ }
1009
+ async function evaluateViaPlaywright(opts) {
1010
+ const fnText = String(opts.fn ?? "").trim();
1011
+ if (!fnText) throw new Error("function is required");
1012
+ const page = await getPageForTargetId(opts);
1013
+ ensurePageState(page);
1014
+ restoreRoleRefsForTarget({
1015
+ cdpUrl: opts.cdpUrl,
1016
+ targetId: opts.targetId,
1017
+ page
1018
+ });
1019
+ if (opts.ref) {
1020
+ const locator = refLocator(page, opts.ref);
1021
+ const elementEvaluator = new Function("el", "fnBody", `
1022
+ "use strict";
1023
+ try {
1024
+ var candidate = eval("(" + fnBody + ")");
1025
+ return typeof candidate === "function" ? candidate(el) : candidate;
1026
+ } catch (err) {
1027
+ throw new Error("Invalid evaluate function: " + (err && err.message ? err.message : String(err)));
1028
+ }
1029
+ `);
1030
+ return await locator.evaluate(elementEvaluator, fnText);
1031
+ }
1032
+ const browserEvaluator = new Function("fnBody", `
1033
+ "use strict";
1034
+ try {
1035
+ var candidate = eval("(" + fnBody + ")");
1036
+ return typeof candidate === "function" ? candidate() : candidate;
1037
+ } catch (err) {
1038
+ throw new Error("Invalid evaluate function: " + (err && err.message ? err.message : String(err)));
1039
+ }
1040
+ `);
1041
+ return await page.evaluate(browserEvaluator, fnText);
1042
+ }
1043
+ async function scrollIntoViewViaPlaywright(opts) {
1044
+ const page = await getPageForTargetId(opts);
1045
+ ensurePageState(page);
1046
+ restoreRoleRefsForTarget({
1047
+ cdpUrl: opts.cdpUrl,
1048
+ targetId: opts.targetId,
1049
+ page
1050
+ });
1051
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1052
+ const ref = requireRef(opts.ref);
1053
+ const locator = refLocator(page, ref);
1054
+ try {
1055
+ await locator.scrollIntoViewIfNeeded({ timeout });
1056
+ } catch (err) {
1057
+ throw toAIFriendlyError(err, ref);
1058
+ }
1059
+ }
1060
+ async function waitForViaPlaywright(opts) {
1061
+ const page = await getPageForTargetId(opts);
1062
+ ensurePageState(page);
1063
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1064
+ if (typeof opts.timeMs === "number" && Number.isFinite(opts.timeMs)) await page.waitForTimeout(Math.max(0, opts.timeMs));
1065
+ if (opts.text) await page.getByText(opts.text).first().waitFor({
1066
+ state: "visible",
1067
+ timeout
1068
+ });
1069
+ if (opts.textGone) await page.getByText(opts.textGone).first().waitFor({
1070
+ state: "hidden",
1071
+ timeout
1072
+ });
1073
+ if (opts.selector) {
1074
+ const selector = String(opts.selector).trim();
1075
+ if (selector) await page.locator(selector).first().waitFor({
1076
+ state: "visible",
1077
+ timeout
1078
+ });
1079
+ }
1080
+ if (opts.url) {
1081
+ const url = String(opts.url).trim();
1082
+ if (url) await page.waitForURL(url, { timeout });
1083
+ }
1084
+ if (opts.loadState) await page.waitForLoadState(opts.loadState, { timeout });
1085
+ if (opts.fn) {
1086
+ const fn = String(opts.fn).trim();
1087
+ if (fn) await page.waitForFunction(fn, { timeout });
1088
+ }
1089
+ }
1090
+ async function takeScreenshotViaPlaywright(opts) {
1091
+ const page = await getPageForTargetId(opts);
1092
+ ensurePageState(page);
1093
+ restoreRoleRefsForTarget({
1094
+ cdpUrl: opts.cdpUrl,
1095
+ targetId: opts.targetId,
1096
+ page
1097
+ });
1098
+ const type = opts.type ?? "png";
1099
+ if (opts.ref) {
1100
+ if (opts.fullPage) throw new Error("fullPage is not supported for element screenshots");
1101
+ return { buffer: await refLocator(page, opts.ref).screenshot({ type }) };
1102
+ }
1103
+ if (opts.element) {
1104
+ if (opts.fullPage) throw new Error("fullPage is not supported for element screenshots");
1105
+ return { buffer: await page.locator(opts.element).first().screenshot({ type }) };
1106
+ }
1107
+ return { buffer: await page.screenshot({
1108
+ type,
1109
+ fullPage: Boolean(opts.fullPage)
1110
+ }) };
1111
+ }
1112
+ async function screenshotWithLabelsViaPlaywright(opts) {
1113
+ const page = await getPageForTargetId(opts);
1114
+ ensurePageState(page);
1115
+ restoreRoleRefsForTarget({
1116
+ cdpUrl: opts.cdpUrl,
1117
+ targetId: opts.targetId,
1118
+ page
1119
+ });
1120
+ const type = opts.type ?? "png";
1121
+ const maxLabels = typeof opts.maxLabels === "number" && Number.isFinite(opts.maxLabels) ? Math.max(1, Math.floor(opts.maxLabels)) : 150;
1122
+ const viewport = await page.evaluate(() => ({
1123
+ scrollX: window.scrollX || 0,
1124
+ scrollY: window.scrollY || 0,
1125
+ width: window.innerWidth || 0,
1126
+ height: window.innerHeight || 0
1127
+ }));
1128
+ const refs = Object.keys(opts.refs ?? {});
1129
+ const boxes = [];
1130
+ let skipped = 0;
1131
+ for (const ref of refs) {
1132
+ if (boxes.length >= maxLabels) {
1133
+ skipped += 1;
1134
+ continue;
1135
+ }
1136
+ try {
1137
+ const box = await refLocator(page, ref).boundingBox();
1138
+ if (!box) {
1139
+ skipped += 1;
1140
+ continue;
1141
+ }
1142
+ const x0 = box.x;
1143
+ const y0 = box.y;
1144
+ const x1 = box.x + box.width;
1145
+ const y1 = box.y + box.height;
1146
+ const vx0 = viewport.scrollX;
1147
+ const vy0 = viewport.scrollY;
1148
+ const vx1 = viewport.scrollX + viewport.width;
1149
+ const vy1 = viewport.scrollY + viewport.height;
1150
+ if (x1 < vx0 || x0 > vx1 || y1 < vy0 || y0 > vy1) {
1151
+ skipped += 1;
1152
+ continue;
1153
+ }
1154
+ boxes.push({
1155
+ ref,
1156
+ x: x0 - viewport.scrollX,
1157
+ y: y0 - viewport.scrollY,
1158
+ w: Math.max(1, box.width),
1159
+ h: Math.max(1, box.height)
1160
+ });
1161
+ } catch {
1162
+ skipped += 1;
1163
+ }
1164
+ }
1165
+ try {
1166
+ if (boxes.length > 0) await page.evaluate((labels) => {
1167
+ document.querySelectorAll("[data-openclaw-labels]").forEach((el) => el.remove());
1168
+ const root = document.createElement("div");
1169
+ root.setAttribute("data-openclaw-labels", "1");
1170
+ root.style.position = "fixed";
1171
+ root.style.left = "0";
1172
+ root.style.top = "0";
1173
+ root.style.zIndex = "2147483647";
1174
+ root.style.pointerEvents = "none";
1175
+ root.style.fontFamily = "\"SF Mono\",\"SFMono-Regular\",Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace";
1176
+ const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
1177
+ for (const label of labels) {
1178
+ const box = document.createElement("div");
1179
+ box.setAttribute("data-openclaw-labels", "1");
1180
+ box.style.position = "absolute";
1181
+ box.style.left = `${label.x}px`;
1182
+ box.style.top = `${label.y}px`;
1183
+ box.style.width = `${label.w}px`;
1184
+ box.style.height = `${label.h}px`;
1185
+ box.style.border = "2px solid #ffb020";
1186
+ box.style.boxSizing = "border-box";
1187
+ const tag = document.createElement("div");
1188
+ tag.setAttribute("data-openclaw-labels", "1");
1189
+ tag.textContent = label.ref;
1190
+ tag.style.position = "absolute";
1191
+ tag.style.left = `${label.x}px`;
1192
+ tag.style.top = `${clamp(label.y - 18, 0, 2e4)}px`;
1193
+ tag.style.background = "#ffb020";
1194
+ tag.style.color = "#1a1a1a";
1195
+ tag.style.fontSize = "12px";
1196
+ tag.style.lineHeight = "14px";
1197
+ tag.style.padding = "1px 4px";
1198
+ tag.style.borderRadius = "3px";
1199
+ tag.style.boxShadow = "0 1px 2px rgba(0,0,0,0.35)";
1200
+ tag.style.whiteSpace = "nowrap";
1201
+ root.appendChild(box);
1202
+ root.appendChild(tag);
1203
+ }
1204
+ document.documentElement.appendChild(root);
1205
+ }, boxes);
1206
+ return {
1207
+ buffer: await page.screenshot({ type }),
1208
+ labels: boxes.length,
1209
+ skipped
1210
+ };
1211
+ } finally {
1212
+ await page.evaluate(() => {
1213
+ document.querySelectorAll("[data-openclaw-labels]").forEach((el) => el.remove());
1214
+ }).catch(() => {});
1215
+ }
1216
+ }
1217
+ async function setInputFilesViaPlaywright(opts) {
1218
+ const page = await getPageForTargetId(opts);
1219
+ ensurePageState(page);
1220
+ restoreRoleRefsForTarget({
1221
+ cdpUrl: opts.cdpUrl,
1222
+ targetId: opts.targetId,
1223
+ page
1224
+ });
1225
+ if (!opts.paths.length) throw new Error("paths are required");
1226
+ const inputRef = typeof opts.inputRef === "string" ? opts.inputRef.trim() : "";
1227
+ const element = typeof opts.element === "string" ? opts.element.trim() : "";
1228
+ if (inputRef && element) throw new Error("inputRef and element are mutually exclusive");
1229
+ if (!inputRef && !element) throw new Error("inputRef or element is required");
1230
+ const locator = inputRef ? refLocator(page, inputRef) : page.locator(element).first();
1231
+ try {
1232
+ await locator.setInputFiles(opts.paths);
1233
+ } catch (err) {
1234
+ throw toAIFriendlyError(err, inputRef || element);
1235
+ }
1236
+ try {
1237
+ const handle = await locator.elementHandle();
1238
+ if (handle) await handle.evaluate((el) => {
1239
+ el.dispatchEvent(new Event("input", { bubbles: true }));
1240
+ el.dispatchEvent(new Event("change", { bubbles: true }));
1241
+ });
1242
+ } catch {}
1243
+ }
1244
+
1245
+ //#endregion
1246
+ //#region src/browser/pw-tools-core.responses.ts
1247
+ function matchUrlPattern(pattern, url) {
1248
+ const p = pattern.trim();
1249
+ if (!p) return false;
1250
+ if (p === url) return true;
1251
+ if (p.includes("*")) {
1252
+ const escaped = p.replace(/[|\\{}()[\]^$+?.]/g, "\\$&");
1253
+ return new RegExp(`^${escaped.replace(/\*\*/g, ".*").replace(/\*/g, ".*")}$`).test(url);
1254
+ }
1255
+ return url.includes(p);
1256
+ }
1257
+ async function responseBodyViaPlaywright(opts) {
1258
+ const pattern = String(opts.url ?? "").trim();
1259
+ if (!pattern) throw new Error("url is required");
1260
+ const maxChars = typeof opts.maxChars === "number" && Number.isFinite(opts.maxChars) ? Math.max(1, Math.min(5e6, Math.floor(opts.maxChars))) : 2e5;
1261
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1262
+ const page = await getPageForTargetId(opts);
1263
+ ensurePageState(page);
1264
+ const resp = await new Promise((resolve, reject) => {
1265
+ let done = false;
1266
+ let timer;
1267
+ let handler;
1268
+ const cleanup = () => {
1269
+ if (timer) clearTimeout(timer);
1270
+ timer = void 0;
1271
+ if (handler) page.off("response", handler);
1272
+ };
1273
+ handler = (resp) => {
1274
+ if (done) return;
1275
+ if (!matchUrlPattern(pattern, resp.url?.() || "")) return;
1276
+ done = true;
1277
+ cleanup();
1278
+ resolve(resp);
1279
+ };
1280
+ page.on("response", handler);
1281
+ timer = setTimeout(() => {
1282
+ if (done) return;
1283
+ done = true;
1284
+ cleanup();
1285
+ reject(/* @__PURE__ */ new Error(`Response not found for url pattern "${pattern}". Run '${formatCliCommand("openclaw browser requests")}' to inspect recent network activity.`));
1286
+ }, timeout);
1287
+ });
1288
+ const url = resp.url?.() || "";
1289
+ const status = resp.status?.();
1290
+ const headers = resp.headers?.();
1291
+ let bodyText = "";
1292
+ try {
1293
+ if (typeof resp.text === "function") bodyText = await resp.text();
1294
+ else if (typeof resp.body === "function") {
1295
+ const buf = await resp.body();
1296
+ bodyText = new TextDecoder("utf-8").decode(buf);
1297
+ }
1298
+ } catch (err) {
1299
+ throw new Error(`Failed to read response body for "${url}": ${String(err)}`, { cause: err });
1300
+ }
1301
+ return {
1302
+ url,
1303
+ status,
1304
+ headers,
1305
+ body: bodyText.length > maxChars ? bodyText.slice(0, maxChars) : bodyText,
1306
+ truncated: bodyText.length > maxChars ? true : void 0
1307
+ };
1308
+ }
1309
+
1310
+ //#endregion
1311
+ //#region src/browser/pw-tools-core.snapshot.ts
1312
+ async function snapshotAriaViaPlaywright(opts) {
1313
+ const limit = Math.max(1, Math.min(2e3, Math.floor(opts.limit ?? 500)));
1314
+ const page = await getPageForTargetId({
1315
+ cdpUrl: opts.cdpUrl,
1316
+ targetId: opts.targetId
1317
+ });
1318
+ ensurePageState(page);
1319
+ const session = await page.context().newCDPSession(page);
1320
+ try {
1321
+ await session.send("Accessibility.enable").catch(() => {});
1322
+ const res = await session.send("Accessibility.getFullAXTree");
1323
+ return { nodes: formatAriaSnapshot(Array.isArray(res?.nodes) ? res.nodes : [], limit) };
1324
+ } finally {
1325
+ await session.detach().catch(() => {});
1326
+ }
1327
+ }
1328
+ async function snapshotAiViaPlaywright(opts) {
1329
+ const page = await getPageForTargetId({
1330
+ cdpUrl: opts.cdpUrl,
1331
+ targetId: opts.targetId
1332
+ });
1333
+ ensurePageState(page);
1334
+ const maybe = page;
1335
+ if (!maybe._snapshotForAI) throw new Error("Playwright _snapshotForAI is not available. Upgrade playwright-core.");
1336
+ const result = await maybe._snapshotForAI({
1337
+ timeout: Math.max(500, Math.min(6e4, Math.floor(opts.timeoutMs ?? 5e3))),
1338
+ track: "response"
1339
+ });
1340
+ let snapshot = String(result?.full ?? "");
1341
+ const maxChars = opts.maxChars;
1342
+ const limit = typeof maxChars === "number" && Number.isFinite(maxChars) && maxChars > 0 ? Math.floor(maxChars) : void 0;
1343
+ let truncated = false;
1344
+ if (limit && snapshot.length > limit) {
1345
+ snapshot = `${snapshot.slice(0, limit)}\n\n[...TRUNCATED - page too large]`;
1346
+ truncated = true;
1347
+ }
1348
+ const built = buildRoleSnapshotFromAiSnapshot(snapshot);
1349
+ storeRoleRefsForTarget({
1350
+ page,
1351
+ cdpUrl: opts.cdpUrl,
1352
+ targetId: opts.targetId,
1353
+ refs: built.refs,
1354
+ mode: "aria"
1355
+ });
1356
+ return truncated ? {
1357
+ snapshot,
1358
+ truncated,
1359
+ refs: built.refs
1360
+ } : {
1361
+ snapshot,
1362
+ refs: built.refs
1363
+ };
1364
+ }
1365
+ async function snapshotRoleViaPlaywright(opts) {
1366
+ const page = await getPageForTargetId({
1367
+ cdpUrl: opts.cdpUrl,
1368
+ targetId: opts.targetId
1369
+ });
1370
+ ensurePageState(page);
1371
+ if (opts.refsMode === "aria") {
1372
+ if (opts.selector?.trim() || opts.frameSelector?.trim()) throw new Error("refs=aria does not support selector/frame snapshots yet.");
1373
+ const maybe = page;
1374
+ if (!maybe._snapshotForAI) throw new Error("refs=aria requires Playwright _snapshotForAI support.");
1375
+ const result = await maybe._snapshotForAI({
1376
+ timeout: 5e3,
1377
+ track: "response"
1378
+ });
1379
+ const built = buildRoleSnapshotFromAiSnapshot(String(result?.full ?? ""), opts.options);
1380
+ storeRoleRefsForTarget({
1381
+ page,
1382
+ cdpUrl: opts.cdpUrl,
1383
+ targetId: opts.targetId,
1384
+ refs: built.refs,
1385
+ mode: "aria"
1386
+ });
1387
+ return {
1388
+ snapshot: built.snapshot,
1389
+ refs: built.refs,
1390
+ stats: getRoleSnapshotStats(built.snapshot, built.refs)
1391
+ };
1392
+ }
1393
+ const frameSelector = opts.frameSelector?.trim() || "";
1394
+ const selector = opts.selector?.trim() || "";
1395
+ const ariaSnapshot = await (frameSelector ? selector ? page.frameLocator(frameSelector).locator(selector) : page.frameLocator(frameSelector).locator(":root") : selector ? page.locator(selector) : page.locator(":root")).ariaSnapshot();
1396
+ const built = buildRoleSnapshotFromAriaSnapshot(String(ariaSnapshot ?? ""), opts.options);
1397
+ storeRoleRefsForTarget({
1398
+ page,
1399
+ cdpUrl: opts.cdpUrl,
1400
+ targetId: opts.targetId,
1401
+ refs: built.refs,
1402
+ frameSelector: frameSelector || void 0,
1403
+ mode: "role"
1404
+ });
1405
+ return {
1406
+ snapshot: built.snapshot,
1407
+ refs: built.refs,
1408
+ stats: getRoleSnapshotStats(built.snapshot, built.refs)
1409
+ };
1410
+ }
1411
+ async function navigateViaPlaywright(opts) {
1412
+ const url = String(opts.url ?? "").trim();
1413
+ if (!url) throw new Error("url is required");
1414
+ const page = await getPageForTargetId(opts);
1415
+ ensurePageState(page);
1416
+ await page.goto(url, { timeout: Math.max(1e3, Math.min(12e4, opts.timeoutMs ?? 2e4)) });
1417
+ return { url: page.url() };
1418
+ }
1419
+ async function resizeViewportViaPlaywright(opts) {
1420
+ const page = await getPageForTargetId(opts);
1421
+ ensurePageState(page);
1422
+ await page.setViewportSize({
1423
+ width: Math.max(1, Math.floor(opts.width)),
1424
+ height: Math.max(1, Math.floor(opts.height))
1425
+ });
1426
+ }
1427
+ async function closePageViaPlaywright(opts) {
1428
+ const page = await getPageForTargetId(opts);
1429
+ ensurePageState(page);
1430
+ await page.close();
1431
+ }
1432
+ async function pdfViaPlaywright(opts) {
1433
+ const page = await getPageForTargetId(opts);
1434
+ ensurePageState(page);
1435
+ return { buffer: await page.pdf({ printBackground: true }) };
1436
+ }
1437
+
1438
+ //#endregion
1439
+ //#region src/browser/pw-tools-core.state.ts
1440
+ async function withCdpSession(page, fn) {
1441
+ const session = await page.context().newCDPSession(page);
1442
+ try {
1443
+ return await fn(session);
1444
+ } finally {
1445
+ await session.detach().catch(() => {});
1446
+ }
1447
+ }
1448
+ async function setOfflineViaPlaywright(opts) {
1449
+ const page = await getPageForTargetId(opts);
1450
+ ensurePageState(page);
1451
+ await page.context().setOffline(Boolean(opts.offline));
1452
+ }
1453
+ async function setExtraHTTPHeadersViaPlaywright(opts) {
1454
+ const page = await getPageForTargetId(opts);
1455
+ ensurePageState(page);
1456
+ await page.context().setExtraHTTPHeaders(opts.headers);
1457
+ }
1458
+ async function setHttpCredentialsViaPlaywright(opts) {
1459
+ const page = await getPageForTargetId(opts);
1460
+ ensurePageState(page);
1461
+ if (opts.clear) {
1462
+ await page.context().setHTTPCredentials(null);
1463
+ return;
1464
+ }
1465
+ const username = String(opts.username ?? "");
1466
+ const password = String(opts.password ?? "");
1467
+ if (!username) throw new Error("username is required (or set clear=true)");
1468
+ await page.context().setHTTPCredentials({
1469
+ username,
1470
+ password
1471
+ });
1472
+ }
1473
+ async function setGeolocationViaPlaywright(opts) {
1474
+ const page = await getPageForTargetId(opts);
1475
+ ensurePageState(page);
1476
+ const context = page.context();
1477
+ if (opts.clear) {
1478
+ await context.setGeolocation(null);
1479
+ await context.clearPermissions().catch(() => {});
1480
+ return;
1481
+ }
1482
+ if (typeof opts.latitude !== "number" || typeof opts.longitude !== "number") throw new Error("latitude and longitude are required (or set clear=true)");
1483
+ await context.setGeolocation({
1484
+ latitude: opts.latitude,
1485
+ longitude: opts.longitude,
1486
+ accuracy: typeof opts.accuracy === "number" ? opts.accuracy : void 0
1487
+ });
1488
+ const origin = opts.origin?.trim() || (() => {
1489
+ try {
1490
+ return new URL(page.url()).origin;
1491
+ } catch {
1492
+ return "";
1493
+ }
1494
+ })();
1495
+ if (origin) await context.grantPermissions(["geolocation"], { origin }).catch(() => {});
1496
+ }
1497
+ async function emulateMediaViaPlaywright(opts) {
1498
+ const page = await getPageForTargetId(opts);
1499
+ ensurePageState(page);
1500
+ await page.emulateMedia({ colorScheme: opts.colorScheme });
1501
+ }
1502
+ async function setLocaleViaPlaywright(opts) {
1503
+ const page = await getPageForTargetId(opts);
1504
+ ensurePageState(page);
1505
+ const locale = String(opts.locale ?? "").trim();
1506
+ if (!locale) throw new Error("locale is required");
1507
+ await withCdpSession(page, async (session) => {
1508
+ try {
1509
+ await session.send("Emulation.setLocaleOverride", { locale });
1510
+ } catch (err) {
1511
+ if (String(err).includes("Another locale override is already in effect")) return;
1512
+ throw err;
1513
+ }
1514
+ });
1515
+ }
1516
+ async function setTimezoneViaPlaywright(opts) {
1517
+ const page = await getPageForTargetId(opts);
1518
+ ensurePageState(page);
1519
+ const timezoneId = String(opts.timezoneId ?? "").trim();
1520
+ if (!timezoneId) throw new Error("timezoneId is required");
1521
+ await withCdpSession(page, async (session) => {
1522
+ try {
1523
+ await session.send("Emulation.setTimezoneOverride", { timezoneId });
1524
+ } catch (err) {
1525
+ const msg = String(err);
1526
+ if (msg.includes("Timezone override is already in effect")) return;
1527
+ if (msg.includes("Invalid timezone")) throw new Error(`Invalid timezone ID: ${timezoneId}`, { cause: err });
1528
+ throw err;
1529
+ }
1530
+ });
1531
+ }
1532
+ async function setDeviceViaPlaywright(opts) {
1533
+ const page = await getPageForTargetId(opts);
1534
+ ensurePageState(page);
1535
+ const name = String(opts.name ?? "").trim();
1536
+ if (!name) throw new Error("device name is required");
1537
+ const descriptor = devices[name];
1538
+ if (!descriptor) throw new Error(`Unknown device "${name}".`);
1539
+ if (descriptor.viewport) await page.setViewportSize({
1540
+ width: descriptor.viewport.width,
1541
+ height: descriptor.viewport.height
1542
+ });
1543
+ await withCdpSession(page, async (session) => {
1544
+ if (descriptor.userAgent || descriptor.locale) await session.send("Emulation.setUserAgentOverride", {
1545
+ userAgent: descriptor.userAgent ?? "",
1546
+ acceptLanguage: descriptor.locale ?? void 0
1547
+ });
1548
+ if (descriptor.viewport) await session.send("Emulation.setDeviceMetricsOverride", {
1549
+ mobile: Boolean(descriptor.isMobile),
1550
+ width: descriptor.viewport.width,
1551
+ height: descriptor.viewport.height,
1552
+ deviceScaleFactor: descriptor.deviceScaleFactor ?? 1,
1553
+ screenWidth: descriptor.viewport.width,
1554
+ screenHeight: descriptor.viewport.height
1555
+ });
1556
+ if (descriptor.hasTouch) await session.send("Emulation.setTouchEmulationEnabled", { enabled: true });
1557
+ });
1558
+ }
1559
+
1560
+ //#endregion
1561
+ //#region src/browser/pw-tools-core.storage.ts
1562
+ async function cookiesGetViaPlaywright(opts) {
1563
+ const page = await getPageForTargetId(opts);
1564
+ ensurePageState(page);
1565
+ return { cookies: await page.context().cookies() };
1566
+ }
1567
+ async function cookiesSetViaPlaywright(opts) {
1568
+ const page = await getPageForTargetId(opts);
1569
+ ensurePageState(page);
1570
+ const cookie = opts.cookie;
1571
+ if (!cookie.name || cookie.value === void 0) throw new Error("cookie name and value are required");
1572
+ const hasUrl = typeof cookie.url === "string" && cookie.url.trim();
1573
+ const hasDomainPath = typeof cookie.domain === "string" && cookie.domain.trim() && typeof cookie.path === "string" && cookie.path.trim();
1574
+ if (!hasUrl && !hasDomainPath) throw new Error("cookie requires url, or domain+path");
1575
+ await page.context().addCookies([cookie]);
1576
+ }
1577
+ async function cookiesClearViaPlaywright(opts) {
1578
+ const page = await getPageForTargetId(opts);
1579
+ ensurePageState(page);
1580
+ await page.context().clearCookies();
1581
+ }
1582
+ async function storageGetViaPlaywright(opts) {
1583
+ const page = await getPageForTargetId(opts);
1584
+ ensurePageState(page);
1585
+ const kind = opts.kind;
1586
+ const key = typeof opts.key === "string" ? opts.key : void 0;
1587
+ return { values: await page.evaluate(({ kind: kind2, key: key2 }) => {
1588
+ const store = kind2 === "session" ? window.sessionStorage : window.localStorage;
1589
+ if (key2) {
1590
+ const value = store.getItem(key2);
1591
+ return value === null ? {} : { [key2]: value };
1592
+ }
1593
+ const out = {};
1594
+ for (let i = 0; i < store.length; i += 1) {
1595
+ const k = store.key(i);
1596
+ if (!k) continue;
1597
+ const v = store.getItem(k);
1598
+ if (v !== null) out[k] = v;
1599
+ }
1600
+ return out;
1601
+ }, {
1602
+ kind,
1603
+ key
1604
+ }) ?? {} };
1605
+ }
1606
+ async function storageSetViaPlaywright(opts) {
1607
+ const page = await getPageForTargetId(opts);
1608
+ ensurePageState(page);
1609
+ const key = String(opts.key ?? "");
1610
+ if (!key) throw new Error("key is required");
1611
+ await page.evaluate(({ kind, key: k, value }) => {
1612
+ (kind === "session" ? window.sessionStorage : window.localStorage).setItem(k, value);
1613
+ }, {
1614
+ kind: opts.kind,
1615
+ key,
1616
+ value: String(opts.value ?? "")
1617
+ });
1618
+ }
1619
+ async function storageClearViaPlaywright(opts) {
1620
+ const page = await getPageForTargetId(opts);
1621
+ ensurePageState(page);
1622
+ await page.evaluate(({ kind }) => {
1623
+ (kind === "session" ? window.sessionStorage : window.localStorage).clear();
1624
+ }, { kind: opts.kind });
1625
+ }
1626
+
1627
+ //#endregion
1628
+ //#region src/browser/pw-tools-core.trace.ts
1629
+ async function traceStartViaPlaywright(opts) {
1630
+ const context = (await getPageForTargetId(opts)).context();
1631
+ const ctxState = ensureContextState(context);
1632
+ if (ctxState.traceActive) throw new Error("Trace already running. Stop the current trace before starting a new one.");
1633
+ await context.tracing.start({
1634
+ screenshots: opts.screenshots ?? true,
1635
+ snapshots: opts.snapshots ?? true,
1636
+ sources: opts.sources ?? false
1637
+ });
1638
+ ctxState.traceActive = true;
1639
+ }
1640
+ async function traceStopViaPlaywright(opts) {
1641
+ const context = (await getPageForTargetId(opts)).context();
1642
+ const ctxState = ensureContextState(context);
1643
+ if (!ctxState.traceActive) throw new Error("No active trace. Start a trace before stopping it.");
1644
+ await context.tracing.stop({ path: opts.path });
1645
+ ctxState.traceActive = false;
1646
+ }
1647
+
1648
+ //#endregion
1649
+ export { armDialogViaPlaywright, armFileUploadViaPlaywright, clickViaPlaywright, closePageByTargetIdViaPlaywright, closePageViaPlaywright, closePlaywrightBrowserConnection, cookiesClearViaPlaywright, cookiesGetViaPlaywright, cookiesSetViaPlaywright, createPageViaPlaywright, downloadViaPlaywright, dragViaPlaywright, emulateMediaViaPlaywright, ensurePageState, evaluateViaPlaywright, fillFormViaPlaywright, focusPageByTargetIdViaPlaywright, getConsoleMessagesViaPlaywright, getNetworkRequestsViaPlaywright, getPageErrorsViaPlaywright, getPageForTargetId, highlightViaPlaywright, hoverViaPlaywright, listPagesViaPlaywright, navigateViaPlaywright, pdfViaPlaywright, pressKeyViaPlaywright, refLocator, resizeViewportViaPlaywright, responseBodyViaPlaywright, screenshotWithLabelsViaPlaywright, scrollIntoViewViaPlaywright, selectOptionViaPlaywright, setDeviceViaPlaywright, setExtraHTTPHeadersViaPlaywright, setGeolocationViaPlaywright, setHttpCredentialsViaPlaywright, setInputFilesViaPlaywright, setLocaleViaPlaywright, setOfflineViaPlaywright, setTimezoneViaPlaywright, snapshotAiViaPlaywright, snapshotAriaViaPlaywright, snapshotRoleViaPlaywright, storageClearViaPlaywright, storageGetViaPlaywright, storageSetViaPlaywright, takeScreenshotViaPlaywright, traceStartViaPlaywright, traceStopViaPlaywright, typeViaPlaywright, waitForDownloadViaPlaywright, waitForViaPlaywright };