fengming 0.3.3 → 0.3.5

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 (2022) hide show
  1. package/CHANGELOG.md +3 -3
  2. package/dist/abort-CjCDVBbH.js +277 -0
  3. package/dist/abort.runtime-DxJ8129J.js +2 -0
  4. package/dist/abort.runtime.js +1 -1
  5. package/dist/accounts-Cyn0sm_v.js +423 -0
  6. package/dist/accounts-DzcLKcN5.js +2 -0
  7. package/dist/acp/control-plane/manager.js +1 -1
  8. package/dist/acp-spawn-4lfz_3K9.js +1286 -0
  9. package/dist/acp-spawn-BCUjuO6L.js +2 -0
  10. package/dist/acp-stateful-target-driver-Bv99uwEA.js +89 -0
  11. package/dist/action-info-CP-p6RHS.js +75 -0
  12. package/dist/active-runtime-registry-DjKe53a5.js +62 -0
  13. package/dist/active-tool-schema-warnings-p7CqUnu1.js +105 -0
  14. package/dist/active-tool-schema-warnings-pGI92yka.js +2 -0
  15. package/dist/agent-B77yluip.js +1825 -0
  16. package/dist/agent-BooUvZnR.js +2 -0
  17. package/dist/agent-bundle-lsp-runtime-3ieSgTgo.js +389 -0
  18. package/dist/agent-bundle-lsp-runtime-CkJ0XJK7.js +2 -0
  19. package/dist/agent-bundle-mcp-materialize-BH-esGZL.js +124 -0
  20. package/dist/agent-bundle-mcp-tools-DkixTTnL.js +3 -0
  21. package/dist/agent-command-BJKcnQy6.js +1435 -0
  22. package/dist/agent-delivery-CEfe_Zzt.js +117 -0
  23. package/dist/agent-harness-runtime-R_Ae6o9C.js +207 -0
  24. package/dist/agent-kWSaRcQt.js +3 -0
  25. package/dist/agent-model-discovery-C49swEgd.js +238 -0
  26. package/dist/agent-model-discovery-DZbixJQs.js +3 -0
  27. package/dist/agent-runner-utils-BChpi9Ec.js +267 -0
  28. package/dist/agent-runner.runtime-3LOdt215.js +3784 -0
  29. package/dist/agent-runner.runtime.js +1 -1
  30. package/dist/agent-runtime-3jsv8b7Y.js +199 -0
  31. package/dist/agent-runtime-label-uoFI4ovH.js +30 -0
  32. package/dist/agent-runtime-metadata-BhFt6kLt.js +53 -0
  33. package/dist/agent-tool-result-middleware-loader-BxYJNC1i.js +55 -0
  34. package/dist/agent-tools-COLEG7aL.js +2506 -0
  35. package/dist/agent-tools.before-tool-call--rMZI5Rd.js +1274 -0
  36. package/dist/agent-tools.before-tool-call-CbX2sfP4.js +2 -0
  37. package/dist/agent-via-gateway-DfKij3De.js +486 -0
  38. package/dist/agent-wait-dedupe-BAUSJotw.js +180 -0
  39. package/dist/agents/agent-bundle-mcp-materialize.js +1 -1
  40. package/dist/agents/auth-profiles.runtime.js +1 -1
  41. package/dist/agents/compaction-planning.worker.js +1 -1
  42. package/dist/agents/embedded-agent-runner/effective-tool-policy.js +1 -1
  43. package/dist/agents/embedded-agent-runner/tool-split.js +1 -1
  44. package/dist/agents/model-catalog.runtime.js +1 -1
  45. package/dist/agents/model-provider-auth.worker.js +3 -3
  46. package/dist/agents/models-config.runtime.js +1 -1
  47. package/dist/agents-CZSNDJWD.js +632 -0
  48. package/dist/agents.command-shared-DgbjfH23.js +16 -0
  49. package/dist/agents.commands.add-DknGM1oz.js +304 -0
  50. package/dist/agents.commands.bind-DDVI0yDe.js +265 -0
  51. package/dist/agents.commands.delete-Dv4RHEhc.js +128 -0
  52. package/dist/agents.commands.identity-BSZbc1QR.js +143 -0
  53. package/dist/agents.commands.list-CA0OTw59.js +235 -0
  54. package/dist/aliases-EY1GbfwT.js +97 -0
  55. package/dist/api-CY0oKcRz.js +3 -0
  56. package/dist/api-DgjY0gIl.js +6 -0
  57. package/dist/api-VyMyAYze.js +2 -0
  58. package/dist/api-key-rotation-DxPKIdmC.js +167 -0
  59. package/dist/app-registration-BBDxCbFo.js +194 -0
  60. package/dist/apply-DMYy7tc3.js +544 -0
  61. package/dist/apply-Dd0n97MD.js +2 -0
  62. package/dist/apply-bHIT1nMp.js +416 -0
  63. package/dist/apply-g8x7Z83S.js +510 -0
  64. package/dist/apply-nnbx9TaB.js +2 -0
  65. package/dist/approval-native-helpers-CjaYvOaZ.js +398 -0
  66. package/dist/artifacts-B55YR-uA.js +368 -0
  67. package/dist/assistant-hJaOgfKl.js +291 -0
  68. package/dist/attachment-normalize-COsastJx.js +213 -0
  69. package/dist/attempt-execution-fDWDWcWe.js +584 -0
  70. package/dist/attempt-execution.helpers-Cze5xPim.js +969 -0
  71. package/dist/attempt-execution.runtime-B1iCG6LN.js +3 -0
  72. package/dist/attempt-execution.runtime.js +1 -1
  73. package/dist/attempt.prompt-helpers-CkBYHBBo.js +543 -0
  74. package/dist/attempt.tool-run-context-DzfRK5pV.js +1240 -0
  75. package/dist/audio-preflight.runtime-rjWd9uyk.js +7 -0
  76. package/dist/audio-preflight.runtime.js +1 -1
  77. package/dist/audit-DgFtNg3U.js +1108 -0
  78. package/dist/audit-L8EC3WhV.js +477 -0
  79. package/dist/audit.nondeep.runtime-D0sQ6bO2.js +1416 -0
  80. package/dist/audit.nondeep.runtime.js +1 -1
  81. package/dist/audit.runtime-CiG82F31.js +7 -0
  82. package/dist/audit.runtime.js +1 -1
  83. package/dist/auth-CzPdsZVM.js +567 -0
  84. package/dist/auth-choice-BNzS9QBI.js +3 -0
  85. package/dist/auth-choice-Cwr5kgcD.js +110 -0
  86. package/dist/auth-choice-DW9qPpMS.js +400 -0
  87. package/dist/auth-choice.apply.api-providers-C68tOdqj.js +34 -0
  88. package/dist/auth-choice.apply.api-providers-DSRK0gYo.js +2 -0
  89. package/dist/auth-choice.plugin-providers.runtime-BJ9VyO1C.js +11 -0
  90. package/dist/auth-choice.plugin-providers.runtime.js +1 -1
  91. package/dist/auth-health-BanKwsTW.js +219 -0
  92. package/dist/auth-list-Dq8obVno.js +115 -0
  93. package/dist/auth-order-VXqoAroP.js +105 -0
  94. package/dist/auth-profiles-6VFEdgC-.js +73 -0
  95. package/dist/auth-profiles-a0M4JYYg.js +14 -0
  96. package/dist/backend-config-COaTdVnN.js +259 -0
  97. package/dist/bash-tools-BMAquSiM.js +3 -0
  98. package/dist/bash-tools-DLiUXfaS.js +3497 -0
  99. package/dist/binding-routing-Bwvdx_7S.js +113 -0
  100. package/dist/binding-targets-Z_d0mK_1.js +121 -0
  101. package/dist/bootstrap-files-CoCV_zqu.js +202 -0
  102. package/dist/bootstrap-files-_T3VoTrV.js +3 -0
  103. package/dist/bridge-server-BIaNurGa.js +113 -0
  104. package/dist/browser-cli-D4wL8NU9.js +230 -0
  105. package/dist/browser-cli-actions-input-z40PGiYI.js +522 -0
  106. package/dist/browser-cli-actions-observe-C4TeyNke.js +81 -0
  107. package/dist/browser-cli-debug-Dv0gH-c8.js +137 -0
  108. package/dist/browser-cli-inspect-BUXeITYc.js +117 -0
  109. package/dist/browser-cli-manage-qMb3Yw5Y.js +446 -0
  110. package/dist/browser-cli-resize-CZWnGwGz.js +32 -0
  111. package/dist/browser-cli-shared-BpinhvE3.js +69 -0
  112. package/dist/browser-cli-state-CBbKqqgP.js +371 -0
  113. package/dist/browser-cli-uI5GGX51.js +2 -0
  114. package/dist/browser-control-auth-CFPJXdN_.js +2 -0
  115. package/dist/browser-profiles-D4ni3t4J.js +2 -0
  116. package/dist/browser-runtime-Dm5D_PLf.js +389 -0
  117. package/dist/browser-tool.schema-Bek02ox5.js +132 -0
  118. package/dist/btw-command-DdrwvCK4.js +18 -0
  119. package/dist/build-DkEeJ9sO.js +261 -0
  120. package/dist/build-info.json +2 -2
  121. package/dist/bundled/boot-md/handler.js +2 -2
  122. package/dist/bundled/session-memory/handler.js +1 -1
  123. package/dist/bundled-channel-config-schema-BeowdkHi.d.ts +3168 -0
  124. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  125. package/dist/capability-cli-DTRuKZJC.js +1809 -0
  126. package/dist/capability-provider-runtime-Cpp-Jq9g.js +346 -0
  127. package/dist/cdp.helpers-GfQkB-B5.js +637 -0
  128. package/dist/channel-BRehZ4Cg.js +2309 -0
  129. package/dist/channel-actions-hdQKe_se.js +46 -0
  130. package/dist/channel-bootstrap.runtime-BzjlNG_j.js +38 -0
  131. package/dist/channel-bootstrap.runtime-CmNNVl40.js +2 -0
  132. package/dist/channel-bootstrap.runtime.js +1 -1
  133. package/dist/channel-core-BLcWqSk-.js +5 -0
  134. package/dist/channel-inbound-pR1B7HTU.js +121 -0
  135. package/dist/channel-message-W0VurpjH.js +12 -0
  136. package/dist/channel-outbound-DO4HI6E_.js +436 -0
  137. package/dist/channel-plugin-resolution-CLA7S5_A.js +2 -0
  138. package/dist/channel-plugin-resolution-DzwVj01h.js +135 -0
  139. package/dist/channel-resolution-DOPyiG4k.js +46 -0
  140. package/dist/channel-selection-kwoWZDQ3.js +171 -0
  141. package/dist/channel-selection.runtime-LiDliif9.js +2 -0
  142. package/dist/channel-selection.runtime.js +1 -1
  143. package/dist/channel.runtime-DDt3PayH.js +697 -0
  144. package/dist/channel.runtime.js +1 -1
  145. package/dist/channels-CKJd4eUz.js +1004 -0
  146. package/dist/channels-cli-DLAPi8pX.js +331 -0
  147. package/dist/chat-6WsYrS9m.js +3 -0
  148. package/dist/chat-DpsCEXAx.js +2940 -0
  149. package/dist/chrome-BWHc9vYG.js +1517 -0
  150. package/dist/chrome-mcp-BGKgR8A_.js +2 -0
  151. package/dist/chrome-mcp-Bg5D5PDc.js +864 -0
  152. package/dist/claude-live-session-BLCZnv-A.js +2 -0
  153. package/dist/claude-live-session-CGnB64D6.js +1338 -0
  154. package/dist/clawbot-cli-ynXzgp8B.js +9 -0
  155. package/dist/cli/daemon-cli.js +3 -3
  156. package/dist/cli/gateway-lifecycle.runtime.js +4 -4
  157. package/dist/cli/run-main.js +12 -12
  158. package/dist/cli-B4Ttnj0P.js +2 -0
  159. package/dist/cli-BjVgdamH.js +2 -0
  160. package/dist/cli-CNqBrHLU.js +293 -0
  161. package/dist/cli-backends.runtime-DoxtCrow.js +7 -0
  162. package/dist/cli-backends.runtime.js +1 -1
  163. package/dist/cli-compaction-BCuLbs75.js +363 -0
  164. package/dist/cli-mthNIkji.js +141 -0
  165. package/dist/cli-registry-loader-B2sNTdgY.js +2 -0
  166. package/dist/cli-registry-loader-Dz9YFrjw.js +193 -0
  167. package/dist/cli-runner-C9t-9-Io.js +597 -0
  168. package/dist/cli-runner-D21qMGk7.js +2 -0
  169. package/dist/cli-runner.runtime-BNqbJFgu.js +3 -0
  170. package/dist/cli-runner.runtime-Dv50IEvH.js +4 -0
  171. package/dist/cli-runner.runtime.js +1 -1
  172. package/dist/cli-session-jBtClYfT.js +119 -0
  173. package/dist/cli-startup-metadata.json +9 -9
  174. package/dist/cli.runtime-CGBzSGAG.js +1276 -0
  175. package/dist/cli.runtime.js +1 -1
  176. package/dist/codex-native-web-search-B3C-srtm.js +20 -0
  177. package/dist/codex-native-web-search-B7xh2Xcb.js +4 -0
  178. package/dist/codex-native-web-search-core-CrwANQg5.js +106 -0
  179. package/dist/command-auth-Dz_pdczs.js +135 -0
  180. package/dist/command-config-resolution-XCA63Yv8.js +25 -0
  181. package/dist/command-config-resolution-xtKMDTG9.js +2 -0
  182. package/dist/command-config-resolution.runtime-xtKMDTG9.js +2 -0
  183. package/dist/command-config-resolution.runtime.js +1 -1
  184. package/dist/command-execution-startup-CasEqEXh.js +90 -0
  185. package/dist/command-primitives-runtime-DC9gtSI3.js +3 -0
  186. package/dist/command-registry-BQnMdca9.js +9 -0
  187. package/dist/command-registry-core-hx2t1jQP.js +114 -0
  188. package/dist/command-registry-rbKA-L_8.js +4 -0
  189. package/dist/command-secret-gateway-7oveYQCx.js +589 -0
  190. package/dist/command-secret-targets-B7M1Us_C.js +2 -0
  191. package/dist/command-status-builders-DrSoZhiI.js +147 -0
  192. package/dist/command-status.runtime-By0071-y.js +90 -0
  193. package/dist/command-status.runtime.js +1 -1
  194. package/dist/commands/status.summary.runtime.js +3 -3
  195. package/dist/commands-B1MnUj5-.js +161 -0
  196. package/dist/commands-compact.runtime-DELj3JaW.js +10 -0
  197. package/dist/commands-compact.runtime.js +1 -1
  198. package/dist/commands-core.runtime-Zw0grrkC.js +2 -0
  199. package/dist/commands-core.runtime.js +1 -1
  200. package/dist/commands-handlers.runtime-BCl_ZHJZ.js +6327 -0
  201. package/dist/commands-handlers.runtime.js +1 -1
  202. package/dist/commands-models-Uurm-0C3.js +448 -0
  203. package/dist/commands-registry-Bo1AeDcq.js +195 -0
  204. package/dist/commands-registry.runtime-C9DBHyhh.js +4 -0
  205. package/dist/commands-registry.runtime.js +1 -1
  206. package/dist/commands-status-BoAXH-wg.js +16 -0
  207. package/dist/commands-status-CNALMTN9.js +3 -0
  208. package/dist/commands-status.runtime-CNALMTN9.js +3 -0
  209. package/dist/commands-status.runtime.js +1 -1
  210. package/dist/commands-subagents-control.runtime-Dl4IuTzV.js +2 -0
  211. package/dist/commands-subagents-control.runtime.js +1 -1
  212. package/dist/commands-system-prompt-BPzpLmUp.js +2 -0
  213. package/dist/commands-system-prompt-DCOZSNh5.js +161 -0
  214. package/dist/commands.runtime-bfCLM0Sg.js +175 -0
  215. package/dist/commands.runtime.js +1 -1
  216. package/dist/commitments/runtime.js +1 -1
  217. package/dist/common-CoOYhmSg.js +286 -0
  218. package/dist/compact-yqaUOESq.js +1165 -0
  219. package/dist/compact.runtime-Y91AFZVE.js +12 -0
  220. package/dist/compact.runtime.js +1 -1
  221. package/dist/compaction-planning-DVnykwzd.js +202 -0
  222. package/dist/completion-cli-BJjq_g_B.js +393 -0
  223. package/dist/config-CsmSEaNn.js +374 -0
  224. package/dist/config-CtNXZ0iy.js +610 -0
  225. package/dist/config-cli-CNpIVdqp.js +1703 -0
  226. package/dist/config-mutation-B-SErGM0.js +5 -0
  227. package/dist/config-mutations-Bu3ahkX8.js +161 -0
  228. package/dist/config-utils-Bv0Nisds.js +141 -0
  229. package/dist/config-validation-DitvTYD8.js +33 -0
  230. package/dist/configure-CdjbRKTg.js +771 -0
  231. package/dist/configure-Cvi-5ml4.js +3 -0
  232. package/dist/configure.commands-BJii4733.js +1253 -0
  233. package/dist/configure.commands-tJzVFJ0o.js +2 -0
  234. package/dist/context-D1N9oPds.js +2 -0
  235. package/dist/context-XMtJ9b3v.js +248 -0
  236. package/dist/context-engine-host-compat-3QznbSaW.js +280 -0
  237. package/dist/context-engine-host-compat-DquSpnKD.js +2 -0
  238. package/dist/context-engine-lifecycle-Bqdhy9JU.js +627 -0
  239. package/dist/control-auth-CMW_9jmY.js +114 -0
  240. package/dist/control-service-D-r3k91q.js +40 -0
  241. package/dist/control-service-uIPYrp9F.js +3 -0
  242. package/dist/control-ui/assets/activity-DgMhyllD.js +124 -0
  243. package/dist/control-ui/assets/agents-CsRhxO2O.js +1030 -0
  244. package/dist/control-ui/assets/channels-Dq8bzpMg.js +120 -0
  245. package/dist/control-ui/assets/cron-Dk5bqYwg.js +1016 -0
  246. package/dist/control-ui/assets/debug-CNIwFEQO.js +97 -0
  247. package/dist/control-ui/assets/index-CV2NsPlu.js +7214 -0
  248. package/dist/control-ui/assets/instances-DLr0iEvT.js +57 -0
  249. package/dist/control-ui/assets/nodes-D3JEksjl.js +444 -0
  250. package/dist/control-ui/assets/sessions-nbXWGlHZ.js +425 -0
  251. package/dist/control-ui/assets/skills-tBOi8OBq.js +362 -0
  252. package/dist/control-ui/assets/workboard-ClTo7wmK.js +402 -0
  253. package/dist/control-ui/index.html +1 -1
  254. package/dist/control-ui/sw.js +1 -1
  255. package/dist/control-ui-AkRMsk9S.js +750 -0
  256. package/dist/conversation-label-generator-DHtcgSBn.js +72 -0
  257. package/dist/conversation-runtime-BEgHW4ta.js +31 -0
  258. package/dist/core-Bslrvfnp.js +284 -0
  259. package/dist/core-api-BOlUb7G8.js +5 -0
  260. package/dist/core-api-CiBoGa2I.js +2 -0
  261. package/dist/crestodian/crestodian.js +1 -1
  262. package/dist/crestodian/rescue-message.js +1 -1
  263. package/dist/crestodian-mXnyuHx9.js +55 -0
  264. package/dist/cron-PbdpyFrD.js +453 -0
  265. package/dist/daemon-install-C-d4dFvn.js +66 -0
  266. package/dist/daemon-install-auth-profiles-store.runtime-CvE2EVVo.js +2 -0
  267. package/dist/daemon-install-auth-profiles-store.runtime.js +1 -1
  268. package/dist/dashboard-Ey5dnvMI.js +263 -0
  269. package/dist/defaults-CsRAv-qE.js +130 -0
  270. package/dist/defaults-DHZBSNHC.js +3 -0
  271. package/dist/defaults.constants-CR4S_tvw.js +76 -0
  272. package/dist/deliver-BkuuFBlm.js +1399 -0
  273. package/dist/deliver-P4upyes7.js +3 -0
  274. package/dist/deliver-runtime-CjnLI_nC.js +2 -0
  275. package/dist/delivery-outbound.runtime-fcJ-M8qj.js +7 -0
  276. package/dist/delivery-outbound.runtime.js +1 -1
  277. package/dist/delivery-queue-BqgHvNlY.js +863 -0
  278. package/dist/delivery-queue-CfsRscJb.js +2 -0
  279. package/dist/delivery-queue-runtime-D0PKG1Bv.js +16 -0
  280. package/dist/delivery-target.runtime-C5e8d0WH.js +45 -0
  281. package/dist/delivery-target.runtime.js +1 -1
  282. package/dist/delivery.runtime-2Ut8xM3P.js +470 -0
  283. package/dist/delivery.runtime.js +1 -1
  284. package/dist/detached-task-runtime-OOZBqRy-.js +86 -0
  285. package/dist/diagnostics-zf6WQ2h7.js +168 -0
  286. package/dist/dialogue-C8IOya-l.js +37 -0
  287. package/dist/direct-dm-wPF-KfNb.js +81 -0
  288. package/dist/directive-handling.defaults-C-1lmFYo.js +22 -0
  289. package/dist/directive-handling.fast-lane-DENPMtYI.js +70 -0
  290. package/dist/directive-handling.impl-C1p5t3qA.js +2 -0
  291. package/dist/directive-handling.impl-DOo2Sa7C.js +823 -0
  292. package/dist/directive-handling.model-selection-6gC-fr_g.js +122 -0
  293. package/dist/directive-handling.persist.runtime-CuhUd2kW.js +274 -0
  294. package/dist/directive-handling.persist.runtime.js +1 -1
  295. package/dist/directives-BIKSyN8C.js +319 -0
  296. package/dist/directory-cli-DZ0PU0Rv.js +239 -0
  297. package/dist/dispatch-DQLImAqt.js +2057 -0
  298. package/dist/dispatch-acp-DzyX7wsq.js +1102 -0
  299. package/dist/dispatch-acp-manager.runtime-CoAfs4O1.js +3 -0
  300. package/dist/dispatch-acp-manager.runtime.js +1 -1
  301. package/dist/dispatch-acp-media.runtime-7uUP_jr9.js +4 -0
  302. package/dist/dispatch-acp-media.runtime.js +1 -1
  303. package/dist/dispatch-acp-transcript.runtime-BUlmV_h0.js +40 -0
  304. package/dist/dispatch-acp-transcript.runtime.js +1 -1
  305. package/dist/dispatch-acp-tts.runtime-ChBnVkNt.js +3 -0
  306. package/dist/dispatch-acp-tts.runtime.js +1 -1
  307. package/dist/dispatch-acp.runtime-DAexFaBu.js +18 -0
  308. package/dist/dispatch-acp.runtime.js +1 -1
  309. package/dist/dispatcher-D3IQEbf9.js +106 -0
  310. package/dist/doctor-BSqEqfb6.js +760 -0
  311. package/dist/doctor-auth-flat-profiles-BIZ4wsYP.js +2 -0
  312. package/dist/doctor-auth-flat-profiles-DXtD5LfC.js +516 -0
  313. package/dist/doctor-auth-legacy-oauth-DwFbRYTP.js +48 -0
  314. package/dist/doctor-auth-oauth-sidecar-6I3FEJbi.js +2 -0
  315. package/dist/doctor-auth-oauth-sidecar-BSC3rnDM.js +177 -0
  316. package/dist/doctor-auth-tVGsUiM6.js +216 -0
  317. package/dist/doctor-bootstrap-size-B0q6bdkO.js +57 -0
  318. package/dist/doctor-claude-cli-Bn79OuBT.js +150 -0
  319. package/dist/doctor-config-flow-CCwocXpV.js +1819 -0
  320. package/dist/doctor-core-checks-D7-1l8jy.js +666 -0
  321. package/dist/doctor-core-checks-eM8FNi8B.js +2 -0
  322. package/dist/doctor-core-checks.runtime-Dc03aeoU.js +278 -0
  323. package/dist/doctor-core-checks.runtime.js +1 -1
  324. package/dist/doctor-gRYfpEbB.js +6 -0
  325. package/dist/doctor-gateway-daemon-flow-KTnHAdeV.js +349 -0
  326. package/dist/doctor-gateway-services-BByDQtjY.js +465 -0
  327. package/dist/doctor-health-CnoM718z.js +65 -0
  328. package/dist/doctor-health-contributions-flVKMQwr.js +874 -0
  329. package/dist/doctor-lint-BBm6gtBa.js +95 -0
  330. package/dist/doctor-memory-search-DjHVDCGo.js +407 -0
  331. package/dist/doctor-state-integrity-Bgw25cz1.js +1257 -0
  332. package/dist/doctor-tool-result-cap-advice-B8wTpiTO.js +27 -0
  333. package/dist/doctor-workspace-status-DcjeJIpT.js +76 -0
  334. package/dist/dreaming-BE4t8DVf.js +523 -0
  335. package/dist/dreaming-command-DWm1lB-Z.js +101 -0
  336. package/dist/dreaming-narrative-8DM-OMrm.js +721 -0
  337. package/dist/dreaming-narrative-CcFfheQI.js +2 -0
  338. package/dist/dreaming-phases-CqOhhTdZ.js +2 -0
  339. package/dist/dreaming-phases-D9eT6Kk0.js +1162 -0
  340. package/dist/drive-D2M5B7-2.js +899 -0
  341. package/dist/echo-transcript-B-wl5MoX.js +52 -0
  342. package/dist/effective-tool-policy-Cx8mC5aA.js +89 -0
  343. package/dist/embedded-agent-BTvtoOe_.js +4 -0
  344. package/dist/embedded-agent-CGmSKuNM.js +4074 -0
  345. package/dist/embedded-agent-helpers-CboIPx57.js +6 -0
  346. package/dist/embedded-agent-helpers-cw0InMDZ.js +1037 -0
  347. package/dist/embedded-agent.runtime-Bfe4bjyF.js +4 -0
  348. package/dist/embedded-agent.runtime.js +1 -1
  349. package/dist/embedded-backend-D-EshN85.js +744 -0
  350. package/dist/embedded-gateway-stub.runtime-Cx9qs0KV.js +12 -0
  351. package/dist/embedded-gateway-stub.runtime.js +1 -1
  352. package/dist/embedding-provider-runtime-DaXfsUPo.js +86 -0
  353. package/dist/embedding-providers-CdU99clu.js +2 -0
  354. package/dist/embeddings-http-BQnlTr-1.js +222 -0
  355. package/dist/engine-qmd-5jbjGywA.js +708 -0
  356. package/dist/engine-storage-CfAgwoDp.js +203 -0
  357. package/dist/entry.js +1 -1
  358. package/dist/errors-C0AUxo3P.js +2 -0
  359. package/dist/exec-approval-forwarder.runtime-BvR47p5Z.js +4 -0
  360. package/dist/exec-approval-forwarder.runtime.js +1 -1
  361. package/dist/exec-approval-session-target-CCqYgaVa.js +177 -0
  362. package/dist/exec-auto-reviewer-BfJaNkNy.js +2 -0
  363. package/dist/exec-auto-reviewer-Dqx7I88Z.js +241 -0
  364. package/dist/execute.runtime-Qb6Z75sG.js +579 -0
  365. package/dist/execute.runtime.js +1 -1
  366. package/dist/extensionAPI.js +2 -2
  367. package/dist/extensions/active-memory/index.js +3 -3
  368. package/dist/extensions/admin-http-rpc/index.js +1 -1
  369. package/dist/extensions/alibaba/index.js +1 -1
  370. package/dist/extensions/alibaba/video-generation-provider.js +1 -1
  371. package/dist/extensions/baichuan/index.js +1 -1
  372. package/dist/extensions/browser/browser-bridge.js +1 -1
  373. package/dist/extensions/browser/browser-cdp.js +1 -1
  374. package/dist/extensions/browser/browser-config.js +5 -5
  375. package/dist/extensions/browser/browser-control-auth.js +2 -2
  376. package/dist/extensions/browser/browser-doctor.js +3 -3
  377. package/dist/extensions/browser/browser-maintenance.js +1 -1
  378. package/dist/extensions/browser/browser-profiles.js +3 -3
  379. package/dist/extensions/browser/browser-runtime-api.js +14 -14
  380. package/dist/extensions/browser/cli-metadata.js +1 -1
  381. package/dist/extensions/browser/index.js +1 -1
  382. package/dist/extensions/browser/plugin-registration.js +1 -1
  383. package/dist/extensions/browser/register.runtime.js +4 -4
  384. package/dist/extensions/browser/runtime-api.js +16 -16
  385. package/dist/extensions/byteplus/index.js +3 -3
  386. package/dist/extensions/byteplus/video-generation-provider.js +1 -1
  387. package/dist/extensions/canvas/index.js +3 -3
  388. package/dist/extensions/canvas/runtime-api.js +2 -2
  389. package/dist/extensions/deepseek/index.js +1 -1
  390. package/dist/extensions/device-pair/api.js +2 -2
  391. package/dist/extensions/device-pair/pair-command-approve.js +1 -1
  392. package/dist/extensions/device-pair/qr-image.js +2 -2
  393. package/dist/extensions/longcat/index.js +1 -1
  394. package/dist/extensions/memory-core/api.js +3 -3
  395. package/dist/extensions/memory-core/cli-metadata.js +1 -1
  396. package/dist/extensions/memory-core/cli.js +2 -2
  397. package/dist/extensions/memory-core/index.js +11 -11
  398. package/dist/extensions/memory-core/manager-runtime.js +1 -1
  399. package/dist/extensions/memory-core/runtime-api.js +6 -6
  400. package/dist/extensions/minimax/image-generation-provider.js +1 -1
  401. package/dist/extensions/minimax/index.js +7 -7
  402. package/dist/extensions/minimax/media-understanding-provider.js +1 -1
  403. package/dist/extensions/minimax/music-generation-provider.js +1 -1
  404. package/dist/extensions/minimax/oauth.js +1 -1
  405. package/dist/extensions/minimax/oauth.runtime.js +1 -1
  406. package/dist/extensions/minimax/provider-registration.js +1 -1
  407. package/dist/extensions/minimax/speech-provider.js +1 -1
  408. package/dist/extensions/minimax/video-generation-provider.js +1 -1
  409. package/dist/extensions/minimax/web-search-provider.js +1 -1
  410. package/dist/extensions/moonshot/index.js +5 -5
  411. package/dist/extensions/moonshot/media-understanding-provider.js +1 -1
  412. package/dist/extensions/moonshot/web-search-provider.js +1 -1
  413. package/dist/extensions/qianfan/index.js +1 -1
  414. package/dist/extensions/qwen/index.js +5 -5
  415. package/dist/extensions/qwen/media-understanding-provider.js +1 -1
  416. package/dist/extensions/qwen/video-generation-provider.js +1 -1
  417. package/dist/extensions/sensenova/index.js +1 -1
  418. package/dist/extensions/skill-workshop/api.js +2 -2
  419. package/dist/extensions/skill-workshop/index.js +4 -4
  420. package/dist/extensions/stepfun/index.js +2 -2
  421. package/dist/extensions/tavily/index.js +1 -1
  422. package/dist/extensions/tavily/web-search-provider.js +1 -1
  423. package/dist/extensions/tencent/index.js +2 -2
  424. package/dist/extensions/tiangong/index.js +1 -1
  425. package/dist/extensions/volcengine/index.js +3 -3
  426. package/dist/extensions/volcengine/speech-provider.js +1 -1
  427. package/dist/extensions/webhooks/api.js +1 -1
  428. package/dist/extensions/webhooks/index.js +1 -1
  429. package/dist/extensions/weixin/index.js +7 -7
  430. package/dist/extensions/workboard/index.js +2 -2
  431. package/dist/extensions/xiaomi/index.js +4 -4
  432. package/dist/extensions/xiaomi/speech-provider.js +1 -1
  433. package/dist/extensions/xingchen/index.js +1 -1
  434. package/dist/extensions/yi/index.js +1 -1
  435. package/dist/extensions/zai/index.js +4 -4
  436. package/dist/extensions/zai/media-understanding-provider.js +1 -1
  437. package/dist/extensions/zhinao/index.js +1 -1
  438. package/dist/external-cli-auth-selection-CM_aOUJw.js +113 -0
  439. package/dist/extra-params-Bm1eLWN9.js +615 -0
  440. package/dist/fallback-notice-state-v1kyWACv.js +15 -0
  441. package/dist/fallbacks-CDllk2g1.js +31 -0
  442. package/dist/fallbacks-shared-DdMKEmAC.js +116 -0
  443. package/dist/fengming-runtime-DSv30J04.js +33 -0
  444. package/dist/fengming-runtime-config-BE-DquuY.js +2 -0
  445. package/dist/fengming-runtime-memory-BE-DquuY.js +2 -0
  446. package/dist/fengming-runtime-session-BE-DquuY.js +2 -0
  447. package/dist/fengming-tools-DHb-ZeDC.js +12221 -0
  448. package/dist/flows-Cz3y10A9.js +189 -0
  449. package/dist/fs-utils-D05rps7O.js +9 -0
  450. package/dist/gateway-DTi2D7ZS.js +133 -0
  451. package/dist/gateway-cli-DT2fL2fX.js +443 -0
  452. package/dist/gateway-install-token-CJhAycOA.js +136 -0
  453. package/dist/gateway-method-runtime-BuiYTDQk.js +21 -0
  454. package/dist/gateway-runtime-C5_cVlSW.js +23 -0
  455. package/dist/get-reply-Cz-dUrWm.js +5198 -0
  456. package/dist/get-reply-from-config.runtime-BC1HT67i.js +2 -0
  457. package/dist/get-reply-from-config.runtime.js +1 -1
  458. package/dist/github-copilot-token-09lxV3kH.js +2 -0
  459. package/dist/health-CmihbcqN.js +621 -0
  460. package/dist/health-D8L37hBZ.js +111 -0
  461. package/dist/health-DU7I9RrJ.js +3 -0
  462. package/dist/health-state-QZ2E6xGQ.js +106 -0
  463. package/dist/heartbeat-runner-Bz5PMzEI.js +1930 -0
  464. package/dist/heartbeat-runner-DfqqQ_8w.js +5 -0
  465. package/dist/heartbeat-runner.runtime-8BshUhoS.js +3 -0
  466. package/dist/heartbeat-runner.runtime.js +1 -1
  467. package/dist/helpers-Bkq4POdX.js +406 -0
  468. package/dist/hook-helpers-nmDwt3Fa.js +44 -0
  469. package/dist/hooks-9FOcRqfu.js +536 -0
  470. package/dist/hooks-cli-CrQelcwo.js +465 -0
  471. package/dist/http-endpoint-helpers-BD5u6YsT.js +37 -0
  472. package/dist/http-utils-RcKuBJ0I.js +98 -0
  473. package/dist/image-DwNoypK2.js +385 -0
  474. package/dist/image-fallbacks-BUyDnmUX.js +31 -0
  475. package/dist/image-generation-core.auth.runtime-CA8miEMh.js +2 -0
  476. package/dist/image-generation-core.auth.runtime.js +1 -1
  477. package/dist/image-generation-provider-DXMW5EmB.js +152 -0
  478. package/dist/image-runtime-D5QpNNzz.js +9 -0
  479. package/dist/image-tool.helpers-6vGxo1Y0.js +150 -0
  480. package/dist/images-BGWLzQEJ.js +416 -0
  481. package/dist/images-Db4UB3JG.js +2 -0
  482. package/dist/inbound-reply-dispatch-DRF6ZmQg.js +2 -0
  483. package/dist/inbound-reply-dispatch-RAKLqow4.js +147 -0
  484. package/dist/index.js +1 -1
  485. package/dist/infra-runtime-BFrpRc_V.js +32 -0
  486. package/dist/init-sR7bCS9D.js +59 -0
  487. package/dist/install-BzdJbOUx.js +262 -0
  488. package/dist/install.runtime-Zye6pbZ6.js +2 -0
  489. package/dist/internal-DL_vFx8C.js +399 -0
  490. package/dist/isolated-agent-Qif8Llbt.js +2 -0
  491. package/dist/isolated-agent-aqEjxqs-.js +1097 -0
  492. package/dist/kernel-B-i4c2IK.js +979 -0
  493. package/dist/kernel-DYDJ_hLb.js +3 -0
  494. package/dist/kimi-web-search-provider.runtime-95HAkvHY.js +307 -0
  495. package/dist/kimi-web-search-provider.runtime.js +1 -1
  496. package/dist/library-CZVbE5hF.js +45 -0
  497. package/dist/lifecycle-C8M3YLbT.js +2 -0
  498. package/dist/lifecycle-CPDNQnUN.js +570 -0
  499. package/dist/lifecycle-DpuP7n3J.js +355 -0
  500. package/dist/lifecycle.runtime-C8M3YLbT.js +2 -0
  501. package/dist/lifecycle.runtime.js +1 -1
  502. package/dist/link-understanding/apply.runtime.js +3 -3
  503. package/dist/list-B_ALwpPl.js +2 -0
  504. package/dist/list-Bda_GYFy.js +207 -0
  505. package/dist/list.list-command-W9OGfAIU.js +429 -0
  506. package/dist/list.model-row-LV4AaX0H.js +39 -0
  507. package/dist/list.probe-CrZm6BH2.js +451 -0
  508. package/dist/list.probe-Dfdmb8bC.js +2 -0
  509. package/dist/list.provider-catalog-7T1jKk0n.js +211 -0
  510. package/dist/list.provider-catalog-DjGyZVEj.js +2 -0
  511. package/dist/list.registry-load-DkCS8JZQ.js +152 -0
  512. package/dist/list.row-sources-B1vjo_Y9.js +474 -0
  513. package/dist/list.source-plan-C9Sa6zRK.js +81 -0
  514. package/dist/list.status-command-9daSZZDm.js +815 -0
  515. package/dist/live-model-switch-Dy-UFUMS.js +119 -0
  516. package/dist/llm-slug-generator-DEmh5-_1.js +78 -0
  517. package/dist/llm-slug-generator.js +1 -1
  518. package/dist/load-config-CvQpC8k6.js +27 -0
  519. package/dist/load-context-_qSHpZ5S.js +82 -0
  520. package/dist/loader-CntMt07B.js +7008 -0
  521. package/dist/local-dispatch.runtime-BSN_gqNS.js +10 -0
  522. package/dist/local-dispatch.runtime.js +1 -1
  523. package/dist/main-session-restart-recovery-Db7366lt.js +2 -0
  524. package/dist/main-session-restart-recovery-n87NTooQ.js +389 -0
  525. package/dist/managed-image-attachments-BTBBHlKl.js +2 -0
  526. package/dist/managed-image-attachments-C6_V1yX0.js +616 -0
  527. package/dist/manager-CKrWxjV6.js +3737 -0
  528. package/dist/manager-Dvb1FVnx.js +2314 -0
  529. package/dist/mcp/plugin-tools-serve.js +2 -2
  530. package/dist/mcp-http-CSoGXOa_.js +583 -0
  531. package/dist/mcp-http-D4ieDB3W.js +2 -0
  532. package/dist/media-runtime-GeQTQkkK.js +391 -0
  533. package/dist/media-services-CWbIUZDe.js +416 -0
  534. package/dist/media-understanding/apply.runtime.js +1 -1
  535. package/dist/media-understanding-DXc2BD2L.js +87 -0
  536. package/dist/media-understanding-provider-BkdUiVWU.js +70 -0
  537. package/dist/media-understanding-provider-BlgmLViW.js +13 -0
  538. package/dist/media-understanding-provider-C9P2VjkC.js +29 -0
  539. package/dist/media-understanding-provider-CJlbgAvl.js +69 -0
  540. package/dist/memory-CnC2jM1l.js +437 -0
  541. package/dist/memory-core-host-engine-embeddings-Dy9vN-Ce.js +667 -0
  542. package/dist/memory-core-host-engine-foundation-C-pGGQnm.js +15 -0
  543. package/dist/memory-core-host-engine-qmd-DLJDON9w.js +2 -0
  544. package/dist/memory-core-host-engine-storage-Bzf-C8XE.js +2 -0
  545. package/dist/memory-core-host-runtime-cli-_LWA6G3x.js +10 -0
  546. package/dist/memory-core-host-runtime-core-CromkNBr.js +12 -0
  547. package/dist/memory-core-host-runtime-files-DpbviC1b.js +4 -0
  548. package/dist/memory-embedding-provider-runtime-CaVVaYC5.js +36 -0
  549. package/dist/memory-host-core-B5dWHwBF.js +78 -0
  550. package/dist/memory-host-search.runtime-DqlCFac1.js +2 -0
  551. package/dist/memory-host-search.runtime.js +1 -1
  552. package/dist/memory-runtime-BCeeWb1G.js +2 -0
  553. package/dist/memory-runtime-pR9KGin0.js +57 -0
  554. package/dist/memory-search-CpDEEY2Q.js +235 -0
  555. package/dist/message-BeGCG-D8.js +284 -0
  556. package/dist/message-YGMOyqP5.js +2 -0
  557. package/dist/message-action-runner-ByMT3_eb.js +1922 -0
  558. package/dist/message-action-runner-VXmKO_W7.js +2 -0
  559. package/dist/message-handler-MZ0DMbCx.js +1806 -0
  560. package/dist/metadata-registry-loader-BH9D1UOx.js +2 -0
  561. package/dist/metadata-registry-loader-BK1cHCas.js +22 -0
  562. package/dist/migrate-BA6w0hd3.js +2 -0
  563. package/dist/migrate-BGuQC-1W.js +458 -0
  564. package/dist/migration-provider-runtime-BBdDegWG.js +2 -0
  565. package/dist/migration-provider-runtime-C5WUjrQz.js +68 -0
  566. package/dist/minimax-web-search-provider.runtime-suVFk3Zx.js +148 -0
  567. package/dist/minimax-web-search-provider.runtime.js +1 -1
  568. package/dist/model-BJZXR9dq.js +1302 -0
  569. package/dist/model-BL7xlN5h.js +2 -0
  570. package/dist/model-auth-C-6dYVob.js +6 -0
  571. package/dist/model-auth-DJz7R41W.js +705 -0
  572. package/dist/model-auth-label-DKNXktIu.js +67 -0
  573. package/dist/model-catalog-BjiK5rtT.js +3 -0
  574. package/dist/model-catalog-DM1CTjkW.js +434 -0
  575. package/dist/model-catalog-visibility-DEJZG0In.js +76 -0
  576. package/dist/model-config.helpers-BKcUeE_P.js +95 -0
  577. package/dist/model-context-tokens-5y_PQELY.js +572 -0
  578. package/dist/model-fallback-BDdBR053.js +1288 -0
  579. package/dist/model-fallback-auth.runtime-pcWfkIUF.js +5 -0
  580. package/dist/model-fallback-auth.runtime.js +1 -1
  581. package/dist/model-picker-Bpvp4_N4.js +1135 -0
  582. package/dist/model-picker-DWPPtq6d.js +3 -0
  583. package/dist/model-picker-visibility-BtdqVF80.js +22 -0
  584. package/dist/model-picker.runtime-CYlqts2z.js +48 -0
  585. package/dist/model-picker.runtime.js +1 -1
  586. package/dist/model-pricing-cache-BmmncDqL.js +856 -0
  587. package/dist/model-pricing-cache-CEwRyWw2.js +3 -0
  588. package/dist/model-pricing-cache-state-B8Aspp85.js +83 -0
  589. package/dist/model-provider-auth-B3KXoKkE.js +2 -0
  590. package/dist/model-provider-auth-Bo_8T7of.js +375 -0
  591. package/dist/model-runtime-aliases-Br-ZlhrL.js +133 -0
  592. package/dist/model-selection-D5-ERakL.js +254 -0
  593. package/dist/model-selection-DrzgktRu.js +7 -0
  594. package/dist/model-selection-ibwsPgIw.js +352 -0
  595. package/dist/model-selection.runtime-BRkOZejt.js +7 -0
  596. package/dist/model-selection.runtime.js +1 -1
  597. package/dist/models-RPAH3ZBn.js +57 -0
  598. package/dist/models-auth-status-Cwu9OXU8.js +280 -0
  599. package/dist/models-cli-CrYkSUoa.js +257 -0
  600. package/dist/models-config-Ayzj9gDz.js +1189 -0
  601. package/dist/models-config-BFcjB7nN.js +2 -0
  602. package/dist/models-config.providers.secrets-CCRUW7gL.js +2 -0
  603. package/dist/models-config.providers.secrets-DdX_XSRo.js +382 -0
  604. package/dist/models-http-jLFnelH7.js +88 -0
  605. package/dist/monitor-CqWICrjO.js +60 -0
  606. package/dist/monitor-DwccYPfp.js +1024 -0
  607. package/dist/monitor.account-e9EVttpP.js +5382 -0
  608. package/dist/music-generation-provider-Dfc--R-x.js +308 -0
  609. package/dist/native-hook-relay-Cioqiqv8.js +1378 -0
  610. package/dist/native-hook-relay-DRwJIspI.js +19 -0
  611. package/dist/node-cli-CrG3LH9J.js +2806 -0
  612. package/dist/node-command-policy-CkBTEmhl.js +295 -0
  613. package/dist/nodes-BxrWFA09.js +1483 -0
  614. package/dist/nodes-DFPTGZjc.js +3 -0
  615. package/dist/nodes-cli-Czwyt6r1.js +960 -0
  616. package/dist/nodes-pending-B_4QHyB2.js +211 -0
  617. package/dist/nodes-utils-c4k31OaG.js +85 -0
  618. package/dist/oauth-BXncC0JP.js +852 -0
  619. package/dist/oauth-Ba1O2vqP.js +207 -0
  620. package/dist/oauth-CGQkfxbJ.js +746 -0
  621. package/dist/onboard-I5tQlVm6.js +768 -0
  622. package/dist/onboard-channels-BleKfB1D.js +2 -0
  623. package/dist/onboard-channels-jVaUjGYX.js +1534 -0
  624. package/dist/onboard-custom-BR_5oqUr.js +3 -0
  625. package/dist/onboard-custom-Ss0DThuP.js +280 -0
  626. package/dist/onboard-custom-config-B-knjQm7.js +422 -0
  627. package/dist/onboard-search-BsIztGYF.js +412 -0
  628. package/dist/openai-compat-errors-UkLkk8Q9.js +136 -0
  629. package/dist/openai-http-mTQB44gu.js +836 -0
  630. package/dist/openai-transport-stream-CZSs3SIi.js +3427 -0
  631. package/dist/openresponses-http-BA1Shmj-.js +1175 -0
  632. package/dist/operations-DhgPih1F.js +805 -0
  633. package/dist/order-CaXafMPG.js +218 -0
  634. package/dist/outbound-attachment-BAp7DXDc.js +19 -0
  635. package/dist/param-readers-De-m2SoB.js +2 -0
  636. package/dist/payloads-Dg9aAEOC.js +256 -0
  637. package/dist/persistent-bindings.lifecycle-BkLOz501.js +2 -0
  638. package/dist/persistent-bindings.lifecycle-e2MLbBCo.js +85 -0
  639. package/dist/plugin-enabled-CGSENjXc.js +232 -0
  640. package/dist/plugin-install-BI9_bsVT.js +118 -0
  641. package/dist/plugin-install-an4V2iXO.js +2 -0
  642. package/dist/plugin-install-config-policy-C66Nss3D.js +169 -0
  643. package/dist/plugin-registration-DMerQktl.js +97 -0
  644. package/dist/plugin-registry-BZfdCw65.js +3 -0
  645. package/dist/plugin-registry-I1fegSdK.js +2 -0
  646. package/dist/plugin-runtime-B3XMLJka.js +102 -0
  647. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  648. package/dist/plugin-sdk/acp-binding-runtime.js +1 -1
  649. package/dist/plugin-sdk/acp-runtime-backend.js +1 -1
  650. package/dist/plugin-sdk/acp-runtime.js +2 -2
  651. package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
  652. package/dist/plugin-sdk/agent-harness-runtime.js +16 -16
  653. package/dist/plugin-sdk/agent-harness-task-runtime.js +4 -4
  654. package/dist/plugin-sdk/agent-harness.js +17 -17
  655. package/dist/plugin-sdk/agent-runtime.js +17 -17
  656. package/dist/plugin-sdk/agent-sessions.js +1 -1
  657. package/dist/plugin-sdk/approval-native-runtime.js +2 -2
  658. package/dist/plugin-sdk/approval-reaction-runtime.js +1 -1
  659. package/dist/plugin-sdk/approval-runtime.js +2 -2
  660. package/dist/plugin-sdk/bundled-channel-config-schema-BsOWCrJT.d.ts +3169 -0
  661. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
  662. package/dist/plugin-sdk/channel-actions.js +2 -2
  663. package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
  664. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
  665. package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
  666. package/dist/plugin-sdk/channel-core.d.ts +1 -1
  667. package/dist/plugin-sdk/channel-core.js +2 -2
  668. package/dist/plugin-sdk/channel-envelope.js +1 -1
  669. package/dist/plugin-sdk/channel-inbound-roots.js +1 -1
  670. package/dist/plugin-sdk/channel-inbound.js +4 -4
  671. package/dist/plugin-sdk/channel-location.js +1 -1
  672. package/dist/plugin-sdk/channel-message-runtime.js +5 -5
  673. package/dist/plugin-sdk/channel-message.js +5 -5
  674. package/dist/plugin-sdk/channel-outbound.js +2 -2
  675. package/dist/plugin-sdk/channel-plugin-common.d.ts +1 -1
  676. package/dist/plugin-sdk/channel-reply-options-runtime.js +1 -1
  677. package/dist/plugin-sdk/command-auth-native.js +2 -2
  678. package/dist/plugin-sdk/command-auth.js +4 -4
  679. package/dist/plugin-sdk/command-primitives-runtime.js +2 -2
  680. package/dist/plugin-sdk/command-status-runtime.js +1 -1
  681. package/dist/plugin-sdk/command-status.js +1 -1
  682. package/dist/plugin-sdk/compat.d.ts +2 -2
  683. package/dist/plugin-sdk/compat.js +2 -2
  684. package/dist/plugin-sdk/config-mutation.js +2 -2
  685. package/dist/plugin-sdk/config-runtime.js +1 -1
  686. package/dist/plugin-sdk/config-schema-DUddICQM.d.ts +33 -0
  687. package/dist/plugin-sdk/conversation-binding-runtime.js +1 -1
  688. package/dist/plugin-sdk/conversation-runtime.js +3 -3
  689. package/dist/plugin-sdk/core.d.ts +1 -1
  690. package/dist/plugin-sdk/core.js +3 -3
  691. package/dist/plugin-sdk/delivery-queue-runtime.js +1 -1
  692. package/dist/plugin-sdk/direct-dm.js +1 -1
  693. package/dist/plugin-sdk/discord.d.ts +2 -2
  694. package/dist/plugin-sdk/embedding-providers.js +2 -2
  695. package/dist/plugin-sdk/gateway-method-runtime.js +1 -1
  696. package/dist/plugin-sdk/gateway-runtime.js +2 -2
  697. package/dist/plugin-sdk/health.js +1 -1
  698. package/dist/plugin-sdk/image-generation-core.js +3 -3
  699. package/dist/plugin-sdk/image-generation-runtime.js +1 -1
  700. package/dist/plugin-sdk/image-generation.js +2 -2
  701. package/dist/plugin-sdk/inbound-reply-dispatch.js +3 -3
  702. package/dist/plugin-sdk/index.js +1 -1
  703. package/dist/plugin-sdk/infra-runtime.js +3 -3
  704. package/dist/plugin-sdk/mattermost.js +1 -1
  705. package/dist/plugin-sdk/media-generation-runtime-shared.js +1 -1
  706. package/dist/plugin-sdk/media-generation-runtime.js +1 -1
  707. package/dist/plugin-sdk/media-runtime.js +7 -7
  708. package/dist/plugin-sdk/media-understanding-runtime.js +1 -1
  709. package/dist/plugin-sdk/media-understanding.js +2 -2
  710. package/dist/plugin-sdk/memory-core-host-engine-embeddings.js +4 -4
  711. package/dist/plugin-sdk/memory-core-host-engine-foundation.js +2 -2
  712. package/dist/plugin-sdk/memory-core-host-engine-qmd.js +2 -2
  713. package/dist/plugin-sdk/memory-core-host-engine-storage.js +6 -6
  714. package/dist/plugin-sdk/memory-core-host-runtime-cli.js +2 -2
  715. package/dist/plugin-sdk/memory-core-host-runtime-core.js +3 -3
  716. package/dist/plugin-sdk/memory-core-host-runtime-files.js +4 -4
  717. package/dist/plugin-sdk/memory-core.js +3 -3
  718. package/dist/plugin-sdk/memory-host-core.js +3 -3
  719. package/dist/plugin-sdk/memory-host-files.js +4 -4
  720. package/dist/plugin-sdk/memory-host-search.js +1 -1
  721. package/dist/plugin-sdk/models-provider-runtime.js +1 -1
  722. package/dist/plugin-sdk/music-generation-core.js +1 -1
  723. package/dist/plugin-sdk/native-command-registry.js +1 -1
  724. package/dist/plugin-sdk/outbound-media.js +2 -2
  725. package/dist/plugin-sdk/outbound-runtime.js +3 -3
  726. package/dist/plugin-sdk/param-readers.js +2 -2
  727. package/dist/plugin-sdk/plugin-runtime.js +2 -2
  728. package/dist/plugin-sdk/provider-auth-api-key.js +4 -4
  729. package/dist/plugin-sdk/provider-auth-login.js +1 -1
  730. package/dist/plugin-sdk/provider-auth-runtime.js +2 -2
  731. package/dist/plugin-sdk/provider-auth.js +6 -6
  732. package/dist/plugin-sdk/provider-catalog-runtime.js +2 -2
  733. package/dist/plugin-sdk/provider-entry.js +1 -1
  734. package/dist/plugin-sdk/provider-setup.js +1 -1
  735. package/dist/plugin-sdk/provider-stream-family.js +3 -3
  736. package/dist/plugin-sdk/provider-stream.js +2 -2
  737. package/dist/plugin-sdk/provider-transport-runtime.js +1 -1
  738. package/dist/plugin-sdk/provider-web-fetch.js +2 -2
  739. package/dist/plugin-sdk/provider-web-search.js +4 -4
  740. package/dist/plugin-sdk/realtime-bootstrap-context.js +2 -2
  741. package/dist/plugin-sdk/realtime-transcription.js +1 -1
  742. package/dist/plugin-sdk/realtime-voice.js +2 -2
  743. package/dist/plugin-sdk/reply-dispatch-runtime.js +1 -1
  744. package/dist/plugin-sdk/reply-runtime.js +6 -6
  745. package/dist/plugin-sdk/runtime-secret-resolution.js +2 -2
  746. package/dist/plugin-sdk/runtime.js +3 -3
  747. package/dist/plugin-sdk/self-hosted-provider-setup.js +1 -1
  748. package/dist/plugin-sdk/simple-completion-runtime.js +1 -1
  749. package/dist/plugin-sdk/speech-core.js +2 -2
  750. package/dist/plugin-sdk/speech.js +1 -1
  751. package/dist/plugin-sdk/tool-plugin.js +1 -1
  752. package/dist/plugin-sdk/transcripts.js +1 -1
  753. package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
  754. package/dist/plugin-sdk/tts-runtime.js +1 -1
  755. package/dist/plugin-sdk/video-generation-core.js +2 -2
  756. package/dist/plugin-sdk/video-generation-runtime.js +1 -1
  757. package/dist/plugin-sdk/web-media.js +3 -3
  758. package/dist/plugin-sdk/zalouser.js +1 -1
  759. package/dist/plugin-sdk/zod-schema.core-B4_b2R5K.d.ts +166 -0
  760. package/dist/plugin-service-2XF6Lu_a.js +1249 -0
  761. package/dist/plugins/build-smoke-entry.js +2 -2
  762. package/dist/plugins/loader.js +1 -1
  763. package/dist/plugins/provider-discovery.runtime.js +1 -1
  764. package/dist/plugins/provider-runtime.runtime.js +1 -1
  765. package/dist/plugins/runtime/index.js +21 -21
  766. package/dist/plugins/tools.js +1 -1
  767. package/dist/plugins-authoring-command-CCX6tJwd.js +304 -0
  768. package/dist/plugins-cli-HX8nTV2h.js +63 -0
  769. package/dist/plugins-cli.runtime-BYn4VsLP.js +339 -0
  770. package/dist/plugins-cli.runtime.js +1 -1
  771. package/dist/plugins-command-helpers-ByuW-yNj.js +2 -0
  772. package/dist/plugins-command-helpers-DaaxGnCD.js +164 -0
  773. package/dist/plugins-inspect-command-C9NDk23X.js +248 -0
  774. package/dist/plugins-install-command-B0NfUxeA.js +993 -0
  775. package/dist/plugins-install-command-BmuScfLI.js +2 -0
  776. package/dist/plugins-install-persist-CfwO876P.js +252 -0
  777. package/dist/plugins-list-command-Bx8X908n.js +184 -0
  778. package/dist/plugins-uninstall-command-p6h44-Ft.js +118 -0
  779. package/dist/postinstall-inventory.json +862 -862
  780. package/dist/prepare.runtime-8DdQ4k9k.js +798 -0
  781. package/dist/prepare.runtime.js +1 -1
  782. package/dist/presentation-card-DeAf3jYW.js +164 -0
  783. package/dist/preview-warnings-BF7nlTo8.js +618 -0
  784. package/dist/profiles-DUhMLnqX.js +194 -0
  785. package/dist/program-C7f_U7fr.js +131 -0
  786. package/dist/provider-adapters-CWLwE9KS.js +104 -0
  787. package/dist/provider-api-key-auth-CshQbUPZ.js +117 -0
  788. package/dist/provider-api-key-auth.runtime-B64jPCKn.js +14 -0
  789. package/dist/provider-api-key-auth.runtime.js +1 -1
  790. package/dist/provider-auth-D-I3YLSn.js +281 -0
  791. package/dist/provider-auth-api-key-Bub0Rjak.js +5 -0
  792. package/dist/provider-auth-choice-DpNAEScm.js +311 -0
  793. package/dist/provider-auth-choice-helpers-Bof937LW.js +210 -0
  794. package/dist/provider-auth-choice.runtime-B3spikLY.js +18 -0
  795. package/dist/provider-auth-choice.runtime-vVgz7FKq.js +2 -0
  796. package/dist/provider-auth-choice.runtime.js +1 -1
  797. package/dist/provider-auth-guidance-DcCL0Q2U.js +2 -0
  798. package/dist/provider-auth-guidance-rWRMN4Jn.js +34 -0
  799. package/dist/provider-auth-helpers-Cp8L-Xha.js +177 -0
  800. package/dist/provider-auth-login.runtime-BJUzc4iH.js +156 -0
  801. package/dist/provider-auth-login.runtime.js +1 -1
  802. package/dist/provider-auth-runtime-DmcWtzbb.js +186 -0
  803. package/dist/provider-discovery-JyAJi97k.js +95 -0
  804. package/dist/provider-discovery.runtime-D_0WTYr8.js +290 -0
  805. package/dist/provider-discovery.runtime.js +1 -1
  806. package/dist/provider-dispatcher-C8Jt94Xl.js +22 -0
  807. package/dist/provider-dispatcher.runtime.js +1 -1
  808. package/dist/provider-entry-By0ggZuI.js +134 -0
  809. package/dist/provider-hook-runtime-B8AUbQxf.js +255 -0
  810. package/dist/provider-openai-codex-oauth-C9Mmnt7d.js +2 -0
  811. package/dist/provider-openai-codex-oauth-CH5Jg1vk.js +44 -0
  812. package/dist/provider-registration-C1zvaHQP.js +235 -0
  813. package/dist/provider-registry-B9diJyLv.js +31 -0
  814. package/dist/provider-registry-BXSxmPGA.js +61 -0
  815. package/dist/provider-registry-CoE-sxbq.js +61 -0
  816. package/dist/provider-registry-DLth_GdI.js +61 -0
  817. package/dist/provider-registry-J4LRd5Rg.js +36 -0
  818. package/dist/provider-runtime-B4cw16pt.js +3 -0
  819. package/dist/provider-runtime-DNNbfwOK.js +386 -0
  820. package/dist/provider-runtime.runtime-98mAe_ni.js +26 -0
  821. package/dist/provider-runtime.runtime.js +1 -1
  822. package/dist/provider-self-hosted-setup-Dysv2Kwt.js +373 -0
  823. package/dist/provider-stream-BLaC8bqO.js +1084 -0
  824. package/dist/provider-stream-Caa5YOx2.js +313 -0
  825. package/dist/provider-stream-family-CvvfxLyP.js +2 -0
  826. package/dist/provider-usage-CVNosTP3.js +71 -0
  827. package/dist/provider-usage-D2NudXbO.js +4 -0
  828. package/dist/provider-usage.load-DG6R3lkG.js +357 -0
  829. package/dist/provider-web-search-DmgTaxRU.js +58 -0
  830. package/dist/provider-wizard-Cw-5H3tX.js +125 -0
  831. package/dist/providers.runtime-DF0T9lFz.js +240 -0
  832. package/dist/providers.runtime-oM9Vn1wr.js +2 -0
  833. package/dist/providers.runtime.js +1 -1
  834. package/dist/proxy-BxGnVyJu.js +662 -0
  835. package/dist/public-artifacts-BMP9hZfh.js +7 -0
  836. package/dist/pw-ai-CD52qfYo.js +3064 -0
  837. package/dist/qmd-manager-BYbvU4YC.js +2040 -0
  838. package/dist/qr-cli-Btz2ZdO3.js +2 -0
  839. package/dist/qr-cli-eyTRwMm2.js +371 -0
  840. package/dist/qr-image-BCwiO6tL.js +2 -0
  841. package/dist/queue-CJRoTOBi.js +923 -0
  842. package/dist/read-file-ogB-HjbK.js +183 -0
  843. package/dist/register-service-commands-D_gQ3b6_.js +77 -0
  844. package/dist/register.agent-DXQLn-r0.js +152 -0
  845. package/dist/register.configure-FavQPGce.js +16 -0
  846. package/dist/register.crestodian-Cbfmnl6h.js +24 -0
  847. package/dist/register.maintenance-B8xODEMU.js +85 -0
  848. package/dist/register.message-B8PYgZ-j.js +404 -0
  849. package/dist/register.migrate-CieoN8zZ.js +106 -0
  850. package/dist/register.onboard-BqWDIDKH.js +115 -0
  851. package/dist/register.setup-CgeTBW4T.js +40 -0
  852. package/dist/register.status-health-sessions-C99aHa5h.js +293 -0
  853. package/dist/register.subclis-79SvyMFt.js +31 -0
  854. package/dist/register.subclis-CXrO8_TO.js +3 -0
  855. package/dist/register.subclis-core-GoXV1yMG.js +273 -0
  856. package/dist/rem-harness-laL5luQa.js +649 -0
  857. package/dist/repair-sequencing-DGY2mBg6.js +652 -0
  858. package/dist/reply-media-paths.runtime-BeWVPkgy.js +2 -0
  859. package/dist/reply-media-paths.runtime-rzAV_Kee.js +154 -0
  860. package/dist/reply-media-paths.runtime.js +1 -1
  861. package/dist/reply-payloads-D_JHMviC.js +79 -0
  862. package/dist/reply-payloads-dedupe-B9GGGaL-.js +176 -0
  863. package/dist/reply-payloads-dedupe.runtime--C3jHs9y.js +2 -0
  864. package/dist/reply-payloads-dedupe.runtime.js +1 -1
  865. package/dist/reply-timing-tracker-DPjlETUb.js +205 -0
  866. package/dist/reply-turn-admission-DdfIwcMK.js +2056 -0
  867. package/dist/reply.runtime-BC1HT67i.js +2 -0
  868. package/dist/reply.runtime.js +1 -1
  869. package/dist/reset-preserved-selection-Czd80hug.js +45 -0
  870. package/dist/resolve-COJFlAZT.js +106 -0
  871. package/dist/restart-B9GMMIZt.js +121 -0
  872. package/dist/result-fallback-classifier-By0Z6b8r.js +98 -0
  873. package/dist/root-help-Bp0kGaUZ.js +43 -0
  874. package/dist/route-CgG9Z7OI.js +475 -0
  875. package/dist/route-reply-D9_9oRg1.js +174 -0
  876. package/dist/route-reply.runtime-BwNl3h2m.js +2 -0
  877. package/dist/route-reply.runtime.js +1 -1
  878. package/dist/routes-Cz2NHUV4.js +2 -0
  879. package/dist/routes-DMo6Eacc.js +3701 -0
  880. package/dist/run-SFRSThMI.js +1162 -0
  881. package/dist/run-auth-profile.runtime-BxLM8m_2.js +2 -0
  882. package/dist/run-auth-profile.runtime.js +1 -1
  883. package/dist/run-command-Cd5iN7eN.js +2 -0
  884. package/dist/run-command-ah46O06U.js +23 -0
  885. package/dist/run-context-DGCQJldA.js +66 -0
  886. package/dist/run-context.runtime-CSBHDAd5.js +2 -0
  887. package/dist/run-context.runtime.js +1 -1
  888. package/dist/run-delivery.runtime-C9xoiZ3h.js +762 -0
  889. package/dist/run-delivery.runtime.js +1 -1
  890. package/dist/run-embedded.runtime-D8bz5vfV.js +4 -0
  891. package/dist/run-embedded.runtime.js +1 -1
  892. package/dist/run-execution-cli.runtime-BAa8KPn7.js +4 -0
  893. package/dist/run-execution-cli.runtime.js +1 -1
  894. package/dist/run-executor.runtime-CNnemqSa.js +330 -0
  895. package/dist/run-executor.runtime.js +1 -1
  896. package/dist/run-model-catalog.runtime-Dh7EghXr.js +2 -0
  897. package/dist/run-model-catalog.runtime.js +1 -1
  898. package/dist/run-session-state-cMlTFwT_.js +159 -0
  899. package/dist/run-subagent-registry.runtime-BgQU86-E.js +2 -0
  900. package/dist/run-subagent-registry.runtime.js +1 -1
  901. package/dist/runner-B3YXRJOB.js +704 -0
  902. package/dist/runner.entries-DMTKpRDP.js +1485 -0
  903. package/dist/runtime-BHReFHE2.js +2 -0
  904. package/dist/runtime-BiQZ6Usw.js +615 -0
  905. package/dist/runtime-CAeriu2O.js +10 -0
  906. package/dist/runtime-CAnCRCX3.js +224 -0
  907. package/dist/runtime-CV_2NqSY.js +300 -0
  908. package/dist/runtime-CmpnvXo3.js +245 -0
  909. package/dist/runtime-D2fci1Ey.js +2 -0
  910. package/dist/runtime-DAsYmYeA.js +3 -0
  911. package/dist/runtime-DeA45VKG.js +210 -0
  912. package/dist/runtime-DvkZ8tHI.js +436 -0
  913. package/dist/runtime-DxVUR2Xg.js +2 -0
  914. package/dist/runtime-api-B88le0UE.js +12 -0
  915. package/dist/runtime-channel-AubRWvnH.js +2 -0
  916. package/dist/runtime-channel-DdclSuEu.js +148 -0
  917. package/dist/runtime-config-collectors-DukTj2va.js +525 -0
  918. package/dist/runtime-embedded-agent.runtime-BpLweeFv.js +2 -0
  919. package/dist/runtime-embedded-agent.runtime.js +1 -1
  920. package/dist/runtime-internal-CaoUylZw.js +2 -0
  921. package/dist/runtime-llm.runtime-DlpqGc7S.js +307 -0
  922. package/dist/runtime-llm.runtime.js +1 -1
  923. package/dist/runtime-model-auth.runtime-CLAaWzxY.js +46 -0
  924. package/dist/runtime-model-auth.runtime-DxVvqRTd.js +2 -0
  925. package/dist/runtime-model-auth.runtime.js +1 -1
  926. package/dist/runtime-options-TTtN01-I.js +275 -0
  927. package/dist/runtime-plugin-ClqxJSbp.js +92 -0
  928. package/dist/runtime-plugins-Bq01wLXP.js +32 -0
  929. package/dist/runtime-plugins.runtime-cwCvl1TR.js +2 -0
  930. package/dist/runtime-plugins.runtime.js +1 -1
  931. package/dist/runtime-prepare.runtime-Cz_hV_k5.js +81 -0
  932. package/dist/runtime-prepare.runtime.js +1 -1
  933. package/dist/runtime-provider-QCJq90av.js +24 -0
  934. package/dist/runtime-provider-Wllc3jC6.js +2 -0
  935. package/dist/runtime-registry-loader-BM1mQBJr.js +2 -0
  936. package/dist/runtime-registry-loader-DzhYCt4s.js +117 -0
  937. package/dist/runtime-shared-BfqOW-Vb.js +365 -0
  938. package/dist/runtime-web-channel-plugin-BcVPgD14.js +204 -0
  939. package/dist/runtime-web-tools-fallback.runtime.js +1 -1
  940. package/dist/scan-ldbaD8jq.js +573 -0
  941. package/dist/sdk-security-runtime-Bxhq2O1G.js +86 -0
  942. package/dist/sdk-setup-tools-CsQM9pF0.js +8 -0
  943. package/dist/secrets-cli-DbpIf4-z.js +150 -0
  944. package/dist/security-cli-BK4Xpa6h.js +520 -0
  945. package/dist/selection-BXKik6Ps.js +3 -0
  946. package/dist/selection-D4O3gK3Q.js +18365 -0
  947. package/dist/send-DaoGIay5.js +1222 -0
  948. package/dist/send-DzNjJGJX.js +178 -0
  949. package/dist/send-f5w9krNS.js +711 -0
  950. package/dist/send-media-cOciBxcg.js +2072 -0
  951. package/dist/send-result-DMFwBuOl.js +141 -0
  952. package/dist/server-BoC1mxZ-.js +24 -0
  953. package/dist/server-DZnI6w5k.js +72 -0
  954. package/dist/server-aux-handlers-BwRdYdub.js +1347 -0
  955. package/dist/server-chat-Q95f4ywD.js +827 -0
  956. package/dist/server-close.runtime.js +3 -3
  957. package/dist/server-context-CnXNaarB.js +2 -0
  958. package/dist/server-context-DRBebo7Y.js +955 -0
  959. package/dist/server-cron-C0o0ZvqF.js +3173 -0
  960. package/dist/server-cron-CLeBvurR.js +2 -0
  961. package/dist/server-maintenance-CqHfTnFD.js +152 -0
  962. package/dist/server-methods-BmlBQJMD.js +497 -0
  963. package/dist/server-middleware-DJhnR6jl.js +122 -0
  964. package/dist/server-model-catalog-CoSSk_Gy.js +2 -0
  965. package/dist/server-model-catalog-D32oDTQp.js +73 -0
  966. package/dist/server-node-events-DX9a4etQ.js +597 -0
  967. package/dist/server-plugin-bootstrap-Vco-EpxY.js +71 -0
  968. package/dist/server-plugins-WBX2fZRp.js +435 -0
  969. package/dist/server-reload-handlers-DGJLH8bg.js +719 -0
  970. package/dist/server-restart-sentinel-Bvon7f8K.js +700 -0
  971. package/dist/server-runtime-services-BNcH4vhR.js +3 -0
  972. package/dist/server-runtime-services-BjcQG5y7.js +147 -0
  973. package/dist/server-runtime-subscriptions-W39HeyoT.js +67 -0
  974. package/dist/server-session-events-CO73dMU-.js +244 -0
  975. package/dist/server-session-key-D8V67lDk.js +2 -0
  976. package/dist/server-session-key-v-KYSmRS.js +75 -0
  977. package/dist/server-startup-config-u54lUdWN.js +305 -0
  978. package/dist/server-startup-early-Cy5kArJG.js +87 -0
  979. package/dist/server-startup-memory-DvINFAYn.js +72 -0
  980. package/dist/server-startup-plugins-CerpbOSQ.js +127 -0
  981. package/dist/server-startup-post-attach-COUCwhNa.js +793 -0
  982. package/dist/server-ws-runtime-BfznAnbI.js +374 -0
  983. package/dist/server.impl-dQXccj0z.js +2622 -0
  984. package/dist/session-cost-usage-Bs5yIOBH.js +1600 -0
  985. package/dist/session-kill-http-DVleb3RW.js +121 -0
  986. package/dist/session-log-runtime-OG7J4j9m.js +1258 -0
  987. package/dist/session-override-LIWl5a9T.js +134 -0
  988. package/dist/session-reset-model.runtime-BpnTi4sa.js +144 -0
  989. package/dist/session-reset-model.runtime.js +1 -1
  990. package/dist/session-reset-service-HA07zS8L.js +651 -0
  991. package/dist/session-status.runtime-D6_clH8l.js +2 -0
  992. package/dist/session-status.runtime.js +1 -1
  993. package/dist/session-store-Cj4Rh6qc.js +273 -0
  994. package/dist/session-store.runtime-DSCxACdZ.js +4 -0
  995. package/dist/session-store.runtime.js +1 -1
  996. package/dist/session-subagent-reactivation.runtime-CcwaHAxg.js +2 -0
  997. package/dist/session-subagent-reactivation.runtime.js +1 -1
  998. package/dist/session-tab-registry-C-9uI2Wi.js +551 -0
  999. package/dist/session-utils-BRtPESA4.js +1508 -0
  1000. package/dist/sessions-Beltl3Ra.js +1917 -0
  1001. package/dist/sessions-DR-X-j8D.js +316 -0
  1002. package/dist/sessions-cleanup-CR1CFcJb.js +165 -0
  1003. package/dist/sessions-history-http-CjyHWYEv.js +432 -0
  1004. package/dist/sessions-patch-peSeltuF.js +401 -0
  1005. package/dist/sessions-resolve-D9ULr95s.js +180 -0
  1006. package/dist/sessions-table-Da6bua9d.js +161 -0
  1007. package/dist/sessions-uKpnhod0.js +12736 -0
  1008. package/dist/sessions.runtime-C1mVNaU3.js +2 -0
  1009. package/dist/sessions.runtime.js +1 -1
  1010. package/dist/set-DVj21EuB.js +31 -0
  1011. package/dist/set-image-JChDCaAP.js +17 -0
  1012. package/dist/setup-5I-zpID3.js +614 -0
  1013. package/dist/setup-CjtY6cli.js +2 -0
  1014. package/dist/setup-onboard-configure-help-fast-path-C5GcSuXb.js +64 -0
  1015. package/dist/setup.finalize-Bf10PNbl.js +586 -0
  1016. package/dist/setup.gateway-config-EH5Rvwzy.js +281 -0
  1017. package/dist/setup.migration-import-CoeV4Kc1.js +200 -0
  1018. package/dist/setup.migration-import-DFFGw4DI.js +2 -0
  1019. package/dist/setup.post-install-migration-DcQmWTE7.js +128 -0
  1020. package/dist/shared-BFSJZ6B3.js +212 -0
  1021. package/dist/shared-CVM-dYkO.js +5 -0
  1022. package/dist/shared-fvgcmCsj.js +71 -0
  1023. package/dist/simple-completion-runtime-C_TXe4M1.js +2 -0
  1024. package/dist/simple-completion-runtime-DREq-fcF.js +206 -0
  1025. package/dist/simple-completion-transport-DtD1fEvJ.js +83 -0
  1026. package/dist/snapshot-urls-B-wkwDI9.js +317 -0
  1027. package/dist/speech-core-KQg6oKcR.js +119 -0
  1028. package/dist/speech-provider-DfyLYitQ.js +171 -0
  1029. package/dist/speech-provider-oDvTumNW.js +227 -0
  1030. package/dist/speech-provider-yL-TQ3Em.js +233 -0
  1031. package/dist/stale-oauth-profile-shadows-CW11VYMM.js +2 -0
  1032. package/dist/stale-oauth-profile-shadows-DFl6Lyf1.js +186 -0
  1033. package/dist/standalone-runtime-registry-loader-BiponY-y.js +59 -0
  1034. package/dist/startup-context-PVXYM-X3.js +314 -0
  1035. package/dist/status-BA_0z83w.js +249 -0
  1036. package/dist/status-Bc7BGlRt.js +2 -0
  1037. package/dist/status-BwPWg9eQ.js +3 -0
  1038. package/dist/status-CLQ66eml.js +4 -0
  1039. package/dist/status-Ci2gChtY.js +466 -0
  1040. package/dist/status-CmtBWJEE.js +2 -0
  1041. package/dist/status-DdnMnPNs.js +73 -0
  1042. package/dist/status-all-BpTvkYrt.js +573 -0
  1043. package/dist/status-json-CizozZCr.js +15 -0
  1044. package/dist/status-json-command-FzKa2t6O.js +84 -0
  1045. package/dist/status-message-BHbnxwmt.js +495 -0
  1046. package/dist/status-message.runtime-Df5WBBAk.js +6 -0
  1047. package/dist/status-message.runtime.js +1 -1
  1048. package/dist/status-queue.runtime-CXnZV4Bj.js +2 -0
  1049. package/dist/status-queue.runtime.js +1 -1
  1050. package/dist/status-runtime-shared-D3Hz8WZ_.js +289 -0
  1051. package/dist/status-subagents.runtime-PoDdwwaw.js +32 -0
  1052. package/dist/status-subagents.runtime.js +1 -1
  1053. package/dist/status-text-DNxXSCuI.js +301 -0
  1054. package/dist/status.command-C_e9GcMg.js +2 -0
  1055. package/dist/status.command-DjVKDmt_.js +425 -0
  1056. package/dist/status.command.text-runtime-BeHlqL8b.js +15 -0
  1057. package/dist/status.runtime-h--fx9HY.js +2 -0
  1058. package/dist/status.scan-WyR8TeJz.js +72 -0
  1059. package/dist/status.scan-overview-CMzUAQMQ.js +460 -0
  1060. package/dist/status.scan.deps.runtime-1JTrdyHk.js +19 -0
  1061. package/dist/status.scan.deps.runtime.js +1 -1
  1062. package/dist/status.scan.fast-json-D2jw1wKO.js +163 -0
  1063. package/dist/status.scan.fast-json-DbN1KxJT.js +2 -0
  1064. package/dist/status.summary-6ZijZM1g.js +2 -0
  1065. package/dist/status.summary-CiCsChO-.js +276 -0
  1066. package/dist/store-CdBPITcg.js +2302 -0
  1067. package/dist/store-D0l2NCdn.js +3 -0
  1068. package/dist/stored-model-override-HEgnFh6b.js +79 -0
  1069. package/dist/subagent-announce-BUv_kA1W.js +353 -0
  1070. package/dist/subagent-announce-delivery-Ci2Y_p--.js +1369 -0
  1071. package/dist/subagent-control-BM3vNgsQ.js +492 -0
  1072. package/dist/subagent-control.runtime-Df3pVQL9.js +3 -0
  1073. package/dist/subagent-control.runtime.js +1 -1
  1074. package/dist/subagent-hooks-CN2fLez2.js +2 -0
  1075. package/dist/subagent-hooks-CeOmTJBf.js +230 -0
  1076. package/dist/subagent-hooks-api-Cfe4DAT9.js +23 -0
  1077. package/dist/subagent-registry-B9RPAXUs.js +2627 -0
  1078. package/dist/subagent-registry-C7tedtVB.js +3 -0
  1079. package/dist/subagent-registry.runtime.js +2 -2
  1080. package/dist/subagent-session-cleanup-y0ijZ-LQ.js +390 -0
  1081. package/dist/system-DVtrOGbV.js +111 -0
  1082. package/dist/system-prompt-config-BVmrcmmr.js +918 -0
  1083. package/dist/talk-CrdgqTCl.js +2454 -0
  1084. package/dist/target-id-CrUyi-Uq.js +107 -0
  1085. package/dist/targets-KZ2ezPwx.js +267 -0
  1086. package/dist/targets.runtime-iZ8KdQ1C.js +2 -0
  1087. package/dist/targets.runtime.js +1 -1
  1088. package/dist/task-executor-893pMqzn.js +349 -0
  1089. package/dist/task-owner-access-DC7MKz3n.js +74 -0
  1090. package/dist/task-registry-control.runtime.js +2 -2
  1091. package/dist/task-registry-delivery-runtime-YGMOyqP5.js +2 -0
  1092. package/dist/task-registry-uaYJfgXF.js +2362 -0
  1093. package/dist/task-registry.maintenance-Dx0m2NYh.js +2 -0
  1094. package/dist/task-registry.maintenance-gApg-XOt.js +764 -0
  1095. package/dist/task-status-access-CFhD_ieY.js +18 -0
  1096. package/dist/tasks-B_Qoz38D.js +153 -0
  1097. package/dist/tasks-DtV85zJT.js +548 -0
  1098. package/dist/tasks-audit-system-Con3yYnm.js +210 -0
  1099. package/dist/tasks-json-BM3pauZl.js +73 -0
  1100. package/dist/tavily-web-search-provider.runtime-Cmyyc5kX.js +112 -0
  1101. package/dist/tavily-web-search-provider.runtime.js +1 -1
  1102. package/dist/text-report-CKxmVmt5.js +695 -0
  1103. package/dist/text-transforms.runtime-DVwVsBRS.js +113 -0
  1104. package/dist/text-transforms.runtime.js +1 -1
  1105. package/dist/thread-bindings-B6UEVp9q.js +228 -0
  1106. package/dist/tool-KOZc7TIF.js +143 -0
  1107. package/dist/tool-dispatch-Ca4z2GEr.js +155 -0
  1108. package/dist/tool-images-CzDwHeDR.js +247 -0
  1109. package/dist/tool-plugin-BvQBJ2gU.js +93 -0
  1110. package/dist/tool-resolution-Ddxl6tjh.js +153 -0
  1111. package/dist/tool-result-truncation-BSKuIhd5.js +498 -0
  1112. package/dist/tool-schema-nB27q-vb.js +40 -0
  1113. package/dist/tool-schema-projection-COrMarLR.js +215 -0
  1114. package/dist/tool-split-BjPHBFrv.js +323 -0
  1115. package/dist/tools-CV40BWkc.js +901 -0
  1116. package/dist/tools-catalog-5stC7W2V.js +156 -0
  1117. package/dist/tools-effective-BVjqz2FV.js +442 -0
  1118. package/dist/tools-effective-inventory-esPY5jRB.js +379 -0
  1119. package/dist/tools-invoke-Czk_NM9G.js +51 -0
  1120. package/dist/tools-invoke-http-D7PbsODz.js +68 -0
  1121. package/dist/tools-invoke-shared-CzrEn0Dm.js +200 -0
  1122. package/dist/tools-rSjgf61B.js +579 -0
  1123. package/dist/tools.runtime-DiChCSGI.js +5 -0
  1124. package/dist/tools.runtime.js +1 -1
  1125. package/dist/transcript-rewrite-4IQefjvK.js +688 -0
  1126. package/dist/transcripts-tool-BXTS8tE5.js +2 -0
  1127. package/dist/transcripts-tool-CeWGgz5k.js +656 -0
  1128. package/dist/tts-BS8EeM8p.js +2 -0
  1129. package/dist/tts-BlTZjsaE.js +194 -0
  1130. package/dist/tts-runtime-BfRdJDyY.js +1337 -0
  1131. package/dist/tts-vRSvSw-t.js +3 -0
  1132. package/dist/tts.runtime-ChBnVkNt.js +3 -0
  1133. package/dist/tts.runtime-CmVCUbzq.js +2 -0
  1134. package/dist/tts.runtime.js +1 -1
  1135. package/dist/tui-BoQVBgWB.js +4860 -0
  1136. package/dist/tui-DBYK9BeQ.js +2 -0
  1137. package/dist/tui-backend-X0NI7rAv.js +256 -0
  1138. package/dist/tui-cli-BpUtjV38.js +40 -0
  1139. package/dist/typing-policy-CBwyAQh4.js +199 -0
  1140. package/dist/usage-Bl-tgGx-.js +623 -0
  1141. package/dist/usage-Cj_ektBl.js +1113 -0
  1142. package/dist/usage-format-DWO9ckX3.js +394 -0
  1143. package/dist/usage-format-DnCIXsqG.js +2 -0
  1144. package/dist/video-generation-provider-B7ib4AeI.js +297 -0
  1145. package/dist/video-generation-provider-CXQ6fqJx.js +64 -0
  1146. package/dist/video-generation-provider-DXjl05T6.js +325 -0
  1147. package/dist/video-generation-provider-Db8h71jA.js +77 -0
  1148. package/dist/web-fetch/runtime.js +1 -1
  1149. package/dist/web-fetch-providers.runtime-DhPkYjgB.js +41 -0
  1150. package/dist/web-fetch-providers.runtime.js +1 -1
  1151. package/dist/web-guarded-fetch-BdsVyvDS.js +58 -0
  1152. package/dist/web-guarded-fetch-CJR3JCwT.js +2 -0
  1153. package/dist/web-media-BzzQJAwk.js +4 -0
  1154. package/dist/web-media-DViZjNBa.js +2 -0
  1155. package/dist/web-media-inHawfBU.js +651 -0
  1156. package/dist/web-provider-runtime-shared-Cc08Lt9p.js +142 -0
  1157. package/dist/web-search-provider-common-CtbtmUL-.js +252 -0
  1158. package/dist/web-search-providers.runtime-B7x_cRVn.js +41 -0
  1159. package/dist/web-search-providers.runtime.js +1 -1
  1160. package/package.json +1 -1
  1161. package/dist/abort-CR0u3VsG.js +0 -277
  1162. package/dist/abort.runtime-CXUxanGg.js +0 -2
  1163. package/dist/accounts-BxBaquAf.js +0 -423
  1164. package/dist/accounts-vQjpoqEe.js +0 -2
  1165. package/dist/acp-spawn-2elSoS0E.js +0 -1286
  1166. package/dist/acp-spawn-DtKOHNO1.js +0 -2
  1167. package/dist/acp-stateful-target-driver-BqeA5j0h.js +0 -89
  1168. package/dist/action-info-B8NotHFw.js +0 -75
  1169. package/dist/active-runtime-registry-BO9mpPuB.js +0 -62
  1170. package/dist/active-tool-schema-warnings-C8vGj5FX.js +0 -105
  1171. package/dist/active-tool-schema-warnings-CVeFJuWI.js +0 -2
  1172. package/dist/agent-BgEaDMdp.js +0 -1825
  1173. package/dist/agent-_V5GbziF.js +0 -2
  1174. package/dist/agent-bundle-lsp-runtime-0jBcDEHh.js +0 -389
  1175. package/dist/agent-bundle-lsp-runtime-CQ6dZLs_.js +0 -2
  1176. package/dist/agent-bundle-mcp-materialize-Cu6JqMzC.js +0 -124
  1177. package/dist/agent-bundle-mcp-tools-BGL827cn.js +0 -3
  1178. package/dist/agent-command-CMJdGr16.js +0 -1435
  1179. package/dist/agent-delivery-DMu1MOeq.js +0 -117
  1180. package/dist/agent-harness-runtime-BKSW2E1O.js +0 -207
  1181. package/dist/agent-model-discovery-Cu4YL31r.js +0 -3
  1182. package/dist/agent-model-discovery-DdmVtkZo.js +0 -238
  1183. package/dist/agent-runner-utils-DXNDhwkI.js +0 -267
  1184. package/dist/agent-runner.runtime-Cym4Odfd.js +0 -3784
  1185. package/dist/agent-runtime-BkbhevY3.js +0 -199
  1186. package/dist/agent-runtime-label-DNP06p76.js +0 -30
  1187. package/dist/agent-runtime-metadata-JaTKc7mA.js +0 -53
  1188. package/dist/agent-tool-result-middleware-loader-FbZE0Qpk.js +0 -55
  1189. package/dist/agent-tools-Nwh8BlKX.js +0 -2506
  1190. package/dist/agent-tools.before-tool-call-BwY-FYFl.js +0 -1274
  1191. package/dist/agent-tools.before-tool-call-DwUmYhE3.js +0 -2
  1192. package/dist/agent-u5NDWrw9.js +0 -3
  1193. package/dist/agent-via-gateway-DMtOMwZa.js +0 -486
  1194. package/dist/agent-wait-dedupe-CLuKbI_7.js +0 -180
  1195. package/dist/agents-CiW7UEuB.js +0 -632
  1196. package/dist/agents.command-shared-CXGSQscb.js +0 -16
  1197. package/dist/agents.commands.add-BYBrZDXD.js +0 -304
  1198. package/dist/agents.commands.bind-nfg3AlVc.js +0 -265
  1199. package/dist/agents.commands.delete-pRj6vIrn.js +0 -128
  1200. package/dist/agents.commands.identity-Ci2PnDDl.js +0 -143
  1201. package/dist/agents.commands.list-Crj3BmqB.js +0 -235
  1202. package/dist/aliases-BFspFx3-.js +0 -97
  1203. package/dist/api-BiXhdPle.js +0 -3
  1204. package/dist/api-Cptkjys5.js +0 -6
  1205. package/dist/api-D3vT4ZVi.js +0 -2
  1206. package/dist/api-key-rotation-CQgW8LEx.js +0 -167
  1207. package/dist/app-registration-YW276fZC.js +0 -194
  1208. package/dist/apply-BRxKrOiK.js +0 -510
  1209. package/dist/apply-D0fWCa-U.js +0 -2
  1210. package/dist/apply-DIR8y0ZA.js +0 -2
  1211. package/dist/apply-DNUIV0Lt.js +0 -416
  1212. package/dist/apply-Dux9jI7f.js +0 -544
  1213. package/dist/approval-native-helpers-BMT-5X47.js +0 -398
  1214. package/dist/artifacts-CTrtIv9T.js +0 -368
  1215. package/dist/assistant-ClfI8Kho.js +0 -291
  1216. package/dist/attachment-normalize-DAW86mZY.js +0 -213
  1217. package/dist/attempt-execution-DTi2UfET.js +0 -584
  1218. package/dist/attempt-execution.helpers-DrX0QToi.js +0 -969
  1219. package/dist/attempt-execution.runtime-BCmAxwGy.js +0 -3
  1220. package/dist/attempt.prompt-helpers-BE6kGRtT.js +0 -543
  1221. package/dist/attempt.tool-run-context-J9O2yjbV.js +0 -1240
  1222. package/dist/audio-preflight.runtime-D3GXVYBI.js +0 -7
  1223. package/dist/audit-5T20D-xm.js +0 -1108
  1224. package/dist/audit-CWuV5GlP.js +0 -477
  1225. package/dist/audit.nondeep.runtime-DeYwRDYj.js +0 -1416
  1226. package/dist/audit.runtime-rUlvK4Rb.js +0 -7
  1227. package/dist/auth-DunUSatn.js +0 -567
  1228. package/dist/auth-choice--eBzca8Y.js +0 -3
  1229. package/dist/auth-choice-DJ9jsFUq.js +0 -400
  1230. package/dist/auth-choice-_pLkIdVh.js +0 -110
  1231. package/dist/auth-choice.apply.api-providers-CALcopRP.js +0 -2
  1232. package/dist/auth-choice.apply.api-providers-Dzzm1snk.js +0 -34
  1233. package/dist/auth-choice.plugin-providers.runtime-BHKTeZZc.js +0 -11
  1234. package/dist/auth-health-Cs4OjiF2.js +0 -219
  1235. package/dist/auth-list-bwJ4QDs0.js +0 -115
  1236. package/dist/auth-order-BoHN3Dc_.js +0 -105
  1237. package/dist/auth-profiles-BOLncVgy.js +0 -73
  1238. package/dist/auth-profiles-BiQRkULt.js +0 -14
  1239. package/dist/backend-config-B5yga5ay.js +0 -259
  1240. package/dist/bash-tools-BWvldguc.js +0 -3
  1241. package/dist/bash-tools-DEAAO5np.js +0 -3497
  1242. package/dist/binding-routing-BbtHmU_l.js +0 -113
  1243. package/dist/binding-targets-DSNv3-QA.js +0 -121
  1244. package/dist/bootstrap-files-DD8V2dLe.js +0 -202
  1245. package/dist/bootstrap-files-_6u1uJW2.js +0 -3
  1246. package/dist/bridge-server-v1-XPnAZ.js +0 -113
  1247. package/dist/browser-cli-CnpuO4KR.js +0 -230
  1248. package/dist/browser-cli-DPbIn8SK.js +0 -2
  1249. package/dist/browser-cli-actions-input-DoGR6LI-.js +0 -522
  1250. package/dist/browser-cli-actions-observe-CYMpgmtF.js +0 -81
  1251. package/dist/browser-cli-debug-ChJjSq-h.js +0 -137
  1252. package/dist/browser-cli-inspect-Bbci-WPG.js +0 -117
  1253. package/dist/browser-cli-manage-Bnscjb7b.js +0 -446
  1254. package/dist/browser-cli-resize-D1MJdvZI.js +0 -32
  1255. package/dist/browser-cli-shared-BCQwqz51.js +0 -69
  1256. package/dist/browser-cli-state-BWkPsvUg.js +0 -371
  1257. package/dist/browser-control-auth-CEP_ExeC.js +0 -2
  1258. package/dist/browser-profiles-SvnqnHVN.js +0 -2
  1259. package/dist/browser-runtime-0mRxjFpp.js +0 -389
  1260. package/dist/browser-tool.schema--CLR3nDv.js +0 -132
  1261. package/dist/btw-command-DV6HfrRV.js +0 -18
  1262. package/dist/build-DiRmljCi.js +0 -261
  1263. package/dist/bundled-channel-config-schema-DpdKMATU.d.ts +0 -3168
  1264. package/dist/capability-cli-ATfwTYFe.js +0 -1809
  1265. package/dist/capability-provider-runtime-l3nnLGvn.js +0 -346
  1266. package/dist/cdp.helpers-IIuc0KGS.js +0 -637
  1267. package/dist/channel-CzTD2ouI.js +0 -2309
  1268. package/dist/channel-actions-B5Yk5Axf.js +0 -46
  1269. package/dist/channel-bootstrap.runtime-C9F-Pq1o.js +0 -38
  1270. package/dist/channel-bootstrap.runtime-TPyY5Ngv.js +0 -2
  1271. package/dist/channel-core-XMZJ-ZGF.js +0 -5
  1272. package/dist/channel-inbound-DvqkKmiH.js +0 -121
  1273. package/dist/channel-message-CnJ4vUyt.js +0 -12
  1274. package/dist/channel-outbound-BhefGAqY.js +0 -436
  1275. package/dist/channel-plugin-resolution-BiaJ8aRa.js +0 -2
  1276. package/dist/channel-plugin-resolution-D_CxkMVc.js +0 -135
  1277. package/dist/channel-resolution-DzI28gIM.js +0 -46
  1278. package/dist/channel-selection-CLFO4-eQ.js +0 -171
  1279. package/dist/channel-selection.runtime-Beb2-bMH.js +0 -2
  1280. package/dist/channel.runtime-By5T5eGw.js +0 -697
  1281. package/dist/channels-BrRY9Mag.js +0 -1004
  1282. package/dist/channels-cli-CF--e2RU.js +0 -331
  1283. package/dist/chat-BTMPilpx.js +0 -2940
  1284. package/dist/chat-DnC7XCWK.js +0 -3
  1285. package/dist/chrome-C3_dN9jE.js +0 -1517
  1286. package/dist/chrome-mcp-5jjDHIgn.js +0 -864
  1287. package/dist/chrome-mcp-DFAa-WzK.js +0 -2
  1288. package/dist/claude-live-session-BUPeOzLE.js +0 -1338
  1289. package/dist/claude-live-session-Bprgmr1-.js +0 -2
  1290. package/dist/clawbot-cli-5UVkLT1Y.js +0 -9
  1291. package/dist/cli-6a6sMEUB.js +0 -2
  1292. package/dist/cli-COCN9B5e.js +0 -2
  1293. package/dist/cli-CpI4dBXy.js +0 -141
  1294. package/dist/cli-YLx-ekdH.js +0 -293
  1295. package/dist/cli-backends.runtime-CsBjr7ag.js +0 -7
  1296. package/dist/cli-compaction-Bh0oMwUa.js +0 -363
  1297. package/dist/cli-registry-loader-DDbaAJgY.js +0 -2
  1298. package/dist/cli-registry-loader-xc2Ah8S4.js +0 -193
  1299. package/dist/cli-runner-BfSrIn-9.js +0 -597
  1300. package/dist/cli-runner-D_FAjNbR.js +0 -2
  1301. package/dist/cli-runner.runtime-BJetQDu1.js +0 -3
  1302. package/dist/cli-runner.runtime-BKJQkc7C.js +0 -4
  1303. package/dist/cli-session-Cy3IeH0g.js +0 -119
  1304. package/dist/cli.runtime-BpOz0s3N.js +0 -1276
  1305. package/dist/codex-native-web-search-BDtKRV3F.js +0 -4
  1306. package/dist/codex-native-web-search-C0TrfoMX.js +0 -20
  1307. package/dist/codex-native-web-search-core-CzlK1GfN.js +0 -106
  1308. package/dist/command-auth-CFnvdYX2.js +0 -135
  1309. package/dist/command-config-resolution-B_86rG8v.js +0 -2
  1310. package/dist/command-config-resolution-BbadcA2M.js +0 -25
  1311. package/dist/command-config-resolution.runtime-B_86rG8v.js +0 -2
  1312. package/dist/command-execution-startup-Rrwwdg_5.js +0 -90
  1313. package/dist/command-primitives-runtime-C9bTt5IV.js +0 -3
  1314. package/dist/command-registry-CbpdQKmu.js +0 -9
  1315. package/dist/command-registry-Dw-XC_Zk.js +0 -4
  1316. package/dist/command-registry-core-rvEDki6p.js +0 -114
  1317. package/dist/command-secret-gateway-BX6BIiFn.js +0 -589
  1318. package/dist/command-secret-targets-DCzlTkb5.js +0 -2
  1319. package/dist/command-status-builders-DIsZN9aY.js +0 -147
  1320. package/dist/command-status.runtime-C2x4yMRd.js +0 -90
  1321. package/dist/commands-FYCxWqIx.js +0 -161
  1322. package/dist/commands-compact.runtime-BTMQfx1k.js +0 -10
  1323. package/dist/commands-core.runtime-CuNLz2wm.js +0 -2
  1324. package/dist/commands-handlers.runtime-DyNuPOmY.js +0 -6327
  1325. package/dist/commands-models-s7BRmLQh.js +0 -448
  1326. package/dist/commands-registry-BxEq-3UJ.js +0 -195
  1327. package/dist/commands-registry.runtime-CbXW33S_.js +0 -4
  1328. package/dist/commands-status-BRJMba4h.js +0 -16
  1329. package/dist/commands-status-DCXEwlSF.js +0 -3
  1330. package/dist/commands-status.runtime-DCXEwlSF.js +0 -3
  1331. package/dist/commands-subagents-control.runtime-CduLQJFD.js +0 -2
  1332. package/dist/commands-system-prompt-B3LD8CDs.js +0 -161
  1333. package/dist/commands-system-prompt-DPsXTqOQ.js +0 -2
  1334. package/dist/commands.runtime-3sVz8Qgo.js +0 -175
  1335. package/dist/common-CZvBLb3w.js +0 -286
  1336. package/dist/compact-DxU_9XEc.js +0 -1165
  1337. package/dist/compact.runtime-CqQTypVl.js +0 -12
  1338. package/dist/compaction-planning-DArTi9SN.js +0 -202
  1339. package/dist/completion-cli-CiKl5HhI.js +0 -393
  1340. package/dist/config--yllOaSC.js +0 -374
  1341. package/dist/config-Yt5UcD91.js +0 -610
  1342. package/dist/config-cli-BeXS3R6k.js +0 -1703
  1343. package/dist/config-mutation-cQeWhUqy.js +0 -5
  1344. package/dist/config-mutations-Cg04LH_S.js +0 -161
  1345. package/dist/config-utils-Dhq_UKMC.js +0 -141
  1346. package/dist/config-validation-BANohTKD.js +0 -33
  1347. package/dist/configure-CWxhlx9G.js +0 -771
  1348. package/dist/configure-Jejkc6dn.js +0 -3
  1349. package/dist/configure.commands-BYy1bz8G.js +0 -2
  1350. package/dist/configure.commands-C3hDvZse.js +0 -1253
  1351. package/dist/context-DptQ59DZ.js +0 -248
  1352. package/dist/context-_ZshNBhD.js +0 -2
  1353. package/dist/context-engine-host-compat-C_eflvRw.js +0 -2
  1354. package/dist/context-engine-host-compat-s15Pu845.js +0 -280
  1355. package/dist/context-engine-lifecycle-COHFLnj4.js +0 -627
  1356. package/dist/control-auth-CQJpLoIb.js +0 -114
  1357. package/dist/control-service-BFSgA0Py.js +0 -40
  1358. package/dist/control-service-D7GZv-GS.js +0 -3
  1359. package/dist/control-ui/assets/activity-B7yRLbf3.js +0 -124
  1360. package/dist/control-ui/assets/agents-E-3DAkaW.js +0 -1030
  1361. package/dist/control-ui/assets/channels-D0c7A9OX.js +0 -120
  1362. package/dist/control-ui/assets/cron-B54j2Vmo.js +0 -1016
  1363. package/dist/control-ui/assets/debug-CRcGYNA9.js +0 -97
  1364. package/dist/control-ui/assets/index-bZJJ7U8q.js +0 -7214
  1365. package/dist/control-ui/assets/instances-RcBeqNzx.js +0 -57
  1366. package/dist/control-ui/assets/nodes-BoWRh42t.js +0 -444
  1367. package/dist/control-ui/assets/sessions-BmRQ932H.js +0 -425
  1368. package/dist/control-ui/assets/skills-BDn45kHZ.js +0 -362
  1369. package/dist/control-ui/assets/workboard-BwbcNuC5.js +0 -402
  1370. package/dist/control-ui-ChfTPXZo.js +0 -750
  1371. package/dist/conversation-label-generator-CTfnInQF.js +0 -72
  1372. package/dist/conversation-runtime-B7oAN9Tq.js +0 -31
  1373. package/dist/core-api-CBD0dvTQ.js +0 -5
  1374. package/dist/core-api-ClCm_yM8.js +0 -2
  1375. package/dist/core-wuoxL08a.js +0 -284
  1376. package/dist/crestodian--iYeGB8u.js +0 -55
  1377. package/dist/cron-D2SzQyqo.js +0 -453
  1378. package/dist/daemon-install-B6CAkU3V.js +0 -66
  1379. package/dist/daemon-install-auth-profiles-store.runtime-Cpt5LSD6.js +0 -2
  1380. package/dist/dashboard-ChYOQjM2.js +0 -263
  1381. package/dist/defaults-CCopehWw.js +0 -130
  1382. package/dist/defaults-H4kBp17N.js +0 -3
  1383. package/dist/defaults.constants-CjB9HP6f.js +0 -76
  1384. package/dist/deliver-BzPhWO_F.js +0 -3
  1385. package/dist/deliver-DGyKH3Qi.js +0 -1399
  1386. package/dist/deliver-runtime-Ca2kcQoZ.js +0 -2
  1387. package/dist/delivery-outbound.runtime-D7ycPxY-.js +0 -7
  1388. package/dist/delivery-queue-CnLv30ko.js +0 -863
  1389. package/dist/delivery-queue-CuaDjNMh.js +0 -2
  1390. package/dist/delivery-queue-runtime-DO2vqOIJ.js +0 -16
  1391. package/dist/delivery-target.runtime-QcBVk_j8.js +0 -45
  1392. package/dist/delivery.runtime-L09v4tys.js +0 -470
  1393. package/dist/detached-task-runtime-BqU7YXYT.js +0 -86
  1394. package/dist/diagnostics-T-Hk_Qzi.js +0 -168
  1395. package/dist/dialogue-C0VnTMMn.js +0 -37
  1396. package/dist/direct-dm-BWn67tDD.js +0 -81
  1397. package/dist/directive-handling.defaults-DO6Snm4_.js +0 -22
  1398. package/dist/directive-handling.fast-lane-BemYRfPn.js +0 -70
  1399. package/dist/directive-handling.impl-BMVh1pMh.js +0 -823
  1400. package/dist/directive-handling.impl-vr4MsYbt.js +0 -2
  1401. package/dist/directive-handling.model-selection-DegP9exp.js +0 -122
  1402. package/dist/directive-handling.persist.runtime-BUdU6_zm.js +0 -274
  1403. package/dist/directives-1xk_ZcMf.js +0 -319
  1404. package/dist/directory-cli-D83WEjEG.js +0 -239
  1405. package/dist/dispatch-Ck2tvRYH.js +0 -2057
  1406. package/dist/dispatch-acp-GdaHNdvf.js +0 -1102
  1407. package/dist/dispatch-acp-manager.runtime-BGSrJqrW.js +0 -3
  1408. package/dist/dispatch-acp-media.runtime-DQ8dYQh8.js +0 -4
  1409. package/dist/dispatch-acp-transcript.runtime-CsJZGhnu.js +0 -40
  1410. package/dist/dispatch-acp-tts.runtime-Bo-QxKgx.js +0 -3
  1411. package/dist/dispatch-acp.runtime-C_u7sGcQ.js +0 -18
  1412. package/dist/dispatcher-GtuYO6Ni.js +0 -106
  1413. package/dist/doctor-B2qP9g8d.js +0 -760
  1414. package/dist/doctor-D9wCez5t.js +0 -6
  1415. package/dist/doctor-auth-XnseqtS7.js +0 -216
  1416. package/dist/doctor-auth-flat-profiles-B6cL-TiJ.js +0 -516
  1417. package/dist/doctor-auth-flat-profiles-Birb7qIk.js +0 -2
  1418. package/dist/doctor-auth-legacy-oauth-CXO3OtyG.js +0 -48
  1419. package/dist/doctor-auth-oauth-sidecar-BSgQPbcS.js +0 -177
  1420. package/dist/doctor-auth-oauth-sidecar-CzzyNwxc.js +0 -2
  1421. package/dist/doctor-bootstrap-size-BlVcO5D6.js +0 -57
  1422. package/dist/doctor-claude-cli-_MTVnCQ-.js +0 -150
  1423. package/dist/doctor-config-flow-0kxzjUjK.js +0 -1819
  1424. package/dist/doctor-core-checks-C_g9REOd.js +0 -666
  1425. package/dist/doctor-core-checks-CahzmM1L.js +0 -2
  1426. package/dist/doctor-core-checks.runtime-Bi_oTiTZ.js +0 -278
  1427. package/dist/doctor-gateway-daemon-flow-UAIWsI9w.js +0 -349
  1428. package/dist/doctor-gateway-services-BiMEGiw_.js +0 -465
  1429. package/dist/doctor-health-C69GVfMl.js +0 -65
  1430. package/dist/doctor-health-contributions-Bz19QhI4.js +0 -874
  1431. package/dist/doctor-lint-BVW4E6Qf.js +0 -95
  1432. package/dist/doctor-memory-search-D2PWzDCY.js +0 -407
  1433. package/dist/doctor-state-integrity-DuJIszQj.js +0 -1257
  1434. package/dist/doctor-tool-result-cap-advice-Dpn4zNH3.js +0 -27
  1435. package/dist/doctor-workspace-status-nW9TcIWi.js +0 -76
  1436. package/dist/dreaming-CcOWzGN5.js +0 -523
  1437. package/dist/dreaming-command-sxm3FQGb.js +0 -101
  1438. package/dist/dreaming-narrative-BSRwiUPL.js +0 -2
  1439. package/dist/dreaming-narrative-BskwmYdC.js +0 -721
  1440. package/dist/dreaming-phases-BuHjGyPw.js +0 -2
  1441. package/dist/dreaming-phases-ChVT8Ovk.js +0 -1162
  1442. package/dist/drive-C_u5W4ln.js +0 -899
  1443. package/dist/echo-transcript-tnZWH4EO.js +0 -52
  1444. package/dist/effective-tool-policy-CeHdL2D7.js +0 -89
  1445. package/dist/embedded-agent-CGULn3lb.js +0 -4
  1446. package/dist/embedded-agent-DZTa1YiK.js +0 -4074
  1447. package/dist/embedded-agent-helpers-B65K9o55.js +0 -6
  1448. package/dist/embedded-agent-helpers-BPXCvWBb.js +0 -1037
  1449. package/dist/embedded-agent.runtime-TfBgXcUV.js +0 -4
  1450. package/dist/embedded-backend-BAaFwayA.js +0 -744
  1451. package/dist/embedded-gateway-stub.runtime-CNyrjvgT.js +0 -12
  1452. package/dist/embedding-provider-runtime-EnkHdROJ.js +0 -86
  1453. package/dist/embedding-providers-CDkDb0kv.js +0 -2
  1454. package/dist/embeddings-http-ClIu4_mP.js +0 -222
  1455. package/dist/engine-qmd-DZRiT9i4.js +0 -708
  1456. package/dist/engine-storage-BEqlN8TR.js +0 -203
  1457. package/dist/errors-Co8auIlv.js +0 -2
  1458. package/dist/exec-approval-forwarder.runtime-C7QvfWQ6.js +0 -4
  1459. package/dist/exec-approval-session-target-ChuH1nXL.js +0 -177
  1460. package/dist/exec-auto-reviewer-Bm7380HF.js +0 -2
  1461. package/dist/exec-auto-reviewer-BrrdGleK.js +0 -241
  1462. package/dist/execute.runtime-B-8jUqDB.js +0 -579
  1463. package/dist/external-cli-auth-selection-0BxmRUps.js +0 -113
  1464. package/dist/extra-params-BgyvpEpv.js +0 -615
  1465. package/dist/fallback-notice-state-BXk_kRWM.js +0 -15
  1466. package/dist/fallbacks-CPdVRP81.js +0 -31
  1467. package/dist/fallbacks-shared-CSGf1oaf.js +0 -116
  1468. package/dist/fengming-runtime-NUA51sEw.js +0 -33
  1469. package/dist/fengming-runtime-config-CIZ-SHPt.js +0 -2
  1470. package/dist/fengming-runtime-memory-CIZ-SHPt.js +0 -2
  1471. package/dist/fengming-runtime-session-CIZ-SHPt.js +0 -2
  1472. package/dist/fengming-tools-MvRSt0JA.js +0 -12221
  1473. package/dist/flows-BocRit8D.js +0 -189
  1474. package/dist/fs-utils-DSXeBcjj.js +0 -9
  1475. package/dist/gateway-BCrUxrVw.js +0 -133
  1476. package/dist/gateway-cli-B8bXBd_L.js +0 -443
  1477. package/dist/gateway-install-token-pngTMc-f.js +0 -136
  1478. package/dist/gateway-method-runtime-ueZTz7WH.js +0 -21
  1479. package/dist/gateway-runtime-DbsoThML.js +0 -23
  1480. package/dist/get-reply-DUuaxcBz.js +0 -5198
  1481. package/dist/get-reply-from-config.runtime-B4Dgs3Hg.js +0 -2
  1482. package/dist/github-copilot-token-7AfRRF7J.js +0 -2
  1483. package/dist/health-7Yq5zpoZ.js +0 -3
  1484. package/dist/health-DlZqxm2f.js +0 -621
  1485. package/dist/health-DxesUuur.js +0 -111
  1486. package/dist/health-state-BMG8kOby.js +0 -106
  1487. package/dist/heartbeat-runner-Bq7A_Cjm.js +0 -5
  1488. package/dist/heartbeat-runner-DVwbVyft.js +0 -1930
  1489. package/dist/heartbeat-runner.runtime-DQ2NPXMD.js +0 -3
  1490. package/dist/helpers-PCu2RivJ.js +0 -406
  1491. package/dist/hook-helpers-DLEnCRO7.js +0 -44
  1492. package/dist/hooks-Bv-otcl7.js +0 -536
  1493. package/dist/hooks-cli-C5ve0nzF.js +0 -465
  1494. package/dist/http-endpoint-helpers-w2SagsQz.js +0 -37
  1495. package/dist/http-utils-CVvn0ZA-.js +0 -98
  1496. package/dist/image-BeixBis4.js +0 -385
  1497. package/dist/image-fallbacks-CPbmIMn9.js +0 -31
  1498. package/dist/image-generation-core.auth.runtime-Co38iRxQ.js +0 -2
  1499. package/dist/image-generation-provider-BA4Ar91S.js +0 -152
  1500. package/dist/image-runtime-7ZsfioS1.js +0 -9
  1501. package/dist/image-tool.helpers-upjA3ksB.js +0 -150
  1502. package/dist/images-ChLi1Uog.js +0 -2
  1503. package/dist/images-nB0XAnTa.js +0 -416
  1504. package/dist/inbound-reply-dispatch-DglobJ8j.js +0 -2
  1505. package/dist/inbound-reply-dispatch-QKOgNx-m.js +0 -147
  1506. package/dist/infra-runtime-CGD3RE_2.js +0 -32
  1507. package/dist/init-poVZDCAM.js +0 -59
  1508. package/dist/install-Dn9oPGmU.js +0 -262
  1509. package/dist/install.runtime-D5sllsjl.js +0 -2
  1510. package/dist/internal-CnOL_Roa.js +0 -399
  1511. package/dist/isolated-agent-CNw6E3F0.js +0 -1097
  1512. package/dist/isolated-agent-DjkHhEyR.js +0 -2
  1513. package/dist/kernel-B5Y5IQ-A.js +0 -3
  1514. package/dist/kernel-CMuO4VJy.js +0 -979
  1515. package/dist/kimi-web-search-provider.runtime-V4m_MHsk.js +0 -307
  1516. package/dist/library-B-1EZjtY.js +0 -45
  1517. package/dist/lifecycle-B-5gEZ7O.js +0 -570
  1518. package/dist/lifecycle-Bzh5Jo09.js +0 -2
  1519. package/dist/lifecycle-DvbcJYMl.js +0 -355
  1520. package/dist/lifecycle.runtime-Bzh5Jo09.js +0 -2
  1521. package/dist/list-B4xSHRdU.js +0 -2
  1522. package/dist/list-BnhZHpxx.js +0 -207
  1523. package/dist/list.list-command-DAz-Ws_6.js +0 -429
  1524. package/dist/list.model-row-DtdX9KDu.js +0 -39
  1525. package/dist/list.probe-CY6lxq51.js +0 -2
  1526. package/dist/list.probe-DPuE1GOH.js +0 -451
  1527. package/dist/list.provider-catalog-BHc9WXI6.js +0 -211
  1528. package/dist/list.provider-catalog-CFbrroys.js +0 -2
  1529. package/dist/list.registry-load-C1_sr3gb.js +0 -152
  1530. package/dist/list.row-sources-BMtHc9oi.js +0 -474
  1531. package/dist/list.source-plan-Dth72qPP.js +0 -81
  1532. package/dist/list.status-command-BXCnEq8Q.js +0 -815
  1533. package/dist/live-model-switch-Dxav22vq.js +0 -119
  1534. package/dist/llm-slug-generator-6o8RXL11.js +0 -78
  1535. package/dist/load-config-EF3n0Dyo.js +0 -27
  1536. package/dist/load-context-CI_ogQt_.js +0 -82
  1537. package/dist/loader-DtwEzpp-.js +0 -7008
  1538. package/dist/local-dispatch.runtime-21liE3rA.js +0 -10
  1539. package/dist/main-session-restart-recovery-D1g62iJ5.js +0 -2
  1540. package/dist/main-session-restart-recovery-v2I9CEXi.js +0 -389
  1541. package/dist/managed-image-attachments-BEl5qfCT.js +0 -616
  1542. package/dist/managed-image-attachments-D5KqX2Qy.js +0 -2
  1543. package/dist/manager-DZc3xiNq.js +0 -2314
  1544. package/dist/manager-Vf3vLTGe.js +0 -3737
  1545. package/dist/mcp-http-BaJoPKF9.js +0 -583
  1546. package/dist/mcp-http-CpEaJIGJ.js +0 -2
  1547. package/dist/media-runtime-DtP_Ff8m.js +0 -391
  1548. package/dist/media-services-CXYbyIIp.js +0 -416
  1549. package/dist/media-understanding-DvTIsIyr.js +0 -87
  1550. package/dist/media-understanding-provider-DBBAvuwG.js +0 -13
  1551. package/dist/media-understanding-provider-DOf_uZrx.js +0 -70
  1552. package/dist/media-understanding-provider-DdRfNh9h.js +0 -69
  1553. package/dist/media-understanding-provider-mqpQDt8V.js +0 -29
  1554. package/dist/memory-BNk25Hi6.js +0 -437
  1555. package/dist/memory-core-host-engine-embeddings-XsK5xS70.js +0 -667
  1556. package/dist/memory-core-host-engine-foundation-BYkoOLXl.js +0 -15
  1557. package/dist/memory-core-host-engine-qmd-0JuUCKCK.js +0 -2
  1558. package/dist/memory-core-host-engine-storage-MCFGjDwW.js +0 -2
  1559. package/dist/memory-core-host-runtime-cli-fVGH65E8.js +0 -10
  1560. package/dist/memory-core-host-runtime-core-JtXIAdlM.js +0 -12
  1561. package/dist/memory-core-host-runtime-files-BGw_ypoN.js +0 -4
  1562. package/dist/memory-embedding-provider-runtime-3UBzs4sx.js +0 -36
  1563. package/dist/memory-host-core-Y_O5V-mu.js +0 -78
  1564. package/dist/memory-host-search.runtime-B4TzyvmR.js +0 -2
  1565. package/dist/memory-runtime-9kEPAeKV.js +0 -2
  1566. package/dist/memory-runtime-BU4t85uu.js +0 -57
  1567. package/dist/memory-search-CVX--mSz.js +0 -235
  1568. package/dist/message-BVXoNpWP.js +0 -284
  1569. package/dist/message-HaiKqj0A.js +0 -2
  1570. package/dist/message-action-runner-Chwzn02r.js +0 -2
  1571. package/dist/message-action-runner-tEEliptt.js +0 -1922
  1572. package/dist/message-handler-CHDS_NF-.js +0 -1806
  1573. package/dist/metadata-registry-loader-Croa1pgR.js +0 -22
  1574. package/dist/metadata-registry-loader-w0p86vis.js +0 -2
  1575. package/dist/migrate-CPCZJ4H5.js +0 -2
  1576. package/dist/migrate-CUj6m6Cx.js +0 -458
  1577. package/dist/migration-provider-runtime-4r4WGtf2.js +0 -2
  1578. package/dist/migration-provider-runtime-TxrH_mM7.js +0 -68
  1579. package/dist/minimax-web-search-provider.runtime-Dr2GJiWj.js +0 -148
  1580. package/dist/model-BQSouNOa.js +0 -2
  1581. package/dist/model-CAk0bcuO.js +0 -1302
  1582. package/dist/model-auth-BF7w9Fiv.js +0 -705
  1583. package/dist/model-auth-label-r729wcPk.js +0 -67
  1584. package/dist/model-auth-us8b_D5d.js +0 -6
  1585. package/dist/model-catalog-BGykBGxx.js +0 -434
  1586. package/dist/model-catalog-BVXrqFbI.js +0 -3
  1587. package/dist/model-catalog-visibility-Bsup46vy.js +0 -76
  1588. package/dist/model-config.helpers-wzD1EEfE.js +0 -95
  1589. package/dist/model-context-tokens-DrIU9eJc.js +0 -572
  1590. package/dist/model-fallback-GySPjr3J.js +0 -1288
  1591. package/dist/model-fallback-auth.runtime-Dg_Jmguu.js +0 -5
  1592. package/dist/model-picker-BI6jXOjt.js +0 -3
  1593. package/dist/model-picker-DYyJHhfH.js +0 -1135
  1594. package/dist/model-picker-visibility-D_IMZfxd.js +0 -22
  1595. package/dist/model-picker.runtime-B70kQMyc.js +0 -48
  1596. package/dist/model-pricing-cache-CSpUDzSt.js +0 -856
  1597. package/dist/model-pricing-cache-dkPwTUVJ.js +0 -3
  1598. package/dist/model-pricing-cache-state-C6shoEWy.js +0 -83
  1599. package/dist/model-provider-auth-BfZHbTaj.js +0 -2
  1600. package/dist/model-provider-auth-CPCBWvqL.js +0 -375
  1601. package/dist/model-runtime-aliases-DUzusc9_.js +0 -133
  1602. package/dist/model-selection-8UzO5mgF.js +0 -254
  1603. package/dist/model-selection-Cb7azWw1.js +0 -7
  1604. package/dist/model-selection-jDYEo0WI.js +0 -352
  1605. package/dist/model-selection.runtime-D_yHZLbs.js +0 -7
  1606. package/dist/models-BxA2IU3W.js +0 -57
  1607. package/dist/models-auth-status-yG7yyRcv.js +0 -280
  1608. package/dist/models-cli-DUt4uiMH.js +0 -257
  1609. package/dist/models-config-B5bkuh6A.js +0 -1189
  1610. package/dist/models-config-Xj8vG_x2.js +0 -2
  1611. package/dist/models-config.providers.secrets-DNBB440Z.js +0 -2
  1612. package/dist/models-config.providers.secrets-DNIQlBSE.js +0 -382
  1613. package/dist/models-http-DMILRsry.js +0 -88
  1614. package/dist/monitor-7tD_FE_5.js +0 -60
  1615. package/dist/monitor-HjEwlqJs.js +0 -1024
  1616. package/dist/monitor.account-D0F9tnWD.js +0 -5382
  1617. package/dist/music-generation-provider-3ykPaUwR.js +0 -308
  1618. package/dist/native-hook-relay-BJKHIhWd.js +0 -1378
  1619. package/dist/native-hook-relay-V8Kappw1.js +0 -19
  1620. package/dist/node-cli-BLVyQ93e.js +0 -2806
  1621. package/dist/node-command-policy-B0ezpI_O.js +0 -295
  1622. package/dist/nodes-DnWH_15m.js +0 -3
  1623. package/dist/nodes-RkB4ZmP6.js +0 -1483
  1624. package/dist/nodes-cli-upwPs91b.js +0 -960
  1625. package/dist/nodes-pending--sojaxpI.js +0 -211
  1626. package/dist/nodes-utils-Yks_uDZK.js +0 -85
  1627. package/dist/oauth-CQN2efEy.js +0 -207
  1628. package/dist/oauth-DApi3OI9.js +0 -746
  1629. package/dist/oauth-DkUWBub2.js +0 -852
  1630. package/dist/onboard-CiQSBSrz.js +0 -768
  1631. package/dist/onboard-channels-DaWYXiLv.js +0 -1534
  1632. package/dist/onboard-channels-DnwM2_IL.js +0 -2
  1633. package/dist/onboard-custom-BQPckD0V.js +0 -3
  1634. package/dist/onboard-custom-config-BmbThk2-.js +0 -422
  1635. package/dist/onboard-custom-xInFj1Rs.js +0 -280
  1636. package/dist/onboard-search-DSfmthe5.js +0 -412
  1637. package/dist/openai-compat-errors-VR4SN1MV.js +0 -136
  1638. package/dist/openai-http-DV95ynPi.js +0 -836
  1639. package/dist/openai-transport-stream-BwpzqR-b.js +0 -3427
  1640. package/dist/openresponses-http-DPchx8IC.js +0 -1175
  1641. package/dist/operations-f9R8j-r9.js +0 -805
  1642. package/dist/order-BQx8mNGZ.js +0 -218
  1643. package/dist/outbound-attachment-C4yojK6p.js +0 -19
  1644. package/dist/param-readers-BIXyd5la.js +0 -2
  1645. package/dist/payloads-DrY1bKyF.js +0 -256
  1646. package/dist/persistent-bindings.lifecycle-BiPN7luW.js +0 -85
  1647. package/dist/persistent-bindings.lifecycle-X3wfan2Z.js +0 -2
  1648. package/dist/plugin-enabled-CqsBObeO.js +0 -232
  1649. package/dist/plugin-install-CfB1_kpX.js +0 -118
  1650. package/dist/plugin-install-DzMraXHH.js +0 -2
  1651. package/dist/plugin-install-config-policy-BD_elPNg.js +0 -169
  1652. package/dist/plugin-registration-Dy58ncPf.js +0 -97
  1653. package/dist/plugin-registry-BlmODeop.js +0 -3
  1654. package/dist/plugin-registry-k5OK18l5.js +0 -2
  1655. package/dist/plugin-runtime-B3t53CKr.js +0 -102
  1656. package/dist/plugin-sdk/bundled-channel-config-schema-C3pWWvwG.d.ts +0 -3169
  1657. package/dist/plugin-sdk/config-schema-D7cABQ6o.d.ts +0 -33
  1658. package/dist/plugin-sdk/zod-schema.core-CwBNqcXp.d.ts +0 -166
  1659. package/dist/plugin-service-sKF4gWFm.js +0 -1249
  1660. package/dist/plugins-authoring-command-I72k2cuv.js +0 -304
  1661. package/dist/plugins-cli-DMQRbPsU.js +0 -63
  1662. package/dist/plugins-cli.runtime-CvDuKFJj.js +0 -339
  1663. package/dist/plugins-command-helpers-C5WMM4bk.js +0 -164
  1664. package/dist/plugins-command-helpers-DDt_pMQ4.js +0 -2
  1665. package/dist/plugins-inspect-command-ka7Hpld3.js +0 -248
  1666. package/dist/plugins-install-command-BHSgof-_.js +0 -2
  1667. package/dist/plugins-install-command-t5caX9q_.js +0 -993
  1668. package/dist/plugins-install-persist-Bah1m3x7.js +0 -252
  1669. package/dist/plugins-list-command-BXLWwXHM.js +0 -184
  1670. package/dist/plugins-uninstall-command-C_3m6CrW.js +0 -118
  1671. package/dist/prepare.runtime-COZaHg5E.js +0 -798
  1672. package/dist/presentation-card-CciJv4ru.js +0 -164
  1673. package/dist/preview-warnings-L4VuEOyB.js +0 -618
  1674. package/dist/profiles-CM2xoUYX.js +0 -194
  1675. package/dist/program-B-4C7bC-.js +0 -131
  1676. package/dist/provider-adapters-Eh8mS2Fd.js +0 -104
  1677. package/dist/provider-api-key-auth-DTh2cbmS.js +0 -117
  1678. package/dist/provider-api-key-auth.runtime-DrTYYfxK.js +0 -14
  1679. package/dist/provider-auth-Bnaijzmv.js +0 -281
  1680. package/dist/provider-auth-api-key-CNP8o5E7.js +0 -5
  1681. package/dist/provider-auth-choice-Devw4sQf.js +0 -311
  1682. package/dist/provider-auth-choice-helpers-DmVudRp6.js +0 -210
  1683. package/dist/provider-auth-choice.runtime-C337IQ3W.js +0 -2
  1684. package/dist/provider-auth-choice.runtime-DqGYalFo.js +0 -18
  1685. package/dist/provider-auth-guidance-Bk4WV6Lg.js +0 -2
  1686. package/dist/provider-auth-guidance-C7NCKuKn.js +0 -34
  1687. package/dist/provider-auth-helpers-r7mC8I5l.js +0 -177
  1688. package/dist/provider-auth-login.runtime-BFJgAAS6.js +0 -156
  1689. package/dist/provider-auth-runtime-BiLPGiMW.js +0 -186
  1690. package/dist/provider-discovery-uxRmAIf_.js +0 -95
  1691. package/dist/provider-discovery.runtime-mwbSivDS.js +0 -290
  1692. package/dist/provider-dispatcher-CtKWj3r-.js +0 -22
  1693. package/dist/provider-entry-DjACqdrB.js +0 -134
  1694. package/dist/provider-hook-runtime-CpJsM7Dk.js +0 -255
  1695. package/dist/provider-openai-codex-oauth-DWGmVUYg.js +0 -2
  1696. package/dist/provider-openai-codex-oauth-ctxd00JW.js +0 -44
  1697. package/dist/provider-registration-l8EX4voM.js +0 -235
  1698. package/dist/provider-registry-BgIQXJle.js +0 -31
  1699. package/dist/provider-registry-CVuzobHN.js +0 -36
  1700. package/dist/provider-registry-DmdDbSQs.js +0 -61
  1701. package/dist/provider-registry-LqtLqheu.js +0 -61
  1702. package/dist/provider-registry-pTYVjODc.js +0 -61
  1703. package/dist/provider-runtime-BQZSuC9l.js +0 -3
  1704. package/dist/provider-runtime-D9Q-7VuO.js +0 -386
  1705. package/dist/provider-runtime.runtime-C6YZ8YI0.js +0 -26
  1706. package/dist/provider-self-hosted-setup-BIAD2ISe.js +0 -373
  1707. package/dist/provider-stream-DScdaoRo.js +0 -313
  1708. package/dist/provider-stream-PE0IxmpZ.js +0 -1084
  1709. package/dist/provider-stream-family-S2fhlydZ.js +0 -2
  1710. package/dist/provider-usage-DVKHMF6l.js +0 -4
  1711. package/dist/provider-usage-EEjx1av0.js +0 -71
  1712. package/dist/provider-usage.load-Cu11xbrw.js +0 -357
  1713. package/dist/provider-web-search-Dbk7MO-1.js +0 -58
  1714. package/dist/provider-wizard-DS2Xb2eu.js +0 -125
  1715. package/dist/providers.runtime-BPhGcupv.js +0 -240
  1716. package/dist/providers.runtime-DoylK-ht.js +0 -2
  1717. package/dist/proxy-BxacG0p3.js +0 -662
  1718. package/dist/public-artifacts-Dq3y7bBv.js +0 -7
  1719. package/dist/pw-ai-DlSSqerW.js +0 -3064
  1720. package/dist/qmd-manager-B_SG-ejE.js +0 -2040
  1721. package/dist/qr-cli-CT-sE_j9.js +0 -2
  1722. package/dist/qr-cli-DPlDCXJQ.js +0 -371
  1723. package/dist/qr-image--VmmvuDB.js +0 -2
  1724. package/dist/queue-Be2Y7PcO.js +0 -923
  1725. package/dist/read-file-hhemkDfq.js +0 -183
  1726. package/dist/register-service-commands-CeVpCQU3.js +0 -77
  1727. package/dist/register.agent-JLsb-giw.js +0 -152
  1728. package/dist/register.configure-CP0Q-ost.js +0 -16
  1729. package/dist/register.crestodian-CBXyXEix.js +0 -24
  1730. package/dist/register.maintenance-DGIPQ2Vo.js +0 -85
  1731. package/dist/register.message-BBQwz0Ld.js +0 -404
  1732. package/dist/register.migrate-CkgNlvLD.js +0 -106
  1733. package/dist/register.onboard-CS9gRK0c.js +0 -115
  1734. package/dist/register.setup-DhqDOer9.js +0 -40
  1735. package/dist/register.status-health-sessions-CiwQN_lw.js +0 -293
  1736. package/dist/register.subclis-86Md7P0P.js +0 -3
  1737. package/dist/register.subclis-CTVI8zvZ.js +0 -31
  1738. package/dist/register.subclis-core-Cy4AnRCu.js +0 -273
  1739. package/dist/rem-harness-vSsq3HiK.js +0 -649
  1740. package/dist/repair-sequencing-SHADYdcA.js +0 -652
  1741. package/dist/reply-media-paths.runtime-Bf5nxPuP.js +0 -154
  1742. package/dist/reply-media-paths.runtime-sLsMpKGO.js +0 -2
  1743. package/dist/reply-payloads-CJ3w8rSA.js +0 -79
  1744. package/dist/reply-payloads-dedupe-DDFXWCVR.js +0 -176
  1745. package/dist/reply-payloads-dedupe.runtime-DbXPzKmG.js +0 -2
  1746. package/dist/reply-timing-tracker-DjVIBsVb.js +0 -205
  1747. package/dist/reply-turn-admission-nEW5QbY5.js +0 -2056
  1748. package/dist/reply.runtime-B4Dgs3Hg.js +0 -2
  1749. package/dist/reset-preserved-selection-CVD1yeVC.js +0 -45
  1750. package/dist/resolve-DidlinMh.js +0 -106
  1751. package/dist/restart-DzTrO95c.js +0 -121
  1752. package/dist/result-fallback-classifier-BqsFUDvP.js +0 -98
  1753. package/dist/root-help-QGs0dCCN.js +0 -43
  1754. package/dist/route-B3R-uzFG.js +0 -475
  1755. package/dist/route-reply-CdfhgIoY.js +0 -174
  1756. package/dist/route-reply.runtime-DwuU2WjH.js +0 -2
  1757. package/dist/routes-ChXmJocl.js +0 -3701
  1758. package/dist/routes-D-ZF4AdA.js +0 -2
  1759. package/dist/run-ClmVDTET.js +0 -1162
  1760. package/dist/run-auth-profile.runtime-CTxrwz0y.js +0 -2
  1761. package/dist/run-command-CqZJQ0Im.js +0 -2
  1762. package/dist/run-command-GClW75NL.js +0 -23
  1763. package/dist/run-context-BOdGeRg5.js +0 -66
  1764. package/dist/run-context.runtime-CwuKVYPj.js +0 -2
  1765. package/dist/run-delivery.runtime-BQ39dm34.js +0 -762
  1766. package/dist/run-embedded.runtime-e1K4Bt1_.js +0 -4
  1767. package/dist/run-execution-cli.runtime-Cjrgt4cV.js +0 -4
  1768. package/dist/run-executor.runtime-C2JE6JGb.js +0 -330
  1769. package/dist/run-model-catalog.runtime-DkrLKopr.js +0 -2
  1770. package/dist/run-session-state-C5YdQs7o.js +0 -159
  1771. package/dist/run-subagent-registry.runtime-Dl_lXi6y.js +0 -2
  1772. package/dist/runner-CNGHdaIg.js +0 -704
  1773. package/dist/runner.entries-dckPkeld.js +0 -1485
  1774. package/dist/runtime-9LxcVCyw.js +0 -615
  1775. package/dist/runtime-BCOtBS5G.js +0 -3
  1776. package/dist/runtime-C-pgjoJr.js +0 -210
  1777. package/dist/runtime-CyF0vJXG.js +0 -10
  1778. package/dist/runtime-D-7lMvGV.js +0 -2
  1779. package/dist/runtime-D17OmF9G.js +0 -224
  1780. package/dist/runtime-D6SweufG.js +0 -245
  1781. package/dist/runtime-DVAM7AFd.js +0 -2
  1782. package/dist/runtime-DX2ClrP-.js +0 -436
  1783. package/dist/runtime-FOOWuiYX.js +0 -300
  1784. package/dist/runtime-api-B0F0JsV1.js +0 -12
  1785. package/dist/runtime-cREKSBYC.js +0 -2
  1786. package/dist/runtime-channel-BmD4hoCR.js +0 -148
  1787. package/dist/runtime-channel-BsebQSPL.js +0 -2
  1788. package/dist/runtime-config-collectors-BjYeQ0Tk.js +0 -525
  1789. package/dist/runtime-embedded-agent.runtime-A4r23Bn8.js +0 -2
  1790. package/dist/runtime-internal-DkV-EMTK.js +0 -2
  1791. package/dist/runtime-llm.runtime-BQKNnuRc.js +0 -307
  1792. package/dist/runtime-model-auth.runtime-BbGqHVM5.js +0 -2
  1793. package/dist/runtime-model-auth.runtime-rtJH4LBB.js +0 -46
  1794. package/dist/runtime-options-B0EGb1Wq.js +0 -275
  1795. package/dist/runtime-plugin-Bdqm44bH.js +0 -92
  1796. package/dist/runtime-plugins-rZk1eAK_.js +0 -32
  1797. package/dist/runtime-plugins.runtime-DApiYzny.js +0 -2
  1798. package/dist/runtime-prepare.runtime-DWxvnbyY.js +0 -81
  1799. package/dist/runtime-provider-B0slPjtk.js +0 -2
  1800. package/dist/runtime-provider-DLgupOKt.js +0 -24
  1801. package/dist/runtime-registry-loader-Cf2HuMjd.js +0 -2
  1802. package/dist/runtime-registry-loader-DLzDrA7e.js +0 -117
  1803. package/dist/runtime-shared-Bg-OiD4u.js +0 -365
  1804. package/dist/runtime-web-channel-plugin-DrMjRaqi.js +0 -204
  1805. package/dist/scan-DA7Oqxuv.js +0 -573
  1806. package/dist/sdk-security-runtime-WjOaCbga.js +0 -86
  1807. package/dist/sdk-setup-tools-DaYT6_jD.js +0 -8
  1808. package/dist/secrets-cli-fJQ0geWO.js +0 -150
  1809. package/dist/security-cli-CJMwGp8U.js +0 -520
  1810. package/dist/selection-BNwLQzqJ.js +0 -3
  1811. package/dist/selection-Cj-l80pO.js +0 -18365
  1812. package/dist/send-DstYcrDW.js +0 -711
  1813. package/dist/send-aTxtLkJm.js +0 -178
  1814. package/dist/send-media-Bl2ryo6a.js +0 -2072
  1815. package/dist/send-qwDMMnM6.js +0 -1222
  1816. package/dist/send-result-BWRKr16H.js +0 -141
  1817. package/dist/server-CMtA1S09.js +0 -24
  1818. package/dist/server-DIRaYiiH.js +0 -72
  1819. package/dist/server-aux-handlers-BRO-9-Jf.js +0 -1347
  1820. package/dist/server-chat-0J_ke0ph.js +0 -827
  1821. package/dist/server-context-DWOSX34k.js +0 -2
  1822. package/dist/server-context-R7MFLFdI.js +0 -955
  1823. package/dist/server-cron-2FuFg2j8.js +0 -2
  1824. package/dist/server-cron-ChPAVQtg.js +0 -3173
  1825. package/dist/server-maintenance-ZvS7Id6T.js +0 -152
  1826. package/dist/server-methods-DSbhPK3k.js +0 -497
  1827. package/dist/server-middleware-CYxFU-e5.js +0 -122
  1828. package/dist/server-model-catalog-B22UhmRr.js +0 -73
  1829. package/dist/server-model-catalog-BJIHPP3P.js +0 -2
  1830. package/dist/server-node-events-tNWJnXQM.js +0 -597
  1831. package/dist/server-plugin-bootstrap-Ccu97zi8.js +0 -71
  1832. package/dist/server-plugins-ByXwKPnj.js +0 -435
  1833. package/dist/server-reload-handlers-ConGiT9Q.js +0 -719
  1834. package/dist/server-restart-sentinel-mPHo61LL.js +0 -700
  1835. package/dist/server-runtime-services-BR1icaUW.js +0 -3
  1836. package/dist/server-runtime-services-Bx8n34dj.js +0 -147
  1837. package/dist/server-runtime-subscriptions-CZklTkRG.js +0 -67
  1838. package/dist/server-session-events-DxdiZYM2.js +0 -244
  1839. package/dist/server-session-key-CYvLslFO.js +0 -75
  1840. package/dist/server-session-key-D9GQut81.js +0 -2
  1841. package/dist/server-startup-config-Byb0vR8j.js +0 -305
  1842. package/dist/server-startup-early-a65fHTQS.js +0 -87
  1843. package/dist/server-startup-memory-ClwzC9jX.js +0 -72
  1844. package/dist/server-startup-plugins-CaBj0Nt2.js +0 -127
  1845. package/dist/server-startup-post-attach-B7TcxkmO.js +0 -793
  1846. package/dist/server-ws-runtime-Cxk_CqMr.js +0 -374
  1847. package/dist/server.impl-CQ6dnx43.js +0 -2622
  1848. package/dist/session-cost-usage-GsYDNvka.js +0 -1600
  1849. package/dist/session-kill-http-CKkxZhhd.js +0 -121
  1850. package/dist/session-log-runtime-Bwc2Oijk.js +0 -1258
  1851. package/dist/session-override-CWbKiXiC.js +0 -134
  1852. package/dist/session-reset-model.runtime-CDFMjwWA.js +0 -144
  1853. package/dist/session-reset-service-SE0aK4cw.js +0 -651
  1854. package/dist/session-status.runtime-Df89I7Fk.js +0 -2
  1855. package/dist/session-store-RkvjJPMQ.js +0 -273
  1856. package/dist/session-store.runtime-C7P5asx7.js +0 -4
  1857. package/dist/session-subagent-reactivation.runtime-BhGUZG1Z.js +0 -2
  1858. package/dist/session-tab-registry-9rSuQ0Yz.js +0 -551
  1859. package/dist/session-utils-De8TIM0h.js +0 -1508
  1860. package/dist/sessions-6b9a00Tl.js +0 -1917
  1861. package/dist/sessions-CEPHczjC.js +0 -316
  1862. package/dist/sessions-CEojHc8b.js +0 -12736
  1863. package/dist/sessions-cleanup-BkG7_sq9.js +0 -165
  1864. package/dist/sessions-history-http-BjJEfjJa.js +0 -432
  1865. package/dist/sessions-patch-PwG5sknc.js +0 -401
  1866. package/dist/sessions-resolve-CSIrd_fi.js +0 -180
  1867. package/dist/sessions-table-8CbU7jXa.js +0 -161
  1868. package/dist/sessions.runtime-BYHMD0M7.js +0 -2
  1869. package/dist/set-BJDpe28W.js +0 -31
  1870. package/dist/set-image-CwTFx7PX.js +0 -17
  1871. package/dist/setup-B6LmeIms.js +0 -614
  1872. package/dist/setup-B_zxHfYu.js +0 -2
  1873. package/dist/setup-onboard-configure-help-fast-path-Bck3SKEH.js +0 -64
  1874. package/dist/setup.finalize-CmLYX-Rf.js +0 -586
  1875. package/dist/setup.gateway-config-H_89Msro.js +0 -281
  1876. package/dist/setup.migration-import-DVzyUjX6.js +0 -2
  1877. package/dist/setup.migration-import-DmJpqoqf.js +0 -200
  1878. package/dist/setup.post-install-migration-WPFWKXXg.js +0 -128
  1879. package/dist/shared-CUhu8NTs.js +0 -5
  1880. package/dist/shared-D-BN2JhY.js +0 -71
  1881. package/dist/shared-ES8nDIcn.js +0 -212
  1882. package/dist/simple-completion-runtime-BGZkWvKr.js +0 -206
  1883. package/dist/simple-completion-runtime-CM_IISYW.js +0 -2
  1884. package/dist/simple-completion-transport-Bo0u9dhp.js +0 -83
  1885. package/dist/snapshot-urls-C1KjRQD5.js +0 -317
  1886. package/dist/speech-core-Bas7e4h0.js +0 -119
  1887. package/dist/speech-provider-BonJQv5S.js +0 -227
  1888. package/dist/speech-provider-CwdKQmDv.js +0 -171
  1889. package/dist/speech-provider-DcQRnYhZ.js +0 -233
  1890. package/dist/stale-oauth-profile-shadows-C3aeAWfv.js +0 -186
  1891. package/dist/stale-oauth-profile-shadows-m5rb8dPc.js +0 -2
  1892. package/dist/standalone-runtime-registry-loader-B9n2LBKC.js +0 -59
  1893. package/dist/startup-context-DY7C4riM.js +0 -314
  1894. package/dist/status-6EPKat7p.js +0 -73
  1895. package/dist/status-C6Fa7Dsf.js +0 -2
  1896. package/dist/status-CNnxDQlM.js +0 -4
  1897. package/dist/status-D2Scvbc0.js +0 -3
  1898. package/dist/status-Ducanro3.js +0 -2
  1899. package/dist/status-_XX_6QVA.js +0 -466
  1900. package/dist/status-all-BP1u6vou.js +0 -573
  1901. package/dist/status-json-DPlOJ_ue.js +0 -15
  1902. package/dist/status-json-command-BT7EwVKj.js +0 -84
  1903. package/dist/status-message-Dzr9-MX-.js +0 -495
  1904. package/dist/status-message.runtime-DFezIt1d.js +0 -6
  1905. package/dist/status-prBlcUV5.js +0 -249
  1906. package/dist/status-queue.runtime-C1bmg2rl.js +0 -2
  1907. package/dist/status-runtime-shared-RjKIPEQ0.js +0 -289
  1908. package/dist/status-subagents.runtime-tsCCe4Ny.js +0 -32
  1909. package/dist/status-text-Bkeyg8Bf.js +0 -301
  1910. package/dist/status.command-D06_4ATq.js +0 -425
  1911. package/dist/status.command-dDEZM84a.js +0 -2
  1912. package/dist/status.command.text-runtime-WH9tP7yg.js +0 -15
  1913. package/dist/status.runtime-B76GaBIR.js +0 -2
  1914. package/dist/status.scan-Bc6clx0F.js +0 -72
  1915. package/dist/status.scan-overview-v_-AaFhC.js +0 -460
  1916. package/dist/status.scan.deps.runtime-BkH1HAb4.js +0 -19
  1917. package/dist/status.scan.fast-json-CrlfKKI3.js +0 -2
  1918. package/dist/status.scan.fast-json-D8v6zfP8.js +0 -163
  1919. package/dist/status.summary-DBhvgOPr.js +0 -276
  1920. package/dist/status.summary-hQV0PKFO.js +0 -2
  1921. package/dist/store-BClomp_4.js +0 -3
  1922. package/dist/store-BHqDPtNw.js +0 -2302
  1923. package/dist/stored-model-override-vm4CtQWX.js +0 -79
  1924. package/dist/subagent-announce-D244Q4w2.js +0 -353
  1925. package/dist/subagent-announce-delivery-qKZfF7Bs.js +0 -1369
  1926. package/dist/subagent-control-c87mVGUE.js +0 -492
  1927. package/dist/subagent-control.runtime-DfQtIsDb.js +0 -3
  1928. package/dist/subagent-hooks-B_UW5Len.js +0 -2
  1929. package/dist/subagent-hooks-CYvFWt_r.js +0 -230
  1930. package/dist/subagent-hooks-api-DZgaJf19.js +0 -23
  1931. package/dist/subagent-registry-BlcoCggo.js +0 -2627
  1932. package/dist/subagent-registry-CuObhNeO.js +0 -3
  1933. package/dist/subagent-session-cleanup-hFF8Z34s.js +0 -390
  1934. package/dist/system-CN_Knfqq.js +0 -111
  1935. package/dist/system-prompt-config-BmZlhYK9.js +0 -918
  1936. package/dist/talk-DrjGczYs.js +0 -2454
  1937. package/dist/target-id-BNpbyWkq.js +0 -107
  1938. package/dist/targets-CQcGo6u4.js +0 -267
  1939. package/dist/targets.runtime-DwcxNI-x.js +0 -2
  1940. package/dist/task-executor-CZg-qt4u.js +0 -349
  1941. package/dist/task-owner-access-Duem5jjb.js +0 -74
  1942. package/dist/task-registry-Cw8pc3Ry.js +0 -2362
  1943. package/dist/task-registry-delivery-runtime-HaiKqj0A.js +0 -2
  1944. package/dist/task-registry.maintenance-BLv3wpK9.js +0 -764
  1945. package/dist/task-registry.maintenance-CvlIcxE-.js +0 -2
  1946. package/dist/task-status-access-C5nDJSI4.js +0 -18
  1947. package/dist/tasks-D3CfEAlq.js +0 -548
  1948. package/dist/tasks-WKnE5fvr.js +0 -153
  1949. package/dist/tasks-audit-system-okJjcOjU.js +0 -210
  1950. package/dist/tasks-json-C-iUgWNu.js +0 -73
  1951. package/dist/tavily-web-search-provider.runtime-jpagljrA.js +0 -112
  1952. package/dist/text-report-BTsF3Pv3.js +0 -695
  1953. package/dist/text-transforms.runtime-CgH_pbcQ.js +0 -113
  1954. package/dist/thread-bindings-BWxpUE9U.js +0 -228
  1955. package/dist/tool-DhJbbm91.js +0 -143
  1956. package/dist/tool-dispatch-CpFUfblu.js +0 -155
  1957. package/dist/tool-images-C-tFlXjE.js +0 -247
  1958. package/dist/tool-plugin-3NejWxZW.js +0 -93
  1959. package/dist/tool-resolution-oW8Cbamd.js +0 -153
  1960. package/dist/tool-result-truncation-CWFGf7Eu.js +0 -498
  1961. package/dist/tool-schema-CMtc7PdZ.js +0 -40
  1962. package/dist/tool-schema-projection-DJRPEEvY.js +0 -215
  1963. package/dist/tool-split-E4RdK5jS.js +0 -323
  1964. package/dist/tools-BAl3JiNw.js +0 -901
  1965. package/dist/tools-DC8tCPxR.js +0 -579
  1966. package/dist/tools-catalog-Dzv9zaBD.js +0 -156
  1967. package/dist/tools-effective-CGvzyIL2.js +0 -442
  1968. package/dist/tools-effective-inventory-GI5N5Q9v.js +0 -379
  1969. package/dist/tools-invoke-CU2U0hNH.js +0 -51
  1970. package/dist/tools-invoke-http-8s3FiUy4.js +0 -68
  1971. package/dist/tools-invoke-shared-DIETrEY7.js +0 -200
  1972. package/dist/tools.runtime-Bnm8CI7w.js +0 -5
  1973. package/dist/transcript-rewrite-Buv2ITw4.js +0 -688
  1974. package/dist/transcripts-tool-BCFlLCFd.js +0 -2
  1975. package/dist/transcripts-tool-CWgNd0Uw.js +0 -656
  1976. package/dist/tts-Aguo4zC5.js +0 -3
  1977. package/dist/tts-Bf77cURn.js +0 -2
  1978. package/dist/tts-DnADOKOP.js +0 -194
  1979. package/dist/tts-runtime-MBSH-nOM.js +0 -1337
  1980. package/dist/tts.runtime-B-NR9osE.js +0 -2
  1981. package/dist/tts.runtime-Bo-QxKgx.js +0 -3
  1982. package/dist/tui-B0CdNmCz.js +0 -4860
  1983. package/dist/tui-ByRcXM3Z.js +0 -2
  1984. package/dist/tui-backend-C52BUoZI.js +0 -256
  1985. package/dist/tui-cli-BQHpZ4n0.js +0 -40
  1986. package/dist/typing-policy-XspVOezC.js +0 -199
  1987. package/dist/usage-BOYwzimH.js +0 -1113
  1988. package/dist/usage-BSmLrVWB.js +0 -623
  1989. package/dist/usage-format-CfzICmvv.js +0 -2
  1990. package/dist/usage-format-DPJKCPic.js +0 -394
  1991. package/dist/video-generation-provider-CdCTztQ7.js +0 -77
  1992. package/dist/video-generation-provider-MUUshUzz.js +0 -325
  1993. package/dist/video-generation-provider-XmzzTa6e.js +0 -297
  1994. package/dist/video-generation-provider-weiQUJE5.js +0 -64
  1995. package/dist/web-fetch-providers.runtime-tD9zqAS2.js +0 -41
  1996. package/dist/web-guarded-fetch-CyhQZ1yD.js +0 -2
  1997. package/dist/web-guarded-fetch-DIXHI-yJ.js +0 -58
  1998. package/dist/web-media-BPnTMYE5.js +0 -4
  1999. package/dist/web-media-DV_tCQiQ.js +0 -2
  2000. package/dist/web-media-DYydVGCK.js +0 -651
  2001. package/dist/web-provider-runtime-shared-h3M6Bqyg.js +0 -142
  2002. package/dist/web-search-provider-common-CEYWuDcp.js +0 -252
  2003. package/dist/web-search-providers.runtime-YrayP296.js +0 -41
  2004. /package/dist/{acp-runtime-backend-CHZtaM6t.js → acp-runtime-backend-B83JR5Zf.js} +0 -0
  2005. /package/dist/{agent-turn-attachments-BYCRK86s.js → agent-turn-attachments-D5uJijuK.js} +0 -0
  2006. /package/dist/{auth-install-policy-t46tJ8jV.js → auth-install-policy-BIpdwrZ9.js} +0 -0
  2007. /package/dist/{cli-backends-BHXnrVN_.js → cli-backends-79CCRQ2a.js} +0 -0
  2008. /package/dist/{command-secret-targets-DZ0J2Wm3.js → command-secret-targets-BOJlcBil.js} +0 -0
  2009. /package/dist/{commands-DWp49Exc.js → commands-Dw9hwmVt.js} +0 -0
  2010. /package/dist/{commands-reset-hooks-MMq2dvff.js → commands-reset-hooks-epArfNOY.js} +0 -0
  2011. /package/dist/{delegate-Dkj_5OvH.js → delegate-Bw8NQXVr.js} +0 -0
  2012. /package/dist/{jobs-BGELIHcx.js → jobs-BIOTaq7l.js} +0 -0
  2013. /package/dist/{kimi-web-search-provider-4PlMYsPx.js → kimi-web-search-provider-Bzg_DiXO.js} +0 -0
  2014. /package/dist/{memory-host-search-Ds9GiNpf.js → memory-host-search-Dph0Mq-v.js} +0 -0
  2015. /package/dist/{minimax-web-search-provider-d5gTJUNg.js → minimax-web-search-provider-CETxDkkI.js} +0 -0
  2016. /package/dist/{model-selection-cli-CO6BHPiL.js → model-selection-cli-DizUvxeY.js} +0 -0
  2017. /package/dist/{provider-auth-choice-preference-f7Us6TQL.js → provider-auth-choice-preference-uJn1811S.js} +0 -0
  2018. /package/dist/{runtime-wfO9bV5y.js → runtime-BEVbpIgZ.js} +0 -0
  2019. /package/dist/{runtime-web-tools-B6vr1LZs.js → runtime-web-tools-Bf0aEe-F.js} +0 -0
  2020. /package/dist/{runtime-web-tools-fallback.runtime-Crs7KfH5.js → runtime-web-tools-fallback.runtime-DU6rTj6l.js} +0 -0
  2021. /package/dist/{session-subagent-reactivation-H5Rdwkyy.js → session-subagent-reactivation-Bb5SCi9J.js} +0 -0
  2022. /package/dist/{tavily-web-search-provider-DbdIzpMv.js → tavily-web-search-provider-CIEhV60D.js} +0 -0
@@ -0,0 +1,3701 @@
1
+ import { a as normalizeLowercaseStringOrEmpty, c as normalizeOptionalString$1, p as readStringValue } from "./string-coerce-DKw2K5wM.js";
2
+ import { _ as parseStrictPositiveInteger, g as parseStrictNonNegativeInteger, h as parseStrictInteger, m as parseStrictFiniteNumber } from "./number-coercion-D1aDmIZp.js";
3
+ import { i as formatErrorMessage } from "./errors-5ePGD43N.js";
4
+ import { _ as uniqueStrings } from "./string-normalization-B8G0vlWE.js";
5
+ import { u as pathScope } from "./fs-safe-CR_om3kX.js";
6
+ import { p as resolveUserPath } from "./utils-v5zGdVpj.js";
7
+ import { i as getRuntimeConfig } from "./io-DAZXanmU.js";
8
+ import { d as isImageProcessorUnavailableError, g as resizeToJpeg, l as getImageMetadata, o as buildImageResizeSideGrid, r as IMAGE_REDUCE_QUALITY_STEPS } from "./media-services-CWbIUZDe.js";
9
+ import { a as ensureMediaDir, u as saveMediaBuffer } from "./store-DhTe6QLE.js";
10
+ import "./number-runtime-Cu8gqEYx.js";
11
+ import "./string-coerce-runtime-BurriTLB.js";
12
+ import { n as redactCdpUrl, t as parseBrowserHttpUrl } from "./browser-config-DcLHiohY.js";
13
+ import { i as normalizeActBoundedNonNegativeMs, n as ACT_MAX_VIEWPORT_DIMENSION, r as ACT_MAX_WAIT_TIME_MS, t as ACT_MAX_CLICK_DELAY_MS } from "./act-policy-gF8d1KDG.js";
14
+ import { C as BrowserTargetAmbiguousError, I as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, L as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as BrowserTabNotFoundError, T as toBrowserErrorResponse, U as DEFAULT_BROWSER_SCREENSHOT_TIMEOUT_MS, _ as BrowserError, d as withCdpSocket, f as normalizeBrowserTimerDelayMs, g as BrowserConflictError, n as assertCdpEndpointAllowed, v as BrowserProfileNotFoundError, w as BrowserValidationError, y as BrowserProfileUnavailableError } from "./cdp.helpers-GfQkB-B5.js";
15
+ import { a as DEFAULT_DOWNLOAD_DIR, i as resolveProfile, o as DEFAULT_TRACE_DIR, r as resolveManagedBrowserHeadlessMode, s as DEFAULT_UPLOAD_DIR } from "./config-CsmSEaNn.js";
16
+ import "./errors-C0AUxo3P.js";
17
+ import { i as isValidProfileName, n as deleteBrowserProfileConfig, t as createBrowserProfileConfig } from "./config-mutations-Bu3ahkX8.js";
18
+ import { r as resolveBrowserExecutableForPlatform } from "./chrome.executables-BzsaKNh7.js";
19
+ import { t as movePathToTrash } from "./trash-CKhcanf6.js";
20
+ import { n as normalizeString } from "./record-shared-CrsRVgBe.js";
21
+ import "./sdk-setup-tools-CsQM9pF0.js";
22
+ import { D as takeChromeMcpScreenshot, O as takeChromeMcpSnapshot, S as resizeChromeMcpPage, a as closeChromeMcpTab, b as pressChromeMcpKey, d as fillChromeMcpForm, h as hoverChromeMcpElement, k as uploadChromeMcpFile, l as evaluateChromeMcpScript, n as clickChromeMcpCoords, p as getChromeMcpPid, r as clickChromeMcpElement, s as dragChromeMcpElement, u as fillChromeMcpElement, v as navigateChromeMcpPage } from "./chrome-mcp-Bg5D5PDc.js";
23
+ import { E as withBrowserNavigationPolicy, S as assertBrowserNavigationAllowed, _ as INTERACTIVE_ROLES, a as resolveFengMingUserDataDir, b as resolveBrowserNavigationProxyMode, g as CONTENT_ROLES, h as snapshotRoleViaCdp, m as snapshotAria, t as getChromeWebSocketUrl, u as captureScreenshot, v as STRUCTURAL_ROLES, w as assertBrowserNavigationResultAllowed, y as ensureOutputDirectory } from "./chrome-BWHc9vYG.js";
24
+ import { a as shouldUsePlaywrightForAriaSnapshot, i as resolveDefaultSnapshotFormat, n as getPwAiModule$1, o as shouldUsePlaywrightForScreenshot, r as getBrowserProfileCapabilities, t as resolveTargetIdFromTabs } from "./target-id-CrUyi-Uq.js";
25
+ import { i as getRoleSnapshotStats, l as matchBrowserUrlPattern, s as normalizeBrowserFormField, t as appendSnapshotUrls } from "./snapshot-urls-B-wkwDI9.js";
26
+ import fs from "node:fs";
27
+ import path from "node:path";
28
+ import crypto from "node:crypto";
29
+ //#region extensions/browser/src/browser/routes/utils.ts
30
+ function normalizeOptionalString(value) {
31
+ return value.trim() || void 0;
32
+ }
33
+ function asyncBrowserRoute(handler) {
34
+ return (req, res) => handler(req, res);
35
+ }
36
+ /**
37
+ * Extract profile name from query string or body and get profile context.
38
+ * Query string takes precedence over body for consistency with GET routes.
39
+ */
40
+ function getProfileContext(req, ctx) {
41
+ let profileName;
42
+ if (typeof req.query.profile === "string") profileName = normalizeOptionalString(req.query.profile);
43
+ if (!profileName && req.body && typeof req.body === "object") {
44
+ const body = req.body;
45
+ if (typeof body.profile === "string") profileName = normalizeOptionalString(body.profile);
46
+ }
47
+ try {
48
+ return ctx.forProfile(profileName);
49
+ } catch (err) {
50
+ return {
51
+ error: String(err),
52
+ status: 404
53
+ };
54
+ }
55
+ }
56
+ function jsonError(res, status, message) {
57
+ res.status(status).json({ error: message });
58
+ }
59
+ function toStringOrEmpty(value) {
60
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return normalizeOptionalString(String(value)) ?? "";
61
+ return "";
62
+ }
63
+ function toNumber(value) {
64
+ if (typeof value === "number" && Number.isFinite(value)) return value;
65
+ const normalized = typeof value === "string" ? normalizeOptionalString(value) : void 0;
66
+ if (normalized) {
67
+ const parsed = Number(normalized);
68
+ return Number.isFinite(parsed) ? parsed : void 0;
69
+ }
70
+ }
71
+ function toBoolean(value) {
72
+ if (typeof value === "boolean") return value;
73
+ if (typeof value !== "string" && typeof value !== "number") return;
74
+ const normalized = String(value).trim().toLowerCase();
75
+ if (normalized === "true" || normalized === "1" || normalized === "yes") return true;
76
+ if (normalized === "false" || normalized === "0" || normalized === "no") return false;
77
+ }
78
+ function toStringArray(value) {
79
+ if (!Array.isArray(value)) return;
80
+ const strings = value.map((v) => toStringOrEmpty(v)).filter(Boolean);
81
+ return strings.length ? strings : void 0;
82
+ }
83
+ //#endregion
84
+ //#region extensions/browser/src/browser/routes/agent.shared.ts
85
+ const SELECTOR_UNSUPPORTED_MESSAGE = [
86
+ "Error: 'selector' is not supported. Use 'ref' from snapshot instead.",
87
+ "",
88
+ "Example workflow:",
89
+ "1. snapshot action to get page state with refs",
90
+ "2. act with ref: \"e123\" to interact with element",
91
+ "",
92
+ "This is more reliable for modern SPAs."
93
+ ].join("\n");
94
+ function readBody(req) {
95
+ const body = req.body;
96
+ if (!body || typeof body !== "object" || Array.isArray(body)) return {};
97
+ return body;
98
+ }
99
+ function resolveTargetIdFromBody(body) {
100
+ return (normalizeOptionalString$1(body.targetId) ?? "") || void 0;
101
+ }
102
+ function resolveTargetIdFromQuery(query) {
103
+ return (normalizeOptionalString$1(query.targetId) ?? "") || void 0;
104
+ }
105
+ function handleRouteError(ctx, res, err) {
106
+ const mapped = ctx.mapTabError(err);
107
+ if (mapped) return jsonError(res, mapped.status, mapped.message);
108
+ const browserMapped = toBrowserErrorResponse(err);
109
+ if (browserMapped) return jsonError(res, browserMapped.status, browserMapped.message);
110
+ jsonError(res, 500, String(err));
111
+ }
112
+ function resolveProfileContext(req, res, ctx) {
113
+ const profileCtx = getProfileContext(req, ctx);
114
+ if ("error" in profileCtx) {
115
+ jsonError(res, profileCtx.status, profileCtx.error);
116
+ return null;
117
+ }
118
+ return profileCtx;
119
+ }
120
+ function browserNavigationPolicyForProfile(ctx, profileCtx) {
121
+ return withBrowserNavigationPolicy(ctx.state().resolved.ssrfPolicy, { browserProxyMode: resolveBrowserNavigationProxyMode({
122
+ resolved: ctx.state().resolved,
123
+ profile: profileCtx.profile
124
+ }) });
125
+ }
126
+ async function getPwAiModule() {
127
+ return await getPwAiModule$1({ mode: "soft" });
128
+ }
129
+ async function requirePwAi(res, feature) {
130
+ const mod = await getPwAiModule();
131
+ if (mod) return mod;
132
+ jsonError(res, 501, [
133
+ `Playwright is not available in this gateway build; '${feature}' is unsupported.`,
134
+ "Reinstall or update FengMing so the core browser runtime dependency is present, then restart the gateway. In Docker, also install Chromium with the bundled playwright-core CLI.",
135
+ "Docs: /tools/browser#playwright-requirement"
136
+ ].join("\n"));
137
+ return null;
138
+ }
139
+ async function withRouteTabContext(params) {
140
+ const profileCtx = resolveProfileContext(params.req, params.res, params.ctx);
141
+ if (!profileCtx) return;
142
+ try {
143
+ const tab = await profileCtx.ensureTabAvailable(params.targetId);
144
+ if (params.enforceCurrentUrlAllowed) await assertBrowserNavigationResultAllowed({
145
+ url: tab.url,
146
+ ...browserNavigationPolicyForProfile(params.ctx, profileCtx)
147
+ });
148
+ return await params.run({
149
+ profileCtx,
150
+ tab,
151
+ cdpUrl: profileCtx.profile.cdpUrl,
152
+ resolveTabUrl: (fallbackUrl) => resolveSafeRouteTabUrl({
153
+ ctx: params.ctx,
154
+ profileCtx,
155
+ targetId: tab.targetId,
156
+ fallbackUrl
157
+ })
158
+ });
159
+ } catch (err) {
160
+ handleRouteError(params.ctx, params.res, err);
161
+ return;
162
+ }
163
+ }
164
+ /**
165
+ * Response-only URL redaction. This swallows policy failures and must not be used as
166
+ * an execution gate; use enforceCurrentUrlAllowed on the route helper instead.
167
+ */
168
+ async function resolveSafeRouteTabUrl(params) {
169
+ const candidateUrl = (await params.profileCtx.listTabs().catch(() => [])).find((tab) => tab.targetId === params.targetId)?.url ?? params.fallbackUrl;
170
+ if (!candidateUrl) return;
171
+ try {
172
+ await assertBrowserNavigationResultAllowed({
173
+ url: candidateUrl,
174
+ ...browserNavigationPolicyForProfile(params.ctx, params.profileCtx)
175
+ });
176
+ return candidateUrl;
177
+ } catch {
178
+ return;
179
+ }
180
+ }
181
+ async function withPlaywrightRouteContext(params) {
182
+ return await withRouteTabContext({
183
+ req: params.req,
184
+ res: params.res,
185
+ ctx: params.ctx,
186
+ targetId: params.targetId,
187
+ enforceCurrentUrlAllowed: params.enforceCurrentUrlAllowed,
188
+ run: async ({ profileCtx, tab, cdpUrl, resolveTabUrl }) => {
189
+ const pw = await requirePwAi(params.res, params.feature);
190
+ if (!pw) return;
191
+ return await params.run({
192
+ profileCtx,
193
+ tab,
194
+ cdpUrl,
195
+ resolveTabUrl,
196
+ pw
197
+ });
198
+ }
199
+ });
200
+ }
201
+ //#endregion
202
+ //#region extensions/browser/src/browser/routes/existing-session-limits.ts
203
+ const EXISTING_SESSION_LIMITS = {
204
+ act: {
205
+ clickSelector: "existing-session click does not support selector targeting yet; use ref.",
206
+ clickButtonOrModifiers: "existing-session click currently supports left-click only (no button overrides/modifiers).",
207
+ typeSelector: "existing-session type does not support selector targeting yet; use ref.",
208
+ typeSlowly: "existing-session type does not support slowly=true; use fill/press instead.",
209
+ typeTimeout: "existing-session type does not support timeoutMs overrides.",
210
+ pressDelay: "existing-session press does not support delayMs.",
211
+ hoverSelector: "existing-session hover does not support selector targeting yet; use ref.",
212
+ hoverTimeout: "existing-session hover does not support timeoutMs overrides.",
213
+ scrollSelector: "existing-session scrollIntoView does not support selector targeting yet; use ref.",
214
+ scrollTimeout: "existing-session scrollIntoView does not support timeoutMs overrides.",
215
+ dragSelector: "existing-session drag does not support selector targeting yet; use startRef/endRef.",
216
+ dragTimeout: "existing-session drag does not support timeoutMs overrides.",
217
+ selectSelector: "existing-session select does not support selector targeting yet; use ref.",
218
+ selectSingleValue: "existing-session select currently supports a single value only.",
219
+ selectTimeout: "existing-session select does not support timeoutMs overrides.",
220
+ fillTimeout: "existing-session fill does not support timeoutMs overrides.",
221
+ waitNetworkIdle: "existing-session wait does not support loadState=networkidle yet.",
222
+ evaluateTimeout: "existing-session evaluate does not support timeoutMs overrides.",
223
+ batch: "existing-session batch is not supported yet; send actions individually."
224
+ },
225
+ hooks: {
226
+ uploadElement: "existing-session file uploads do not support element selectors; use ref/inputRef.",
227
+ uploadSingleFile: "existing-session file uploads currently support one file at a time.",
228
+ uploadRefRequired: "existing-session file uploads require ref or inputRef.",
229
+ dialogId: "existing-session dialog handling does not support dialogId.",
230
+ dialogTimeout: "existing-session dialog handling does not support timeoutMs."
231
+ },
232
+ download: {
233
+ waitUnsupported: "download waiting is not supported for existing-session profiles yet.",
234
+ downloadUnsupported: "downloads are not supported for existing-session profiles yet."
235
+ },
236
+ snapshot: {
237
+ pdfUnsupported: "pdf is not supported for existing-session profiles yet; use screenshot/snapshot instead.",
238
+ screenshotElement: "element screenshots are not supported for existing-session profiles; use ref from snapshot.",
239
+ snapshotSelector: "selector/frame snapshots are not supported for existing-session profiles; snapshot the whole page and use refs."
240
+ },
241
+ responseBody: "response body is not supported for existing-session profiles yet."
242
+ };
243
+ //#endregion
244
+ //#region extensions/browser/src/browser/routes/output-paths.ts
245
+ async function ensureOutputRootDir(rootDir) {
246
+ await ensureOutputDirectory(rootDir);
247
+ }
248
+ async function resolveWritableOutputPathOrRespond(params) {
249
+ if (params.ensureRootDir) await ensureOutputRootDir(params.rootDir);
250
+ const pathResult = await pathScope(params.rootDir, { label: params.scopeLabel }).writable(params.requestedPath, { defaultName: params.defaultFileName });
251
+ if (!pathResult.ok) {
252
+ params.res.status(400).json({ error: pathResult.error });
253
+ return null;
254
+ }
255
+ return pathResult.path;
256
+ }
257
+ //#endregion
258
+ //#region extensions/browser/src/browser/routes/route-numeric.ts
259
+ function hasRouteInputValue(value) {
260
+ return value != null;
261
+ }
262
+ function readRouteFiniteNumber(value, fieldName) {
263
+ const parsed = parseStrictFiniteNumber(value);
264
+ if (parsed === void 0 && hasRouteInputValue(value)) throw new Error(`${fieldName} must be a finite number.`);
265
+ return parsed;
266
+ }
267
+ function readOptionalRouteFiniteNumber(value, fieldName) {
268
+ if (typeof value === "string" && value.trim() === "") return;
269
+ return readRouteFiniteNumber(value, fieldName);
270
+ }
271
+ function readRouteInteger(value, fieldName, options) {
272
+ const parsed = parseStrictInteger(value);
273
+ if (parsed === void 0 && hasRouteInputValue(value)) throw new Error(options?.invalidMessage ?? `${fieldName} must be an integer.`);
274
+ return parsed;
275
+ }
276
+ function readRoutePositiveInteger(value, fieldName, options) {
277
+ const parsed = parseStrictPositiveInteger(value);
278
+ if (parsed === void 0 && hasRouteInputValue(value)) throw new Error(options?.invalidMessage ?? `${fieldName} must be a positive integer.`);
279
+ return parsed;
280
+ }
281
+ function readRouteTimerTimeoutMs(value, fieldName = "timeoutMs", opts) {
282
+ const parsed = readRoutePositiveInteger(value, fieldName, opts);
283
+ return parsed === void 0 ? void 0 : normalizeBrowserTimerDelayMs(parsed, opts);
284
+ }
285
+ function readRouteNonNegativeInteger(value, fieldName, options) {
286
+ const parsed = parseStrictNonNegativeInteger(value);
287
+ if (parsed === void 0 && hasRouteInputValue(value)) throw new Error(options?.invalidMessage ?? `${fieldName} must be a non-negative integer.`);
288
+ return parsed;
289
+ }
290
+ //#endregion
291
+ //#region extensions/browser/src/browser/routes/agent.act.download.ts
292
+ function buildDownloadRequestBase(cdpUrl, targetId, timeoutMs) {
293
+ return {
294
+ cdpUrl,
295
+ targetId,
296
+ timeoutMs: timeoutMs ?? void 0
297
+ };
298
+ }
299
+ function registerBrowserAgentActDownloadRoutes(app, ctx) {
300
+ app.post("/wait/download", asyncBrowserRoute(async (req, res) => {
301
+ const body = readBody(req);
302
+ const targetId = resolveTargetIdFromBody(body);
303
+ const out = toStringOrEmpty(body.path) || "";
304
+ let timeoutMs;
305
+ try {
306
+ timeoutMs = readRouteTimerTimeoutMs(body.timeoutMs);
307
+ } catch (err) {
308
+ return jsonError(res, 400, formatErrorMessage(err));
309
+ }
310
+ await withRouteTabContext({
311
+ req,
312
+ res,
313
+ ctx,
314
+ targetId,
315
+ run: async ({ profileCtx, cdpUrl, tab }) => {
316
+ if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) return jsonError(res, 501, EXISTING_SESSION_LIMITS.download.waitUnsupported);
317
+ const pw = await requirePwAi(res, "wait for download");
318
+ if (!pw) return;
319
+ await ensureOutputRootDir(DEFAULT_DOWNLOAD_DIR);
320
+ let downloadPath;
321
+ if (out.trim()) {
322
+ const resolvedDownloadPath = await resolveWritableOutputPathOrRespond({
323
+ res,
324
+ rootDir: DEFAULT_DOWNLOAD_DIR,
325
+ requestedPath: out,
326
+ scopeLabel: "downloads directory"
327
+ });
328
+ if (!resolvedDownloadPath) return;
329
+ downloadPath = resolvedDownloadPath;
330
+ }
331
+ const requestBase = buildDownloadRequestBase(cdpUrl, tab.targetId, timeoutMs);
332
+ const result = await pw.waitForDownloadViaPlaywright({
333
+ ...requestBase,
334
+ path: downloadPath,
335
+ rootDir: DEFAULT_DOWNLOAD_DIR
336
+ });
337
+ res.json({
338
+ ok: true,
339
+ targetId: tab.targetId,
340
+ download: result
341
+ });
342
+ }
343
+ });
344
+ }));
345
+ app.post("/download", asyncBrowserRoute(async (req, res) => {
346
+ const body = readBody(req);
347
+ const targetId = resolveTargetIdFromBody(body);
348
+ const ref = toStringOrEmpty(body.ref);
349
+ const out = toStringOrEmpty(body.path);
350
+ let timeoutMs;
351
+ try {
352
+ timeoutMs = readRouteTimerTimeoutMs(body.timeoutMs);
353
+ } catch (err) {
354
+ return jsonError(res, 400, formatErrorMessage(err));
355
+ }
356
+ if (!ref) return jsonError(res, 400, "ref is required");
357
+ if (!out) return jsonError(res, 400, "path is required");
358
+ await withRouteTabContext({
359
+ req,
360
+ res,
361
+ ctx,
362
+ targetId,
363
+ run: async ({ profileCtx, cdpUrl, tab }) => {
364
+ if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) return jsonError(res, 501, EXISTING_SESSION_LIMITS.download.downloadUnsupported);
365
+ const pw = await requirePwAi(res, "download");
366
+ if (!pw) return;
367
+ await ensureOutputRootDir(DEFAULT_DOWNLOAD_DIR);
368
+ const downloadPath = await resolveWritableOutputPathOrRespond({
369
+ res,
370
+ rootDir: DEFAULT_DOWNLOAD_DIR,
371
+ requestedPath: out,
372
+ scopeLabel: "downloads directory"
373
+ });
374
+ if (!downloadPath) return;
375
+ const requestBase = buildDownloadRequestBase(cdpUrl, tab.targetId, timeoutMs);
376
+ const result = await pw.downloadViaPlaywright({
377
+ ...requestBase,
378
+ ref,
379
+ path: downloadPath,
380
+ rootDir: DEFAULT_DOWNLOAD_DIR
381
+ });
382
+ res.json({
383
+ ok: true,
384
+ targetId: tab.targetId,
385
+ download: result
386
+ });
387
+ }
388
+ });
389
+ }));
390
+ }
391
+ //#endregion
392
+ //#region extensions/browser/src/browser/routes/agent.act.errors.ts
393
+ const ACT_ERROR_CODES = {
394
+ kindRequired: "ACT_KIND_REQUIRED",
395
+ invalidRequest: "ACT_INVALID_REQUEST",
396
+ selectorUnsupported: "ACT_SELECTOR_UNSUPPORTED",
397
+ evaluateDisabled: "ACT_EVALUATE_DISABLED",
398
+ unsupportedForExistingSession: "ACT_EXISTING_SESSION_UNSUPPORTED",
399
+ targetIdMismatch: "ACT_TARGET_ID_MISMATCH"
400
+ };
401
+ function jsonActError(res, status, code, message) {
402
+ res.status(status).json({
403
+ error: message,
404
+ code
405
+ });
406
+ }
407
+ function browserEvaluateDisabledMessage(action) {
408
+ return [action === "wait" ? "wait --fn is disabled by config (browser.evaluateEnabled=false)." : "act:evaluate is disabled by config (browser.evaluateEnabled=false).", "Docs: /gateway/configuration#browser-fengming-managed-browser"].join("\n");
409
+ }
410
+ //#endregion
411
+ //#region extensions/browser/src/browser/routes/agent.act.hooks.ts
412
+ function registerBrowserAgentActHookRoutes(app, ctx) {
413
+ app.post("/hooks/file-chooser", asyncBrowserRoute(async (req, res) => {
414
+ const body = readBody(req);
415
+ const targetId = resolveTargetIdFromBody(body);
416
+ const ref = toStringOrEmpty(body.ref) || void 0;
417
+ const inputRef = toStringOrEmpty(body.inputRef) || void 0;
418
+ const element = toStringOrEmpty(body.element) || void 0;
419
+ const paths = toStringArray(body.paths) ?? [];
420
+ let timeoutMs;
421
+ try {
422
+ timeoutMs = readRouteTimerTimeoutMs(body.timeoutMs);
423
+ } catch (err) {
424
+ return jsonError(res, 400, formatErrorMessage(err));
425
+ }
426
+ if (!paths.length) return jsonError(res, 400, "paths are required");
427
+ await withRouteTabContext({
428
+ req,
429
+ res,
430
+ ctx,
431
+ targetId,
432
+ run: async ({ profileCtx, cdpUrl, tab }) => {
433
+ const uploadPathsResult = await pathScope(DEFAULT_UPLOAD_DIR, { label: `uploads directory (${DEFAULT_UPLOAD_DIR})` }).existing(paths);
434
+ if (!uploadPathsResult.ok) {
435
+ res.status(400).json({ error: uploadPathsResult.error });
436
+ return;
437
+ }
438
+ const resolvedPaths = uploadPathsResult.paths;
439
+ if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) {
440
+ if (element) return jsonError(res, 501, EXISTING_SESSION_LIMITS.hooks.uploadElement);
441
+ if (resolvedPaths.length !== 1) return jsonError(res, 501, EXISTING_SESSION_LIMITS.hooks.uploadSingleFile);
442
+ const uid = inputRef || ref;
443
+ if (!uid) return jsonError(res, 501, EXISTING_SESSION_LIMITS.hooks.uploadRefRequired);
444
+ await uploadChromeMcpFile({
445
+ profileName: profileCtx.profile.name,
446
+ profile: profileCtx.profile,
447
+ targetId: tab.targetId,
448
+ uid,
449
+ filePath: resolvedPaths[0] ?? ""
450
+ });
451
+ return res.json({ ok: true });
452
+ }
453
+ const pw = await requirePwAi(res, "file chooser hook");
454
+ if (!pw) return;
455
+ if (inputRef || element) {
456
+ if (ref) return jsonError(res, 400, "ref cannot be combined with inputRef/element");
457
+ await pw.setInputFilesViaPlaywright({
458
+ cdpUrl,
459
+ targetId: tab.targetId,
460
+ inputRef,
461
+ element,
462
+ paths: resolvedPaths
463
+ });
464
+ } else {
465
+ await pw.armFileUploadViaPlaywright({
466
+ cdpUrl,
467
+ targetId: tab.targetId,
468
+ paths: resolvedPaths,
469
+ timeoutMs: timeoutMs ?? void 0
470
+ });
471
+ if (ref) await pw.clickViaPlaywright({
472
+ cdpUrl,
473
+ targetId: tab.targetId,
474
+ ssrfPolicy: ctx.state().resolved.ssrfPolicy,
475
+ ref
476
+ });
477
+ }
478
+ res.json({ ok: true });
479
+ }
480
+ });
481
+ }));
482
+ app.post("/hooks/dialog", asyncBrowserRoute(async (req, res) => {
483
+ const body = readBody(req);
484
+ const targetId = resolveTargetIdFromBody(body);
485
+ const accept = toBoolean(body.accept);
486
+ const promptText = toStringOrEmpty(body.promptText) || void 0;
487
+ let timeoutMs;
488
+ try {
489
+ timeoutMs = readRouteTimerTimeoutMs(body.timeoutMs);
490
+ } catch (err) {
491
+ return jsonError(res, 400, formatErrorMessage(err));
492
+ }
493
+ const dialogId = toStringOrEmpty(body.dialogId) || void 0;
494
+ if (accept === void 0) return jsonError(res, 400, "accept is required");
495
+ await withRouteTabContext({
496
+ req,
497
+ res,
498
+ ctx,
499
+ targetId,
500
+ run: async ({ profileCtx, cdpUrl, tab }) => {
501
+ if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) {
502
+ if (dialogId) return jsonError(res, 501, EXISTING_SESSION_LIMITS.hooks.dialogId);
503
+ if (timeoutMs) return jsonError(res, 501, EXISTING_SESSION_LIMITS.hooks.dialogTimeout);
504
+ await evaluateChromeMcpScript({
505
+ profileName: profileCtx.profile.name,
506
+ profile: profileCtx.profile,
507
+ targetId: tab.targetId,
508
+ fn: `() => {
509
+ const state = (window.__fengmingDialogHook ??= {});
510
+ if (!state.originals) {
511
+ state.originals = {
512
+ alert: window.alert.bind(window),
513
+ confirm: window.confirm.bind(window),
514
+ prompt: window.prompt.bind(window),
515
+ };
516
+ }
517
+ const originals = state.originals;
518
+ const restore = () => {
519
+ window.alert = originals.alert;
520
+ window.confirm = originals.confirm;
521
+ window.prompt = originals.prompt;
522
+ delete window.__fengmingDialogHook;
523
+ };
524
+ window.alert = (...args) => {
525
+ try {
526
+ return undefined;
527
+ } finally {
528
+ restore();
529
+ }
530
+ };
531
+ window.confirm = (...args) => {
532
+ try {
533
+ return ${accept ? "true" : "false"};
534
+ } finally {
535
+ restore();
536
+ }
537
+ };
538
+ window.prompt = (...args) => {
539
+ try {
540
+ return ${accept ? JSON.stringify(promptText ?? "") : "null"};
541
+ } finally {
542
+ restore();
543
+ }
544
+ };
545
+ return true;
546
+ }`
547
+ });
548
+ return res.json({ ok: true });
549
+ }
550
+ const pw = await requirePwAi(res, "dialog hook");
551
+ if (!pw) return;
552
+ await pw.armDialogViaPlaywright({
553
+ cdpUrl,
554
+ targetId: tab.targetId,
555
+ dialogId,
556
+ accept,
557
+ promptText,
558
+ timeoutMs: timeoutMs ?? void 0
559
+ });
560
+ res.json({ ok: true });
561
+ }
562
+ });
563
+ }));
564
+ }
565
+ //#endregion
566
+ //#region extensions/browser/src/browser/routes/agent.act.shared.ts
567
+ const ACT_KINDS = [
568
+ "batch",
569
+ "click",
570
+ "clickCoords",
571
+ "close",
572
+ "drag",
573
+ "evaluate",
574
+ "fill",
575
+ "hover",
576
+ "scrollIntoView",
577
+ "press",
578
+ "resize",
579
+ "select",
580
+ "type",
581
+ "wait"
582
+ ];
583
+ function isActKind(value) {
584
+ if (typeof value !== "string") return false;
585
+ return ACT_KINDS.includes(value);
586
+ }
587
+ const ALLOWED_CLICK_MODIFIERS = new Set([
588
+ "Alt",
589
+ "Control",
590
+ "ControlOrMeta",
591
+ "Meta",
592
+ "Shift"
593
+ ]);
594
+ function parseClickButton(raw) {
595
+ if (raw === "left" || raw === "right" || raw === "middle") return raw;
596
+ }
597
+ function parseClickModifiers(raw) {
598
+ if (raw.filter((m) => !ALLOWED_CLICK_MODIFIERS.has(m)).length) return { error: "modifiers must be Alt|Control|ControlOrMeta|Meta|Shift" };
599
+ return { modifiers: raw.length ? raw : void 0 };
600
+ }
601
+ //#endregion
602
+ //#region extensions/browser/src/browser/routes/agent.act.normalize.ts
603
+ function normalizeActKind(raw) {
604
+ const kind = toStringOrEmpty(raw);
605
+ if (!isActKind(kind)) throw new Error("kind 是必需的");
606
+ return kind;
607
+ }
608
+ function countBatchActions(actions) {
609
+ let count = 0;
610
+ for (const action of actions) {
611
+ count += 1;
612
+ if (action.kind === "batch") count += countBatchActions(action.actions);
613
+ }
614
+ return count;
615
+ }
616
+ function validateBatchTargetIds(actions, targetId) {
617
+ for (const action of actions) {
618
+ if (action.targetId && action.targetId !== targetId) return "batched action targetId must match request targetId";
619
+ if (action.kind === "batch") {
620
+ const nestedError = validateBatchTargetIds(action.actions, targetId);
621
+ if (nestedError) return nestedError;
622
+ }
623
+ }
624
+ return null;
625
+ }
626
+ function normalizeFields(rawFields) {
627
+ return (Array.isArray(rawFields) ? rawFields : []).map((field) => {
628
+ if (!field || typeof field !== "object") return null;
629
+ return normalizeBrowserFormField(field);
630
+ }).filter((field) => field !== null);
631
+ }
632
+ function normalizeBatchAction(value) {
633
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error("batch actions 必须是对象");
634
+ return normalizeActRequest(value, { source: "batch" });
635
+ }
636
+ function readActionNonNegativeInteger(body, key) {
637
+ return readRouteNonNegativeInteger(body[key], key);
638
+ }
639
+ function readActionTimeoutMs(body) {
640
+ return readRouteTimerTimeoutMs(body.timeoutMs);
641
+ }
642
+ function readBoundedActionDurationMs(body, key, fieldName, maxMs) {
643
+ return normalizeActBoundedNonNegativeMs(readActionNonNegativeInteger(body, key), fieldName, maxMs);
644
+ }
645
+ function readResizeDimension(body, key) {
646
+ const value = readRouteInteger(body[key], key, { invalidMessage: "resize requires positive width and height" });
647
+ if (value === void 0 && Object.hasOwn(body, key)) throw new Error("resize 需要正数的宽度和高度");
648
+ return value;
649
+ }
650
+ function normalizeActRequest(body, options) {
651
+ const source = options?.source ?? "request";
652
+ const kind = normalizeActKind(body.kind);
653
+ switch (kind) {
654
+ case "click": {
655
+ const ref = toStringOrEmpty(body.ref) || void 0;
656
+ const selector = toStringOrEmpty(body.selector) || void 0;
657
+ if (!ref && !selector) throw new Error("click 需要 ref 或 selector");
658
+ const buttonRaw = toStringOrEmpty(body.button);
659
+ const button = buttonRaw ? parseClickButton(buttonRaw) : void 0;
660
+ if (buttonRaw && !button) throw new Error("click button 必须是 left、right 或 middle");
661
+ const parsedModifiers = parseClickModifiers(toStringArray(body.modifiers) ?? []);
662
+ if (parsedModifiers.error) throw new Error(parsedModifiers.error);
663
+ const doubleClick = toBoolean(body.doubleClick);
664
+ const delayMs = readBoundedActionDurationMs(body, "delayMs", "click delayMs", ACT_MAX_CLICK_DELAY_MS);
665
+ const timeoutMs = readActionTimeoutMs(body);
666
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
667
+ return {
668
+ kind,
669
+ ...ref ? { ref } : {},
670
+ ...selector ? { selector } : {},
671
+ ...targetId ? { targetId } : {},
672
+ ...doubleClick !== void 0 ? { doubleClick } : {},
673
+ ...button ? { button } : {},
674
+ ...parsedModifiers.modifiers ? { modifiers: parsedModifiers.modifiers } : {},
675
+ ...delayMs !== void 0 ? { delayMs } : {},
676
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
677
+ };
678
+ }
679
+ case "clickCoords": {
680
+ const x = toNumber(body.x);
681
+ const y = toNumber(body.y);
682
+ if (x === void 0 || y === void 0 || x < 0 || y < 0) throw new Error("clickCoords 需要非负的 x 和 y");
683
+ const buttonRaw = toStringOrEmpty(body.button);
684
+ const button = buttonRaw ? parseClickButton(buttonRaw) : void 0;
685
+ if (buttonRaw && !button) throw new Error("clickCoords button 必须是 left、right 或 middle");
686
+ const doubleClick = toBoolean(body.doubleClick);
687
+ const delayMs = readBoundedActionDurationMs(body, "delayMs", "clickCoords delayMs", ACT_MAX_CLICK_DELAY_MS);
688
+ const timeoutMs = readActionTimeoutMs(body);
689
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
690
+ return {
691
+ kind,
692
+ x,
693
+ y,
694
+ ...targetId ? { targetId } : {},
695
+ ...doubleClick !== void 0 ? { doubleClick } : {},
696
+ ...button ? { button } : {},
697
+ ...delayMs !== void 0 ? { delayMs } : {},
698
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
699
+ };
700
+ }
701
+ case "type": {
702
+ const ref = toStringOrEmpty(body.ref) || void 0;
703
+ const selector = toStringOrEmpty(body.selector) || void 0;
704
+ const text = body.text;
705
+ if (!ref && !selector) throw new Error("type 需要 ref 或 selector");
706
+ if (typeof text !== "string") throw new Error("type 需要 text 参数");
707
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
708
+ const submit = toBoolean(body.submit);
709
+ const slowly = toBoolean(body.slowly);
710
+ const timeoutMs = readActionTimeoutMs(body);
711
+ return {
712
+ kind,
713
+ ...ref ? { ref } : {},
714
+ ...selector ? { selector } : {},
715
+ text,
716
+ ...targetId ? { targetId } : {},
717
+ ...submit !== void 0 ? { submit } : {},
718
+ ...slowly !== void 0 ? { slowly } : {},
719
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
720
+ };
721
+ }
722
+ case "press": {
723
+ const key = toStringOrEmpty(body.key);
724
+ if (!key) throw new Error("press 需要 key 参数");
725
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
726
+ const delayMs = readActionNonNegativeInteger(body, "delayMs");
727
+ return {
728
+ kind,
729
+ key,
730
+ ...targetId ? { targetId } : {},
731
+ ...delayMs !== void 0 ? { delayMs } : {}
732
+ };
733
+ }
734
+ case "hover":
735
+ case "scrollIntoView": {
736
+ const ref = toStringOrEmpty(body.ref) || void 0;
737
+ const selector = toStringOrEmpty(body.selector) || void 0;
738
+ if (!ref && !selector) throw new Error(`${kind} requires ref or selector`);
739
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
740
+ const timeoutMs = readActionTimeoutMs(body);
741
+ return {
742
+ kind,
743
+ ...ref ? { ref } : {},
744
+ ...selector ? { selector } : {},
745
+ ...targetId ? { targetId } : {},
746
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
747
+ };
748
+ }
749
+ case "drag": {
750
+ const startRef = toStringOrEmpty(body.startRef) || void 0;
751
+ const startSelector = toStringOrEmpty(body.startSelector) || void 0;
752
+ const endRef = toStringOrEmpty(body.endRef) || void 0;
753
+ const endSelector = toStringOrEmpty(body.endSelector) || void 0;
754
+ if (!startRef && !startSelector) throw new Error("drag 需要 startRef 或 startSelector");
755
+ if (!endRef && !endSelector) throw new Error("drag 需要 endRef 或 endSelector");
756
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
757
+ const timeoutMs = readActionTimeoutMs(body);
758
+ return {
759
+ kind,
760
+ ...startRef ? { startRef } : {},
761
+ ...startSelector ? { startSelector } : {},
762
+ ...endRef ? { endRef } : {},
763
+ ...endSelector ? { endSelector } : {},
764
+ ...targetId ? { targetId } : {},
765
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
766
+ };
767
+ }
768
+ case "select": {
769
+ const ref = toStringOrEmpty(body.ref) || void 0;
770
+ const selector = toStringOrEmpty(body.selector) || void 0;
771
+ const values = toStringArray(body.values);
772
+ if (!ref && !selector || !values?.length) throw new Error("select 需要 ref/selector 和 values");
773
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
774
+ const timeoutMs = readActionTimeoutMs(body);
775
+ return {
776
+ kind,
777
+ ...ref ? { ref } : {},
778
+ ...selector ? { selector } : {},
779
+ values,
780
+ ...targetId ? { targetId } : {},
781
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
782
+ };
783
+ }
784
+ case "fill": {
785
+ const fields = normalizeFields(body.fields);
786
+ if (!fields.length) throw new Error("fill 需要 fields 参数");
787
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
788
+ const timeoutMs = readActionTimeoutMs(body);
789
+ return {
790
+ kind,
791
+ fields,
792
+ ...targetId ? { targetId } : {},
793
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
794
+ };
795
+ }
796
+ case "resize": {
797
+ const width = readResizeDimension(body, "width");
798
+ const height = readResizeDimension(body, "height");
799
+ if (width === void 0 || height === void 0 || width <= 0 || height <= 0) throw new Error("resize 需要正数的宽度和高度");
800
+ if (width > 8192 || height > 8192) throw new Error(`resize width and height must not exceed ${ACT_MAX_VIEWPORT_DIMENSION}`);
801
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
802
+ return {
803
+ kind,
804
+ width,
805
+ height,
806
+ ...targetId ? { targetId } : {}
807
+ };
808
+ }
809
+ case "wait": {
810
+ const loadStateRaw = toStringOrEmpty(body.loadState);
811
+ const loadState = loadStateRaw === "load" || loadStateRaw === "domcontentloaded" || loadStateRaw === "networkidle" ? loadStateRaw : void 0;
812
+ const timeMs = readBoundedActionDurationMs(body, "timeMs", "wait timeMs", ACT_MAX_WAIT_TIME_MS);
813
+ const text = toStringOrEmpty(body.text) || void 0;
814
+ const textGone = toStringOrEmpty(body.textGone) || void 0;
815
+ const selector = toStringOrEmpty(body.selector) || void 0;
816
+ const url = toStringOrEmpty(body.url) || void 0;
817
+ const fn = toStringOrEmpty(body.fn) || void 0;
818
+ if (timeMs === void 0 && !text && !textGone && !selector && !url && !loadState && !fn) throw new Error("wait requires at least one of: timeMs, text, textGone, selector, url, loadState, fn");
819
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
820
+ const timeoutMs = readActionTimeoutMs(body);
821
+ return {
822
+ kind,
823
+ ...timeMs !== void 0 ? { timeMs } : {},
824
+ ...text ? { text } : {},
825
+ ...textGone ? { textGone } : {},
826
+ ...selector ? { selector } : {},
827
+ ...url ? { url } : {},
828
+ ...loadState ? { loadState } : {},
829
+ ...fn ? { fn } : {},
830
+ ...targetId ? { targetId } : {},
831
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
832
+ };
833
+ }
834
+ case "evaluate": {
835
+ const fn = toStringOrEmpty(body.fn);
836
+ if (!fn) throw new Error("evaluate 需要 fn 参数");
837
+ const ref = toStringOrEmpty(body.ref) || void 0;
838
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
839
+ const timeoutMs = readActionTimeoutMs(body);
840
+ return {
841
+ kind,
842
+ fn,
843
+ ...ref ? { ref } : {},
844
+ ...targetId ? { targetId } : {},
845
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
846
+ };
847
+ }
848
+ case "close": {
849
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
850
+ return {
851
+ kind,
852
+ ...targetId ? { targetId } : {}
853
+ };
854
+ }
855
+ case "batch": {
856
+ const actions = Array.isArray(body.actions) ? body.actions.map(normalizeBatchAction) : [];
857
+ if (!actions.length) throw new Error(source === "batch" ? "batch requires actions" : "actions are required");
858
+ if (countBatchActions(actions) > 100) throw new Error(`batch exceeds maximum of 100 actions`);
859
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
860
+ const stopOnError = toBoolean(body.stopOnError);
861
+ return {
862
+ kind,
863
+ actions,
864
+ ...targetId ? { targetId } : {},
865
+ ...stopOnError !== void 0 ? { stopOnError } : {}
866
+ };
867
+ }
868
+ }
869
+ throw new Error("不支持的浏览器操作类型");
870
+ }
871
+ //#endregion
872
+ //#region extensions/browser/src/browser/routes/agent.snapshot-target.ts
873
+ /** Resolve the correct targetId after a navigation that may trigger a renderer swap. */
874
+ async function resolveTargetIdAfterNavigate(opts) {
875
+ let currentTargetId = opts.oldTargetId;
876
+ try {
877
+ const pickReplacement = (tabs, options) => {
878
+ if (tabs.some((tab) => tab.targetId === opts.oldTargetId)) return {
879
+ targetId: opts.oldTargetId,
880
+ shouldRetry: false
881
+ };
882
+ const byUrl = tabs.filter((tab) => tab.url === opts.navigatedUrl);
883
+ if (byUrl.length === 1) return {
884
+ targetId: byUrl[0]?.targetId ?? opts.oldTargetId,
885
+ shouldRetry: false
886
+ };
887
+ const uniqueReplacement = byUrl.filter((tab) => tab.targetId !== opts.oldTargetId);
888
+ if (uniqueReplacement.length === 1) return {
889
+ targetId: uniqueReplacement[0]?.targetId ?? opts.oldTargetId,
890
+ shouldRetry: false
891
+ };
892
+ if (options?.allowSingleTabFallback && tabs.length === 1) return {
893
+ targetId: tabs[0]?.targetId ?? opts.oldTargetId,
894
+ shouldRetry: false
895
+ };
896
+ return {
897
+ targetId: opts.oldTargetId,
898
+ shouldRetry: true
899
+ };
900
+ };
901
+ const first = pickReplacement(await opts.listTabs());
902
+ currentTargetId = first.targetId;
903
+ if (first.shouldRetry) {
904
+ await new Promise((r) => setTimeout(r, opts.retryDelayMs ?? 800));
905
+ currentTargetId = pickReplacement(await opts.listTabs(), { allowSingleTabFallback: true }).targetId;
906
+ }
907
+ } catch {}
908
+ return currentTargetId;
909
+ }
910
+ //#endregion
911
+ //#region extensions/browser/src/browser/routes/agent.act.ts
912
+ function sleep(ms) {
913
+ return new Promise((resolve) => setTimeout(resolve, ms));
914
+ }
915
+ const EXISTING_SESSION_INTERACTION_NAVIGATION_RECHECK_DELAYS_MS = [
916
+ 0,
917
+ 250,
918
+ 500
919
+ ];
920
+ async function readExistingSessionLocationHref(params) {
921
+ const currentUrl = await evaluateChromeMcpScript({
922
+ profileName: params.profileName,
923
+ profile: params.profile,
924
+ userDataDir: params.userDataDir,
925
+ targetId: params.targetId,
926
+ fn: "() => window.location.href"
927
+ });
928
+ if (typeof currentUrl !== "string") throw new Error("位置探测返回了非字符串结果");
929
+ const normalizedUrl = currentUrl.trim();
930
+ if (!normalizedUrl) throw new Error("位置探测返回了空 URL");
931
+ return normalizedUrl;
932
+ }
933
+ async function assertExistingSessionPostInteractionNavigationAllowed(params) {
934
+ const ssrfPolicyOpts = withBrowserNavigationPolicy(params.ssrfPolicy);
935
+ if (!ssrfPolicyOpts.ssrfPolicy) return;
936
+ const listTabs = params.listTabs;
937
+ const initialTabTargetIds = params.initialTabTargetIds;
938
+ const assertNewTabsAllowed = async () => {
939
+ const tabs = await listTabs();
940
+ for (const tab of tabs) {
941
+ if (initialTabTargetIds.has(tab.targetId)) continue;
942
+ await assertBrowserNavigationResultAllowed({
943
+ url: tab.url,
944
+ ...ssrfPolicyOpts
945
+ });
946
+ }
947
+ };
948
+ let lastObservedUrl;
949
+ let sawStableAllowedUrl = false;
950
+ for (const delayMs of EXISTING_SESSION_INTERACTION_NAVIGATION_RECHECK_DELAYS_MS) {
951
+ if (delayMs > 0) await sleep(delayMs);
952
+ let currentUrl;
953
+ try {
954
+ currentUrl = await readExistingSessionLocationHref(params);
955
+ } catch {
956
+ sawStableAllowedUrl = false;
957
+ continue;
958
+ }
959
+ await assertBrowserNavigationResultAllowed({
960
+ url: currentUrl,
961
+ ...ssrfPolicyOpts
962
+ });
963
+ if (currentUrl === lastObservedUrl) sawStableAllowedUrl = true;
964
+ else sawStableAllowedUrl = false;
965
+ lastObservedUrl = currentUrl;
966
+ }
967
+ if (sawStableAllowedUrl) {
968
+ await assertNewTabsAllowed();
969
+ return;
970
+ }
971
+ if (lastObservedUrl) {
972
+ const lastDelay = EXISTING_SESSION_INTERACTION_NAVIGATION_RECHECK_DELAYS_MS[EXISTING_SESSION_INTERACTION_NAVIGATION_RECHECK_DELAYS_MS.length - 1];
973
+ await sleep(lastDelay);
974
+ try {
975
+ const followUpUrl = await readExistingSessionLocationHref(params);
976
+ await assertBrowserNavigationResultAllowed({
977
+ url: followUpUrl,
978
+ ...ssrfPolicyOpts
979
+ });
980
+ if (followUpUrl === lastObservedUrl) {
981
+ await assertNewTabsAllowed();
982
+ return;
983
+ }
984
+ } catch {}
985
+ }
986
+ throw new Error("Unable to verify stable post-interaction navigation");
987
+ }
988
+ async function runExistingSessionActionWithNavigationGuard(params) {
989
+ let actionError;
990
+ let result;
991
+ try {
992
+ result = await params.execute();
993
+ } catch (error) {
994
+ actionError = error;
995
+ }
996
+ if (params.guard) await assertExistingSessionPostInteractionNavigationAllowed(params.guard);
997
+ if (actionError) throw actionError;
998
+ return result;
999
+ }
1000
+ function buildExistingSessionWaitPredicate(params) {
1001
+ const checks = [];
1002
+ if (params.text) checks.push(`Boolean(document.body?.innerText?.includes(${JSON.stringify(params.text)}))`);
1003
+ if (params.textGone) checks.push(`!document.body?.innerText?.includes(${JSON.stringify(params.textGone)})`);
1004
+ if (params.selector) checks.push(`Boolean(document.querySelector(${JSON.stringify(params.selector)}))`);
1005
+ if (params.loadState === "domcontentloaded") checks.push(`document.readyState === "interactive" || document.readyState === "complete"`);
1006
+ else if (params.loadState === "load") checks.push(`document.readyState === "complete"`);
1007
+ if (params.fn) checks.push(`Boolean(await (${params.fn})())`);
1008
+ if (checks.length === 0) return null;
1009
+ return checks.length === 1 ? checks[0] : checks.map((check) => `(${check})`).join(" && ");
1010
+ }
1011
+ async function waitForExistingSessionCondition(params) {
1012
+ if (params.timeMs && params.timeMs > 0) await sleep(params.timeMs);
1013
+ const predicate = buildExistingSessionWaitPredicate(params);
1014
+ if (!predicate && !params.url) return;
1015
+ const timeoutMs = Math.max(250, params.timeoutMs ?? 1e4);
1016
+ const deadline = Date.now() + timeoutMs;
1017
+ while (Date.now() < deadline) {
1018
+ let ready = true;
1019
+ if (predicate) ready = Boolean(await evaluateChromeMcpScript({
1020
+ profileName: params.profileName,
1021
+ profile: params.profile,
1022
+ userDataDir: params.userDataDir,
1023
+ targetId: params.targetId,
1024
+ fn: `async () => ${predicate}`
1025
+ }));
1026
+ if (ready && params.url) {
1027
+ const currentUrl = await evaluateChromeMcpScript({
1028
+ profileName: params.profileName,
1029
+ profile: params.profile,
1030
+ userDataDir: params.userDataDir,
1031
+ targetId: params.targetId,
1032
+ fn: "() => window.location.href"
1033
+ });
1034
+ ready = typeof currentUrl === "string" && matchBrowserUrlPattern(params.url, currentUrl);
1035
+ }
1036
+ if (ready) return;
1037
+ await sleep(250);
1038
+ }
1039
+ throw new Error("等待条件超时");
1040
+ }
1041
+ const SELECTOR_ALLOWED_KINDS = new Set([
1042
+ "batch",
1043
+ "click",
1044
+ "drag",
1045
+ "hover",
1046
+ "scrollIntoView",
1047
+ "select",
1048
+ "type",
1049
+ "wait"
1050
+ ]);
1051
+ function shouldEnforceCurrentUrlForAct(action) {
1052
+ return action.kind !== "resize" && action.kind !== "close";
1053
+ }
1054
+ function getExistingSessionUnsupportedMessage(action) {
1055
+ switch (action.kind) {
1056
+ case "click":
1057
+ if (action.selector) return EXISTING_SESSION_LIMITS.act.clickSelector;
1058
+ if (action.button && action.button !== "left" || Array.isArray(action.modifiers) && action.modifiers.length > 0) return EXISTING_SESSION_LIMITS.act.clickButtonOrModifiers;
1059
+ return null;
1060
+ case "clickCoords": return null;
1061
+ case "type":
1062
+ if (action.selector) return EXISTING_SESSION_LIMITS.act.typeSelector;
1063
+ if (action.slowly) return EXISTING_SESSION_LIMITS.act.typeSlowly;
1064
+ return action.timeoutMs ? EXISTING_SESSION_LIMITS.act.typeTimeout : null;
1065
+ case "press": return action.delayMs ? EXISTING_SESSION_LIMITS.act.pressDelay : null;
1066
+ case "hover":
1067
+ if (action.selector) return EXISTING_SESSION_LIMITS.act.hoverSelector;
1068
+ return action.timeoutMs ? EXISTING_SESSION_LIMITS.act.hoverTimeout : null;
1069
+ case "scrollIntoView":
1070
+ if (action.selector) return EXISTING_SESSION_LIMITS.act.scrollSelector;
1071
+ return action.timeoutMs ? EXISTING_SESSION_LIMITS.act.scrollTimeout : null;
1072
+ case "drag":
1073
+ if (action.startSelector || action.endSelector) return EXISTING_SESSION_LIMITS.act.dragSelector;
1074
+ return action.timeoutMs ? EXISTING_SESSION_LIMITS.act.dragTimeout : null;
1075
+ case "select":
1076
+ if (action.selector) return EXISTING_SESSION_LIMITS.act.selectSelector;
1077
+ if (action.values.length !== 1) return EXISTING_SESSION_LIMITS.act.selectSingleValue;
1078
+ return action.timeoutMs ? EXISTING_SESSION_LIMITS.act.selectTimeout : null;
1079
+ case "fill": return action.timeoutMs ? EXISTING_SESSION_LIMITS.act.fillTimeout : null;
1080
+ case "wait": return action.loadState === "networkidle" ? EXISTING_SESSION_LIMITS.act.waitNetworkIdle : null;
1081
+ case "evaluate": return action.timeoutMs !== void 0 ? EXISTING_SESSION_LIMITS.act.evaluateTimeout : null;
1082
+ case "batch": return EXISTING_SESSION_LIMITS.act.batch;
1083
+ case "resize":
1084
+ case "close": return null;
1085
+ }
1086
+ throw new Error("不支持的浏览器操作类型");
1087
+ }
1088
+ function registerBrowserAgentActRoutes(app, ctx) {
1089
+ app.post("/act", asyncBrowserRoute(async (req, res) => {
1090
+ const body = readBody(req);
1091
+ const kindRaw = toStringOrEmpty(body.kind);
1092
+ if (!isActKind(kindRaw)) return jsonActError(res, 400, ACT_ERROR_CODES.kindRequired, "kind is required");
1093
+ const kind = kindRaw;
1094
+ let action;
1095
+ try {
1096
+ action = normalizeActRequest(body);
1097
+ } catch (err) {
1098
+ return jsonActError(res, 400, ACT_ERROR_CODES.invalidRequest, formatErrorMessage(err));
1099
+ }
1100
+ const targetId = resolveTargetIdFromBody(body);
1101
+ if (Object.hasOwn(body, "selector") && !SELECTOR_ALLOWED_KINDS.has(kind)) return jsonActError(res, 400, ACT_ERROR_CODES.selectorUnsupported, SELECTOR_UNSUPPORTED_MESSAGE);
1102
+ const earlyFn = action.kind === "wait" || action.kind === "evaluate" ? action.fn : "";
1103
+ if ((action.kind === "evaluate" || action.kind === "wait" && earlyFn) && !ctx.state().resolved.evaluateEnabled) return jsonActError(res, 403, ACT_ERROR_CODES.evaluateDisabled, browserEvaluateDisabledMessage(action.kind === "evaluate" ? "evaluate" : "wait"));
1104
+ await withRouteTabContext({
1105
+ req,
1106
+ res,
1107
+ ctx,
1108
+ targetId,
1109
+ enforceCurrentUrlAllowed: shouldEnforceCurrentUrlForAct(action),
1110
+ run: async ({ profileCtx, cdpUrl, tab, resolveTabUrl }) => {
1111
+ const evaluateEnabled = ctx.state().resolved.evaluateEnabled;
1112
+ const ssrfPolicy = ctx.state().resolved.ssrfPolicy;
1113
+ const isExistingSession = getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp;
1114
+ const hasNavigationResultPolicy = Boolean(withBrowserNavigationPolicy(ssrfPolicy).ssrfPolicy);
1115
+ const jsonOk = async (extra, options) => {
1116
+ const responseTargetId = options?.resolveCurrentTarget && (!isExistingSession || hasNavigationResultPolicy) ? await resolveTargetIdAfterNavigate({
1117
+ oldTargetId: tab.targetId,
1118
+ navigatedUrl: tab.url,
1119
+ listTabs: () => profileCtx.listTabs()
1120
+ }) : tab.targetId;
1121
+ const url = responseTargetId === tab.targetId ? await resolveTabUrl(tab.url) : await resolveSafeRouteTabUrl({
1122
+ ctx,
1123
+ profileCtx,
1124
+ targetId: responseTargetId,
1125
+ fallbackUrl: tab.url
1126
+ });
1127
+ return res.json({
1128
+ ok: true,
1129
+ targetId: responseTargetId,
1130
+ ...url ? { url } : {},
1131
+ ...extra
1132
+ });
1133
+ };
1134
+ if (action.targetId && action.targetId !== tab.targetId) return jsonActError(res, 403, ACT_ERROR_CODES.targetIdMismatch, "action targetId must match request targetId");
1135
+ const profileName = profileCtx.profile.name;
1136
+ if (isExistingSession) {
1137
+ const initialTabTargetIds = hasNavigationResultPolicy ? new Set((await profileCtx.listTabs()).map((currentTab) => currentTab.targetId)) : /* @__PURE__ */ new Set();
1138
+ const existingSessionNavigationGuard = {
1139
+ profileName,
1140
+ profile: profileCtx.profile,
1141
+ targetId: tab.targetId,
1142
+ ssrfPolicy,
1143
+ listTabs: () => profileCtx.listTabs(),
1144
+ initialTabTargetIds
1145
+ };
1146
+ const unsupportedMessage = getExistingSessionUnsupportedMessage(action);
1147
+ if (unsupportedMessage) return jsonActError(res, 501, ACT_ERROR_CODES.unsupportedForExistingSession, unsupportedMessage);
1148
+ switch (action.kind) {
1149
+ case "click":
1150
+ await runExistingSessionActionWithNavigationGuard({
1151
+ execute: () => clickChromeMcpElement({
1152
+ profileName,
1153
+ profile: profileCtx.profile,
1154
+ targetId: tab.targetId,
1155
+ uid: action.ref,
1156
+ doubleClick: action.doubleClick ?? false,
1157
+ timeoutMs: action.timeoutMs,
1158
+ signal: req.signal
1159
+ }),
1160
+ guard: existingSessionNavigationGuard
1161
+ });
1162
+ return await jsonOk(void 0, { resolveCurrentTarget: true });
1163
+ case "clickCoords":
1164
+ await runExistingSessionActionWithNavigationGuard({
1165
+ execute: () => clickChromeMcpCoords({
1166
+ profileName,
1167
+ profile: profileCtx.profile,
1168
+ targetId: tab.targetId,
1169
+ x: action.x,
1170
+ y: action.y,
1171
+ doubleClick: action.doubleClick ?? false,
1172
+ button: action.button,
1173
+ delayMs: action.delayMs
1174
+ }),
1175
+ guard: existingSessionNavigationGuard
1176
+ });
1177
+ return await jsonOk(void 0, { resolveCurrentTarget: true });
1178
+ case "type":
1179
+ await runExistingSessionActionWithNavigationGuard({
1180
+ execute: async () => {
1181
+ await fillChromeMcpElement({
1182
+ profileName,
1183
+ profile: profileCtx.profile,
1184
+ targetId: tab.targetId,
1185
+ uid: action.ref,
1186
+ value: action.text
1187
+ });
1188
+ if (action.submit) await pressChromeMcpKey({
1189
+ profileName,
1190
+ profile: profileCtx.profile,
1191
+ targetId: tab.targetId,
1192
+ key: "Enter"
1193
+ });
1194
+ },
1195
+ guard: existingSessionNavigationGuard
1196
+ });
1197
+ return await jsonOk(void 0, { resolveCurrentTarget: true });
1198
+ case "press":
1199
+ await runExistingSessionActionWithNavigationGuard({
1200
+ execute: () => pressChromeMcpKey({
1201
+ profileName,
1202
+ profile: profileCtx.profile,
1203
+ targetId: tab.targetId,
1204
+ key: action.key
1205
+ }),
1206
+ guard: existingSessionNavigationGuard
1207
+ });
1208
+ return await jsonOk(void 0, { resolveCurrentTarget: true });
1209
+ case "hover":
1210
+ await runExistingSessionActionWithNavigationGuard({
1211
+ execute: () => hoverChromeMcpElement({
1212
+ profileName,
1213
+ profile: profileCtx.profile,
1214
+ targetId: tab.targetId,
1215
+ uid: action.ref
1216
+ }),
1217
+ guard: existingSessionNavigationGuard
1218
+ });
1219
+ return await jsonOk();
1220
+ case "scrollIntoView":
1221
+ await runExistingSessionActionWithNavigationGuard({
1222
+ execute: () => evaluateChromeMcpScript({
1223
+ profileName,
1224
+ profile: profileCtx.profile,
1225
+ targetId: tab.targetId,
1226
+ fn: `(el) => { el.scrollIntoView({ block: "center", inline: "center" }); return true; }`,
1227
+ args: [action.ref]
1228
+ }),
1229
+ guard: existingSessionNavigationGuard
1230
+ });
1231
+ return await jsonOk();
1232
+ case "drag":
1233
+ await runExistingSessionActionWithNavigationGuard({
1234
+ execute: () => dragChromeMcpElement({
1235
+ profileName,
1236
+ profile: profileCtx.profile,
1237
+ targetId: tab.targetId,
1238
+ fromUid: action.startRef,
1239
+ toUid: action.endRef
1240
+ }),
1241
+ guard: existingSessionNavigationGuard
1242
+ });
1243
+ return await jsonOk();
1244
+ case "select":
1245
+ await runExistingSessionActionWithNavigationGuard({
1246
+ execute: () => fillChromeMcpElement({
1247
+ profileName,
1248
+ profile: profileCtx.profile,
1249
+ targetId: tab.targetId,
1250
+ uid: action.ref,
1251
+ value: action.values[0] ?? ""
1252
+ }),
1253
+ guard: existingSessionNavigationGuard
1254
+ });
1255
+ return await jsonOk();
1256
+ case "fill":
1257
+ await runExistingSessionActionWithNavigationGuard({
1258
+ execute: () => fillChromeMcpForm({
1259
+ profileName,
1260
+ profile: profileCtx.profile,
1261
+ targetId: tab.targetId,
1262
+ elements: action.fields.map((field) => ({
1263
+ uid: field.ref,
1264
+ value: String(field.value ?? "")
1265
+ }))
1266
+ }),
1267
+ guard: existingSessionNavigationGuard
1268
+ });
1269
+ return await jsonOk();
1270
+ case "resize":
1271
+ await resizeChromeMcpPage({
1272
+ profileName,
1273
+ profile: profileCtx.profile,
1274
+ targetId: tab.targetId,
1275
+ width: action.width,
1276
+ height: action.height
1277
+ });
1278
+ return await jsonOk();
1279
+ case "wait":
1280
+ await waitForExistingSessionCondition({
1281
+ profileName,
1282
+ profile: profileCtx.profile,
1283
+ targetId: tab.targetId,
1284
+ timeMs: action.timeMs,
1285
+ text: action.text,
1286
+ textGone: action.textGone,
1287
+ selector: action.selector,
1288
+ url: action.url,
1289
+ loadState: action.loadState,
1290
+ fn: action.fn,
1291
+ timeoutMs: action.timeoutMs
1292
+ });
1293
+ return await jsonOk();
1294
+ case "evaluate": return await jsonOk({ result: await runExistingSessionActionWithNavigationGuard({
1295
+ execute: () => evaluateChromeMcpScript({
1296
+ profileName,
1297
+ profile: profileCtx.profile,
1298
+ targetId: tab.targetId,
1299
+ fn: action.fn,
1300
+ args: action.ref ? [action.ref] : void 0
1301
+ }),
1302
+ guard: existingSessionNavigationGuard
1303
+ }) });
1304
+ case "close":
1305
+ await closeChromeMcpTab(profileName, tab.targetId, profileCtx.profile);
1306
+ return await jsonOk();
1307
+ case "batch": return jsonActError(res, 501, ACT_ERROR_CODES.unsupportedForExistingSession, EXISTING_SESSION_LIMITS.act.batch);
1308
+ }
1309
+ }
1310
+ const pw = await requirePwAi(res, `act:${kind}`);
1311
+ if (!pw) return;
1312
+ if (action.kind === "batch") {
1313
+ const targetIdError = validateBatchTargetIds(action.actions, tab.targetId);
1314
+ if (targetIdError) return jsonActError(res, 403, ACT_ERROR_CODES.targetIdMismatch, targetIdError);
1315
+ }
1316
+ const result = await pw.executeActViaPlaywright({
1317
+ cdpUrl,
1318
+ action,
1319
+ targetId: tab.targetId,
1320
+ evaluateEnabled,
1321
+ ssrfPolicy,
1322
+ signal: req.signal
1323
+ });
1324
+ if (result.blockedByDialog) return await jsonOk({
1325
+ blockedByDialog: true,
1326
+ browserState: result.browserState
1327
+ });
1328
+ switch (action.kind) {
1329
+ case "batch": return await jsonOk({ results: result.results ?? [] }, { resolveCurrentTarget: true });
1330
+ case "evaluate": return await jsonOk({ result: result.result }, { resolveCurrentTarget: true });
1331
+ case "click":
1332
+ case "clickCoords": return await jsonOk(void 0, { resolveCurrentTarget: true });
1333
+ case "resize": return await jsonOk();
1334
+ default: return await jsonOk(void 0, { resolveCurrentTarget: true });
1335
+ }
1336
+ }
1337
+ });
1338
+ }));
1339
+ registerBrowserAgentActHookRoutes(app, ctx);
1340
+ registerBrowserAgentActDownloadRoutes(app, ctx);
1341
+ app.post("/response/body", asyncBrowserRoute(async (req, res) => {
1342
+ const body = readBody(req);
1343
+ const targetId = resolveTargetIdFromBody(body);
1344
+ const url = toStringOrEmpty(body.url);
1345
+ let timeoutMs;
1346
+ let maxChars;
1347
+ try {
1348
+ timeoutMs = readRouteTimerTimeoutMs(body.timeoutMs);
1349
+ maxChars = readRoutePositiveInteger(body.maxChars, "maxChars");
1350
+ } catch (err) {
1351
+ return jsonError(res, 400, formatErrorMessage(err));
1352
+ }
1353
+ if (!url) return jsonError(res, 400, "url is required");
1354
+ await withRouteTabContext({
1355
+ req,
1356
+ res,
1357
+ ctx,
1358
+ targetId,
1359
+ enforceCurrentUrlAllowed: true,
1360
+ run: async ({ profileCtx, cdpUrl, tab, resolveTabUrl }) => {
1361
+ if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) return jsonError(res, 501, EXISTING_SESSION_LIMITS.responseBody);
1362
+ const pw = await requirePwAi(res, "response body");
1363
+ if (!pw) return;
1364
+ const result = await pw.responseBodyViaPlaywright({
1365
+ cdpUrl,
1366
+ targetId: tab.targetId,
1367
+ url,
1368
+ timeoutMs: timeoutMs ?? void 0,
1369
+ maxChars: maxChars ?? void 0
1370
+ });
1371
+ const currentUrl = await resolveTabUrl(tab.url);
1372
+ res.json({
1373
+ ok: true,
1374
+ targetId: tab.targetId,
1375
+ ...currentUrl ? { url: currentUrl } : {},
1376
+ response: result
1377
+ });
1378
+ }
1379
+ });
1380
+ }));
1381
+ app.post("/highlight", asyncBrowserRoute(async (req, res) => {
1382
+ const body = readBody(req);
1383
+ const targetId = resolveTargetIdFromBody(body);
1384
+ const ref = toStringOrEmpty(body.ref);
1385
+ if (!ref) return jsonError(res, 400, "ref is required");
1386
+ await withRouteTabContext({
1387
+ req,
1388
+ res,
1389
+ ctx,
1390
+ targetId,
1391
+ enforceCurrentUrlAllowed: true,
1392
+ run: async ({ profileCtx, cdpUrl, tab, resolveTabUrl }) => {
1393
+ const jsonOk = async () => {
1394
+ const currentUrl = await resolveTabUrl(tab.url);
1395
+ return res.json({
1396
+ ok: true,
1397
+ targetId: tab.targetId,
1398
+ ...currentUrl ? { url: currentUrl } : {}
1399
+ });
1400
+ };
1401
+ if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) {
1402
+ await evaluateChromeMcpScript({
1403
+ profileName: profileCtx.profile.name,
1404
+ profile: profileCtx.profile,
1405
+ targetId: tab.targetId,
1406
+ args: [ref],
1407
+ fn: `(el) => {
1408
+ if (!(el instanceof Element)) {
1409
+ return false;
1410
+ }
1411
+ el.scrollIntoView({ block: "center", inline: "center" });
1412
+ const previousOutline = el.style.outline;
1413
+ const previousOffset = el.style.outlineOffset;
1414
+ el.style.outline = "3px solid #FF4500";
1415
+ el.style.outlineOffset = "2px";
1416
+ setTimeout(() => {
1417
+ el.style.outline = previousOutline;
1418
+ el.style.outlineOffset = previousOffset;
1419
+ }, 2000);
1420
+ return true;
1421
+ }`
1422
+ });
1423
+ return await jsonOk();
1424
+ }
1425
+ const pw = await requirePwAi(res, "highlight");
1426
+ if (!pw) return;
1427
+ await pw.highlightViaPlaywright({
1428
+ cdpUrl,
1429
+ targetId: tab.targetId,
1430
+ ref
1431
+ });
1432
+ await jsonOk();
1433
+ }
1434
+ });
1435
+ }));
1436
+ }
1437
+ //#endregion
1438
+ //#region extensions/browser/src/browser/routes/agent.debug.ts
1439
+ function browserDebugTargetPayload(targetId, url) {
1440
+ return {
1441
+ ok: true,
1442
+ targetId,
1443
+ ...url ? { url } : {}
1444
+ };
1445
+ }
1446
+ async function sendPlaywrightDebugCollection(params) {
1447
+ await withPlaywrightRouteContext({
1448
+ req: params.req,
1449
+ res: params.res,
1450
+ ctx: params.ctx,
1451
+ targetId: params.targetId,
1452
+ feature: params.feature,
1453
+ enforceCurrentUrlAllowed: true,
1454
+ run: async ({ cdpUrl, tab, pw, resolveTabUrl }) => {
1455
+ const result = await params.collect({
1456
+ cdpUrl,
1457
+ targetId: tab.targetId,
1458
+ pw
1459
+ });
1460
+ const url = await resolveTabUrl(tab.url);
1461
+ params.res.json({
1462
+ ...browserDebugTargetPayload(tab.targetId, url),
1463
+ ...result
1464
+ });
1465
+ }
1466
+ });
1467
+ }
1468
+ function registerBrowserAgentDebugRoutes(app, ctx) {
1469
+ app.get("/console", asyncBrowserRoute(async (req, res) => {
1470
+ const targetId = resolveTargetIdFromQuery(req.query);
1471
+ const level = typeof req.query.level === "string" ? req.query.level : "";
1472
+ await withPlaywrightRouteContext({
1473
+ req,
1474
+ res,
1475
+ ctx,
1476
+ targetId,
1477
+ feature: "console messages",
1478
+ enforceCurrentUrlAllowed: true,
1479
+ run: async ({ cdpUrl, tab, pw, resolveTabUrl }) => {
1480
+ const messages = await pw.getConsoleMessagesViaPlaywright({
1481
+ cdpUrl,
1482
+ targetId: tab.targetId,
1483
+ level: normalizeOptionalString$1(level)
1484
+ });
1485
+ const url = await resolveTabUrl(tab.url);
1486
+ res.json({
1487
+ ...browserDebugTargetPayload(tab.targetId, url),
1488
+ messages
1489
+ });
1490
+ }
1491
+ });
1492
+ }));
1493
+ app.get("/errors", asyncBrowserRoute(async (req, res) => {
1494
+ const targetId = resolveTargetIdFromQuery(req.query);
1495
+ const clear = toBoolean(req.query.clear) ?? false;
1496
+ await sendPlaywrightDebugCollection({
1497
+ req,
1498
+ res,
1499
+ ctx,
1500
+ targetId,
1501
+ feature: "page errors",
1502
+ collect: async ({ cdpUrl, targetId, pw }) => await pw.getPageErrorsViaPlaywright({
1503
+ cdpUrl,
1504
+ targetId,
1505
+ clear
1506
+ })
1507
+ });
1508
+ }));
1509
+ app.get("/requests", asyncBrowserRoute(async (req, res) => {
1510
+ const targetId = resolveTargetIdFromQuery(req.query);
1511
+ const filter = typeof req.query.filter === "string" ? req.query.filter : "";
1512
+ const clear = toBoolean(req.query.clear) ?? false;
1513
+ await sendPlaywrightDebugCollection({
1514
+ req,
1515
+ res,
1516
+ ctx,
1517
+ targetId,
1518
+ feature: "network requests",
1519
+ collect: async ({ cdpUrl, targetId, pw }) => await pw.getNetworkRequestsViaPlaywright({
1520
+ cdpUrl,
1521
+ targetId,
1522
+ filter: normalizeOptionalString$1(filter),
1523
+ clear
1524
+ })
1525
+ });
1526
+ }));
1527
+ app.get("/dialogs", asyncBrowserRoute(async (req, res) => {
1528
+ await withPlaywrightRouteContext({
1529
+ req,
1530
+ res,
1531
+ ctx,
1532
+ targetId: resolveTargetIdFromQuery(req.query),
1533
+ feature: "dialog state",
1534
+ enforceCurrentUrlAllowed: true,
1535
+ run: async ({ cdpUrl, tab, pw, resolveTabUrl }) => {
1536
+ const browserState = await pw.getObservedBrowserStateViaPlaywright({
1537
+ cdpUrl,
1538
+ targetId: tab.targetId,
1539
+ ssrfPolicy: ctx.state().resolved.ssrfPolicy
1540
+ });
1541
+ const url = await resolveTabUrl(tab.url);
1542
+ res.json({
1543
+ ...browserDebugTargetPayload(tab.targetId, url),
1544
+ browserState
1545
+ });
1546
+ }
1547
+ });
1548
+ }));
1549
+ app.post("/trace/start", asyncBrowserRoute(async (req, res) => {
1550
+ const body = readBody(req);
1551
+ const targetId = resolveTargetIdFromBody(body);
1552
+ const screenshots = toBoolean(body.screenshots) ?? void 0;
1553
+ const snapshots = toBoolean(body.snapshots) ?? void 0;
1554
+ const sources = toBoolean(body.sources) ?? void 0;
1555
+ await withPlaywrightRouteContext({
1556
+ req,
1557
+ res,
1558
+ ctx,
1559
+ targetId,
1560
+ feature: "trace start",
1561
+ enforceCurrentUrlAllowed: true,
1562
+ run: async ({ cdpUrl, tab, pw, resolveTabUrl }) => {
1563
+ await pw.traceStartViaPlaywright({
1564
+ cdpUrl,
1565
+ targetId: tab.targetId,
1566
+ screenshots,
1567
+ snapshots,
1568
+ sources
1569
+ });
1570
+ const url = await resolveTabUrl(tab.url);
1571
+ res.json(browserDebugTargetPayload(tab.targetId, url));
1572
+ }
1573
+ });
1574
+ }));
1575
+ app.post("/trace/stop", asyncBrowserRoute(async (req, res) => {
1576
+ const body = readBody(req);
1577
+ const targetId = resolveTargetIdFromBody(body);
1578
+ const out = toStringOrEmpty(body.path) || "";
1579
+ await withPlaywrightRouteContext({
1580
+ req,
1581
+ res,
1582
+ ctx,
1583
+ targetId,
1584
+ feature: "trace stop",
1585
+ enforceCurrentUrlAllowed: true,
1586
+ run: async ({ cdpUrl, tab, pw, resolveTabUrl }) => {
1587
+ const tracePath = await resolveWritableOutputPathOrRespond({
1588
+ res,
1589
+ rootDir: DEFAULT_TRACE_DIR,
1590
+ requestedPath: out,
1591
+ scopeLabel: "trace directory",
1592
+ defaultFileName: `browser-trace-${crypto.randomUUID()}.zip`,
1593
+ ensureRootDir: true
1594
+ });
1595
+ if (!tracePath) return;
1596
+ await pw.traceStopViaPlaywright({
1597
+ cdpUrl,
1598
+ targetId: tab.targetId,
1599
+ path: tracePath
1600
+ });
1601
+ const url = await resolveTabUrl(tab.url);
1602
+ res.json({
1603
+ ...browserDebugTargetPayload(tab.targetId, url),
1604
+ path: path.resolve(tracePath)
1605
+ });
1606
+ }
1607
+ });
1608
+ }));
1609
+ }
1610
+ //#endregion
1611
+ //#region extensions/browser/src/browser/chrome-mcp.snapshot.ts
1612
+ function normalizeRole(node) {
1613
+ return normalizeLowercaseStringOrEmpty(node.role) || "generic";
1614
+ }
1615
+ function escapeQuoted(value) {
1616
+ return value.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"");
1617
+ }
1618
+ function shouldIncludeNode(params) {
1619
+ if (params.options?.interactive && !INTERACTIVE_ROLES.has(params.role)) return false;
1620
+ if (params.options?.compact && STRUCTURAL_ROLES.has(params.role) && !params.name) return false;
1621
+ return true;
1622
+ }
1623
+ function shouldCreateRef(role, name) {
1624
+ return INTERACTIVE_ROLES.has(role) || CONTENT_ROLES.has(role) && Boolean(name);
1625
+ }
1626
+ function createDuplicateTracker() {
1627
+ return {
1628
+ counts: /* @__PURE__ */ new Map(),
1629
+ keysByRef: /* @__PURE__ */ new Map(),
1630
+ duplicates: /* @__PURE__ */ new Set()
1631
+ };
1632
+ }
1633
+ function registerRef(tracker, ref, role, name) {
1634
+ const key = `${role}:${name ?? ""}`;
1635
+ const count = tracker.counts.get(key) ?? 0;
1636
+ tracker.counts.set(key, count + 1);
1637
+ tracker.keysByRef.set(ref, key);
1638
+ if (count > 0) {
1639
+ tracker.duplicates.add(key);
1640
+ return count;
1641
+ }
1642
+ }
1643
+ function flattenChromeMcpSnapshotToAriaNodes(root, limit = 500) {
1644
+ const boundedLimit = Math.max(1, Math.min(2e3, Math.floor(limit)));
1645
+ const out = [];
1646
+ const visit = (node, depth) => {
1647
+ if (out.length >= boundedLimit) return;
1648
+ const ref = normalizeString(node.id);
1649
+ if (ref) out.push({
1650
+ ref,
1651
+ role: normalizeRole(node),
1652
+ name: normalizeString(node.name) ?? "",
1653
+ value: normalizeString(node.value),
1654
+ description: normalizeString(node.description),
1655
+ depth
1656
+ });
1657
+ for (const child of node.children ?? []) {
1658
+ visit(child, depth + 1);
1659
+ if (out.length >= boundedLimit) return;
1660
+ }
1661
+ };
1662
+ visit(root, 0);
1663
+ return out;
1664
+ }
1665
+ function buildAiSnapshotFromChromeMcpSnapshot(params) {
1666
+ const refs = {};
1667
+ const tracker = createDuplicateTracker();
1668
+ const lines = [];
1669
+ const visit = (node, depth) => {
1670
+ const role = normalizeRole(node);
1671
+ const name = normalizeString(node.name);
1672
+ const value = normalizeString(node.value);
1673
+ const description = normalizeString(node.description);
1674
+ const maxDepth = params.options?.maxDepth;
1675
+ if (maxDepth !== void 0 && depth > maxDepth) return;
1676
+ if (shouldIncludeNode({
1677
+ role,
1678
+ name,
1679
+ options: params.options
1680
+ })) {
1681
+ let line = `${" ".repeat(depth)}- ${role}`;
1682
+ if (name) line += ` "${escapeQuoted(name)}"`;
1683
+ const ref = normalizeString(node.id);
1684
+ if (ref && shouldCreateRef(role, name)) {
1685
+ const nth = registerRef(tracker, ref, role, name);
1686
+ refs[ref] = nth === void 0 ? {
1687
+ role,
1688
+ name
1689
+ } : {
1690
+ role,
1691
+ name,
1692
+ nth
1693
+ };
1694
+ line += ` [ref=${ref}]`;
1695
+ }
1696
+ if (value) line += ` value="${escapeQuoted(value)}"`;
1697
+ if (description) line += ` description="${escapeQuoted(description)}"`;
1698
+ lines.push(line);
1699
+ }
1700
+ for (const child of node.children ?? []) visit(child, depth + 1);
1701
+ };
1702
+ visit(params.root, 0);
1703
+ for (const [ref, data] of Object.entries(refs)) {
1704
+ const key = tracker.keysByRef.get(ref);
1705
+ if (key && !tracker.duplicates.has(key)) delete data.nth;
1706
+ }
1707
+ let snapshot = lines.join("\n");
1708
+ let truncated = false;
1709
+ const maxChars = typeof params.maxChars === "number" && Number.isFinite(params.maxChars) && params.maxChars > 0 ? Math.floor(params.maxChars) : void 0;
1710
+ if (maxChars && snapshot.length > maxChars) {
1711
+ snapshot = `${snapshot.slice(0, maxChars)}\n\n[...TRUNCATED - page too large]`;
1712
+ truncated = true;
1713
+ }
1714
+ const stats = getRoleSnapshotStats(snapshot, refs);
1715
+ return truncated ? {
1716
+ snapshot,
1717
+ truncated,
1718
+ refs,
1719
+ stats
1720
+ } : {
1721
+ snapshot,
1722
+ refs,
1723
+ stats
1724
+ };
1725
+ }
1726
+ //#endregion
1727
+ //#region extensions/browser/src/browser/screenshot.ts
1728
+ const DEFAULT_BROWSER_SCREENSHOT_MAX_SIDE = 2e3;
1729
+ const DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES = 5 * 1024 * 1024;
1730
+ async function normalizeBrowserScreenshot(buffer, opts) {
1731
+ const maxSide = Math.max(1, Math.round(opts?.maxSide ?? 2e3));
1732
+ const maxBytes = Math.max(1, Math.round(opts?.maxBytes ?? 5242880));
1733
+ const meta = await getImageMetadata(buffer);
1734
+ const width = meta?.width ?? 0;
1735
+ const height = meta?.height ?? 0;
1736
+ const maxDim = Math.max(width, height);
1737
+ if (buffer.byteLength <= maxBytes && (maxDim === 0 || width <= maxSide && height <= maxSide)) return { buffer };
1738
+ const sideGrid = buildImageResizeSideGrid(maxSide, maxDim > 0 ? Math.min(maxSide, maxDim) : maxSide);
1739
+ let smallest = null;
1740
+ let processorUnavailableError;
1741
+ for (const side of sideGrid) {
1742
+ for (const quality of IMAGE_REDUCE_QUALITY_STEPS) {
1743
+ let out;
1744
+ try {
1745
+ out = await resizeToJpeg({
1746
+ buffer,
1747
+ maxSide: side,
1748
+ quality,
1749
+ withoutEnlargement: true
1750
+ });
1751
+ } catch (err) {
1752
+ if (isImageProcessorUnavailableError(err)) {
1753
+ processorUnavailableError = err;
1754
+ break;
1755
+ }
1756
+ throw err;
1757
+ }
1758
+ if (!smallest || out.byteLength < smallest.size) smallest = {
1759
+ buffer: out,
1760
+ size: out.byteLength
1761
+ };
1762
+ if (out.byteLength <= maxBytes) return {
1763
+ buffer: out,
1764
+ contentType: "image/jpeg"
1765
+ };
1766
+ }
1767
+ if (processorUnavailableError) break;
1768
+ }
1769
+ if (processorUnavailableError) throw processorUnavailableError;
1770
+ const best = smallest?.buffer ?? buffer;
1771
+ throw new Error(`Browser screenshot could not be reduced below ${(maxBytes / (1024 * 1024)).toFixed(0)}MB (got ${(best.byteLength / (1024 * 1024)).toFixed(2)}MB)`);
1772
+ }
1773
+ //#endregion
1774
+ //#region extensions/browser/src/browser/routes/agent.snapshot.plan.ts
1775
+ function resolveSnapshotPlan(params) {
1776
+ const mode = params.query.mode === "efficient" ? "efficient" : void 0;
1777
+ const labels = toBoolean(params.query.labels) ?? void 0;
1778
+ const urls = toBoolean(params.query.urls) ?? void 0;
1779
+ const explicitFormat = params.query.format === "aria" ? "aria" : params.query.format === "ai" ? "ai" : void 0;
1780
+ const format = resolveDefaultSnapshotFormat({
1781
+ profile: params.profile,
1782
+ hasPlaywright: params.hasPlaywright,
1783
+ explicitFormat,
1784
+ mode
1785
+ });
1786
+ const limit = parseStrictPositiveInteger(params.query.limit);
1787
+ const hasMaxChars = Object.hasOwn(params.query, "maxChars");
1788
+ const maxCharsRaw = parseStrictNonNegativeInteger(params.query.maxChars);
1789
+ const resolvedMaxChars = format === "ai" ? hasMaxChars ? maxCharsRaw === void 0 ? mode === "efficient" ? DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS : DEFAULT_AI_SNAPSHOT_MAX_CHARS : maxCharsRaw !== void 0 && maxCharsRaw > 0 ? maxCharsRaw : void 0 : mode === "efficient" ? DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS : DEFAULT_AI_SNAPSHOT_MAX_CHARS : void 0;
1790
+ const interactiveRaw = toBoolean(params.query.interactive);
1791
+ const compactRaw = toBoolean(params.query.compact);
1792
+ const depthRaw = parseStrictNonNegativeInteger(params.query.depth);
1793
+ const refsModeRaw = toStringOrEmpty(params.query.refs).trim();
1794
+ const refsMode = refsModeRaw === "aria" ? "aria" : refsModeRaw === "role" ? "role" : void 0;
1795
+ const interactive = interactiveRaw ?? (mode === "efficient" ? true : void 0);
1796
+ const compact = compactRaw ?? (mode === "efficient" ? true : void 0);
1797
+ const depth = depthRaw ?? (mode === "efficient" ? 6 : void 0);
1798
+ const selectorValue = normalizeOptionalString$1(toStringOrEmpty(params.query.selector));
1799
+ const frameSelectorValue = normalizeOptionalString$1(toStringOrEmpty(params.query.frame));
1800
+ const timeoutMsRaw = parseStrictPositiveInteger(params.query.timeoutMs);
1801
+ return {
1802
+ format,
1803
+ mode,
1804
+ labels,
1805
+ urls,
1806
+ limit,
1807
+ resolvedMaxChars,
1808
+ interactive,
1809
+ compact,
1810
+ depth,
1811
+ refsMode,
1812
+ selectorValue,
1813
+ frameSelectorValue,
1814
+ timeoutMs: timeoutMsRaw !== void 0 ? normalizeBrowserTimerDelayMs(timeoutMsRaw) : void 0,
1815
+ wantsRoleSnapshot: labels === true || urls === true || mode === "efficient" || interactive === true || compact === true || depth !== void 0 || Boolean(selectorValue) || Boolean(frameSelectorValue)
1816
+ };
1817
+ }
1818
+ //#endregion
1819
+ //#region extensions/browser/src/browser/routes/agent.snapshot.ts
1820
+ const CHROME_MCP_OVERLAY_ATTR = "data-fengming-mcp-overlay";
1821
+ async function collectChromeMcpSnapshotUrls(params) {
1822
+ const result = await evaluateChromeMcpScript({
1823
+ profileName: params.profileName,
1824
+ profile: params.profile,
1825
+ userDataDir: params.userDataDir,
1826
+ targetId: params.targetId,
1827
+ fn: `() => {
1828
+ const seen = new Set();
1829
+ const out = [];
1830
+ for (const anchor of Array.from(document.querySelectorAll("a[href]"))) {
1831
+ const href = anchor.href || "";
1832
+ if (!href || seen.has(href)) continue;
1833
+ const text = (anchor.innerText || anchor.textContent || anchor.getAttribute("aria-label") || "")
1834
+ .replace(/\\s+/g, " ")
1835
+ .trim()
1836
+ .slice(0, 120) || href;
1837
+ seen.add(href);
1838
+ out.push({ text, url: href });
1839
+ if (out.length >= 100) break;
1840
+ }
1841
+ return out;
1842
+ }`
1843
+ }).catch(() => []);
1844
+ return Array.isArray(result) ? result.filter((entry) => entry && typeof entry === "object" && typeof entry.text === "string" && typeof entry.url === "string") : [];
1845
+ }
1846
+ async function clearChromeMcpOverlay(params) {
1847
+ await evaluateChromeMcpScript({
1848
+ profileName: params.profileName,
1849
+ profile: params.profile,
1850
+ userDataDir: params.userDataDir,
1851
+ targetId: params.targetId,
1852
+ fn: `() => {
1853
+ document.querySelectorAll("[${CHROME_MCP_OVERLAY_ATTR}]").forEach((node) => node.remove());
1854
+ return true;
1855
+ }`
1856
+ }).catch(() => {});
1857
+ }
1858
+ async function renderChromeMcpLabels(params) {
1859
+ const refList = JSON.stringify(params.refs);
1860
+ const result = await evaluateChromeMcpScript({
1861
+ profileName: params.profileName,
1862
+ profile: params.profile,
1863
+ userDataDir: params.userDataDir,
1864
+ targetId: params.targetId,
1865
+ args: params.refs,
1866
+ fn: `(...elements) => {
1867
+ const refs = ${refList};
1868
+ document.querySelectorAll("[${CHROME_MCP_OVERLAY_ATTR}]").forEach((node) => node.remove());
1869
+ const root = document.createElement("div");
1870
+ root.setAttribute("${CHROME_MCP_OVERLAY_ATTR}", "labels");
1871
+ root.style.position = "fixed";
1872
+ root.style.inset = "0";
1873
+ root.style.pointerEvents = "none";
1874
+ root.style.zIndex = "2147483647";
1875
+ let labels = 0;
1876
+ let skipped = 0;
1877
+ elements.forEach((el, index) => {
1878
+ if (!(el instanceof Element)) {
1879
+ skipped += 1;
1880
+ return;
1881
+ }
1882
+ const rect = el.getBoundingClientRect();
1883
+ if (rect.width <= 0 && rect.height <= 0) {
1884
+ skipped += 1;
1885
+ return;
1886
+ }
1887
+ labels += 1;
1888
+ const badge = document.createElement("div");
1889
+ badge.setAttribute("${CHROME_MCP_OVERLAY_ATTR}", "label");
1890
+ badge.textContent = refs[index] || String(labels);
1891
+ badge.style.position = "fixed";
1892
+ badge.style.left = \`\${Math.max(0, rect.left)}px\`;
1893
+ badge.style.top = \`\${Math.max(0, rect.top)}px\`;
1894
+ badge.style.transform = "translateY(-100%)";
1895
+ badge.style.padding = "2px 6px";
1896
+ badge.style.borderRadius = "999px";
1897
+ badge.style.background = "#FF4500";
1898
+ badge.style.color = "#fff";
1899
+ badge.style.font = "600 12px ui-monospace, SFMono-Regular, Menlo, monospace";
1900
+ badge.style.boxShadow = "0 2px 6px rgba(0,0,0,0.35)";
1901
+ badge.style.whiteSpace = "nowrap";
1902
+ root.appendChild(badge);
1903
+ });
1904
+ document.documentElement.appendChild(root);
1905
+ return { labels, skipped };
1906
+ }`
1907
+ });
1908
+ return {
1909
+ labels: result && typeof result === "object" && typeof result.labels === "number" ? result.labels : 0,
1910
+ skipped: result && typeof result === "object" && typeof result.skipped === "number" ? result.skipped : 0
1911
+ };
1912
+ }
1913
+ async function saveNormalizedScreenshotResponse(params) {
1914
+ const normalized = await normalizeBrowserScreenshot(params.buffer, {
1915
+ maxSide: DEFAULT_BROWSER_SCREENSHOT_MAX_SIDE,
1916
+ maxBytes: DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES
1917
+ });
1918
+ await saveBrowserMediaResponse({
1919
+ res: params.res,
1920
+ buffer: normalized.buffer,
1921
+ contentType: normalized.contentType ?? `image/${params.type}`,
1922
+ maxBytes: DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES,
1923
+ targetId: params.targetId,
1924
+ url: params.url,
1925
+ labels: params.labels,
1926
+ labelsCount: params.labelsCount,
1927
+ labelsSkipped: params.labelsSkipped
1928
+ });
1929
+ }
1930
+ async function saveBrowserMediaResponse(params) {
1931
+ await ensureMediaDir();
1932
+ const saved = await saveMediaBuffer(params.buffer, params.contentType, "browser", params.maxBytes);
1933
+ params.res.json({
1934
+ ok: true,
1935
+ path: path.resolve(saved.path),
1936
+ targetId: params.targetId,
1937
+ url: params.url,
1938
+ ...params.labels ? { labels: true } : {},
1939
+ ...typeof params.labelsCount === "number" ? { labelsCount: params.labelsCount } : {},
1940
+ ...typeof params.labelsSkipped === "number" ? { labelsSkipped: params.labelsSkipped } : {}
1941
+ });
1942
+ }
1943
+ function hasObservableBrowserState(state) {
1944
+ if (!state || typeof state !== "object") return false;
1945
+ const dialogs = state.dialogs;
1946
+ return Boolean(dialogs?.pending?.length || dialogs?.recent?.length);
1947
+ }
1948
+ function hasPendingDialogs(state) {
1949
+ if (!state || typeof state !== "object") return false;
1950
+ const dialogs = state.dialogs;
1951
+ return Boolean(dialogs?.pending?.length);
1952
+ }
1953
+ function browserStateResponseFields(state) {
1954
+ return hasObservableBrowserState(state) ? { browserState: state } : {};
1955
+ }
1956
+ function registerBrowserAgentSnapshotRoutes(app, ctx) {
1957
+ app.post("/navigate", asyncBrowserRoute(async (req, res) => {
1958
+ const body = readBody(req);
1959
+ const url = toStringOrEmpty(body.url);
1960
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
1961
+ if (!url) return jsonError(res, 400, "url is required");
1962
+ await withRouteTabContext({
1963
+ req,
1964
+ res,
1965
+ ctx,
1966
+ targetId,
1967
+ run: async ({ profileCtx, tab, cdpUrl }) => {
1968
+ if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) {
1969
+ const ssrfPolicyOpts = browserNavigationPolicyForProfile(ctx, profileCtx);
1970
+ await assertBrowserNavigationAllowed({
1971
+ url,
1972
+ ...ssrfPolicyOpts
1973
+ });
1974
+ const result = await navigateChromeMcpPage({
1975
+ profileName: profileCtx.profile.name,
1976
+ profile: profileCtx.profile,
1977
+ targetId: tab.targetId,
1978
+ url
1979
+ });
1980
+ await assertBrowserNavigationResultAllowed({
1981
+ url: result.url,
1982
+ ...ssrfPolicyOpts
1983
+ });
1984
+ return res.json({
1985
+ ok: true,
1986
+ targetId: tab.targetId,
1987
+ ...result
1988
+ });
1989
+ }
1990
+ const pw = await requirePwAi(res, "navigate");
1991
+ if (!pw) return;
1992
+ const result = await pw.navigateViaPlaywright({
1993
+ cdpUrl,
1994
+ targetId: tab.targetId,
1995
+ url,
1996
+ ...browserNavigationPolicyForProfile(ctx, profileCtx)
1997
+ });
1998
+ const currentTargetId = await resolveTargetIdAfterNavigate({
1999
+ oldTargetId: tab.targetId,
2000
+ navigatedUrl: result.url,
2001
+ listTabs: () => profileCtx.listTabs()
2002
+ });
2003
+ res.json({
2004
+ ok: true,
2005
+ targetId: currentTargetId,
2006
+ ...result
2007
+ });
2008
+ }
2009
+ });
2010
+ }));
2011
+ app.post("/pdf", asyncBrowserRoute(async (req, res) => {
2012
+ const targetId = toStringOrEmpty(readBody(req).targetId) || void 0;
2013
+ const profileCtx = resolveProfileContext(req, res, ctx);
2014
+ if (!profileCtx) return;
2015
+ if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) return jsonError(res, 501, EXISTING_SESSION_LIMITS.snapshot.pdfUnsupported);
2016
+ await withPlaywrightRouteContext({
2017
+ req,
2018
+ res,
2019
+ ctx,
2020
+ targetId,
2021
+ feature: "pdf",
2022
+ enforceCurrentUrlAllowed: true,
2023
+ run: async ({ cdpUrl, tab, pw }) => {
2024
+ const pdf = await pw.pdfViaPlaywright({
2025
+ cdpUrl,
2026
+ targetId: tab.targetId
2027
+ });
2028
+ await saveBrowserMediaResponse({
2029
+ res,
2030
+ buffer: pdf.buffer,
2031
+ contentType: "application/pdf",
2032
+ maxBytes: pdf.buffer.byteLength,
2033
+ targetId: tab.targetId,
2034
+ url: tab.url
2035
+ });
2036
+ }
2037
+ });
2038
+ }));
2039
+ app.post("/screenshot", asyncBrowserRoute(async (req, res) => {
2040
+ const body = readBody(req);
2041
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
2042
+ const fullPage = toBoolean(body.fullPage) ?? false;
2043
+ const ref = toStringOrEmpty(body.ref) || void 0;
2044
+ const element = toStringOrEmpty(body.element) || void 0;
2045
+ const labels = toBoolean(body.labels) ?? false;
2046
+ const type = body.type === "jpeg" ? "jpeg" : "png";
2047
+ let timeoutMs;
2048
+ try {
2049
+ const timeoutMsRaw = readRoutePositiveInteger(body.timeoutMs, "timeoutMs");
2050
+ timeoutMs = timeoutMsRaw !== void 0 ? normalizeBrowserTimerDelayMs(timeoutMsRaw) : DEFAULT_BROWSER_SCREENSHOT_TIMEOUT_MS;
2051
+ } catch (err) {
2052
+ return jsonError(res, 400, String(err instanceof Error ? err.message : err));
2053
+ }
2054
+ if (fullPage && (ref || element)) return jsonError(res, 400, "fullPage is not supported for element screenshots");
2055
+ await withRouteTabContext({
2056
+ req,
2057
+ res,
2058
+ ctx,
2059
+ targetId,
2060
+ enforceCurrentUrlAllowed: true,
2061
+ run: async ({ profileCtx, tab, cdpUrl }) => {
2062
+ if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) {
2063
+ const ssrfPolicyOpts = browserNavigationPolicyForProfile(ctx, profileCtx);
2064
+ if (ssrfPolicyOpts.ssrfPolicy) await assertBrowserNavigationResultAllowed({
2065
+ url: tab.url,
2066
+ ...ssrfPolicyOpts
2067
+ });
2068
+ if (element) return jsonError(res, 400, EXISTING_SESSION_LIMITS.snapshot.screenshotElement);
2069
+ if (labels) {
2070
+ const built = buildAiSnapshotFromChromeMcpSnapshot({ root: await takeChromeMcpSnapshot({
2071
+ profileName: profileCtx.profile.name,
2072
+ profile: profileCtx.profile,
2073
+ targetId: tab.targetId
2074
+ }) });
2075
+ const labelResult = await renderChromeMcpLabels({
2076
+ profileName: profileCtx.profile.name,
2077
+ profile: profileCtx.profile,
2078
+ targetId: tab.targetId,
2079
+ refs: Object.keys(built.refs)
2080
+ });
2081
+ try {
2082
+ await saveNormalizedScreenshotResponse({
2083
+ res,
2084
+ buffer: await takeChromeMcpScreenshot({
2085
+ profileName: profileCtx.profile.name,
2086
+ profile: profileCtx.profile,
2087
+ targetId: tab.targetId,
2088
+ fullPage,
2089
+ format: type,
2090
+ timeoutMs
2091
+ }),
2092
+ type,
2093
+ targetId: tab.targetId,
2094
+ url: tab.url,
2095
+ labels: true,
2096
+ labelsCount: labelResult.labels,
2097
+ labelsSkipped: labelResult.skipped
2098
+ });
2099
+ } finally {
2100
+ await clearChromeMcpOverlay({
2101
+ profileName: profileCtx.profile.name,
2102
+ profile: profileCtx.profile,
2103
+ targetId: tab.targetId
2104
+ });
2105
+ }
2106
+ return;
2107
+ }
2108
+ await saveNormalizedScreenshotResponse({
2109
+ res,
2110
+ buffer: await takeChromeMcpScreenshot({
2111
+ profileName: profileCtx.profile.name,
2112
+ profile: profileCtx.profile,
2113
+ targetId: tab.targetId,
2114
+ uid: ref,
2115
+ fullPage,
2116
+ format: type,
2117
+ timeoutMs
2118
+ }),
2119
+ type,
2120
+ targetId: tab.targetId,
2121
+ url: tab.url
2122
+ });
2123
+ return;
2124
+ }
2125
+ let buffer;
2126
+ if (labels || shouldUsePlaywrightForScreenshot({
2127
+ profile: profileCtx.profile,
2128
+ wsUrl: tab.wsUrl,
2129
+ ref,
2130
+ element
2131
+ })) {
2132
+ const pw = await requirePwAi(res, "screenshot");
2133
+ if (!pw) return;
2134
+ if (labels) {
2135
+ const snap = await pw.snapshotRoleViaPlaywright({
2136
+ cdpUrl,
2137
+ targetId: tab.targetId,
2138
+ ssrfPolicy: ctx.state().resolved.ssrfPolicy
2139
+ });
2140
+ const labeled = await pw.screenshotWithLabelsViaPlaywright({
2141
+ cdpUrl,
2142
+ targetId: tab.targetId,
2143
+ refs: snap.refs,
2144
+ type,
2145
+ timeoutMs
2146
+ });
2147
+ await saveNormalizedScreenshotResponse({
2148
+ res,
2149
+ buffer: labeled.buffer,
2150
+ type,
2151
+ targetId: tab.targetId,
2152
+ url: tab.url,
2153
+ labels: true,
2154
+ labelsCount: labeled.labels,
2155
+ labelsSkipped: labeled.skipped
2156
+ });
2157
+ return;
2158
+ }
2159
+ buffer = (await pw.takeScreenshotViaPlaywright({
2160
+ cdpUrl,
2161
+ targetId: tab.targetId,
2162
+ ref,
2163
+ element,
2164
+ fullPage,
2165
+ type,
2166
+ timeoutMs
2167
+ })).buffer;
2168
+ } else buffer = await captureScreenshot({
2169
+ wsUrl: tab.wsUrl ?? "",
2170
+ fullPage,
2171
+ format: type,
2172
+ quality: type === "jpeg" ? 85 : void 0,
2173
+ timeoutMs
2174
+ });
2175
+ await saveNormalizedScreenshotResponse({
2176
+ res,
2177
+ buffer,
2178
+ type,
2179
+ targetId: tab.targetId,
2180
+ url: tab.url
2181
+ });
2182
+ }
2183
+ });
2184
+ }));
2185
+ app.get("/snapshot", asyncBrowserRoute(async (req, res) => {
2186
+ const profileCtx = resolveProfileContext(req, res, ctx);
2187
+ if (!profileCtx) return;
2188
+ const targetId = typeof req.query.targetId === "string" ? req.query.targetId.trim() : "";
2189
+ const pwModule = await getPwAiModule();
2190
+ const hasPlaywright = Boolean(pwModule);
2191
+ const plan = resolveSnapshotPlan({
2192
+ profile: profileCtx.profile,
2193
+ query: req.query,
2194
+ hasPlaywright
2195
+ });
2196
+ try {
2197
+ const tab = await profileCtx.ensureTabAvailable(targetId || void 0);
2198
+ const usesChromeMcp = getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp;
2199
+ const ssrfPolicyOpts = browserNavigationPolicyForProfile(ctx, profileCtx);
2200
+ if ((plan.labels || plan.mode === "efficient") && plan.format === "aria") return jsonError(res, 400, "labels/mode=efficient require format=ai");
2201
+ if (usesChromeMcp && (plan.selectorValue || plan.frameSelectorValue)) return jsonError(res, 400, EXISTING_SESSION_LIMITS.snapshot.snapshotSelector);
2202
+ if (ssrfPolicyOpts.ssrfPolicy) await assertBrowserNavigationResultAllowed({
2203
+ url: tab.url,
2204
+ ...ssrfPolicyOpts
2205
+ });
2206
+ let observedBrowserState;
2207
+ if (!usesChromeMcp && pwModule) observedBrowserState = await pwModule.getObservedBrowserStateViaPlaywright({
2208
+ cdpUrl: profileCtx.profile.cdpUrl,
2209
+ targetId: tab.targetId,
2210
+ ssrfPolicy: ctx.state().resolved.ssrfPolicy
2211
+ }).catch(() => void 0);
2212
+ if (usesChromeMcp) {
2213
+ const snapshot = await takeChromeMcpSnapshot({
2214
+ profileName: profileCtx.profile.name,
2215
+ profile: profileCtx.profile,
2216
+ targetId: tab.targetId,
2217
+ timeoutMs: plan.timeoutMs
2218
+ });
2219
+ if (plan.format === "aria") return res.json({
2220
+ ok: true,
2221
+ format: "aria",
2222
+ targetId: tab.targetId,
2223
+ url: tab.url,
2224
+ nodes: flattenChromeMcpSnapshotToAriaNodes(snapshot, plan.limit)
2225
+ });
2226
+ const built = buildAiSnapshotFromChromeMcpSnapshot({
2227
+ root: snapshot,
2228
+ options: {
2229
+ interactive: plan.interactive ?? void 0,
2230
+ compact: plan.compact ?? void 0,
2231
+ maxDepth: plan.depth ?? void 0
2232
+ },
2233
+ maxChars: plan.resolvedMaxChars
2234
+ });
2235
+ const builtWithUrls = plan.urls ? {
2236
+ ...built,
2237
+ snapshot: appendSnapshotUrls(built.snapshot, await collectChromeMcpSnapshotUrls({
2238
+ profileName: profileCtx.profile.name,
2239
+ profile: profileCtx.profile,
2240
+ targetId: tab.targetId
2241
+ }))
2242
+ } : built;
2243
+ if (plan.labels) {
2244
+ const refs = Object.keys(builtWithUrls.refs);
2245
+ const labelResult = await renderChromeMcpLabels({
2246
+ profileName: profileCtx.profile.name,
2247
+ profile: profileCtx.profile,
2248
+ targetId: tab.targetId,
2249
+ refs
2250
+ });
2251
+ try {
2252
+ const normalized = await normalizeBrowserScreenshot(await takeChromeMcpScreenshot({
2253
+ profileName: profileCtx.profile.name,
2254
+ profile: profileCtx.profile,
2255
+ targetId: tab.targetId,
2256
+ format: "png",
2257
+ timeoutMs: plan.timeoutMs
2258
+ }), {
2259
+ maxSide: DEFAULT_BROWSER_SCREENSHOT_MAX_SIDE,
2260
+ maxBytes: DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES
2261
+ });
2262
+ await ensureMediaDir();
2263
+ const saved = await saveMediaBuffer(normalized.buffer, normalized.contentType ?? "image/png", "browser", DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES);
2264
+ return res.json({
2265
+ ok: true,
2266
+ format: "ai",
2267
+ targetId: tab.targetId,
2268
+ url: tab.url,
2269
+ labels: true,
2270
+ labelsCount: labelResult.labels,
2271
+ labelsSkipped: labelResult.skipped,
2272
+ imagePath: path.resolve(saved.path),
2273
+ imageType: normalized.contentType?.includes("jpeg") ? "jpeg" : "png",
2274
+ ...builtWithUrls
2275
+ });
2276
+ } finally {
2277
+ await clearChromeMcpOverlay({
2278
+ profileName: profileCtx.profile.name,
2279
+ profile: profileCtx.profile,
2280
+ targetId: tab.targetId
2281
+ });
2282
+ }
2283
+ }
2284
+ return res.json({
2285
+ ok: true,
2286
+ format: "ai",
2287
+ targetId: tab.targetId,
2288
+ url: tab.url,
2289
+ ...builtWithUrls
2290
+ });
2291
+ }
2292
+ if (hasPendingDialogs(observedBrowserState)) return res.json({
2293
+ ok: true,
2294
+ format: plan.format,
2295
+ targetId: tab.targetId,
2296
+ url: tab.url,
2297
+ blockedByDialog: true,
2298
+ ...browserStateResponseFields(observedBrowserState),
2299
+ ...plan.format === "aria" ? { nodes: [] } : {
2300
+ snapshot: "",
2301
+ refs: {}
2302
+ }
2303
+ });
2304
+ if (plan.format === "ai") {
2305
+ const roleSnapshotArgs = {
2306
+ cdpUrl: profileCtx.profile.cdpUrl,
2307
+ targetId: tab.targetId,
2308
+ selector: plan.selectorValue,
2309
+ frameSelector: plan.frameSelectorValue,
2310
+ refsMode: plan.refsMode,
2311
+ ssrfPolicy: ctx.state().resolved.ssrfPolicy,
2312
+ urls: plan.urls,
2313
+ timeoutMs: plan.timeoutMs,
2314
+ options: {
2315
+ interactive: plan.interactive ?? void 0,
2316
+ compact: plan.compact ?? void 0,
2317
+ maxDepth: plan.depth ?? void 0
2318
+ }
2319
+ };
2320
+ const cdpRoleSnapshot = async () => {
2321
+ if (!tab.wsUrl) return null;
2322
+ if (plan.selectorValue || plan.frameSelectorValue) return null;
2323
+ return await snapshotRoleViaCdp({
2324
+ wsUrl: tab.wsUrl,
2325
+ urls: plan.urls,
2326
+ timeoutMs: plan.timeoutMs,
2327
+ options: {
2328
+ interactive: plan.interactive ?? void 0,
2329
+ compact: plan.compact ?? void 0,
2330
+ maxDepth: plan.depth ?? void 0
2331
+ }
2332
+ });
2333
+ };
2334
+ const pw = await getPwAiModule();
2335
+ const snap = plan.wantsRoleSnapshot ? pw ? await pw.snapshotRoleViaPlaywright(roleSnapshotArgs).catch(async (err) => {
2336
+ const fallback = await cdpRoleSnapshot();
2337
+ if (fallback) return fallback;
2338
+ throw err;
2339
+ }) : await cdpRoleSnapshot() : pw ? await pw.snapshotAiViaPlaywright({
2340
+ cdpUrl: profileCtx.profile.cdpUrl,
2341
+ targetId: tab.targetId,
2342
+ ssrfPolicy: ctx.state().resolved.ssrfPolicy,
2343
+ urls: plan.urls,
2344
+ timeoutMs: plan.timeoutMs,
2345
+ ...typeof plan.resolvedMaxChars === "number" ? { maxChars: plan.resolvedMaxChars } : {}
2346
+ }) : await cdpRoleSnapshot();
2347
+ if (!snap) {
2348
+ await requirePwAi(res, "ai snapshot");
2349
+ return;
2350
+ }
2351
+ if (plan.labels) {
2352
+ if (!pw) return jsonError(res, 501, "Snapshot labels require Playwright.");
2353
+ const labeled = await pw.screenshotWithLabelsViaPlaywright({
2354
+ cdpUrl: profileCtx.profile.cdpUrl,
2355
+ targetId: tab.targetId,
2356
+ refs: "refs" in snap ? snap.refs : {},
2357
+ type: "png",
2358
+ timeoutMs: plan.timeoutMs
2359
+ });
2360
+ const normalized = await normalizeBrowserScreenshot(labeled.buffer, {
2361
+ maxSide: DEFAULT_BROWSER_SCREENSHOT_MAX_SIDE,
2362
+ maxBytes: DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES
2363
+ });
2364
+ await ensureMediaDir();
2365
+ const saved = await saveMediaBuffer(normalized.buffer, normalized.contentType ?? "image/png", "browser", DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES);
2366
+ const imageType = normalized.contentType?.includes("jpeg") ? "jpeg" : "png";
2367
+ return res.json({
2368
+ ok: true,
2369
+ format: plan.format,
2370
+ targetId: tab.targetId,
2371
+ url: tab.url,
2372
+ ...browserStateResponseFields(observedBrowserState),
2373
+ labels: true,
2374
+ labelsCount: labeled.labels,
2375
+ labelsSkipped: labeled.skipped,
2376
+ imagePath: path.resolve(saved.path),
2377
+ imageType,
2378
+ ...snap
2379
+ });
2380
+ }
2381
+ return res.json({
2382
+ ok: true,
2383
+ format: plan.format,
2384
+ targetId: tab.targetId,
2385
+ url: tab.url,
2386
+ ...browserStateResponseFields(observedBrowserState),
2387
+ ...snap
2388
+ });
2389
+ }
2390
+ const usePlaywrightAriaSnapshot = shouldUsePlaywrightForAriaSnapshot({
2391
+ profile: profileCtx.profile,
2392
+ wsUrl: tab.wsUrl
2393
+ });
2394
+ const snap = usePlaywrightAriaSnapshot ? requirePwAi(res, "aria snapshot").then(async (pw) => {
2395
+ if (!pw) return null;
2396
+ return await pw.snapshotAriaViaPlaywright({
2397
+ cdpUrl: profileCtx.profile.cdpUrl,
2398
+ targetId: tab.targetId,
2399
+ limit: plan.limit,
2400
+ timeoutMs: plan.timeoutMs,
2401
+ ssrfPolicy: ctx.state().resolved.ssrfPolicy
2402
+ });
2403
+ }) : snapshotAria({
2404
+ wsUrl: tab.wsUrl ?? "",
2405
+ limit: plan.limit,
2406
+ timeoutMs: plan.timeoutMs
2407
+ });
2408
+ const resolved = await Promise.resolve(snap);
2409
+ if (!resolved) return;
2410
+ if (!usePlaywrightAriaSnapshot) await pwModule?.storeAriaSnapshotRefsViaPlaywright?.({
2411
+ cdpUrl: profileCtx.profile.cdpUrl,
2412
+ targetId: tab.targetId,
2413
+ nodes: resolved.nodes
2414
+ });
2415
+ return res.json({
2416
+ ok: true,
2417
+ format: plan.format,
2418
+ targetId: tab.targetId,
2419
+ url: tab.url,
2420
+ ...browserStateResponseFields(observedBrowserState),
2421
+ ...resolved
2422
+ });
2423
+ } catch (err) {
2424
+ handleRouteError(ctx, res, err);
2425
+ }
2426
+ }));
2427
+ }
2428
+ //#endregion
2429
+ //#region extensions/browser/src/browser/routes/agent.storage.ts
2430
+ function parseStorageKind(raw) {
2431
+ if (raw === "local" || raw === "session") return raw;
2432
+ return null;
2433
+ }
2434
+ function parseStorageMutationRequest(kindParam, body) {
2435
+ return {
2436
+ kind: parseStorageKind(toStringOrEmpty(kindParam)),
2437
+ targetId: resolveTargetIdFromBody(body)
2438
+ };
2439
+ }
2440
+ function parseRequiredStorageMutationRequest(kindParam, body) {
2441
+ const parsed = parseStorageMutationRequest(kindParam, body);
2442
+ if (!parsed.kind) return null;
2443
+ return {
2444
+ kind: parsed.kind,
2445
+ targetId: parsed.targetId
2446
+ };
2447
+ }
2448
+ function parseStorageMutationOrRespond(res, kindParam, body) {
2449
+ const parsed = parseRequiredStorageMutationRequest(kindParam, body);
2450
+ if (!parsed) {
2451
+ jsonError(res, 400, "kind must be local|session");
2452
+ return null;
2453
+ }
2454
+ return parsed;
2455
+ }
2456
+ function parseStorageMutationFromRequest(req, res) {
2457
+ const body = readBody(req);
2458
+ const parsed = parseStorageMutationOrRespond(res, req.params.kind, body);
2459
+ if (!parsed) return null;
2460
+ return {
2461
+ body,
2462
+ parsed
2463
+ };
2464
+ }
2465
+ function assertRange(value, fieldName, min, max) {
2466
+ if (value === void 0) return;
2467
+ if (value < min || value > max) throw new Error(`${fieldName} must be between ${min} and ${max}.`);
2468
+ return value;
2469
+ }
2470
+ function parseCookieSetOptions(cookie) {
2471
+ return {
2472
+ name: toStringOrEmpty(cookie.name),
2473
+ value: toStringOrEmpty(cookie.value),
2474
+ url: toStringOrEmpty(cookie.url) || void 0,
2475
+ domain: toStringOrEmpty(cookie.domain) || void 0,
2476
+ path: toStringOrEmpty(cookie.path) || void 0,
2477
+ expires: readOptionalRouteFiniteNumber(cookie.expires, "cookie.expires"),
2478
+ httpOnly: toBoolean(cookie.httpOnly) ?? void 0,
2479
+ secure: toBoolean(cookie.secure) ?? void 0,
2480
+ sameSite: cookie.sameSite === "Lax" || cookie.sameSite === "None" || cookie.sameSite === "Strict" ? cookie.sameSite : void 0
2481
+ };
2482
+ }
2483
+ function parseGeolocationOptions(body) {
2484
+ const clear = toBoolean(body.clear) ?? false;
2485
+ const origin = toStringOrEmpty(body.origin) || void 0;
2486
+ if (clear) return {
2487
+ clear,
2488
+ origin
2489
+ };
2490
+ const latitude = assertRange(readRouteFiniteNumber(body.latitude, "latitude"), "latitude", -90, 90);
2491
+ const longitude = assertRange(readRouteFiniteNumber(body.longitude, "longitude"), "longitude", -180, 180);
2492
+ const accuracy = readRouteFiniteNumber(body.accuracy, "accuracy");
2493
+ if (accuracy !== void 0 && accuracy < 0) throw new Error("精度不能为负数");
2494
+ if (!clear && (latitude === void 0 || longitude === void 0)) throw new Error("latitude and longitude are required (or set clear=true)");
2495
+ return {
2496
+ clear,
2497
+ latitude,
2498
+ longitude,
2499
+ accuracy,
2500
+ origin
2501
+ };
2502
+ }
2503
+ function registerBrowserAgentStorageRoutes(app, ctx) {
2504
+ app.get("/cookies", asyncBrowserRoute(async (req, res) => {
2505
+ await withPlaywrightRouteContext({
2506
+ req,
2507
+ res,
2508
+ ctx,
2509
+ targetId: resolveTargetIdFromQuery(req.query),
2510
+ feature: "cookies",
2511
+ enforceCurrentUrlAllowed: true,
2512
+ run: async ({ cdpUrl, tab, pw }) => {
2513
+ const result = await pw.cookiesGetViaPlaywright({
2514
+ cdpUrl,
2515
+ targetId: tab.targetId
2516
+ });
2517
+ res.json({
2518
+ ok: true,
2519
+ targetId: tab.targetId,
2520
+ ...result
2521
+ });
2522
+ }
2523
+ });
2524
+ }));
2525
+ app.post("/cookies/set", asyncBrowserRoute(async (req, res) => {
2526
+ const body = readBody(req);
2527
+ const targetId = resolveTargetIdFromBody(body);
2528
+ const cookie = body.cookie && typeof body.cookie === "object" && !Array.isArray(body.cookie) ? body.cookie : null;
2529
+ if (!cookie) return jsonError(res, 400, "cookie is required");
2530
+ let parsedCookie;
2531
+ try {
2532
+ parsedCookie = parseCookieSetOptions(cookie);
2533
+ } catch (err) {
2534
+ return jsonError(res, 400, formatErrorMessage(err));
2535
+ }
2536
+ await withPlaywrightRouteContext({
2537
+ req,
2538
+ res,
2539
+ ctx,
2540
+ targetId,
2541
+ feature: "cookies set",
2542
+ run: async ({ cdpUrl, tab, pw }) => {
2543
+ await pw.cookiesSetViaPlaywright({
2544
+ cdpUrl,
2545
+ targetId: tab.targetId,
2546
+ cookie: parsedCookie
2547
+ });
2548
+ res.json({
2549
+ ok: true,
2550
+ targetId: tab.targetId
2551
+ });
2552
+ }
2553
+ });
2554
+ }));
2555
+ app.post("/cookies/clear", asyncBrowserRoute(async (req, res) => {
2556
+ await withPlaywrightRouteContext({
2557
+ req,
2558
+ res,
2559
+ ctx,
2560
+ targetId: resolveTargetIdFromBody(readBody(req)),
2561
+ feature: "cookies clear",
2562
+ run: async ({ cdpUrl, tab, pw }) => {
2563
+ await pw.cookiesClearViaPlaywright({
2564
+ cdpUrl,
2565
+ targetId: tab.targetId
2566
+ });
2567
+ res.json({
2568
+ ok: true,
2569
+ targetId: tab.targetId
2570
+ });
2571
+ }
2572
+ });
2573
+ }));
2574
+ app.get("/storage/:kind", asyncBrowserRoute(async (req, res) => {
2575
+ const kind = parseStorageKind(toStringOrEmpty(req.params.kind));
2576
+ if (!kind) return jsonError(res, 400, "kind must be local|session");
2577
+ const targetId = resolveTargetIdFromQuery(req.query);
2578
+ const key = toStringOrEmpty(req.query.key);
2579
+ await withPlaywrightRouteContext({
2580
+ req,
2581
+ res,
2582
+ ctx,
2583
+ targetId,
2584
+ feature: "storage get",
2585
+ enforceCurrentUrlAllowed: true,
2586
+ run: async ({ cdpUrl, tab, pw }) => {
2587
+ const result = await pw.storageGetViaPlaywright({
2588
+ cdpUrl,
2589
+ targetId: tab.targetId,
2590
+ kind,
2591
+ key: normalizeOptionalString$1(key)
2592
+ });
2593
+ res.json({
2594
+ ok: true,
2595
+ targetId: tab.targetId,
2596
+ ...result
2597
+ });
2598
+ }
2599
+ });
2600
+ }));
2601
+ app.post("/storage/:kind/set", asyncBrowserRoute(async (req, res) => {
2602
+ const mutation = parseStorageMutationFromRequest(req, res);
2603
+ if (!mutation) return;
2604
+ const key = toStringOrEmpty(mutation.body.key);
2605
+ if (!key) return jsonError(res, 400, "key is required");
2606
+ const value = typeof mutation.body.value === "string" ? mutation.body.value : "";
2607
+ await withPlaywrightRouteContext({
2608
+ req,
2609
+ res,
2610
+ ctx,
2611
+ targetId: mutation.parsed.targetId,
2612
+ feature: "storage set",
2613
+ run: async ({ cdpUrl, tab, pw }) => {
2614
+ await pw.storageSetViaPlaywright({
2615
+ cdpUrl,
2616
+ targetId: tab.targetId,
2617
+ kind: mutation.parsed.kind,
2618
+ key,
2619
+ value
2620
+ });
2621
+ res.json({
2622
+ ok: true,
2623
+ targetId: tab.targetId
2624
+ });
2625
+ }
2626
+ });
2627
+ }));
2628
+ app.post("/storage/:kind/clear", asyncBrowserRoute(async (req, res) => {
2629
+ const mutation = parseStorageMutationFromRequest(req, res);
2630
+ if (!mutation) return;
2631
+ await withPlaywrightRouteContext({
2632
+ req,
2633
+ res,
2634
+ ctx,
2635
+ targetId: mutation.parsed.targetId,
2636
+ feature: "storage clear",
2637
+ run: async ({ cdpUrl, tab, pw }) => {
2638
+ await pw.storageClearViaPlaywright({
2639
+ cdpUrl,
2640
+ targetId: tab.targetId,
2641
+ kind: mutation.parsed.kind
2642
+ });
2643
+ res.json({
2644
+ ok: true,
2645
+ targetId: tab.targetId
2646
+ });
2647
+ }
2648
+ });
2649
+ }));
2650
+ app.post("/set/offline", asyncBrowserRoute(async (req, res) => {
2651
+ const body = readBody(req);
2652
+ const targetId = resolveTargetIdFromBody(body);
2653
+ const offline = toBoolean(body.offline);
2654
+ if (offline === void 0) return jsonError(res, 400, "offline is required");
2655
+ await withPlaywrightRouteContext({
2656
+ req,
2657
+ res,
2658
+ ctx,
2659
+ targetId,
2660
+ feature: "offline",
2661
+ run: async ({ cdpUrl, tab, pw }) => {
2662
+ await pw.setOfflineViaPlaywright({
2663
+ cdpUrl,
2664
+ targetId: tab.targetId,
2665
+ offline
2666
+ });
2667
+ res.json({
2668
+ ok: true,
2669
+ targetId: tab.targetId
2670
+ });
2671
+ }
2672
+ });
2673
+ }));
2674
+ app.post("/set/headers", asyncBrowserRoute(async (req, res) => {
2675
+ const body = readBody(req);
2676
+ const targetId = resolveTargetIdFromBody(body);
2677
+ const headers = body.headers && typeof body.headers === "object" && !Array.isArray(body.headers) ? body.headers : null;
2678
+ if (!headers) return jsonError(res, 400, "headers is required");
2679
+ const parsed = {};
2680
+ for (const [k, v] of Object.entries(headers)) if (typeof v === "string") parsed[k] = v;
2681
+ await withPlaywrightRouteContext({
2682
+ req,
2683
+ res,
2684
+ ctx,
2685
+ targetId,
2686
+ feature: "headers",
2687
+ run: async ({ cdpUrl, tab, pw }) => {
2688
+ await pw.setExtraHTTPHeadersViaPlaywright({
2689
+ cdpUrl,
2690
+ targetId: tab.targetId,
2691
+ headers: parsed
2692
+ });
2693
+ res.json({
2694
+ ok: true,
2695
+ targetId: tab.targetId
2696
+ });
2697
+ }
2698
+ });
2699
+ }));
2700
+ app.post("/set/credentials", asyncBrowserRoute(async (req, res) => {
2701
+ const body = readBody(req);
2702
+ const targetId = resolveTargetIdFromBody(body);
2703
+ const clear = toBoolean(body.clear) ?? false;
2704
+ const username = toStringOrEmpty(body.username) || void 0;
2705
+ const password = readStringValue(body.password);
2706
+ await withPlaywrightRouteContext({
2707
+ req,
2708
+ res,
2709
+ ctx,
2710
+ targetId,
2711
+ feature: "http credentials",
2712
+ run: async ({ cdpUrl, tab, pw }) => {
2713
+ await pw.setHttpCredentialsViaPlaywright({
2714
+ cdpUrl,
2715
+ targetId: tab.targetId,
2716
+ username,
2717
+ password,
2718
+ clear
2719
+ });
2720
+ res.json({
2721
+ ok: true,
2722
+ targetId: tab.targetId
2723
+ });
2724
+ }
2725
+ });
2726
+ }));
2727
+ app.post("/set/geolocation", asyncBrowserRoute(async (req, res) => {
2728
+ const body = readBody(req);
2729
+ const targetId = resolveTargetIdFromBody(body);
2730
+ let geolocation;
2731
+ try {
2732
+ geolocation = parseGeolocationOptions(body);
2733
+ } catch (err) {
2734
+ return jsonError(res, 400, formatErrorMessage(err));
2735
+ }
2736
+ await withPlaywrightRouteContext({
2737
+ req,
2738
+ res,
2739
+ ctx,
2740
+ targetId,
2741
+ feature: "geolocation",
2742
+ run: async ({ cdpUrl, tab, pw }) => {
2743
+ await pw.setGeolocationViaPlaywright({
2744
+ cdpUrl,
2745
+ targetId: tab.targetId,
2746
+ ...geolocation
2747
+ });
2748
+ res.json({
2749
+ ok: true,
2750
+ targetId: tab.targetId
2751
+ });
2752
+ }
2753
+ });
2754
+ }));
2755
+ app.post("/set/media", asyncBrowserRoute(async (req, res) => {
2756
+ const body = readBody(req);
2757
+ const targetId = resolveTargetIdFromBody(body);
2758
+ const schemeRaw = toStringOrEmpty(body.colorScheme);
2759
+ const colorScheme = schemeRaw === "dark" || schemeRaw === "light" || schemeRaw === "no-preference" ? schemeRaw : schemeRaw === "none" ? null : void 0;
2760
+ if (colorScheme === void 0) return jsonError(res, 400, "colorScheme must be dark|light|no-preference|none");
2761
+ await withPlaywrightRouteContext({
2762
+ req,
2763
+ res,
2764
+ ctx,
2765
+ targetId,
2766
+ feature: "media emulation",
2767
+ run: async ({ cdpUrl, tab, pw }) => {
2768
+ await pw.emulateMediaViaPlaywright({
2769
+ cdpUrl,
2770
+ targetId: tab.targetId,
2771
+ colorScheme
2772
+ });
2773
+ res.json({
2774
+ ok: true,
2775
+ targetId: tab.targetId
2776
+ });
2777
+ }
2778
+ });
2779
+ }));
2780
+ app.post("/set/timezone", asyncBrowserRoute(async (req, res) => {
2781
+ const body = readBody(req);
2782
+ const targetId = resolveTargetIdFromBody(body);
2783
+ const timezoneId = toStringOrEmpty(body.timezoneId);
2784
+ if (!timezoneId) return jsonError(res, 400, "timezoneId is required");
2785
+ await withPlaywrightRouteContext({
2786
+ req,
2787
+ res,
2788
+ ctx,
2789
+ targetId,
2790
+ feature: "timezone",
2791
+ run: async ({ cdpUrl, tab, pw }) => {
2792
+ await pw.setTimezoneViaPlaywright({
2793
+ cdpUrl,
2794
+ targetId: tab.targetId,
2795
+ timezoneId
2796
+ });
2797
+ res.json({
2798
+ ok: true,
2799
+ targetId: tab.targetId
2800
+ });
2801
+ }
2802
+ });
2803
+ }));
2804
+ app.post("/set/locale", asyncBrowserRoute(async (req, res) => {
2805
+ const body = readBody(req);
2806
+ const targetId = resolveTargetIdFromBody(body);
2807
+ const locale = toStringOrEmpty(body.locale);
2808
+ if (!locale) return jsonError(res, 400, "locale is required");
2809
+ await withPlaywrightRouteContext({
2810
+ req,
2811
+ res,
2812
+ ctx,
2813
+ targetId,
2814
+ feature: "locale",
2815
+ run: async ({ cdpUrl, tab, pw }) => {
2816
+ await pw.setLocaleViaPlaywright({
2817
+ cdpUrl,
2818
+ targetId: tab.targetId,
2819
+ locale
2820
+ });
2821
+ res.json({
2822
+ ok: true,
2823
+ targetId: tab.targetId
2824
+ });
2825
+ }
2826
+ });
2827
+ }));
2828
+ app.post("/set/device", asyncBrowserRoute(async (req, res) => {
2829
+ const body = readBody(req);
2830
+ const targetId = resolveTargetIdFromBody(body);
2831
+ const name = toStringOrEmpty(body.name);
2832
+ if (!name) return jsonError(res, 400, "name is required");
2833
+ await withPlaywrightRouteContext({
2834
+ req,
2835
+ res,
2836
+ ctx,
2837
+ targetId,
2838
+ feature: "device emulation",
2839
+ run: async ({ cdpUrl, tab, pw }) => {
2840
+ await pw.setDeviceViaPlaywright({
2841
+ cdpUrl,
2842
+ targetId: tab.targetId,
2843
+ name
2844
+ });
2845
+ res.json({
2846
+ ok: true,
2847
+ targetId: tab.targetId
2848
+ });
2849
+ }
2850
+ });
2851
+ }));
2852
+ }
2853
+ //#endregion
2854
+ //#region extensions/browser/src/browser/routes/agent.ts
2855
+ function registerBrowserAgentRoutes(app, ctx) {
2856
+ registerBrowserAgentSnapshotRoutes(app, ctx);
2857
+ registerBrowserAgentActRoutes(app, ctx);
2858
+ registerBrowserAgentDebugRoutes(app, ctx);
2859
+ registerBrowserAgentStorageRoutes(app, ctx);
2860
+ }
2861
+ //#endregion
2862
+ //#region extensions/browser/src/browser/doctor.ts
2863
+ function buildBrowserDoctorReport(params) {
2864
+ const status = params.status;
2865
+ const checks = [];
2866
+ const transport = status.transport === "chrome-mcp" ? "chrome-mcp" : "cdp";
2867
+ checks.push({
2868
+ id: "plugin-enabled",
2869
+ label: "Browser plugin",
2870
+ status: status.enabled ? "pass" : "fail",
2871
+ summary: status.enabled ? "enabled" : "disabled",
2872
+ ...status.enabled ? {} : { fixHint: "Enable the browser plugin and restart the Gateway." }
2873
+ });
2874
+ checks.push({
2875
+ id: "profile",
2876
+ label: "Profile",
2877
+ status: "pass",
2878
+ summary: `${status.profile ?? "fengming"} via ${transport}`
2879
+ });
2880
+ if (transport === "chrome-mcp") checks.push({
2881
+ id: "attach-target",
2882
+ label: "Existing browser attach",
2883
+ status: status.running ? "pass" : "fail",
2884
+ summary: status.running ? "Chrome MCP target is reachable" : "Chrome MCP target is not reachable",
2885
+ ...status.running ? {} : { fixHint: "Keep the matching Chromium browser running, enable remote debugging in chrome://inspect, and accept the attach prompt." }
2886
+ });
2887
+ else {
2888
+ checks.push({
2889
+ id: "managed-executable",
2890
+ label: "Chromium executable",
2891
+ status: status.detectError ? "fail" : status.detectedExecutablePath ? "pass" : "warn",
2892
+ summary: status.detectError ? status.detectError : status.detectedExecutablePath ? `${status.detectedBrowser ?? "chromium"} at ${status.detectedExecutablePath}` : "No Chromium executable detected",
2893
+ ...status.detectedExecutablePath || status.detectError ? {} : { fixHint: "Install Chrome/Chromium/Brave/Edge or set browser.executablePath." }
2894
+ });
2895
+ const platform = params.platform ?? process.platform;
2896
+ const env = params.env ?? process.env;
2897
+ const uid = params.uid ?? process.getuid?.();
2898
+ const missingDisplay = platform === "linux" && !status.headless && !env.DISPLAY && !env.WAYLAND_DISPLAY;
2899
+ if (status.headlessSource === "linux-display-fallback") checks.push({
2900
+ id: "headless-mode",
2901
+ label: "Headless mode",
2902
+ status: "pass",
2903
+ summary: "Linux no-display fallback selected headless mode"
2904
+ });
2905
+ if (missingDisplay) checks.push({
2906
+ id: "display",
2907
+ label: "Display",
2908
+ status: "warn",
2909
+ summary: `No DISPLAY or WAYLAND_DISPLAY is set while headed mode is selected (${status.headlessSource ?? "unknown"})`,
2910
+ fixHint: "Use a desktop session, Xvfb, set FENGMING_BROWSER_HEADLESS=1, or remove the headed override."
2911
+ });
2912
+ if (platform === "linux" && uid === 0 && !status.noSandbox) checks.push({
2913
+ id: "linux-sandbox",
2914
+ label: "Linux sandbox",
2915
+ status: "warn",
2916
+ summary: "Gateway is running as root while browser.noSandbox is false",
2917
+ fixHint: "Set browser.noSandbox: true for container/root Chromium runtimes."
2918
+ });
2919
+ checks.push({
2920
+ id: "cdp-http",
2921
+ label: "CDP HTTP",
2922
+ status: status.cdpHttp ? "pass" : status.running ? "fail" : "info",
2923
+ summary: status.cdpHttp ? "CDP HTTP endpoint is reachable" : status.running ? "CDP HTTP endpoint is not reachable" : "Browser is not currently running",
2924
+ ...status.cdpHttp || !status.running ? {} : { fixHint: "Run fengming browser start or inspect browser.cdpUrl/CDP port reachability." }
2925
+ });
2926
+ checks.push({
2927
+ id: "cdp-websocket",
2928
+ label: "CDP WebSocket",
2929
+ status: status.cdpReady ? "pass" : status.running ? "fail" : "info",
2930
+ summary: status.cdpReady ? "CDP WebSocket is reachable" : status.running ? "CDP WebSocket is not reachable" : "Browser is launchable but not running",
2931
+ ...status.cdpReady || !status.running ? {} : { fixHint: "Check Chrome launch logs, stale locks, proxy env, and port conflicts." }
2932
+ });
2933
+ }
2934
+ return {
2935
+ ok: checks.every((check) => check.status !== "fail"),
2936
+ profile: status.profile ?? "fengming",
2937
+ transport,
2938
+ checks,
2939
+ status
2940
+ };
2941
+ }
2942
+ //#endregion
2943
+ //#region extensions/browser/src/browser/profiles-service.ts
2944
+ const HEX_COLOR_RE = /^#[0-9A-Fa-f]{6}$/;
2945
+ function createBrowserProfilesService(ctx) {
2946
+ const listProfiles = async () => {
2947
+ return await ctx.listProfiles();
2948
+ };
2949
+ const createProfile = async (params) => {
2950
+ const name = params.name.trim();
2951
+ const rawCdpUrl = normalizeOptionalString$1(params.cdpUrl);
2952
+ const rawUserDataDir = normalizeOptionalString$1(params.userDataDir);
2953
+ const normalizedUserDataDir = rawUserDataDir ? resolveUserPath(rawUserDataDir) : void 0;
2954
+ const driver = params.driver === "existing-session" ? "existing-session" : void 0;
2955
+ if (!isValidProfileName(name)) throw new BrowserValidationError("invalid profile name: use lowercase letters, numbers, and hyphens only");
2956
+ const state = ctx.state();
2957
+ if (name in state.resolved.profiles) throw new BrowserConflictError(`profile "${name}" already exists`);
2958
+ if (name in (getRuntimeConfig().browser?.profiles ?? {})) throw new BrowserConflictError(`profile "${name}" already exists`);
2959
+ const explicitProfileColor = params.color && HEX_COLOR_RE.test(params.color) ? params.color : void 0;
2960
+ let parsedCdpUrl;
2961
+ if (normalizedUserDataDir && driver !== "existing-session") throw new BrowserValidationError("driver=existing-session is required when userDataDir is provided");
2962
+ if (normalizedUserDataDir && !fs.existsSync(normalizedUserDataDir)) throw new BrowserValidationError(`browser user data directory not found: ${normalizedUserDataDir}`);
2963
+ if (rawCdpUrl) {
2964
+ if (driver === "existing-session") throw new BrowserValidationError("driver=existing-session does not accept cdpUrl; it attaches via the Chrome MCP auto-connect flow");
2965
+ let parsed;
2966
+ try {
2967
+ parsed = parseBrowserHttpUrl(rawCdpUrl, "browser.profiles.cdpUrl");
2968
+ await assertCdpEndpointAllowed(parsed.normalized, state.resolved.ssrfPolicy);
2969
+ } catch (err) {
2970
+ throw new BrowserValidationError(formatErrorMessage(err));
2971
+ }
2972
+ parsedCdpUrl = parsed.normalized;
2973
+ }
2974
+ const profileConfig = await createBrowserProfileConfig({
2975
+ name,
2976
+ resolved: state.resolved,
2977
+ ...explicitProfileColor ? { color: explicitProfileColor } : {},
2978
+ ...parsedCdpUrl ? { parsedCdpUrl } : {},
2979
+ ...normalizedUserDataDir ? { userDataDir: normalizedUserDataDir } : {},
2980
+ ...driver ? { driver } : {}
2981
+ });
2982
+ if (!profileConfig) throw new BrowserProfileNotFoundError(`profile "${name}" not found after creation`);
2983
+ state.resolved.profiles[name] = profileConfig;
2984
+ const resolved = resolveProfile(state.resolved, name);
2985
+ if (!resolved) throw new BrowserProfileNotFoundError(`profile "${name}" not found after creation`);
2986
+ const capabilities = getBrowserProfileCapabilities(resolved);
2987
+ return {
2988
+ ok: true,
2989
+ profile: name,
2990
+ transport: capabilities.usesChromeMcp ? "chrome-mcp" : "cdp",
2991
+ cdpPort: capabilities.usesChromeMcp ? null : resolved.cdpPort,
2992
+ cdpUrl: capabilities.usesChromeMcp ? null : resolved.cdpUrl,
2993
+ userDataDir: resolved.userDataDir ?? null,
2994
+ color: resolved.color,
2995
+ isRemote: !resolved.cdpIsLoopback
2996
+ };
2997
+ };
2998
+ const deleteProfile = async (nameRaw) => {
2999
+ const name = nameRaw.trim();
3000
+ if (!name) throw new BrowserValidationError("profile name is required");
3001
+ if (!isValidProfileName(name)) throw new BrowserValidationError("invalid profile name");
3002
+ const state = ctx.state();
3003
+ const cfg = getRuntimeConfig();
3004
+ const profiles = cfg.browser?.profiles ?? {};
3005
+ if (name === (cfg.browser?.defaultProfile ?? state.resolved.defaultProfile)) throw new BrowserValidationError(`cannot delete the default profile "${name}"; change browser.defaultProfile first`);
3006
+ if (!(name in profiles)) throw new BrowserProfileNotFoundError(`profile "${name}" not found`);
3007
+ let deleted = false;
3008
+ const resolved = resolveProfile(state.resolved, name);
3009
+ if (resolved?.cdpIsLoopback && resolved.driver === "fengming") {
3010
+ try {
3011
+ await ctx.forProfile(name).stopRunningBrowser();
3012
+ } catch {}
3013
+ const userDataDir = resolveFengMingUserDataDir(name);
3014
+ const profileDir = path.dirname(userDataDir);
3015
+ if (fs.existsSync(profileDir)) {
3016
+ await movePathToTrash(profileDir);
3017
+ deleted = true;
3018
+ }
3019
+ }
3020
+ await deleteBrowserProfileConfig(name);
3021
+ delete state.resolved.profiles[name];
3022
+ state.profiles.delete(name);
3023
+ return {
3024
+ ok: true,
3025
+ profile: name,
3026
+ deleted
3027
+ };
3028
+ };
3029
+ return {
3030
+ listProfiles,
3031
+ createProfile,
3032
+ deleteProfile
3033
+ };
3034
+ }
3035
+ //#endregion
3036
+ //#region extensions/browser/src/browser/routes/basic.ts
3037
+ const STATUS_CDP_HTTP_TIMEOUT_MS = 300;
3038
+ const STATUS_CDP_TRANSPORT_TIMEOUT_MS = 600;
3039
+ const STATUS_CHROME_MCP_TOTAL_TIMEOUT_MS = 7e3;
3040
+ const STATUS_CHROME_MCP_TRANSPORT_TIMEOUT_MS = 5e3;
3041
+ function remainingChromeMcpStatusTimeoutMs(startedAtMs) {
3042
+ return Math.max(1, STATUS_CHROME_MCP_TOTAL_TIMEOUT_MS - (Date.now() - startedAtMs));
3043
+ }
3044
+ async function probeChromeMcpPageReady(profileCtx, timeoutMs) {
3045
+ const abort = new AbortController();
3046
+ const timer = setTimeout(() => {
3047
+ abort.abort(/* @__PURE__ */ new Error(`Chrome MCP page-readiness probe timed out after ${timeoutMs}ms.`));
3048
+ }, timeoutMs);
3049
+ try {
3050
+ return await profileCtx.isReachable(timeoutMs, {
3051
+ ephemeral: true,
3052
+ signal: abort.signal
3053
+ });
3054
+ } catch {
3055
+ return false;
3056
+ } finally {
3057
+ clearTimeout(timer);
3058
+ }
3059
+ }
3060
+ function handleBrowserRouteError(res, err) {
3061
+ const mapped = toBrowserErrorResponse(err);
3062
+ if (mapped) return jsonError(res, mapped.status, mapped.message);
3063
+ jsonError(res, 500, String(err));
3064
+ }
3065
+ async function sendBasicJsonResponse(params) {
3066
+ try {
3067
+ params.res.json(await params.run());
3068
+ } catch (err) {
3069
+ return handleBrowserRouteError(params.res, err);
3070
+ }
3071
+ }
3072
+ async function withBasicProfileRoute(params) {
3073
+ const profileCtx = resolveProfileContext(params.req, params.res, params.ctx);
3074
+ if (!profileCtx) return;
3075
+ try {
3076
+ await params.run(profileCtx);
3077
+ } catch (err) {
3078
+ return handleBrowserRouteError(params.res, err);
3079
+ }
3080
+ }
3081
+ function registerBasicProfilePost(app, ctx, path, run) {
3082
+ app.post(path, asyncBrowserRoute(async (req, res) => {
3083
+ await withBasicProfileRoute({
3084
+ req,
3085
+ res,
3086
+ ctx,
3087
+ run: async (profileCtx) => await run({
3088
+ req,
3089
+ res,
3090
+ profileCtx
3091
+ })
3092
+ });
3093
+ }));
3094
+ }
3095
+ async function withProfilesServiceMutation(params) {
3096
+ try {
3097
+ const service = createBrowserProfilesService(params.ctx);
3098
+ const result = await params.run(service);
3099
+ params.res.json(result);
3100
+ } catch (err) {
3101
+ return handleBrowserRouteError(params.res, err);
3102
+ }
3103
+ }
3104
+ async function buildBrowserStatus(req, ctx) {
3105
+ let current;
3106
+ try {
3107
+ current = ctx.state();
3108
+ } catch {
3109
+ throw new BrowserError("browser server not started", 503);
3110
+ }
3111
+ const profileCtx = getProfileContext(req, ctx);
3112
+ if ("error" in profileCtx) throw new BrowserError(profileCtx.error, profileCtx.status);
3113
+ const capabilities = getBrowserProfileCapabilities(profileCtx.profile);
3114
+ const [cdpHttp, cdpReady, pageReady] = capabilities.usesChromeMcp ? await (async () => {
3115
+ const statusStartedAtMs = Date.now();
3116
+ const transportReady = await profileCtx.isTransportAvailable(STATUS_CHROME_MCP_TRANSPORT_TIMEOUT_MS);
3117
+ if (!transportReady) return [
3118
+ false,
3119
+ false,
3120
+ false
3121
+ ];
3122
+ return [
3123
+ transportReady,
3124
+ transportReady,
3125
+ await probeChromeMcpPageReady(profileCtx, remainingChromeMcpStatusTimeoutMs(statusStartedAtMs))
3126
+ ];
3127
+ })() : await (async () => {
3128
+ const [http, ready] = await Promise.all([profileCtx.isHttpReachable(STATUS_CDP_HTTP_TIMEOUT_MS), profileCtx.isTransportAvailable(STATUS_CDP_TRANSPORT_TIMEOUT_MS)]);
3129
+ return [
3130
+ http,
3131
+ ready,
3132
+ ready
3133
+ ];
3134
+ })();
3135
+ const profileState = current.profiles.get(profileCtx.profile.name);
3136
+ let detectedBrowser = null;
3137
+ let detectedExecutablePath = null;
3138
+ let detectError = null;
3139
+ try {
3140
+ const detected = resolveBrowserExecutableForPlatform(current.resolved, process.platform);
3141
+ if (detected) {
3142
+ detectedBrowser = detected.kind;
3143
+ detectedExecutablePath = detected.path;
3144
+ }
3145
+ } catch (err) {
3146
+ detectError = String(err);
3147
+ }
3148
+ const configuredHeadlessMode = resolveManagedBrowserHeadlessMode(current.resolved, profileCtx.profile);
3149
+ const headlessMode = typeof profileState?.running?.headless === "boolean" ? {
3150
+ headless: profileState.running.headless,
3151
+ source: profileState.running.headlessSource ?? configuredHeadlessMode.source
3152
+ } : configuredHeadlessMode;
3153
+ return {
3154
+ enabled: current.resolved.enabled,
3155
+ profile: profileCtx.profile.name,
3156
+ driver: profileCtx.profile.driver,
3157
+ transport: capabilities.usesChromeMcp ? "chrome-mcp" : "cdp",
3158
+ running: cdpReady,
3159
+ cdpReady,
3160
+ cdpHttp,
3161
+ pageReady,
3162
+ pid: capabilities.usesChromeMcp ? getChromeMcpPid(profileCtx.profile.name) : profileState?.running?.pid ?? null,
3163
+ cdpPort: capabilities.usesChromeMcp ? null : profileCtx.profile.cdpPort,
3164
+ cdpUrl: capabilities.usesChromeMcp ? null : redactCdpUrl(profileCtx.profile.cdpUrl) ?? null,
3165
+ chosenBrowser: profileState?.running?.exe.kind ?? null,
3166
+ detectedBrowser,
3167
+ detectedExecutablePath,
3168
+ detectError,
3169
+ userDataDir: profileState?.running?.userDataDir ?? profileCtx.profile.userDataDir ?? null,
3170
+ color: profileCtx.profile.color,
3171
+ headless: headlessMode.headless,
3172
+ headlessSource: headlessMode.source,
3173
+ noSandbox: current.resolved.noSandbox,
3174
+ executablePath: profileCtx.profile.executablePath ?? null,
3175
+ attachOnly: profileCtx.profile.attachOnly
3176
+ };
3177
+ }
3178
+ async function runBrowserLiveProbe(req, ctx) {
3179
+ const profileCtx = getProfileContext(req, ctx);
3180
+ if ("error" in profileCtx) return {
3181
+ id: "live-snapshot",
3182
+ label: "Live snapshot",
3183
+ status: "fail",
3184
+ summary: profileCtx.error
3185
+ };
3186
+ const capabilities = getBrowserProfileCapabilities(profileCtx.profile);
3187
+ try {
3188
+ const tab = await profileCtx.ensureTabAvailable();
3189
+ if (capabilities.usesChromeMcp) {
3190
+ const { takeChromeMcpSnapshot } = await import("./chrome-mcp-BGKgR8A_.js");
3191
+ await takeChromeMcpSnapshot({
3192
+ profileName: profileCtx.profile.name,
3193
+ profile: profileCtx.profile,
3194
+ targetId: tab.targetId
3195
+ });
3196
+ return {
3197
+ id: "live-snapshot",
3198
+ label: "Live snapshot",
3199
+ status: "pass",
3200
+ summary: `Chrome MCP snapshot succeeded on ${tab.suggestedTargetId ?? tab.targetId}`
3201
+ };
3202
+ }
3203
+ if (!tab.wsUrl) return {
3204
+ id: "live-snapshot",
3205
+ label: "Live snapshot",
3206
+ status: "warn",
3207
+ summary: "No per-tab CDP WebSocket available for the lightweight live snapshot probe"
3208
+ };
3209
+ const snap = await snapshotAria({
3210
+ wsUrl: tab.wsUrl,
3211
+ limit: 25
3212
+ });
3213
+ return {
3214
+ id: "live-snapshot",
3215
+ label: "Live snapshot",
3216
+ status: snap.nodes.length > 0 ? "pass" : "warn",
3217
+ summary: snap.nodes.length > 0 ? `CDP accessibility snapshot returned ${snap.nodes.length} nodes on ${tab.suggestedTargetId ?? tab.targetId}` : `CDP accessibility snapshot returned no nodes on ${tab.suggestedTargetId ?? tab.targetId}`
3218
+ };
3219
+ } catch (err) {
3220
+ return {
3221
+ id: "live-snapshot",
3222
+ label: "Live snapshot",
3223
+ status: "fail",
3224
+ summary: String(err),
3225
+ fixHint: "Run fengming browser start, then retry with fengming browser doctor --deep."
3226
+ };
3227
+ }
3228
+ }
3229
+ function hasQueryKey(query, key) {
3230
+ return Object.prototype.hasOwnProperty.call(query ?? {}, key);
3231
+ }
3232
+ function parseHeadlessStartOverride(params) {
3233
+ if (!hasQueryKey(params.req.query, "headless")) return { ok: true };
3234
+ const headless = toBoolean(params.req.query.headless);
3235
+ if (typeof headless !== "boolean") {
3236
+ jsonError(params.res, 400, "Invalid headless value. Use \"true\" or \"false\".");
3237
+ return { ok: false };
3238
+ }
3239
+ const capabilities = getBrowserProfileCapabilities(params.profileCtx.profile);
3240
+ if (params.profileCtx.profile.driver !== "fengming" || params.profileCtx.profile.attachOnly || capabilities.isRemote) {
3241
+ jsonError(params.res, 400, `Headless start override is only supported for locally launched fengming profiles. Profile "${params.profileCtx.profile.name}" is attach-only, remote, or existing-session.`);
3242
+ return { ok: false };
3243
+ }
3244
+ return {
3245
+ ok: true,
3246
+ headless
3247
+ };
3248
+ }
3249
+ function registerBrowserBasicRoutes(app, ctx) {
3250
+ app.get("/profiles", asyncBrowserRoute(async (_req, res) => {
3251
+ try {
3252
+ const profiles = await createBrowserProfilesService(ctx).listProfiles();
3253
+ res.json({ profiles });
3254
+ } catch (err) {
3255
+ jsonError(res, 500, String(err));
3256
+ }
3257
+ }));
3258
+ app.get("/", asyncBrowserRoute(async (req, res) => {
3259
+ await sendBasicJsonResponse({
3260
+ res,
3261
+ run: async () => await buildBrowserStatus(req, ctx)
3262
+ });
3263
+ }));
3264
+ app.get("/doctor", asyncBrowserRoute(async (req, res) => {
3265
+ await sendBasicJsonResponse({
3266
+ res,
3267
+ run: async () => {
3268
+ const report = buildBrowserDoctorReport({ status: await buildBrowserStatus(req, ctx) });
3269
+ if (toBoolean(req.query.deep) === true || toBoolean(req.query.live) === true) {
3270
+ report.checks.push(await runBrowserLiveProbe(req, ctx));
3271
+ report.ok = report.checks.every((check) => check.status !== "fail");
3272
+ }
3273
+ return report;
3274
+ }
3275
+ });
3276
+ }));
3277
+ registerBasicProfilePost(app, ctx, "/start", async ({ req, res, profileCtx }) => {
3278
+ const headlessOverride = parseHeadlessStartOverride({
3279
+ req,
3280
+ res,
3281
+ profileCtx
3282
+ });
3283
+ if (!headlessOverride.ok) return;
3284
+ await profileCtx.ensureBrowserAvailable({ headless: headlessOverride.headless });
3285
+ res.json({
3286
+ ok: true,
3287
+ profile: profileCtx.profile.name
3288
+ });
3289
+ });
3290
+ registerBasicProfilePost(app, ctx, "/stop", async ({ res, profileCtx }) => {
3291
+ const result = await profileCtx.stopRunningBrowser();
3292
+ res.json({
3293
+ ok: true,
3294
+ stopped: result.stopped,
3295
+ profile: profileCtx.profile.name
3296
+ });
3297
+ });
3298
+ registerBasicProfilePost(app, ctx, "/reset-profile", async ({ res, profileCtx }) => {
3299
+ const result = await profileCtx.resetProfile();
3300
+ res.json({
3301
+ ok: true,
3302
+ profile: profileCtx.profile.name,
3303
+ ...result
3304
+ });
3305
+ });
3306
+ app.post("/profiles/create", asyncBrowserRoute(async (req, res) => {
3307
+ const name = toStringOrEmpty(req.body?.name);
3308
+ const color = toStringOrEmpty(req.body?.color);
3309
+ const cdpUrl = toStringOrEmpty(req.body?.cdpUrl);
3310
+ const userDataDir = toStringOrEmpty(req.body?.userDataDir);
3311
+ const driver = toStringOrEmpty(req.body?.driver);
3312
+ if (!name) return jsonError(res, 400, "name is required");
3313
+ if (driver && driver !== "fengming" && driver !== "clawd" && driver !== "existing-session") return jsonError(res, 400, `unsupported profile driver "${driver}"; use "fengming", "clawd", or "existing-session"`);
3314
+ await withProfilesServiceMutation({
3315
+ res,
3316
+ ctx,
3317
+ run: async (service) => await service.createProfile({
3318
+ name,
3319
+ color: color || void 0,
3320
+ cdpUrl: cdpUrl || void 0,
3321
+ userDataDir: userDataDir || void 0,
3322
+ driver: driver === "existing-session" ? "existing-session" : driver === "fengming" || driver === "clawd" ? "fengming" : void 0
3323
+ })
3324
+ });
3325
+ }));
3326
+ app.delete("/profiles/:name", asyncBrowserRoute(async (req, res) => {
3327
+ const name = toStringOrEmpty(req.params.name);
3328
+ if (!name) return jsonError(res, 400, "profile name is required");
3329
+ await withProfilesServiceMutation({
3330
+ res,
3331
+ ctx,
3332
+ run: async (service) => await service.deleteProfile(name)
3333
+ });
3334
+ }));
3335
+ }
3336
+ //#endregion
3337
+ //#region extensions/browser/src/browser/routes/permissions.ts
3338
+ const permissionRouteDeps = { getPwAiModule: getPwAiModule$1 };
3339
+ function readOrigin(raw) {
3340
+ const value = toStringOrEmpty(raw);
3341
+ if (!value) return null;
3342
+ try {
3343
+ const parsed = new URL(value);
3344
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") return null;
3345
+ return parsed.origin;
3346
+ } catch {
3347
+ return null;
3348
+ }
3349
+ }
3350
+ function readPermissions(raw) {
3351
+ if (!Array.isArray(raw)) return null;
3352
+ const permissions = raw.map((value) => typeof value === "string" ? value.trim() : "").filter(Boolean);
3353
+ if (permissions.length !== raw.length) return null;
3354
+ return uniqueStrings(permissions);
3355
+ }
3356
+ async function grantPermissions(params) {
3357
+ const allPermissions = [...new Set([...params.requiredPermissions, ...params.optionalPermissions])];
3358
+ const playwrightRequiredPermissions = params.requiredPermissions.map(toPlaywrightPermission);
3359
+ if (playwrightRequiredPermissions.every((value) => Boolean(value)) && params.requiredPermissions.length > 0) {
3360
+ const pw = await permissionRouteDeps.getPwAiModule({ mode: "soft" });
3361
+ if (pw) try {
3362
+ await (await pw.getPageForTargetId({
3363
+ cdpUrl: params.profileCtx.profile.cdpUrl,
3364
+ targetId: params.targetId,
3365
+ ssrfPolicy: params.ssrfPolicy
3366
+ })).context().grantPermissions(playwrightRequiredPermissions, { origin: params.origin });
3367
+ return {
3368
+ grantedPermissions: params.requiredPermissions,
3369
+ unsupportedPermissions: params.optionalPermissions,
3370
+ grantMethod: "playwright"
3371
+ };
3372
+ } catch {}
3373
+ }
3374
+ let unsupportedPermissions = [];
3375
+ await withCdpSocket(params.wsUrl, async (send) => {
3376
+ try {
3377
+ await send("Browser.grantPermissions", {
3378
+ origin: params.origin,
3379
+ permissions: allPermissions
3380
+ });
3381
+ return;
3382
+ } catch (error) {
3383
+ if (params.optionalPermissions.length === 0) throw error;
3384
+ }
3385
+ await send("Browser.grantPermissions", {
3386
+ origin: params.origin,
3387
+ permissions: params.requiredPermissions
3388
+ });
3389
+ unsupportedPermissions = params.optionalPermissions;
3390
+ }, { commandTimeoutMs: params.timeoutMs });
3391
+ return {
3392
+ grantedPermissions: allPermissions.filter((value) => !unsupportedPermissions.includes(value)),
3393
+ unsupportedPermissions,
3394
+ grantMethod: "cdp"
3395
+ };
3396
+ }
3397
+ function toPlaywrightPermission(permission) {
3398
+ switch (permission) {
3399
+ case "audioCapture": return "microphone";
3400
+ case "videoCapture": return "camera";
3401
+ default: return;
3402
+ }
3403
+ }
3404
+ function registerBrowserPermissionRoutes(app, ctx) {
3405
+ app.post("/permissions/grant", asyncBrowserRoute(async (req, res) => {
3406
+ const profileCtx = getProfileContext(req, ctx);
3407
+ if ("error" in profileCtx) return jsonError(res, profileCtx.status, profileCtx.error);
3408
+ const body = req.body ?? {};
3409
+ const origin = readOrigin(body.origin);
3410
+ if (!origin) return jsonError(res, 400, "origin must be an http(s) origin");
3411
+ const requiredPermissions = readPermissions(body.permissions);
3412
+ if (!requiredPermissions || requiredPermissions.length === 0) return jsonError(res, 400, "permissions must be a non-empty string array");
3413
+ const optionalPermissions = readPermissions(body.optionalPermissions ?? []) ?? [];
3414
+ const targetId = toStringOrEmpty(body.targetId) || void 0;
3415
+ let timeoutMs;
3416
+ try {
3417
+ timeoutMs = readRouteTimerTimeoutMs(body.timeoutMs, "timeoutMs", { minMs: 1e3 }) ?? 5e3;
3418
+ } catch (err) {
3419
+ return jsonError(res, 400, formatErrorMessage(err));
3420
+ }
3421
+ try {
3422
+ await profileCtx.ensureBrowserAvailable();
3423
+ const wsUrl = await getChromeWebSocketUrl(profileCtx.profile.cdpUrl, timeoutMs, ctx.state().resolved.ssrfPolicy);
3424
+ if (!wsUrl) return jsonError(res, 409, "browser CDP WebSocket unavailable");
3425
+ const granted = await grantPermissions({
3426
+ profileCtx,
3427
+ targetId,
3428
+ wsUrl,
3429
+ origin,
3430
+ requiredPermissions,
3431
+ optionalPermissions,
3432
+ timeoutMs,
3433
+ ssrfPolicy: ctx.state().resolved.ssrfPolicy
3434
+ });
3435
+ return res.json({
3436
+ ok: true,
3437
+ origin,
3438
+ ...granted
3439
+ });
3440
+ } catch (error) {
3441
+ return jsonError(res, 500, error instanceof Error ? error.message : String(error));
3442
+ }
3443
+ }));
3444
+ }
3445
+ //#endregion
3446
+ //#region extensions/browser/src/browser/routes/tabs.ts
3447
+ function handleTabsRouteError(ctx, res, err, opts) {
3448
+ if (opts?.mapTabError) {
3449
+ const mapped = ctx.mapTabError(err);
3450
+ if (mapped) return jsonError(res, mapped.status, mapped.message);
3451
+ }
3452
+ return jsonError(res, 500, String(err));
3453
+ }
3454
+ async function withTabsProfileRoute(params) {
3455
+ const profileCtx = resolveProfileContext(params.req, params.res, params.ctx);
3456
+ if (!profileCtx) return;
3457
+ try {
3458
+ await params.run(profileCtx);
3459
+ } catch (err) {
3460
+ handleTabsRouteError(params.ctx, params.res, err, { mapTabError: params.mapTabError });
3461
+ }
3462
+ }
3463
+ async function ensureBrowserRunning(profileCtx, res) {
3464
+ if (!await profileCtx.isReachable(300)) {
3465
+ jsonError(res, new BrowserProfileUnavailableError("browser not running").status, "browser not running");
3466
+ return false;
3467
+ }
3468
+ return true;
3469
+ }
3470
+ async function redactBlockedTabUrls(params) {
3471
+ const ssrfPolicyOpts = withBrowserNavigationPolicy(params.ssrfPolicy);
3472
+ if (!ssrfPolicyOpts.ssrfPolicy) return params.tabs;
3473
+ const redactedTabs = [];
3474
+ for (const tab of params.tabs) try {
3475
+ await assertBrowserNavigationResultAllowed({
3476
+ url: tab.url,
3477
+ ...ssrfPolicyOpts
3478
+ });
3479
+ redactedTabs.push(tab);
3480
+ } catch {
3481
+ redactedTabs.push({
3482
+ ...tab,
3483
+ url: ""
3484
+ });
3485
+ }
3486
+ return redactedTabs;
3487
+ }
3488
+ function resolveIndexedTab(tabs, index) {
3489
+ return typeof index === "number" ? tabs[index] : tabs.at(0);
3490
+ }
3491
+ function parseRequiredTargetId(res, rawTargetId) {
3492
+ const targetId = toStringOrEmpty(rawTargetId);
3493
+ if (!targetId) {
3494
+ jsonError(res, 400, "targetId is required");
3495
+ return null;
3496
+ }
3497
+ return targetId;
3498
+ }
3499
+ function readOptionalTabLabel(body) {
3500
+ return toStringOrEmpty(body?.label) || void 0;
3501
+ }
3502
+ function readTabIndex(res, body, opts) {
3503
+ const record = body && typeof body === "object" ? body : {};
3504
+ if (!Object.hasOwn(record, "index")) {
3505
+ if (opts?.required) {
3506
+ jsonError(res, 400, "index is required");
3507
+ return null;
3508
+ }
3509
+ return;
3510
+ }
3511
+ if (record.index == null) {
3512
+ jsonError(res, 400, "index must be a non-negative integer");
3513
+ return null;
3514
+ }
3515
+ try {
3516
+ return readRouteNonNegativeInteger(record.index, "index", { invalidMessage: "index must be a non-negative integer" });
3517
+ } catch (error) {
3518
+ jsonError(res, 400, error instanceof Error ? error.message : String(error));
3519
+ return null;
3520
+ }
3521
+ }
3522
+ async function runTabTargetMutation(params) {
3523
+ await withTabsProfileRoute({
3524
+ req: params.req,
3525
+ res: params.res,
3526
+ ctx: params.ctx,
3527
+ mapTabError: true,
3528
+ run: async (profileCtx) => {
3529
+ if (!await ensureBrowserRunning(profileCtx, params.res)) return;
3530
+ await params.mutate(profileCtx, params.targetId);
3531
+ params.res.json({ ok: true });
3532
+ }
3533
+ });
3534
+ }
3535
+ function registerBrowserTabRoutes(app, ctx) {
3536
+ app.get("/tabs", asyncBrowserRoute(async (req, res) => {
3537
+ await withTabsProfileRoute({
3538
+ req,
3539
+ res,
3540
+ ctx,
3541
+ run: async (profileCtx) => {
3542
+ if (!await profileCtx.isReachable(300)) return res.json({
3543
+ running: false,
3544
+ tabs: []
3545
+ });
3546
+ const tabs = await redactBlockedTabUrls({
3547
+ tabs: await profileCtx.listTabs(),
3548
+ ssrfPolicy: ctx.state().resolved.ssrfPolicy
3549
+ });
3550
+ res.json({
3551
+ running: true,
3552
+ tabs
3553
+ });
3554
+ }
3555
+ });
3556
+ }));
3557
+ app.post("/tabs/open", asyncBrowserRoute(async (req, res) => {
3558
+ const url = toStringOrEmpty(req.body?.url);
3559
+ const label = readOptionalTabLabel(req.body);
3560
+ if (!url) return jsonError(res, 400, "url is required");
3561
+ await withTabsProfileRoute({
3562
+ req,
3563
+ res,
3564
+ ctx,
3565
+ mapTabError: true,
3566
+ run: async (profileCtx) => {
3567
+ await assertBrowserNavigationAllowed({
3568
+ url,
3569
+ ...browserNavigationPolicyForProfile(ctx, profileCtx)
3570
+ });
3571
+ await profileCtx.ensureBrowserAvailable();
3572
+ const tab = await profileCtx.openTab(url, { label });
3573
+ res.json(tab);
3574
+ }
3575
+ });
3576
+ }));
3577
+ app.post("/tabs/focus", asyncBrowserRoute(async (req, res) => {
3578
+ const targetId = parseRequiredTargetId(res, req.body?.targetId);
3579
+ if (!targetId) return;
3580
+ await runTabTargetMutation({
3581
+ req,
3582
+ res,
3583
+ ctx,
3584
+ targetId,
3585
+ mutate: async (profileCtx, id) => {
3586
+ const tabs = await profileCtx.listTabs();
3587
+ const resolved = resolveTargetIdFromTabs(id, tabs);
3588
+ if (!resolved.ok) {
3589
+ if (resolved.reason === "ambiguous") throw new BrowserTargetAmbiguousError();
3590
+ throw new BrowserTabNotFoundError({ input: id });
3591
+ }
3592
+ const tab = tabs.find((currentTab) => currentTab.targetId === resolved.targetId);
3593
+ if (!tab) throw new BrowserTabNotFoundError({ input: id });
3594
+ const ssrfPolicyOpts = browserNavigationPolicyForProfile(ctx, profileCtx);
3595
+ if (ssrfPolicyOpts.ssrfPolicy) await assertBrowserNavigationResultAllowed({
3596
+ url: tab.url,
3597
+ ...ssrfPolicyOpts
3598
+ });
3599
+ await profileCtx.focusTab(resolved.targetId);
3600
+ }
3601
+ });
3602
+ }));
3603
+ app.delete("/tabs/:targetId", asyncBrowserRoute(async (req, res) => {
3604
+ const targetId = parseRequiredTargetId(res, req.params.targetId);
3605
+ if (!targetId) return;
3606
+ await runTabTargetMutation({
3607
+ req,
3608
+ res,
3609
+ ctx,
3610
+ targetId,
3611
+ mutate: async (profileCtx, id) => {
3612
+ await profileCtx.closeTab(id);
3613
+ }
3614
+ });
3615
+ }));
3616
+ app.post("/tabs/action", asyncBrowserRoute(async (req, res) => {
3617
+ const action = toStringOrEmpty(req.body?.action);
3618
+ await withTabsProfileRoute({
3619
+ req,
3620
+ res,
3621
+ ctx,
3622
+ mapTabError: true,
3623
+ run: async (profileCtx) => {
3624
+ if (action === "list") {
3625
+ if (!await profileCtx.isReachable(300)) return res.json({
3626
+ ok: true,
3627
+ tabs: []
3628
+ });
3629
+ const tabs = await redactBlockedTabUrls({
3630
+ tabs: await profileCtx.listTabs(),
3631
+ ssrfPolicy: ctx.state().resolved.ssrfPolicy
3632
+ });
3633
+ return res.json({
3634
+ ok: true,
3635
+ tabs
3636
+ });
3637
+ }
3638
+ if (action === "new") {
3639
+ await profileCtx.ensureBrowserAvailable();
3640
+ const tab = await profileCtx.openTab("about:blank", { label: readOptionalTabLabel(req.body) });
3641
+ return res.json({
3642
+ ok: true,
3643
+ tab
3644
+ });
3645
+ }
3646
+ if (action === "label") {
3647
+ if (!await ensureBrowserRunning(profileCtx, res)) return;
3648
+ const targetId = parseRequiredTargetId(res, req.body?.targetId);
3649
+ if (!targetId) return;
3650
+ const label = readOptionalTabLabel(req.body);
3651
+ if (!label) return jsonError(res, 400, "label is required");
3652
+ const tab = await profileCtx.labelTab(targetId, label);
3653
+ return res.json({
3654
+ ok: true,
3655
+ tab
3656
+ });
3657
+ }
3658
+ if (action === "close") {
3659
+ if (!await ensureBrowserRunning(profileCtx, res)) return;
3660
+ const index = readTabIndex(res, req.body);
3661
+ if (index === null) return;
3662
+ const target = resolveIndexedTab(await profileCtx.listTabs(), index);
3663
+ if (!target) throw new BrowserTabNotFoundError();
3664
+ await profileCtx.closeTab(target.targetId);
3665
+ return res.json({
3666
+ ok: true,
3667
+ targetId: target.targetId
3668
+ });
3669
+ }
3670
+ if (action === "select") {
3671
+ const index = readTabIndex(res, req.body, { required: true });
3672
+ if (index === null || index === void 0) return;
3673
+ if (!await ensureBrowserRunning(profileCtx, res)) return;
3674
+ const target = (await profileCtx.listTabs())[index];
3675
+ if (!target) throw new BrowserTabNotFoundError();
3676
+ const ssrfPolicyOpts = browserNavigationPolicyForProfile(ctx, profileCtx);
3677
+ if (ssrfPolicyOpts.ssrfPolicy) await assertBrowserNavigationResultAllowed({
3678
+ url: target.url,
3679
+ ...ssrfPolicyOpts
3680
+ });
3681
+ await profileCtx.focusTab(target.targetId);
3682
+ return res.json({
3683
+ ok: true,
3684
+ targetId: target.targetId
3685
+ });
3686
+ }
3687
+ return jsonError(res, 400, "unknown tab action");
3688
+ }
3689
+ });
3690
+ }));
3691
+ }
3692
+ //#endregion
3693
+ //#region extensions/browser/src/browser/routes/index.ts
3694
+ function registerBrowserRoutes(app, ctx) {
3695
+ registerBrowserBasicRoutes(app, ctx);
3696
+ registerBrowserTabRoutes(app, ctx);
3697
+ registerBrowserPermissionRoutes(app, ctx);
3698
+ registerBrowserAgentRoutes(app, ctx);
3699
+ }
3700
+ //#endregion
3701
+ export { registerBrowserRoutes as t };