@spacebar_ai/moldclaw-core 2026.3.14 → 2026.3.16

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 (1074) hide show
  1. package/README.md +108 -3
  2. package/dist/account-id-plS5L20e.d.ts +1 -0
  3. package/dist/accounts-BAYVGC2k.js +109 -0
  4. package/dist/accounts-DrjRgReV.d.ts +103 -0
  5. package/dist/acp-cli-at_UYEOS.js +2088 -0
  6. package/dist/acpx-Chy1GQ_k.d.ts +5 -0
  7. package/dist/actions.runtime-C0F7dMfO.js +114 -0
  8. package/dist/actions.runtime-caI2LG9o.js +128 -0
  9. package/dist/agent-media-payload-CkpAqaOh.d.ts +16 -0
  10. package/dist/agents-B98yPGc5.js +853 -0
  11. package/dist/agents-BrLr08L3.js +217 -0
  12. package/dist/allow-from-BIwT4dl7.d.ts +42 -0
  13. package/dist/allow-list-CHt7yvAf.js +81 -0
  14. package/dist/allowlist-CxQo2wQc.js +142 -0
  15. package/dist/allowlist-resolution-B7ib7gye.d.ts +17 -0
  16. package/dist/api-Co7TNHbL.js +6953 -0
  17. package/dist/api-cEQ_ql_8.js +112 -0
  18. package/dist/audit-AnKnnlaZ.js +787 -0
  19. package/dist/audit-channel.collect.runtime-CAk1DFQ3.js +600 -0
  20. package/dist/audit-channel.runtime-5phdZp_m.js +116 -0
  21. package/dist/audit-extra.async-B8ZXFxic.js +813 -0
  22. package/dist/audit-hdKa3D-u.js +54 -0
  23. package/dist/audit-membership-runtime-CJV5XvGU.js +157 -0
  24. package/dist/audit.deep.runtime-DNMcRQrp.js +24 -0
  25. package/dist/audit.nondeep.runtime-DhNDL6yM.js +831 -0
  26. package/dist/audit.runtime-Bx7uWEh8.js +113 -0
  27. package/dist/auth-choice-C37W9MA7.js +268 -0
  28. package/dist/auth-choice-CNppOY_V.js +117 -0
  29. package/dist/auth-choice-XYFnp6fI.js +502 -0
  30. package/dist/auth-choice-options-D6oZY4Xo.js +123 -0
  31. package/dist/auth-choice-prompt-BhRqchJx.js +110 -0
  32. package/dist/auth-choice-prompt-C1xv0N08.js +36 -0
  33. package/dist/auth-choice.plugin-providers.runtime-DhLEtbmR.js +114 -0
  34. package/dist/auth-profiles-9zZdaXJK.js +127756 -0
  35. package/dist/auth-profiles.runtime-HONFDgiu.js +111 -0
  36. package/dist/bluebubbles-BY8JhO4y.js +64 -0
  37. package/dist/bluebubbles-CQjEnzK_.d.ts +6 -0
  38. package/dist/bluebubbles-RmcKgkBa.d.ts +45 -0
  39. package/dist/boolean-param-F1sMwnPu.d.ts +5 -0
  40. package/dist/bot-BGh-ATV7.d.ts +478 -0
  41. package/dist/brave-CljenznH.js +24 -0
  42. package/dist/browser-cli-CX8i0wf0.js +1492 -0
  43. package/dist/build-info.json +3 -3
  44. package/dist/bundled/boot-md/handler.d.ts +6 -0
  45. package/dist/bundled/boot-md/handler.js +26 -26
  46. package/dist/bundled/bootstrap-extra-files/handler.d.ts +6 -0
  47. package/dist/bundled/command-logger/handler.d.ts +9 -0
  48. package/dist/bundled/session-memory/handler.d.ts +9 -0
  49. package/dist/bundled/session-memory/handler.js +27 -27
  50. package/dist/call-Bc257L16.js +37 -0
  51. package/dist/call-DYFR7oGy.js +639 -0
  52. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  53. package/dist/channel-Bd-igGEW.js +803 -0
  54. package/dist/channel-BgRMb6bZ.js +575 -0
  55. package/dist/channel-BtcLrU6J.js +1598 -0
  56. package/dist/channel-Bwf6m_hD.js +538 -0
  57. package/dist/channel-C7-kgDBd.js +562 -0
  58. package/dist/channel-CEXOAxIc.js +949 -0
  59. package/dist/channel-CpZ3p9MJ.js +226 -0
  60. package/dist/channel-CqBlN6A2.js +619 -0
  61. package/dist/channel-DKhfHW4U.js +352 -0
  62. package/dist/channel-DS3t_KdJ2.js +316 -0
  63. package/dist/channel-DY24FA1v.js +4681 -0
  64. package/dist/channel-DYFGmImJ.js +542 -0
  65. package/dist/channel-DcyIqX5p.js +207 -0
  66. package/dist/channel-J-2XcAli.js +214 -0
  67. package/dist/channel-N616f4gZ.js +306 -0
  68. package/dist/channel-NY7aU2Gj.js +397 -0
  69. package/dist/channel-PNI8BOmm.js +1321 -0
  70. package/dist/channel-UcXepDJs.js +943 -0
  71. package/dist/channel-account-context-CL3hEq1j.js +103 -0
  72. package/dist/channel-config-schema-Q2nzcCCR.d.ts +1 -0
  73. package/dist/channel-jA_jodJo.js +920 -0
  74. package/dist/channel-options-CtgU5qkG.js +50 -0
  75. package/dist/channel-policy-7wXDp6d3.d.ts +1 -0
  76. package/dist/channel-rGI8uig4.js +497 -0
  77. package/dist/channel-summary-DGJZXo0r.js +106 -0
  78. package/dist/channel.runtime--WZvlNJM.js +413 -0
  79. package/dist/channel.runtime-B0ct42DL.js +122 -0
  80. package/dist/channel.runtime-BEZUZrYB.js +177 -0
  81. package/dist/channel.runtime-BMuWmsIC.js +166 -0
  82. package/dist/channel.runtime-BtvHP0po.js +4006 -0
  83. package/dist/channel.runtime-Cwf993pX.js +194 -0
  84. package/dist/channel.runtime-Cy4lEpTX.js +174 -0
  85. package/dist/channel.runtime-DAz6axda.js +865 -0
  86. package/dist/channel.runtime-DdQ2mOVh.js +236 -0
  87. package/dist/channel.runtime-Dy3HPgOU.js +399 -0
  88. package/dist/channel.runtime-iqfC25k7.js +213 -0
  89. package/dist/channel.setup-B4VYMZlQ.js +9 -0
  90. package/dist/channel.setup-BohGbCbI.js +57 -0
  91. package/dist/channel.setup-Bq2AQqqc.js +6 -0
  92. package/dist/channel.setup-BxiSfLp1.js +8 -0
  93. package/dist/channel.setup-DOUS6fjO.js +8 -0
  94. package/dist/channel.setup-DXhdYU3g.js +9 -0
  95. package/dist/channel.setup-N51CgfNy.js +11 -0
  96. package/dist/channels/plugins/actions/discord.d.ts +3 -0
  97. package/dist/channels/plugins/actions/discord.js +26 -26
  98. package/dist/channels/plugins/actions/signal.d.ts +2 -0
  99. package/dist/channels/plugins/actions/signal.js +26 -26
  100. package/dist/channels/plugins/actions/telegram.d.ts +3 -0
  101. package/dist/channels/plugins/actions/telegram.js +26 -26
  102. package/dist/channels/plugins/agent-tools/whatsapp-login.d.ts +4 -0
  103. package/dist/channels/plugins/agent-tools/whatsapp-login.js +26 -26
  104. package/dist/channels-CueeFf0q.js +404 -0
  105. package/dist/channels-PheAd73E.js +1113 -0
  106. package/dist/channels-cli-CXzVF84v.js +286 -0
  107. package/dist/channels-status-issues-BjWBQHhU.js +16 -0
  108. package/dist/chat-type-BlSN0vo4.d.ts +5 -0
  109. package/dist/clawbot-cli-BBehDXW1.js +113 -0
  110. package/dist/cli/daemon-cli.d.ts +58 -0
  111. package/dist/cli/daemon-cli.js +1 -1
  112. package/dist/cli-CIm7d5Id.js +149 -0
  113. package/dist/command-format-pq3tS8t2.d.ts +4 -0
  114. package/dist/command-registry-CDkp__KH.js +13 -0
  115. package/dist/command-registry-DSEkUBW1.js +212 -0
  116. package/dist/command-secret-gateway-CqP_o0n8.js +106 -0
  117. package/dist/compact.runtime-Qm_csEtG.js +111 -0
  118. package/dist/completion-cli-Ch1sgSLQ.js +445 -0
  119. package/dist/completion-cli-vF067Tso.js +16 -0
  120. package/dist/config-B2W1zTP1.js +44 -0
  121. package/dist/config-CMhKplgO.js +938 -0
  122. package/dist/config-DchtRsvs.js +30 -0
  123. package/dist/config-cli-C41d88_c.js +428 -0
  124. package/dist/config-guard-B_vjkXCQ.js +117 -0
  125. package/dist/config-schema-pPBCF4hz.js +31 -0
  126. package/dist/config-validation-6om9cBUx.js +262 -0
  127. package/dist/config-value-Dl3XEpA6.js +132 -0
  128. package/dist/configure-BxzvDSzu.js +1100 -0
  129. package/dist/configure-CLMLoWAn.js +238 -0
  130. package/dist/control-ui-shared-E8Nz6uKZ.js +29 -0
  131. package/dist/core-Cd3fMFKq.d.ts +87 -0
  132. package/dist/credentials-yYt6VWCq.js +268 -0
  133. package/dist/cron-cli-CA3lV3kh.js +634 -0
  134. package/dist/daemon-cli-BtQuIXEk.js +339 -0
  135. package/dist/daemon-install-BWKGzgMm.js +175 -0
  136. package/dist/deliver-CgMNmfTy.js +106 -0
  137. package/dist/deliver-runtime-Bn1KWoiQ.js +106 -0
  138. package/dist/devices-cli-D601npiL.js +340 -0
  139. package/dist/diagnostic-CkiYEGqt.js +310 -0
  140. package/dist/diffs-B5tZ8Coj.d.ts +1 -0
  141. package/dist/directory-cli-skEV8MT7.js +306 -0
  142. package/dist/directory-config-helpers-B-tiBKIv.d.ts +38 -0
  143. package/dist/directory-runtime-BEJ2fCIR.d.ts +1 -0
  144. package/dist/directory.static-CnyzoWbV.js +44 -0
  145. package/dist/discord-B_gbzPti.js +109 -0
  146. package/dist/discovery-CqI-e_Mv.js +48 -0
  147. package/dist/dm-policy-shared-nybkS1uP.d.ts +95 -0
  148. package/dist/dns-cli-Cjes3Ruw.js +216 -0
  149. package/dist/docs-cli-C3g3Gi_d.js +173 -0
  150. package/dist/doctor-completion-TvgV4SZH.js +90 -0
  151. package/dist/doctor-config-flow-0w9Ux7V8.js +107 -0
  152. package/dist/doctor-config-flow-DLzr8W7Y.js +2437 -0
  153. package/dist/enable-VYzv8b2z.js +24 -0
  154. package/dist/entry.d.ts +7 -0
  155. package/dist/entry.js +1 -1
  156. package/dist/env-overrides-DYVIkuvN.js +434 -0
  157. package/dist/env-overrides.runtime-6kijpIuu.js +17 -0
  158. package/dist/exec-approvals-cli-D_lkTG-l.js +419 -0
  159. package/dist/exec-sVmouhA9.d.ts +39 -0
  160. package/dist/extensions/acpx/index.d.ts +11 -0
  161. package/dist/extensions/acpx/index.js +1 -1
  162. package/dist/extensions/amazon-bedrock/index.d.ts +11 -0
  163. package/dist/extensions/anthropic/index.d.ts +11 -0
  164. package/dist/extensions/anthropic/index.js +26 -26
  165. package/dist/extensions/bluebubbles/index.d.ts +11 -0
  166. package/dist/extensions/bluebubbles/index.js +30 -30
  167. package/dist/extensions/bluebubbles/setup-entry.d.ts +59 -0
  168. package/dist/extensions/bluebubbles/setup-entry.js +30 -30
  169. package/dist/extensions/brave/index.d.ts +11 -0
  170. package/dist/extensions/brave/index.js +2 -2
  171. package/dist/extensions/byteplus/index.d.ts +11 -0
  172. package/dist/extensions/byteplus/index.js +26 -26
  173. package/dist/extensions/cloudflare-ai-gateway/index.d.ts +11 -0
  174. package/dist/extensions/cloudflare-ai-gateway/index.js +27 -27
  175. package/dist/extensions/copilot-proxy/index.d.ts +11 -0
  176. package/dist/extensions/device-pair/index.d.ts +12 -0
  177. package/dist/extensions/diagnostics-otel/index.d.ts +11 -0
  178. package/dist/extensions/diffs/index.d.ts +11 -0
  179. package/dist/extensions/discord/index.d.ts +11 -0
  180. package/dist/extensions/discord/index.js +31 -31
  181. package/dist/extensions/discord/setup-entry.d.ts +7 -0
  182. package/dist/extensions/discord/setup-entry.js +29 -29
  183. package/dist/extensions/elevenlabs/index.d.ts +11 -0
  184. package/dist/extensions/elevenlabs/index.js +26 -26
  185. package/dist/extensions/feishu/index.d.ts +229 -0
  186. package/dist/extensions/feishu/index.js +31 -31
  187. package/dist/extensions/feishu/setup-entry.d.ts +9 -0
  188. package/dist/extensions/feishu/setup-entry.js +28 -28
  189. package/dist/extensions/firecrawl/index.d.ts +11 -0
  190. package/dist/extensions/firecrawl/index.js +26 -26
  191. package/dist/extensions/github-copilot/index.d.ts +11 -0
  192. package/dist/extensions/github-copilot/index.js +27 -27
  193. package/dist/extensions/google/index.d.ts +11 -0
  194. package/dist/extensions/google/index.js +26 -26
  195. package/dist/extensions/googlechat/index.d.ts +11 -0
  196. package/dist/extensions/googlechat/index.js +30 -30
  197. package/dist/extensions/googlechat/setup-entry.d.ts +19 -0
  198. package/dist/extensions/googlechat/setup-entry.js +30 -30
  199. package/dist/extensions/huggingface/index.d.ts +11 -0
  200. package/dist/extensions/huggingface/index.js +26 -26
  201. package/dist/extensions/imessage/index.d.ts +11 -0
  202. package/dist/extensions/imessage/index.js +30 -30
  203. package/dist/extensions/imessage/setup-entry.d.ts +7 -0
  204. package/dist/extensions/imessage/setup-entry.js +30 -30
  205. package/dist/extensions/irc/index.d.ts +11 -0
  206. package/dist/extensions/irc/index.js +29 -29
  207. package/dist/extensions/irc/setup-entry.d.ts +8 -0
  208. package/dist/extensions/irc/setup-entry.js +29 -29
  209. package/dist/extensions/kakao-talkchannel/index.d.ts +19 -0
  210. package/dist/extensions/kakao-talkchannel/index.js +1762 -0
  211. package/dist/extensions/kakao-talkchannel/moldclaw.plugin.json +111 -0
  212. package/dist/extensions/kakao-talkchannel/package.json +12 -0
  213. package/dist/extensions/kilocode/index.d.ts +11 -0
  214. package/dist/extensions/kilocode/index.js +26 -26
  215. package/dist/extensions/kimi-coding/index.d.ts +11 -0
  216. package/dist/extensions/kimi-coding/index.js +26 -26
  217. package/dist/extensions/line/index.d.ts +11 -0
  218. package/dist/extensions/line/index.js +28 -28
  219. package/dist/extensions/line/setup-entry.d.ts +7 -0
  220. package/dist/extensions/line/setup-entry.js +28 -28
  221. package/dist/extensions/llm-task/index.d.ts +11 -0
  222. package/dist/extensions/llm-task/index.js +28 -28
  223. package/dist/extensions/lobster/index.d.ts +11 -0
  224. package/dist/extensions/matrix/index.d.ts +11 -0
  225. package/dist/extensions/matrix/index.js +31 -31
  226. package/dist/extensions/matrix/setup-entry.d.ts +20 -0
  227. package/dist/extensions/matrix/setup-entry.js +31 -31
  228. package/dist/extensions/mattermost/index.d.ts +11 -0
  229. package/dist/extensions/mattermost/index.js +28 -28
  230. package/dist/extensions/mattermost/setup-entry.d.ts +88 -0
  231. package/dist/extensions/mattermost/setup-entry.js +28 -28
  232. package/dist/extensions/memory-core/index.d.ts +11 -0
  233. package/dist/extensions/memory-lancedb/index.d.ts +25 -0
  234. package/dist/extensions/microsoft/index.d.ts +11 -0
  235. package/dist/extensions/microsoft/index.js +26 -26
  236. package/dist/extensions/minimax/index.d.ts +11 -0
  237. package/dist/extensions/minimax/index.js +26 -26
  238. package/dist/extensions/mistral/index.d.ts +11 -0
  239. package/dist/extensions/mistral/index.js +26 -26
  240. package/dist/extensions/modelstudio/index.d.ts +11 -0
  241. package/dist/extensions/modelstudio/index.js +26 -26
  242. package/dist/extensions/moonshot/index.d.ts +11 -0
  243. package/dist/extensions/moonshot/index.js +26 -26
  244. package/dist/extensions/msteams/index.d.ts +11 -0
  245. package/dist/extensions/msteams/index.js +31 -31
  246. package/dist/extensions/msteams/setup-entry.d.ts +11 -0
  247. package/dist/extensions/msteams/setup-entry.js +31 -31
  248. package/dist/extensions/nextcloud-talk/index.d.ts +11 -0
  249. package/dist/extensions/nextcloud-talk/index.js +28 -28
  250. package/dist/extensions/nextcloud-talk/setup-entry.d.ts +60 -0
  251. package/dist/extensions/nextcloud-talk/setup-entry.js +28 -28
  252. package/dist/extensions/nostr/index.d.ts +11 -0
  253. package/dist/extensions/nostr/index.js +28 -28
  254. package/dist/extensions/nostr/setup-entry.d.ts +49 -0
  255. package/dist/extensions/nostr/setup-entry.js +28 -28
  256. package/dist/extensions/nvidia/index.d.ts +11 -0
  257. package/dist/extensions/ollama/index.d.ts +11 -0
  258. package/dist/extensions/open-prose/index.d.ts +11 -0
  259. package/dist/extensions/openai/index.d.ts +11 -0
  260. package/dist/extensions/openai/index.js +26 -26
  261. package/dist/extensions/opencode/index.d.ts +11 -0
  262. package/dist/extensions/opencode/index.js +26 -26
  263. package/dist/extensions/opencode-go/index.d.ts +11 -0
  264. package/dist/extensions/opencode-go/index.js +26 -26
  265. package/dist/extensions/openrouter/index.d.ts +11 -0
  266. package/dist/extensions/openrouter/index.js +26 -26
  267. package/dist/extensions/openshell/index.d.ts +11 -0
  268. package/dist/extensions/openshell/index.js +26 -26
  269. package/dist/extensions/perplexity/index.d.ts +11 -0
  270. package/dist/extensions/perplexity/index.js +2 -2
  271. package/dist/extensions/phone-control/index.d.ts +12 -0
  272. package/dist/extensions/qianfan/index.d.ts +11 -0
  273. package/dist/extensions/qianfan/index.js +26 -26
  274. package/dist/extensions/qwen-portal-auth/index.d.ts +12 -0
  275. package/dist/extensions/qwen-portal-auth/index.js +26 -26
  276. package/dist/extensions/sglang/index.d.ts +11 -0
  277. package/dist/extensions/sglang/index.js +26 -26
  278. package/dist/extensions/signal/index.d.ts +11 -0
  279. package/dist/extensions/signal/index.js +29 -29
  280. package/dist/extensions/signal/setup-entry.d.ts +7 -0
  281. package/dist/extensions/signal/setup-entry.js +29 -29
  282. package/dist/extensions/slack/index.d.ts +11 -0
  283. package/dist/extensions/slack/index.js +30 -30
  284. package/dist/extensions/slack/setup-entry.d.ts +7 -0
  285. package/dist/extensions/slack/setup-entry.js +29 -29
  286. package/dist/extensions/synology-chat/index.d.ts +11 -0
  287. package/dist/extensions/synology-chat/index.js +28 -28
  288. package/dist/extensions/synology-chat/setup-entry.d.ts +138 -0
  289. package/dist/extensions/synology-chat/setup-entry.js +28 -28
  290. package/dist/extensions/synthetic/index.d.ts +11 -0
  291. package/dist/extensions/synthetic/index.js +26 -26
  292. package/dist/extensions/talk-voice/index.d.ts +12 -0
  293. package/dist/extensions/talk-voice/index.js +26 -26
  294. package/dist/extensions/telegram/index.d.ts +11 -0
  295. package/dist/extensions/telegram/index.js +29 -29
  296. package/dist/extensions/telegram/setup-entry.d.ts +7 -0
  297. package/dist/extensions/telegram/setup-entry.js +28 -28
  298. package/dist/extensions/thread-ownership/index.d.ts +12 -0
  299. package/dist/extensions/tlon/index.d.ts +11 -0
  300. package/dist/extensions/tlon/index.js +28 -28
  301. package/dist/extensions/tlon/setup-entry.d.ts +7 -0
  302. package/dist/extensions/tlon/setup-entry.js +28 -28
  303. package/dist/extensions/together/index.d.ts +11 -0
  304. package/dist/extensions/together/index.js +26 -26
  305. package/dist/extensions/twitch/index.d.ts +39 -0
  306. package/dist/extensions/twitch/index.js +28 -28
  307. package/dist/extensions/venice/index.d.ts +11 -0
  308. package/dist/extensions/venice/index.js +26 -26
  309. package/dist/extensions/vercel-ai-gateway/index.d.ts +11 -0
  310. package/dist/extensions/vercel-ai-gateway/index.js +26 -26
  311. package/dist/extensions/vllm/index.d.ts +11 -0
  312. package/dist/extensions/vllm/index.js +26 -26
  313. package/dist/extensions/voice-call/index.d.ts +11 -0
  314. package/dist/extensions/voice-call/index.js +26 -26
  315. package/dist/extensions/volcengine/index.d.ts +11 -0
  316. package/dist/extensions/volcengine/index.js +26 -26
  317. package/dist/extensions/whatsapp/index.d.ts +11 -0
  318. package/dist/extensions/whatsapp/index.js +29 -29
  319. package/dist/extensions/whatsapp/setup-entry.d.ts +7 -0
  320. package/dist/extensions/whatsapp/setup-entry.js +29 -29
  321. package/dist/extensions/xai/index.d.ts +11 -0
  322. package/dist/extensions/xai/index.js +26 -26
  323. package/dist/extensions/xiaomi/index.d.ts +11 -0
  324. package/dist/extensions/xiaomi/index.js +26 -26
  325. package/dist/extensions/zai/index.d.ts +11 -0
  326. package/dist/extensions/zai/index.js +26 -26
  327. package/dist/extensions/zalo/index.d.ts +11 -0
  328. package/dist/extensions/zalo/index.js +30 -30
  329. package/dist/extensions/zalo/setup-entry.d.ts +34 -0
  330. package/dist/extensions/zalo/setup-entry.js +30 -30
  331. package/dist/extensions/zalouser/index.d.ts +11 -0
  332. package/dist/extensions/zalouser/index.js +31 -31
  333. package/dist/extensions/zalouser/setup-entry.d.ts +42 -0
  334. package/dist/extensions/zalouser/setup-entry.js +31 -31
  335. package/dist/feishu-DCKEC3ao.d.ts +36 -0
  336. package/dist/gateway-cli-DN1Ii6J-.js +26432 -0
  337. package/dist/gateway-install-token-CJYFJBaC.js +163 -0
  338. package/dist/gateway-rpc-CroQg9MB.js +26 -0
  339. package/dist/gateway-runtime-D9FRZqKP.js +69 -0
  340. package/dist/googlechat-CBCkerAy.js +307 -0
  341. package/dist/googlechat-CSUNieHX.d.ts +12 -0
  342. package/dist/group-access-rSvkIglb.d.ts +61 -0
  343. package/dist/health-B6WwLJp4.js +570 -0
  344. package/dist/health-CAlJydXv.js +108 -0
  345. package/dist/history-BwNxb0sJ.d.ts +75 -0
  346. package/dist/hooks-BYlfU3Nf.d.ts +6 -0
  347. package/dist/hooks-cli-DuKmdo_H.js +995 -0
  348. package/dist/http-registry-DX_LVtuK.d.ts +20 -0
  349. package/dist/image-generation-DKkdRpve.d.ts +9 -0
  350. package/dist/imessage-7abjbe2Q.js +31 -0
  351. package/dist/imessage-DOH1yaDE.js +110 -0
  352. package/dist/inbound-envelope-CmvweL6U.d.ts +78 -0
  353. package/dist/inbound-reply-dispatch-BvnKTOec.js +71 -0
  354. package/dist/inbound-reply-dispatch-C7LjHRZN.d.ts +72 -0
  355. package/dist/index-DTQqfqj9.d.ts +1 -0
  356. package/dist/index.d.ts +27 -0
  357. package/dist/index.js +2 -2
  358. package/dist/infra/warning-filter.d.ts +10 -0
  359. package/dist/install-target-tXRD7VkM.js +574 -0
  360. package/dist/installs-C8fz8sm3.js +532 -0
  361. package/dist/io-C6XifaT4.js +9737 -0
  362. package/dist/io-C8awRnSW.js +28 -0
  363. package/dist/ipv4-d88_Jn2p.js +82 -0
  364. package/dist/irc-DpR6FXjN.js +672 -0
  365. package/dist/json-store-Sr_kk-II.d.ts +14 -0
  366. package/dist/keyed-async-queue-BA3BKukE.d.ts +19 -0
  367. package/dist/library-DOwowAGN.js +107 -0
  368. package/dist/lifecycle-core-BHHBoRTY.js +382 -0
  369. package/dist/line/accounts.d.ts +3 -0
  370. package/dist/line/send.d.ts +2 -0
  371. package/dist/line/send.js +4 -4
  372. package/dist/line/template-messages.d.ts +2 -0
  373. package/dist/line-8rsNbJCP.js +530 -0
  374. package/dist/line-D_cvIf6B.d.ts +75 -0
  375. package/dist/links-BOnvOj1z.d.ts +7 -0
  376. package/dist/llm-slug-generator-D9HjWtJT.js +67 -0
  377. package/dist/llm-slug-generator.d.ts +12 -0
  378. package/dist/llm-slug-generator.js +27 -27
  379. package/dist/logging-BhqLWxTD.js +13 -0
  380. package/dist/logging-DfaiL4OX.js +29 -0
  381. package/dist/login-qr-COBYR52w.js +233 -0
  382. package/dist/login-qr-xK4QIpPc.js +107 -0
  383. package/dist/logs-cli-RSSTw8L_.js +254 -0
  384. package/dist/manager-runtime-DL6JoSj9.js +106 -0
  385. package/dist/manager.runtime-Cbyhg1vB.js +710 -0
  386. package/dist/markdown-to-line-BTlEkOls.d.ts +91 -0
  387. package/dist/matrix-DX-jaB88.js +1490 -0
  388. package/dist/matrix-H6Yyj1QZ.d.ts +68 -0
  389. package/dist/matrix-J8s45tRw.js +1269 -0
  390. package/dist/mattermost-D75n6bRI.d.ts +6 -0
  391. package/dist/mcp-cli-CLc3_yCO.js +86 -0
  392. package/dist/media-understanding.runtime-BI0Lljbl.js +111 -0
  393. package/dist/memory-cli-CTp2cYrf.js +106 -0
  394. package/dist/method-scopes-Du8ODGFW.js +2586 -0
  395. package/dist/model-auth-markers-DEDakSUW.d.ts +20 -0
  396. package/dist/model-picker-CDBs7LJF.js +390 -0
  397. package/dist/model-picker-CRix4Wwv.js +107 -0
  398. package/dist/model-picker.runtime-CITyy3Rn.js +120 -0
  399. package/dist/model-suppression.runtime-Ce7D6QUT.js +111 -0
  400. package/dist/models-BK1eanuP.js +113 -0
  401. package/dist/models-X4Czy3uE.js +2514 -0
  402. package/dist/models-cli-C79Ulviy.js +304 -0
  403. package/dist/models-config-DALlu3S9.js +106 -0
  404. package/dist/models-config.providers.discovery-CSJ1STM1.d.ts +18 -0
  405. package/dist/monitor-B45a_RpX.js +3468 -0
  406. package/dist/monitor-C8KbJ-i0.js +767 -0
  407. package/dist/monitor-CIhrvegZ.js +3076 -0
  408. package/dist/monitor-CQut7klP.js +6823 -0
  409. package/dist/monitor-DZb5IJle.js +777 -0
  410. package/dist/monitor-DaFkdD27.js +108 -0
  411. package/dist/monitor-Do9Tp2Ii.js +110 -0
  412. package/dist/monitor-shared-CMK9cDOb.js +444 -0
  413. package/dist/msteams-A6H_wv5F.js +852 -0
  414. package/dist/net-DpMJgN-o.d.ts +19 -0
  415. package/dist/nextcloud-talk-f1pZ5Bge.d.ts +1 -0
  416. package/dist/node-cli-BXnmsjzL.js +2498 -0
  417. package/dist/node-resolve-CupmrA0Y.js +835 -0
  418. package/dist/nodes-cli-DZVrah_8.js +1375 -0
  419. package/dist/nostr-DMV534Ks.d.ts +7 -0
  420. package/dist/nostr-SAk3tjtR.js +8744 -0
  421. package/dist/npm-resolution-Dr9wssCY.js +60 -0
  422. package/dist/oauth-utils-DnyXdWU9.d.ts +10 -0
  423. package/dist/onboard-BE5pmb1g.js +589 -0
  424. package/dist/onboard-channels-3hNVY0E7.js +1241 -0
  425. package/dist/onboard-channels-vaO3nWLL.js +200 -0
  426. package/dist/onboard-custom-CI5uFyWH.js +571 -0
  427. package/dist/onboard-custom-eIvRswgv.js +109 -0
  428. package/dist/onboard-helpers-ChMWfUnl.js +335 -0
  429. package/dist/onboard-helpers-DRFi9oaD.js +108 -0
  430. package/dist/onboard-remote-BTspTgA4.js +112 -0
  431. package/dist/onboard-remote-so38yXlX.js +181 -0
  432. package/dist/onboard-search-DS0tZS24.js +297 -0
  433. package/dist/onboard-skills-B9DxCCiU.js +133 -0
  434. package/dist/onboard-skills-so0a_BJV.js +112 -0
  435. package/dist/outbound-media-BiJscGlR.js +11 -0
  436. package/dist/outbound-media-DJF-TuJu.d.ts +11 -0
  437. package/dist/pairing-access-CuiJP9xN.d.ts +21 -0
  438. package/dist/pairing-cli-DN0u1Cez.js +212 -0
  439. package/dist/parse-finite-number-B3FJTjyQ.d.ts +5 -0
  440. package/dist/perplexity-Bw1u3CAF.js +24 -0
  441. package/dist/persistent-dedupe-DR5Ka6BX.d.ts +26 -0
  442. package/dist/pi-model-discovery-runtime-iwKNCaYu.js +106 -0
  443. package/dist/pi-tools.before-tool-call.runtime-BM_N-JZe.js +380 -0
  444. package/dist/plugin-install--KVul05Z.js +184 -0
  445. package/dist/plugin-install-DVpPsLkS.js +112 -0
  446. package/dist/plugin-install-plan-Dwc6-coz.js +49 -0
  447. package/dist/plugin-registry-XRswugE9.js +108 -0
  448. package/dist/plugin-registry-jozQafRo.js +49 -0
  449. package/dist/plugin-sdk/account-resolution.js +26 -26
  450. package/dist/plugin-sdk/acp-runtime.js +26 -26
  451. package/dist/plugin-sdk/acpx.js +1 -1
  452. package/dist/plugin-sdk/agent-runtime.js +26 -26
  453. package/dist/plugin-sdk/bluebubbles.js +29 -29
  454. package/dist/plugin-sdk/channel-config-helpers.js +26 -26
  455. package/dist/plugin-sdk/channel-config-schema.js +2 -2
  456. package/dist/plugin-sdk/channel-policy.js +26 -26
  457. package/dist/plugin-sdk/channel-runtime.js +26 -26
  458. package/dist/plugin-sdk/compat.js +27 -27
  459. package/dist/plugin-sdk/config-runtime.js +28 -28
  460. package/dist/plugin-sdk/conversation-runtime.js +26 -26
  461. package/dist/plugin-sdk/discord.js +26 -26
  462. package/dist/plugin-sdk/feishu.js +27 -27
  463. package/dist/plugin-sdk/gateway-runtime.js +8 -8
  464. package/dist/plugin-sdk/googlechat.js +29 -29
  465. package/dist/plugin-sdk/image-generation-runtime.js +26 -26
  466. package/dist/plugin-sdk/image-generation.js +26 -26
  467. package/dist/plugin-sdk/imessage.js +27 -27
  468. package/dist/plugin-sdk/index.js +26 -26
  469. package/dist/plugin-sdk/infra-runtime.js +26 -26
  470. package/dist/plugin-sdk/irc.js +29 -29
  471. package/dist/plugin-sdk/line.js +27 -27
  472. package/dist/plugin-sdk/llm-task.js +26 -26
  473. package/dist/plugin-sdk/matrix.js +29 -29
  474. package/dist/plugin-sdk/mattermost.js +28 -28
  475. package/dist/plugin-sdk/media-runtime.js +26 -26
  476. package/dist/plugin-sdk/media-understanding-runtime.js +26 -26
  477. package/dist/plugin-sdk/media-understanding.js +26 -26
  478. package/dist/plugin-sdk/msteams.js +30 -30
  479. package/dist/plugin-sdk/nextcloud-talk.js +28 -28
  480. package/dist/plugin-sdk/nostr.js +27 -27
  481. package/dist/plugin-sdk/plugin-runtime.js +26 -26
  482. package/dist/plugin-sdk/provider-auth.js +28 -28
  483. package/dist/plugin-sdk/provider-setup.js +27 -27
  484. package/dist/plugin-sdk/provider-web-search.js +1 -1
  485. package/dist/plugin-sdk/qwen-portal-auth.js +26 -26
  486. package/dist/plugin-sdk/reply-history.js +26 -26
  487. package/dist/plugin-sdk/reply-runtime.js +26 -26
  488. package/dist/plugin-sdk/sandbox.js +26 -26
  489. package/dist/plugin-sdk/security-runtime.js +26 -26
  490. package/dist/plugin-sdk/self-hosted-provider-setup.js +27 -27
  491. package/dist/plugin-sdk/setup.js +27 -27
  492. package/dist/plugin-sdk/signal.js +26 -26
  493. package/dist/plugin-sdk/slack.js +26 -26
  494. package/dist/plugin-sdk/speech-runtime.js +26 -26
  495. package/dist/plugin-sdk/speech.js +26 -26
  496. package/dist/plugin-sdk/src/channels/plugins/setup-wizard-helpers.d.ts +3 -0
  497. package/dist/plugin-sdk/src/config/config-lock.d.ts +38 -0
  498. package/dist/plugin-sdk/src/config/config.d.ts +1 -1
  499. package/dist/plugin-sdk/src/config/io.d.ts +39 -0
  500. package/dist/plugin-sdk/src/config/types.gateway.d.ts +12 -0
  501. package/dist/plugin-sdk/src/config/types.secrets.d.ts +10 -0
  502. package/dist/plugin-sdk/src/config/zod-schema.d.ts +2 -0
  503. package/dist/plugin-sdk/src/gateway/credential-planner.d.ts +3 -1
  504. package/dist/plugin-sdk/src/secrets/provider-env-vars.d.ts +61 -0
  505. package/dist/plugin-sdk/src/secrets/sec1-placeholder.d.ts +181 -0
  506. package/dist/plugin-sdk/src/secrets/sec1-utils.d.ts +57 -0
  507. package/dist/plugin-sdk/synology-chat.js +27 -27
  508. package/dist/plugin-sdk/telegram.js +26 -26
  509. package/dist/plugin-sdk/text-runtime.js +4 -4
  510. package/dist/plugin-sdk/tlon.js +27 -27
  511. package/dist/plugin-sdk/twitch.js +26 -26
  512. package/dist/plugin-sdk/voice-call.js +26 -26
  513. package/dist/plugin-sdk/whatsapp.js +26 -26
  514. package/dist/plugin-sdk/zalo.js +30 -30
  515. package/dist/plugin-sdk/zalouser.js +29 -29
  516. package/dist/plugins/runtime/index.d.ts +22 -0
  517. package/dist/plugins/runtime/index.js +26 -26
  518. package/dist/plugins-C4PiDdjc.js +106 -0
  519. package/dist/plugins-cli-zhmliYNU.js +912 -0
  520. package/dist/policy-CcSolumc.js +143 -0
  521. package/dist/preflight-audio.runtime-BAbfqqzW.js +111 -0
  522. package/dist/probe-Bgt5c-cr.js +129 -0
  523. package/dist/probe-CPk5iGcg.js +47 -0
  524. package/dist/probe-DR4KRKXz.js +19 -0
  525. package/dist/probe-DnoCyJ_m.js +1793 -0
  526. package/dist/probe-VsLtK3vQ.js +6328 -0
  527. package/dist/probe-auth-BnsKrQt7.js +38 -0
  528. package/dist/probe-auth-DYdUG8l1.js +48 -0
  529. package/dist/program-8enYYBsc.js +247 -0
  530. package/dist/prompt-select-styled-DxBcUasv.js +2673 -0
  531. package/dist/provider-api-key-auth.runtime-DsLZyt6h.js +116 -0
  532. package/dist/provider-auth-choice-30EvRxqc.js +126 -0
  533. package/dist/provider-auth-choice-preference-DMr1WmRg.js +189 -0
  534. package/dist/provider-auth-choice.runtime-CI98BgQF.js +118 -0
  535. package/dist/provider-auth-guidance-WKDIi_wk.js +34 -0
  536. package/dist/provider-auth-result-Cs8wguSI.d.ts +18 -0
  537. package/dist/provider-models-EOys_Nvi.d.ts +867 -0
  538. package/dist/provider-ollama-setup-D89zlm9C.d.ts +32 -0
  539. package/dist/provider-onboard-BzOpgCLu.d.ts +40 -0
  540. package/dist/provider-runtime.runtime-Cm4as2KG.js +106 -0
  541. package/dist/provider-self-hosted-setup-Bmv_AQmw.d.ts +61 -0
  542. package/dist/provider-self-hosted-setup-CJwFVVB4.js +182 -0
  543. package/dist/provider-usage-CVNyLLDb.js +106 -0
  544. package/dist/provider-usage.types-CdTymHNu.d.ts +16 -0
  545. package/dist/provider-web-search-BJhXD5dH.js +2392 -0
  546. package/dist/provider-wizard-DMMYXjlW.js +152 -0
  547. package/dist/push-apns-BnWTdTEk.js +1038 -0
  548. package/dist/pw-ai-CtK_7Cy2.js +1866 -0
  549. package/dist/qr-cli-CA-BF0--.js +108 -0
  550. package/dist/qr-cli-D18HiUkh.js +369 -0
  551. package/dist/reactions-Df7XG8Uh.js +281 -0
  552. package/dist/read-only-account-inspect.discord.runtime-B-FP0mwb.js +111 -0
  553. package/dist/read-only-account-inspect.slack.runtime-DkWZ2ccW.js +111 -0
  554. package/dist/read-only-account-inspect.telegram.runtime-BnlTkn_e.js +111 -0
  555. package/dist/redact-snapshot-DVdstBvO.js +2661 -0
  556. package/dist/ref-contract-RPkB754Q.js +53 -0
  557. package/dist/register.agent-DVAxXQKW.js +434 -0
  558. package/dist/register.backup-CUuL5KUZ.js +624 -0
  559. package/dist/register.configure-bC0UEwfU.js +247 -0
  560. package/dist/register.maintenance-iIqvl_eT.js +569 -0
  561. package/dist/register.message-CEDd4z07.js +704 -0
  562. package/dist/register.onboard-Cejfnysy.js +187 -0
  563. package/dist/register.setup-DU7uHdYt.js +207 -0
  564. package/dist/register.status-health-sessions-BWphMXNR.js +493 -0
  565. package/dist/register.subclis-DnIweTEG.js +315 -0
  566. package/dist/register.subclis-gJX_Pbub.js +12 -0
  567. package/dist/registry-Dgwc-7eS.js +1183 -0
  568. package/dist/replies-D9PEZ8yn.js +110 -0
  569. package/dist/reply-history-lHgoC4l3.d.ts +1 -0
  570. package/dist/reply-payload-Bd2HuR4g.d.ts +46 -0
  571. package/dist/request-url-BcSJaiiu.d.ts +5 -0
  572. package/dist/resolve-BbsCHGLY.js +660 -0
  573. package/dist/resolve-channels-BtrGC95o.js +262 -0
  574. package/dist/resolve-channels-C1SthO1N.js +226 -0
  575. package/dist/resolve-users-CgSxHrU0.js +143 -0
  576. package/dist/routes-BZtqNrBf.js +7097 -0
  577. package/dist/rpc-D3KMxG4J.js +67 -0
  578. package/dist/run-command-C8b3dCZV.d.ts +16 -0
  579. package/dist/run-main-BlWJVotF.js +423 -0
  580. package/dist/runtime-RWGbO5Qy.d.ts +26 -0
  581. package/dist/runtime-discord-ops.runtime-DUXIYvQr.js +9073 -0
  582. package/dist/runtime-slack-ops.runtime-n1yFfyp1.js +4551 -0
  583. package/dist/runtime-telegram-ops.runtime-PZUWchjT.js +128 -0
  584. package/dist/runtime-whatsapp-login.runtime-xsuNyvGz.js +109 -0
  585. package/dist/runtime-whatsapp-outbound.runtime-5EfEyCsO.js +112 -0
  586. package/dist/sandbox-cli-Dw1nWNmQ.js +530 -0
  587. package/dist/search-manager-BJoRxOaf.js +15 -0
  588. package/dist/search-manager-DxkQvUrW.js +386 -0
  589. package/dist/secret-input-schema-Cp_La9qv.d.ts +19 -0
  590. package/dist/secrets-cli-BPyV2gSq.js +2065 -0
  591. package/dist/security-cli-EK4sSRfG.js +570 -0
  592. package/dist/send-B01Gvh9m.js +629 -0
  593. package/dist/send-B4L4wRJO.js +100 -0
  594. package/dist/send-BDcGrXt0.js +1025 -0
  595. package/dist/send-BRRtHxyR.js +283 -0
  596. package/dist/send-DU6dmMXW.js +631 -0
  597. package/dist/server-CWw5GFEg.js +106 -0
  598. package/dist/server-node-events-92cDVswC.js +501 -0
  599. package/dist/session-key-DbkfhOjM.d.ts +46 -0
  600. package/dist/sessions-B052uHA3.js +218 -0
  601. package/dist/sessions-Cef4dZNP.js +107 -0
  602. package/dist/setup-BlQPyDPy.js +387 -0
  603. package/dist/setup-DcSZ_pTn.d.ts +37 -0
  604. package/dist/setup-core-B9mdZYnU.js +166 -0
  605. package/dist/setup-core-Cj0sLkpP.js +47 -0
  606. package/dist/setup-core-CkZbebOv.js +143 -0
  607. package/dist/setup-core-MRNjnrJl.js +205 -0
  608. package/dist/setup-surface-3ZY0JtWE.js +490 -0
  609. package/dist/setup-wizard-helpers-Dwzb9Dcz.d.ts +203 -0
  610. package/dist/setup.finalize-B5ETm3Ui.js +517 -0
  611. package/dist/setup.gateway-config-C8hdtlbw.js +338 -0
  612. package/dist/setup.secret-input-BZSIeiqy.js +25 -0
  613. package/dist/shared--9_eQ_lc.js +75 -0
  614. package/dist/shared-CxkH3H0U.js +102 -0
  615. package/dist/shared-DTNL0hA9.js +298 -0
  616. package/dist/shared-HSP1OV-Q.js +96 -0
  617. package/dist/shared-UIjWb_3B.js +182 -0
  618. package/dist/signal-CTI6bSmB.js +109 -0
  619. package/dist/skills-4-r1mfJM.js +853 -0
  620. package/dist/skills-RNm54CBO.js +19 -0
  621. package/dist/skills-cli-te7dSs5p.js +291 -0
  622. package/dist/skills-install-Del-Ogv8.js +763 -0
  623. package/dist/skills-status-BZpoMXrR.js +169 -0
  624. package/dist/skills-status-Dq61Sz8U.js +20 -0
  625. package/dist/slack-oc-viUtl.js +109 -0
  626. package/dist/slash-commands.runtime-NdkD2LZV.js +123 -0
  627. package/dist/slash-dispatch.runtime-DQgeaF3J.js +136 -0
  628. package/dist/slash-skill-commands.runtime-DmOl2DnL.js +111 -0
  629. package/dist/src-0wtt7seR.js +1696 -0
  630. package/dist/status-5oR_gqv_.js +121 -0
  631. package/dist/status-BO8LY0hC.js +1599 -0
  632. package/dist/status-D_oHA9yO.js +126 -0
  633. package/dist/status-IrMacJRj.js +606 -0
  634. package/dist/status-Prdeg53E.js +43 -0
  635. package/dist/status-json-Da0hR-1Z.js +286 -0
  636. package/dist/status.link-channel-BgUJEZAz.js +138 -0
  637. package/dist/status.scan.deps.runtime-D9vHTxOW.js +121 -0
  638. package/dist/status.scan.runtime-D-EdD5CW.js +114 -0
  639. package/dist/status.summary--i6xduWH.js +592 -0
  640. package/dist/status.summary.runtime-BqMXjaBc.js +113 -0
  641. package/dist/subagent-orphan-recovery-DiRJcFQc.js +302 -0
  642. package/dist/subagent-registry-runtime-B66EYEYm.js +106 -0
  643. package/dist/synology-chat-BemXqdzG.js +297 -0
  644. package/dist/system-cli-CSuiia4-.js +92 -0
  645. package/dist/telegram/audit.d.ts +2 -0
  646. package/dist/telegram/audit.js +1 -1
  647. package/dist/telegram/token.d.ts +2 -0
  648. package/dist/telegram/token.js +26 -26
  649. package/dist/telegram-DLFcRv5a.js +109 -0
  650. package/dist/testing-DZrulv-n.d.ts +1755 -0
  651. package/dist/text-chunking-BaYBIUoR.d.ts +79 -0
  652. package/dist/text-chunking-C8kmbNfa.js +84 -0
  653. package/dist/thinking-D8aqmr3o.d.ts +13 -0
  654. package/dist/tlon-Bpr4f3yF.js +433 -0
  655. package/dist/tool-send-BHKm5ztm.d.ts +9 -0
  656. package/dist/tui-BY3QRgC1.js +3834 -0
  657. package/dist/tui-cli-CCfZOlV0.js +132 -0
  658. package/dist/types-CKx5nDZB.d.ts +45 -0
  659. package/dist/types-DBhDdMQd.d.ts +22670 -0
  660. package/dist/types.base-B_TkkSS8.d.ts +188 -0
  661. package/dist/types.secrets-Bojc4omL.js +92 -0
  662. package/dist/ui-1UpZZyI3.js +31 -0
  663. package/dist/update-BR4JvFpV.js +1036 -0
  664. package/dist/update-cli-BZv44lFq.js +1498 -0
  665. package/dist/update-offset-store-DGdBotIW.js +107 -0
  666. package/dist/update-runner-D34sooPe.js +1496 -0
  667. package/dist/vllm-defaults-BCGSJ7K0.d.ts +13 -0
  668. package/dist/wait-BU9vJv22.d.ts +4 -0
  669. package/dist/web-CXpU2D41.js +107 -0
  670. package/dist/web-shared-B4sL45ah.d.ts +45 -0
  671. package/dist/webhook-memory-guards-B7oLVseG.d.ts +43 -0
  672. package/dist/webhook-request-guards-CqIH7equ.d.ts +76 -0
  673. package/dist/webhook-targets-CAAGATtk.js +181 -0
  674. package/dist/webhook-targets-oQ0jd4r0.d.ts +106 -0
  675. package/dist/webhooks-cli-B46t2VT5.js +349 -0
  676. package/dist/whatsapp-Dniwd4Rv.js +109 -0
  677. package/dist/whatsapp-actions-fL46PsNs.js +162 -0
  678. package/dist/windows-spawn-DGeE98SH.d.ts +43 -0
  679. package/dist/workspace-dirs-d3Ms_ryk.js +2002 -0
  680. package/dist/zalo-Csulx0XK.d.ts +9 -0
  681. package/dist/zalo-gh0yAWmS.js +415 -0
  682. package/dist/zalouser-CuxRvztM.js +30911 -0
  683. package/dist/zod-schema.agent-runtime-B4MkB-_3.d.ts +10 -0
  684. package/dist/zod-schema.core-D5reNip6.js +541 -0
  685. package/dist/zod-schema.core-DN3RhEUG.d.ts +173 -0
  686. package/docs/SEC1.md +523 -0
  687. package/docs/SEC1_IMPLEMENTATION/CHANNELS_REPORT.md +173 -0
  688. package/docs/SEC1_IMPLEMENTATION/CORE_UTIL_REPORT.md +139 -0
  689. package/docs/SEC1_IMPLEMENTATION/DOCS_REPORT.md +134 -0
  690. package/docs/SEC1_IMPLEMENTATION/ENV_MAP_DRAFT.md +148 -0
  691. package/docs/SEC1_IMPLEMENTATION/INTEGRATION_REPORT.md +170 -0
  692. package/docs/SEC1_IMPLEMENTATION/PROVIDERS_REPORT.md +291 -0
  693. package/docs/SEC1_IMPLEMENTATION/QA_REPORT.md +249 -0
  694. package/docs/SEC1_IMPLEMENTATION/RECURSIVE_QA/wave1-channels.md +317 -0
  695. package/docs/SEC1_IMPLEMENTATION/RECURSIVE_QA/wave1-docs.md +212 -0
  696. package/docs/SEC1_IMPLEMENTATION/RECURSIVE_QA/wave1-security.md +368 -0
  697. package/docs/SEC1_IMPLEMENTATION/RECURSIVE_QA/wave2-critic-consolidated.md +195 -0
  698. package/docs/SEC1_IMPLEMENTATION/RECURSIVE_QA/wave3-fix-report.md +105 -0
  699. package/docs/SEC1_IMPLEMENTATION/STRATEGY.md +451 -0
  700. package/docs/SEC1_IMPLEMENTATION/TEST_REPORT.md +156 -0
  701. package/docs/pipeline-sdk/CLI_SPEC.md +609 -0
  702. package/docs/pipeline-sdk/PIPELINE_SDK_DESIGN.md +1372 -0
  703. package/extensions/kakao-talkchannel/MIGRATION_ARCH_ANALYSIS.md +455 -0
  704. package/extensions/kakao-talkchannel/MIGRATION_CODE_ANALYSIS.md +383 -0
  705. package/extensions/kakao-talkchannel/MIGRATION_STRATEGY.md +115 -0
  706. package/extensions/kakao-talkchannel/README.md +50 -0
  707. package/extensions/kakao-talkchannel/index.ts +20 -0
  708. package/extensions/kakao-talkchannel/moldclaw.plugin.json +98 -0
  709. package/extensions/kakao-talkchannel/package.json +12 -0
  710. package/extensions/kakao-talkchannel/src/adapters/config.ts +132 -0
  711. package/extensions/kakao-talkchannel/src/adapters/gateway.ts +974 -0
  712. package/extensions/kakao-talkchannel/src/adapters/outbound.ts +52 -0
  713. package/extensions/kakao-talkchannel/src/adapters/pairing.ts +35 -0
  714. package/extensions/kakao-talkchannel/src/adapters/security.ts +57 -0
  715. package/extensions/kakao-talkchannel/src/adapters/setup.ts +105 -0
  716. package/extensions/kakao-talkchannel/src/adapters/status.ts +117 -0
  717. package/extensions/kakao-talkchannel/src/channel.ts +58 -0
  718. package/extensions/kakao-talkchannel/src/commands/card.ts +413 -0
  719. package/extensions/kakao-talkchannel/src/config/schema.ts +129 -0
  720. package/extensions/kakao-talkchannel/src/kakao/callback.ts +133 -0
  721. package/extensions/kakao-talkchannel/src/kakao/limits.ts +129 -0
  722. package/extensions/kakao-talkchannel/src/kakao/payload.ts +138 -0
  723. package/extensions/kakao-talkchannel/src/kakao/response.ts +373 -0
  724. package/extensions/kakao-talkchannel/src/relay/client.ts +146 -0
  725. package/extensions/kakao-talkchannel/src/relay/session.ts +137 -0
  726. package/extensions/kakao-talkchannel/src/relay/sse.ts +258 -0
  727. package/extensions/kakao-talkchannel/src/relay/stream.ts +149 -0
  728. package/extensions/kakao-talkchannel/src/runtime.ts +21 -0
  729. package/extensions/kakao-talkchannel/src/types.ts +447 -0
  730. package/extensions/kakao-talkchannel/src/version.ts +3 -0
  731. package/extensions/kakao-talkchannel/tsconfig.json +19 -0
  732. package/package.json +23 -8
  733. package/skills/meshy/SKILL.md +69 -0
  734. package/skills/meshy/scripts/__pycache__/check_status.cpython-312.pyc +0 -0
  735. package/skills/meshy/scripts/__pycache__/image_to_3d.cpython-312.pyc +0 -0
  736. package/skills/meshy/scripts/__pycache__/text_to_3d.cpython-312.pyc +0 -0
  737. package/skills/meshy/scripts/check_status.py +147 -0
  738. package/skills/meshy/scripts/image_to_3d.py +229 -0
  739. package/skills/meshy/scripts/text_to_3d.py +214 -0
  740. package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
  741. package/skills/openai-whisper-api/scripts/transcribe.sh +0 -0
  742. package/skills/tavily-search/SKILL.md +61 -0
  743. package/skills/tavily-search/scripts/__pycache__/search.cpython-312.pyc +0 -0
  744. package/skills/tavily-search/scripts/search.py +238 -0
  745. package/skills/video-frames/scripts/frame.sh +0 -0
  746. package/LICENSE +0 -21
  747. package/dist/accounts-UcSvD34O.js +0 -109
  748. package/dist/acp-cli-BPb8PgHP.js +0 -2088
  749. package/dist/actions.runtime-BL5QRooG.js +0 -114
  750. package/dist/actions.runtime-DSdfSo40.js +0 -128
  751. package/dist/agents-CHeX_5-H.js +0 -217
  752. package/dist/agents-DQRL9XKP.js +0 -853
  753. package/dist/allow-list-Boi79v-U.js +0 -81
  754. package/dist/allowlist-B2eBBeMF.js +0 -142
  755. package/dist/api-CFAtRSYL.js +0 -6953
  756. package/dist/api-D5JNJj8n.js +0 -112
  757. package/dist/audit-BM0GsdzV.js +0 -787
  758. package/dist/audit-BqRK9OSj.js +0 -54
  759. package/dist/audit-channel.collect.runtime-BPvDB8aq.js +0 -600
  760. package/dist/audit-channel.runtime-D3fzHiAo.js +0 -116
  761. package/dist/audit-extra.async-NveNIzX0.js +0 -813
  762. package/dist/audit-membership-runtime-mu470WFO.js +0 -157
  763. package/dist/audit.deep.runtime-RdxvW8Tj.js +0 -24
  764. package/dist/audit.nondeep.runtime-DDu8vA9Z.js +0 -831
  765. package/dist/audit.runtime-Y8C9W7s9.js +0 -113
  766. package/dist/auth-choice-C1CIxRsi.js +0 -268
  767. package/dist/auth-choice-CTvqWiDI.js +0 -117
  768. package/dist/auth-choice-Ddzko1B8.js +0 -502
  769. package/dist/auth-choice-options-BIAmAiCe.js +0 -123
  770. package/dist/auth-choice-prompt-B815kArz.js +0 -110
  771. package/dist/auth-choice-prompt-CGhTNCJx.js +0 -36
  772. package/dist/auth-choice.plugin-providers.runtime-AvAZ6S5W.js +0 -114
  773. package/dist/auth-profiles-BJcHzwPy.js +0 -127650
  774. package/dist/auth-profiles.runtime-CieFilK5.js +0 -111
  775. package/dist/bluebubbles-F8FGE9cH.js +0 -64
  776. package/dist/brave-BG5Yopn8.js +0 -24
  777. package/dist/browser-cli-Co7PJGZF.js +0 -1492
  778. package/dist/call-CoaQYq7c.js +0 -639
  779. package/dist/call-D3eu5Jjh.js +0 -37
  780. package/dist/channel-BftWD6yu.js +0 -1321
  781. package/dist/channel-Bub9U5Xg.js +0 -214
  782. package/dist/channel-C0oDs7TO.js +0 -4681
  783. package/dist/channel-C8CnEdkZ.js +0 -352
  784. package/dist/channel-CI-RC-xf.js +0 -497
  785. package/dist/channel-CY-hZCOJ.js +0 -397
  786. package/dist/channel-CbtGJB2x.js +0 -943
  787. package/dist/channel-CcfK3wP8.js +0 -803
  788. package/dist/channel-DBoDIeVj.js +0 -619
  789. package/dist/channel-DEq6Ecs-.js +0 -920
  790. package/dist/channel-DH4dhW1n.js +0 -226
  791. package/dist/channel-DQ_wdKg_.js +0 -575
  792. package/dist/channel-DT6qD1Ic.js +0 -207
  793. package/dist/channel-DZNAyxwr.js +0 -542
  794. package/dist/channel-DtakwAEe.js +0 -538
  795. package/dist/channel-DuYgH6p1.js +0 -562
  796. package/dist/channel-Hn-AN-d52.js +0 -316
  797. package/dist/channel-_R4hbD5h.js +0 -1598
  798. package/dist/channel-account-context-DXq8dlvI.js +0 -103
  799. package/dist/channel-kQmEVn3I.js +0 -306
  800. package/dist/channel-options-DHfxaklg.js +0 -50
  801. package/dist/channel-summary-DUpnoYhI.js +0 -106
  802. package/dist/channel-t-JxCWk6.js +0 -949
  803. package/dist/channel.runtime--GYriaXU.js +0 -213
  804. package/dist/channel.runtime-BJtn3GOH.js +0 -174
  805. package/dist/channel.runtime-BV7t_oNz.js +0 -166
  806. package/dist/channel.runtime-Bi8a3n9S.js +0 -865
  807. package/dist/channel.runtime-BjsYF0NN.js +0 -122
  808. package/dist/channel.runtime-BnI6YtmI.js +0 -413
  809. package/dist/channel.runtime-CQOftcCd.js +0 -194
  810. package/dist/channel.runtime-CuIAcPjZ.js +0 -4006
  811. package/dist/channel.runtime-DH1Q1G4k.js +0 -399
  812. package/dist/channel.runtime-DYYUPKxr.js +0 -236
  813. package/dist/channel.runtime-U5Gszsr5.js +0 -177
  814. package/dist/channel.setup-BQFHmgki.js +0 -9
  815. package/dist/channel.setup-BVoDwklu.js +0 -8
  816. package/dist/channel.setup-Bf73HsXr.js +0 -57
  817. package/dist/channel.setup-CblD4flM.js +0 -11
  818. package/dist/channel.setup-DgxlrPgz.js +0 -6
  819. package/dist/channel.setup-GLIAEVKL.js +0 -8
  820. package/dist/channel.setup-YTy5R1sz.js +0 -9
  821. package/dist/channels-CTL8iR9J.js +0 -404
  822. package/dist/channels-DBGvnjHY.js +0 -1113
  823. package/dist/channels-cli-BmVO5-sq.js +0 -286
  824. package/dist/channels-status-issues-kDtsWzA-.js +0 -16
  825. package/dist/clawbot-cli-DtcMJHqX.js +0 -113
  826. package/dist/cli-BNGECGVY.js +0 -149
  827. package/dist/command-registry-1SDrWgER.js +0 -13
  828. package/dist/command-registry-DNorYU4w.js +0 -212
  829. package/dist/command-secret-gateway-DqDZparO.js +0 -106
  830. package/dist/compact.runtime-C1ZN8UGb.js +0 -111
  831. package/dist/completion-cli-Q_Jt5Foc.js +0 -16
  832. package/dist/completion-cli-QkTXhuJh.js +0 -445
  833. package/dist/config-BbxrRaLf.js +0 -938
  834. package/dist/config-CkD8DJ7L.js +0 -44
  835. package/dist/config-cli-BoPrlYTp.js +0 -428
  836. package/dist/config-guard-CEhCvr_u.js +0 -117
  837. package/dist/config-schema-GQ6uWjXe.js +0 -31
  838. package/dist/config-validation-woE2_LpC.js +0 -262
  839. package/dist/config-value-Dh8m-CFf.js +0 -132
  840. package/dist/config-y4i5g7s4.js +0 -30
  841. package/dist/configure-DGRzwdFN.js +0 -1100
  842. package/dist/configure-S4AHE3k_.js +0 -238
  843. package/dist/control-ui-shared-kLBp4YlS.js +0 -29
  844. package/dist/credentials-D5uBf_C5.js +0 -265
  845. package/dist/cron-cli-lGupeVCW.js +0 -634
  846. package/dist/daemon-cli-Cs_edi0I.js +0 -339
  847. package/dist/daemon-install-DIFpP_qv.js +0 -175
  848. package/dist/deliver-DYa_DFZU.js +0 -106
  849. package/dist/deliver-runtime-DCW_o2Ot.js +0 -106
  850. package/dist/devices-cli-YsGOW2-w.js +0 -340
  851. package/dist/diagnostic-vMghIesG.js +0 -310
  852. package/dist/directory-cli-DtjMQjU5.js +0 -306
  853. package/dist/directory.static-DBZGvsdF.js +0 -44
  854. package/dist/discord-DYCu19HT.js +0 -109
  855. package/dist/discovery-DZYAoDF_.js +0 -48
  856. package/dist/dns-cli-DqW4pNgW.js +0 -216
  857. package/dist/docs-cli-Bu9TBlDU.js +0 -173
  858. package/dist/doctor-completion-B5hcQD5c.js +0 -90
  859. package/dist/doctor-config-flow-BBB2ZKfT.js +0 -107
  860. package/dist/doctor-config-flow-DDBYUS9f.js +0 -2437
  861. package/dist/enable-Tmsp8QuB.js +0 -24
  862. package/dist/env-overrides-BHxqjYZG.js +0 -434
  863. package/dist/env-overrides.runtime-Cz98bf-l.js +0 -17
  864. package/dist/exec-approvals-cli-wO5cYfMa.js +0 -419
  865. package/dist/gateway-cli-CFvDGhB9.js +0 -26429
  866. package/dist/gateway-install-token-CskJfo_N.js +0 -163
  867. package/dist/gateway-rpc-srYfBID9.js +0 -26
  868. package/dist/gateway-runtime-C76hUmUV.js +0 -69
  869. package/dist/googlechat-Cha5utST.js +0 -307
  870. package/dist/health-DDQYYsJy.js +0 -108
  871. package/dist/health-DXZykGaX.js +0 -570
  872. package/dist/hooks-cli-DfkurPYP.js +0 -995
  873. package/dist/imessage-B26k39pl.js +0 -110
  874. package/dist/imessage-Bp1_6cws.js +0 -31
  875. package/dist/inbound-reply-dispatch-DoIJLztA.js +0 -71
  876. package/dist/install-target-BjOuS4I8.js +0 -574
  877. package/dist/installs-Cz4k0W1Y.js +0 -532
  878. package/dist/io-B0OKifLZ.js +0 -28
  879. package/dist/io-DcoxdH6t.js +0 -9570
  880. package/dist/ipv4-CTQQ4_IW.js +0 -82
  881. package/dist/irc-B8vBDigm.js +0 -672
  882. package/dist/library-VCM_cQY4.js +0 -107
  883. package/dist/lifecycle-core-Ctz36PdQ.js +0 -382
  884. package/dist/line-B_uTLrdI.js +0 -530
  885. package/dist/llm-slug-generator-YWg0g2pj.js +0 -67
  886. package/dist/logging-S-5LPdfQ.js +0 -13
  887. package/dist/logging-ueBMCGMR.js +0 -29
  888. package/dist/login-qr-pcACm2Ng.js +0 -107
  889. package/dist/login-qr-pv-kxMfF.js +0 -233
  890. package/dist/logs-cli-RgADgSMO.js +0 -254
  891. package/dist/manager-runtime-BhTkoKmb.js +0 -106
  892. package/dist/manager.runtime-BjHzikoK.js +0 -710
  893. package/dist/matrix-C4EEu2Qp.js +0 -1490
  894. package/dist/matrix-Dfzcc5nV.js +0 -1269
  895. package/dist/mcp-cli-CJmOm9Oj.js +0 -86
  896. package/dist/media-understanding.runtime-DCETFCw_.js +0 -111
  897. package/dist/memory-cli-DFqd6tYx.js +0 -106
  898. package/dist/method-scopes-D-Q9dvbj.js +0 -2586
  899. package/dist/model-picker-Z-CUcuMr.js +0 -390
  900. package/dist/model-picker-v5mUsZ4J.js +0 -107
  901. package/dist/model-picker.runtime-A_z0dHfS.js +0 -120
  902. package/dist/model-suppression.runtime-QVWVJRr-.js +0 -111
  903. package/dist/models-Bbj0xV4F.js +0 -2514
  904. package/dist/models-D-OIjZqU.js +0 -113
  905. package/dist/models-cli-Bpn-5i4h.js +0 -304
  906. package/dist/models-config-Cwa5cJbC.js +0 -106
  907. package/dist/monitor-BchfCAaU.js +0 -6823
  908. package/dist/monitor-BydV44SP.js +0 -3076
  909. package/dist/monitor-CT8axwfm.js +0 -767
  910. package/dist/monitor-CZGWNOvn.js +0 -777
  911. package/dist/monitor-DN62r69g.js +0 -3468
  912. package/dist/monitor-DZ0fzJku.js +0 -110
  913. package/dist/monitor-DvNjzWFu.js +0 -108
  914. package/dist/monitor-shared-B-DBSlkQ.js +0 -444
  915. package/dist/msteams-Bf-wk2Rp.js +0 -852
  916. package/dist/node-cli-kH16TQI7.js +0 -2498
  917. package/dist/node-resolve-DfOpQmxm.js +0 -835
  918. package/dist/nodes-cli-CkAMXW5u.js +0 -1375
  919. package/dist/nostr-B8UGHclZ.js +0 -8744
  920. package/dist/npm-resolution-DmjlifII.js +0 -60
  921. package/dist/onboard-C883nfyw.js +0 -589
  922. package/dist/onboard-channels-Dc-BxN7p.js +0 -200
  923. package/dist/onboard-channels-j5EENtum.js +0 -1241
  924. package/dist/onboard-custom-0atne0C5.js +0 -571
  925. package/dist/onboard-custom-CWMqwjJx.js +0 -109
  926. package/dist/onboard-helpers-D3wWfH8F.js +0 -335
  927. package/dist/onboard-helpers-DZmRCe8l.js +0 -108
  928. package/dist/onboard-remote-Cn6kW-p0.js +0 -112
  929. package/dist/onboard-remote-Cx4w5VAk.js +0 -181
  930. package/dist/onboard-search-Ck9HRh2M.js +0 -297
  931. package/dist/onboard-skills-BtqrGioT.js +0 -133
  932. package/dist/onboard-skills-Dnw19Os8.js +0 -112
  933. package/dist/outbound-media-C5Nv4o18.js +0 -11
  934. package/dist/pairing-cli-Cwy9QZ_4.js +0 -212
  935. package/dist/perplexity-Brhpb45X.js +0 -24
  936. package/dist/pi-model-discovery-runtime-DIOdo6D8.js +0 -106
  937. package/dist/pi-tools.before-tool-call.runtime-CFM4gsDF.js +0 -380
  938. package/dist/plugin-install-BOV00hia.js +0 -112
  939. package/dist/plugin-install-Bak8fUBv.js +0 -184
  940. package/dist/plugin-install-plan-bKkEefRf.js +0 -49
  941. package/dist/plugin-registry-DxAXQUlZ.js +0 -108
  942. package/dist/plugin-registry-n0p3phem.js +0 -49
  943. package/dist/plugins-Ca3RK8Fi.js +0 -106
  944. package/dist/plugins-cli-BnC51H2R.js +0 -912
  945. package/dist/policy-BJv97w9e.js +0 -143
  946. package/dist/preflight-audio.runtime-BrFcf-6_.js +0 -111
  947. package/dist/probe-063xvvZc.js +0 -19
  948. package/dist/probe-BJEb2wGv.js +0 -1793
  949. package/dist/probe-CJQlxgsl.js +0 -47
  950. package/dist/probe-Caa2HznF.js +0 -6328
  951. package/dist/probe-CfL4tnJ6.js +0 -129
  952. package/dist/probe-auth-DN2Ec83-.js +0 -38
  953. package/dist/probe-auth-D_UKzu4m.js +0 -48
  954. package/dist/program-BOMdC7MC.js +0 -247
  955. package/dist/prompt-select-styled-DDnCfM3j.js +0 -2673
  956. package/dist/provider-api-key-auth.runtime-DUns3fwX.js +0 -116
  957. package/dist/provider-auth-choice-B_j1ctT2.js +0 -126
  958. package/dist/provider-auth-choice-preference-BaOBZ_Xn.js +0 -189
  959. package/dist/provider-auth-choice.runtime-DOako_zV.js +0 -118
  960. package/dist/provider-auth-guidance-CrjxnoNZ.js +0 -34
  961. package/dist/provider-runtime.runtime-BkOkgmTw.js +0 -106
  962. package/dist/provider-self-hosted-setup-BFDU6dRa.js +0 -182
  963. package/dist/provider-usage-CaDE0mqq.js +0 -106
  964. package/dist/provider-web-search-BR7etTjJ.js +0 -2392
  965. package/dist/provider-wizard-DCPdKUvb.js +0 -152
  966. package/dist/push-apns-B_OZjm4v.js +0 -1038
  967. package/dist/pw-ai-dG60P0hQ.js +0 -1866
  968. package/dist/qr-cli-DWfiw79I.js +0 -369
  969. package/dist/qr-cli-DwuKtyZQ.js +0 -108
  970. package/dist/reactions-CIGAPBn8.js +0 -281
  971. package/dist/read-only-account-inspect.discord.runtime-D54mnq8l.js +0 -111
  972. package/dist/read-only-account-inspect.slack.runtime-Bxs9ObMC.js +0 -111
  973. package/dist/read-only-account-inspect.telegram.runtime-UoVuf_Yo.js +0 -111
  974. package/dist/redact-snapshot-DZ3Vq-SC.js +0 -2657
  975. package/dist/ref-contract-D96lSYLs.js +0 -53
  976. package/dist/register.agent-2KmeahEL.js +0 -434
  977. package/dist/register.backup-ECBnWVR7.js +0 -624
  978. package/dist/register.configure-Doz1daCp.js +0 -247
  979. package/dist/register.maintenance-C33cV-WM.js +0 -569
  980. package/dist/register.message-CnL0NiF6.js +0 -704
  981. package/dist/register.onboard-BrYGZeQA.js +0 -187
  982. package/dist/register.setup-Bx6gEg6X.js +0 -207
  983. package/dist/register.status-health-sessions-FLb0CUOO.js +0 -493
  984. package/dist/register.subclis-BuqgaeIf.js +0 -12
  985. package/dist/register.subclis-DwdgfdnT.js +0 -315
  986. package/dist/registry-xhgvU89y.js +0 -1107
  987. package/dist/replies-hB2aipLu.js +0 -110
  988. package/dist/resolve-3ErMOltL.js +0 -660
  989. package/dist/resolve-channels-BV8GXuPe.js +0 -226
  990. package/dist/resolve-channels-CTY_XRIP.js +0 -262
  991. package/dist/resolve-users-DQ4Ne4Zc.js +0 -143
  992. package/dist/routes-BNDsNO_e.js +0 -7097
  993. package/dist/rpc-BLGTBWXq.js +0 -67
  994. package/dist/run-main-COAE4GlI.js +0 -423
  995. package/dist/runtime-discord-ops.runtime-Dxg-nlgd.js +0 -9073
  996. package/dist/runtime-slack-ops.runtime-Di474LJr.js +0 -4551
  997. package/dist/runtime-telegram-ops.runtime-Da8vgf3O.js +0 -128
  998. package/dist/runtime-whatsapp-login.runtime-DcouP4iF.js +0 -109
  999. package/dist/runtime-whatsapp-outbound.runtime-CYamaEJX.js +0 -112
  1000. package/dist/sandbox-cli-U5ZTxhxL.js +0 -530
  1001. package/dist/search-manager-CfizyEMk.js +0 -386
  1002. package/dist/search-manager-DaF2QP4s.js +0 -15
  1003. package/dist/secrets-cli-C0gytFip.js +0 -2065
  1004. package/dist/security-cli-C74EuLUO.js +0 -570
  1005. package/dist/send-BTLVBf_E.js +0 -631
  1006. package/dist/send-BlWWCEZE.js +0 -1025
  1007. package/dist/send-CfypD1B_.js +0 -100
  1008. package/dist/send-Cm9v3uhF.js +0 -283
  1009. package/dist/send-g2odQuYI.js +0 -629
  1010. package/dist/server-C8b5QJ2s.js +0 -106
  1011. package/dist/server-node-events-xqQe5xiu.js +0 -501
  1012. package/dist/sessions-CSSzvgPQ.js +0 -107
  1013. package/dist/sessions-z0GIvdKa.js +0 -218
  1014. package/dist/setup-D9XTmlF8.js +0 -387
  1015. package/dist/setup-core-BDrLOwYO.js +0 -143
  1016. package/dist/setup-core-CM7cY7_i.js +0 -166
  1017. package/dist/setup-core-CnmgANY-.js +0 -205
  1018. package/dist/setup-core-DgcjCKmG.js +0 -47
  1019. package/dist/setup-surface-DzRrVKYj.js +0 -490
  1020. package/dist/setup.finalize-UaPu_adv.js +0 -517
  1021. package/dist/setup.gateway-config-Djc1ceEh.js +0 -338
  1022. package/dist/setup.secret-input-BkczghbR.js +0 -25
  1023. package/dist/shared-BHizGoNk.js +0 -298
  1024. package/dist/shared-CUfYhQkP.js +0 -96
  1025. package/dist/shared-DYYqr9EC.js +0 -75
  1026. package/dist/shared-DthOxMRQ.js +0 -182
  1027. package/dist/shared-On_A5_hW.js +0 -102
  1028. package/dist/signal-D6px9PGZ.js +0 -109
  1029. package/dist/skills-B4h1k-SP.js +0 -853
  1030. package/dist/skills-Bto10BGB.js +0 -19
  1031. package/dist/skills-cli-CXGR3Y5j.js +0 -291
  1032. package/dist/skills-install-B1AlkK8C.js +0 -763
  1033. package/dist/skills-status-BsmJ_iSg.js +0 -20
  1034. package/dist/skills-status-DGdxY3OI.js +0 -169
  1035. package/dist/slack-B7vWFmxP.js +0 -109
  1036. package/dist/slash-commands.runtime-DXdAT84n.js +0 -123
  1037. package/dist/slash-dispatch.runtime-CNf2-9Aj.js +0 -136
  1038. package/dist/slash-skill-commands.runtime-CBjffHRX.js +0 -111
  1039. package/dist/src-Cp7P7T08.js +0 -1696
  1040. package/dist/status-158fWh4A.js +0 -43
  1041. package/dist/status-BJIVLJnb.js +0 -1599
  1042. package/dist/status-BQiBI6N9.js +0 -126
  1043. package/dist/status-CZipXGUu.js +0 -121
  1044. package/dist/status-ZZIVFLI-.js +0 -606
  1045. package/dist/status-json-BNUy5Mem.js +0 -286
  1046. package/dist/status.link-channel-B694y1Xu.js +0 -138
  1047. package/dist/status.scan.deps.runtime-BcoKEzQD.js +0 -121
  1048. package/dist/status.scan.runtime-CqScDt-p.js +0 -114
  1049. package/dist/status.summary-AMek7qvI.js +0 -592
  1050. package/dist/status.summary.runtime-XgkcQ_kr.js +0 -113
  1051. package/dist/subagent-orphan-recovery-CrCYTmFC.js +0 -302
  1052. package/dist/subagent-registry-runtime-Cg-YvLx3.js +0 -106
  1053. package/dist/synology-chat-0G85jIqQ.js +0 -297
  1054. package/dist/system-cli-kZtSxKNm.js +0 -92
  1055. package/dist/telegram-DV0Wy89w.js +0 -109
  1056. package/dist/text-chunking-C2J2Oeul.js +0 -84
  1057. package/dist/tlon-DmK1NUVP.js +0 -433
  1058. package/dist/tui-D3bNPLG7.js +0 -3834
  1059. package/dist/tui-cli-DtMp9k_s.js +0 -132
  1060. package/dist/types.secrets-DuSPmmWB.js +0 -80
  1061. package/dist/ui-CeGztSEL.js +0 -31
  1062. package/dist/update-De7VudzP.js +0 -1036
  1063. package/dist/update-cli-BH8Pb-So.js +0 -1498
  1064. package/dist/update-offset-store-syELkdEW.js +0 -107
  1065. package/dist/update-runner-Cq-Q40T9.js +0 -1496
  1066. package/dist/web-CjMtvfSq.js +0 -107
  1067. package/dist/webhook-targets-_jTR0Bb_.js +0 -181
  1068. package/dist/webhooks-cli-DQ6u2Qau.js +0 -349
  1069. package/dist/whatsapp-CyLk16SZ.js +0 -109
  1070. package/dist/whatsapp-actions-Dzr2Wzqw.js +0 -162
  1071. package/dist/workspace-dirs-L1_QQ9mB.js +0 -2002
  1072. package/dist/zalo-CrehfXvK.js +0 -415
  1073. package/dist/zalouser-D1QD-O-I.js +0 -30911
  1074. package/dist/zod-schema.core-CWxzqcUs.js +0 -541
@@ -0,0 +1,1866 @@
1
+ import "./redact-fatrROh9.js";
2
+ import { r as formatErrorMessage } from "./errors-DOJWZqNo.js";
3
+ import "./logger-BFfIIIKH.js";
4
+ import "./paths-D6AgsMTU.js";
5
+ import { r as resolvePreferredmoldClawTmpDir } from "./tmp-moldclaw-dir-DWF-d8qD.js";
6
+ import "./theme-BSXzMzAA.js";
7
+ import "./globals-DESrFYmC.js";
8
+ import "./subsystem-S4LNMNHd.js";
9
+ import "./ansi-BPhP6LBZ.js";
10
+ import "./boolean-D8Ha5nYV.js";
11
+ import "./env-Dgex_t9p.js";
12
+ import "./utils-rjVNXUns.js";
13
+ import "./model-selection-DfA4esOK.js";
14
+ import "./agent-scope-DA7O8MVG.js";
15
+ import "./boundary-file-read-Y1cMjPlu.js";
16
+ import "./logger-wrbK9-ju.js";
17
+ import "./exec-CoBTyh8B.js";
18
+ import "./workspace-CxNKYS0V.js";
19
+ import "./io-C6XifaT4.js";
20
+ import "./host-env-security-xy11yVnm.js";
21
+ import "./safe-text-BcUvBreN.js";
22
+ import "./version-rW_3ob2o.js";
23
+ import "./env-substitution-C9xZMTDL.js";
24
+ import "./config-state-D1JkXt39.js";
25
+ import "./network-mode-CE-ihBf6.js";
26
+ import "./registry-DcDGl2X7.js";
27
+ import "./manifest-registry-_0xclaVY.js";
28
+ import "./ip-w605xvSx.js";
29
+ import "./zod-schema.core-D5reNip6.js";
30
+ import "./config-B2W1zTP1.js";
31
+ import "./audit-fs-SjcfoPO7.js";
32
+ import "./resolve-BbsCHGLY.js";
33
+ import "./config-CMhKplgO.js";
34
+ import { t as formatCliCommand } from "./command-format-DIDjlImI.js";
35
+ import "./tailnet-KyAU6tj_.js";
36
+ import "./net-B_Iq_SVP.js";
37
+ import "./credentials-yYt6VWCq.js";
38
+ import { B as resolveStrictExistingPathsWithinRoot, D as withNoProxyForCdpUrl, E as markPwAiLoaded, J as assertBrowserNavigationRedirectChainAllowed, K as BrowserTabNotFoundError, L as DEFAULT_TRACE_DIR, R as DEFAULT_UPLOAD_DIR, S as getChromeWebSocketUrl, V as matchBrowserUrlPattern, X as withBrowserNavigationPolicy, Y as assertBrowserNavigationResultAllowed, a as parseRoleRef, c as appendCdpPath, d as normalizeCdpHttpBaseForJsonEndpoints, i as getRoleSnapshotStats, l as fetchJson, n as buildRoleSnapshotFromAiSnapshot, o as formatAriaSnapshot, p as withCdpSocket, q as assertBrowserNavigationAllowed, r as buildRoleSnapshotFromAriaSnapshot, s as normalizeCdpWsUrl, u as getHeadersWithAuth } from "./routes-BZtqNrBf.js";
39
+ import "./path-alias-guards-B3ZKrId1.js";
40
+ import "./ports-BVwQuCIR.js";
41
+ import "./ports-lsof-DiY6GaAf.js";
42
+ import "./image-ops-Uw4rEShL.js";
43
+ import { d as writeFileFromPathWithinRoot } from "./fs-safe-Da4H0IOU.js";
44
+ import "./mime-_IkgFMS2.js";
45
+ import path from "node:path";
46
+ import fs from "node:fs/promises";
47
+ import crypto from "node:crypto";
48
+ import { chromium, devices } from "playwright-core";
49
+ //#region src/browser/pw-session.page-cdp.ts
50
+ async function withPlaywrightPageCdpSession(page, fn) {
51
+ const session = await page.context().newCDPSession(page);
52
+ try {
53
+ return await fn(session);
54
+ } finally {
55
+ await session.detach().catch(() => {});
56
+ }
57
+ }
58
+ async function withPageScopedCdpClient(opts) {
59
+ return await withPlaywrightPageCdpSession(opts.page, async (session) => {
60
+ return await opts.fn((method, params) => session.send(method, params));
61
+ });
62
+ }
63
+ //#endregion
64
+ //#region src/browser/pw-session.ts
65
+ const pageStates = /* @__PURE__ */ new WeakMap();
66
+ const contextStates = /* @__PURE__ */ new WeakMap();
67
+ const observedContexts = /* @__PURE__ */ new WeakSet();
68
+ const observedPages = /* @__PURE__ */ new WeakSet();
69
+ const roleRefsByTarget = /* @__PURE__ */ new Map();
70
+ const MAX_ROLE_REFS_CACHE = 50;
71
+ const MAX_CONSOLE_MESSAGES = 500;
72
+ const MAX_PAGE_ERRORS = 200;
73
+ const MAX_NETWORK_REQUESTS = 500;
74
+ const cachedByCdpUrl = /* @__PURE__ */ new Map();
75
+ const connectingByCdpUrl = /* @__PURE__ */ new Map();
76
+ function normalizeCdpUrl(raw) {
77
+ return raw.replace(/\/$/, "");
78
+ }
79
+ function findNetworkRequestById(state, id) {
80
+ for (let i = state.requests.length - 1; i >= 0; i -= 1) {
81
+ const candidate = state.requests[i];
82
+ if (candidate && candidate.id === id) return candidate;
83
+ }
84
+ }
85
+ function roleRefsKey(cdpUrl, targetId) {
86
+ return `${normalizeCdpUrl(cdpUrl)}::${targetId}`;
87
+ }
88
+ function rememberRoleRefsForTarget(opts) {
89
+ const targetId = opts.targetId.trim();
90
+ if (!targetId) return;
91
+ roleRefsByTarget.set(roleRefsKey(opts.cdpUrl, targetId), {
92
+ refs: opts.refs,
93
+ ...opts.frameSelector ? { frameSelector: opts.frameSelector } : {},
94
+ ...opts.mode ? { mode: opts.mode } : {}
95
+ });
96
+ while (roleRefsByTarget.size > MAX_ROLE_REFS_CACHE) {
97
+ const first = roleRefsByTarget.keys().next();
98
+ if (first.done) break;
99
+ roleRefsByTarget.delete(first.value);
100
+ }
101
+ }
102
+ function storeRoleRefsForTarget(opts) {
103
+ const state = ensurePageState(opts.page);
104
+ state.roleRefs = opts.refs;
105
+ state.roleRefsFrameSelector = opts.frameSelector;
106
+ state.roleRefsMode = opts.mode;
107
+ if (!opts.targetId?.trim()) return;
108
+ rememberRoleRefsForTarget({
109
+ cdpUrl: opts.cdpUrl,
110
+ targetId: opts.targetId,
111
+ refs: opts.refs,
112
+ frameSelector: opts.frameSelector,
113
+ mode: opts.mode
114
+ });
115
+ }
116
+ function restoreRoleRefsForTarget(opts) {
117
+ const targetId = opts.targetId?.trim() || "";
118
+ if (!targetId) return;
119
+ const cached = roleRefsByTarget.get(roleRefsKey(opts.cdpUrl, targetId));
120
+ if (!cached) return;
121
+ const state = ensurePageState(opts.page);
122
+ if (state.roleRefs) return;
123
+ state.roleRefs = cached.refs;
124
+ state.roleRefsFrameSelector = cached.frameSelector;
125
+ state.roleRefsMode = cached.mode;
126
+ }
127
+ function ensurePageState(page) {
128
+ const existing = pageStates.get(page);
129
+ if (existing) return existing;
130
+ const state = {
131
+ console: [],
132
+ errors: [],
133
+ requests: [],
134
+ requestIds: /* @__PURE__ */ new WeakMap(),
135
+ nextRequestId: 0,
136
+ armIdUpload: 0,
137
+ armIdDialog: 0,
138
+ armIdDownload: 0
139
+ };
140
+ pageStates.set(page, state);
141
+ if (!observedPages.has(page)) {
142
+ observedPages.add(page);
143
+ page.on("console", (msg) => {
144
+ const entry = {
145
+ type: msg.type(),
146
+ text: msg.text(),
147
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
148
+ location: msg.location()
149
+ };
150
+ state.console.push(entry);
151
+ if (state.console.length > MAX_CONSOLE_MESSAGES) state.console.shift();
152
+ });
153
+ page.on("pageerror", (err) => {
154
+ state.errors.push({
155
+ message: err?.message ? String(err.message) : String(err),
156
+ name: err?.name ? String(err.name) : void 0,
157
+ stack: err?.stack ? String(err.stack) : void 0,
158
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
159
+ });
160
+ if (state.errors.length > MAX_PAGE_ERRORS) state.errors.shift();
161
+ });
162
+ page.on("request", (req) => {
163
+ state.nextRequestId += 1;
164
+ const id = `r${state.nextRequestId}`;
165
+ state.requestIds.set(req, id);
166
+ state.requests.push({
167
+ id,
168
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
169
+ method: req.method(),
170
+ url: req.url(),
171
+ resourceType: req.resourceType()
172
+ });
173
+ if (state.requests.length > MAX_NETWORK_REQUESTS) state.requests.shift();
174
+ });
175
+ page.on("response", (resp) => {
176
+ const req = resp.request();
177
+ const id = state.requestIds.get(req);
178
+ if (!id) return;
179
+ const rec = findNetworkRequestById(state, id);
180
+ if (!rec) return;
181
+ rec.status = resp.status();
182
+ rec.ok = resp.ok();
183
+ });
184
+ page.on("requestfailed", (req) => {
185
+ const id = state.requestIds.get(req);
186
+ if (!id) return;
187
+ const rec = findNetworkRequestById(state, id);
188
+ if (!rec) return;
189
+ rec.failureText = req.failure()?.errorText;
190
+ rec.ok = false;
191
+ });
192
+ page.on("close", () => {
193
+ pageStates.delete(page);
194
+ observedPages.delete(page);
195
+ });
196
+ }
197
+ return state;
198
+ }
199
+ function observeContext(context) {
200
+ if (observedContexts.has(context)) return;
201
+ observedContexts.add(context);
202
+ ensureContextState(context);
203
+ for (const page of context.pages()) ensurePageState(page);
204
+ context.on("page", (page) => ensurePageState(page));
205
+ }
206
+ function ensureContextState(context) {
207
+ const existing = contextStates.get(context);
208
+ if (existing) return existing;
209
+ const state = { traceActive: false };
210
+ contextStates.set(context, state);
211
+ return state;
212
+ }
213
+ function observeBrowser(browser) {
214
+ for (const context of browser.contexts()) observeContext(context);
215
+ }
216
+ async function connectBrowser(cdpUrl) {
217
+ const normalized = normalizeCdpUrl(cdpUrl);
218
+ const cached = cachedByCdpUrl.get(normalized);
219
+ if (cached) return cached;
220
+ const connecting = connectingByCdpUrl.get(normalized);
221
+ if (connecting) return await connecting;
222
+ const connectWithRetry = async () => {
223
+ let lastErr;
224
+ for (let attempt = 0; attempt < 3; attempt += 1) try {
225
+ const timeout = 5e3 + attempt * 2e3;
226
+ const endpoint = await getChromeWebSocketUrl(normalized, timeout).catch(() => null) ?? normalized;
227
+ const headers = getHeadersWithAuth(endpoint);
228
+ const browser = await withNoProxyForCdpUrl(endpoint, () => chromium.connectOverCDP(endpoint, {
229
+ timeout,
230
+ headers
231
+ }));
232
+ const onDisconnected = () => {
233
+ if (cachedByCdpUrl.get(normalized)?.browser === browser) cachedByCdpUrl.delete(normalized);
234
+ };
235
+ const connected = {
236
+ browser,
237
+ cdpUrl: normalized,
238
+ onDisconnected
239
+ };
240
+ cachedByCdpUrl.set(normalized, connected);
241
+ browser.on("disconnected", onDisconnected);
242
+ observeBrowser(browser);
243
+ return connected;
244
+ } catch (err) {
245
+ lastErr = err;
246
+ if ((err instanceof Error ? err.message : String(err)).includes("rate limit")) break;
247
+ const delay = 250 + attempt * 250;
248
+ await new Promise((r) => setTimeout(r, delay));
249
+ }
250
+ if (lastErr instanceof Error) throw lastErr;
251
+ const message = lastErr ? formatErrorMessage(lastErr) : "CDP connect failed";
252
+ throw new Error(message);
253
+ };
254
+ const pending = connectWithRetry().finally(() => {
255
+ connectingByCdpUrl.delete(normalized);
256
+ });
257
+ connectingByCdpUrl.set(normalized, pending);
258
+ return await pending;
259
+ }
260
+ async function getAllPages(browser) {
261
+ return browser.contexts().flatMap((c) => c.pages());
262
+ }
263
+ async function pageTargetId(page) {
264
+ const session = await page.context().newCDPSession(page);
265
+ try {
266
+ const info = await session.send("Target.getTargetInfo");
267
+ return String(info?.targetInfo?.targetId ?? "").trim() || null;
268
+ } finally {
269
+ await session.detach().catch(() => {});
270
+ }
271
+ }
272
+ function matchPageByTargetList(pages, targets, targetId) {
273
+ const target = targets.find((entry) => entry.id === targetId);
274
+ if (!target) return null;
275
+ const urlMatch = pages.filter((page) => page.url() === target.url);
276
+ if (urlMatch.length === 1) return urlMatch[0] ?? null;
277
+ if (urlMatch.length > 1) {
278
+ const sameUrlTargets = targets.filter((entry) => entry.url === target.url);
279
+ if (sameUrlTargets.length === urlMatch.length) {
280
+ const idx = sameUrlTargets.findIndex((entry) => entry.id === targetId);
281
+ if (idx >= 0 && idx < urlMatch.length) return urlMatch[idx] ?? null;
282
+ }
283
+ }
284
+ return null;
285
+ }
286
+ async function findPageByTargetIdViaTargetList(pages, targetId, cdpUrl) {
287
+ return matchPageByTargetList(pages, await fetchJson(appendCdpPath(normalizeCdpHttpBaseForJsonEndpoints(cdpUrl), "/json/list"), 2e3), targetId);
288
+ }
289
+ async function findPageByTargetId(browser, targetId, cdpUrl) {
290
+ const pages = await getAllPages(browser);
291
+ let resolvedViaCdp = false;
292
+ for (const page of pages) {
293
+ let tid = null;
294
+ try {
295
+ tid = await pageTargetId(page);
296
+ resolvedViaCdp = true;
297
+ } catch {
298
+ tid = null;
299
+ }
300
+ if (tid && tid === targetId) return page;
301
+ }
302
+ if (cdpUrl) try {
303
+ return await findPageByTargetIdViaTargetList(pages, targetId, cdpUrl);
304
+ } catch {}
305
+ if (!resolvedViaCdp && pages.length === 1) return pages[0] ?? null;
306
+ return null;
307
+ }
308
+ async function resolvePageByTargetIdOrThrow(opts) {
309
+ const { browser } = await connectBrowser(opts.cdpUrl);
310
+ const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
311
+ if (!page) throw new BrowserTabNotFoundError();
312
+ return page;
313
+ }
314
+ async function getPageForTargetId(opts) {
315
+ const { browser } = await connectBrowser(opts.cdpUrl);
316
+ const pages = await getAllPages(browser);
317
+ if (!pages.length) throw new Error("No pages available in the connected browser.");
318
+ const first = pages[0];
319
+ if (!opts.targetId) return first;
320
+ const found = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
321
+ if (!found) {
322
+ if (pages.length === 1) return first;
323
+ throw new BrowserTabNotFoundError();
324
+ }
325
+ return found;
326
+ }
327
+ function refLocator(page, ref) {
328
+ const normalized = ref.startsWith("@") ? ref.slice(1) : ref.startsWith("ref=") ? ref.slice(4) : ref;
329
+ if (/^e\d+$/.test(normalized)) {
330
+ const state = pageStates.get(page);
331
+ if (state?.roleRefsMode === "aria") return (state.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page).locator(`aria-ref=${normalized}`);
332
+ const info = state?.roleRefs?.[normalized];
333
+ if (!info) throw new Error(`Unknown ref "${normalized}". Run a new snapshot and use a ref from that snapshot.`);
334
+ const locAny = state?.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page;
335
+ const locator = info.name ? locAny.getByRole(info.role, {
336
+ name: info.name,
337
+ exact: true
338
+ }) : locAny.getByRole(info.role);
339
+ return info.nth !== void 0 ? locator.nth(info.nth) : locator;
340
+ }
341
+ return page.locator(`aria-ref=${normalized}`);
342
+ }
343
+ async function closePlaywrightBrowserConnection(opts) {
344
+ const normalized = opts?.cdpUrl ? normalizeCdpUrl(opts.cdpUrl) : null;
345
+ if (normalized) {
346
+ const cur = cachedByCdpUrl.get(normalized);
347
+ cachedByCdpUrl.delete(normalized);
348
+ connectingByCdpUrl.delete(normalized);
349
+ if (!cur) return;
350
+ if (cur.onDisconnected && typeof cur.browser.off === "function") cur.browser.off("disconnected", cur.onDisconnected);
351
+ await cur.browser.close().catch(() => {});
352
+ return;
353
+ }
354
+ const connections = Array.from(cachedByCdpUrl.values());
355
+ cachedByCdpUrl.clear();
356
+ connectingByCdpUrl.clear();
357
+ for (const cur of connections) {
358
+ if (cur.onDisconnected && typeof cur.browser.off === "function") cur.browser.off("disconnected", cur.onDisconnected);
359
+ await cur.browser.close().catch(() => {});
360
+ }
361
+ }
362
+ function cdpSocketNeedsAttach(wsUrl) {
363
+ try {
364
+ const pathname = new URL(wsUrl).pathname;
365
+ return pathname === "/cdp" || pathname.endsWith("/cdp") || pathname.includes("/devtools/browser/");
366
+ } catch {
367
+ return false;
368
+ }
369
+ }
370
+ async function tryTerminateExecutionViaCdp(opts) {
371
+ const cdpHttpBase = normalizeCdpHttpBaseForJsonEndpoints(opts.cdpUrl);
372
+ const pages = await fetchJson(appendCdpPath(cdpHttpBase, "/json/list"), 2e3).catch(() => null);
373
+ if (!pages || pages.length === 0) return;
374
+ const target = pages.find((p) => String(p.id ?? "").trim() === opts.targetId);
375
+ const wsUrlRaw = String(target?.webSocketDebuggerUrl ?? "").trim();
376
+ if (!wsUrlRaw) return;
377
+ const wsUrl = normalizeCdpWsUrl(wsUrlRaw, cdpHttpBase);
378
+ const needsAttach = cdpSocketNeedsAttach(wsUrl);
379
+ const runWithTimeout = async (work, ms) => {
380
+ let timer;
381
+ const timeoutPromise = new Promise((_, reject) => {
382
+ timer = setTimeout(() => reject(/* @__PURE__ */ new Error("CDP command timed out")), ms);
383
+ });
384
+ try {
385
+ return await Promise.race([work, timeoutPromise]);
386
+ } finally {
387
+ if (timer) clearTimeout(timer);
388
+ }
389
+ };
390
+ await withCdpSocket(wsUrl, async (send) => {
391
+ let sessionId;
392
+ try {
393
+ if (needsAttach) {
394
+ const attached = await runWithTimeout(send("Target.attachToTarget", {
395
+ targetId: opts.targetId,
396
+ flatten: true
397
+ }), 1500);
398
+ if (typeof attached?.sessionId === "string" && attached.sessionId.trim()) sessionId = attached.sessionId;
399
+ }
400
+ await runWithTimeout(send("Runtime.terminateExecution", void 0, sessionId), 1500);
401
+ if (sessionId) send("Target.detachFromTarget", { sessionId }).catch(() => {});
402
+ } catch {}
403
+ }, { handshakeTimeoutMs: 2e3 }).catch(() => {});
404
+ }
405
+ /**
406
+ * Best-effort cancellation for stuck page operations.
407
+ *
408
+ * Playwright serializes CDP commands per page; a long-running or stuck operation (notably evaluate)
409
+ * can block all subsequent commands. We cannot safely "cancel" an individual command, and we do
410
+ * not want to close the actual Chromium tab. Instead, we disconnect Playwright's CDP connection
411
+ * so in-flight commands fail fast and the next request reconnects transparently.
412
+ *
413
+ * IMPORTANT: We CANNOT call Connection.close() because Playwright shares a single Connection
414
+ * across all objects (BrowserType, Browser, etc.). Closing it corrupts the entire Playwright
415
+ * instance, preventing reconnection.
416
+ *
417
+ * Instead we:
418
+ * 1. Null out `cached` so the next call triggers a fresh connectOverCDP
419
+ * 2. Fire-and-forget browser.close() — it may hang but won't block us
420
+ * 3. The next connectBrowser() creates a completely new CDP WebSocket connection
421
+ *
422
+ * The old browser.close() eventually resolves when the in-browser evaluate timeout fires,
423
+ * or the old connection gets GC'd. Either way, it doesn't affect the fresh connection.
424
+ */
425
+ async function forceDisconnectPlaywrightForTarget(opts) {
426
+ const normalized = normalizeCdpUrl(opts.cdpUrl);
427
+ const cur = cachedByCdpUrl.get(normalized);
428
+ if (!cur) return;
429
+ cachedByCdpUrl.delete(normalized);
430
+ connectingByCdpUrl.delete(normalized);
431
+ if (cur.onDisconnected && typeof cur.browser.off === "function") cur.browser.off("disconnected", cur.onDisconnected);
432
+ const targetId = opts.targetId?.trim() || "";
433
+ if (targetId) await tryTerminateExecutionViaCdp({
434
+ cdpUrl: normalized,
435
+ targetId
436
+ }).catch(() => {});
437
+ cur.browser.close().catch(() => {});
438
+ }
439
+ /**
440
+ * List all pages/tabs from the persistent Playwright connection.
441
+ * Used for remote profiles where HTTP-based /json/list is ephemeral.
442
+ */
443
+ async function listPagesViaPlaywright(opts) {
444
+ const { browser } = await connectBrowser(opts.cdpUrl);
445
+ const pages = await getAllPages(browser);
446
+ const results = [];
447
+ for (const page of pages) {
448
+ const tid = await pageTargetId(page).catch(() => null);
449
+ if (tid) results.push({
450
+ targetId: tid,
451
+ title: await page.title().catch(() => ""),
452
+ url: page.url(),
453
+ type: "page"
454
+ });
455
+ }
456
+ return results;
457
+ }
458
+ /**
459
+ * Create a new page/tab using the persistent Playwright connection.
460
+ * Used for remote profiles where HTTP-based /json/new is ephemeral.
461
+ * Returns the new page's targetId and metadata.
462
+ */
463
+ async function createPageViaPlaywright(opts) {
464
+ const { browser } = await connectBrowser(opts.cdpUrl);
465
+ const context = browser.contexts()[0] ?? await browser.newContext();
466
+ ensureContextState(context);
467
+ const page = await context.newPage();
468
+ ensurePageState(page);
469
+ const targetUrl = opts.url.trim() || "about:blank";
470
+ if (targetUrl !== "about:blank") {
471
+ const navigationPolicy = withBrowserNavigationPolicy(opts.ssrfPolicy);
472
+ await assertBrowserNavigationAllowed({
473
+ url: targetUrl,
474
+ ...navigationPolicy
475
+ });
476
+ await assertBrowserNavigationRedirectChainAllowed({
477
+ request: (await page.goto(targetUrl, { timeout: 3e4 }).catch(() => {
478
+ return null;
479
+ }))?.request(),
480
+ ...navigationPolicy
481
+ });
482
+ await assertBrowserNavigationResultAllowed({
483
+ url: page.url(),
484
+ ...navigationPolicy
485
+ });
486
+ }
487
+ const tid = await pageTargetId(page).catch(() => null);
488
+ if (!tid) throw new Error("Failed to get targetId for new page");
489
+ return {
490
+ targetId: tid,
491
+ title: await page.title().catch(() => ""),
492
+ url: page.url(),
493
+ type: "page"
494
+ };
495
+ }
496
+ /**
497
+ * Close a page/tab by targetId using the persistent Playwright connection.
498
+ * Used for remote profiles where HTTP-based /json/close is ephemeral.
499
+ */
500
+ async function closePageByTargetIdViaPlaywright(opts) {
501
+ await (await resolvePageByTargetIdOrThrow(opts)).close();
502
+ }
503
+ /**
504
+ * Focus a page/tab by targetId using the persistent Playwright connection.
505
+ * Used for remote profiles where HTTP-based /json/activate can be ephemeral.
506
+ */
507
+ async function focusPageByTargetIdViaPlaywright(opts) {
508
+ const page = await resolvePageByTargetIdOrThrow(opts);
509
+ try {
510
+ await page.bringToFront();
511
+ } catch (err) {
512
+ try {
513
+ await withPageScopedCdpClient({
514
+ cdpUrl: opts.cdpUrl,
515
+ page,
516
+ targetId: opts.targetId,
517
+ fn: async (send) => {
518
+ await send("Page.bringToFront");
519
+ }
520
+ });
521
+ return;
522
+ } catch {
523
+ throw err;
524
+ }
525
+ }
526
+ }
527
+ //#endregion
528
+ //#region src/browser/pw-tools-core.activity.ts
529
+ async function getPageErrorsViaPlaywright(opts) {
530
+ const state = ensurePageState(await getPageForTargetId(opts));
531
+ const errors = [...state.errors];
532
+ if (opts.clear) state.errors = [];
533
+ return { errors };
534
+ }
535
+ async function getNetworkRequestsViaPlaywright(opts) {
536
+ const state = ensurePageState(await getPageForTargetId(opts));
537
+ const raw = [...state.requests];
538
+ const filter = typeof opts.filter === "string" ? opts.filter.trim() : "";
539
+ const requests = filter ? raw.filter((r) => r.url.includes(filter)) : raw;
540
+ if (opts.clear) {
541
+ state.requests = [];
542
+ state.requestIds = /* @__PURE__ */ new WeakMap();
543
+ }
544
+ return { requests };
545
+ }
546
+ function consolePriority(level) {
547
+ switch (level) {
548
+ case "error": return 3;
549
+ case "warning": return 2;
550
+ case "info":
551
+ case "log": return 1;
552
+ case "debug": return 0;
553
+ default: return 1;
554
+ }
555
+ }
556
+ async function getConsoleMessagesViaPlaywright(opts) {
557
+ const state = ensurePageState(await getPageForTargetId(opts));
558
+ if (!opts.level) return [...state.console];
559
+ const min = consolePriority(opts.level);
560
+ return state.console.filter((msg) => consolePriority(msg.type) >= min);
561
+ }
562
+ //#endregion
563
+ //#region src/browser/safe-filename.ts
564
+ function sanitizeUntrustedFileName(fileName, fallbackName) {
565
+ const trimmed = String(fileName ?? "").trim();
566
+ if (!trimmed) return fallbackName;
567
+ let base = path.posix.basename(trimmed);
568
+ base = path.win32.basename(base);
569
+ let cleaned = "";
570
+ for (let i = 0; i < base.length; i++) {
571
+ const code = base.charCodeAt(i);
572
+ if (code < 32 || code === 127) continue;
573
+ cleaned += base[i];
574
+ }
575
+ base = cleaned.trim();
576
+ if (!base || base === "." || base === "..") return fallbackName;
577
+ if (base.length > 200) base = base.slice(0, 200);
578
+ return base;
579
+ }
580
+ //#endregion
581
+ //#region src/browser/output-atomic.ts
582
+ function buildSiblingTempPath(targetPath) {
583
+ const id = crypto.randomUUID();
584
+ const safeTail = sanitizeUntrustedFileName(path.basename(targetPath), "output.bin");
585
+ return path.join(path.dirname(targetPath), `.moldclaw-output-${id}-${safeTail}.part`);
586
+ }
587
+ async function writeViaSiblingTempPath(params) {
588
+ const rootDir = await fs.realpath(path.resolve(params.rootDir)).catch(() => path.resolve(params.rootDir));
589
+ const requestedTargetPath = path.resolve(params.targetPath);
590
+ const targetPath = await fs.realpath(path.dirname(requestedTargetPath)).then((realDir) => path.join(realDir, path.basename(requestedTargetPath))).catch(() => requestedTargetPath);
591
+ const relativeTargetPath = path.relative(rootDir, targetPath);
592
+ if (!relativeTargetPath || relativeTargetPath === ".." || relativeTargetPath.startsWith(`..${path.sep}`) || path.isAbsolute(relativeTargetPath)) throw new Error("Target path is outside the allowed root");
593
+ const tempPath = buildSiblingTempPath(targetPath);
594
+ let renameSucceeded = false;
595
+ try {
596
+ await params.writeTemp(tempPath);
597
+ await writeFileFromPathWithinRoot({
598
+ rootDir,
599
+ relativePath: relativeTargetPath,
600
+ sourcePath: tempPath,
601
+ mkdir: false
602
+ });
603
+ renameSucceeded = true;
604
+ } finally {
605
+ if (!renameSucceeded) await fs.rm(tempPath, { force: true }).catch(() => {});
606
+ }
607
+ }
608
+ //#endregion
609
+ //#region src/browser/pw-tools-core.shared.ts
610
+ let nextUploadArmId = 0;
611
+ let nextDialogArmId = 0;
612
+ let nextDownloadArmId = 0;
613
+ function bumpUploadArmId() {
614
+ nextUploadArmId += 1;
615
+ return nextUploadArmId;
616
+ }
617
+ function bumpDialogArmId() {
618
+ nextDialogArmId += 1;
619
+ return nextDialogArmId;
620
+ }
621
+ function bumpDownloadArmId() {
622
+ nextDownloadArmId += 1;
623
+ return nextDownloadArmId;
624
+ }
625
+ function requireRef(value) {
626
+ const raw = typeof value === "string" ? value.trim() : "";
627
+ const ref = (raw ? parseRoleRef(raw) : null) ?? (raw.startsWith("@") ? raw.slice(1) : raw);
628
+ if (!ref) throw new Error("ref is required");
629
+ return ref;
630
+ }
631
+ function requireRefOrSelector(ref, selector) {
632
+ const trimmedRef = typeof ref === "string" ? ref.trim() : "";
633
+ const trimmedSelector = typeof selector === "string" ? selector.trim() : "";
634
+ if (!trimmedRef && !trimmedSelector) throw new Error("ref or selector is required");
635
+ return {
636
+ ref: trimmedRef || void 0,
637
+ selector: trimmedSelector || void 0
638
+ };
639
+ }
640
+ function normalizeTimeoutMs(timeoutMs, fallback) {
641
+ return Math.max(500, Math.min(12e4, timeoutMs ?? fallback));
642
+ }
643
+ function toAIFriendlyError(error, selector) {
644
+ const message = error instanceof Error ? error.message : String(error);
645
+ if (message.includes("strict mode violation")) {
646
+ const countMatch = message.match(/resolved to (\d+) elements/);
647
+ const count = countMatch ? countMatch[1] : "multiple";
648
+ return /* @__PURE__ */ new Error(`Selector "${selector}" matched ${count} elements. Run a new snapshot to get updated refs, or use a different ref.`);
649
+ }
650
+ 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.`);
651
+ 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.`);
652
+ return error instanceof Error ? error : new Error(message);
653
+ }
654
+ //#endregion
655
+ //#region src/browser/pw-tools-core.downloads.ts
656
+ function buildTempDownloadPath(fileName) {
657
+ const id = crypto.randomUUID();
658
+ const safeName = sanitizeUntrustedFileName(fileName, "download.bin");
659
+ return path.join(resolvePreferredmoldClawTmpDir(), "downloads", `${id}-${safeName}`);
660
+ }
661
+ function createPageDownloadWaiter(page, timeoutMs) {
662
+ let done = false;
663
+ let timer;
664
+ let handler;
665
+ const cleanup = () => {
666
+ if (timer) clearTimeout(timer);
667
+ timer = void 0;
668
+ if (handler) {
669
+ page.off("download", handler);
670
+ handler = void 0;
671
+ }
672
+ };
673
+ return {
674
+ promise: new Promise((resolve, reject) => {
675
+ handler = (download) => {
676
+ if (done) return;
677
+ done = true;
678
+ cleanup();
679
+ resolve(download);
680
+ };
681
+ page.on("download", handler);
682
+ timer = setTimeout(() => {
683
+ if (done) return;
684
+ done = true;
685
+ cleanup();
686
+ reject(/* @__PURE__ */ new Error("Timeout waiting for download"));
687
+ }, timeoutMs);
688
+ }),
689
+ cancel: () => {
690
+ if (done) return;
691
+ done = true;
692
+ cleanup();
693
+ }
694
+ };
695
+ }
696
+ async function saveDownloadPayload(download, outPath) {
697
+ const suggested = download.suggestedFilename?.() || "download.bin";
698
+ const requestedPath = outPath?.trim();
699
+ const resolvedOutPath = path.resolve(requestedPath || buildTempDownloadPath(suggested));
700
+ await fs.mkdir(path.dirname(resolvedOutPath), { recursive: true });
701
+ if (!requestedPath) await download.saveAs?.(resolvedOutPath);
702
+ else await writeViaSiblingTempPath({
703
+ rootDir: path.dirname(resolvedOutPath),
704
+ targetPath: resolvedOutPath,
705
+ writeTemp: async (tempPath) => {
706
+ await download.saveAs?.(tempPath);
707
+ }
708
+ });
709
+ return {
710
+ url: download.url?.() || "",
711
+ suggestedFilename: suggested,
712
+ path: resolvedOutPath
713
+ };
714
+ }
715
+ async function awaitDownloadPayload(params) {
716
+ try {
717
+ const download = await params.waiter.promise;
718
+ if (params.state.armIdDownload !== params.armId) throw new Error("Download was superseded by another waiter");
719
+ return await saveDownloadPayload(download, params.outPath ?? "");
720
+ } catch (err) {
721
+ params.waiter.cancel();
722
+ throw err;
723
+ }
724
+ }
725
+ async function armFileUploadViaPlaywright(opts) {
726
+ const page = await getPageForTargetId(opts);
727
+ const state = ensurePageState(page);
728
+ const timeout = Math.max(500, Math.min(12e4, opts.timeoutMs ?? 12e4));
729
+ state.armIdUpload = bumpUploadArmId();
730
+ const armId = state.armIdUpload;
731
+ page.waitForEvent("filechooser", { timeout }).then(async (fileChooser) => {
732
+ if (state.armIdUpload !== armId) return;
733
+ if (!opts.paths?.length) {
734
+ try {
735
+ await page.keyboard.press("Escape");
736
+ } catch {}
737
+ return;
738
+ }
739
+ const uploadPathsResult = await resolveStrictExistingPathsWithinRoot({
740
+ rootDir: DEFAULT_UPLOAD_DIR,
741
+ requestedPaths: opts.paths,
742
+ scopeLabel: `uploads directory (${DEFAULT_UPLOAD_DIR})`
743
+ });
744
+ if (!uploadPathsResult.ok) {
745
+ try {
746
+ await page.keyboard.press("Escape");
747
+ } catch {}
748
+ return;
749
+ }
750
+ await fileChooser.setFiles(uploadPathsResult.paths);
751
+ try {
752
+ const input = typeof fileChooser.element === "function" ? await Promise.resolve(fileChooser.element()) : null;
753
+ if (input) await input.evaluate((el) => {
754
+ el.dispatchEvent(new Event("input", { bubbles: true }));
755
+ el.dispatchEvent(new Event("change", { bubbles: true }));
756
+ });
757
+ } catch {}
758
+ }).catch(() => {});
759
+ }
760
+ async function armDialogViaPlaywright(opts) {
761
+ const page = await getPageForTargetId(opts);
762
+ const state = ensurePageState(page);
763
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
764
+ state.armIdDialog = bumpDialogArmId();
765
+ const armId = state.armIdDialog;
766
+ page.waitForEvent("dialog", { timeout }).then(async (dialog) => {
767
+ if (state.armIdDialog !== armId) return;
768
+ if (opts.accept) await dialog.accept(opts.promptText);
769
+ else await dialog.dismiss();
770
+ }).catch(() => {});
771
+ }
772
+ async function waitForDownloadViaPlaywright(opts) {
773
+ const page = await getPageForTargetId(opts);
774
+ const state = ensurePageState(page);
775
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
776
+ state.armIdDownload = bumpDownloadArmId();
777
+ const armId = state.armIdDownload;
778
+ return await awaitDownloadPayload({
779
+ waiter: createPageDownloadWaiter(page, timeout),
780
+ state,
781
+ armId,
782
+ outPath: opts.path
783
+ });
784
+ }
785
+ async function downloadViaPlaywright(opts) {
786
+ const page = await getPageForTargetId(opts);
787
+ const state = ensurePageState(page);
788
+ restoreRoleRefsForTarget({
789
+ cdpUrl: opts.cdpUrl,
790
+ targetId: opts.targetId,
791
+ page
792
+ });
793
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
794
+ const ref = requireRef(opts.ref);
795
+ const outPath = String(opts.path ?? "").trim();
796
+ if (!outPath) throw new Error("path is required");
797
+ state.armIdDownload = bumpDownloadArmId();
798
+ const armId = state.armIdDownload;
799
+ const waiter = createPageDownloadWaiter(page, timeout);
800
+ try {
801
+ const locator = refLocator(page, ref);
802
+ try {
803
+ await locator.click({ timeout });
804
+ } catch (err) {
805
+ throw toAIFriendlyError(err, ref);
806
+ }
807
+ return await awaitDownloadPayload({
808
+ waiter,
809
+ state,
810
+ armId,
811
+ outPath
812
+ });
813
+ } catch (err) {
814
+ waiter.cancel();
815
+ throw err;
816
+ }
817
+ }
818
+ //#endregion
819
+ //#region src/browser/pw-tools-core.snapshot.ts
820
+ async function snapshotAriaViaPlaywright(opts) {
821
+ const limit = Math.max(1, Math.min(2e3, Math.floor(opts.limit ?? 500)));
822
+ const page = await getPageForTargetId({
823
+ cdpUrl: opts.cdpUrl,
824
+ targetId: opts.targetId
825
+ });
826
+ ensurePageState(page);
827
+ const res = await withPageScopedCdpClient({
828
+ cdpUrl: opts.cdpUrl,
829
+ page,
830
+ targetId: opts.targetId,
831
+ fn: async (send) => {
832
+ await send("Accessibility.enable").catch(() => {});
833
+ return await send("Accessibility.getFullAXTree");
834
+ }
835
+ });
836
+ return { nodes: formatAriaSnapshot(Array.isArray(res?.nodes) ? res.nodes : [], limit) };
837
+ }
838
+ async function snapshotAiViaPlaywright(opts) {
839
+ const page = await getPageForTargetId({
840
+ cdpUrl: opts.cdpUrl,
841
+ targetId: opts.targetId
842
+ });
843
+ ensurePageState(page);
844
+ const maybe = page;
845
+ if (!maybe._snapshotForAI) throw new Error("Playwright _snapshotForAI is not available. Upgrade playwright-core.");
846
+ const result = await maybe._snapshotForAI({
847
+ timeout: Math.max(500, Math.min(6e4, Math.floor(opts.timeoutMs ?? 5e3))),
848
+ track: "response"
849
+ });
850
+ let snapshot = String(result?.full ?? "");
851
+ const maxChars = opts.maxChars;
852
+ const limit = typeof maxChars === "number" && Number.isFinite(maxChars) && maxChars > 0 ? Math.floor(maxChars) : void 0;
853
+ let truncated = false;
854
+ if (limit && snapshot.length > limit) {
855
+ snapshot = `${snapshot.slice(0, limit)}\n\n[...TRUNCATED - page too large]`;
856
+ truncated = true;
857
+ }
858
+ const built = buildRoleSnapshotFromAiSnapshot(snapshot);
859
+ storeRoleRefsForTarget({
860
+ page,
861
+ cdpUrl: opts.cdpUrl,
862
+ targetId: opts.targetId,
863
+ refs: built.refs,
864
+ mode: "aria"
865
+ });
866
+ return truncated ? {
867
+ snapshot,
868
+ truncated,
869
+ refs: built.refs
870
+ } : {
871
+ snapshot,
872
+ refs: built.refs
873
+ };
874
+ }
875
+ async function snapshotRoleViaPlaywright(opts) {
876
+ const page = await getPageForTargetId({
877
+ cdpUrl: opts.cdpUrl,
878
+ targetId: opts.targetId
879
+ });
880
+ ensurePageState(page);
881
+ if (opts.refsMode === "aria") {
882
+ if (opts.selector?.trim() || opts.frameSelector?.trim()) throw new Error("refs=aria does not support selector/frame snapshots yet.");
883
+ const maybe = page;
884
+ if (!maybe._snapshotForAI) throw new Error("refs=aria requires Playwright _snapshotForAI support.");
885
+ const result = await maybe._snapshotForAI({
886
+ timeout: 5e3,
887
+ track: "response"
888
+ });
889
+ const built = buildRoleSnapshotFromAiSnapshot(String(result?.full ?? ""), opts.options);
890
+ storeRoleRefsForTarget({
891
+ page,
892
+ cdpUrl: opts.cdpUrl,
893
+ targetId: opts.targetId,
894
+ refs: built.refs,
895
+ mode: "aria"
896
+ });
897
+ return {
898
+ snapshot: built.snapshot,
899
+ refs: built.refs,
900
+ stats: getRoleSnapshotStats(built.snapshot, built.refs)
901
+ };
902
+ }
903
+ const frameSelector = opts.frameSelector?.trim() || "";
904
+ const selector = opts.selector?.trim() || "";
905
+ const ariaSnapshot = await (frameSelector ? selector ? page.frameLocator(frameSelector).locator(selector) : page.frameLocator(frameSelector).locator(":root") : selector ? page.locator(selector) : page.locator(":root")).ariaSnapshot();
906
+ const built = buildRoleSnapshotFromAriaSnapshot(String(ariaSnapshot ?? ""), opts.options);
907
+ storeRoleRefsForTarget({
908
+ page,
909
+ cdpUrl: opts.cdpUrl,
910
+ targetId: opts.targetId,
911
+ refs: built.refs,
912
+ frameSelector: frameSelector || void 0,
913
+ mode: "role"
914
+ });
915
+ return {
916
+ snapshot: built.snapshot,
917
+ refs: built.refs,
918
+ stats: getRoleSnapshotStats(built.snapshot, built.refs)
919
+ };
920
+ }
921
+ async function navigateViaPlaywright(opts) {
922
+ const isRetryableNavigateError = (err) => {
923
+ const msg = typeof err === "string" ? err.toLowerCase() : err instanceof Error ? err.message.toLowerCase() : "";
924
+ return msg.includes("frame has been detached") || msg.includes("target page, context or browser has been closed");
925
+ };
926
+ const url = String(opts.url ?? "").trim();
927
+ if (!url) throw new Error("url is required");
928
+ await assertBrowserNavigationAllowed({
929
+ url,
930
+ ...withBrowserNavigationPolicy(opts.ssrfPolicy)
931
+ });
932
+ const timeout = Math.max(1e3, Math.min(12e4, opts.timeoutMs ?? 2e4));
933
+ let page = await getPageForTargetId(opts);
934
+ ensurePageState(page);
935
+ const navigate = async () => await page.goto(url, { timeout });
936
+ let response;
937
+ try {
938
+ response = await navigate();
939
+ } catch (err) {
940
+ if (!isRetryableNavigateError(err)) throw err;
941
+ await forceDisconnectPlaywrightForTarget({
942
+ cdpUrl: opts.cdpUrl,
943
+ targetId: opts.targetId,
944
+ reason: "retry navigate after detached frame"
945
+ }).catch(() => {});
946
+ page = await getPageForTargetId(opts);
947
+ ensurePageState(page);
948
+ response = await navigate();
949
+ }
950
+ await assertBrowserNavigationRedirectChainAllowed({
951
+ request: response?.request(),
952
+ ...withBrowserNavigationPolicy(opts.ssrfPolicy)
953
+ });
954
+ const finalUrl = page.url();
955
+ await assertBrowserNavigationResultAllowed({
956
+ url: finalUrl,
957
+ ...withBrowserNavigationPolicy(opts.ssrfPolicy)
958
+ });
959
+ return { url: finalUrl };
960
+ }
961
+ async function resizeViewportViaPlaywright(opts) {
962
+ const page = await getPageForTargetId(opts);
963
+ ensurePageState(page);
964
+ await page.setViewportSize({
965
+ width: Math.max(1, Math.floor(opts.width)),
966
+ height: Math.max(1, Math.floor(opts.height))
967
+ });
968
+ }
969
+ async function closePageViaPlaywright(opts) {
970
+ const page = await getPageForTargetId(opts);
971
+ ensurePageState(page);
972
+ await page.close();
973
+ }
974
+ async function pdfViaPlaywright(opts) {
975
+ const page = await getPageForTargetId(opts);
976
+ ensurePageState(page);
977
+ return { buffer: await page.pdf({ printBackground: true }) };
978
+ }
979
+ //#endregion
980
+ //#region src/browser/pw-tools-core.interactions.ts
981
+ const MAX_CLICK_DELAY_MS = 5e3;
982
+ const MAX_WAIT_TIME_MS = 3e4;
983
+ const MAX_BATCH_ACTIONS = 100;
984
+ function resolveBoundedDelayMs(value, label, maxMs) {
985
+ const normalized = Math.floor(value ?? 0);
986
+ if (!Number.isFinite(normalized) || normalized < 0) throw new Error(`${label} must be >= 0`);
987
+ if (normalized > maxMs) throw new Error(`${label} exceeds maximum of ${maxMs}ms`);
988
+ return normalized;
989
+ }
990
+ async function getRestoredPageForTarget(opts) {
991
+ const page = await getPageForTargetId(opts);
992
+ ensurePageState(page);
993
+ restoreRoleRefsForTarget({
994
+ cdpUrl: opts.cdpUrl,
995
+ targetId: opts.targetId,
996
+ page
997
+ });
998
+ return page;
999
+ }
1000
+ function resolveInteractionTimeoutMs(timeoutMs) {
1001
+ return Math.max(500, Math.min(6e4, Math.floor(timeoutMs ?? 8e3)));
1002
+ }
1003
+ async function awaitEvalWithAbort(evalPromise, abortPromise) {
1004
+ if (!abortPromise) return await evalPromise;
1005
+ try {
1006
+ return await Promise.race([evalPromise, abortPromise]);
1007
+ } catch (err) {
1008
+ evalPromise.catch(() => {});
1009
+ throw err;
1010
+ }
1011
+ }
1012
+ async function highlightViaPlaywright(opts) {
1013
+ const page = await getRestoredPageForTarget(opts);
1014
+ const ref = requireRef(opts.ref);
1015
+ try {
1016
+ await refLocator(page, ref).highlight();
1017
+ } catch (err) {
1018
+ throw toAIFriendlyError(err, ref);
1019
+ }
1020
+ }
1021
+ async function clickViaPlaywright(opts) {
1022
+ const resolved = requireRefOrSelector(opts.ref, opts.selector);
1023
+ const page = await getRestoredPageForTarget(opts);
1024
+ const label = resolved.ref ?? resolved.selector;
1025
+ const locator = resolved.ref ? refLocator(page, requireRef(resolved.ref)) : page.locator(resolved.selector);
1026
+ const timeout = resolveInteractionTimeoutMs(opts.timeoutMs);
1027
+ try {
1028
+ const delayMs = resolveBoundedDelayMs(opts.delayMs, "click delayMs", MAX_CLICK_DELAY_MS);
1029
+ if (delayMs > 0) {
1030
+ await locator.hover({ timeout });
1031
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
1032
+ }
1033
+ if (opts.doubleClick) await locator.dblclick({
1034
+ timeout,
1035
+ button: opts.button,
1036
+ modifiers: opts.modifiers
1037
+ });
1038
+ else await locator.click({
1039
+ timeout,
1040
+ button: opts.button,
1041
+ modifiers: opts.modifiers
1042
+ });
1043
+ } catch (err) {
1044
+ throw toAIFriendlyError(err, label);
1045
+ }
1046
+ }
1047
+ async function hoverViaPlaywright(opts) {
1048
+ const resolved = requireRefOrSelector(opts.ref, opts.selector);
1049
+ const page = await getRestoredPageForTarget(opts);
1050
+ const label = resolved.ref ?? resolved.selector;
1051
+ const locator = resolved.ref ? refLocator(page, requireRef(resolved.ref)) : page.locator(resolved.selector);
1052
+ try {
1053
+ await locator.hover({ timeout: resolveInteractionTimeoutMs(opts.timeoutMs) });
1054
+ } catch (err) {
1055
+ throw toAIFriendlyError(err, label);
1056
+ }
1057
+ }
1058
+ async function dragViaPlaywright(opts) {
1059
+ const resolvedStart = requireRefOrSelector(opts.startRef, opts.startSelector);
1060
+ const resolvedEnd = requireRefOrSelector(opts.endRef, opts.endSelector);
1061
+ const page = await getRestoredPageForTarget(opts);
1062
+ const startLocator = resolvedStart.ref ? refLocator(page, requireRef(resolvedStart.ref)) : page.locator(resolvedStart.selector);
1063
+ const endLocator = resolvedEnd.ref ? refLocator(page, requireRef(resolvedEnd.ref)) : page.locator(resolvedEnd.selector);
1064
+ const startLabel = resolvedStart.ref ?? resolvedStart.selector;
1065
+ const endLabel = resolvedEnd.ref ?? resolvedEnd.selector;
1066
+ try {
1067
+ await startLocator.dragTo(endLocator, { timeout: resolveInteractionTimeoutMs(opts.timeoutMs) });
1068
+ } catch (err) {
1069
+ throw toAIFriendlyError(err, `${startLabel} -> ${endLabel}`);
1070
+ }
1071
+ }
1072
+ async function selectOptionViaPlaywright(opts) {
1073
+ const resolved = requireRefOrSelector(opts.ref, opts.selector);
1074
+ if (!opts.values?.length) throw new Error("values are required");
1075
+ const page = await getRestoredPageForTarget(opts);
1076
+ const label = resolved.ref ?? resolved.selector;
1077
+ const locator = resolved.ref ? refLocator(page, requireRef(resolved.ref)) : page.locator(resolved.selector);
1078
+ try {
1079
+ await locator.selectOption(opts.values, { timeout: resolveInteractionTimeoutMs(opts.timeoutMs) });
1080
+ } catch (err) {
1081
+ throw toAIFriendlyError(err, label);
1082
+ }
1083
+ }
1084
+ async function pressKeyViaPlaywright(opts) {
1085
+ const key = String(opts.key ?? "").trim();
1086
+ if (!key) throw new Error("key is required");
1087
+ const page = await getPageForTargetId(opts);
1088
+ ensurePageState(page);
1089
+ await page.keyboard.press(key, { delay: Math.max(0, Math.floor(opts.delayMs ?? 0)) });
1090
+ }
1091
+ async function typeViaPlaywright(opts) {
1092
+ const resolved = requireRefOrSelector(opts.ref, opts.selector);
1093
+ const text = String(opts.text ?? "");
1094
+ const page = await getRestoredPageForTarget(opts);
1095
+ const label = resolved.ref ?? resolved.selector;
1096
+ const locator = resolved.ref ? refLocator(page, requireRef(resolved.ref)) : page.locator(resolved.selector);
1097
+ const timeout = resolveInteractionTimeoutMs(opts.timeoutMs);
1098
+ try {
1099
+ if (opts.slowly) {
1100
+ await locator.click({ timeout });
1101
+ await locator.type(text, {
1102
+ timeout,
1103
+ delay: 75
1104
+ });
1105
+ } else await locator.fill(text, { timeout });
1106
+ if (opts.submit) await locator.press("Enter", { timeout });
1107
+ } catch (err) {
1108
+ throw toAIFriendlyError(err, label);
1109
+ }
1110
+ }
1111
+ async function fillFormViaPlaywright(opts) {
1112
+ const page = await getRestoredPageForTarget(opts);
1113
+ const timeout = resolveInteractionTimeoutMs(opts.timeoutMs);
1114
+ for (const field of opts.fields) {
1115
+ const ref = field.ref.trim();
1116
+ const type = (field.type || "text").trim() || "text";
1117
+ const rawValue = field.value;
1118
+ const value = typeof rawValue === "string" ? rawValue : typeof rawValue === "number" || typeof rawValue === "boolean" ? String(rawValue) : "";
1119
+ if (!ref) continue;
1120
+ const locator = refLocator(page, ref);
1121
+ if (type === "checkbox" || type === "radio") {
1122
+ const checked = rawValue === true || rawValue === 1 || rawValue === "1" || rawValue === "true";
1123
+ try {
1124
+ await locator.setChecked(checked, { timeout });
1125
+ } catch (err) {
1126
+ throw toAIFriendlyError(err, ref);
1127
+ }
1128
+ continue;
1129
+ }
1130
+ try {
1131
+ await locator.fill(value, { timeout });
1132
+ } catch (err) {
1133
+ throw toAIFriendlyError(err, ref);
1134
+ }
1135
+ }
1136
+ }
1137
+ async function evaluateViaPlaywright(opts) {
1138
+ const fnText = String(opts.fn ?? "").trim();
1139
+ if (!fnText) throw new Error("function is required");
1140
+ const page = await getRestoredPageForTarget(opts);
1141
+ const outerTimeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1142
+ let evaluateTimeout = Math.max(1e3, Math.min(12e4, outerTimeout - 500));
1143
+ evaluateTimeout = Math.min(evaluateTimeout, outerTimeout);
1144
+ const signal = opts.signal;
1145
+ let abortListener;
1146
+ let abortReject;
1147
+ let abortPromise;
1148
+ if (signal) {
1149
+ abortPromise = new Promise((_, reject) => {
1150
+ abortReject = reject;
1151
+ });
1152
+ abortPromise.catch(() => {});
1153
+ }
1154
+ if (signal) {
1155
+ const disconnect = () => {
1156
+ forceDisconnectPlaywrightForTarget({
1157
+ cdpUrl: opts.cdpUrl,
1158
+ targetId: opts.targetId,
1159
+ reason: "evaluate aborted"
1160
+ }).catch(() => {});
1161
+ };
1162
+ if (signal.aborted) {
1163
+ disconnect();
1164
+ throw signal.reason ?? /* @__PURE__ */ new Error("aborted");
1165
+ }
1166
+ abortListener = () => {
1167
+ disconnect();
1168
+ abortReject?.(signal.reason ?? /* @__PURE__ */ new Error("aborted"));
1169
+ };
1170
+ signal.addEventListener("abort", abortListener, { once: true });
1171
+ if (signal.aborted) {
1172
+ abortListener();
1173
+ throw signal.reason ?? /* @__PURE__ */ new Error("aborted");
1174
+ }
1175
+ }
1176
+ try {
1177
+ if (opts.ref) {
1178
+ const locator = refLocator(page, opts.ref);
1179
+ const elementEvaluator = new Function("el", "args", `
1180
+ "use strict";
1181
+ var fnBody = args.fnBody, timeoutMs = args.timeoutMs;
1182
+ try {
1183
+ var candidate = eval("(" + fnBody + ")");
1184
+ var result = typeof candidate === "function" ? candidate(el) : candidate;
1185
+ if (result && typeof result.then === "function") {
1186
+ return Promise.race([
1187
+ result,
1188
+ new Promise(function(_, reject) {
1189
+ setTimeout(function() { reject(new Error("evaluate timed out after " + timeoutMs + "ms")); }, timeoutMs);
1190
+ })
1191
+ ]);
1192
+ }
1193
+ return result;
1194
+ } catch (err) {
1195
+ throw new Error("Invalid evaluate function: " + (err && err.message ? err.message : String(err)));
1196
+ }
1197
+ `);
1198
+ return await awaitEvalWithAbort(locator.evaluate(elementEvaluator, {
1199
+ fnBody: fnText,
1200
+ timeoutMs: evaluateTimeout
1201
+ }), abortPromise);
1202
+ }
1203
+ const browserEvaluator = new Function("args", `
1204
+ "use strict";
1205
+ var fnBody = args.fnBody, timeoutMs = args.timeoutMs;
1206
+ try {
1207
+ var candidate = eval("(" + fnBody + ")");
1208
+ var result = typeof candidate === "function" ? candidate() : candidate;
1209
+ if (result && typeof result.then === "function") {
1210
+ return Promise.race([
1211
+ result,
1212
+ new Promise(function(_, reject) {
1213
+ setTimeout(function() { reject(new Error("evaluate timed out after " + timeoutMs + "ms")); }, timeoutMs);
1214
+ })
1215
+ ]);
1216
+ }
1217
+ return result;
1218
+ } catch (err) {
1219
+ throw new Error("Invalid evaluate function: " + (err && err.message ? err.message : String(err)));
1220
+ }
1221
+ `);
1222
+ return await awaitEvalWithAbort(page.evaluate(browserEvaluator, {
1223
+ fnBody: fnText,
1224
+ timeoutMs: evaluateTimeout
1225
+ }), abortPromise);
1226
+ } finally {
1227
+ if (signal && abortListener) signal.removeEventListener("abort", abortListener);
1228
+ }
1229
+ }
1230
+ async function scrollIntoViewViaPlaywright(opts) {
1231
+ const resolved = requireRefOrSelector(opts.ref, opts.selector);
1232
+ const page = await getRestoredPageForTarget(opts);
1233
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1234
+ const label = resolved.ref ?? resolved.selector;
1235
+ const locator = resolved.ref ? refLocator(page, requireRef(resolved.ref)) : page.locator(resolved.selector);
1236
+ try {
1237
+ await locator.scrollIntoViewIfNeeded({ timeout });
1238
+ } catch (err) {
1239
+ throw toAIFriendlyError(err, label);
1240
+ }
1241
+ }
1242
+ async function waitForViaPlaywright(opts) {
1243
+ const page = await getPageForTargetId(opts);
1244
+ ensurePageState(page);
1245
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1246
+ if (typeof opts.timeMs === "number" && Number.isFinite(opts.timeMs)) await page.waitForTimeout(resolveBoundedDelayMs(opts.timeMs, "wait timeMs", MAX_WAIT_TIME_MS));
1247
+ if (opts.text) await page.getByText(opts.text).first().waitFor({
1248
+ state: "visible",
1249
+ timeout
1250
+ });
1251
+ if (opts.textGone) await page.getByText(opts.textGone).first().waitFor({
1252
+ state: "hidden",
1253
+ timeout
1254
+ });
1255
+ if (opts.selector) {
1256
+ const selector = String(opts.selector).trim();
1257
+ if (selector) await page.locator(selector).first().waitFor({
1258
+ state: "visible",
1259
+ timeout
1260
+ });
1261
+ }
1262
+ if (opts.url) {
1263
+ const url = String(opts.url).trim();
1264
+ if (url) await page.waitForURL(url, { timeout });
1265
+ }
1266
+ if (opts.loadState) await page.waitForLoadState(opts.loadState, { timeout });
1267
+ if (opts.fn) {
1268
+ const fn = String(opts.fn).trim();
1269
+ if (fn) await page.waitForFunction(fn, { timeout });
1270
+ }
1271
+ }
1272
+ async function takeScreenshotViaPlaywright(opts) {
1273
+ const page = await getPageForTargetId(opts);
1274
+ ensurePageState(page);
1275
+ restoreRoleRefsForTarget({
1276
+ cdpUrl: opts.cdpUrl,
1277
+ targetId: opts.targetId,
1278
+ page
1279
+ });
1280
+ const type = opts.type ?? "png";
1281
+ if (opts.ref) {
1282
+ if (opts.fullPage) throw new Error("fullPage is not supported for element screenshots");
1283
+ return { buffer: await refLocator(page, opts.ref).screenshot({ type }) };
1284
+ }
1285
+ if (opts.element) {
1286
+ if (opts.fullPage) throw new Error("fullPage is not supported for element screenshots");
1287
+ return { buffer: await page.locator(opts.element).first().screenshot({ type }) };
1288
+ }
1289
+ return { buffer: await page.screenshot({
1290
+ type,
1291
+ fullPage: Boolean(opts.fullPage)
1292
+ }) };
1293
+ }
1294
+ async function screenshotWithLabelsViaPlaywright(opts) {
1295
+ const page = await getPageForTargetId(opts);
1296
+ ensurePageState(page);
1297
+ restoreRoleRefsForTarget({
1298
+ cdpUrl: opts.cdpUrl,
1299
+ targetId: opts.targetId,
1300
+ page
1301
+ });
1302
+ const type = opts.type ?? "png";
1303
+ const maxLabels = typeof opts.maxLabels === "number" && Number.isFinite(opts.maxLabels) ? Math.max(1, Math.floor(opts.maxLabels)) : 150;
1304
+ const viewport = await page.evaluate(() => ({
1305
+ scrollX: window.scrollX || 0,
1306
+ scrollY: window.scrollY || 0,
1307
+ width: window.innerWidth || 0,
1308
+ height: window.innerHeight || 0
1309
+ }));
1310
+ const refs = Object.keys(opts.refs ?? {});
1311
+ const boxes = [];
1312
+ let skipped = 0;
1313
+ for (const ref of refs) {
1314
+ if (boxes.length >= maxLabels) {
1315
+ skipped += 1;
1316
+ continue;
1317
+ }
1318
+ try {
1319
+ const box = await refLocator(page, ref).boundingBox();
1320
+ if (!box) {
1321
+ skipped += 1;
1322
+ continue;
1323
+ }
1324
+ const x0 = box.x;
1325
+ const y0 = box.y;
1326
+ const x1 = box.x + box.width;
1327
+ const y1 = box.y + box.height;
1328
+ const vx0 = viewport.scrollX;
1329
+ const vy0 = viewport.scrollY;
1330
+ const vx1 = viewport.scrollX + viewport.width;
1331
+ const vy1 = viewport.scrollY + viewport.height;
1332
+ if (x1 < vx0 || x0 > vx1 || y1 < vy0 || y0 > vy1) {
1333
+ skipped += 1;
1334
+ continue;
1335
+ }
1336
+ boxes.push({
1337
+ ref,
1338
+ x: x0 - viewport.scrollX,
1339
+ y: y0 - viewport.scrollY,
1340
+ w: Math.max(1, box.width),
1341
+ h: Math.max(1, box.height)
1342
+ });
1343
+ } catch {
1344
+ skipped += 1;
1345
+ }
1346
+ }
1347
+ try {
1348
+ if (boxes.length > 0) await page.evaluate((labels) => {
1349
+ document.querySelectorAll("[data-moldclaw-labels]").forEach((el) => el.remove());
1350
+ const root = document.createElement("div");
1351
+ root.setAttribute("data-moldclaw-labels", "1");
1352
+ root.style.position = "fixed";
1353
+ root.style.left = "0";
1354
+ root.style.top = "0";
1355
+ root.style.zIndex = "2147483647";
1356
+ root.style.pointerEvents = "none";
1357
+ root.style.fontFamily = "\"SF Mono\",\"SFMono-Regular\",Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace";
1358
+ const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
1359
+ for (const label of labels) {
1360
+ const box = document.createElement("div");
1361
+ box.setAttribute("data-moldclaw-labels", "1");
1362
+ box.style.position = "absolute";
1363
+ box.style.left = `${label.x}px`;
1364
+ box.style.top = `${label.y}px`;
1365
+ box.style.width = `${label.w}px`;
1366
+ box.style.height = `${label.h}px`;
1367
+ box.style.border = "2px solid #ffb020";
1368
+ box.style.boxSizing = "border-box";
1369
+ const tag = document.createElement("div");
1370
+ tag.setAttribute("data-moldclaw-labels", "1");
1371
+ tag.textContent = label.ref;
1372
+ tag.style.position = "absolute";
1373
+ tag.style.left = `${label.x}px`;
1374
+ tag.style.top = `${clamp(label.y - 18, 0, 2e4)}px`;
1375
+ tag.style.background = "#ffb020";
1376
+ tag.style.color = "#1a1a1a";
1377
+ tag.style.fontSize = "12px";
1378
+ tag.style.lineHeight = "14px";
1379
+ tag.style.padding = "1px 4px";
1380
+ tag.style.borderRadius = "3px";
1381
+ tag.style.boxShadow = "0 1px 2px rgba(0,0,0,0.35)";
1382
+ tag.style.whiteSpace = "nowrap";
1383
+ root.appendChild(box);
1384
+ root.appendChild(tag);
1385
+ }
1386
+ document.documentElement.appendChild(root);
1387
+ }, boxes);
1388
+ return {
1389
+ buffer: await page.screenshot({ type }),
1390
+ labels: boxes.length,
1391
+ skipped
1392
+ };
1393
+ } finally {
1394
+ await page.evaluate(() => {
1395
+ document.querySelectorAll("[data-moldclaw-labels]").forEach((el) => el.remove());
1396
+ }).catch(() => {});
1397
+ }
1398
+ }
1399
+ async function setInputFilesViaPlaywright(opts) {
1400
+ const page = await getPageForTargetId(opts);
1401
+ ensurePageState(page);
1402
+ restoreRoleRefsForTarget({
1403
+ cdpUrl: opts.cdpUrl,
1404
+ targetId: opts.targetId,
1405
+ page
1406
+ });
1407
+ if (!opts.paths.length) throw new Error("paths are required");
1408
+ const inputRef = typeof opts.inputRef === "string" ? opts.inputRef.trim() : "";
1409
+ const element = typeof opts.element === "string" ? opts.element.trim() : "";
1410
+ if (inputRef && element) throw new Error("inputRef and element are mutually exclusive");
1411
+ if (!inputRef && !element) throw new Error("inputRef or element is required");
1412
+ const locator = inputRef ? refLocator(page, inputRef) : page.locator(element).first();
1413
+ const uploadPathsResult = await resolveStrictExistingPathsWithinRoot({
1414
+ rootDir: DEFAULT_UPLOAD_DIR,
1415
+ requestedPaths: opts.paths,
1416
+ scopeLabel: `uploads directory (${DEFAULT_UPLOAD_DIR})`
1417
+ });
1418
+ if (!uploadPathsResult.ok) throw new Error(uploadPathsResult.error);
1419
+ const resolvedPaths = uploadPathsResult.paths;
1420
+ try {
1421
+ await locator.setInputFiles(resolvedPaths);
1422
+ } catch (err) {
1423
+ throw toAIFriendlyError(err, inputRef || element);
1424
+ }
1425
+ try {
1426
+ const handle = await locator.elementHandle();
1427
+ if (handle) await handle.evaluate((el) => {
1428
+ el.dispatchEvent(new Event("input", { bubbles: true }));
1429
+ el.dispatchEvent(new Event("change", { bubbles: true }));
1430
+ });
1431
+ } catch {}
1432
+ }
1433
+ const MAX_BATCH_DEPTH = 5;
1434
+ async function executeSingleAction(action, cdpUrl, targetId, evaluateEnabled, depth = 0) {
1435
+ if (depth > MAX_BATCH_DEPTH) throw new Error(`Batch nesting depth exceeds maximum of ${MAX_BATCH_DEPTH}`);
1436
+ const effectiveTargetId = action.targetId ?? targetId;
1437
+ switch (action.kind) {
1438
+ case "click":
1439
+ await clickViaPlaywright({
1440
+ cdpUrl,
1441
+ targetId: effectiveTargetId,
1442
+ ref: action.ref,
1443
+ selector: action.selector,
1444
+ doubleClick: action.doubleClick,
1445
+ button: action.button,
1446
+ modifiers: action.modifiers,
1447
+ delayMs: action.delayMs,
1448
+ timeoutMs: action.timeoutMs
1449
+ });
1450
+ break;
1451
+ case "type":
1452
+ await typeViaPlaywright({
1453
+ cdpUrl,
1454
+ targetId: effectiveTargetId,
1455
+ ref: action.ref,
1456
+ selector: action.selector,
1457
+ text: action.text,
1458
+ submit: action.submit,
1459
+ slowly: action.slowly,
1460
+ timeoutMs: action.timeoutMs
1461
+ });
1462
+ break;
1463
+ case "press":
1464
+ await pressKeyViaPlaywright({
1465
+ cdpUrl,
1466
+ targetId: effectiveTargetId,
1467
+ key: action.key,
1468
+ delayMs: action.delayMs
1469
+ });
1470
+ break;
1471
+ case "hover":
1472
+ await hoverViaPlaywright({
1473
+ cdpUrl,
1474
+ targetId: effectiveTargetId,
1475
+ ref: action.ref,
1476
+ selector: action.selector,
1477
+ timeoutMs: action.timeoutMs
1478
+ });
1479
+ break;
1480
+ case "scrollIntoView":
1481
+ await scrollIntoViewViaPlaywright({
1482
+ cdpUrl,
1483
+ targetId: effectiveTargetId,
1484
+ ref: action.ref,
1485
+ selector: action.selector,
1486
+ timeoutMs: action.timeoutMs
1487
+ });
1488
+ break;
1489
+ case "drag":
1490
+ await dragViaPlaywright({
1491
+ cdpUrl,
1492
+ targetId: effectiveTargetId,
1493
+ startRef: action.startRef,
1494
+ startSelector: action.startSelector,
1495
+ endRef: action.endRef,
1496
+ endSelector: action.endSelector,
1497
+ timeoutMs: action.timeoutMs
1498
+ });
1499
+ break;
1500
+ case "select":
1501
+ await selectOptionViaPlaywright({
1502
+ cdpUrl,
1503
+ targetId: effectiveTargetId,
1504
+ ref: action.ref,
1505
+ selector: action.selector,
1506
+ values: action.values,
1507
+ timeoutMs: action.timeoutMs
1508
+ });
1509
+ break;
1510
+ case "fill":
1511
+ await fillFormViaPlaywright({
1512
+ cdpUrl,
1513
+ targetId: effectiveTargetId,
1514
+ fields: action.fields,
1515
+ timeoutMs: action.timeoutMs
1516
+ });
1517
+ break;
1518
+ case "resize":
1519
+ await resizeViewportViaPlaywright({
1520
+ cdpUrl,
1521
+ targetId: effectiveTargetId,
1522
+ width: action.width,
1523
+ height: action.height
1524
+ });
1525
+ break;
1526
+ case "wait":
1527
+ if (action.fn && !evaluateEnabled) throw new Error("wait --fn is disabled by config (browser.evaluateEnabled=false)");
1528
+ await waitForViaPlaywright({
1529
+ cdpUrl,
1530
+ targetId: effectiveTargetId,
1531
+ timeMs: action.timeMs,
1532
+ text: action.text,
1533
+ textGone: action.textGone,
1534
+ selector: action.selector,
1535
+ url: action.url,
1536
+ loadState: action.loadState,
1537
+ fn: action.fn,
1538
+ timeoutMs: action.timeoutMs
1539
+ });
1540
+ break;
1541
+ case "evaluate":
1542
+ if (!evaluateEnabled) throw new Error("act:evaluate is disabled by config (browser.evaluateEnabled=false)");
1543
+ await evaluateViaPlaywright({
1544
+ cdpUrl,
1545
+ targetId: effectiveTargetId,
1546
+ fn: action.fn,
1547
+ ref: action.ref,
1548
+ timeoutMs: action.timeoutMs
1549
+ });
1550
+ break;
1551
+ case "close":
1552
+ await closePageViaPlaywright({
1553
+ cdpUrl,
1554
+ targetId: effectiveTargetId
1555
+ });
1556
+ break;
1557
+ case "batch":
1558
+ await batchViaPlaywright({
1559
+ cdpUrl,
1560
+ targetId: effectiveTargetId,
1561
+ actions: action.actions,
1562
+ stopOnError: action.stopOnError,
1563
+ evaluateEnabled,
1564
+ depth: depth + 1
1565
+ });
1566
+ break;
1567
+ default: throw new Error(`Unsupported batch action kind: ${action.kind}`);
1568
+ }
1569
+ }
1570
+ async function batchViaPlaywright(opts) {
1571
+ const depth = opts.depth ?? 0;
1572
+ if (depth > MAX_BATCH_DEPTH) throw new Error(`Batch nesting depth exceeds maximum of ${MAX_BATCH_DEPTH}`);
1573
+ if (opts.actions.length > MAX_BATCH_ACTIONS) throw new Error(`Batch exceeds maximum of ${MAX_BATCH_ACTIONS} actions`);
1574
+ const results = [];
1575
+ for (const action of opts.actions) try {
1576
+ await executeSingleAction(action, opts.cdpUrl, opts.targetId, opts.evaluateEnabled, depth);
1577
+ results.push({ ok: true });
1578
+ } catch (err) {
1579
+ const message = err instanceof Error ? err.message : String(err);
1580
+ results.push({
1581
+ ok: false,
1582
+ error: message
1583
+ });
1584
+ if (opts.stopOnError !== false) break;
1585
+ }
1586
+ return { results };
1587
+ }
1588
+ //#endregion
1589
+ //#region src/browser/pw-tools-core.responses.ts
1590
+ async function responseBodyViaPlaywright(opts) {
1591
+ const pattern = String(opts.url ?? "").trim();
1592
+ if (!pattern) throw new Error("url is required");
1593
+ const maxChars = typeof opts.maxChars === "number" && Number.isFinite(opts.maxChars) ? Math.max(1, Math.min(5e6, Math.floor(opts.maxChars))) : 2e5;
1594
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1595
+ const page = await getPageForTargetId(opts);
1596
+ ensurePageState(page);
1597
+ const resp = await new Promise((resolve, reject) => {
1598
+ let done = false;
1599
+ let timer;
1600
+ let handler;
1601
+ const cleanup = () => {
1602
+ if (timer) clearTimeout(timer);
1603
+ timer = void 0;
1604
+ if (handler) page.off("response", handler);
1605
+ };
1606
+ handler = (resp) => {
1607
+ if (done) return;
1608
+ if (!matchBrowserUrlPattern(pattern, resp.url?.() || "")) return;
1609
+ done = true;
1610
+ cleanup();
1611
+ resolve(resp);
1612
+ };
1613
+ page.on("response", handler);
1614
+ timer = setTimeout(() => {
1615
+ if (done) return;
1616
+ done = true;
1617
+ cleanup();
1618
+ reject(/* @__PURE__ */ new Error(`Response not found for url pattern "${pattern}". Run '${formatCliCommand("moldclaw browser requests")}' to inspect recent network activity.`));
1619
+ }, timeout);
1620
+ });
1621
+ const url = resp.url?.() || "";
1622
+ const status = resp.status?.();
1623
+ const headers = resp.headers?.();
1624
+ let bodyText = "";
1625
+ try {
1626
+ if (typeof resp.text === "function") bodyText = await resp.text();
1627
+ else if (typeof resp.body === "function") {
1628
+ const buf = await resp.body();
1629
+ bodyText = new TextDecoder("utf-8").decode(buf);
1630
+ }
1631
+ } catch (err) {
1632
+ throw new Error(`Failed to read response body for "${url}": ${String(err)}`, { cause: err });
1633
+ }
1634
+ return {
1635
+ url,
1636
+ status,
1637
+ headers,
1638
+ body: bodyText.length > maxChars ? bodyText.slice(0, maxChars) : bodyText,
1639
+ truncated: bodyText.length > maxChars ? true : void 0
1640
+ };
1641
+ }
1642
+ //#endregion
1643
+ //#region src/browser/pw-tools-core.state.ts
1644
+ async function setOfflineViaPlaywright(opts) {
1645
+ const page = await getPageForTargetId(opts);
1646
+ ensurePageState(page);
1647
+ await page.context().setOffline(Boolean(opts.offline));
1648
+ }
1649
+ async function setExtraHTTPHeadersViaPlaywright(opts) {
1650
+ const page = await getPageForTargetId(opts);
1651
+ ensurePageState(page);
1652
+ await page.context().setExtraHTTPHeaders(opts.headers);
1653
+ }
1654
+ async function setHttpCredentialsViaPlaywright(opts) {
1655
+ const page = await getPageForTargetId(opts);
1656
+ ensurePageState(page);
1657
+ if (opts.clear) {
1658
+ await page.context().setHTTPCredentials(null);
1659
+ return;
1660
+ }
1661
+ const username = String(opts.username ?? "");
1662
+ const password = String(opts.password ?? "");
1663
+ if (!username) throw new Error("username is required (or set clear=true)");
1664
+ await page.context().setHTTPCredentials({
1665
+ username,
1666
+ password
1667
+ });
1668
+ }
1669
+ async function setGeolocationViaPlaywright(opts) {
1670
+ const page = await getPageForTargetId(opts);
1671
+ ensurePageState(page);
1672
+ const context = page.context();
1673
+ if (opts.clear) {
1674
+ await context.setGeolocation(null);
1675
+ await context.clearPermissions().catch(() => {});
1676
+ return;
1677
+ }
1678
+ if (typeof opts.latitude !== "number" || typeof opts.longitude !== "number") throw new Error("latitude and longitude are required (or set clear=true)");
1679
+ await context.setGeolocation({
1680
+ latitude: opts.latitude,
1681
+ longitude: opts.longitude,
1682
+ accuracy: typeof opts.accuracy === "number" ? opts.accuracy : void 0
1683
+ });
1684
+ const origin = opts.origin?.trim() || (() => {
1685
+ try {
1686
+ return new URL(page.url()).origin;
1687
+ } catch {
1688
+ return "";
1689
+ }
1690
+ })();
1691
+ if (origin) await context.grantPermissions(["geolocation"], { origin }).catch(() => {});
1692
+ }
1693
+ async function emulateMediaViaPlaywright(opts) {
1694
+ const page = await getPageForTargetId(opts);
1695
+ ensurePageState(page);
1696
+ await page.emulateMedia({ colorScheme: opts.colorScheme });
1697
+ }
1698
+ async function setLocaleViaPlaywright(opts) {
1699
+ const page = await getPageForTargetId(opts);
1700
+ ensurePageState(page);
1701
+ const locale = String(opts.locale ?? "").trim();
1702
+ if (!locale) throw new Error("locale is required");
1703
+ await withPageScopedCdpClient({
1704
+ cdpUrl: opts.cdpUrl,
1705
+ page,
1706
+ targetId: opts.targetId,
1707
+ fn: async (send) => {
1708
+ try {
1709
+ await send("Emulation.setLocaleOverride", { locale });
1710
+ } catch (err) {
1711
+ if (String(err).includes("Another locale override is already in effect")) return;
1712
+ throw err;
1713
+ }
1714
+ }
1715
+ });
1716
+ }
1717
+ async function setTimezoneViaPlaywright(opts) {
1718
+ const page = await getPageForTargetId(opts);
1719
+ ensurePageState(page);
1720
+ const timezoneId = String(opts.timezoneId ?? "").trim();
1721
+ if (!timezoneId) throw new Error("timezoneId is required");
1722
+ await withPageScopedCdpClient({
1723
+ cdpUrl: opts.cdpUrl,
1724
+ page,
1725
+ targetId: opts.targetId,
1726
+ fn: async (send) => {
1727
+ try {
1728
+ await send("Emulation.setTimezoneOverride", { timezoneId });
1729
+ } catch (err) {
1730
+ const msg = String(err);
1731
+ if (msg.includes("Timezone override is already in effect")) return;
1732
+ if (msg.includes("Invalid timezone")) throw new Error(`Invalid timezone ID: ${timezoneId}`, { cause: err });
1733
+ throw err;
1734
+ }
1735
+ }
1736
+ });
1737
+ }
1738
+ async function setDeviceViaPlaywright(opts) {
1739
+ const page = await getPageForTargetId(opts);
1740
+ ensurePageState(page);
1741
+ const name = String(opts.name ?? "").trim();
1742
+ if (!name) throw new Error("device name is required");
1743
+ const descriptor = devices[name];
1744
+ if (!descriptor) throw new Error(`Unknown device "${name}".`);
1745
+ if (descriptor.viewport) await page.setViewportSize({
1746
+ width: descriptor.viewport.width,
1747
+ height: descriptor.viewport.height
1748
+ });
1749
+ await withPageScopedCdpClient({
1750
+ cdpUrl: opts.cdpUrl,
1751
+ page,
1752
+ targetId: opts.targetId,
1753
+ fn: async (send) => {
1754
+ if (descriptor.userAgent || descriptor.locale) await send("Emulation.setUserAgentOverride", {
1755
+ userAgent: descriptor.userAgent ?? "",
1756
+ acceptLanguage: descriptor.locale ?? void 0
1757
+ });
1758
+ if (descriptor.viewport) await send("Emulation.setDeviceMetricsOverride", {
1759
+ mobile: Boolean(descriptor.isMobile),
1760
+ width: descriptor.viewport.width,
1761
+ height: descriptor.viewport.height,
1762
+ deviceScaleFactor: descriptor.deviceScaleFactor ?? 1,
1763
+ screenWidth: descriptor.viewport.width,
1764
+ screenHeight: descriptor.viewport.height
1765
+ });
1766
+ if (descriptor.hasTouch) await send("Emulation.setTouchEmulationEnabled", { enabled: true });
1767
+ }
1768
+ });
1769
+ }
1770
+ //#endregion
1771
+ //#region src/browser/pw-tools-core.storage.ts
1772
+ async function cookiesGetViaPlaywright(opts) {
1773
+ const page = await getPageForTargetId(opts);
1774
+ ensurePageState(page);
1775
+ return { cookies: await page.context().cookies() };
1776
+ }
1777
+ async function cookiesSetViaPlaywright(opts) {
1778
+ const page = await getPageForTargetId(opts);
1779
+ ensurePageState(page);
1780
+ const cookie = opts.cookie;
1781
+ if (!cookie.name || cookie.value === void 0) throw new Error("cookie name and value are required");
1782
+ const hasUrl = typeof cookie.url === "string" && cookie.url.trim();
1783
+ const hasDomainPath = typeof cookie.domain === "string" && cookie.domain.trim() && typeof cookie.path === "string" && cookie.path.trim();
1784
+ if (!hasUrl && !hasDomainPath) throw new Error("cookie requires url, or domain+path");
1785
+ await page.context().addCookies([cookie]);
1786
+ }
1787
+ async function cookiesClearViaPlaywright(opts) {
1788
+ const page = await getPageForTargetId(opts);
1789
+ ensurePageState(page);
1790
+ await page.context().clearCookies();
1791
+ }
1792
+ async function storageGetViaPlaywright(opts) {
1793
+ const page = await getPageForTargetId(opts);
1794
+ ensurePageState(page);
1795
+ const kind = opts.kind;
1796
+ const key = typeof opts.key === "string" ? opts.key : void 0;
1797
+ return { values: await page.evaluate(({ kind: kind2, key: key2 }) => {
1798
+ const store = kind2 === "session" ? window.sessionStorage : window.localStorage;
1799
+ if (key2) {
1800
+ const value = store.getItem(key2);
1801
+ return value === null ? {} : { [key2]: value };
1802
+ }
1803
+ const out = {};
1804
+ for (let i = 0; i < store.length; i += 1) {
1805
+ const k = store.key(i);
1806
+ if (!k) continue;
1807
+ const v = store.getItem(k);
1808
+ if (v !== null) out[k] = v;
1809
+ }
1810
+ return out;
1811
+ }, {
1812
+ kind,
1813
+ key
1814
+ }) ?? {} };
1815
+ }
1816
+ async function storageSetViaPlaywright(opts) {
1817
+ const page = await getPageForTargetId(opts);
1818
+ ensurePageState(page);
1819
+ const key = String(opts.key ?? "");
1820
+ if (!key) throw new Error("key is required");
1821
+ await page.evaluate(({ kind, key: k, value }) => {
1822
+ (kind === "session" ? window.sessionStorage : window.localStorage).setItem(k, value);
1823
+ }, {
1824
+ kind: opts.kind,
1825
+ key,
1826
+ value: String(opts.value ?? "")
1827
+ });
1828
+ }
1829
+ async function storageClearViaPlaywright(opts) {
1830
+ const page = await getPageForTargetId(opts);
1831
+ ensurePageState(page);
1832
+ await page.evaluate(({ kind }) => {
1833
+ (kind === "session" ? window.sessionStorage : window.localStorage).clear();
1834
+ }, { kind: opts.kind });
1835
+ }
1836
+ //#endregion
1837
+ //#region src/browser/pw-tools-core.trace.ts
1838
+ async function traceStartViaPlaywright(opts) {
1839
+ const context = (await getPageForTargetId(opts)).context();
1840
+ const ctxState = ensureContextState(context);
1841
+ if (ctxState.traceActive) throw new Error("Trace already running. Stop the current trace before starting a new one.");
1842
+ await context.tracing.start({
1843
+ screenshots: opts.screenshots ?? true,
1844
+ snapshots: opts.snapshots ?? true,
1845
+ sources: opts.sources ?? false
1846
+ });
1847
+ ctxState.traceActive = true;
1848
+ }
1849
+ async function traceStopViaPlaywright(opts) {
1850
+ const context = (await getPageForTargetId(opts)).context();
1851
+ const ctxState = ensureContextState(context);
1852
+ if (!ctxState.traceActive) throw new Error("No active trace. Start a trace before stopping it.");
1853
+ await writeViaSiblingTempPath({
1854
+ rootDir: DEFAULT_TRACE_DIR,
1855
+ targetPath: opts.path,
1856
+ writeTemp: async (tempPath) => {
1857
+ await context.tracing.stop({ path: tempPath });
1858
+ }
1859
+ });
1860
+ ctxState.traceActive = false;
1861
+ }
1862
+ //#endregion
1863
+ //#region src/browser/pw-ai.ts
1864
+ markPwAiLoaded();
1865
+ //#endregion
1866
+ export { armDialogViaPlaywright, armFileUploadViaPlaywright, batchViaPlaywright, clickViaPlaywright, closePageByTargetIdViaPlaywright, closePageViaPlaywright, closePlaywrightBrowserConnection, cookiesClearViaPlaywright, cookiesGetViaPlaywright, cookiesSetViaPlaywright, createPageViaPlaywright, downloadViaPlaywright, dragViaPlaywright, emulateMediaViaPlaywright, ensurePageState, evaluateViaPlaywright, fillFormViaPlaywright, focusPageByTargetIdViaPlaywright, forceDisconnectPlaywrightForTarget, 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 };