@spacebar_ai/moldclaw-core 2026.3.41 → 2026.3.44

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 (1144) hide show
  1. package/dist/accounts-5qY-dKca.d.ts +103 -0
  2. package/dist/accounts-SqdHz2ZP.js +114 -0
  3. package/dist/acp-cli-E6bcNqiE.js +2093 -0
  4. package/dist/actions.runtime-BU_XMuLk.js +119 -0
  5. package/dist/actions.runtime-CY5h8lqH.js +133 -0
  6. package/dist/agent-scope-lZlwP1At.js +208 -0
  7. package/dist/agents-C4SkadR1.js +853 -0
  8. package/dist/agents-RfwqGCzE.js +222 -0
  9. package/dist/agents.config-CX9CPNfP.js +17 -0
  10. package/dist/agents.config-DF9Zwn9n.js +121 -0
  11. package/dist/allow-list-3WSjz1zl.js +81 -0
  12. package/dist/allowlist-DNbDjFjw.js +142 -0
  13. package/dist/api-BEOpJ7dR.js +117 -0
  14. package/dist/audit-CpJz_eu6.js +787 -0
  15. package/dist/audit-CpfSjvyo.js +54 -0
  16. package/dist/audit-channel.collect.runtime-BeGotloZ.js +605 -0
  17. package/dist/audit-channel.runtime-BJDZ7ETt.js +121 -0
  18. package/dist/audit-extra.async-C2G0mqmk.js +813 -0
  19. package/dist/audit-membership-runtime-B1FqJsPV.js +162 -0
  20. package/dist/audit.deep.runtime-DyL9O_sU.js +25 -0
  21. package/dist/audit.nondeep.runtime-C6jFgJfH.js +832 -0
  22. package/dist/audit.runtime-Dnlsn23e.js +118 -0
  23. package/dist/auth-Ch3Rchm4.js +101 -0
  24. package/dist/auth-choice-CEFSlnLT.js +122 -0
  25. package/dist/auth-choice-CVCef-eU.js +268 -0
  26. package/dist/auth-choice-Cez-pXrg.js +507 -0
  27. package/dist/auth-choice-options-DO78mvPe.js +123 -0
  28. package/dist/auth-choice-prompt-CUkC7Mmb.js +36 -0
  29. package/dist/auth-choice-prompt-DCuQRiVl.js +115 -0
  30. package/dist/auth-choice.apply-helpers-BhbNIV8X.js +66 -0
  31. package/dist/auth-choice.plugin-providers.runtime-4BhqvEw_.js +119 -0
  32. package/dist/auth-profiles-smABVXzp.js +128040 -0
  33. package/dist/auth-profiles.runtime-Cr-ojtTc.js +116 -0
  34. package/dist/banner-CojBHPWr.js +342 -0
  35. package/dist/bluebubbles-BnLsj2Fy.d.ts +6 -0
  36. package/dist/bluebubbles-CVk7M3Bl.js +64 -0
  37. package/dist/bot-DdyrB2z9.d.ts +478 -0
  38. package/dist/brave-w4Fo8WZ3.js +24 -0
  39. package/dist/browser-cli-DWFs3P_i.js +1494 -0
  40. package/dist/build-info.json +3 -3
  41. package/dist/bundled/boot-md/handler.d.ts +1 -1
  42. package/dist/bundled/boot-md/handler.js +35 -35
  43. package/dist/bundled/bootstrap-extra-files/handler.d.ts +1 -1
  44. package/dist/bundled/bootstrap-extra-files/handler.js +1 -1
  45. package/dist/bundled/command-logger/handler.d.ts +1 -1
  46. package/dist/bundled/session-memory/handler.d.ts +1 -1
  47. package/dist/bundled/session-memory/handler.js +36 -36
  48. package/dist/call-Do7wTSr7.js +39 -0
  49. package/dist/call-gdDAt07d.js +640 -0
  50. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  51. package/dist/channel-B26pkce0.js +214 -0
  52. package/dist/channel-BJHp0AQC.js +352 -0
  53. package/dist/channel-BKFOv51P.js +4681 -0
  54. package/dist/channel-BNgpOY8v.js +538 -0
  55. package/dist/channel-BcQAAo2P.js +226 -0
  56. package/dist/channel-BvNdnhbx.js +1598 -0
  57. package/dist/channel-C1Rda3Jd.js +306 -0
  58. package/dist/channel-C87DG-F7.js +803 -0
  59. package/dist/channel-CIip0kvZ.js +619 -0
  60. package/dist/channel-CTPxoT_E2.js +316 -0
  61. package/dist/channel-CklaCzUG.js +562 -0
  62. package/dist/channel-CoJnAdLs.js +920 -0
  63. package/dist/channel-D3tafL1_.js +949 -0
  64. package/dist/channel-DFMrP2uu.js +542 -0
  65. package/dist/channel-DMd5cJQe.js +397 -0
  66. package/dist/channel-Dm34kxAJ.js +207 -0
  67. package/dist/channel-DmwF9udn.js +1321 -0
  68. package/dist/channel-account-context-Bjur9nlh.js +103 -0
  69. package/dist/channel-bGnST659.js +943 -0
  70. package/dist/channel-hIgbkTZf.js +575 -0
  71. package/dist/channel-m_TGrDKo.js +497 -0
  72. package/dist/channel-options-DoUPBMa8.js +50 -0
  73. package/dist/channel-plugin-ids-TZIY4hFs.js +26 -0
  74. package/dist/channel-summary-qD54bOBO.js +111 -0
  75. package/dist/channel.runtime-B0H04Dkk.js +199 -0
  76. package/dist/channel.runtime-BU1f3NkV.js +418 -0
  77. package/dist/channel.runtime-Bj1sfLep.js +4011 -0
  78. package/dist/channel.runtime-BtPAAJc3.js +870 -0
  79. package/dist/channel.runtime-Bx-10m_j.js +171 -0
  80. package/dist/channel.runtime-CI_TBywQ.js +179 -0
  81. package/dist/channel.runtime-CSLj14-Z.js +182 -0
  82. package/dist/channel.runtime-D-lTSYAd.js +404 -0
  83. package/dist/channel.runtime-DJqIOSji.js +127 -0
  84. package/dist/channel.runtime-Ec8aQ9V2.js +241 -0
  85. package/dist/channel.runtime-ax5a1jBm.js +218 -0
  86. package/dist/channel.setup-B-ncdYLT.js +9 -0
  87. package/dist/channel.setup-BY4bh5dm.js +9 -0
  88. package/dist/channel.setup-BovsdMnL.js +57 -0
  89. package/dist/channel.setup-CXzXA25h.js +6 -0
  90. package/dist/channel.setup-DcZUEufN.js +8 -0
  91. package/dist/channel.setup-E6zceRsE.js +8 -0
  92. package/dist/channel.setup-Pc7nGbdX.js +11 -0
  93. package/dist/channels/plugins/actions/discord.d.ts +2 -2
  94. package/dist/channels/plugins/actions/discord.js +35 -35
  95. package/dist/channels/plugins/actions/signal.d.ts +1 -1
  96. package/dist/channels/plugins/actions/signal.js +35 -35
  97. package/dist/channels/plugins/actions/telegram.d.ts +2 -2
  98. package/dist/channels/plugins/actions/telegram.js +35 -35
  99. package/dist/channels/plugins/agent-tools/whatsapp-login.d.ts +3 -3
  100. package/dist/channels/plugins/agent-tools/whatsapp-login.js +35 -35
  101. package/dist/channels-CPtE5ND6.js +404 -0
  102. package/dist/channels-Cj8ZolHI.js +1118 -0
  103. package/dist/channels-cli-D2sKrntt.js +291 -0
  104. package/dist/channels-status-issues-CzIHODg2.js +16 -0
  105. package/dist/clawbot-cli-BcwEDmUn.js +118 -0
  106. package/dist/cleanup-utils-D0L17RsX.js +96 -0
  107. package/dist/cli/daemon-cli.js +1 -1
  108. package/dist/cli-BvGVPKnD.js +154 -0
  109. package/dist/command-registry-CADQzTAg.js +14 -0
  110. package/dist/command-registry-ktiJNAJd.js +242 -0
  111. package/dist/command-secret-gateway-CXp10RTM.js +111 -0
  112. package/dist/compact.runtime-DyKL-Iar.js +116 -0
  113. package/dist/completion-cli-Bz4STrpt.js +17 -0
  114. package/dist/completion-cli-pVda2OFb.js +445 -0
  115. package/dist/config-BbvDRSYp.js +31 -0
  116. package/dist/config-CwBv71QC.js +44 -0
  117. package/dist/config-cli-Y0uXHbOw.js +678 -0
  118. package/dist/config-guard-BpW5g7JE.js +118 -0
  119. package/dist/config-validation-B-vLIsbo.js +262 -0
  120. package/dist/config-value-DT3-5958.js +132 -0
  121. package/dist/configure-B9U-jCqP.js +1100 -0
  122. package/dist/configure-BJ3Wrs5b.js +243 -0
  123. package/dist/control-ui-assets-C1YDYi82.js +232 -0
  124. package/dist/control-ui-shared-Dm5Dh0Lo.js +29 -0
  125. package/dist/core-BwKq3krw.js +150 -0
  126. package/dist/core-hjBwfDsW.d.ts +87 -0
  127. package/dist/cron-cli-DTDgfoMh.js +639 -0
  128. package/dist/daemon-cli-C-dkAXR1.js +339 -0
  129. package/dist/daemon-install-Oy0Q5pMF.js +180 -0
  130. package/dist/deliver-DNGnDqF9.js +111 -0
  131. package/dist/deliver-runtime-CCNZIhET.js +111 -0
  132. package/dist/device-id-cli-XvwZbIyC.js +52 -0
  133. package/dist/device-identity-IG5DngWM.js +365 -0
  134. package/dist/devices-cli-DIsxj4xp.js +342 -0
  135. package/dist/diagnostic-DTPopFvh.js +310 -0
  136. package/dist/directory-cli-DTSY3Ktr.js +311 -0
  137. package/dist/directory-config-helpers-DpFcAbmo.d.ts +38 -0
  138. package/dist/directory.static-CBRAUwUW.js +44 -0
  139. package/dist/discord-CrgxhEWw.js +114 -0
  140. package/dist/discovery-DrG7wmAR.js +48 -0
  141. package/dist/dm-policy-shared-DKoGdUpY.d.ts +95 -0
  142. package/dist/dns-cli-BJiz6CLK.js +217 -0
  143. package/dist/docs-cli-Dq2Yi5qO.js +174 -0
  144. package/dist/doctor-completion-D3GeVcFP.js +90 -0
  145. package/dist/doctor-config-flow-B1cMjr8h.js +112 -0
  146. package/dist/doctor-config-flow-BUe7JpV3.js +2437 -0
  147. package/dist/enable-Bc8bCuVe.js +24 -0
  148. package/dist/entry.js +4 -4
  149. package/dist/exec-approvals-cli-kLAev6bP.js +421 -0
  150. package/dist/extensions/acpx/index.d.ts +1 -1
  151. package/dist/extensions/amazon-bedrock/index.d.ts +1 -1
  152. package/dist/extensions/amazon-bedrock/index.js +4 -4
  153. package/dist/extensions/anthropic/index.d.ts +1 -1
  154. package/dist/extensions/anthropic/index.js +35 -35
  155. package/dist/extensions/bluebubbles/index.d.ts +1 -1
  156. package/dist/extensions/bluebubbles/index.js +39 -39
  157. package/dist/extensions/bluebubbles/setup-entry.d.ts +2 -2
  158. package/dist/extensions/bluebubbles/setup-entry.js +39 -39
  159. package/dist/extensions/brave/index.d.ts +1 -1
  160. package/dist/extensions/brave/index.js +5 -5
  161. package/dist/extensions/byteplus/index.d.ts +1 -1
  162. package/dist/extensions/byteplus/index.js +35 -35
  163. package/dist/extensions/cloudflare-ai-gateway/index.d.ts +1 -1
  164. package/dist/extensions/cloudflare-ai-gateway/index.js +36 -36
  165. package/dist/extensions/copilot-proxy/index.d.ts +1 -1
  166. package/dist/extensions/copilot-proxy/index.js +4 -4
  167. package/dist/extensions/device-pair/index.d.ts +1 -1
  168. package/dist/extensions/device-pair/index.js +4 -4
  169. package/dist/extensions/diagnostics-otel/index.d.ts +1 -1
  170. package/dist/extensions/diagnostics-otel/index.js +4 -4
  171. package/dist/extensions/diffs/index.d.ts +1 -1
  172. package/dist/extensions/discord/index.d.ts +1 -1
  173. package/dist/extensions/discord/index.js +40 -40
  174. package/dist/extensions/discord/setup-entry.d.ts +1 -1
  175. package/dist/extensions/discord/setup-entry.js +38 -38
  176. package/dist/extensions/elevenlabs/index.d.ts +1 -1
  177. package/dist/extensions/elevenlabs/index.js +35 -35
  178. package/dist/extensions/feishu/index.d.ts +2 -2
  179. package/dist/extensions/feishu/index.js +40 -40
  180. package/dist/extensions/feishu/setup-entry.d.ts +2 -2
  181. package/dist/extensions/feishu/setup-entry.js +37 -37
  182. package/dist/extensions/firecrawl/index.d.ts +1 -1
  183. package/dist/extensions/firecrawl/index.js +35 -35
  184. package/dist/extensions/github-copilot/index.d.ts +1 -1
  185. package/dist/extensions/github-copilot/index.js +35 -35
  186. package/dist/extensions/google/index.d.ts +1 -1
  187. package/dist/extensions/google/index.js +35 -35
  188. package/dist/extensions/googlechat/index.d.ts +1 -1
  189. package/dist/extensions/googlechat/index.js +38 -38
  190. package/dist/extensions/googlechat/setup-entry.d.ts +1 -1
  191. package/dist/extensions/googlechat/setup-entry.js +38 -38
  192. package/dist/extensions/huggingface/index.d.ts +1 -1
  193. package/dist/extensions/huggingface/index.js +35 -35
  194. package/dist/extensions/imessage/index.d.ts +1 -1
  195. package/dist/extensions/imessage/index.js +39 -39
  196. package/dist/extensions/imessage/setup-entry.d.ts +1 -1
  197. package/dist/extensions/imessage/setup-entry.js +39 -39
  198. package/dist/extensions/irc/index.d.ts +1 -1
  199. package/dist/extensions/irc/index.js +38 -38
  200. package/dist/extensions/irc/setup-entry.d.ts +2 -2
  201. package/dist/extensions/irc/setup-entry.js +38 -38
  202. package/dist/extensions/kakao-talkchannel/index.d.ts +1 -1
  203. package/dist/extensions/kakao-talkchannel/index.js +4 -4
  204. package/dist/extensions/kilocode/index.d.ts +1 -1
  205. package/dist/extensions/kilocode/index.js +35 -35
  206. package/dist/extensions/kimi-coding/index.d.ts +1 -1
  207. package/dist/extensions/kimi-coding/index.js +35 -35
  208. package/dist/extensions/line/index.d.ts +1 -1
  209. package/dist/extensions/line/index.js +37 -37
  210. package/dist/extensions/line/setup-entry.d.ts +1 -1
  211. package/dist/extensions/line/setup-entry.js +37 -37
  212. package/dist/extensions/llm-task/index.d.ts +1 -1
  213. package/dist/extensions/llm-task/index.js +35 -35
  214. package/dist/extensions/lobster/index.d.ts +1 -1
  215. package/dist/extensions/lobster/index.js +4 -4
  216. package/dist/extensions/matrix/index.d.ts +1 -1
  217. package/dist/extensions/matrix/index.js +40 -40
  218. package/dist/extensions/matrix/setup-entry.d.ts +2 -2
  219. package/dist/extensions/matrix/setup-entry.js +40 -40
  220. package/dist/extensions/mattermost/index.d.ts +1 -1
  221. package/dist/extensions/mattermost/index.js +37 -37
  222. package/dist/extensions/mattermost/setup-entry.d.ts +2 -2
  223. package/dist/extensions/mattermost/setup-entry.js +37 -37
  224. package/dist/extensions/memory-core/index.d.ts +1 -1
  225. package/dist/extensions/memory-core/index.js +4 -4
  226. package/dist/extensions/memory-lancedb/index.d.ts +1 -1
  227. package/dist/extensions/memory-lancedb/index.js +4 -4
  228. package/dist/extensions/microsoft/index.d.ts +1 -1
  229. package/dist/extensions/microsoft/index.js +35 -35
  230. package/dist/extensions/minimax/index.d.ts +1 -1
  231. package/dist/extensions/minimax/index.js +35 -35
  232. package/dist/extensions/mistral/index.d.ts +1 -1
  233. package/dist/extensions/mistral/index.js +35 -35
  234. package/dist/extensions/modelstudio/index.d.ts +1 -1
  235. package/dist/extensions/modelstudio/index.js +35 -35
  236. package/dist/extensions/moonshot/index.d.ts +1 -1
  237. package/dist/extensions/moonshot/index.js +35 -35
  238. package/dist/extensions/msteams/index.d.ts +1 -1
  239. package/dist/extensions/msteams/index.js +40 -40
  240. package/dist/extensions/msteams/setup-entry.d.ts +1 -1
  241. package/dist/extensions/msteams/setup-entry.js +40 -40
  242. package/dist/extensions/nextcloud-talk/index.d.ts +1 -1
  243. package/dist/extensions/nextcloud-talk/index.js +37 -37
  244. package/dist/extensions/nextcloud-talk/setup-entry.d.ts +2 -2
  245. package/dist/extensions/nextcloud-talk/setup-entry.js +37 -37
  246. package/dist/extensions/nostr/index.d.ts +1 -1
  247. package/dist/extensions/nostr/index.js +37 -37
  248. package/dist/extensions/nostr/setup-entry.d.ts +1 -1
  249. package/dist/extensions/nostr/setup-entry.js +37 -37
  250. package/dist/extensions/nvidia/index.d.ts +1 -1
  251. package/dist/extensions/nvidia/index.js +4 -4
  252. package/dist/extensions/ollama/index.d.ts +1 -1
  253. package/dist/extensions/ollama/index.js +7 -7
  254. package/dist/extensions/open-prose/index.d.ts +1 -1
  255. package/dist/extensions/open-prose/index.js +4 -4
  256. package/dist/extensions/openai/index.d.ts +1 -1
  257. package/dist/extensions/openai/index.js +35 -35
  258. package/dist/extensions/opencode/index.d.ts +1 -1
  259. package/dist/extensions/opencode/index.js +35 -35
  260. package/dist/extensions/opencode-go/index.d.ts +1 -1
  261. package/dist/extensions/opencode-go/index.js +35 -35
  262. package/dist/extensions/openrouter/index.d.ts +1 -1
  263. package/dist/extensions/openrouter/index.js +35 -35
  264. package/dist/extensions/openshell/index.d.ts +1 -1
  265. package/dist/extensions/openshell/index.js +35 -35
  266. package/dist/extensions/perplexity/index.d.ts +1 -1
  267. package/dist/extensions/perplexity/index.js +5 -5
  268. package/dist/extensions/phone-control/index.d.ts +1 -1
  269. package/dist/extensions/phone-control/index.js +4 -4
  270. package/dist/extensions/qianfan/index.d.ts +1 -1
  271. package/dist/extensions/qianfan/index.js +35 -35
  272. package/dist/extensions/qwen-portal-auth/index.d.ts +1 -1
  273. package/dist/extensions/qwen-portal-auth/index.js +35 -35
  274. package/dist/extensions/sglang/index.d.ts +1 -1
  275. package/dist/extensions/sglang/index.js +35 -35
  276. package/dist/extensions/signal/index.d.ts +1 -1
  277. package/dist/extensions/signal/index.js +38 -38
  278. package/dist/extensions/signal/setup-entry.d.ts +1 -1
  279. package/dist/extensions/signal/setup-entry.js +38 -38
  280. package/dist/extensions/slack/index.d.ts +1 -1
  281. package/dist/extensions/slack/index.js +39 -39
  282. package/dist/extensions/slack/setup-entry.d.ts +1 -1
  283. package/dist/extensions/slack/setup-entry.js +38 -38
  284. package/dist/extensions/synology-chat/index.d.ts +1 -1
  285. package/dist/extensions/synology-chat/index.js +37 -37
  286. package/dist/extensions/synology-chat/setup-entry.d.ts +1 -1
  287. package/dist/extensions/synology-chat/setup-entry.js +37 -37
  288. package/dist/extensions/synthetic/index.d.ts +1 -1
  289. package/dist/extensions/synthetic/index.js +35 -35
  290. package/dist/extensions/talk-voice/index.d.ts +1 -1
  291. package/dist/extensions/talk-voice/index.js +35 -35
  292. package/dist/extensions/telegram/index.d.ts +1 -1
  293. package/dist/extensions/telegram/index.js +38 -38
  294. package/dist/extensions/telegram/setup-entry.d.ts +1 -1
  295. package/dist/extensions/telegram/setup-entry.js +37 -37
  296. package/dist/extensions/thread-ownership/index.d.ts +1 -1
  297. package/dist/extensions/thread-ownership/index.js +4 -4
  298. package/dist/extensions/tlon/index.d.ts +1 -1
  299. package/dist/extensions/tlon/index.js +37 -37
  300. package/dist/extensions/tlon/setup-entry.d.ts +1 -1
  301. package/dist/extensions/tlon/setup-entry.js +37 -37
  302. package/dist/extensions/together/index.d.ts +1 -1
  303. package/dist/extensions/together/index.js +35 -35
  304. package/dist/extensions/twitch/index.d.ts +2 -2
  305. package/dist/extensions/twitch/index.js +37 -37
  306. package/dist/extensions/venice/index.d.ts +1 -1
  307. package/dist/extensions/venice/index.js +35 -35
  308. package/dist/extensions/vercel-ai-gateway/index.d.ts +1 -1
  309. package/dist/extensions/vercel-ai-gateway/index.js +36 -36
  310. package/dist/extensions/vllm/index.d.ts +1 -1
  311. package/dist/extensions/vllm/index.js +35 -35
  312. package/dist/extensions/voice-call/index.d.ts +1 -1
  313. package/dist/extensions/voice-call/index.js +35 -35
  314. package/dist/extensions/volcengine/index.d.ts +1 -1
  315. package/dist/extensions/volcengine/index.js +35 -35
  316. package/dist/extensions/whatsapp/index.d.ts +1 -1
  317. package/dist/extensions/whatsapp/index.js +38 -38
  318. package/dist/extensions/whatsapp/setup-entry.d.ts +1 -1
  319. package/dist/extensions/whatsapp/setup-entry.js +38 -38
  320. package/dist/extensions/xai/index.d.ts +1 -1
  321. package/dist/extensions/xai/index.js +35 -35
  322. package/dist/extensions/xiaomi/index.d.ts +1 -1
  323. package/dist/extensions/xiaomi/index.js +35 -35
  324. package/dist/extensions/zai/index.d.ts +1 -1
  325. package/dist/extensions/zai/index.js +35 -35
  326. package/dist/extensions/zalo/index.d.ts +1 -1
  327. package/dist/extensions/zalo/index.js +39 -39
  328. package/dist/extensions/zalo/setup-entry.d.ts +1 -1
  329. package/dist/extensions/zalo/setup-entry.js +39 -39
  330. package/dist/extensions/zalouser/index.d.ts +1 -1
  331. package/dist/extensions/zalouser/index.js +40 -40
  332. package/dist/extensions/zalouser/setup-entry.d.ts +1 -1
  333. package/dist/extensions/zalouser/setup-entry.js +40 -40
  334. package/dist/feishu-fIcnHDTd.d.ts +36 -0
  335. package/dist/gateway-cli-0c-8h93_.js +26437 -0
  336. package/dist/gateway-install-token-1PwJvrBY.js +163 -0
  337. package/dist/gateway-rpc-C0Vk51W7.js +26 -0
  338. package/dist/gateway-runtime-CBm3CCoA.js +69 -0
  339. package/dist/git-commit-BTWXFY41.js +177 -0
  340. package/dist/git-commit-D6GTN5Yt.js +2 -0
  341. package/dist/googlechat-BQr4xgoZ.js +307 -0
  342. package/dist/googlechat-BvwsCVKl.d.ts +12 -0
  343. package/dist/group-access-DpiQnd-G.d.ts +61 -0
  344. package/dist/health-6yZQGADY.js +113 -0
  345. package/dist/health-C9DYGyRe.js +570 -0
  346. package/dist/heartbeat-summary-Dct2lqJj.js +57 -0
  347. package/dist/help-CtwSApfq.js +81 -0
  348. package/dist/hooks-9gokOxZ5.d.ts +6 -0
  349. package/dist/hooks-cli-BegKzHZT.js +1000 -0
  350. package/dist/hooks-status-Bm_pGORf.js +78 -0
  351. package/dist/http-registry-D-S6a1Na.d.ts +20 -0
  352. package/dist/identity-file-Diub2a0t.js +60 -0
  353. package/dist/image-generation-CbIVzmAR.d.ts +9 -0
  354. package/dist/imessage-Bgok9kfl.js +31 -0
  355. package/dist/imessage-VIHePprL.js +115 -0
  356. package/dist/inbound-reply-dispatch-B53GAGWq.js +71 -0
  357. package/dist/inbound-reply-dispatch-n7U3qg15.d.ts +72 -0
  358. package/dist/index.js +2 -2
  359. package/dist/install-target-oz1pjfHH.js +574 -0
  360. package/dist/installs-CUFm5V8a.js +532 -0
  361. package/dist/io-BaBxjB1v.js +9739 -0
  362. package/dist/io-CgHb1Jld.js +29 -0
  363. package/dist/irc-CaRKzGvW.js +672 -0
  364. package/dist/library-C5SNBCMb.js +112 -0
  365. package/dist/lifecycle-core-Dn8PK6nk.js +382 -0
  366. package/dist/line/accounts.d.ts +2 -2
  367. package/dist/line/send.d.ts +1 -1
  368. package/dist/line/send.js +7 -7
  369. package/dist/line/template-messages.d.ts +1 -1
  370. package/dist/line-B5QFpgN_.d.ts +75 -0
  371. package/dist/line-fePrrQOD.js +530 -0
  372. package/dist/llm-slug-generator-hKae3XDA.js +67 -0
  373. package/dist/llm-slug-generator.d.ts +1 -1
  374. package/dist/llm-slug-generator.js +36 -36
  375. package/dist/logging-CdisccbY.js +13 -0
  376. package/dist/logging-LKQSgX1d.js +30 -0
  377. package/dist/login-qr-C1YWh4nE.js +233 -0
  378. package/dist/login-qr-WFluMDMb.js +112 -0
  379. package/dist/logs-cli-CNzOvZ2d.js +256 -0
  380. package/dist/manager-runtime-DgMhLTkR.js +111 -0
  381. package/dist/manager.runtime-hUWgpPt2.js +715 -0
  382. package/dist/manifest-registry-CS_p1OBQ.js +1329 -0
  383. package/dist/matrix-43_RGLZN.d.ts +68 -0
  384. package/dist/matrix-CCFxHfxa.js +1269 -0
  385. package/dist/matrix-DWs_qIkJ.js +1495 -0
  386. package/dist/mcp-cli-Ci2jvv3s.js +87 -0
  387. package/dist/media-understanding.runtime-Cdr6iTW6.js +116 -0
  388. package/dist/memory-cli-LZbyF0Iu.js +111 -0
  389. package/dist/memory-search-BHhETk6u.js +17 -0
  390. package/dist/memory-search-tTD5o_rU.js +204 -0
  391. package/dist/method-scopes-B2ZKSsxQ.js +2452 -0
  392. package/dist/model-auth-markers-LqZ4qhrZ.d.ts +20 -0
  393. package/dist/model-picker-CTR5mo4v.js +112 -0
  394. package/dist/model-picker-DG4z_dBs.js +390 -0
  395. package/dist/model-picker.runtime-DMQ9Pj9_.js +125 -0
  396. package/dist/model-selection-bBBxfXdb.js +653 -0
  397. package/dist/model-suppression.runtime-BVG75tZ7.js +116 -0
  398. package/dist/models-BjkVLfgw.js +2514 -0
  399. package/dist/models-ZO01Q4cx.js +118 -0
  400. package/dist/models-cli-DemdF-bm.js +309 -0
  401. package/dist/models-config-B2Jja8ua.js +111 -0
  402. package/dist/models-config.providers.discovery-puxTsH39.d.ts +18 -0
  403. package/dist/moldclaw-root-Cb6HRlUO.js +92 -0
  404. package/dist/monitor-BP4idxJD.js +782 -0
  405. package/dist/monitor-B_eP8Eim.js +772 -0
  406. package/dist/monitor-CRHYNl5J.js +3468 -0
  407. package/dist/monitor-Ci1Xg4g3.js +113 -0
  408. package/dist/monitor-DEodDl3z.js +6823 -0
  409. package/dist/monitor-DJlNKuMz.js +115 -0
  410. package/dist/monitor-DvFwDS9w.js +3076 -0
  411. package/dist/monitor-shared--cEjSf8s.js +444 -0
  412. package/dist/msteams-CV2a8uE8.js +852 -0
  413. package/dist/node-cli-Of2g7DSd.js +2503 -0
  414. package/dist/node-resolve-BYC2FbO2.js +835 -0
  415. package/dist/nodes-cli-CPHM6Upj.js +1380 -0
  416. package/dist/nostr-BFKRoOlz.d.ts +7 -0
  417. package/dist/nostr-lHpcBzz4.js +8744 -0
  418. package/dist/npm-resolution-kqHN85wB.js +60 -0
  419. package/dist/oauth-env-CLG8KOrz.js +10 -0
  420. package/dist/onboard-BON0C360.js +48 -0
  421. package/dist/onboard-CRkIBgOI.js +589 -0
  422. package/dist/onboard-DsKI17iq.js +25 -0
  423. package/dist/onboard-channels-BY3IbBBf.js +1241 -0
  424. package/dist/onboard-channels-CLKdRxvW.js +205 -0
  425. package/dist/onboard-custom-BjPrMo_R.js +571 -0
  426. package/dist/onboard-custom-DqcPiZBN.js +114 -0
  427. package/dist/onboard-helpers-BkrOY5OE.js +113 -0
  428. package/dist/onboard-helpers-DiSRTpZC.js +335 -0
  429. package/dist/onboard-hooks-pzEPZAvl.js +72 -0
  430. package/dist/onboard-remote-ChyLC6Dk.js +181 -0
  431. package/dist/onboard-remote-DHmK9ntl.js +117 -0
  432. package/dist/onboard-search-BgA3jEMW.js +302 -0
  433. package/dist/onboard-skills-BMo_NvnW.js +133 -0
  434. package/dist/onboard-skills-Bba-Z2p8.js +117 -0
  435. package/dist/outbound-media-BHD4aJEX.d.ts +11 -0
  436. package/dist/outbound-media-DSno0N82.js +11 -0
  437. package/dist/pairing-access-CzHpaM0R.d.ts +21 -0
  438. package/dist/pairing-cli-CmklqK0q.js +217 -0
  439. package/dist/perplexity-CXwMDD3u.js +24 -0
  440. package/dist/persistent-dedupe-B9vrAf8t.d.ts +26 -0
  441. package/dist/pi-model-discovery-runtime-BrK7tcaO.js +111 -0
  442. package/dist/pi-tools.before-tool-call.runtime-C5yLUogH.js +381 -0
  443. package/dist/plugin-install-C4AWJIFP.js +117 -0
  444. package/dist/plugin-install-CB3J1hfV.js +184 -0
  445. package/dist/plugin-install-plan-7itZiegi.js +49 -0
  446. package/dist/plugin-registry-DX_GFoiz.js +113 -0
  447. package/dist/plugin-registry-e3cxTtvb.js +49 -0
  448. package/dist/plugin-sdk/account-resolution.js +35 -35
  449. package/dist/plugin-sdk/acp-runtime.js +35 -35
  450. package/dist/plugin-sdk/agent-runtime.js +35 -35
  451. package/dist/plugin-sdk/bluebubbles.js +37 -37
  452. package/dist/plugin-sdk/channel-config-helpers.js +35 -35
  453. package/dist/plugin-sdk/channel-policy.js +35 -35
  454. package/dist/plugin-sdk/channel-runtime.js +35 -35
  455. package/dist/plugin-sdk/compat.js +36 -36
  456. package/dist/plugin-sdk/config-runtime.js +35 -35
  457. package/dist/plugin-sdk/conversation-runtime.js +35 -35
  458. package/dist/plugin-sdk/copilot-proxy.js +4 -4
  459. package/dist/plugin-sdk/core.js +4 -4
  460. package/dist/plugin-sdk/device-pair.js +4 -4
  461. package/dist/plugin-sdk/discord.js +35 -35
  462. package/dist/plugin-sdk/feishu.js +35 -35
  463. package/dist/plugin-sdk/gateway-runtime.js +10 -10
  464. package/dist/plugin-sdk/googlechat.js +37 -37
  465. package/dist/plugin-sdk/image-generation-runtime.js +35 -35
  466. package/dist/plugin-sdk/image-generation.js +35 -35
  467. package/dist/plugin-sdk/imessage.js +36 -36
  468. package/dist/plugin-sdk/index.js +35 -35
  469. package/dist/plugin-sdk/infra-runtime.js +35 -35
  470. package/dist/plugin-sdk/irc.js +37 -37
  471. package/dist/plugin-sdk/line.js +36 -36
  472. package/dist/plugin-sdk/llm-task.js +35 -35
  473. package/dist/plugin-sdk/lobster.js +4 -4
  474. package/dist/plugin-sdk/matrix.js +37 -37
  475. package/dist/plugin-sdk/mattermost.js +36 -36
  476. package/dist/plugin-sdk/media-runtime.js +35 -35
  477. package/dist/plugin-sdk/media-understanding-runtime.js +35 -35
  478. package/dist/plugin-sdk/media-understanding.js +35 -35
  479. package/dist/plugin-sdk/memory-lancedb.js +4 -4
  480. package/dist/plugin-sdk/minimax-portal-auth.js +4 -4
  481. package/dist/plugin-sdk/msteams.js +38 -38
  482. package/dist/plugin-sdk/nextcloud-talk.js +36 -36
  483. package/dist/plugin-sdk/nostr.js +36 -36
  484. package/dist/plugin-sdk/ollama-setup.js +9 -9
  485. package/dist/plugin-sdk/open-prose.js +4 -4
  486. package/dist/plugin-sdk/phone-control.js +4 -4
  487. package/dist/plugin-sdk/plugin-runtime.js +35 -35
  488. package/dist/plugin-sdk/provider-auth.js +35 -35
  489. package/dist/plugin-sdk/provider-models.js +5 -5
  490. package/dist/plugin-sdk/provider-onboard.js +4 -4
  491. package/dist/plugin-sdk/provider-setup.js +39 -39
  492. package/dist/plugin-sdk/provider-stream.js +4 -4
  493. package/dist/plugin-sdk/provider-usage.js +4 -4
  494. package/dist/plugin-sdk/qwen-portal-auth.js +35 -35
  495. package/dist/plugin-sdk/reply-history.js +35 -35
  496. package/dist/plugin-sdk/reply-runtime.js +35 -35
  497. package/dist/plugin-sdk/routing.js +3 -3
  498. package/dist/plugin-sdk/sandbox.js +35 -35
  499. package/dist/plugin-sdk/security-runtime.js +35 -35
  500. package/dist/plugin-sdk/self-hosted-provider-setup.js +37 -37
  501. package/dist/plugin-sdk/setup.js +35 -35
  502. package/dist/plugin-sdk/signal.js +35 -35
  503. package/dist/plugin-sdk/slack.js +35 -35
  504. package/dist/plugin-sdk/speech-runtime.js +35 -35
  505. package/dist/plugin-sdk/speech.js +35 -35
  506. package/dist/plugin-sdk/src/secrets/secure-file-store.d.ts +26 -0
  507. package/dist/plugin-sdk/src/subscription/provider.d.ts +5 -3
  508. package/dist/plugin-sdk/synology-chat.js +36 -36
  509. package/dist/plugin-sdk/talk-voice.js +4 -4
  510. package/dist/plugin-sdk/telegram.js +35 -35
  511. package/dist/plugin-sdk/text-runtime.js +7 -7
  512. package/dist/plugin-sdk/thread-ownership.js +4 -4
  513. package/dist/plugin-sdk/tlon.js +36 -36
  514. package/dist/plugin-sdk/twitch.js +35 -35
  515. package/dist/plugin-sdk/voice-call.js +35 -35
  516. package/dist/plugin-sdk/whatsapp.js +35 -35
  517. package/dist/plugin-sdk/zalo.js +38 -38
  518. package/dist/plugin-sdk/zalouser.js +38 -38
  519. package/dist/plugins/runtime/index.d.ts +1 -1
  520. package/dist/plugins/runtime/index.js +35 -35
  521. package/dist/plugins-DF5FaTO0.js +111 -0
  522. package/dist/plugins-cli-CvTJemqC.js +917 -0
  523. package/dist/policy-CNXISK_a.js +143 -0
  524. package/dist/preflight-audio.runtime-RP000oxo.js +116 -0
  525. package/dist/probe-BkM5pykD.js +21 -0
  526. package/dist/probe-DKbRTJv5.js +1793 -0
  527. package/dist/probe-DkrfRsjU.js +47 -0
  528. package/dist/probe-DpcJ0WeP.js +129 -0
  529. package/dist/probe-auth-BcNjX8hy.js +40 -0
  530. package/dist/probe-auth-DhuAb8ls.js +48 -0
  531. package/dist/probe-wciBj-aL.js +6329 -0
  532. package/dist/program-C8-p0mW5.js +253 -0
  533. package/dist/prompt-select-styled-DH0pVoc0.js +2673 -0
  534. package/dist/provider-api-key-auth.runtime-CAFeIQ1u.js +121 -0
  535. package/dist/provider-auth-choice-CB_HzdTl.js +126 -0
  536. package/dist/provider-auth-choice-helpers-hzDkh3f1.js +48 -0
  537. package/dist/provider-auth-choice-preference-BHCXvNSE.js +189 -0
  538. package/dist/provider-auth-choice.runtime-Dx4ms2C5.js +123 -0
  539. package/dist/provider-auth-choices-0KaDNPBQ.js +57 -0
  540. package/dist/provider-auth-guidance-BaAUiNr_.js +34 -0
  541. package/dist/provider-auth-result-Bto1bYtS.d.ts +18 -0
  542. package/dist/provider-models-DxOmeToO.d.ts +867 -0
  543. package/dist/provider-models-xnyxy6mO.js +2113 -0
  544. package/dist/provider-ollama-setup-DBYK__ov.d.ts +32 -0
  545. package/dist/provider-ollama-setup-QzgCxj44.js +314 -0
  546. package/dist/provider-onboard-B9ionepI.js +139 -0
  547. package/dist/provider-onboard-CURxJ_UX.d.ts +40 -0
  548. package/dist/provider-runtime.runtime-4xwmsl5L.js +111 -0
  549. package/dist/provider-self-hosted-setup-BHd24EDG.js +182 -0
  550. package/dist/provider-self-hosted-setup-qeY8BYSy.d.ts +61 -0
  551. package/dist/provider-stream-Chz_EFw3.js +512 -0
  552. package/dist/provider-usage-C11Q7UwS.js +111 -0
  553. package/dist/provider-usage-kxemdMp2.js +633 -0
  554. package/dist/provider-wizard-CanJoxNC.js +152 -0
  555. package/dist/push-apns-Dsajnm8C.js +1038 -0
  556. package/dist/pw-ai-DUe4BbH2.js +1867 -0
  557. package/dist/qmd-manager-CAAFp7qK.js +1570 -0
  558. package/dist/qr-cli-Bu2jqTPY.js +113 -0
  559. package/dist/qr-cli-Bu9Z-X48.js +369 -0
  560. package/dist/reactions-Cpfum4iU.js +281 -0
  561. package/dist/read-only-account-inspect.discord.runtime-BK0LaMgC.js +116 -0
  562. package/dist/read-only-account-inspect.slack.runtime-DgKiC5wT.js +116 -0
  563. package/dist/read-only-account-inspect.telegram.runtime-mxfgFVOU.js +116 -0
  564. package/dist/redact-snapshot-DD8A4tdd.js +2663 -0
  565. package/dist/register.agent-DU4FtrU2.js +439 -0
  566. package/dist/register.backup-8nOYtJqg.js +625 -0
  567. package/dist/register.configure-DmtecqIH.js +252 -0
  568. package/dist/register.maintenance-Dir3ulKP.js +574 -0
  569. package/dist/register.message-Cfl-f3Ju.js +709 -0
  570. package/dist/register.onboard-Bv7WVzEi.js +192 -0
  571. package/dist/register.setup-BIyeI8RY.js +212 -0
  572. package/dist/register.status-health-sessions-C69WQcF4.js +498 -0
  573. package/dist/register.subclis-B_4KCgTd.js +315 -0
  574. package/dist/register.subclis-BeXsmgBL.js +13 -0
  575. package/dist/replies-DdcFUmki.js +110 -0
  576. package/dist/resolve-channels-DRZqPV5o.js +226 -0
  577. package/dist/resolve-channels-DxW1kqxA.js +262 -0
  578. package/dist/resolve-route-DdX-HBVt.js +538 -0
  579. package/dist/resolve-users-rgCQvkLs.js +143 -0
  580. package/dist/root-help-QAkoA7GD.js +32 -0
  581. package/dist/routes-CcJNnwTF.js +7097 -0
  582. package/dist/rpc-DDUAlBbH.js +67 -0
  583. package/dist/run-main-D9ci5pn7.js +424 -0
  584. package/dist/runtime-Bitmi8Er.d.ts +26 -0
  585. package/dist/runtime-discord-ops.runtime-T4sf7aRB.js +9078 -0
  586. package/dist/runtime-slack-ops.runtime-BQpP48mC.js +4556 -0
  587. package/dist/runtime-telegram-ops.runtime-cVO5dqOp.js +133 -0
  588. package/dist/runtime-whatsapp-login.runtime-DtNx0dSY.js +114 -0
  589. package/dist/runtime-whatsapp-outbound.runtime-Bw47QbFK.js +117 -0
  590. package/dist/sandbox-cli-DsFwjbjC.js +535 -0
  591. package/dist/search-manager-BRAK8fEe.js +16 -0
  592. package/dist/search-manager-BS5Db0A6.js +386 -0
  593. package/dist/secrets-cli-D3J46TJp.js +2070 -0
  594. package/dist/security-cli-B866M9cB.js +575 -0
  595. package/dist/send-B1pX9_Oc.js +283 -0
  596. package/dist/send-B2RrLg83.js +100 -0
  597. package/dist/send-DFnV__Aq.js +1025 -0
  598. package/dist/send-DZIH6CJt.js +629 -0
  599. package/dist/send-sl9WnKbW.js +631 -0
  600. package/dist/server-node-events-BT6egg20.js +506 -0
  601. package/dist/server-zI_K-D05.js +107 -0
  602. package/dist/sessions-C8kiAcoJ.js +112 -0
  603. package/dist/sessions-DLBpp52_.js +218 -0
  604. package/dist/setup-C7eOzMiC.js +387 -0
  605. package/dist/setup-CFIMq-Pz.d.ts +37 -0
  606. package/dist/setup-binary-CcAv8NXz.js +406 -0
  607. package/dist/setup-browser-C4eRV3h6.js +70 -0
  608. package/dist/setup-core-BnR486P-.js +143 -0
  609. package/dist/setup-core-CIswIiu5.js +166 -0
  610. package/dist/setup-core-CcbcrXXg.js +47 -0
  611. package/dist/setup-core-nZSw5BSv.js +205 -0
  612. package/dist/setup-surface-C5iSpT4M.js +490 -0
  613. package/dist/setup-wizard-helpers-r0J6l8ST.d.ts +203 -0
  614. package/dist/setup.finalize-adiRfo0U.js +522 -0
  615. package/dist/setup.gateway-config-BwFWKDfT.js +343 -0
  616. package/dist/shared-12TimyeF.js +182 -0
  617. package/dist/shared-9EWO34-k.js +298 -0
  618. package/dist/shared-B4vUbaRR.js +75 -0
  619. package/dist/shared-bNWpW3Dd.js +96 -0
  620. package/dist/shared-lU1y5dvS.js +102 -0
  621. package/dist/signal-DBlETRu9.js +114 -0
  622. package/dist/skills-Bio8GwTE.js +20 -0
  623. package/dist/skills-DE_MXFSN.js +853 -0
  624. package/dist/skills-cli-BGuW-tKw.js +292 -0
  625. package/dist/skills-install--rnorIoJ.js +763 -0
  626. package/dist/skills-status-B08PtBc_.js +21 -0
  627. package/dist/skills-status-CzM008aB.js +169 -0
  628. package/dist/slack-C4T53Nc-.js +114 -0
  629. package/dist/slash-commands.runtime-B7fsD8Be.js +128 -0
  630. package/dist/slash-dispatch.runtime-t0PAX4vQ.js +141 -0
  631. package/dist/slash-skill-commands.runtime-DIhPnEfR.js +116 -0
  632. package/dist/src-DrDirlvw.js +1701 -0
  633. package/dist/status-Bld14WSA.js +131 -0
  634. package/dist/status-CgeO4RuH.js +43 -0
  635. package/dist/status-HlvixAOq.js +606 -0
  636. package/dist/status-Rom_Lf3c.js +1599 -0
  637. package/dist/status-TwbMH6Am.js +126 -0
  638. package/dist/status-json-DMW7cmuK.js +288 -0
  639. package/dist/status.link-channel-V4LkB6Gq.js +143 -0
  640. package/dist/status.scan.deps.runtime-BE3X-dcP.js +126 -0
  641. package/dist/status.scan.runtime-BxVY4mty.js +119 -0
  642. package/dist/status.summary-CzLM0vVr.js +592 -0
  643. package/dist/status.summary.runtime-BSBnHZ1Q.js +118 -0
  644. package/dist/status.update-BxblMS7P.js +77 -0
  645. package/dist/subagent-orphan-recovery-BpRPryEj.js +307 -0
  646. package/dist/subagent-registry-runtime-DYYU5p3X.js +111 -0
  647. package/dist/subscription-CpFdxuFS.js +33 -0
  648. package/dist/subscription-DaA1urx-.js +102 -0
  649. package/dist/subscription-cli-Bvto9EmO.js +134 -0
  650. package/dist/synology-chat-3nwk-Nj0.js +297 -0
  651. package/dist/system-cli-BvNps8sl.js +94 -0
  652. package/dist/telegram/audit.d.ts +1 -1
  653. package/dist/telegram/audit.js +1 -1
  654. package/dist/telegram/token.d.ts +1 -1
  655. package/dist/telegram/token.js +35 -35
  656. package/dist/telegram-RtKXoEsF.js +114 -0
  657. package/dist/text-chunking-BD5mQe2R.js +84 -0
  658. package/dist/text-chunking-DDUU_vAF.d.ts +79 -0
  659. package/dist/tlon-z-kYmJE-.js +433 -0
  660. package/dist/tui-cli-CzSK08Rh.js +137 -0
  661. package/dist/tui-wV7R1Tlc.js +3834 -0
  662. package/dist/types-2H_e7eWT.d.ts +45 -0
  663. package/dist/types-ZKnGUchG.d.ts +22692 -0
  664. package/dist/types.base-BFiQZ4J9.d.ts +188 -0
  665. package/dist/ui-BWVHreeR.js +31 -0
  666. package/dist/update-D1Wgh1Tj.js +1036 -0
  667. package/dist/update-cli-CZh99uyY.js +1503 -0
  668. package/dist/update-offset-store-D5xTdUr0.js +112 -0
  669. package/dist/update-runner-GbKfoCHs.js +1496 -0
  670. package/dist/upsert-with-lock-BZU7Le8n.js +33 -0
  671. package/dist/usage-Czgwvg0h.js +115 -0
  672. package/dist/web-CMczmL90.js +112 -0
  673. package/dist/web-shared-B5Q0mIJq.d.ts +45 -0
  674. package/dist/webhook-request-guards-CsKDhZJr.d.ts +76 -0
  675. package/dist/webhook-targets-BSmFtesN.js +181 -0
  676. package/dist/webhook-targets-CjxuEE9C.d.ts +106 -0
  677. package/dist/webhooks-cli-Wl9y6AWW.js +350 -0
  678. package/dist/whatsapp-VzRW8MdR.js +114 -0
  679. package/dist/whatsapp-actions-Cg1Wxv8W.js +167 -0
  680. package/dist/workspace-DJ_S272u.js +484 -0
  681. package/dist/workspace-DbZSqjw0.js +289 -0
  682. package/dist/workspace-cli-D93DLmAh.js +154 -0
  683. package/dist/workspace-dirs-CGeIPpGN.js +2003 -0
  684. package/dist/zalo-CK2dlGmu.d.ts +9 -0
  685. package/dist/zalo-Db7s2boL.js +415 -0
  686. package/dist/zalouser-Jh5YTJX3.js +30911 -0
  687. package/docs/reference/templates/AGENTS.dev.md +83 -0
  688. package/docs/reference/templates/AGENTS.md +219 -0
  689. package/docs/reference/templates/BOOT.md +11 -0
  690. package/docs/reference/templates/BOOTSTRAP.md +62 -0
  691. package/docs/reference/templates/HEARTBEAT.md +12 -0
  692. package/docs/reference/templates/IDENTITY.dev.md +47 -0
  693. package/docs/reference/templates/IDENTITY.md +29 -0
  694. package/docs/reference/templates/SOUL.dev.md +76 -0
  695. package/docs/reference/templates/SOUL.md +43 -0
  696. package/docs/reference/templates/TOOLS.dev.md +24 -0
  697. package/docs/reference/templates/TOOLS.md +47 -0
  698. package/docs/reference/templates/USER.dev.md +18 -0
  699. package/docs/reference/templates/USER.md +23 -0
  700. package/extensions/discord/src/monitor/allow-list.ts +8 -1
  701. package/extensions/discord/src/monitor/message-handler.preflight.ts +4 -1
  702. package/package.json +2 -1
  703. package/dist/accounts-CDr-lDaV.d.ts +0 -103
  704. package/dist/accounts-CS8U4v8C.js +0 -114
  705. package/dist/acp-cli-BGT0jXcC.js +0 -2093
  706. package/dist/actions.runtime-BfckTw6c.js +0 -119
  707. package/dist/actions.runtime-Cl9mBfqH.js +0 -133
  708. package/dist/agent-scope-C-YmLnnb.js +0 -208
  709. package/dist/agents-CydD54p8.js +0 -222
  710. package/dist/agents-DpQsZO6O.js +0 -853
  711. package/dist/agents.config-XU7IsYE-.js +0 -121
  712. package/dist/agents.config-ssoQXuvF.js +0 -17
  713. package/dist/allow-list-Cfn6lmMK.js +0 -81
  714. package/dist/allowlist-CCYXVpM9.js +0 -142
  715. package/dist/api-BoXoFKxy.js +0 -117
  716. package/dist/audit-Bv05N5o9.js +0 -787
  717. package/dist/audit-CIWW1Aqm.js +0 -54
  718. package/dist/audit-channel.collect.runtime-Bi7yrdcO.js +0 -605
  719. package/dist/audit-channel.runtime-C_NDweiW.js +0 -121
  720. package/dist/audit-extra.async-Dp7OKSXg.js +0 -813
  721. package/dist/audit-membership-runtime-B8FQ6VtN.js +0 -162
  722. package/dist/audit.deep.runtime-CXhobL6b.js +0 -25
  723. package/dist/audit.nondeep.runtime-CrEm3T16.js +0 -832
  724. package/dist/audit.runtime-CJPKj1Zg.js +0 -118
  725. package/dist/auth-Byfp0flq.js +0 -101
  726. package/dist/auth-choice-BgOjdeXN.js +0 -507
  727. package/dist/auth-choice-CD1Heq0M.js +0 -122
  728. package/dist/auth-choice-ePNfg0iQ.js +0 -268
  729. package/dist/auth-choice-options-BlewQWI0.js +0 -123
  730. package/dist/auth-choice-prompt-BP2b6aXz.js +0 -36
  731. package/dist/auth-choice-prompt-Cmwl4n97.js +0 -115
  732. package/dist/auth-choice.apply-helpers-Dq-nxuuX.js +0 -66
  733. package/dist/auth-choice.plugin-providers.runtime-B23kOUzQ.js +0 -119
  734. package/dist/auth-profiles-1kPLbBwI.js +0 -127823
  735. package/dist/auth-profiles.runtime-DAfSjku1.js +0 -116
  736. package/dist/banner-DeOsobLO.js +0 -342
  737. package/dist/bluebubbles-BsLGedBM.js +0 -64
  738. package/dist/bluebubbles-CnT9wiS4.d.ts +0 -6
  739. package/dist/bot-CuzVYwa_.d.ts +0 -478
  740. package/dist/brave-BoWimrLe.js +0 -24
  741. package/dist/browser-cli-D_S3wEYE.js +0 -1494
  742. package/dist/call-ByEzDJ1_.js +0 -640
  743. package/dist/call-CHCWVg-O.js +0 -39
  744. package/dist/channel-3VC0oOMu.js +0 -214
  745. package/dist/channel-B9fCBPiS.js +0 -207
  746. package/dist/channel-B9q775cM.js +0 -562
  747. package/dist/channel-BG3UK54j.js +0 -803
  748. package/dist/channel-BRQAdMML.js +0 -352
  749. package/dist/channel-BmlLp933.js +0 -1321
  750. package/dist/channel-By6KvdTG.js +0 -920
  751. package/dist/channel-C8rRsdf6.js +0 -226
  752. package/dist/channel-CLEDBbXE.js +0 -943
  753. package/dist/channel-CMvBAG7o.js +0 -306
  754. package/dist/channel-CmlxxjHY.js +0 -1598
  755. package/dist/channel-CqG6_xN0.js +0 -949
  756. package/dist/channel-DNueHKs92.js +0 -316
  757. package/dist/channel-DUtyN7BX.js +0 -4681
  758. package/dist/channel-DWD6GrfZ.js +0 -538
  759. package/dist/channel-DaRYMYzj.js +0 -619
  760. package/dist/channel-Dj6BgLp8.js +0 -575
  761. package/dist/channel-account-context-Ba3u5D21.js +0 -103
  762. package/dist/channel-crabk6Em.js +0 -542
  763. package/dist/channel-i8uqQaK2.js +0 -497
  764. package/dist/channel-options-xljvwHS2.js +0 -50
  765. package/dist/channel-plugin-ids-DAgknSG4.js +0 -26
  766. package/dist/channel-summary-dHTMCG75.js +0 -111
  767. package/dist/channel-xVWQ96Ni.js +0 -397
  768. package/dist/channel.runtime-B6PoZ4BV.js +0 -182
  769. package/dist/channel.runtime-BPZmo57e.js +0 -404
  770. package/dist/channel.runtime-B_1uGR-U.js +0 -199
  771. package/dist/channel.runtime-BiXnPU0d.js +0 -218
  772. package/dist/channel.runtime-BpvDc9sv.js +0 -870
  773. package/dist/channel.runtime-CUua3W80.js +0 -418
  774. package/dist/channel.runtime-CaCBTd0A.js +0 -179
  775. package/dist/channel.runtime-D0FfYvUj.js +0 -4011
  776. package/dist/channel.runtime-DhoJtpvJ.js +0 -241
  777. package/dist/channel.runtime-Kj9EXNE0.js +0 -127
  778. package/dist/channel.runtime-r4tPuPyh.js +0 -171
  779. package/dist/channel.setup-B7d_grfe.js +0 -6
  780. package/dist/channel.setup-C0vu1fhi.js +0 -9
  781. package/dist/channel.setup-CAI0FNHj.js +0 -11
  782. package/dist/channel.setup-CkDVwv5R.js +0 -57
  783. package/dist/channel.setup-Cpd00YqQ.js +0 -8
  784. package/dist/channel.setup-DbBz1-WT.js +0 -9
  785. package/dist/channel.setup-GZnAvD9g.js +0 -8
  786. package/dist/channels-5H484RSw.js +0 -1118
  787. package/dist/channels-BnPudfyx.js +0 -404
  788. package/dist/channels-cli-WIC-QeH_.js +0 -291
  789. package/dist/channels-status-issues-RDmzovJU.js +0 -16
  790. package/dist/clawbot-cli-BgutNwf8.js +0 -118
  791. package/dist/cleanup-utils-DBl1Aij1.js +0 -96
  792. package/dist/cli-1P7u6zqu.js +0 -154
  793. package/dist/command-registry-B8jovrws.js +0 -232
  794. package/dist/command-registry-DtDl1FVm.js +0 -14
  795. package/dist/command-secret-gateway-BgUo3FxJ.js +0 -111
  796. package/dist/compact.runtime-CXbXM0AU.js +0 -116
  797. package/dist/completion-cli-Cik_owAE.js +0 -17
  798. package/dist/completion-cli-RU3P2RSl.js +0 -445
  799. package/dist/config-5HUpB1L1.js +0 -31
  800. package/dist/config-cli-QHaUHoZI.js +0 -433
  801. package/dist/config-guard-C9Sn3pE-.js +0 -118
  802. package/dist/config-sW57gztj.js +0 -44
  803. package/dist/config-validation-5LkjIKNt.js +0 -262
  804. package/dist/config-value-CtTWALxG.js +0 -132
  805. package/dist/configure-BmR2TPLf.js +0 -243
  806. package/dist/configure-DaLN-5xM.js +0 -1100
  807. package/dist/control-ui-assets-CH3MYmAo.js +0 -232
  808. package/dist/control-ui-shared-CA77PTml.js +0 -29
  809. package/dist/core-CvDzLs7B.js +0 -150
  810. package/dist/core-jm751KJ9.d.ts +0 -87
  811. package/dist/cron-cli-tguLpzyq.js +0 -639
  812. package/dist/daemon-cli-ptosOkL8.js +0 -339
  813. package/dist/daemon-install-DzU4EnVa.js +0 -180
  814. package/dist/deliver-DwxFoHM3.js +0 -111
  815. package/dist/deliver-runtime-DOdDyaPI.js +0 -111
  816. package/dist/device-id-cli-GopvlxxZ.js +0 -52
  817. package/dist/device-identity-CRfhC3_s.js +0 -365
  818. package/dist/devices-cli-ain7ESqU.js +0 -342
  819. package/dist/diagnostic-D96Xaqrj.js +0 -310
  820. package/dist/directory-cli-fh1UxGgY.js +0 -311
  821. package/dist/directory-config-helpers-Coivm0Mt.d.ts +0 -38
  822. package/dist/directory.static-CKjJUNGl.js +0 -44
  823. package/dist/discord-CflhwDEM.js +0 -114
  824. package/dist/discovery-x0ZqY4AB.js +0 -48
  825. package/dist/dm-policy-shared-DKzsSLlO.d.ts +0 -95
  826. package/dist/dns-cli-DCHyKjGf.js +0 -217
  827. package/dist/docs-cli-D3OoqYSP.js +0 -174
  828. package/dist/doctor-completion-Bq2eP87s.js +0 -90
  829. package/dist/doctor-config-flow-D8XRG9Ku.js +0 -2437
  830. package/dist/doctor-config-flow-DGiF1HGc.js +0 -112
  831. package/dist/enable-0QSF4YGH.js +0 -24
  832. package/dist/exec-approvals-cli-Bncym0Gd.js +0 -421
  833. package/dist/feishu-C1dM8pl2.d.ts +0 -36
  834. package/dist/gateway-cli-DYscsmA-.js +0 -26437
  835. package/dist/gateway-install-token-CNv17ac9.js +0 -163
  836. package/dist/gateway-rpc-BGC1Rxvg.js +0 -26
  837. package/dist/gateway-runtime-D89mSQPB.js +0 -69
  838. package/dist/git-commit-CeLH5Ozm.js +0 -2
  839. package/dist/git-commit-DUKRiCP-.js +0 -177
  840. package/dist/googlechat-BgXeXjd1.js +0 -307
  841. package/dist/googlechat-CNZQb1jd.d.ts +0 -12
  842. package/dist/group-access-Deh1tVNr.d.ts +0 -61
  843. package/dist/health-BEjzWwaB.js +0 -570
  844. package/dist/health-FjqrWQL6.js +0 -113
  845. package/dist/heartbeat-summary-CfdSA9M1.js +0 -57
  846. package/dist/help-BZeVprq1.js +0 -81
  847. package/dist/hooks-06OUQvAV.d.ts +0 -6
  848. package/dist/hooks-cli-B7uGJs2O.js +0 -1000
  849. package/dist/hooks-status-CfceaUSg.js +0 -78
  850. package/dist/http-registry-DYskWhOr.d.ts +0 -20
  851. package/dist/identity-file-sshkKKIr.js +0 -60
  852. package/dist/image-generation-D4o3j8o6.d.ts +0 -9
  853. package/dist/imessage-BcV3WGx_.js +0 -31
  854. package/dist/imessage-Dhje7Ty-.js +0 -115
  855. package/dist/inbound-reply-dispatch-C73_7SOl.js +0 -71
  856. package/dist/inbound-reply-dispatch-D6_HNqH8.d.ts +0 -72
  857. package/dist/install-target-D7NRhfzc.js +0 -574
  858. package/dist/installs-Bj6jblqc.js +0 -532
  859. package/dist/io-CMfWWPXQ.js +0 -9738
  860. package/dist/io-CV844hAM.js +0 -29
  861. package/dist/irc-DKi1fDYI.js +0 -672
  862. package/dist/library-rygTG3oA.js +0 -112
  863. package/dist/lifecycle-core-BPlvShWY.js +0 -382
  864. package/dist/line-B8gTtl3Y.d.ts +0 -75
  865. package/dist/line-CGsemKWJ.js +0 -530
  866. package/dist/llm-slug-generator-DlhVyMqT.js +0 -67
  867. package/dist/logging-5wu9k6w4.js +0 -30
  868. package/dist/logging-CxP9suT8.js +0 -13
  869. package/dist/login-qr-BcDsiwHs.js +0 -233
  870. package/dist/login-qr-Y8pJ5yV4.js +0 -112
  871. package/dist/logs-cli-XI9oVXpH.js +0 -256
  872. package/dist/manager-runtime-DkIlXBhD.js +0 -111
  873. package/dist/manager.runtime-Q0q2rJCC.js +0 -715
  874. package/dist/manifest-registry-DAd0SRAP.js +0 -1329
  875. package/dist/matrix-BI0DBBrG.js +0 -1495
  876. package/dist/matrix-D2JoHzb4.d.ts +0 -68
  877. package/dist/matrix-DiABGjJR.js +0 -1269
  878. package/dist/mcp-cli-BOyn_DLL.js +0 -87
  879. package/dist/media-understanding.runtime-DjUa7Dka.js +0 -116
  880. package/dist/memory-cli-CJd_vl-Y.js +0 -111
  881. package/dist/memory-search-CEEItIFR.js +0 -17
  882. package/dist/memory-search-Cv1SBrn7.js +0 -204
  883. package/dist/method-scopes-CQE7-bZ-.js +0 -2452
  884. package/dist/model-auth-markers-BFoM4IPf.d.ts +0 -20
  885. package/dist/model-picker-D6_89XHg.js +0 -112
  886. package/dist/model-picker-Svaw-APs.js +0 -390
  887. package/dist/model-picker.runtime-Chi9nV7A.js +0 -125
  888. package/dist/model-selection-hL8i1Jbs.js +0 -653
  889. package/dist/model-suppression.runtime-DjWJZ0X-.js +0 -116
  890. package/dist/models-7qj1dG_W.js +0 -118
  891. package/dist/models-BPOB_xJF.js +0 -2514
  892. package/dist/models-cli-DdlOVUjS.js +0 -309
  893. package/dist/models-config-CBqUS-jX.js +0 -111
  894. package/dist/models-config.providers.discovery-Dc905FWG.d.ts +0 -18
  895. package/dist/moldclaw-root-D6PbhbZk.js +0 -88
  896. package/dist/monitor-BPYhkEqF.js +0 -782
  897. package/dist/monitor-BuTcQ24j.js +0 -3468
  898. package/dist/monitor-CuXvNhFh.js +0 -113
  899. package/dist/monitor-D-TqSIHF.js +0 -6823
  900. package/dist/monitor-DRSgo9u2.js +0 -3076
  901. package/dist/monitor-DcHch39z.js +0 -772
  902. package/dist/monitor-DsHBMrXp.js +0 -115
  903. package/dist/monitor-shared-CL8T4gt1.js +0 -444
  904. package/dist/msteams-7FMwTvQG.js +0 -852
  905. package/dist/node-cli-BCjaSCZM.js +0 -2503
  906. package/dist/node-resolve-D5Hvcgyx.js +0 -835
  907. package/dist/nodes-cli-Dd_SNbkt.js +0 -1380
  908. package/dist/nostr-DBTFTxKs.js +0 -8744
  909. package/dist/nostr-DLqaIuZx.d.ts +0 -7
  910. package/dist/npm-resolution-CYfb3MHG.js +0 -60
  911. package/dist/oauth-env-zPt5RywA.js +0 -10
  912. package/dist/onboard-BEFQQeig.js +0 -25
  913. package/dist/onboard-CJHNyxJh.js +0 -48
  914. package/dist/onboard-D_3UeLEN.js +0 -589
  915. package/dist/onboard-channels-B_JL0Djc.js +0 -1241
  916. package/dist/onboard-channels-CqZzHt2C.js +0 -205
  917. package/dist/onboard-custom-CER3Ggbq.js +0 -571
  918. package/dist/onboard-custom-bNRdGECb.js +0 -114
  919. package/dist/onboard-helpers-BK0Hsb7Y.js +0 -335
  920. package/dist/onboard-helpers-CXZ5RPoR.js +0 -113
  921. package/dist/onboard-hooks-1NsxEDjH.js +0 -72
  922. package/dist/onboard-remote-DuKhC_7W.js +0 -117
  923. package/dist/onboard-remote-OwRcDuB3.js +0 -181
  924. package/dist/onboard-search-Cy8dOq2W.js +0 -302
  925. package/dist/onboard-skills-D5phRa6r.js +0 -117
  926. package/dist/onboard-skills-c9qWCNe9.js +0 -133
  927. package/dist/outbound-media-CXKqTh2X.d.ts +0 -11
  928. package/dist/outbound-media-DYRO2vTD.js +0 -11
  929. package/dist/pairing-access-BwJu1mkk.d.ts +0 -21
  930. package/dist/pairing-cli-BOnv0TYn.js +0 -217
  931. package/dist/perplexity-EZwC3y2b.js +0 -24
  932. package/dist/persistent-dedupe-hNES5tS1.d.ts +0 -26
  933. package/dist/pi-model-discovery-runtime-BToY3A6K.js +0 -111
  934. package/dist/pi-tools.before-tool-call.runtime-D_acPtld.js +0 -381
  935. package/dist/plugin-install-CgJpSjYd.js +0 -184
  936. package/dist/plugin-install-Cl1A4EF6.js +0 -117
  937. package/dist/plugin-install-plan-Dc2Z4DeU.js +0 -49
  938. package/dist/plugin-registry-B1UaWrQD.js +0 -49
  939. package/dist/plugin-registry-Cy8biwnn.js +0 -113
  940. package/dist/plugins-CXwvg50F.js +0 -111
  941. package/dist/plugins-cli-Uvzp2aYV.js +0 -917
  942. package/dist/policy-DsMBbEe7.js +0 -143
  943. package/dist/preflight-audio.runtime-hWsZIYvc.js +0 -116
  944. package/dist/probe-CNsSf1Uf.js +0 -6329
  945. package/dist/probe-CqOIrPhb.js +0 -47
  946. package/dist/probe-DH6gDw-h.js +0 -129
  947. package/dist/probe-DM16PLf4.js +0 -21
  948. package/dist/probe-DvAEEWYr.js +0 -1793
  949. package/dist/probe-auth-COfgCble.js +0 -48
  950. package/dist/probe-auth-I_5TX1Eh.js +0 -40
  951. package/dist/program-Dz80sgTU.js +0 -253
  952. package/dist/prompt-select-styled-wQehwFxK.js +0 -2673
  953. package/dist/provider-api-key-auth.runtime-BR9GU4ya.js +0 -121
  954. package/dist/provider-auth-choice-CdhA84kr.js +0 -126
  955. package/dist/provider-auth-choice-helpers-kabp_0zA.js +0 -48
  956. package/dist/provider-auth-choice-preference-se3zAM_2.js +0 -189
  957. package/dist/provider-auth-choice.runtime-BMc8-xNQ.js +0 -123
  958. package/dist/provider-auth-choices-CYsCViGi.js +0 -57
  959. package/dist/provider-auth-guidance-CMjUWlNf.js +0 -34
  960. package/dist/provider-auth-result-5xgWoVGi.d.ts +0 -18
  961. package/dist/provider-models-BCId_Lfu.js +0 -2113
  962. package/dist/provider-models-D-eFl9oH.d.ts +0 -867
  963. package/dist/provider-ollama-setup-B6XJZ0So.js +0 -314
  964. package/dist/provider-ollama-setup-BF1vhob8.d.ts +0 -32
  965. package/dist/provider-onboard-BjXHP3IZ.d.ts +0 -40
  966. package/dist/provider-onboard-Ca0TaNud.js +0 -139
  967. package/dist/provider-runtime.runtime-DwwkHw_7.js +0 -111
  968. package/dist/provider-self-hosted-setup-BEKLVGpj.js +0 -182
  969. package/dist/provider-self-hosted-setup-BQ5BIlpi.d.ts +0 -61
  970. package/dist/provider-stream-DrUD69ai.js +0 -512
  971. package/dist/provider-usage-BgKHCnjr.js +0 -111
  972. package/dist/provider-usage-D8EZpFz9.js +0 -633
  973. package/dist/provider-wizard-DMdb-zj_.js +0 -152
  974. package/dist/push-apns-BPH6d4VV.js +0 -1038
  975. package/dist/pw-ai-DttfldtL.js +0 -1867
  976. package/dist/qmd-manager-CybcDUfk.js +0 -1570
  977. package/dist/qr-cli-8NcmJ8Ft.js +0 -369
  978. package/dist/qr-cli-DWe0Our3.js +0 -113
  979. package/dist/reactions-D6N0LR16.js +0 -281
  980. package/dist/read-only-account-inspect.discord.runtime-CqUWTRfl.js +0 -116
  981. package/dist/read-only-account-inspect.slack.runtime-9-jpln3q.js +0 -116
  982. package/dist/read-only-account-inspect.telegram.runtime-EKPI1D7n.js +0 -116
  983. package/dist/redact-snapshot-DwJEIVk9.js +0 -2663
  984. package/dist/register.agent-D3YdDirP.js +0 -439
  985. package/dist/register.backup-dR27qCuo.js +0 -625
  986. package/dist/register.configure-BjFhkkka.js +0 -252
  987. package/dist/register.maintenance-DiMQJIOa.js +0 -574
  988. package/dist/register.message-CdZsKYH1.js +0 -709
  989. package/dist/register.onboard-B0rV1eaO.js +0 -192
  990. package/dist/register.setup-wKMvohzo.js +0 -212
  991. package/dist/register.status-health-sessions-BJ68m6pt.js +0 -498
  992. package/dist/register.subclis-CnnrWt2a.js +0 -315
  993. package/dist/register.subclis-lSvTkC6z.js +0 -13
  994. package/dist/replies-BABt9b48.js +0 -110
  995. package/dist/resolve-channels-BqZFl2Ux.js +0 -262
  996. package/dist/resolve-channels-DjQLXb7B.js +0 -226
  997. package/dist/resolve-route-CSHDsa_m.js +0 -538
  998. package/dist/resolve-users-BG6HaSR5.js +0 -143
  999. package/dist/root-help-ohmaCyC_.js +0 -32
  1000. package/dist/routes-4k2kpvoT.js +0 -7097
  1001. package/dist/rpc-Cnwn4Q6L.js +0 -67
  1002. package/dist/run-main-VYlacKA0.js +0 -424
  1003. package/dist/runtime-Cy8pqYUB.d.ts +0 -26
  1004. package/dist/runtime-discord-ops.runtime-DafrU-rI.js +0 -9078
  1005. package/dist/runtime-slack-ops.runtime-CdXBKXwd.js +0 -4556
  1006. package/dist/runtime-telegram-ops.runtime-B12sF7gE.js +0 -133
  1007. package/dist/runtime-whatsapp-login.runtime-CqEudH37.js +0 -114
  1008. package/dist/runtime-whatsapp-outbound.runtime-D5m2qyn-.js +0 -117
  1009. package/dist/sandbox-cli-CHJiEWXB.js +0 -535
  1010. package/dist/search-manager-BtNC3-i_.js +0 -16
  1011. package/dist/search-manager-C7J7B3_a.js +0 -386
  1012. package/dist/secrets-cli-C6yIWBbN.js +0 -2070
  1013. package/dist/security-cli-BVu9BkjD.js +0 -575
  1014. package/dist/send-BSreC7rr.js +0 -631
  1015. package/dist/send-BsLHQG_B.js +0 -1025
  1016. package/dist/send-BuNhp8PH.js +0 -283
  1017. package/dist/send-DOCswVar.js +0 -100
  1018. package/dist/send-Dl0LLErk.js +0 -629
  1019. package/dist/server-node-events-Bq2067EG.js +0 -506
  1020. package/dist/server-y38L7N5H.js +0 -107
  1021. package/dist/sessions-BV8gXURR.js +0 -112
  1022. package/dist/sessions-dl1Kc-Ci.js +0 -218
  1023. package/dist/setup-DGszQH0_.js +0 -387
  1024. package/dist/setup-DR5rRw9y.d.ts +0 -37
  1025. package/dist/setup-binary-C17YnmA8.js +0 -406
  1026. package/dist/setup-browser-CPx-nEsr.js +0 -70
  1027. package/dist/setup-core-BByHN1ME.js +0 -143
  1028. package/dist/setup-core-C0KPlBmL.js +0 -47
  1029. package/dist/setup-core-Cq37G6of.js +0 -166
  1030. package/dist/setup-core-uO84_Y75.js +0 -205
  1031. package/dist/setup-surface-BEMi7Rmb.js +0 -490
  1032. package/dist/setup-wizard-helpers-BtuGx_gN.d.ts +0 -203
  1033. package/dist/setup.finalize-BzPBa8zW.js +0 -522
  1034. package/dist/setup.gateway-config-DdwkF-8e.js +0 -343
  1035. package/dist/shared-BCw4SKjB.js +0 -96
  1036. package/dist/shared-CjNzsULP.js +0 -75
  1037. package/dist/shared-Cu1BE7ZE.js +0 -298
  1038. package/dist/shared-DSClmyUn.js +0 -182
  1039. package/dist/shared-DyJdGH6y.js +0 -102
  1040. package/dist/signal-Dyv4NZsB.js +0 -114
  1041. package/dist/skills-CbB5b27M.js +0 -853
  1042. package/dist/skills-CnfI7Szw.js +0 -20
  1043. package/dist/skills-cli-CavB1f_3.js +0 -292
  1044. package/dist/skills-install-B1OBdgd0.js +0 -763
  1045. package/dist/skills-status-B3gAmIbW.js +0 -169
  1046. package/dist/skills-status-DrHhFgU9.js +0 -21
  1047. package/dist/slack-BRzqnoAz.js +0 -114
  1048. package/dist/slash-commands.runtime-BK88kgds.js +0 -128
  1049. package/dist/slash-dispatch.runtime-COGywwJE.js +0 -141
  1050. package/dist/slash-skill-commands.runtime-Ti4brxgh.js +0 -116
  1051. package/dist/src-DUR6OQxI.js +0 -1701
  1052. package/dist/status-C6dgQY9a.js +0 -131
  1053. package/dist/status-CNK0Q7QH.js +0 -606
  1054. package/dist/status-DBcX0DSC.js +0 -43
  1055. package/dist/status-DKgFgbwv.js +0 -1599
  1056. package/dist/status-Wn5lhNAc.js +0 -126
  1057. package/dist/status-json-D2EkWqAl.js +0 -288
  1058. package/dist/status.link-channel-D3ULIdEa.js +0 -143
  1059. package/dist/status.scan.deps.runtime-BsjWTAm4.js +0 -126
  1060. package/dist/status.scan.runtime-D4HbzROD.js +0 -119
  1061. package/dist/status.summary-C3YxPrDK.js +0 -592
  1062. package/dist/status.summary.runtime-DAkXPSaK.js +0 -118
  1063. package/dist/status.update-B4NnN9P1.js +0 -77
  1064. package/dist/subagent-orphan-recovery-QiQEBv36.js +0 -307
  1065. package/dist/subagent-registry-runtime-BJatPQFK.js +0 -111
  1066. package/dist/subscription-BhZORXN9.js +0 -100
  1067. package/dist/subscription-QEUjQRMv.js +0 -33
  1068. package/dist/subscription-cli-HrULlAgc.js +0 -134
  1069. package/dist/synology-chat-DB76GWMN.js +0 -297
  1070. package/dist/system-cli-D8jDwWuL.js +0 -94
  1071. package/dist/telegram-BHiiqKkQ.js +0 -114
  1072. package/dist/text-chunking-Baonm9Lu.js +0 -84
  1073. package/dist/text-chunking-Y3dPBOuZ.d.ts +0 -79
  1074. package/dist/tlon-DLESxNgD.js +0 -433
  1075. package/dist/tui-C75zi2Cl.js +0 -3834
  1076. package/dist/tui-cli-DFwx5e6i.js +0 -137
  1077. package/dist/types-BBJ3Qz7j.d.ts +0 -45
  1078. package/dist/types-Ckufs_BY.d.ts +0 -22692
  1079. package/dist/types.base-Cw0-zIvE.d.ts +0 -188
  1080. package/dist/ui-B55NOIB6.js +0 -31
  1081. package/dist/update--ojavYQ4.js +0 -1036
  1082. package/dist/update-cli-Cvj5aWYM.js +0 -1503
  1083. package/dist/update-offset-store-upatuWwX.js +0 -112
  1084. package/dist/update-runner-DHkY_-76.js +0 -1496
  1085. package/dist/upsert-with-lock-C171GLaR.js +0 -33
  1086. package/dist/usage-N3bxnbmt.js +0 -115
  1087. package/dist/web-RdvT7gKa.js +0 -112
  1088. package/dist/web-shared-HSGD3yGt.d.ts +0 -45
  1089. package/dist/webhook-request-guards-CosLyl01.d.ts +0 -76
  1090. package/dist/webhook-targets-Bfnag-du.js +0 -181
  1091. package/dist/webhook-targets-Di17rt8e.d.ts +0 -106
  1092. package/dist/webhooks-cli-ZpnXrq7G.js +0 -350
  1093. package/dist/whatsapp-DNTAyZHt.js +0 -114
  1094. package/dist/whatsapp-actions-o1zKQzKZ.js +0 -167
  1095. package/dist/workspace-CpWi5wPr.js +0 -479
  1096. package/dist/workspace-Ii7aRS7c.js +0 -289
  1097. package/dist/workspace-dirs-x10McA9t.js +0 -2003
  1098. package/dist/zalo-BN3VCrRY.d.ts +0 -9
  1099. package/dist/zalo-zm_bYCKg.js +0 -415
  1100. package/dist/zalouser-CvVEUvc5.js +0 -30911
  1101. /package/dist/{account-id-B3YSn4hl.d.ts → account-id-B8ce6G_4.d.ts} +0 -0
  1102. /package/dist/{acpx-CnNv70m2.d.ts → acpx-Ci50I9T2.d.ts} +0 -0
  1103. /package/dist/{agent-media-payload-DE2pEcsz.d.ts → agent-media-payload-en-gS5p6.d.ts} +0 -0
  1104. /package/dist/{allow-from-DPpHnT2A.d.ts → allow-from-cMeQ47Ot.d.ts} +0 -0
  1105. /package/dist/{allowlist-resolution-CLFiZ6nE.d.ts → allowlist-resolution-DoAWbfXV.d.ts} +0 -0
  1106. /package/dist/{bluebubbles-Duhu-Jer.d.ts → bluebubbles-C6yYmUl0.d.ts} +0 -0
  1107. /package/dist/{boolean-param-BhFjB3gp.d.ts → boolean-param-CdO2TFTk.d.ts} +0 -0
  1108. /package/dist/{channel-config-schema-DnnVMdjR.d.ts → channel-config-schema-Chp38wel.d.ts} +0 -0
  1109. /package/dist/{channel-policy-Baq-Z06b.d.ts → channel-policy-g2h6AbYQ.d.ts} +0 -0
  1110. /package/dist/{chat-type-DpiBgwuG.d.ts → chat-type-BLt59pPT.d.ts} +0 -0
  1111. /package/dist/{command-format-vi4xq8e8.d.ts → command-format-BDJC05Jp.d.ts} +0 -0
  1112. /package/dist/{diffs-DK7fVSDo.d.ts → diffs-D_iNKCyn.d.ts} +0 -0
  1113. /package/dist/{directory-runtime-BTLPaysA.d.ts → directory-runtime-DhMex6HY.d.ts} +0 -0
  1114. /package/dist/{exec-C01wtBHu.d.ts → exec-pjfUY4KM.d.ts} +0 -0
  1115. /package/dist/{gaxios-fetch-compat-wZ38b3w3.js → gaxios-fetch-compat-B_vtINdV.js} +0 -0
  1116. /package/dist/{history-CwXuP2TW.d.ts → history-aqSS5VGQ.d.ts} +0 -0
  1117. /package/dist/{inbound-envelope-SggrBs9m.d.ts → inbound-envelope-C5hWuZod.d.ts} +0 -0
  1118. /package/dist/{index-apAZHsDo.d.ts → index-DXVQFYGX.d.ts} +0 -0
  1119. /package/dist/{json-store-r75IZGk9.d.ts → json-store-UnqQ5aV3.d.ts} +0 -0
  1120. /package/dist/{keyed-async-queue-DHIr7yNe.d.ts → keyed-async-queue-guucpLw3.d.ts} +0 -0
  1121. /package/dist/{links-HeQ3r_L0.d.ts → links-Bar0meEK.d.ts} +0 -0
  1122. /package/dist/{markdown-to-line-CDb4Jy3V.d.ts → markdown-to-line-D8uH_KOj.d.ts} +0 -0
  1123. /package/dist/{mattermost-DtCsxpgg.d.ts → mattermost-xl7jAFJL.d.ts} +0 -0
  1124. /package/dist/{net-BATPDwdQ.d.ts → net-rGOKGds6.d.ts} +0 -0
  1125. /package/dist/{nextcloud-talk-Bb2wHOwp.d.ts → nextcloud-talk-De2CZ9dV.d.ts} +0 -0
  1126. /package/dist/{oauth-utils-u567CLT0.d.ts → oauth-utils-DzN1AlEH.d.ts} +0 -0
  1127. /package/dist/{parse-finite-number-l3tNlrZh.d.ts → parse-finite-number-odgyqhi0.d.ts} +0 -0
  1128. /package/dist/{provider-usage.types-C6061OVN.d.ts → provider-usage.types-EDE9o-H_.d.ts} +0 -0
  1129. /package/dist/{reply-history-BDsFnZFl.d.ts → reply-history-CVuU31xe.d.ts} +0 -0
  1130. /package/dist/{reply-payload-CCvM4W9u.d.ts → reply-payload-CHkpBYwL.d.ts} +0 -0
  1131. /package/dist/{request-url-C54l4-xC.d.ts → request-url-DHisbiHY.d.ts} +0 -0
  1132. /package/dist/{run-command-D3RqWcHu.d.ts → run-command-y0Cndsb1.d.ts} +0 -0
  1133. /package/dist/{secret-input-schema-BLBt-NAP.d.ts → secret-input-schema-b1vpYDQN.d.ts} +0 -0
  1134. /package/dist/{session-key-BQ2-bR-9.d.ts → session-key-DTHQl57f.d.ts} +0 -0
  1135. /package/dist/{ssh-config-C4mcH9Ly.js → ssh-config-hEHBfU2_.js} +0 -0
  1136. /package/dist/{testing-DLkhGsoz.d.ts → testing-DszuZXgK.d.ts} +0 -0
  1137. /package/dist/{thinking-DRkjX18p.d.ts → thinking-IwXTGSeT.d.ts} +0 -0
  1138. /package/dist/{tool-send-CMMD1uDu.d.ts → tool-send-DWHRmKpz.d.ts} +0 -0
  1139. /package/dist/{vllm-defaults-CcGuf4hL.d.ts → vllm-defaults-CrxZgE6-.d.ts} +0 -0
  1140. /package/dist/{wait-Daog8bxM.d.ts → wait-wDWw_MTI.d.ts} +0 -0
  1141. /package/dist/{webhook-memory-guards-C5MrExwT.d.ts → webhook-memory-guards-DreORuJy.d.ts} +0 -0
  1142. /package/dist/{windows-spawn-j2l-dqu8.d.ts → windows-spawn-BIzH92x2.d.ts} +0 -0
  1143. /package/dist/{zod-schema.agent-runtime-krMrBnIn.d.ts → zod-schema.agent-runtime-CP2rmis3.d.ts} +0 -0
  1144. /package/dist/{zod-schema.core-BNDieZDZ.d.ts → zod-schema.core-Foi1tYwi.d.ts} +0 -0
@@ -0,0 +1,1867 @@
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 "./runtime-_tQz41uA.js";
9
+ import "./ansi-BPhP6LBZ.js";
10
+ import "./subsystem-CPmDTJ2P.js";
11
+ import "./boolean-B6zcAynR.js";
12
+ import "./env-D42cffog.js";
13
+ import "./utils-C7ykRPCQ.js";
14
+ import "./model-selection-bBBxfXdb.js";
15
+ import "./agent-scope-lZlwP1At.js";
16
+ import "./boundary-file-read-tPYh_8fH.js";
17
+ import "./logger-BGzLUitz.js";
18
+ import "./exec-CvEtXqTZ.js";
19
+ import "./workspace-DJ_S272u.js";
20
+ import "./io-BaBxjB1v.js";
21
+ import "./host-env-security-DQ2i_W12.js";
22
+ import "./safe-text-Cnulee_z.js";
23
+ import "./version-T8nMYUnU.js";
24
+ import "./env-substitution-68cyvF5h.js";
25
+ import "./config-state-h5jUoHya.js";
26
+ import "./network-mode-BtWXzwYn.js";
27
+ import "./registry-C1pRrsQl.js";
28
+ import "./manifest-registry-CS_p1OBQ.js";
29
+ import "./ip-C4YAIpr4.js";
30
+ import "./zod-schema.core-DvwgNmpd.js";
31
+ import "./config-CwBv71QC.js";
32
+ import "./audit-fs-CMb-YUHX.js";
33
+ import "./resolve-PSlwZjg3.js";
34
+ import "./config-BwkGZjD5.js";
35
+ import { t as formatCliCommand } from "./command-format-C_z0Ru-7.js";
36
+ import "./tailnet-fFTz5Twr.js";
37
+ import "./net-K181nxTH.js";
38
+ import "./credentials-D-5Pb-aZ.js";
39
+ 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-CcJNnwTF.js";
40
+ import "./path-alias-guards-BtSO7sk7.js";
41
+ import "./ports-Ca74cFb2.js";
42
+ import "./ports-lsof-CoiADo0p.js";
43
+ import "./image-ops-Ck_D_vpe.js";
44
+ import { d as writeFileFromPathWithinRoot } from "./fs-safe-CRXFoBmh.js";
45
+ import "./mime-DGFQe4XX.js";
46
+ import path from "node:path";
47
+ import fs from "node:fs/promises";
48
+ import crypto from "node:crypto";
49
+ import { chromium, devices } from "playwright-core";
50
+ //#region src/browser/pw-session.page-cdp.ts
51
+ async function withPlaywrightPageCdpSession(page, fn) {
52
+ const session = await page.context().newCDPSession(page);
53
+ try {
54
+ return await fn(session);
55
+ } finally {
56
+ await session.detach().catch(() => {});
57
+ }
58
+ }
59
+ async function withPageScopedCdpClient(opts) {
60
+ return await withPlaywrightPageCdpSession(opts.page, async (session) => {
61
+ return await opts.fn((method, params) => session.send(method, params));
62
+ });
63
+ }
64
+ //#endregion
65
+ //#region src/browser/pw-session.ts
66
+ const pageStates = /* @__PURE__ */ new WeakMap();
67
+ const contextStates = /* @__PURE__ */ new WeakMap();
68
+ const observedContexts = /* @__PURE__ */ new WeakSet();
69
+ const observedPages = /* @__PURE__ */ new WeakSet();
70
+ const roleRefsByTarget = /* @__PURE__ */ new Map();
71
+ const MAX_ROLE_REFS_CACHE = 50;
72
+ const MAX_CONSOLE_MESSAGES = 500;
73
+ const MAX_PAGE_ERRORS = 200;
74
+ const MAX_NETWORK_REQUESTS = 500;
75
+ const cachedByCdpUrl = /* @__PURE__ */ new Map();
76
+ const connectingByCdpUrl = /* @__PURE__ */ new Map();
77
+ function normalizeCdpUrl(raw) {
78
+ return raw.replace(/\/$/, "");
79
+ }
80
+ function findNetworkRequestById(state, id) {
81
+ for (let i = state.requests.length - 1; i >= 0; i -= 1) {
82
+ const candidate = state.requests[i];
83
+ if (candidate && candidate.id === id) return candidate;
84
+ }
85
+ }
86
+ function roleRefsKey(cdpUrl, targetId) {
87
+ return `${normalizeCdpUrl(cdpUrl)}::${targetId}`;
88
+ }
89
+ function rememberRoleRefsForTarget(opts) {
90
+ const targetId = opts.targetId.trim();
91
+ if (!targetId) return;
92
+ roleRefsByTarget.set(roleRefsKey(opts.cdpUrl, targetId), {
93
+ refs: opts.refs,
94
+ ...opts.frameSelector ? { frameSelector: opts.frameSelector } : {},
95
+ ...opts.mode ? { mode: opts.mode } : {}
96
+ });
97
+ while (roleRefsByTarget.size > MAX_ROLE_REFS_CACHE) {
98
+ const first = roleRefsByTarget.keys().next();
99
+ if (first.done) break;
100
+ roleRefsByTarget.delete(first.value);
101
+ }
102
+ }
103
+ function storeRoleRefsForTarget(opts) {
104
+ const state = ensurePageState(opts.page);
105
+ state.roleRefs = opts.refs;
106
+ state.roleRefsFrameSelector = opts.frameSelector;
107
+ state.roleRefsMode = opts.mode;
108
+ if (!opts.targetId?.trim()) return;
109
+ rememberRoleRefsForTarget({
110
+ cdpUrl: opts.cdpUrl,
111
+ targetId: opts.targetId,
112
+ refs: opts.refs,
113
+ frameSelector: opts.frameSelector,
114
+ mode: opts.mode
115
+ });
116
+ }
117
+ function restoreRoleRefsForTarget(opts) {
118
+ const targetId = opts.targetId?.trim() || "";
119
+ if (!targetId) return;
120
+ const cached = roleRefsByTarget.get(roleRefsKey(opts.cdpUrl, targetId));
121
+ if (!cached) return;
122
+ const state = ensurePageState(opts.page);
123
+ if (state.roleRefs) return;
124
+ state.roleRefs = cached.refs;
125
+ state.roleRefsFrameSelector = cached.frameSelector;
126
+ state.roleRefsMode = cached.mode;
127
+ }
128
+ function ensurePageState(page) {
129
+ const existing = pageStates.get(page);
130
+ if (existing) return existing;
131
+ const state = {
132
+ console: [],
133
+ errors: [],
134
+ requests: [],
135
+ requestIds: /* @__PURE__ */ new WeakMap(),
136
+ nextRequestId: 0,
137
+ armIdUpload: 0,
138
+ armIdDialog: 0,
139
+ armIdDownload: 0
140
+ };
141
+ pageStates.set(page, state);
142
+ if (!observedPages.has(page)) {
143
+ observedPages.add(page);
144
+ page.on("console", (msg) => {
145
+ const entry = {
146
+ type: msg.type(),
147
+ text: msg.text(),
148
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
149
+ location: msg.location()
150
+ };
151
+ state.console.push(entry);
152
+ if (state.console.length > MAX_CONSOLE_MESSAGES) state.console.shift();
153
+ });
154
+ page.on("pageerror", (err) => {
155
+ state.errors.push({
156
+ message: err?.message ? String(err.message) : String(err),
157
+ name: err?.name ? String(err.name) : void 0,
158
+ stack: err?.stack ? String(err.stack) : void 0,
159
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
160
+ });
161
+ if (state.errors.length > MAX_PAGE_ERRORS) state.errors.shift();
162
+ });
163
+ page.on("request", (req) => {
164
+ state.nextRequestId += 1;
165
+ const id = `r${state.nextRequestId}`;
166
+ state.requestIds.set(req, id);
167
+ state.requests.push({
168
+ id,
169
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
170
+ method: req.method(),
171
+ url: req.url(),
172
+ resourceType: req.resourceType()
173
+ });
174
+ if (state.requests.length > MAX_NETWORK_REQUESTS) state.requests.shift();
175
+ });
176
+ page.on("response", (resp) => {
177
+ const req = resp.request();
178
+ const id = state.requestIds.get(req);
179
+ if (!id) return;
180
+ const rec = findNetworkRequestById(state, id);
181
+ if (!rec) return;
182
+ rec.status = resp.status();
183
+ rec.ok = resp.ok();
184
+ });
185
+ page.on("requestfailed", (req) => {
186
+ const id = state.requestIds.get(req);
187
+ if (!id) return;
188
+ const rec = findNetworkRequestById(state, id);
189
+ if (!rec) return;
190
+ rec.failureText = req.failure()?.errorText;
191
+ rec.ok = false;
192
+ });
193
+ page.on("close", () => {
194
+ pageStates.delete(page);
195
+ observedPages.delete(page);
196
+ });
197
+ }
198
+ return state;
199
+ }
200
+ function observeContext(context) {
201
+ if (observedContexts.has(context)) return;
202
+ observedContexts.add(context);
203
+ ensureContextState(context);
204
+ for (const page of context.pages()) ensurePageState(page);
205
+ context.on("page", (page) => ensurePageState(page));
206
+ }
207
+ function ensureContextState(context) {
208
+ const existing = contextStates.get(context);
209
+ if (existing) return existing;
210
+ const state = { traceActive: false };
211
+ contextStates.set(context, state);
212
+ return state;
213
+ }
214
+ function observeBrowser(browser) {
215
+ for (const context of browser.contexts()) observeContext(context);
216
+ }
217
+ async function connectBrowser(cdpUrl) {
218
+ const normalized = normalizeCdpUrl(cdpUrl);
219
+ const cached = cachedByCdpUrl.get(normalized);
220
+ if (cached) return cached;
221
+ const connecting = connectingByCdpUrl.get(normalized);
222
+ if (connecting) return await connecting;
223
+ const connectWithRetry = async () => {
224
+ let lastErr;
225
+ for (let attempt = 0; attempt < 3; attempt += 1) try {
226
+ const timeout = 5e3 + attempt * 2e3;
227
+ const endpoint = await getChromeWebSocketUrl(normalized, timeout).catch(() => null) ?? normalized;
228
+ const headers = getHeadersWithAuth(endpoint);
229
+ const browser = await withNoProxyForCdpUrl(endpoint, () => chromium.connectOverCDP(endpoint, {
230
+ timeout,
231
+ headers
232
+ }));
233
+ const onDisconnected = () => {
234
+ if (cachedByCdpUrl.get(normalized)?.browser === browser) cachedByCdpUrl.delete(normalized);
235
+ };
236
+ const connected = {
237
+ browser,
238
+ cdpUrl: normalized,
239
+ onDisconnected
240
+ };
241
+ cachedByCdpUrl.set(normalized, connected);
242
+ browser.on("disconnected", onDisconnected);
243
+ observeBrowser(browser);
244
+ return connected;
245
+ } catch (err) {
246
+ lastErr = err;
247
+ if ((err instanceof Error ? err.message : String(err)).includes("rate limit")) break;
248
+ const delay = 250 + attempt * 250;
249
+ await new Promise((r) => setTimeout(r, delay));
250
+ }
251
+ if (lastErr instanceof Error) throw lastErr;
252
+ const message = lastErr ? formatErrorMessage(lastErr) : "CDP connect failed";
253
+ throw new Error(message);
254
+ };
255
+ const pending = connectWithRetry().finally(() => {
256
+ connectingByCdpUrl.delete(normalized);
257
+ });
258
+ connectingByCdpUrl.set(normalized, pending);
259
+ return await pending;
260
+ }
261
+ async function getAllPages(browser) {
262
+ return browser.contexts().flatMap((c) => c.pages());
263
+ }
264
+ async function pageTargetId(page) {
265
+ const session = await page.context().newCDPSession(page);
266
+ try {
267
+ const info = await session.send("Target.getTargetInfo");
268
+ return String(info?.targetInfo?.targetId ?? "").trim() || null;
269
+ } finally {
270
+ await session.detach().catch(() => {});
271
+ }
272
+ }
273
+ function matchPageByTargetList(pages, targets, targetId) {
274
+ const target = targets.find((entry) => entry.id === targetId);
275
+ if (!target) return null;
276
+ const urlMatch = pages.filter((page) => page.url() === target.url);
277
+ if (urlMatch.length === 1) return urlMatch[0] ?? null;
278
+ if (urlMatch.length > 1) {
279
+ const sameUrlTargets = targets.filter((entry) => entry.url === target.url);
280
+ if (sameUrlTargets.length === urlMatch.length) {
281
+ const idx = sameUrlTargets.findIndex((entry) => entry.id === targetId);
282
+ if (idx >= 0 && idx < urlMatch.length) return urlMatch[idx] ?? null;
283
+ }
284
+ }
285
+ return null;
286
+ }
287
+ async function findPageByTargetIdViaTargetList(pages, targetId, cdpUrl) {
288
+ return matchPageByTargetList(pages, await fetchJson(appendCdpPath(normalizeCdpHttpBaseForJsonEndpoints(cdpUrl), "/json/list"), 2e3), targetId);
289
+ }
290
+ async function findPageByTargetId(browser, targetId, cdpUrl) {
291
+ const pages = await getAllPages(browser);
292
+ let resolvedViaCdp = false;
293
+ for (const page of pages) {
294
+ let tid = null;
295
+ try {
296
+ tid = await pageTargetId(page);
297
+ resolvedViaCdp = true;
298
+ } catch {
299
+ tid = null;
300
+ }
301
+ if (tid && tid === targetId) return page;
302
+ }
303
+ if (cdpUrl) try {
304
+ return await findPageByTargetIdViaTargetList(pages, targetId, cdpUrl);
305
+ } catch {}
306
+ if (!resolvedViaCdp && pages.length === 1) return pages[0] ?? null;
307
+ return null;
308
+ }
309
+ async function resolvePageByTargetIdOrThrow(opts) {
310
+ const { browser } = await connectBrowser(opts.cdpUrl);
311
+ const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
312
+ if (!page) throw new BrowserTabNotFoundError();
313
+ return page;
314
+ }
315
+ async function getPageForTargetId(opts) {
316
+ const { browser } = await connectBrowser(opts.cdpUrl);
317
+ const pages = await getAllPages(browser);
318
+ if (!pages.length) throw new Error("No pages available in the connected browser.");
319
+ const first = pages[0];
320
+ if (!opts.targetId) return first;
321
+ const found = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
322
+ if (!found) {
323
+ if (pages.length === 1) return first;
324
+ throw new BrowserTabNotFoundError();
325
+ }
326
+ return found;
327
+ }
328
+ function refLocator(page, ref) {
329
+ const normalized = ref.startsWith("@") ? ref.slice(1) : ref.startsWith("ref=") ? ref.slice(4) : ref;
330
+ if (/^e\d+$/.test(normalized)) {
331
+ const state = pageStates.get(page);
332
+ if (state?.roleRefsMode === "aria") return (state.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page).locator(`aria-ref=${normalized}`);
333
+ const info = state?.roleRefs?.[normalized];
334
+ if (!info) throw new Error(`Unknown ref "${normalized}". Run a new snapshot and use a ref from that snapshot.`);
335
+ const locAny = state?.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page;
336
+ const locator = info.name ? locAny.getByRole(info.role, {
337
+ name: info.name,
338
+ exact: true
339
+ }) : locAny.getByRole(info.role);
340
+ return info.nth !== void 0 ? locator.nth(info.nth) : locator;
341
+ }
342
+ return page.locator(`aria-ref=${normalized}`);
343
+ }
344
+ async function closePlaywrightBrowserConnection(opts) {
345
+ const normalized = opts?.cdpUrl ? normalizeCdpUrl(opts.cdpUrl) : null;
346
+ if (normalized) {
347
+ const cur = cachedByCdpUrl.get(normalized);
348
+ cachedByCdpUrl.delete(normalized);
349
+ connectingByCdpUrl.delete(normalized);
350
+ if (!cur) return;
351
+ if (cur.onDisconnected && typeof cur.browser.off === "function") cur.browser.off("disconnected", cur.onDisconnected);
352
+ await cur.browser.close().catch(() => {});
353
+ return;
354
+ }
355
+ const connections = Array.from(cachedByCdpUrl.values());
356
+ cachedByCdpUrl.clear();
357
+ connectingByCdpUrl.clear();
358
+ for (const cur of connections) {
359
+ if (cur.onDisconnected && typeof cur.browser.off === "function") cur.browser.off("disconnected", cur.onDisconnected);
360
+ await cur.browser.close().catch(() => {});
361
+ }
362
+ }
363
+ function cdpSocketNeedsAttach(wsUrl) {
364
+ try {
365
+ const pathname = new URL(wsUrl).pathname;
366
+ return pathname === "/cdp" || pathname.endsWith("/cdp") || pathname.includes("/devtools/browser/");
367
+ } catch {
368
+ return false;
369
+ }
370
+ }
371
+ async function tryTerminateExecutionViaCdp(opts) {
372
+ const cdpHttpBase = normalizeCdpHttpBaseForJsonEndpoints(opts.cdpUrl);
373
+ const pages = await fetchJson(appendCdpPath(cdpHttpBase, "/json/list"), 2e3).catch(() => null);
374
+ if (!pages || pages.length === 0) return;
375
+ const target = pages.find((p) => String(p.id ?? "").trim() === opts.targetId);
376
+ const wsUrlRaw = String(target?.webSocketDebuggerUrl ?? "").trim();
377
+ if (!wsUrlRaw) return;
378
+ const wsUrl = normalizeCdpWsUrl(wsUrlRaw, cdpHttpBase);
379
+ const needsAttach = cdpSocketNeedsAttach(wsUrl);
380
+ const runWithTimeout = async (work, ms) => {
381
+ let timer;
382
+ const timeoutPromise = new Promise((_, reject) => {
383
+ timer = setTimeout(() => reject(/* @__PURE__ */ new Error("CDP command timed out")), ms);
384
+ });
385
+ try {
386
+ return await Promise.race([work, timeoutPromise]);
387
+ } finally {
388
+ if (timer) clearTimeout(timer);
389
+ }
390
+ };
391
+ await withCdpSocket(wsUrl, async (send) => {
392
+ let sessionId;
393
+ try {
394
+ if (needsAttach) {
395
+ const attached = await runWithTimeout(send("Target.attachToTarget", {
396
+ targetId: opts.targetId,
397
+ flatten: true
398
+ }), 1500);
399
+ if (typeof attached?.sessionId === "string" && attached.sessionId.trim()) sessionId = attached.sessionId;
400
+ }
401
+ await runWithTimeout(send("Runtime.terminateExecution", void 0, sessionId), 1500);
402
+ if (sessionId) send("Target.detachFromTarget", { sessionId }).catch(() => {});
403
+ } catch {}
404
+ }, { handshakeTimeoutMs: 2e3 }).catch(() => {});
405
+ }
406
+ /**
407
+ * Best-effort cancellation for stuck page operations.
408
+ *
409
+ * Playwright serializes CDP commands per page; a long-running or stuck operation (notably evaluate)
410
+ * can block all subsequent commands. We cannot safely "cancel" an individual command, and we do
411
+ * not want to close the actual Chromium tab. Instead, we disconnect Playwright's CDP connection
412
+ * so in-flight commands fail fast and the next request reconnects transparently.
413
+ *
414
+ * IMPORTANT: We CANNOT call Connection.close() because Playwright shares a single Connection
415
+ * across all objects (BrowserType, Browser, etc.). Closing it corrupts the entire Playwright
416
+ * instance, preventing reconnection.
417
+ *
418
+ * Instead we:
419
+ * 1. Null out `cached` so the next call triggers a fresh connectOverCDP
420
+ * 2. Fire-and-forget browser.close() — it may hang but won't block us
421
+ * 3. The next connectBrowser() creates a completely new CDP WebSocket connection
422
+ *
423
+ * The old browser.close() eventually resolves when the in-browser evaluate timeout fires,
424
+ * or the old connection gets GC'd. Either way, it doesn't affect the fresh connection.
425
+ */
426
+ async function forceDisconnectPlaywrightForTarget(opts) {
427
+ const normalized = normalizeCdpUrl(opts.cdpUrl);
428
+ const cur = cachedByCdpUrl.get(normalized);
429
+ if (!cur) return;
430
+ cachedByCdpUrl.delete(normalized);
431
+ connectingByCdpUrl.delete(normalized);
432
+ if (cur.onDisconnected && typeof cur.browser.off === "function") cur.browser.off("disconnected", cur.onDisconnected);
433
+ const targetId = opts.targetId?.trim() || "";
434
+ if (targetId) await tryTerminateExecutionViaCdp({
435
+ cdpUrl: normalized,
436
+ targetId
437
+ }).catch(() => {});
438
+ cur.browser.close().catch(() => {});
439
+ }
440
+ /**
441
+ * List all pages/tabs from the persistent Playwright connection.
442
+ * Used for remote profiles where HTTP-based /json/list is ephemeral.
443
+ */
444
+ async function listPagesViaPlaywright(opts) {
445
+ const { browser } = await connectBrowser(opts.cdpUrl);
446
+ const pages = await getAllPages(browser);
447
+ const results = [];
448
+ for (const page of pages) {
449
+ const tid = await pageTargetId(page).catch(() => null);
450
+ if (tid) results.push({
451
+ targetId: tid,
452
+ title: await page.title().catch(() => ""),
453
+ url: page.url(),
454
+ type: "page"
455
+ });
456
+ }
457
+ return results;
458
+ }
459
+ /**
460
+ * Create a new page/tab using the persistent Playwright connection.
461
+ * Used for remote profiles where HTTP-based /json/new is ephemeral.
462
+ * Returns the new page's targetId and metadata.
463
+ */
464
+ async function createPageViaPlaywright(opts) {
465
+ const { browser } = await connectBrowser(opts.cdpUrl);
466
+ const context = browser.contexts()[0] ?? await browser.newContext();
467
+ ensureContextState(context);
468
+ const page = await context.newPage();
469
+ ensurePageState(page);
470
+ const targetUrl = opts.url.trim() || "about:blank";
471
+ if (targetUrl !== "about:blank") {
472
+ const navigationPolicy = withBrowserNavigationPolicy(opts.ssrfPolicy);
473
+ await assertBrowserNavigationAllowed({
474
+ url: targetUrl,
475
+ ...navigationPolicy
476
+ });
477
+ await assertBrowserNavigationRedirectChainAllowed({
478
+ request: (await page.goto(targetUrl, { timeout: 3e4 }).catch(() => {
479
+ return null;
480
+ }))?.request(),
481
+ ...navigationPolicy
482
+ });
483
+ await assertBrowserNavigationResultAllowed({
484
+ url: page.url(),
485
+ ...navigationPolicy
486
+ });
487
+ }
488
+ const tid = await pageTargetId(page).catch(() => null);
489
+ if (!tid) throw new Error("Failed to get targetId for new page");
490
+ return {
491
+ targetId: tid,
492
+ title: await page.title().catch(() => ""),
493
+ url: page.url(),
494
+ type: "page"
495
+ };
496
+ }
497
+ /**
498
+ * Close a page/tab by targetId using the persistent Playwright connection.
499
+ * Used for remote profiles where HTTP-based /json/close is ephemeral.
500
+ */
501
+ async function closePageByTargetIdViaPlaywright(opts) {
502
+ await (await resolvePageByTargetIdOrThrow(opts)).close();
503
+ }
504
+ /**
505
+ * Focus a page/tab by targetId using the persistent Playwright connection.
506
+ * Used for remote profiles where HTTP-based /json/activate can be ephemeral.
507
+ */
508
+ async function focusPageByTargetIdViaPlaywright(opts) {
509
+ const page = await resolvePageByTargetIdOrThrow(opts);
510
+ try {
511
+ await page.bringToFront();
512
+ } catch (err) {
513
+ try {
514
+ await withPageScopedCdpClient({
515
+ cdpUrl: opts.cdpUrl,
516
+ page,
517
+ targetId: opts.targetId,
518
+ fn: async (send) => {
519
+ await send("Page.bringToFront");
520
+ }
521
+ });
522
+ return;
523
+ } catch {
524
+ throw err;
525
+ }
526
+ }
527
+ }
528
+ //#endregion
529
+ //#region src/browser/pw-tools-core.activity.ts
530
+ async function getPageErrorsViaPlaywright(opts) {
531
+ const state = ensurePageState(await getPageForTargetId(opts));
532
+ const errors = [...state.errors];
533
+ if (opts.clear) state.errors = [];
534
+ return { errors };
535
+ }
536
+ async function getNetworkRequestsViaPlaywright(opts) {
537
+ const state = ensurePageState(await getPageForTargetId(opts));
538
+ const raw = [...state.requests];
539
+ const filter = typeof opts.filter === "string" ? opts.filter.trim() : "";
540
+ const requests = filter ? raw.filter((r) => r.url.includes(filter)) : raw;
541
+ if (opts.clear) {
542
+ state.requests = [];
543
+ state.requestIds = /* @__PURE__ */ new WeakMap();
544
+ }
545
+ return { requests };
546
+ }
547
+ function consolePriority(level) {
548
+ switch (level) {
549
+ case "error": return 3;
550
+ case "warning": return 2;
551
+ case "info":
552
+ case "log": return 1;
553
+ case "debug": return 0;
554
+ default: return 1;
555
+ }
556
+ }
557
+ async function getConsoleMessagesViaPlaywright(opts) {
558
+ const state = ensurePageState(await getPageForTargetId(opts));
559
+ if (!opts.level) return [...state.console];
560
+ const min = consolePriority(opts.level);
561
+ return state.console.filter((msg) => consolePriority(msg.type) >= min);
562
+ }
563
+ //#endregion
564
+ //#region src/browser/safe-filename.ts
565
+ function sanitizeUntrustedFileName(fileName, fallbackName) {
566
+ const trimmed = String(fileName ?? "").trim();
567
+ if (!trimmed) return fallbackName;
568
+ let base = path.posix.basename(trimmed);
569
+ base = path.win32.basename(base);
570
+ let cleaned = "";
571
+ for (let i = 0; i < base.length; i++) {
572
+ const code = base.charCodeAt(i);
573
+ if (code < 32 || code === 127) continue;
574
+ cleaned += base[i];
575
+ }
576
+ base = cleaned.trim();
577
+ if (!base || base === "." || base === "..") return fallbackName;
578
+ if (base.length > 200) base = base.slice(0, 200);
579
+ return base;
580
+ }
581
+ //#endregion
582
+ //#region src/browser/output-atomic.ts
583
+ function buildSiblingTempPath(targetPath) {
584
+ const id = crypto.randomUUID();
585
+ const safeTail = sanitizeUntrustedFileName(path.basename(targetPath), "output.bin");
586
+ return path.join(path.dirname(targetPath), `.moldclaw-output-${id}-${safeTail}.part`);
587
+ }
588
+ async function writeViaSiblingTempPath(params) {
589
+ const rootDir = await fs.realpath(path.resolve(params.rootDir)).catch(() => path.resolve(params.rootDir));
590
+ const requestedTargetPath = path.resolve(params.targetPath);
591
+ const targetPath = await fs.realpath(path.dirname(requestedTargetPath)).then((realDir) => path.join(realDir, path.basename(requestedTargetPath))).catch(() => requestedTargetPath);
592
+ const relativeTargetPath = path.relative(rootDir, targetPath);
593
+ if (!relativeTargetPath || relativeTargetPath === ".." || relativeTargetPath.startsWith(`..${path.sep}`) || path.isAbsolute(relativeTargetPath)) throw new Error("Target path is outside the allowed root");
594
+ const tempPath = buildSiblingTempPath(targetPath);
595
+ let renameSucceeded = false;
596
+ try {
597
+ await params.writeTemp(tempPath);
598
+ await writeFileFromPathWithinRoot({
599
+ rootDir,
600
+ relativePath: relativeTargetPath,
601
+ sourcePath: tempPath,
602
+ mkdir: false
603
+ });
604
+ renameSucceeded = true;
605
+ } finally {
606
+ if (!renameSucceeded) await fs.rm(tempPath, { force: true }).catch(() => {});
607
+ }
608
+ }
609
+ //#endregion
610
+ //#region src/browser/pw-tools-core.shared.ts
611
+ let nextUploadArmId = 0;
612
+ let nextDialogArmId = 0;
613
+ let nextDownloadArmId = 0;
614
+ function bumpUploadArmId() {
615
+ nextUploadArmId += 1;
616
+ return nextUploadArmId;
617
+ }
618
+ function bumpDialogArmId() {
619
+ nextDialogArmId += 1;
620
+ return nextDialogArmId;
621
+ }
622
+ function bumpDownloadArmId() {
623
+ nextDownloadArmId += 1;
624
+ return nextDownloadArmId;
625
+ }
626
+ function requireRef(value) {
627
+ const raw = typeof value === "string" ? value.trim() : "";
628
+ const ref = (raw ? parseRoleRef(raw) : null) ?? (raw.startsWith("@") ? raw.slice(1) : raw);
629
+ if (!ref) throw new Error("ref is required");
630
+ return ref;
631
+ }
632
+ function requireRefOrSelector(ref, selector) {
633
+ const trimmedRef = typeof ref === "string" ? ref.trim() : "";
634
+ const trimmedSelector = typeof selector === "string" ? selector.trim() : "";
635
+ if (!trimmedRef && !trimmedSelector) throw new Error("ref or selector is required");
636
+ return {
637
+ ref: trimmedRef || void 0,
638
+ selector: trimmedSelector || void 0
639
+ };
640
+ }
641
+ function normalizeTimeoutMs(timeoutMs, fallback) {
642
+ return Math.max(500, Math.min(12e4, timeoutMs ?? fallback));
643
+ }
644
+ function toAIFriendlyError(error, selector) {
645
+ const message = error instanceof Error ? error.message : String(error);
646
+ if (message.includes("strict mode violation")) {
647
+ const countMatch = message.match(/resolved to (\d+) elements/);
648
+ const count = countMatch ? countMatch[1] : "multiple";
649
+ return /* @__PURE__ */ new Error(`Selector "${selector}" matched ${count} elements. Run a new snapshot to get updated refs, or use a different ref.`);
650
+ }
651
+ 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.`);
652
+ 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.`);
653
+ return error instanceof Error ? error : new Error(message);
654
+ }
655
+ //#endregion
656
+ //#region src/browser/pw-tools-core.downloads.ts
657
+ function buildTempDownloadPath(fileName) {
658
+ const id = crypto.randomUUID();
659
+ const safeName = sanitizeUntrustedFileName(fileName, "download.bin");
660
+ return path.join(resolvePreferredmoldClawTmpDir(), "downloads", `${id}-${safeName}`);
661
+ }
662
+ function createPageDownloadWaiter(page, timeoutMs) {
663
+ let done = false;
664
+ let timer;
665
+ let handler;
666
+ const cleanup = () => {
667
+ if (timer) clearTimeout(timer);
668
+ timer = void 0;
669
+ if (handler) {
670
+ page.off("download", handler);
671
+ handler = void 0;
672
+ }
673
+ };
674
+ return {
675
+ promise: new Promise((resolve, reject) => {
676
+ handler = (download) => {
677
+ if (done) return;
678
+ done = true;
679
+ cleanup();
680
+ resolve(download);
681
+ };
682
+ page.on("download", handler);
683
+ timer = setTimeout(() => {
684
+ if (done) return;
685
+ done = true;
686
+ cleanup();
687
+ reject(/* @__PURE__ */ new Error("Timeout waiting for download"));
688
+ }, timeoutMs);
689
+ }),
690
+ cancel: () => {
691
+ if (done) return;
692
+ done = true;
693
+ cleanup();
694
+ }
695
+ };
696
+ }
697
+ async function saveDownloadPayload(download, outPath) {
698
+ const suggested = download.suggestedFilename?.() || "download.bin";
699
+ const requestedPath = outPath?.trim();
700
+ const resolvedOutPath = path.resolve(requestedPath || buildTempDownloadPath(suggested));
701
+ await fs.mkdir(path.dirname(resolvedOutPath), { recursive: true });
702
+ if (!requestedPath) await download.saveAs?.(resolvedOutPath);
703
+ else await writeViaSiblingTempPath({
704
+ rootDir: path.dirname(resolvedOutPath),
705
+ targetPath: resolvedOutPath,
706
+ writeTemp: async (tempPath) => {
707
+ await download.saveAs?.(tempPath);
708
+ }
709
+ });
710
+ return {
711
+ url: download.url?.() || "",
712
+ suggestedFilename: suggested,
713
+ path: resolvedOutPath
714
+ };
715
+ }
716
+ async function awaitDownloadPayload(params) {
717
+ try {
718
+ const download = await params.waiter.promise;
719
+ if (params.state.armIdDownload !== params.armId) throw new Error("Download was superseded by another waiter");
720
+ return await saveDownloadPayload(download, params.outPath ?? "");
721
+ } catch (err) {
722
+ params.waiter.cancel();
723
+ throw err;
724
+ }
725
+ }
726
+ async function armFileUploadViaPlaywright(opts) {
727
+ const page = await getPageForTargetId(opts);
728
+ const state = ensurePageState(page);
729
+ const timeout = Math.max(500, Math.min(12e4, opts.timeoutMs ?? 12e4));
730
+ state.armIdUpload = bumpUploadArmId();
731
+ const armId = state.armIdUpload;
732
+ page.waitForEvent("filechooser", { timeout }).then(async (fileChooser) => {
733
+ if (state.armIdUpload !== armId) return;
734
+ if (!opts.paths?.length) {
735
+ try {
736
+ await page.keyboard.press("Escape");
737
+ } catch {}
738
+ return;
739
+ }
740
+ const uploadPathsResult = await resolveStrictExistingPathsWithinRoot({
741
+ rootDir: DEFAULT_UPLOAD_DIR,
742
+ requestedPaths: opts.paths,
743
+ scopeLabel: `uploads directory (${DEFAULT_UPLOAD_DIR})`
744
+ });
745
+ if (!uploadPathsResult.ok) {
746
+ try {
747
+ await page.keyboard.press("Escape");
748
+ } catch {}
749
+ return;
750
+ }
751
+ await fileChooser.setFiles(uploadPathsResult.paths);
752
+ try {
753
+ const input = typeof fileChooser.element === "function" ? await Promise.resolve(fileChooser.element()) : null;
754
+ if (input) await input.evaluate((el) => {
755
+ el.dispatchEvent(new Event("input", { bubbles: true }));
756
+ el.dispatchEvent(new Event("change", { bubbles: true }));
757
+ });
758
+ } catch {}
759
+ }).catch(() => {});
760
+ }
761
+ async function armDialogViaPlaywright(opts) {
762
+ const page = await getPageForTargetId(opts);
763
+ const state = ensurePageState(page);
764
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
765
+ state.armIdDialog = bumpDialogArmId();
766
+ const armId = state.armIdDialog;
767
+ page.waitForEvent("dialog", { timeout }).then(async (dialog) => {
768
+ if (state.armIdDialog !== armId) return;
769
+ if (opts.accept) await dialog.accept(opts.promptText);
770
+ else await dialog.dismiss();
771
+ }).catch(() => {});
772
+ }
773
+ async function waitForDownloadViaPlaywright(opts) {
774
+ const page = await getPageForTargetId(opts);
775
+ const state = ensurePageState(page);
776
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
777
+ state.armIdDownload = bumpDownloadArmId();
778
+ const armId = state.armIdDownload;
779
+ return await awaitDownloadPayload({
780
+ waiter: createPageDownloadWaiter(page, timeout),
781
+ state,
782
+ armId,
783
+ outPath: opts.path
784
+ });
785
+ }
786
+ async function downloadViaPlaywright(opts) {
787
+ const page = await getPageForTargetId(opts);
788
+ const state = ensurePageState(page);
789
+ restoreRoleRefsForTarget({
790
+ cdpUrl: opts.cdpUrl,
791
+ targetId: opts.targetId,
792
+ page
793
+ });
794
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
795
+ const ref = requireRef(opts.ref);
796
+ const outPath = String(opts.path ?? "").trim();
797
+ if (!outPath) throw new Error("path is required");
798
+ state.armIdDownload = bumpDownloadArmId();
799
+ const armId = state.armIdDownload;
800
+ const waiter = createPageDownloadWaiter(page, timeout);
801
+ try {
802
+ const locator = refLocator(page, ref);
803
+ try {
804
+ await locator.click({ timeout });
805
+ } catch (err) {
806
+ throw toAIFriendlyError(err, ref);
807
+ }
808
+ return await awaitDownloadPayload({
809
+ waiter,
810
+ state,
811
+ armId,
812
+ outPath
813
+ });
814
+ } catch (err) {
815
+ waiter.cancel();
816
+ throw err;
817
+ }
818
+ }
819
+ //#endregion
820
+ //#region src/browser/pw-tools-core.snapshot.ts
821
+ async function snapshotAriaViaPlaywright(opts) {
822
+ const limit = Math.max(1, Math.min(2e3, Math.floor(opts.limit ?? 500)));
823
+ const page = await getPageForTargetId({
824
+ cdpUrl: opts.cdpUrl,
825
+ targetId: opts.targetId
826
+ });
827
+ ensurePageState(page);
828
+ const res = await withPageScopedCdpClient({
829
+ cdpUrl: opts.cdpUrl,
830
+ page,
831
+ targetId: opts.targetId,
832
+ fn: async (send) => {
833
+ await send("Accessibility.enable").catch(() => {});
834
+ return await send("Accessibility.getFullAXTree");
835
+ }
836
+ });
837
+ return { nodes: formatAriaSnapshot(Array.isArray(res?.nodes) ? res.nodes : [], limit) };
838
+ }
839
+ async function snapshotAiViaPlaywright(opts) {
840
+ const page = await getPageForTargetId({
841
+ cdpUrl: opts.cdpUrl,
842
+ targetId: opts.targetId
843
+ });
844
+ ensurePageState(page);
845
+ const maybe = page;
846
+ if (!maybe._snapshotForAI) throw new Error("Playwright _snapshotForAI is not available. Upgrade playwright-core.");
847
+ const result = await maybe._snapshotForAI({
848
+ timeout: Math.max(500, Math.min(6e4, Math.floor(opts.timeoutMs ?? 5e3))),
849
+ track: "response"
850
+ });
851
+ let snapshot = String(result?.full ?? "");
852
+ const maxChars = opts.maxChars;
853
+ const limit = typeof maxChars === "number" && Number.isFinite(maxChars) && maxChars > 0 ? Math.floor(maxChars) : void 0;
854
+ let truncated = false;
855
+ if (limit && snapshot.length > limit) {
856
+ snapshot = `${snapshot.slice(0, limit)}\n\n[...TRUNCATED - page too large]`;
857
+ truncated = true;
858
+ }
859
+ const built = buildRoleSnapshotFromAiSnapshot(snapshot);
860
+ storeRoleRefsForTarget({
861
+ page,
862
+ cdpUrl: opts.cdpUrl,
863
+ targetId: opts.targetId,
864
+ refs: built.refs,
865
+ mode: "aria"
866
+ });
867
+ return truncated ? {
868
+ snapshot,
869
+ truncated,
870
+ refs: built.refs
871
+ } : {
872
+ snapshot,
873
+ refs: built.refs
874
+ };
875
+ }
876
+ async function snapshotRoleViaPlaywright(opts) {
877
+ const page = await getPageForTargetId({
878
+ cdpUrl: opts.cdpUrl,
879
+ targetId: opts.targetId
880
+ });
881
+ ensurePageState(page);
882
+ if (opts.refsMode === "aria") {
883
+ if (opts.selector?.trim() || opts.frameSelector?.trim()) throw new Error("refs=aria does not support selector/frame snapshots yet.");
884
+ const maybe = page;
885
+ if (!maybe._snapshotForAI) throw new Error("refs=aria requires Playwright _snapshotForAI support.");
886
+ const result = await maybe._snapshotForAI({
887
+ timeout: 5e3,
888
+ track: "response"
889
+ });
890
+ const built = buildRoleSnapshotFromAiSnapshot(String(result?.full ?? ""), opts.options);
891
+ storeRoleRefsForTarget({
892
+ page,
893
+ cdpUrl: opts.cdpUrl,
894
+ targetId: opts.targetId,
895
+ refs: built.refs,
896
+ mode: "aria"
897
+ });
898
+ return {
899
+ snapshot: built.snapshot,
900
+ refs: built.refs,
901
+ stats: getRoleSnapshotStats(built.snapshot, built.refs)
902
+ };
903
+ }
904
+ const frameSelector = opts.frameSelector?.trim() || "";
905
+ const selector = opts.selector?.trim() || "";
906
+ const ariaSnapshot = await (frameSelector ? selector ? page.frameLocator(frameSelector).locator(selector) : page.frameLocator(frameSelector).locator(":root") : selector ? page.locator(selector) : page.locator(":root")).ariaSnapshot();
907
+ const built = buildRoleSnapshotFromAriaSnapshot(String(ariaSnapshot ?? ""), opts.options);
908
+ storeRoleRefsForTarget({
909
+ page,
910
+ cdpUrl: opts.cdpUrl,
911
+ targetId: opts.targetId,
912
+ refs: built.refs,
913
+ frameSelector: frameSelector || void 0,
914
+ mode: "role"
915
+ });
916
+ return {
917
+ snapshot: built.snapshot,
918
+ refs: built.refs,
919
+ stats: getRoleSnapshotStats(built.snapshot, built.refs)
920
+ };
921
+ }
922
+ async function navigateViaPlaywright(opts) {
923
+ const isRetryableNavigateError = (err) => {
924
+ const msg = typeof err === "string" ? err.toLowerCase() : err instanceof Error ? err.message.toLowerCase() : "";
925
+ return msg.includes("frame has been detached") || msg.includes("target page, context or browser has been closed");
926
+ };
927
+ const url = String(opts.url ?? "").trim();
928
+ if (!url) throw new Error("url is required");
929
+ await assertBrowserNavigationAllowed({
930
+ url,
931
+ ...withBrowserNavigationPolicy(opts.ssrfPolicy)
932
+ });
933
+ const timeout = Math.max(1e3, Math.min(12e4, opts.timeoutMs ?? 2e4));
934
+ let page = await getPageForTargetId(opts);
935
+ ensurePageState(page);
936
+ const navigate = async () => await page.goto(url, { timeout });
937
+ let response;
938
+ try {
939
+ response = await navigate();
940
+ } catch (err) {
941
+ if (!isRetryableNavigateError(err)) throw err;
942
+ await forceDisconnectPlaywrightForTarget({
943
+ cdpUrl: opts.cdpUrl,
944
+ targetId: opts.targetId,
945
+ reason: "retry navigate after detached frame"
946
+ }).catch(() => {});
947
+ page = await getPageForTargetId(opts);
948
+ ensurePageState(page);
949
+ response = await navigate();
950
+ }
951
+ await assertBrowserNavigationRedirectChainAllowed({
952
+ request: response?.request(),
953
+ ...withBrowserNavigationPolicy(opts.ssrfPolicy)
954
+ });
955
+ const finalUrl = page.url();
956
+ await assertBrowserNavigationResultAllowed({
957
+ url: finalUrl,
958
+ ...withBrowserNavigationPolicy(opts.ssrfPolicy)
959
+ });
960
+ return { url: finalUrl };
961
+ }
962
+ async function resizeViewportViaPlaywright(opts) {
963
+ const page = await getPageForTargetId(opts);
964
+ ensurePageState(page);
965
+ await page.setViewportSize({
966
+ width: Math.max(1, Math.floor(opts.width)),
967
+ height: Math.max(1, Math.floor(opts.height))
968
+ });
969
+ }
970
+ async function closePageViaPlaywright(opts) {
971
+ const page = await getPageForTargetId(opts);
972
+ ensurePageState(page);
973
+ await page.close();
974
+ }
975
+ async function pdfViaPlaywright(opts) {
976
+ const page = await getPageForTargetId(opts);
977
+ ensurePageState(page);
978
+ return { buffer: await page.pdf({ printBackground: true }) };
979
+ }
980
+ //#endregion
981
+ //#region src/browser/pw-tools-core.interactions.ts
982
+ const MAX_CLICK_DELAY_MS = 5e3;
983
+ const MAX_WAIT_TIME_MS = 3e4;
984
+ const MAX_BATCH_ACTIONS = 100;
985
+ function resolveBoundedDelayMs(value, label, maxMs) {
986
+ const normalized = Math.floor(value ?? 0);
987
+ if (!Number.isFinite(normalized) || normalized < 0) throw new Error(`${label} must be >= 0`);
988
+ if (normalized > maxMs) throw new Error(`${label} exceeds maximum of ${maxMs}ms`);
989
+ return normalized;
990
+ }
991
+ async function getRestoredPageForTarget(opts) {
992
+ const page = await getPageForTargetId(opts);
993
+ ensurePageState(page);
994
+ restoreRoleRefsForTarget({
995
+ cdpUrl: opts.cdpUrl,
996
+ targetId: opts.targetId,
997
+ page
998
+ });
999
+ return page;
1000
+ }
1001
+ function resolveInteractionTimeoutMs(timeoutMs) {
1002
+ return Math.max(500, Math.min(6e4, Math.floor(timeoutMs ?? 8e3)));
1003
+ }
1004
+ async function awaitEvalWithAbort(evalPromise, abortPromise) {
1005
+ if (!abortPromise) return await evalPromise;
1006
+ try {
1007
+ return await Promise.race([evalPromise, abortPromise]);
1008
+ } catch (err) {
1009
+ evalPromise.catch(() => {});
1010
+ throw err;
1011
+ }
1012
+ }
1013
+ async function highlightViaPlaywright(opts) {
1014
+ const page = await getRestoredPageForTarget(opts);
1015
+ const ref = requireRef(opts.ref);
1016
+ try {
1017
+ await refLocator(page, ref).highlight();
1018
+ } catch (err) {
1019
+ throw toAIFriendlyError(err, ref);
1020
+ }
1021
+ }
1022
+ async function clickViaPlaywright(opts) {
1023
+ const resolved = requireRefOrSelector(opts.ref, opts.selector);
1024
+ const page = await getRestoredPageForTarget(opts);
1025
+ const label = resolved.ref ?? resolved.selector;
1026
+ const locator = resolved.ref ? refLocator(page, requireRef(resolved.ref)) : page.locator(resolved.selector);
1027
+ const timeout = resolveInteractionTimeoutMs(opts.timeoutMs);
1028
+ try {
1029
+ const delayMs = resolveBoundedDelayMs(opts.delayMs, "click delayMs", MAX_CLICK_DELAY_MS);
1030
+ if (delayMs > 0) {
1031
+ await locator.hover({ timeout });
1032
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
1033
+ }
1034
+ if (opts.doubleClick) await locator.dblclick({
1035
+ timeout,
1036
+ button: opts.button,
1037
+ modifiers: opts.modifiers
1038
+ });
1039
+ else await locator.click({
1040
+ timeout,
1041
+ button: opts.button,
1042
+ modifiers: opts.modifiers
1043
+ });
1044
+ } catch (err) {
1045
+ throw toAIFriendlyError(err, label);
1046
+ }
1047
+ }
1048
+ async function hoverViaPlaywright(opts) {
1049
+ const resolved = requireRefOrSelector(opts.ref, opts.selector);
1050
+ const page = await getRestoredPageForTarget(opts);
1051
+ const label = resolved.ref ?? resolved.selector;
1052
+ const locator = resolved.ref ? refLocator(page, requireRef(resolved.ref)) : page.locator(resolved.selector);
1053
+ try {
1054
+ await locator.hover({ timeout: resolveInteractionTimeoutMs(opts.timeoutMs) });
1055
+ } catch (err) {
1056
+ throw toAIFriendlyError(err, label);
1057
+ }
1058
+ }
1059
+ async function dragViaPlaywright(opts) {
1060
+ const resolvedStart = requireRefOrSelector(opts.startRef, opts.startSelector);
1061
+ const resolvedEnd = requireRefOrSelector(opts.endRef, opts.endSelector);
1062
+ const page = await getRestoredPageForTarget(opts);
1063
+ const startLocator = resolvedStart.ref ? refLocator(page, requireRef(resolvedStart.ref)) : page.locator(resolvedStart.selector);
1064
+ const endLocator = resolvedEnd.ref ? refLocator(page, requireRef(resolvedEnd.ref)) : page.locator(resolvedEnd.selector);
1065
+ const startLabel = resolvedStart.ref ?? resolvedStart.selector;
1066
+ const endLabel = resolvedEnd.ref ?? resolvedEnd.selector;
1067
+ try {
1068
+ await startLocator.dragTo(endLocator, { timeout: resolveInteractionTimeoutMs(opts.timeoutMs) });
1069
+ } catch (err) {
1070
+ throw toAIFriendlyError(err, `${startLabel} -> ${endLabel}`);
1071
+ }
1072
+ }
1073
+ async function selectOptionViaPlaywright(opts) {
1074
+ const resolved = requireRefOrSelector(opts.ref, opts.selector);
1075
+ if (!opts.values?.length) throw new Error("values are required");
1076
+ const page = await getRestoredPageForTarget(opts);
1077
+ const label = resolved.ref ?? resolved.selector;
1078
+ const locator = resolved.ref ? refLocator(page, requireRef(resolved.ref)) : page.locator(resolved.selector);
1079
+ try {
1080
+ await locator.selectOption(opts.values, { timeout: resolveInteractionTimeoutMs(opts.timeoutMs) });
1081
+ } catch (err) {
1082
+ throw toAIFriendlyError(err, label);
1083
+ }
1084
+ }
1085
+ async function pressKeyViaPlaywright(opts) {
1086
+ const key = String(opts.key ?? "").trim();
1087
+ if (!key) throw new Error("key is required");
1088
+ const page = await getPageForTargetId(opts);
1089
+ ensurePageState(page);
1090
+ await page.keyboard.press(key, { delay: Math.max(0, Math.floor(opts.delayMs ?? 0)) });
1091
+ }
1092
+ async function typeViaPlaywright(opts) {
1093
+ const resolved = requireRefOrSelector(opts.ref, opts.selector);
1094
+ const text = String(opts.text ?? "");
1095
+ const page = await getRestoredPageForTarget(opts);
1096
+ const label = resolved.ref ?? resolved.selector;
1097
+ const locator = resolved.ref ? refLocator(page, requireRef(resolved.ref)) : page.locator(resolved.selector);
1098
+ const timeout = resolveInteractionTimeoutMs(opts.timeoutMs);
1099
+ try {
1100
+ if (opts.slowly) {
1101
+ await locator.click({ timeout });
1102
+ await locator.type(text, {
1103
+ timeout,
1104
+ delay: 75
1105
+ });
1106
+ } else await locator.fill(text, { timeout });
1107
+ if (opts.submit) await locator.press("Enter", { timeout });
1108
+ } catch (err) {
1109
+ throw toAIFriendlyError(err, label);
1110
+ }
1111
+ }
1112
+ async function fillFormViaPlaywright(opts) {
1113
+ const page = await getRestoredPageForTarget(opts);
1114
+ const timeout = resolveInteractionTimeoutMs(opts.timeoutMs);
1115
+ for (const field of opts.fields) {
1116
+ const ref = field.ref.trim();
1117
+ const type = (field.type || "text").trim() || "text";
1118
+ const rawValue = field.value;
1119
+ const value = typeof rawValue === "string" ? rawValue : typeof rawValue === "number" || typeof rawValue === "boolean" ? String(rawValue) : "";
1120
+ if (!ref) continue;
1121
+ const locator = refLocator(page, ref);
1122
+ if (type === "checkbox" || type === "radio") {
1123
+ const checked = rawValue === true || rawValue === 1 || rawValue === "1" || rawValue === "true";
1124
+ try {
1125
+ await locator.setChecked(checked, { timeout });
1126
+ } catch (err) {
1127
+ throw toAIFriendlyError(err, ref);
1128
+ }
1129
+ continue;
1130
+ }
1131
+ try {
1132
+ await locator.fill(value, { timeout });
1133
+ } catch (err) {
1134
+ throw toAIFriendlyError(err, ref);
1135
+ }
1136
+ }
1137
+ }
1138
+ async function evaluateViaPlaywright(opts) {
1139
+ const fnText = String(opts.fn ?? "").trim();
1140
+ if (!fnText) throw new Error("function is required");
1141
+ const page = await getRestoredPageForTarget(opts);
1142
+ const outerTimeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1143
+ let evaluateTimeout = Math.max(1e3, Math.min(12e4, outerTimeout - 500));
1144
+ evaluateTimeout = Math.min(evaluateTimeout, outerTimeout);
1145
+ const signal = opts.signal;
1146
+ let abortListener;
1147
+ let abortReject;
1148
+ let abortPromise;
1149
+ if (signal) {
1150
+ abortPromise = new Promise((_, reject) => {
1151
+ abortReject = reject;
1152
+ });
1153
+ abortPromise.catch(() => {});
1154
+ }
1155
+ if (signal) {
1156
+ const disconnect = () => {
1157
+ forceDisconnectPlaywrightForTarget({
1158
+ cdpUrl: opts.cdpUrl,
1159
+ targetId: opts.targetId,
1160
+ reason: "evaluate aborted"
1161
+ }).catch(() => {});
1162
+ };
1163
+ if (signal.aborted) {
1164
+ disconnect();
1165
+ throw signal.reason ?? /* @__PURE__ */ new Error("aborted");
1166
+ }
1167
+ abortListener = () => {
1168
+ disconnect();
1169
+ abortReject?.(signal.reason ?? /* @__PURE__ */ new Error("aborted"));
1170
+ };
1171
+ signal.addEventListener("abort", abortListener, { once: true });
1172
+ if (signal.aborted) {
1173
+ abortListener();
1174
+ throw signal.reason ?? /* @__PURE__ */ new Error("aborted");
1175
+ }
1176
+ }
1177
+ try {
1178
+ if (opts.ref) {
1179
+ const locator = refLocator(page, opts.ref);
1180
+ const elementEvaluator = new Function("el", "args", `
1181
+ "use strict";
1182
+ var fnBody = args.fnBody, timeoutMs = args.timeoutMs;
1183
+ try {
1184
+ var candidate = eval("(" + fnBody + ")");
1185
+ var result = typeof candidate === "function" ? candidate(el) : candidate;
1186
+ if (result && typeof result.then === "function") {
1187
+ return Promise.race([
1188
+ result,
1189
+ new Promise(function(_, reject) {
1190
+ setTimeout(function() { reject(new Error("evaluate timed out after " + timeoutMs + "ms")); }, timeoutMs);
1191
+ })
1192
+ ]);
1193
+ }
1194
+ return result;
1195
+ } catch (err) {
1196
+ throw new Error("Invalid evaluate function: " + (err && err.message ? err.message : String(err)));
1197
+ }
1198
+ `);
1199
+ return await awaitEvalWithAbort(locator.evaluate(elementEvaluator, {
1200
+ fnBody: fnText,
1201
+ timeoutMs: evaluateTimeout
1202
+ }), abortPromise);
1203
+ }
1204
+ const browserEvaluator = new Function("args", `
1205
+ "use strict";
1206
+ var fnBody = args.fnBody, timeoutMs = args.timeoutMs;
1207
+ try {
1208
+ var candidate = eval("(" + fnBody + ")");
1209
+ var result = typeof candidate === "function" ? candidate() : candidate;
1210
+ if (result && typeof result.then === "function") {
1211
+ return Promise.race([
1212
+ result,
1213
+ new Promise(function(_, reject) {
1214
+ setTimeout(function() { reject(new Error("evaluate timed out after " + timeoutMs + "ms")); }, timeoutMs);
1215
+ })
1216
+ ]);
1217
+ }
1218
+ return result;
1219
+ } catch (err) {
1220
+ throw new Error("Invalid evaluate function: " + (err && err.message ? err.message : String(err)));
1221
+ }
1222
+ `);
1223
+ return await awaitEvalWithAbort(page.evaluate(browserEvaluator, {
1224
+ fnBody: fnText,
1225
+ timeoutMs: evaluateTimeout
1226
+ }), abortPromise);
1227
+ } finally {
1228
+ if (signal && abortListener) signal.removeEventListener("abort", abortListener);
1229
+ }
1230
+ }
1231
+ async function scrollIntoViewViaPlaywright(opts) {
1232
+ const resolved = requireRefOrSelector(opts.ref, opts.selector);
1233
+ const page = await getRestoredPageForTarget(opts);
1234
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1235
+ const label = resolved.ref ?? resolved.selector;
1236
+ const locator = resolved.ref ? refLocator(page, requireRef(resolved.ref)) : page.locator(resolved.selector);
1237
+ try {
1238
+ await locator.scrollIntoViewIfNeeded({ timeout });
1239
+ } catch (err) {
1240
+ throw toAIFriendlyError(err, label);
1241
+ }
1242
+ }
1243
+ async function waitForViaPlaywright(opts) {
1244
+ const page = await getPageForTargetId(opts);
1245
+ ensurePageState(page);
1246
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1247
+ if (typeof opts.timeMs === "number" && Number.isFinite(opts.timeMs)) await page.waitForTimeout(resolveBoundedDelayMs(opts.timeMs, "wait timeMs", MAX_WAIT_TIME_MS));
1248
+ if (opts.text) await page.getByText(opts.text).first().waitFor({
1249
+ state: "visible",
1250
+ timeout
1251
+ });
1252
+ if (opts.textGone) await page.getByText(opts.textGone).first().waitFor({
1253
+ state: "hidden",
1254
+ timeout
1255
+ });
1256
+ if (opts.selector) {
1257
+ const selector = String(opts.selector).trim();
1258
+ if (selector) await page.locator(selector).first().waitFor({
1259
+ state: "visible",
1260
+ timeout
1261
+ });
1262
+ }
1263
+ if (opts.url) {
1264
+ const url = String(opts.url).trim();
1265
+ if (url) await page.waitForURL(url, { timeout });
1266
+ }
1267
+ if (opts.loadState) await page.waitForLoadState(opts.loadState, { timeout });
1268
+ if (opts.fn) {
1269
+ const fn = String(opts.fn).trim();
1270
+ if (fn) await page.waitForFunction(fn, { timeout });
1271
+ }
1272
+ }
1273
+ async function takeScreenshotViaPlaywright(opts) {
1274
+ const page = await getPageForTargetId(opts);
1275
+ ensurePageState(page);
1276
+ restoreRoleRefsForTarget({
1277
+ cdpUrl: opts.cdpUrl,
1278
+ targetId: opts.targetId,
1279
+ page
1280
+ });
1281
+ const type = opts.type ?? "png";
1282
+ if (opts.ref) {
1283
+ if (opts.fullPage) throw new Error("fullPage is not supported for element screenshots");
1284
+ return { buffer: await refLocator(page, opts.ref).screenshot({ type }) };
1285
+ }
1286
+ if (opts.element) {
1287
+ if (opts.fullPage) throw new Error("fullPage is not supported for element screenshots");
1288
+ return { buffer: await page.locator(opts.element).first().screenshot({ type }) };
1289
+ }
1290
+ return { buffer: await page.screenshot({
1291
+ type,
1292
+ fullPage: Boolean(opts.fullPage)
1293
+ }) };
1294
+ }
1295
+ async function screenshotWithLabelsViaPlaywright(opts) {
1296
+ const page = await getPageForTargetId(opts);
1297
+ ensurePageState(page);
1298
+ restoreRoleRefsForTarget({
1299
+ cdpUrl: opts.cdpUrl,
1300
+ targetId: opts.targetId,
1301
+ page
1302
+ });
1303
+ const type = opts.type ?? "png";
1304
+ const maxLabels = typeof opts.maxLabels === "number" && Number.isFinite(opts.maxLabels) ? Math.max(1, Math.floor(opts.maxLabels)) : 150;
1305
+ const viewport = await page.evaluate(() => ({
1306
+ scrollX: window.scrollX || 0,
1307
+ scrollY: window.scrollY || 0,
1308
+ width: window.innerWidth || 0,
1309
+ height: window.innerHeight || 0
1310
+ }));
1311
+ const refs = Object.keys(opts.refs ?? {});
1312
+ const boxes = [];
1313
+ let skipped = 0;
1314
+ for (const ref of refs) {
1315
+ if (boxes.length >= maxLabels) {
1316
+ skipped += 1;
1317
+ continue;
1318
+ }
1319
+ try {
1320
+ const box = await refLocator(page, ref).boundingBox();
1321
+ if (!box) {
1322
+ skipped += 1;
1323
+ continue;
1324
+ }
1325
+ const x0 = box.x;
1326
+ const y0 = box.y;
1327
+ const x1 = box.x + box.width;
1328
+ const y1 = box.y + box.height;
1329
+ const vx0 = viewport.scrollX;
1330
+ const vy0 = viewport.scrollY;
1331
+ const vx1 = viewport.scrollX + viewport.width;
1332
+ const vy1 = viewport.scrollY + viewport.height;
1333
+ if (x1 < vx0 || x0 > vx1 || y1 < vy0 || y0 > vy1) {
1334
+ skipped += 1;
1335
+ continue;
1336
+ }
1337
+ boxes.push({
1338
+ ref,
1339
+ x: x0 - viewport.scrollX,
1340
+ y: y0 - viewport.scrollY,
1341
+ w: Math.max(1, box.width),
1342
+ h: Math.max(1, box.height)
1343
+ });
1344
+ } catch {
1345
+ skipped += 1;
1346
+ }
1347
+ }
1348
+ try {
1349
+ if (boxes.length > 0) await page.evaluate((labels) => {
1350
+ document.querySelectorAll("[data-moldclaw-labels]").forEach((el) => el.remove());
1351
+ const root = document.createElement("div");
1352
+ root.setAttribute("data-moldclaw-labels", "1");
1353
+ root.style.position = "fixed";
1354
+ root.style.left = "0";
1355
+ root.style.top = "0";
1356
+ root.style.zIndex = "2147483647";
1357
+ root.style.pointerEvents = "none";
1358
+ root.style.fontFamily = "\"SF Mono\",\"SFMono-Regular\",Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace";
1359
+ const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
1360
+ for (const label of labels) {
1361
+ const box = document.createElement("div");
1362
+ box.setAttribute("data-moldclaw-labels", "1");
1363
+ box.style.position = "absolute";
1364
+ box.style.left = `${label.x}px`;
1365
+ box.style.top = `${label.y}px`;
1366
+ box.style.width = `${label.w}px`;
1367
+ box.style.height = `${label.h}px`;
1368
+ box.style.border = "2px solid #ffb020";
1369
+ box.style.boxSizing = "border-box";
1370
+ const tag = document.createElement("div");
1371
+ tag.setAttribute("data-moldclaw-labels", "1");
1372
+ tag.textContent = label.ref;
1373
+ tag.style.position = "absolute";
1374
+ tag.style.left = `${label.x}px`;
1375
+ tag.style.top = `${clamp(label.y - 18, 0, 2e4)}px`;
1376
+ tag.style.background = "#ffb020";
1377
+ tag.style.color = "#1a1a1a";
1378
+ tag.style.fontSize = "12px";
1379
+ tag.style.lineHeight = "14px";
1380
+ tag.style.padding = "1px 4px";
1381
+ tag.style.borderRadius = "3px";
1382
+ tag.style.boxShadow = "0 1px 2px rgba(0,0,0,0.35)";
1383
+ tag.style.whiteSpace = "nowrap";
1384
+ root.appendChild(box);
1385
+ root.appendChild(tag);
1386
+ }
1387
+ document.documentElement.appendChild(root);
1388
+ }, boxes);
1389
+ return {
1390
+ buffer: await page.screenshot({ type }),
1391
+ labels: boxes.length,
1392
+ skipped
1393
+ };
1394
+ } finally {
1395
+ await page.evaluate(() => {
1396
+ document.querySelectorAll("[data-moldclaw-labels]").forEach((el) => el.remove());
1397
+ }).catch(() => {});
1398
+ }
1399
+ }
1400
+ async function setInputFilesViaPlaywright(opts) {
1401
+ const page = await getPageForTargetId(opts);
1402
+ ensurePageState(page);
1403
+ restoreRoleRefsForTarget({
1404
+ cdpUrl: opts.cdpUrl,
1405
+ targetId: opts.targetId,
1406
+ page
1407
+ });
1408
+ if (!opts.paths.length) throw new Error("paths are required");
1409
+ const inputRef = typeof opts.inputRef === "string" ? opts.inputRef.trim() : "";
1410
+ const element = typeof opts.element === "string" ? opts.element.trim() : "";
1411
+ if (inputRef && element) throw new Error("inputRef and element are mutually exclusive");
1412
+ if (!inputRef && !element) throw new Error("inputRef or element is required");
1413
+ const locator = inputRef ? refLocator(page, inputRef) : page.locator(element).first();
1414
+ const uploadPathsResult = await resolveStrictExistingPathsWithinRoot({
1415
+ rootDir: DEFAULT_UPLOAD_DIR,
1416
+ requestedPaths: opts.paths,
1417
+ scopeLabel: `uploads directory (${DEFAULT_UPLOAD_DIR})`
1418
+ });
1419
+ if (!uploadPathsResult.ok) throw new Error(uploadPathsResult.error);
1420
+ const resolvedPaths = uploadPathsResult.paths;
1421
+ try {
1422
+ await locator.setInputFiles(resolvedPaths);
1423
+ } catch (err) {
1424
+ throw toAIFriendlyError(err, inputRef || element);
1425
+ }
1426
+ try {
1427
+ const handle = await locator.elementHandle();
1428
+ if (handle) await handle.evaluate((el) => {
1429
+ el.dispatchEvent(new Event("input", { bubbles: true }));
1430
+ el.dispatchEvent(new Event("change", { bubbles: true }));
1431
+ });
1432
+ } catch {}
1433
+ }
1434
+ const MAX_BATCH_DEPTH = 5;
1435
+ async function executeSingleAction(action, cdpUrl, targetId, evaluateEnabled, depth = 0) {
1436
+ if (depth > MAX_BATCH_DEPTH) throw new Error(`Batch nesting depth exceeds maximum of ${MAX_BATCH_DEPTH}`);
1437
+ const effectiveTargetId = action.targetId ?? targetId;
1438
+ switch (action.kind) {
1439
+ case "click":
1440
+ await clickViaPlaywright({
1441
+ cdpUrl,
1442
+ targetId: effectiveTargetId,
1443
+ ref: action.ref,
1444
+ selector: action.selector,
1445
+ doubleClick: action.doubleClick,
1446
+ button: action.button,
1447
+ modifiers: action.modifiers,
1448
+ delayMs: action.delayMs,
1449
+ timeoutMs: action.timeoutMs
1450
+ });
1451
+ break;
1452
+ case "type":
1453
+ await typeViaPlaywright({
1454
+ cdpUrl,
1455
+ targetId: effectiveTargetId,
1456
+ ref: action.ref,
1457
+ selector: action.selector,
1458
+ text: action.text,
1459
+ submit: action.submit,
1460
+ slowly: action.slowly,
1461
+ timeoutMs: action.timeoutMs
1462
+ });
1463
+ break;
1464
+ case "press":
1465
+ await pressKeyViaPlaywright({
1466
+ cdpUrl,
1467
+ targetId: effectiveTargetId,
1468
+ key: action.key,
1469
+ delayMs: action.delayMs
1470
+ });
1471
+ break;
1472
+ case "hover":
1473
+ await hoverViaPlaywright({
1474
+ cdpUrl,
1475
+ targetId: effectiveTargetId,
1476
+ ref: action.ref,
1477
+ selector: action.selector,
1478
+ timeoutMs: action.timeoutMs
1479
+ });
1480
+ break;
1481
+ case "scrollIntoView":
1482
+ await scrollIntoViewViaPlaywright({
1483
+ cdpUrl,
1484
+ targetId: effectiveTargetId,
1485
+ ref: action.ref,
1486
+ selector: action.selector,
1487
+ timeoutMs: action.timeoutMs
1488
+ });
1489
+ break;
1490
+ case "drag":
1491
+ await dragViaPlaywright({
1492
+ cdpUrl,
1493
+ targetId: effectiveTargetId,
1494
+ startRef: action.startRef,
1495
+ startSelector: action.startSelector,
1496
+ endRef: action.endRef,
1497
+ endSelector: action.endSelector,
1498
+ timeoutMs: action.timeoutMs
1499
+ });
1500
+ break;
1501
+ case "select":
1502
+ await selectOptionViaPlaywright({
1503
+ cdpUrl,
1504
+ targetId: effectiveTargetId,
1505
+ ref: action.ref,
1506
+ selector: action.selector,
1507
+ values: action.values,
1508
+ timeoutMs: action.timeoutMs
1509
+ });
1510
+ break;
1511
+ case "fill":
1512
+ await fillFormViaPlaywright({
1513
+ cdpUrl,
1514
+ targetId: effectiveTargetId,
1515
+ fields: action.fields,
1516
+ timeoutMs: action.timeoutMs
1517
+ });
1518
+ break;
1519
+ case "resize":
1520
+ await resizeViewportViaPlaywright({
1521
+ cdpUrl,
1522
+ targetId: effectiveTargetId,
1523
+ width: action.width,
1524
+ height: action.height
1525
+ });
1526
+ break;
1527
+ case "wait":
1528
+ if (action.fn && !evaluateEnabled) throw new Error("wait --fn is disabled by config (browser.evaluateEnabled=false)");
1529
+ await waitForViaPlaywright({
1530
+ cdpUrl,
1531
+ targetId: effectiveTargetId,
1532
+ timeMs: action.timeMs,
1533
+ text: action.text,
1534
+ textGone: action.textGone,
1535
+ selector: action.selector,
1536
+ url: action.url,
1537
+ loadState: action.loadState,
1538
+ fn: action.fn,
1539
+ timeoutMs: action.timeoutMs
1540
+ });
1541
+ break;
1542
+ case "evaluate":
1543
+ if (!evaluateEnabled) throw new Error("act:evaluate is disabled by config (browser.evaluateEnabled=false)");
1544
+ await evaluateViaPlaywright({
1545
+ cdpUrl,
1546
+ targetId: effectiveTargetId,
1547
+ fn: action.fn,
1548
+ ref: action.ref,
1549
+ timeoutMs: action.timeoutMs
1550
+ });
1551
+ break;
1552
+ case "close":
1553
+ await closePageViaPlaywright({
1554
+ cdpUrl,
1555
+ targetId: effectiveTargetId
1556
+ });
1557
+ break;
1558
+ case "batch":
1559
+ await batchViaPlaywright({
1560
+ cdpUrl,
1561
+ targetId: effectiveTargetId,
1562
+ actions: action.actions,
1563
+ stopOnError: action.stopOnError,
1564
+ evaluateEnabled,
1565
+ depth: depth + 1
1566
+ });
1567
+ break;
1568
+ default: throw new Error(`Unsupported batch action kind: ${action.kind}`);
1569
+ }
1570
+ }
1571
+ async function batchViaPlaywright(opts) {
1572
+ const depth = opts.depth ?? 0;
1573
+ if (depth > MAX_BATCH_DEPTH) throw new Error(`Batch nesting depth exceeds maximum of ${MAX_BATCH_DEPTH}`);
1574
+ if (opts.actions.length > MAX_BATCH_ACTIONS) throw new Error(`Batch exceeds maximum of ${MAX_BATCH_ACTIONS} actions`);
1575
+ const results = [];
1576
+ for (const action of opts.actions) try {
1577
+ await executeSingleAction(action, opts.cdpUrl, opts.targetId, opts.evaluateEnabled, depth);
1578
+ results.push({ ok: true });
1579
+ } catch (err) {
1580
+ const message = err instanceof Error ? err.message : String(err);
1581
+ results.push({
1582
+ ok: false,
1583
+ error: message
1584
+ });
1585
+ if (opts.stopOnError !== false) break;
1586
+ }
1587
+ return { results };
1588
+ }
1589
+ //#endregion
1590
+ //#region src/browser/pw-tools-core.responses.ts
1591
+ async function responseBodyViaPlaywright(opts) {
1592
+ const pattern = String(opts.url ?? "").trim();
1593
+ if (!pattern) throw new Error("url is required");
1594
+ const maxChars = typeof opts.maxChars === "number" && Number.isFinite(opts.maxChars) ? Math.max(1, Math.min(5e6, Math.floor(opts.maxChars))) : 2e5;
1595
+ const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1596
+ const page = await getPageForTargetId(opts);
1597
+ ensurePageState(page);
1598
+ const resp = await new Promise((resolve, reject) => {
1599
+ let done = false;
1600
+ let timer;
1601
+ let handler;
1602
+ const cleanup = () => {
1603
+ if (timer) clearTimeout(timer);
1604
+ timer = void 0;
1605
+ if (handler) page.off("response", handler);
1606
+ };
1607
+ handler = (resp) => {
1608
+ if (done) return;
1609
+ if (!matchBrowserUrlPattern(pattern, resp.url?.() || "")) return;
1610
+ done = true;
1611
+ cleanup();
1612
+ resolve(resp);
1613
+ };
1614
+ page.on("response", handler);
1615
+ timer = setTimeout(() => {
1616
+ if (done) return;
1617
+ done = true;
1618
+ cleanup();
1619
+ reject(/* @__PURE__ */ new Error(`Response not found for url pattern "${pattern}". Run '${formatCliCommand("moldclaw browser requests")}' to inspect recent network activity.`));
1620
+ }, timeout);
1621
+ });
1622
+ const url = resp.url?.() || "";
1623
+ const status = resp.status?.();
1624
+ const headers = resp.headers?.();
1625
+ let bodyText = "";
1626
+ try {
1627
+ if (typeof resp.text === "function") bodyText = await resp.text();
1628
+ else if (typeof resp.body === "function") {
1629
+ const buf = await resp.body();
1630
+ bodyText = new TextDecoder("utf-8").decode(buf);
1631
+ }
1632
+ } catch (err) {
1633
+ throw new Error(`Failed to read response body for "${url}": ${String(err)}`, { cause: err });
1634
+ }
1635
+ return {
1636
+ url,
1637
+ status,
1638
+ headers,
1639
+ body: bodyText.length > maxChars ? bodyText.slice(0, maxChars) : bodyText,
1640
+ truncated: bodyText.length > maxChars ? true : void 0
1641
+ };
1642
+ }
1643
+ //#endregion
1644
+ //#region src/browser/pw-tools-core.state.ts
1645
+ async function setOfflineViaPlaywright(opts) {
1646
+ const page = await getPageForTargetId(opts);
1647
+ ensurePageState(page);
1648
+ await page.context().setOffline(Boolean(opts.offline));
1649
+ }
1650
+ async function setExtraHTTPHeadersViaPlaywright(opts) {
1651
+ const page = await getPageForTargetId(opts);
1652
+ ensurePageState(page);
1653
+ await page.context().setExtraHTTPHeaders(opts.headers);
1654
+ }
1655
+ async function setHttpCredentialsViaPlaywright(opts) {
1656
+ const page = await getPageForTargetId(opts);
1657
+ ensurePageState(page);
1658
+ if (opts.clear) {
1659
+ await page.context().setHTTPCredentials(null);
1660
+ return;
1661
+ }
1662
+ const username = String(opts.username ?? "");
1663
+ const password = String(opts.password ?? "");
1664
+ if (!username) throw new Error("username is required (or set clear=true)");
1665
+ await page.context().setHTTPCredentials({
1666
+ username,
1667
+ password
1668
+ });
1669
+ }
1670
+ async function setGeolocationViaPlaywright(opts) {
1671
+ const page = await getPageForTargetId(opts);
1672
+ ensurePageState(page);
1673
+ const context = page.context();
1674
+ if (opts.clear) {
1675
+ await context.setGeolocation(null);
1676
+ await context.clearPermissions().catch(() => {});
1677
+ return;
1678
+ }
1679
+ if (typeof opts.latitude !== "number" || typeof opts.longitude !== "number") throw new Error("latitude and longitude are required (or set clear=true)");
1680
+ await context.setGeolocation({
1681
+ latitude: opts.latitude,
1682
+ longitude: opts.longitude,
1683
+ accuracy: typeof opts.accuracy === "number" ? opts.accuracy : void 0
1684
+ });
1685
+ const origin = opts.origin?.trim() || (() => {
1686
+ try {
1687
+ return new URL(page.url()).origin;
1688
+ } catch {
1689
+ return "";
1690
+ }
1691
+ })();
1692
+ if (origin) await context.grantPermissions(["geolocation"], { origin }).catch(() => {});
1693
+ }
1694
+ async function emulateMediaViaPlaywright(opts) {
1695
+ const page = await getPageForTargetId(opts);
1696
+ ensurePageState(page);
1697
+ await page.emulateMedia({ colorScheme: opts.colorScheme });
1698
+ }
1699
+ async function setLocaleViaPlaywright(opts) {
1700
+ const page = await getPageForTargetId(opts);
1701
+ ensurePageState(page);
1702
+ const locale = String(opts.locale ?? "").trim();
1703
+ if (!locale) throw new Error("locale is required");
1704
+ await withPageScopedCdpClient({
1705
+ cdpUrl: opts.cdpUrl,
1706
+ page,
1707
+ targetId: opts.targetId,
1708
+ fn: async (send) => {
1709
+ try {
1710
+ await send("Emulation.setLocaleOverride", { locale });
1711
+ } catch (err) {
1712
+ if (String(err).includes("Another locale override is already in effect")) return;
1713
+ throw err;
1714
+ }
1715
+ }
1716
+ });
1717
+ }
1718
+ async function setTimezoneViaPlaywright(opts) {
1719
+ const page = await getPageForTargetId(opts);
1720
+ ensurePageState(page);
1721
+ const timezoneId = String(opts.timezoneId ?? "").trim();
1722
+ if (!timezoneId) throw new Error("timezoneId is required");
1723
+ await withPageScopedCdpClient({
1724
+ cdpUrl: opts.cdpUrl,
1725
+ page,
1726
+ targetId: opts.targetId,
1727
+ fn: async (send) => {
1728
+ try {
1729
+ await send("Emulation.setTimezoneOverride", { timezoneId });
1730
+ } catch (err) {
1731
+ const msg = String(err);
1732
+ if (msg.includes("Timezone override is already in effect")) return;
1733
+ if (msg.includes("Invalid timezone")) throw new Error(`Invalid timezone ID: ${timezoneId}`, { cause: err });
1734
+ throw err;
1735
+ }
1736
+ }
1737
+ });
1738
+ }
1739
+ async function setDeviceViaPlaywright(opts) {
1740
+ const page = await getPageForTargetId(opts);
1741
+ ensurePageState(page);
1742
+ const name = String(opts.name ?? "").trim();
1743
+ if (!name) throw new Error("device name is required");
1744
+ const descriptor = devices[name];
1745
+ if (!descriptor) throw new Error(`Unknown device "${name}".`);
1746
+ if (descriptor.viewport) await page.setViewportSize({
1747
+ width: descriptor.viewport.width,
1748
+ height: descriptor.viewport.height
1749
+ });
1750
+ await withPageScopedCdpClient({
1751
+ cdpUrl: opts.cdpUrl,
1752
+ page,
1753
+ targetId: opts.targetId,
1754
+ fn: async (send) => {
1755
+ if (descriptor.userAgent || descriptor.locale) await send("Emulation.setUserAgentOverride", {
1756
+ userAgent: descriptor.userAgent ?? "",
1757
+ acceptLanguage: descriptor.locale ?? void 0
1758
+ });
1759
+ if (descriptor.viewport) await send("Emulation.setDeviceMetricsOverride", {
1760
+ mobile: Boolean(descriptor.isMobile),
1761
+ width: descriptor.viewport.width,
1762
+ height: descriptor.viewport.height,
1763
+ deviceScaleFactor: descriptor.deviceScaleFactor ?? 1,
1764
+ screenWidth: descriptor.viewport.width,
1765
+ screenHeight: descriptor.viewport.height
1766
+ });
1767
+ if (descriptor.hasTouch) await send("Emulation.setTouchEmulationEnabled", { enabled: true });
1768
+ }
1769
+ });
1770
+ }
1771
+ //#endregion
1772
+ //#region src/browser/pw-tools-core.storage.ts
1773
+ async function cookiesGetViaPlaywright(opts) {
1774
+ const page = await getPageForTargetId(opts);
1775
+ ensurePageState(page);
1776
+ return { cookies: await page.context().cookies() };
1777
+ }
1778
+ async function cookiesSetViaPlaywright(opts) {
1779
+ const page = await getPageForTargetId(opts);
1780
+ ensurePageState(page);
1781
+ const cookie = opts.cookie;
1782
+ if (!cookie.name || cookie.value === void 0) throw new Error("cookie name and value are required");
1783
+ const hasUrl = typeof cookie.url === "string" && cookie.url.trim();
1784
+ const hasDomainPath = typeof cookie.domain === "string" && cookie.domain.trim() && typeof cookie.path === "string" && cookie.path.trim();
1785
+ if (!hasUrl && !hasDomainPath) throw new Error("cookie requires url, or domain+path");
1786
+ await page.context().addCookies([cookie]);
1787
+ }
1788
+ async function cookiesClearViaPlaywright(opts) {
1789
+ const page = await getPageForTargetId(opts);
1790
+ ensurePageState(page);
1791
+ await page.context().clearCookies();
1792
+ }
1793
+ async function storageGetViaPlaywright(opts) {
1794
+ const page = await getPageForTargetId(opts);
1795
+ ensurePageState(page);
1796
+ const kind = opts.kind;
1797
+ const key = typeof opts.key === "string" ? opts.key : void 0;
1798
+ return { values: await page.evaluate(({ kind: kind2, key: key2 }) => {
1799
+ const store = kind2 === "session" ? window.sessionStorage : window.localStorage;
1800
+ if (key2) {
1801
+ const value = store.getItem(key2);
1802
+ return value === null ? {} : { [key2]: value };
1803
+ }
1804
+ const out = {};
1805
+ for (let i = 0; i < store.length; i += 1) {
1806
+ const k = store.key(i);
1807
+ if (!k) continue;
1808
+ const v = store.getItem(k);
1809
+ if (v !== null) out[k] = v;
1810
+ }
1811
+ return out;
1812
+ }, {
1813
+ kind,
1814
+ key
1815
+ }) ?? {} };
1816
+ }
1817
+ async function storageSetViaPlaywright(opts) {
1818
+ const page = await getPageForTargetId(opts);
1819
+ ensurePageState(page);
1820
+ const key = String(opts.key ?? "");
1821
+ if (!key) throw new Error("key is required");
1822
+ await page.evaluate(({ kind, key: k, value }) => {
1823
+ (kind === "session" ? window.sessionStorage : window.localStorage).setItem(k, value);
1824
+ }, {
1825
+ kind: opts.kind,
1826
+ key,
1827
+ value: String(opts.value ?? "")
1828
+ });
1829
+ }
1830
+ async function storageClearViaPlaywright(opts) {
1831
+ const page = await getPageForTargetId(opts);
1832
+ ensurePageState(page);
1833
+ await page.evaluate(({ kind }) => {
1834
+ (kind === "session" ? window.sessionStorage : window.localStorage).clear();
1835
+ }, { kind: opts.kind });
1836
+ }
1837
+ //#endregion
1838
+ //#region src/browser/pw-tools-core.trace.ts
1839
+ async function traceStartViaPlaywright(opts) {
1840
+ const context = (await getPageForTargetId(opts)).context();
1841
+ const ctxState = ensureContextState(context);
1842
+ if (ctxState.traceActive) throw new Error("Trace already running. Stop the current trace before starting a new one.");
1843
+ await context.tracing.start({
1844
+ screenshots: opts.screenshots ?? true,
1845
+ snapshots: opts.snapshots ?? true,
1846
+ sources: opts.sources ?? false
1847
+ });
1848
+ ctxState.traceActive = true;
1849
+ }
1850
+ async function traceStopViaPlaywright(opts) {
1851
+ const context = (await getPageForTargetId(opts)).context();
1852
+ const ctxState = ensureContextState(context);
1853
+ if (!ctxState.traceActive) throw new Error("No active trace. Start a trace before stopping it.");
1854
+ await writeViaSiblingTempPath({
1855
+ rootDir: DEFAULT_TRACE_DIR,
1856
+ targetPath: opts.path,
1857
+ writeTemp: async (tempPath) => {
1858
+ await context.tracing.stop({ path: tempPath });
1859
+ }
1860
+ });
1861
+ ctxState.traceActive = false;
1862
+ }
1863
+ //#endregion
1864
+ //#region src/browser/pw-ai.ts
1865
+ markPwAiLoaded();
1866
+ //#endregion
1867
+ 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 };