@schlenkr/ragents 0.1.10 → 0.1.12

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 (748) hide show
  1. package/README.md +1 -1
  2. package/apps/server/package.json +1 -1
  3. package/apps/server/src/access-projection.ts +6 -6
  4. package/apps/server/src/access-service.ts +3 -3
  5. package/apps/server/src/access-session.ts +19 -19
  6. package/apps/server/src/api/contracts.ts +29 -29
  7. package/apps/server/src/api/core-methods.ts +17 -17
  8. package/apps/server/src/api/delivery.ts +2 -2
  9. package/apps/server/src/api/reference.ts +27 -27
  10. package/apps/server/src/api/rights.ts +18 -18
  11. package/apps/server/src/chat-handler.ts +5 -5
  12. package/apps/server/src/config-definition.ts +37 -10
  13. package/apps/server/src/config-file.ts +49 -49
  14. package/apps/server/src/config.ts +2 -0
  15. package/apps/server/src/data-directory.ts +2 -2
  16. package/apps/server/src/external-access.ts +1 -1
  17. package/apps/server/src/folder-install.ts +1 -1
  18. package/apps/server/src/help-files.ts +1 -1
  19. package/apps/server/src/host-api.json +6 -1
  20. package/apps/server/src/host-api.ts +3 -2
  21. package/apps/server/src/host-record.ts +3 -3
  22. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  23. package/apps/server/src/host-version.ts +17 -17
  24. package/apps/server/src/host-web.ts +5 -5
  25. package/apps/server/src/main.ts +6 -6
  26. package/apps/server/src/missing-environment.ts +6 -6
  27. package/apps/server/src/parent-watch.ts +4 -4
  28. package/apps/server/src/plugin-build/build.ts +38 -38
  29. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  30. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  31. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  32. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  33. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  34. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  35. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  36. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  37. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  38. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  39. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  40. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  41. package/apps/server/src/plugin-support/http.ts +2 -2
  42. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  43. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  44. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  45. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  46. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  47. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  48. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  49. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  50. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  51. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  52. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  53. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  54. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  55. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  56. package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
  57. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  58. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  59. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  60. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  61. package/apps/server/src/plugin-support/prompt.ts +1 -1
  62. package/apps/server/src/plugin-support/provision.ts +8 -8
  63. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  64. package/apps/server/src/plugin-support/skills.ts +18 -18
  65. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  66. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  67. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  68. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  69. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  70. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  71. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  72. package/apps/server/src/plugin-support/zip.ts +7 -7
  73. package/apps/server/src/profile/bundle-manifest.ts +27 -27
  74. package/apps/server/src/profile/compose.ts +12 -7
  75. package/apps/server/src/profile/plugin-discovery.ts +14 -14
  76. package/apps/server/src/profile/provisioning.ts +5 -5
  77. package/apps/server/src/profile-target.ts +10 -10
  78. package/apps/server/src/protocol.ts +2 -2
  79. package/apps/server/src/provider.ts +62 -57
  80. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  81. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  82. package/apps/server/src/ragents/coordinator.ts +2 -2
  83. package/apps/server/src/ragents/engine.ts +23 -23
  84. package/apps/server/src/ragents/global-chat.ts +8 -8
  85. package/apps/server/src/ragents/host-services.ts +6 -3
  86. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  87. package/apps/server/src/ragents/run-owner.ts +2 -2
  88. package/apps/server/src/ragents/session.ts +49 -49
  89. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  90. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  91. package/apps/server/src/rpc/dispatcher.ts +19 -19
  92. package/apps/server/src/rpc/http-transport.ts +11 -11
  93. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  94. package/apps/server/src/run-preparation-input.ts +5 -5
  95. package/apps/server/src/run-preparation.ts +24 -24
  96. package/apps/server/src/run-transfer.ts +39 -39
  97. package/apps/server/src/server.ts +48 -48
  98. package/apps/server/src/settings.ts +1 -1
  99. package/apps/server/src/startup.ts +3 -3
  100. package/apps/server/src/title-compactor.ts +9 -9
  101. package/apps/server/src/title-settings.ts +3 -3
  102. package/apps/server/src/web-bundles.ts +2 -2
  103. package/apps/server/src/web-stylesheet.ts +2 -2
  104. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-CpPi6QLr.js} +1 -1
  105. package/apps/web/dist/assets/main-DJmCHGzM.js +11 -0
  106. package/apps/web/dist/assets/mermaid-HWGCJPDP-q-mf1kLN.js +608 -0
  107. package/apps/web/dist/assets/runPanel-nk_aMxSn.js +21 -0
  108. package/apps/web/dist/help/guide-access.html +5 -5
  109. package/apps/web/dist/help/guide-access.md +2 -2
  110. package/apps/web/dist/help/guide-clients.html +53 -54
  111. package/apps/web/dist/help/guide-clients.md +50 -51
  112. package/apps/web/dist/help/guide-distributed.html +12 -7
  113. package/apps/web/dist/help/guide-distributed.md +9 -4
  114. package/apps/web/dist/help/guide-functions.html +3 -3
  115. package/apps/web/dist/help/guide-getting-started.html +24 -15
  116. package/apps/web/dist/help/guide-getting-started.md +22 -12
  117. package/apps/web/dist/help/guide-ideas.html +3 -3
  118. package/apps/web/dist/help/guide-plugins.html +5 -4
  119. package/apps/web/dist/help/guide-plugins.md +2 -1
  120. package/apps/web/dist/help/guide-programs.html +3 -3
  121. package/apps/web/dist/help/guide-runtime.html +6 -6
  122. package/apps/web/dist/help/guide-runtime.md +3 -3
  123. package/apps/web/dist/help/guide.html +3 -3
  124. package/apps/web/dist/help/index.html +196 -144
  125. package/apps/web/dist/help/mini-app.css +6 -0
  126. package/apps/web/dist/help/mini-app.js +14 -14
  127. package/apps/web/dist/host-web.json +91 -91
  128. package/apps/web/dist/index.html +3 -3
  129. package/apps/web/dist/run-panel.html +3 -3
  130. package/apps/web/package.json +1 -1
  131. package/apps/web/src/AccessContext.tsx +15 -15
  132. package/apps/web/src/App.tsx +13 -13
  133. package/apps/web/src/DiffCode.tsx +2 -2
  134. package/apps/web/src/HelpDialog.tsx +3 -3
  135. package/apps/web/src/Overview.tsx +13 -13
  136. package/apps/web/src/PluginActivation.ts +1 -1
  137. package/apps/web/src/PluginChat.tsx +15 -15
  138. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  139. package/apps/web/src/PluginRegistry.tsx +44 -44
  140. package/apps/web/src/RunPreparationChat.tsx +11 -11
  141. package/apps/web/src/RunStore.ts +1 -1
  142. package/apps/web/src/SessionList.tsx +14 -14
  143. package/apps/web/src/SettingsModal.tsx +112 -112
  144. package/apps/web/src/StartOptions.tsx +11 -11
  145. package/apps/web/src/StartSelection.tsx +11 -11
  146. package/apps/web/src/StartTiles.tsx +8 -8
  147. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  148. package/apps/web/src/ThemeSettings.tsx +8 -8
  149. package/apps/web/src/TitleModelSettings.tsx +13 -13
  150. package/apps/web/src/WorkspacePanel.tsx +9 -9
  151. package/apps/web/src/access-session.ts +4 -4
  152. package/apps/web/src/access-token.ts +5 -5
  153. package/apps/web/src/actor-conversation.ts +3 -3
  154. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  155. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  156. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  157. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  158. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  159. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  160. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  161. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  162. package/apps/web/src/api.ts +7 -7
  163. package/apps/web/src/chat/QuasselHost.tsx +1 -1
  164. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  165. package/apps/web/src/chat/chat-target.ts +3 -3
  166. package/apps/web/src/chat/requests.ts +2 -2
  167. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  168. package/apps/web/src/chat-view-settings.tsx +5 -6
  169. package/apps/web/src/diff-view.css +1 -1
  170. package/apps/web/src/highlighting.css +1 -1
  171. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  172. package/apps/web/src/lib/labels.ts +6 -6
  173. package/apps/web/src/main.tsx +4 -4
  174. package/apps/web/src/offered-machines.ts +2 -2
  175. package/apps/web/src/page-opener.tsx +1 -1
  176. package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
  177. package/apps/web/src/panel/LoginForm.tsx +6 -6
  178. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  179. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  180. package/apps/web/src/panel/PanelPage.tsx +1 -1
  181. package/apps/web/src/panel/RunLine.tsx +4 -4
  182. package/apps/web/src/panel/RunsPage.tsx +15 -15
  183. package/apps/web/src/panel/StartPage.tsx +26 -26
  184. package/apps/web/src/panel/connection-state.ts +9 -9
  185. package/apps/web/src/panel/contract.ts +28 -28
  186. package/apps/web/src/panel.tsx +1 -1
  187. package/apps/web/src/plugin-bootstrap.ts +5 -5
  188. package/apps/web/src/product/ModelControl.tsx +3 -3
  189. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  190. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  191. package/apps/web/src/product/model-settings.ts +2 -2
  192. package/apps/web/src/rpc/client.ts +16 -16
  193. package/apps/web/src/rpc.ts +1 -1
  194. package/apps/web/src/run-overview.ts +1 -1
  195. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  196. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  197. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  198. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  199. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  200. package/apps/web/src/run-panel/clipboard.ts +3 -3
  201. package/apps/web/src/run-panel/host-contract.ts +5 -5
  202. package/apps/web/src/run-panel/host.ts +15 -15
  203. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  204. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  205. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  206. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  207. package/apps/web/src/run-panel.tsx +4 -4
  208. package/apps/web/src/run-preparation.ts +2 -2
  209. package/apps/web/src/run-view.ts +3 -3
  210. package/apps/web/src/settings-contributions.ts +32 -32
  211. package/apps/web/src/theme.ts +9 -9
  212. package/apps/web/src/title-model-settings.ts +6 -6
  213. package/apps/web/src/ui/ListDetail.tsx +9 -9
  214. package/apps/web/src/ui/dialog.tsx +2 -2
  215. package/apps/web/src/ui/modal-controller.ts +3 -3
  216. package/apps/web/src/ui/modal.tsx +2 -2
  217. package/apps/web/src/ui/popover.tsx +1 -1
  218. package/apps/web/src/ui/relative-time.ts +8 -8
  219. package/apps/web/src/ui/startup-notice.tsx +2 -2
  220. package/apps/web/src/ui/state-icon.tsx +1 -1
  221. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  222. package/apps/web/src/ui/stop-button.tsx +2 -2
  223. package/bundles/ragents.activity/ragents-bundle.json +3 -3
  224. package/bundles/ragents.activity/web/classes.json +1 -1
  225. package/bundles/ragents.activity/web/index.js +1 -1
  226. package/bundles/ragents.activity/web/index.js.map +2 -2
  227. package/bundles/ragents.actor-programs/ragents-bundle.json +3 -3
  228. package/bundles/ragents.actor-programs/server/index.js +225 -225
  229. package/bundles/ragents.actor-programs/server/index.js.map +2 -2
  230. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  231. package/bundles/ragents.actor-programs/web/index.js +1 -1
  232. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  233. package/bundles/ragents.ask/ragents-bundle.json +3 -3
  234. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  235. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  236. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  237. package/bundles/ragents.ask/server/index.js +23 -23
  238. package/bundles/ragents.ask/server/index.js.map +2 -2
  239. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  240. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  241. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
  242. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
  243. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  245. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  246. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  247. package/bundles/ragents.ask/web/classes.json +1 -1
  248. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  249. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  250. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  251. package/bundles/ragents.ask/web/index.js +1 -1
  252. package/bundles/ragents.ask/web/index.js.map +2 -2
  253. package/bundles/ragents.browser/executor/index.mjs +35 -35
  254. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  255. package/bundles/ragents.browser/ragents-bundle.json +3 -3
  256. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  257. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  258. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  259. package/bundles/ragents.browser/server/index.js +31 -31
  260. package/bundles/ragents.browser/server/index.js.map +2 -2
  261. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  262. package/bundles/ragents.documents/prompt.hbs +1 -1
  263. package/bundles/ragents.documents/ragents-bundle.json +3 -3
  264. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  265. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  266. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  267. package/bundles/ragents.documents/server/index.js +26 -26
  268. package/bundles/ragents.documents/server/index.js.map +2 -2
  269. package/bundles/ragents.documents/web/classes.json +1 -1
  270. package/bundles/ragents.documents/web/index.js +1 -1
  271. package/bundles/ragents.documents/web/index.js.map +3 -3
  272. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  273. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  274. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +3 -3
  275. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  276. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  277. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  278. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  280. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  281. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +3 -3
  282. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  283. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  284. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  285. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  286. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  287. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  288. package/bundles/ragents.lsp-typescript/ragents-bundle.json +3 -3
  289. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  290. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  291. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  292. package/bundles/ragents.model-relay/ragents-bundle.json +8 -4
  293. package/bundles/ragents.model-relay/server/index.js +25 -21
  294. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  295. package/bundles/ragents.orchestration/ragents-bundle.json +3 -3
  296. package/bundles/ragents.orchestration/server/index.js +28 -28
  297. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  300. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  301. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  302. package/bundles/ragents.orchestration/web/classes.json +1 -1
  303. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  304. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  305. package/bundles/ragents.orchestration/web/index.js +8 -8
  306. package/bundles/ragents.orchestration/web/index.js.map +2 -2
  307. package/bundles/ragents.overseer/ragents-bundle.json +3 -3
  308. package/bundles/ragents.overseer/server/index.js +98 -98
  309. package/bundles/ragents.overseer/server/index.js.map +2 -2
  310. package/bundles/ragents.overseer/web/classes.json +1 -1
  311. package/bundles/ragents.overseer/web/index.js +1 -1
  312. package/bundles/ragents.overseer/web/index.js.map +2 -2
  313. package/bundles/ragents.processes/ragents-bundle.json +3 -3
  314. package/bundles/ragents.processes/server/index.js +11 -11
  315. package/bundles/ragents.processes/server/index.js.map +2 -2
  316. package/bundles/ragents.processes/web/classes.json +1 -1
  317. package/bundles/ragents.processes/web/index.js +3 -3
  318. package/bundles/ragents.processes/web/index.js.map +2 -2
  319. package/bundles/ragents.product/ragents-bundle.json +3 -3
  320. package/bundles/ragents.product/server/index.js +12 -13
  321. package/bundles/ragents.product/server/index.js.map +2 -2
  322. package/bundles/ragents.product/web/classes.json +1 -1
  323. package/bundles/ragents.product/web/index.js +1 -1
  324. package/bundles/ragents.product/web/index.js.map +2 -2
  325. package/bundles/ragents.profile-distribution/ragents-bundle.json +3 -3
  326. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  327. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  328. package/bundles/ragents.reference/ragents-bundle.json +3 -3
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  335. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  336. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  340. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  341. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  347. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  348. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  349. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  350. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  352. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  353. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  360. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  361. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  362. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  363. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  365. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  366. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  367. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  368. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  392. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  393. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  394. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  395. package/bundles/ragents.reference/web/classes.json +1 -1
  396. package/bundles/ragents.reference/web/index.js +1 -1
  397. package/bundles/ragents.reference/web/index.js.map +2 -2
  398. package/bundles/ragents.todo/ragents-bundle.json +3 -3
  399. package/bundles/ragents.todo/server/index.js +5 -8
  400. package/bundles/ragents.todo/server/index.js.map +2 -2
  401. package/bundles/ragents.todo/web/classes.json +1 -1
  402. package/bundles/ragents.todo/web/index.js +1 -1
  403. package/bundles/ragents.todo/web/index.js.map +2 -2
  404. package/bundles/ragents.transcript/ragents-bundle.json +3 -3
  405. package/bundles/ragents.transcript/server/index.js +11 -11
  406. package/bundles/ragents.transcript/server/index.js.map +2 -2
  407. package/bundles/ragents.watch/ragents-bundle.json +3 -3
  408. package/bundles/ragents.watch/server/index.js +48 -48
  409. package/bundles/ragents.watch/server/index.js.map +2 -2
  410. package/bundles/ragents.workspace/ragents-bundle.json +3 -3
  411. package/bundles/ragents.workspace/server/index.js +83 -83
  412. package/bundles/ragents.workspace/server/index.js.map +2 -2
  413. package/bundles/ragents.workspace/web/classes.json +1 -1
  414. package/bundles/ragents.workspace/web/index.js +1 -1
  415. package/bundles/ragents.workspace/web/index.js.map +2 -2
  416. package/package.json +4 -4
  417. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  418. package/packages/agent/dist/index.d.ts +1 -1
  419. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  420. package/packages/agent/src/core/compaction/utils.ts +1 -1
  421. package/packages/agent/src/core/model-runtime.ts +45 -5
  422. package/packages/agent/src/index.ts +1 -1
  423. package/packages/agent/src/loop/agent-loop.ts +2 -2
  424. package/packages/ai/dist/models.d.ts +1 -0
  425. package/packages/ai/dist/models.generated.d.ts +4544 -983
  426. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  427. package/packages/ai/src/api/ai-sdk.ts +33 -7
  428. package/packages/ai/src/api-registry.ts +1 -1
  429. package/packages/ai/src/index.ts +2 -2
  430. package/packages/ai/src/models.generated.ts +1 -1
  431. package/packages/ai/src/models.ts +1 -1
  432. package/packages/ai/src/providers/openrouter.models.ts +3725 -552
  433. package/packages/ragents/src/access.ts +12 -12
  434. package/packages/ragents/src/agents/actor-input.ts +33 -33
  435. package/packages/ragents/src/agents/catalog.ts +1 -1
  436. package/packages/ragents/src/agents/delivery.ts +17 -17
  437. package/packages/ragents/src/agents/plugins.ts +1 -1
  438. package/packages/ragents/src/agents/scheduler.ts +7 -7
  439. package/packages/ragents/src/agents/schemas.ts +1 -1
  440. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  441. package/packages/ragents/src/agents/tools.ts +20 -20
  442. package/packages/ragents/src/agents/toolset.ts +5 -5
  443. package/packages/ragents/src/agents/workspaces.ts +1 -1
  444. package/packages/ragents/src/domain/events.ts +1 -1
  445. package/packages/ragents/src/domain/model.ts +5 -5
  446. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  447. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  448. package/packages/ragents/src/drivers/agent.ts +2 -2
  449. package/packages/ragents/src/drivers/attachments.ts +4 -4
  450. package/packages/ragents/src/http/contracts.ts +14 -14
  451. package/packages/ragents/src/http/methods.ts +6 -6
  452. package/packages/ragents/src/plugin-host.ts +119 -119
  453. package/packages/ragents/src/plugin-types.ts +16 -16
  454. package/packages/ragents/src/rpc/contract.ts +5 -5
  455. package/packages/ragents/src/rpc/contribution.ts +2 -2
  456. package/packages/ragents/src/rpc/peer.ts +11 -11
  457. package/packages/ragents/src/rpc/protocol.ts +2 -2
  458. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  459. package/packages/ragents/src/runtime/journal-storage.ts +1 -1
  460. package/packages/ragents/src/runtime/journal.ts +10 -10
  461. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  462. package/packages/ragents/src/runtime/stop.ts +2 -2
  463. package/packages/ragents/src/script/mediators.ts +35 -35
  464. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  465. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  466. package/packages/ragents/src/typescript/compiler.ts +7 -7
  467. package/packages/ragents/src/typescript/snippet.ts +5 -5
  468. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  469. package/packages/workspace-executor/src/commands.ts +18 -18
  470. package/packages/workspace-executor/src/context.ts +15 -15
  471. package/packages/workspace-executor/src/contributions.ts +44 -44
  472. package/packages/workspace-executor/src/errors.ts +1 -1
  473. package/packages/workspace-executor/src/executor.ts +16 -16
  474. package/packages/workspace-executor/src/files.ts +31 -31
  475. package/packages/workspace-executor/src/index.ts +1 -1
  476. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  477. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  478. package/packages/workspace-executor/src/language-server/host.ts +36 -36
  479. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  480. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  481. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  482. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  483. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +3 -3
  484. package/packages/workspace-executor/src/managed-process.ts +12 -12
  485. package/packages/workspace-executor/src/module.ts +8 -8
  486. package/packages/workspace-executor/src/modules.ts +3 -3
  487. package/packages/workspace-executor/src/paths.ts +11 -11
  488. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  489. package/packages/workspace-executor/src/processes/module.ts +3 -3
  490. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  491. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  492. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  493. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  494. package/packages/workspace-executor/src/run-folders.ts +3 -3
  495. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  496. package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
  497. package/packages/workspace-executor/src/session-ident.ts +2 -2
  498. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  499. package/packages/workspace-executor/src/tools.ts +5 -5
  500. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  501. package/plugins/ragents.activity/web/activity.ts +2 -2
  502. package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
  503. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  504. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  505. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  506. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  507. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  508. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  509. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  510. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  511. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  512. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  513. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  514. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  515. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  516. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  517. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  518. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  519. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  520. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  521. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  522. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  523. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  524. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  525. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  526. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  527. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  528. package/plugins/ragents.ask/ask-payload.ts +1 -1
  529. package/plugins/ragents.ask/contract.ts +5 -5
  530. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  531. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  532. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  533. package/plugins/ragents.ask/server/contract.ts +5 -5
  534. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  535. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  536. package/plugins/ragents.ask/web/index.tsx +2 -2
  537. package/plugins/ragents.browser/executor/contract.ts +6 -6
  538. package/plugins/ragents.browser/executor/index.ts +1 -1
  539. package/plugins/ragents.browser/executor/module.ts +6 -6
  540. package/plugins/ragents.browser/executor/pages.ts +32 -32
  541. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  542. package/plugins/ragents.browser/provision.ts +7 -7
  543. package/plugins/ragents.browser/server/browser.ts +14 -14
  544. package/plugins/ragents.browser/server/contract.ts +1 -1
  545. package/plugins/ragents.browser/server/index.ts +1 -1
  546. package/plugins/ragents.browser/server/tools.ts +14 -14
  547. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  548. package/plugins/ragents.documents/contract.ts +2 -2
  549. package/plugins/ragents.documents/prompt.hbs +1 -1
  550. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  551. package/plugins/ragents.documents/server/files-route.ts +6 -6
  552. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  553. package/plugins/ragents.documents/server/store.ts +1 -1
  554. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  555. package/plugins/ragents.documents/web/index.tsx +11 -11
  556. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  557. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  558. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  559. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  560. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  561. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  562. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  563. package/plugins/ragents.model-relay/server/config.ts +6 -2
  564. package/plugins/ragents.model-relay/server/index.ts +2 -2
  565. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  566. package/plugins/ragents.orchestration/contract.ts +8 -8
  567. package/plugins/ragents.orchestration/server/index.ts +4 -4
  568. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  569. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  570. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  571. package/plugins/ragents.orchestration/web/ActorChat.tsx +3 -3
  572. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -5
  573. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  574. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  575. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  576. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  577. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  578. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  579. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  580. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  581. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  582. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  583. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  584. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  585. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  586. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  587. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  588. package/plugins/ragents.orchestration/web/format.ts +1 -1
  589. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  590. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  591. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  592. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
  593. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  594. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  595. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  596. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  597. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  598. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  599. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
  600. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  601. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  602. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  603. package/plugins/ragents.overseer/contract.ts +20 -20
  604. package/plugins/ragents.overseer/server/api.ts +6 -6
  605. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  606. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  607. package/plugins/ragents.overseer/server/index.ts +24 -24
  608. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  609. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  610. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  611. package/plugins/ragents.overseer/server/settings.ts +6 -6
  612. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  613. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  614. package/plugins/ragents.overseer/web/index.tsx +20 -20
  615. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  616. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  617. package/plugins/ragents.processes/contract.ts +5 -5
  618. package/plugins/ragents.processes/server/methods.ts +4 -4
  619. package/plugins/ragents.processes/server/observer.ts +8 -8
  620. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  621. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  622. package/plugins/ragents.processes/web/processes.ts +10 -10
  623. package/plugins/ragents.product/server/config.ts +1 -1
  624. package/plugins/ragents.product/server/index.ts +4 -4
  625. package/plugins/ragents.product/server/runtime.ts +9 -10
  626. package/plugins/ragents.product/web/index.tsx +1 -1
  627. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  628. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  629. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  630. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  631. package/plugins/ragents.reference/examples.ts +27 -27
  632. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  636. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  637. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  638. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  639. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  640. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  641. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  642. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  643. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  644. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  645. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  648. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  649. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  650. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  651. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  652. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  653. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  654. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  655. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  656. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  657. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  661. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  662. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  663. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  664. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  665. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  666. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  667. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  668. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  669. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  670. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  671. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  672. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  693. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  694. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  695. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  696. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  697. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  698. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  699. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  700. package/plugins/ragents.todo/contract.ts +0 -3
  701. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  702. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  703. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  704. package/plugins/ragents.watch/server/condition.ts +4 -4
  705. package/plugins/ragents.watch/server/functions.ts +27 -27
  706. package/plugins/ragents.watch/server/observation.ts +2 -2
  707. package/plugins/ragents.watch/server/service.ts +14 -14
  708. package/plugins/ragents.workspace/client/transport.ts +1 -1
  709. package/plugins/ragents.workspace/client/workspace-client.ts +63 -63
  710. package/plugins/ragents.workspace/contract.ts +46 -46
  711. package/plugins/ragents.workspace/server/binding.ts +20 -20
  712. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  713. package/plugins/ragents.workspace/server/clients.ts +50 -50
  714. package/plugins/ragents.workspace/server/config.ts +7 -7
  715. package/plugins/ragents.workspace/server/index.ts +3 -3
  716. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  717. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  718. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  719. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  720. package/plugins/ragents.workspace/web/index.tsx +1 -1
  721. package/ragents.config.core.ts +1 -1
  722. package/ragents.config.developer.ts +3 -3
  723. package/ragents.config.showcase.ts +2 -2
  724. package/scripts/agent/agent-cli.ts +96 -96
  725. package/scripts/agent/journal.ts +5 -5
  726. package/scripts/agent/turn-control.ts +4 -4
  727. package/scripts/package/build-package.ts +31 -31
  728. package/scripts/package/host-links.mjs +3 -3
  729. package/scripts/package/publish-package.ts +29 -29
  730. package/scripts/package/ragents.mjs +19 -19
  731. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  732. package/scripts/plugin/plugin-cli.ts +14 -14
  733. package/scripts/provision/run-provision.ts +14 -15
  734. package/scripts/remote/connect.ts +49 -49
  735. package/scripts/remote/start.ts +18 -18
  736. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  737. package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
  738. package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
  739. package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
  740. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  741. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  742. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  743. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  744. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  745. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  746. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  747. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  748. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -2,7 +2,7 @@ import { createRequire as __ragentsCreateRequire } from "node:module";
2
2
  const require = __ragentsCreateRequire(import.meta.url);
3
3
  import {
4
4
  browserRuntimeToken
5
- } from "./chunks/chunk-CWLX4VA5.js";
5
+ } from "./chunks/chunk-PYEISBNE.js";
6
6
 
7
7
  // server/index.ts
8
8
  import { sandboxServicesToken } from "@ragents/host/plugin-support/workspace-sandbox-host.js";
@@ -60,13 +60,13 @@ var RunBrowser = class {
60
60
  await this.restore(runId);
61
61
  options.signal?.throwIfAborted();
62
62
  this.#assertRunning();
63
- if (generation !== this.#generation(runId)) throw new Error("Der Browser wurde beendet.");
63
+ if (generation !== this.#generation(runId)) throw new Error("The browser was closed.");
64
64
  return this.#run(runId, BROWSER_OPERATIONS.open, { url, viewport: this.#viewports.get(runId) ?? DEFAULT_VIEWPORT }, options);
65
65
  }
66
66
  snapshot(runId, options = {}) {
67
67
  return this.#run(runId, BROWSER_OPERATIONS.snapshot, null, options);
68
68
  }
69
- /** Der gewählte Viewport gilt für den Run, auch für einen später neu gestarteten Browser. */
69
+ /** The chosen viewport applies to the run, including a browser restarted later. */
70
70
  async viewport(runId, viewport, options = {}) {
71
71
  const snapshot = await this.#run(runId, BROWSER_OPERATIONS.viewport, viewport, options);
72
72
  this.#viewports.set(runId, viewport);
@@ -84,7 +84,7 @@ var RunBrowser = class {
84
84
  press(runId, target, key, options = {}) {
85
85
  return this.#run(runId, BROWSER_OPERATIONS.press, { target, key }, options);
86
86
  }
87
- /** Die Zeit einer bestandenen Prüfung ist die des Servers, damit sie sich mit seinen übrigen Zeiten vergleichen lässt. */
87
+ /** The time of a passed check is the server's, so it compares with its other times. */
88
88
  async check(runId, input, options = {}) {
89
89
  const generation = this.#generation(runId);
90
90
  const { result, page } = await this.#execute(runId, generation, BROWSER_OPERATIONS.check, input, options);
@@ -96,7 +96,7 @@ var RunBrowser = class {
96
96
  await this.restore(runId);
97
97
  const id = randomUUID();
98
98
  const image = await this.#run(runId, BROWSER_OPERATIONS.screenshot, { id, fullPage: input.fullPage ?? false }, options);
99
- const capture = { name: input.label?.trim() || "Browseraufnahme", path: capturePath(id) };
99
+ const capture = { name: input.label?.trim() || "Browser screenshot", path: capturePath(id) };
100
100
  await this.#store(runId, capture, Buffer.from(image, "base64"));
101
101
  const url = this.#captureUrl(runId, capture.path);
102
102
  return {
@@ -108,7 +108,7 @@ var RunBrowser = class {
108
108
  }
109
109
  async image(runId) {
110
110
  const latest = this.#captures.get(runId)?.at(-1);
111
- if (!latest) throw new Error("F\xFCr diesen Run gibt es noch keinen Browser-Screenshot. Zuerst browser_screenshot aufrufen.");
111
+ if (!latest) throw new Error("There is no browser screenshot for this run yet. Call browser_screenshot first.");
112
112
  return readFile(path.join(await this.#options.filesFor(runId), latest.path));
113
113
  }
114
114
  evidence(runId) {
@@ -126,7 +126,7 @@ var RunBrowser = class {
126
126
  errors: [...page.errors]
127
127
  };
128
128
  }
129
- /** Schließt den Browser beim Executor des Runs; ein nicht verbundener Arbeitsplatz hält nichts, was sich jetzt schließen ließe. */
129
+ /** Closes the browser in the run's executor; a disconnected workspace holds nothing that could be closed now. */
130
130
  async close(runId) {
131
131
  this.#forget(runId);
132
132
  await this.#options.sandbox.execute(runId, BROWSER_OPERATIONS.close, null, { whenReachable: true });
@@ -149,12 +149,12 @@ var RunBrowser = class {
149
149
  if (failed) throw failed.reason;
150
150
  }
151
151
  #assertRunning() {
152
- if (this.#shutdown) throw new Error("Der Browserdienst ist beendet.");
152
+ if (this.#shutdown) throw new Error("The browser service has ended.");
153
153
  }
154
154
  #generation(runId) {
155
155
  return this.#generations.get(runId) ?? 0;
156
156
  }
157
- /** Ein geschlossener Browser hat keine Seite mehr; Ergebnisse, die vorher begonnen haben, zählen danach nicht. */
157
+ /** A closed browser has no page anymore; results that started before no longer count afterwards. */
158
158
  #forget(runId) {
159
159
  this.#generations.set(runId, this.#generation(runId) + 1);
160
160
  this.#pages.delete(runId);
@@ -173,12 +173,12 @@ var RunBrowser = class {
173
173
  throw error;
174
174
  }
175
175
  }
176
- /** Nach einem gescheiterten Aufruf fragt der Server den Stand der Seite nach; wer ihn nicht nennen kann, hat keine Seite. */
176
+ /** After a failed call the server asks for the page state; whoever cannot report it has no page. */
177
177
  async #resync(runId, generation) {
178
178
  const page = await this.#options.sandbox.execute(runId, BROWSER_OPERATIONS.state, null, { whenReachable: true }).then((value) => value, () => null);
179
179
  this.#observe(runId, generation, page);
180
180
  }
181
- /** Nur eine bestandene Prüfung setzt die Zeit; jeder andere Stand behält sie, solange die Seite geprüft bleibt. */
181
+ /** Only a passed check sets the time; every other state keeps it as long as the page stays checked. */
182
182
  #observe(runId, generation, page, checkedAt) {
183
183
  if (generation !== this.#generation(runId)) return;
184
184
  if (!page) {
@@ -193,7 +193,7 @@ var RunBrowser = class {
193
193
  ...stamp ? { checkedAt: stamp } : {}
194
194
  });
195
195
  }
196
- /** Legt eine Aufnahme in die Dateiablage des Runs und schreibt die Aufnahmeliste atomar; die Aufnahmen eines Runs der Reihe nach. */
196
+ /** Puts a screenshot into the run's file storage and writes the screenshot list atomically; a run's screenshots one after another. */
197
197
  #store(runId, capture, image) {
198
198
  const previous = this.#captureWrites.get(runId) ?? Promise.resolve();
199
199
  const pending = previous.then(async () => {
@@ -226,7 +226,7 @@ var RunBrowser = class {
226
226
  }
227
227
  const captures = JSON.parse(content);
228
228
  if (!Array.isArray(captures) || captures.some((entry) => !entry || typeof entry.name !== "string" || typeof entry.path !== "string" || !/^browser\/[a-f0-9-]{36}\.png$/.test(entry.path))) {
229
- throw new Error("Die gespeicherte Browser-Aufnahmeliste dieses Runs ist besch\xE4digt.");
229
+ throw new Error("The stored browser screenshot list of this run is corrupt.");
230
230
  }
231
231
  this.#captures.set(runId, captures);
232
232
  }
@@ -260,7 +260,7 @@ var screenshotDescription = "Capture the real browser page into this run's docum
260
260
  var createBrowserFunctions = (browser) => [
261
261
  defineRunFunction({
262
262
  name: "browser_open",
263
- label: "Browser \xF6ffnen",
263
+ label: "Open browser",
264
264
  description: "Open an HTTP(S) page in this run's isolated headless browser. Returns its accessible structure and browser errors. Reuses the current run browser; other runs have separate cookies and processes.",
265
265
  schema: Type.Object({ url: Type.String({ minLength: 1 }) }, { additionalProperties: false }),
266
266
  resultSchema: snapshotSchema,
@@ -271,7 +271,7 @@ var createBrowserFunctions = (browser) => [
271
271
  }),
272
272
  defineRunFunction({
273
273
  name: "browser_snapshot",
274
- label: "Browser lesen",
274
+ label: "Read browser",
275
275
  description: "Read the current real page's accessible structure, title, URL and errors. Use role/name or labels for subsequent actions; snapshot reference IDs never need to be copied.",
276
276
  schema: emptySchema,
277
277
  resultSchema: snapshotSchema,
@@ -282,7 +282,7 @@ var createBrowserFunctions = (browser) => [
282
282
  }),
283
283
  defineRunFunction({
284
284
  name: "browser_click",
285
- label: "Im Browser klicken",
285
+ label: "Click in browser",
286
286
  description: "Click a uniquely identified visible element with Playwright auto-waiting. Returns the actual resulting page. Ambiguous or absent targets are errors.",
287
287
  schema: targetInputSchema,
288
288
  resultSchema: snapshotSchema,
@@ -293,7 +293,7 @@ var createBrowserFunctions = (browser) => [
293
293
  }),
294
294
  defineRunFunction({
295
295
  name: "browser_fill",
296
- label: "Browserfeld ausf\xFCllen",
296
+ label: "Fill browser field",
297
297
  description: "Fill an input or textarea by accessible label or another semantic target, firing the normal input events. Returns the resulting page.",
298
298
  schema: Type.Object({ target: targetSchema, value: Type.String() }, { additionalProperties: false }),
299
299
  resultSchema: snapshotSchema,
@@ -304,7 +304,7 @@ var createBrowserFunctions = (browser) => [
304
304
  }),
305
305
  defineRunFunction({
306
306
  name: "browser_select",
307
- label: "Im Browser ausw\xE4hlen",
307
+ label: "Select in browser",
308
308
  description: "Choose an option by its visible label in a native select element. For custom dropdowns use browser_click on the trigger and the visible option.",
309
309
  schema: Type.Object({ target: targetSchema, label: Type.String({ minLength: 1 }) }, { additionalProperties: false }),
310
310
  resultSchema: snapshotSchema,
@@ -315,7 +315,7 @@ var createBrowserFunctions = (browser) => [
315
315
  }),
316
316
  defineRunFunction({
317
317
  name: "browser_press",
318
- label: "Browsertaste dr\xFCcken",
318
+ label: "Press browser key",
319
319
  description: "Focus a target and press a Playwright key or chord such as Enter, Escape, Tab or ControlOrMeta+A. Returns the resulting page.",
320
320
  schema: Type.Object({ target: targetSchema, key: Type.String({ minLength: 1 }) }, { additionalProperties: false }),
321
321
  resultSchema: snapshotSchema,
@@ -326,7 +326,7 @@ var createBrowserFunctions = (browser) => [
326
326
  }),
327
327
  defineRunFunction({
328
328
  name: "browser_check",
329
- label: "Browserergebnis pr\xFCfen",
329
+ label: "Check browser result",
330
330
  description: "Assert visible target/text, resulting URL and absence of browser errors. Fails on mismatch; records successful evidence for this page until the next action/navigation/error. Supply at least one assertion. Browser errors are checked by default. Visibility assertions wait at most 5 seconds, shorter than actions.",
331
331
  schema: Type.Object({
332
332
  target: Type.Optional(targetSchema),
@@ -343,7 +343,7 @@ var createBrowserFunctions = (browser) => [
343
343
  }),
344
344
  defineRunFunction({
345
345
  name: "browser_viewport",
346
- label: "Browsergr\xF6\xDFe setzen",
346
+ label: "Set browser size",
347
347
  description: "Resize the page viewport in CSS pixels, for example to check a narrow layout. The default is 1920 x 1080 (16:9) and screenshots use the viewport size at scale 1; the chosen size stays for the run until changed again. Returns the resulting page.",
348
348
  schema: Type.Object({
349
349
  width: Type.Integer({ minimum: 320, maximum: 3840 }),
@@ -356,7 +356,7 @@ var createBrowserFunctions = (browser) => [
356
356
  }),
357
357
  defineRunFunction({
358
358
  name: "browser_screenshot",
359
- label: "Browser aufnehmen",
359
+ label: "Capture browser",
360
360
  description: screenshotDescription,
361
361
  schema: Type.Object({ label: Type.Optional(Type.String({ maxLength: 200 })), fullPage: Type.Optional(Type.Boolean()) }, { additionalProperties: false }),
362
362
  resultSchema: Type.Object({
@@ -373,7 +373,7 @@ var createBrowserFunctions = (browser) => [
373
373
  }),
374
374
  defineRunFunction({
375
375
  name: "browser_view_screenshot",
376
- label: "Browseraufnahme ansehen",
376
+ label: "View browser screenshot",
377
377
  description: "View this run's latest screenshot as native image input without a path. Invoke this native tool directly to receive pixels; calling it through TypeScript only verifies image availability. Requires an image-capable model for native image input.",
378
378
  nativeTool: true,
379
379
  schema: emptySchema,
@@ -383,12 +383,12 @@ var createBrowserFunctions = (browser) => [
383
383
  run: async ({ caller, signal }) => {
384
384
  signal?.throwIfAborted();
385
385
  await browser.image(caller.runId);
386
- return "Letzte Browseraufnahme dieses Runs ist verf\xFCgbar.";
386
+ return "The latest browser screenshot of this run is available.";
387
387
  }
388
388
  }),
389
389
  defineRunFunction({
390
390
  name: "browser_close",
391
- label: "Browser schlie\xDFen",
391
+ label: "Close browser",
392
392
  description: "Close this run's browser and discard its cookies. Saved screenshots remain in the document library.",
393
393
  schema: emptySchema,
394
394
  resultSchema: Type.Object({ closed: Type.Boolean() }, { additionalProperties: false }),
@@ -407,11 +407,11 @@ var createBrowserImageContribution = (browser) => ({
407
407
  if (outcome.toolName !== "browser_view_screenshot" || outcome.isError) return void 0;
408
408
  try {
409
409
  call.signal?.throwIfAborted();
410
- if (!call.modelReadsImages) throw new Error("Das gew\xE4hlte Modell unterst\xFCtzt keine Bilder. Screenshot \xFCber die Dokumente ansehen oder ein bildf\xE4higes Modell w\xE4hlen.");
410
+ if (!call.modelReadsImages) throw new Error("The selected model does not support images. View the screenshot in the documents or choose an image-capable model.");
411
411
  const data = (await browser.image(runId)).toString("base64");
412
412
  call.signal?.throwIfAborted();
413
413
  return { content: [
414
- { type: "text", text: "Letzte Browseraufnahme dieses Runs." },
414
+ { type: "text", text: "Latest browser screenshot of this run." },
415
415
  { type: "image", data, mimeType: "image/png" }
416
416
  ] };
417
417
  } catch (error) {
@@ -462,22 +462,22 @@ var install = (log) => new Promise((resolve, reject) => {
462
462
  const child = spawn(process.execPath, [playwrightCli(), "install", ...process.platform === "linux" ? ["--with-deps"] : [], "chromium"], { stdio: ["ignore", "pipe", "pipe"] });
463
463
  for (const stream of [child.stdout, child.stderr]) stream.on("data", (chunk) => log(chunk.toString().trimEnd()));
464
464
  child.once("error", reject);
465
- child.once("exit", (code) => code === 0 ? resolve() : reject(new Error(`playwright-core install chromium endete mit Code ${code}`)));
465
+ child.once("exit", (code) => code === 0 ? resolve() : reject(new Error(`playwright-core install chromium exited with code ${code}`)));
466
466
  });
467
467
  var createBrowserProvision = () => ({
468
468
  check: async () => {
469
469
  const configured = process.env[BROWSER_EXECUTABLE_VARIABLE];
470
470
  if (configured) {
471
- return await executable(configured) ? provisionReady : provisionGap("browser", `${BROWSER_EXECUTABLE_VARIABLE} nennt ${configured}; dort gibt es keinen ausf\xFChrbaren Browser`, false);
471
+ return await executable(configured) ? provisionReady : provisionGap("browser", `${BROWSER_EXECUTABLE_VARIABLE} names ${configured}; there is no executable browser there`, false);
472
472
  }
473
473
  const bundled = chromium.executablePath();
474
- return await executable(bundled) ? provisionReady : provisionGap("chromium", `Chromium fehlt unter ${bundled}; entweder ${BROWSER_EXECUTABLE_VARIABLE} auf einen vorhandenen Chrome setzen (auf einem Server in der Profilsektion ragents.browser, auf einem Arbeitsplatz in seiner Umgebung) oder die Provisionierung den Browser laden lassen`, true);
474
+ return await executable(bundled) ? provisionReady : provisionGap("chromium", `Chromium is missing at ${bundled}; either set ${BROWSER_EXECUTABLE_VARIABLE} to an existing Chrome (on a server in the profile section ragents.browser, on a workspace in its environment) or let provisioning download the browser`, true);
475
475
  },
476
476
  apply: async (_target, log) => {
477
477
  const state = await createBrowserProvision().check("");
478
478
  if (state.kind === "ready") return;
479
479
  if (!state.installable) throw new Error(state.instruction);
480
- log("Chromium f\xFCr playwright-core laden");
480
+ log("Downloading Chromium for playwright-core");
481
481
  await install(log);
482
482
  }
483
483
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../plugins/ragents.browser/server/index.ts", "../../../plugins/ragents.browser/executor/contract.ts", "../../../plugins/ragents.browser/server/browser.ts", "../../../plugins/ragents.browser/server/tools.ts", "../../../plugins/ragents.browser/provision.ts"],
4
- "sourcesContent": ["import type { RAgentsPlugin } from \"@ragents/engine\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { sandboxServicesToken } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport { documentStoreToken } from \"@ragents/host/ragents/document-store.js\";\nimport { BROWSER_EXECUTABLE_VARIABLE } from \"../executor/contract.js\";\nimport { RunBrowser } from \"./browser.js\";\nimport { browserRuntimeToken } from \"./contract.js\";\nimport { createBrowserFunctions, createBrowserImageContribution } from \"./tools.js\";\n\n/** Der Executor des Servers liest den Wert aus seiner Umgebung; ein Arbeitsplatz aus seiner eigenen, nie aus dem Profil. */\nexport const browserConfigDescriptors = [{ key: BROWSER_EXECUTABLE_VARIABLE, source: \"environment\" }] as const;\n\nconst browserPlugin: RAgentsPlugin = {\n manifest: { id: \"ragents.browser\" },\n register: (host) => {\n const documents = host.service(documentStoreToken);\n const browser = new RunBrowser({\n sandbox: host.service(sandboxServicesToken),\n filesFor: (runId) => documents.directoryFor(runId),\n });\n host.config(...browserConfigDescriptors);\n host.provide(browserRuntimeToken, browser);\n host.functions(...createBrowserFunctions(browser));\n host.agentRuntime(createBrowserImageContribution(browser));\n host.lifecycle({\n id: \"ragents.browser.lifecycle\",\n prepareSession: ({ runId }) => browser.restore(runId),\n stopSession: ({ runId }) => browser.close(runId),\n afterStopSession: ({ runId }) => browser.close(runId),\n deleteSession: ({ runId }) => browser.delete(runId),\n shutdown: () => browser.shutdown(),\n });\n },\n};\n\nexport const plugin: PluginModule = { requires: [\"ragents.documents\"], create: () => browserPlugin };\n", "export const BROWSER_OPERATIONS = {\n open: \"browser.open\",\n snapshot: \"browser.snapshot\",\n viewport: \"browser.viewport\",\n click: \"browser.click\",\n fill: \"browser.fill\",\n select: \"browser.select\",\n press: \"browser.press\",\n check: \"browser.check\",\n screenshot: \"browser.screenshot\",\n state: \"browser.state\",\n close: \"browser.close\",\n} as const;\n\n/** Nennt einen eigenen Chrome; auf einem Server setzt ihn die Profilsektion `ragents.browser`, auf einem Arbeitsplatz seine Umgebung. */\nexport const BROWSER_EXECUTABLE_VARIABLE = \"BROWSER_EXECUTABLE_PATH\";\n\nexport interface BrowserTarget {\n role?: string;\n name?: string;\n label?: string;\n text?: string;\n testId?: string;\n css?: string;\n frame?: string;\n nth?: number;\n first?: boolean;\n}\n\nexport interface BrowserViewport {\n width: number;\n height: number;\n}\n\nexport interface BrowserSnapshot {\n url: string;\n title: string;\n snapshot: string;\n truncated: boolean;\n errors: string[];\n}\n\nexport interface BrowserCheck {\n target?: BrowserTarget;\n text?: string;\n url?: string;\n count?: number;\n noErrors?: boolean;\n}\n\n/** Was eine bestandene Pr\u00FCfung belegt; die Zeit setzt, wer die Evidenz des Runs h\u00E4lt. */\nexport interface BrowserCheckResult {\n url: string;\n assertions: string[];\n}\n\n/** Der Stand der Seite nach einer Operation; der Aufrufer h\u00E4lt daraus die Evidenz des Runs. */\nexport interface BrowserPageState {\n url: string;\n /** Seit der letzten Aktion oder Navigation hat eine Pr\u00FCfung bestanden. */\n checked: boolean;\n errors: string[];\n /** Die Kennungen der Aufnahmen seit der letzten Aktion oder Navigation, so wie der Aufrufer sie vergeben hat. */\n screenshots: string[];\n}\n\n/** Das Ergebnis einer Operation an der Seite und der Stand, in dem sie die Seite hinterl\u00E4sst. */\nexport interface BrowserStep<T> {\n result: T;\n page: BrowserPageState;\n}\n", "import { randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { SandboxServices } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport { documentsApiPrefix } from \"@ragents/plugins/ragents.documents/contract.js\";\nimport {\n BROWSER_OPERATIONS,\n type BrowserCheck,\n type BrowserCheckResult,\n type BrowserPageState,\n type BrowserSnapshot,\n type BrowserStep,\n type BrowserTarget,\n type BrowserViewport,\n} from \"../executor/contract.js\";\nimport type { BrowserCallOptions, BrowserEvidence, BrowserRuntime } from \"./contract.js\";\n\nexport const DEFAULT_VIEWPORT: BrowserViewport = { width: 1920, height: 1080 };\n\ninterface SavedCapture {\n name: string;\n path: string;\n}\n\n/** Was der Server von der Seite eines Runs wei\u00DF: den zuletzt gemeldeten Stand und die Zeit der letzten bestandenen Pr\u00FCfung. */\ninterface ObservedPage {\n url: string;\n checkedAt?: string;\n errors: string[];\n screenshots: string[];\n}\n\nexport interface BrowserOptions {\n sandbox: Pick<SandboxServices, \"execute\">;\n filesFor: (runId: string) => Promise<string>;\n}\n\nconst capturePath = (id: string): string => `browser/${id}.png`;\n\n/** Die Browserpr\u00FCfung eines Runs: die Seite lebt beim Executor des Runs, Evidenz, Aufnahmen und Viewport h\u00E4lt der Server. */\nexport class RunBrowser implements BrowserRuntime {\n readonly #options: BrowserOptions;\n readonly #pages = new Map<string, ObservedPage>();\n readonly #viewports = new Map<string, BrowserViewport>();\n readonly #captures = new Map<string, SavedCapture[]>();\n readonly #captureLoads = new Map<string, Promise<void>>();\n readonly #captureWrites = new Map<string, Promise<void>>();\n readonly #generations = new Map<string, number>();\n #shutdown = false;\n\n constructor(options: BrowserOptions) {\n this.#options = options;\n }\n\n restore(runId: string): Promise<void> {\n const loading = this.#captureLoads.get(runId);\n if (loading) return loading;\n const pending = this.#restore(runId).catch((error) => { this.#captureLoads.delete(runId); throw error; });\n this.#captureLoads.set(runId, pending);\n return pending;\n }\n\n async open(runId: string, url: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n options.signal?.throwIfAborted();\n this.#assertRunning();\n const generation = this.#generation(runId);\n await this.restore(runId);\n options.signal?.throwIfAborted();\n this.#assertRunning();\n if (generation !== this.#generation(runId)) throw new Error(\"Der Browser wurde beendet.\");\n return this.#run(runId, BROWSER_OPERATIONS.open, { url, viewport: this.#viewports.get(runId) ?? DEFAULT_VIEWPORT }, options);\n }\n\n snapshot(runId: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.snapshot, null, options);\n }\n\n /** Der gew\u00E4hlte Viewport gilt f\u00FCr den Run, auch f\u00FCr einen sp\u00E4ter neu gestarteten Browser. */\n async viewport(runId: string, viewport: BrowserViewport, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n const snapshot = await this.#run<BrowserSnapshot>(runId, BROWSER_OPERATIONS.viewport, viewport, options);\n this.#viewports.set(runId, viewport);\n return snapshot;\n }\n\n click(runId: string, target: BrowserTarget, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.click, { target }, options);\n }\n\n fill(runId: string, target: BrowserTarget, value: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.fill, { target, value }, options);\n }\n\n select(runId: string, target: BrowserTarget, label: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.select, { target, label }, options);\n }\n\n press(runId: string, target: BrowserTarget, key: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.press, { target, key }, options);\n }\n\n /** Die Zeit einer bestandenen Pr\u00FCfung ist die des Servers, damit sie sich mit seinen \u00FCbrigen Zeiten vergleichen l\u00E4sst. */\n async check(runId: string, input: BrowserCheck, options: BrowserCallOptions = {}): Promise<{ checkedAt: string; url: string; assertions: string[] }> {\n const generation = this.#generation(runId);\n const { result, page } = await this.#execute<BrowserCheckResult>(runId, generation, BROWSER_OPERATIONS.check, input, options);\n const checkedAt = new Date().toISOString();\n this.#observe(runId, generation, page, checkedAt);\n return { checkedAt, url: result.url, assertions: result.assertions };\n }\n\n async screenshot(runId: string, input: { label?: string; fullPage?: boolean }, options: BrowserCallOptions = {}): Promise<{\n name: string;\n path: string;\n url: string;\n markdown: string;\n capturedAt: string;\n }> {\n await this.restore(runId);\n const id = randomUUID();\n const image = await this.#run<string>(runId, BROWSER_OPERATIONS.screenshot, { id, fullPage: input.fullPage ?? false }, options);\n const capture = { name: input.label?.trim() || \"Browseraufnahme\", path: capturePath(id) };\n await this.#store(runId, capture, Buffer.from(image, \"base64\"));\n const url = this.#captureUrl(runId, capture.path);\n return {\n ...capture,\n url,\n markdown: `![${capture.name.replace(/[\\[\\]\\\\]/g, \"\")}](${url})`,\n capturedAt: new Date().toISOString(),\n };\n }\n\n async image(runId: string): Promise<Buffer> {\n const latest = this.#captures.get(runId)?.at(-1);\n if (!latest) throw new Error(\"F\u00FCr diesen Run gibt es noch keinen Browser-Screenshot. Zuerst browser_screenshot aufrufen.\");\n return readFile(path.join(await this.#options.filesFor(runId), latest.path));\n }\n\n evidence(runId: string): BrowserEvidence {\n const captures = this.#captures.get(runId) ?? [];\n const shown = (capture: SavedCapture) => ({ name: capture.name, url: this.#captureUrl(runId, capture.path) });\n const screenshots = captures.map(shown);\n const page = this.#pages.get(runId);\n if (!page) return { screenshots, currentScreenshots: [], errors: [] };\n const current = page.screenshots\n .map((id) => captures.find((capture) => capture.path === capturePath(id)))\n .filter((capture): capture is SavedCapture => capture !== undefined);\n return {\n ...(page.checkedAt ? { checkedAt: page.checkedAt } : {}),\n url: page.url,\n screenshots,\n currentScreenshots: current.map(shown),\n errors: [...page.errors],\n };\n }\n\n /** Schlie\u00DFt den Browser beim Executor des Runs; ein nicht verbundener Arbeitsplatz h\u00E4lt nichts, was sich jetzt schlie\u00DFen lie\u00DFe. */\n async close(runId: string): Promise<void> {\n this.#forget(runId);\n await this.#options.sandbox.execute(runId, BROWSER_OPERATIONS.close, null, { whenReachable: true });\n }\n\n async delete(runId: string): Promise<void> {\n await this.close(runId);\n this.#viewports.delete(runId);\n this.#captures.delete(runId);\n this.#captureLoads.delete(runId);\n this.#captureWrites.delete(runId);\n }\n\n async shutdown(): Promise<void> {\n this.#shutdown = true;\n const results = await Promise.allSettled([...this.#pages.keys()].map((runId) => this.close(runId)));\n this.#viewports.clear();\n this.#captures.clear();\n this.#captureLoads.clear();\n this.#captureWrites.clear();\n const failed = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\n if (failed) throw failed.reason;\n }\n\n #assertRunning(): void {\n if (this.#shutdown) throw new Error(\"Der Browserdienst ist beendet.\");\n }\n\n #generation(runId: string): number {\n return this.#generations.get(runId) ?? 0;\n }\n\n /** Ein geschlossener Browser hat keine Seite mehr; Ergebnisse, die vorher begonnen haben, z\u00E4hlen danach nicht. */\n #forget(runId: string): void {\n this.#generations.set(runId, this.#generation(runId) + 1);\n this.#pages.delete(runId);\n }\n\n async #run<T>(runId: string, operation: string, input: unknown, options: BrowserCallOptions): Promise<T> {\n const generation = this.#generation(runId);\n const { result, page } = await this.#execute<T>(runId, generation, operation, input, options);\n this.#observe(runId, generation, page);\n return result;\n }\n\n async #execute<T>(runId: string, generation: number, operation: string, input: unknown, options: BrowserCallOptions): Promise<BrowserStep<T>> {\n try {\n return await this.#options.sandbox.execute(runId, operation, input, options) as BrowserStep<T>;\n } catch (error) {\n await this.#resync(runId, generation);\n throw error;\n }\n }\n\n /** Nach einem gescheiterten Aufruf fragt der Server den Stand der Seite nach; wer ihn nicht nennen kann, hat keine Seite. */\n async #resync(runId: string, generation: number): Promise<void> {\n const page = await this.#options.sandbox.execute(runId, BROWSER_OPERATIONS.state, null, { whenReachable: true })\n .then((value) => value as BrowserPageState | null, () => null);\n this.#observe(runId, generation, page);\n }\n\n /** Nur eine bestandene Pr\u00FCfung setzt die Zeit; jeder andere Stand beh\u00E4lt sie, solange die Seite gepr\u00FCft bleibt. */\n #observe(runId: string, generation: number, page: BrowserPageState | null, checkedAt?: string): void {\n if (generation !== this.#generation(runId)) return;\n if (!page) {\n this.#pages.delete(runId);\n return;\n }\n const stamp = page.checked ? checkedAt ?? this.#pages.get(runId)?.checkedAt : undefined;\n this.#pages.set(runId, {\n url: page.url,\n errors: page.errors,\n screenshots: page.screenshots,\n ...(stamp ? { checkedAt: stamp } : {}),\n });\n }\n\n /** Legt eine Aufnahme in die Dateiablage des Runs und schreibt die Aufnahmeliste atomar; die Aufnahmen eines Runs der Reihe nach. */\n #store(runId: string, capture: SavedCapture, image: Buffer): Promise<void> {\n const previous = this.#captureWrites.get(runId) ?? Promise.resolve();\n const pending = previous.then(async () => {\n const directory = await this.#options.filesFor(runId);\n await mkdir(path.join(directory, \"browser\"), { recursive: true });\n await writeFile(path.join(directory, capture.path), image);\n const captures = [...this.#captures.get(runId) ?? [], capture];\n const manifest = path.join(directory, \"browser\", \".captures.json\");\n const temporary = `${manifest}.${randomUUID()}.tmp`;\n await writeFile(temporary, JSON.stringify(captures), \"utf8\");\n await rename(temporary, manifest);\n this.#captures.set(runId, captures);\n });\n this.#captureWrites.set(runId, pending.then(() => undefined, () => undefined));\n return pending;\n }\n\n #captureUrl(runId: string, filename: string): string {\n return `${documentsApiPrefix}/runs/${encodeURIComponent(runId)}/files/content?path=${encodeURIComponent(filename)}`;\n }\n\n async #restore(runId: string): Promise<void> {\n const directory = await this.#options.filesFor(runId);\n const manifest = path.join(directory, \"browser\", \".captures.json\");\n let content: string;\n try { content = await readFile(manifest, \"utf8\"); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n this.#captures.set(runId, []);\n return;\n }\n const captures: unknown = JSON.parse(content);\n if (!Array.isArray(captures) || captures.some((entry) => !entry || typeof entry.name !== \"string\"\n || typeof entry.path !== \"string\" || !/^browser\\/[a-f0-9-]{36}\\.png$/.test(entry.path))) {\n throw new Error(\"Die gespeicherte Browser-Aufnahmeliste dieses Runs ist besch\u00E4digt.\");\n }\n this.#captures.set(runId, captures);\n }\n}\n", "import { Type } from \"typebox\";\nimport { defineRunFunction, type AgentContribution, type RunFunction } from \"@ragents/engine\";\nimport { alwaysAvailable } from \"@ragents/host/plugin-support/tool-availability.js\";\nimport { RunBrowser } from \"./browser.js\";\n\nconst targetSchema = Type.Object({\n role: Type.Optional(Type.String({ minLength: 1, description: \"Accessible role, e.g. button, textbox, link, combobox.\" })),\n name: Type.Optional(Type.String({ description: \"Exact accessible name for role.\" })),\n label: Type.Optional(Type.String({ minLength: 1, description: \"Exact form label.\" })),\n text: Type.Optional(Type.String({ minLength: 1, description: \"Exact visible text.\" })),\n testId: Type.Optional(Type.String({ minLength: 1, description: \"data-testid value.\" })),\n css: Type.Optional(Type.String({ minLength: 1, description: \"CSS selector for elements without useful accessible names.\" })),\n frame: Type.Optional(Type.String({ minLength: 1, description: \"CSS selector of an iframe containing the target.\" })),\n nth: Type.Optional(Type.Integer({ minimum: 0, description: \"0-based index among all matches when the target matches several elements; not together with first.\" })),\n first: Type.Optional(Type.Boolean({ description: \"Use the first match when the target matches several elements; not together with nth.\" })),\n}, { additionalProperties: false, description: \"Use exactly one of role (with optional name), label, text, testId, css. Resolve semantic targets server-side; never copy snapshot element IDs. Ambiguous targets are errors naming the candidates unless nth or first selects one.\" });\n\nconst snapshotSchema = Type.Object({\n url: Type.String(),\n title: Type.String(),\n snapshot: Type.String(),\n truncated: Type.Boolean(),\n errors: Type.Array(Type.String()),\n}, { additionalProperties: false });\n\nconst emptySchema = Type.Object({}, { additionalProperties: false });\nconst targetInputSchema = Type.Object({ target: targetSchema }, { additionalProperties: false });\nconst screenshotDescription = \"Capture the real browser page into this run's document library. The returned URL and Markdown display it to the user. Call browser_view_screenshot to inspect the latest capture as an image without copying a path.\";\n\nexport const createBrowserFunctions = (browser: RunBrowser): RunFunction[] => [\n defineRunFunction({\n name: \"browser_open\",\n label: \"Browser \u00F6ffnen\",\n description: \"Open an HTTP(S) page in this run's isolated headless browser. Returns its accessible structure and browser errors. Reuses the current run browser; other runs have separate cookies and processes.\",\n schema: Type.Object({ url: Type.String({ minLength: 1 }) }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.open(caller.runId, input.url, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_snapshot\",\n label: \"Browser lesen\",\n description: \"Read the current real page's accessible structure, title, URL and errors. Use role/name or labels for subsequent actions; snapshot reference IDs never need to be copied.\",\n schema: emptySchema,\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId) => ({ ...await browser.snapshot(caller.runId, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_click\",\n label: \"Im Browser klicken\",\n description: \"Click a uniquely identified visible element with Playwright auto-waiting. Returns the actual resulting page. Ambiguous or absent targets are errors.\",\n schema: targetInputSchema,\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.click(caller.runId, input.target, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_fill\",\n label: \"Browserfeld ausf\u00FCllen\",\n description: \"Fill an input or textarea by accessible label or another semantic target, firing the normal input events. Returns the resulting page.\",\n schema: Type.Object({ target: targetSchema, value: Type.String() }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.fill(caller.runId, input.target, input.value, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_select\",\n label: \"Im Browser ausw\u00E4hlen\",\n description: \"Choose an option by its visible label in a native select element. For custom dropdowns use browser_click on the trigger and the visible option.\",\n schema: Type.Object({ target: targetSchema, label: Type.String({ minLength: 1 }) }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.select(caller.runId, input.target, input.label, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_press\",\n label: \"Browsertaste dr\u00FCcken\",\n description: \"Focus a target and press a Playwright key or chord such as Enter, Escape, Tab or ControlOrMeta+A. Returns the resulting page.\",\n schema: Type.Object({ target: targetSchema, key: Type.String({ minLength: 1 }) }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.press(caller.runId, input.target, input.key, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_check\",\n label: \"Browserergebnis pr\u00FCfen\",\n description: \"Assert visible target/text, resulting URL and absence of browser errors. Fails on mismatch; records successful evidence for this page until the next action/navigation/error. Supply at least one assertion. Browser errors are checked by default. Visibility assertions wait at most 5 seconds, shorter than actions.\",\n schema: Type.Object({\n target: Type.Optional(targetSchema),\n text: Type.Optional(Type.String({ minLength: 1 })),\n url: Type.Optional(Type.String({ minLength: 1 })),\n count: Type.Optional(Type.Integer({ minimum: 0, description: \"Expected number of visible matches of target instead of exactly one; 0 asserts absence. Requires target without nth or first.\" })),\n noErrors: Type.Optional(Type.Boolean({ description: \"true (default): the check also fails on any browser error collected since the last navigation. false: ignore browser errors and judge only the assertions; use this when the page has known noise such as 404s or third-party script errors that are not part of the check.\" })),\n }, { additionalProperties: false }),\n resultSchema: Type.Object({ checkedAt: Type.String(), url: Type.String(), assertions: Type.Array(Type.String()) }, { additionalProperties: false }),\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: ({ caller, signal }, toolCallId, input) => browser.check(caller.runId, input, { signal, toolCallId }),\n }),\n defineRunFunction({\n name: \"browser_viewport\",\n label: \"Browsergr\u00F6\u00DFe setzen\",\n description: \"Resize the page viewport in CSS pixels, for example to check a narrow layout. The default is 1920 x 1080 (16:9) and screenshots use the viewport size at scale 1; the chosen size stays for the run until changed again. Returns the resulting page.\",\n schema: Type.Object({\n width: Type.Integer({ minimum: 320, maximum: 3840 }),\n height: Type.Integer({ minimum: 240, maximum: 2160 }),\n }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.viewport(caller.runId, input, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_screenshot\",\n label: \"Browser aufnehmen\",\n description: screenshotDescription,\n schema: Type.Object({ label: Type.Optional(Type.String({ maxLength: 200 })), fullPage: Type.Optional(Type.Boolean()) }, { additionalProperties: false }),\n resultSchema: Type.Object({\n name: Type.String(),\n path: Type.String(),\n url: Type.String(),\n markdown: Type.String(),\n capturedAt: Type.String(),\n }, { additionalProperties: false }),\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: ({ caller, signal }, toolCallId, input) => browser.screenshot(caller.runId, input, { signal, toolCallId }),\n }),\n defineRunFunction({\n name: \"browser_view_screenshot\",\n label: \"Browseraufnahme ansehen\",\n description: \"View this run's latest screenshot as native image input without a path. Invoke this native tool directly to receive pixels; calling it through TypeScript only verifies image availability. Requires an image-capable model for native image input.\",\n nativeTool: true,\n schema: emptySchema,\n resultSchema: Type.String(),\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }) => {\n signal?.throwIfAborted();\n await browser.image(caller.runId);\n return \"Letzte Browseraufnahme dieses Runs ist verf\u00FCgbar.\";\n },\n }),\n defineRunFunction({\n name: \"browser_close\",\n label: \"Browser schlie\u00DFen\",\n description: \"Close this run's browser and discard its cookies. Saved screenshots remain in the document library.\",\n schema: emptySchema,\n resultSchema: Type.Object({ closed: Type.Boolean() }, { additionalProperties: false }),\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller }) => { await browser.close(caller.runId); return { closed: true }; },\n }),\n];\n\nexport const createBrowserImageContribution = (browser: RunBrowser): AgentContribution => ({\n id: \"ragents.browser.image\",\n afterToolCall: async ({ runId }, outcome, call) => {\n if (outcome.toolName !== \"browser_view_screenshot\" || outcome.isError) return undefined;\n try {\n call.signal?.throwIfAborted();\n if (!call.modelReadsImages) throw new Error(\"Das gew\u00E4hlte Modell unterst\u00FCtzt keine Bilder. Screenshot \u00FCber die Dokumente ansehen oder ein bildf\u00E4higes Modell w\u00E4hlen.\");\n const data = (await browser.image(runId)).toString(\"base64\");\n call.signal?.throwIfAborted();\n return { content: [\n { type: \"text\", text: \"Letzte Browseraufnahme dieses Runs.\" },\n { type: \"image\", data, mimeType: \"image/png\" },\n ] };\n } catch (error) {\n return { content: [{ type: \"text\", text: error instanceof Error ? error.message : String(error) }], isError: true };\n }\n },\n});\n", "import { spawn } from \"node:child_process\";\nimport { access, constants } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { chromium } from \"playwright-core\";\nimport {\n hostPackageFolder,\n provisionGap,\n provisionReady,\n type PluginProvision,\n} from \"@ragents/host/plugin-support/provision.js\";\nimport { BROWSER_EXECUTABLE_VARIABLE } from \"./executor/contract.js\";\n\nconst executable = async (file: string): Promise<boolean> => access(file, constants.X_OK).then(() => true, () => false);\n\nconst playwrightCli = (): string => path.join(hostPackageFolder(\"playwright-core\"), \"cli.js\");\n\nconst install = (log: (line: string) => void): Promise<void> => new Promise((resolve, reject) => {\n const child = spawn(process.execPath, [playwrightCli(), \"install\", ...(process.platform === \"linux\" ? [\"--with-deps\"] : []), \"chromium\"], { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n for (const stream of [child.stdout, child.stderr]) stream.on(\"data\", (chunk: Buffer) => log(chunk.toString().trimEnd()));\n child.once(\"error\", reject);\n child.once(\"exit\", (code) => code === 0 ? resolve() : reject(new Error(`playwright-core install chromium endete mit Code ${code}`)));\n});\n\n// Playwright verwaltet seinen Browsercache selbst; der Werkzeugordner des Plugins bleibt leer.\nexport const createBrowserProvision = (): PluginProvision => ({\n check: async () => {\n const configured = process.env[BROWSER_EXECUTABLE_VARIABLE];\n if (configured) {\n return await executable(configured)\n ? provisionReady\n : provisionGap(\"browser\", `${BROWSER_EXECUTABLE_VARIABLE} nennt ${configured}; dort gibt es keinen ausf\u00FChrbaren Browser`, false);\n }\n const bundled = chromium.executablePath();\n return await executable(bundled)\n ? provisionReady\n : provisionGap(\"chromium\", `Chromium fehlt unter ${bundled}; entweder ${BROWSER_EXECUTABLE_VARIABLE} auf einen vorhandenen Chrome `\n + \"setzen (auf einem Server in der Profilsektion ragents.browser, auf einem Arbeitsplatz in seiner Umgebung) oder die \"\n + \"Provisionierung den Browser laden lassen\", true);\n },\n apply: async (_target, log) => {\n const state = await createBrowserProvision().check(\"\");\n if (state.kind === \"ready\") return;\n if (!state.installable) throw new Error(state.instruction);\n log(\"Chromium f\u00FCr playwright-core laden\");\n await install(log);\n },\n});\n\nexport const provision = createBrowserProvision();\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { RAgentsPlugin } from \"@ragents/engine\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { sandboxServicesToken } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport { documentStoreToken } from \"@ragents/host/ragents/document-store.js\";\nimport { BROWSER_EXECUTABLE_VARIABLE } from \"../executor/contract.js\";\nimport { RunBrowser } from \"./browser.js\";\nimport { browserRuntimeToken } from \"./contract.js\";\nimport { createBrowserFunctions, createBrowserImageContribution } from \"./tools.js\";\n\n/** The server's executor reads the value from its environment; a workspace from its own, never from the profile. */\nexport const browserConfigDescriptors = [{ key: BROWSER_EXECUTABLE_VARIABLE, source: \"environment\" }] as const;\n\nconst browserPlugin: RAgentsPlugin = {\n manifest: { id: \"ragents.browser\" },\n register: (host) => {\n const documents = host.service(documentStoreToken);\n const browser = new RunBrowser({\n sandbox: host.service(sandboxServicesToken),\n filesFor: (runId) => documents.directoryFor(runId),\n });\n host.config(...browserConfigDescriptors);\n host.provide(browserRuntimeToken, browser);\n host.functions(...createBrowserFunctions(browser));\n host.agentRuntime(createBrowserImageContribution(browser));\n host.lifecycle({\n id: \"ragents.browser.lifecycle\",\n prepareSession: ({ runId }) => browser.restore(runId),\n stopSession: ({ runId }) => browser.close(runId),\n afterStopSession: ({ runId }) => browser.close(runId),\n deleteSession: ({ runId }) => browser.delete(runId),\n shutdown: () => browser.shutdown(),\n });\n },\n};\n\nexport const plugin: PluginModule = { requires: [\"ragents.documents\"], create: () => browserPlugin };\n", "export const BROWSER_OPERATIONS = {\n open: \"browser.open\",\n snapshot: \"browser.snapshot\",\n viewport: \"browser.viewport\",\n click: \"browser.click\",\n fill: \"browser.fill\",\n select: \"browser.select\",\n press: \"browser.press\",\n check: \"browser.check\",\n screenshot: \"browser.screenshot\",\n state: \"browser.state\",\n close: \"browser.close\",\n} as const;\n\n/** Names a custom Chrome; on a server the profile section `ragents.browser` sets it, on a workspace its environment. */\nexport const BROWSER_EXECUTABLE_VARIABLE = \"BROWSER_EXECUTABLE_PATH\";\n\nexport interface BrowserTarget {\n role?: string;\n name?: string;\n label?: string;\n text?: string;\n testId?: string;\n css?: string;\n frame?: string;\n nth?: number;\n first?: boolean;\n}\n\nexport interface BrowserViewport {\n width: number;\n height: number;\n}\n\nexport interface BrowserSnapshot {\n url: string;\n title: string;\n snapshot: string;\n truncated: boolean;\n errors: string[];\n}\n\nexport interface BrowserCheck {\n target?: BrowserTarget;\n text?: string;\n url?: string;\n count?: number;\n noErrors?: boolean;\n}\n\n/** What a passed check proves; the time is set by whoever holds the run's evidence. */\nexport interface BrowserCheckResult {\n url: string;\n assertions: string[];\n}\n\n/** The page state after an operation; the caller derives the run's evidence from it. */\nexport interface BrowserPageState {\n url: string;\n /** A check has passed since the last action or navigation. */\n checked: boolean;\n errors: string[];\n /** The ids of the screenshots since the last action or navigation, as the caller assigned them. */\n screenshots: string[];\n}\n\n/** The result of an operation on the page and the state it leaves the page in. */\nexport interface BrowserStep<T> {\n result: T;\n page: BrowserPageState;\n}\n", "import { randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { SandboxServices } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport { documentsApiPrefix } from \"@ragents/plugins/ragents.documents/contract.js\";\nimport {\n BROWSER_OPERATIONS,\n type BrowserCheck,\n type BrowserCheckResult,\n type BrowserPageState,\n type BrowserSnapshot,\n type BrowserStep,\n type BrowserTarget,\n type BrowserViewport,\n} from \"../executor/contract.js\";\nimport type { BrowserCallOptions, BrowserEvidence, BrowserRuntime } from \"./contract.js\";\n\nexport const DEFAULT_VIEWPORT: BrowserViewport = { width: 1920, height: 1080 };\n\ninterface SavedCapture {\n name: string;\n path: string;\n}\n\n/** What the server knows about a run's page: the last reported state and the time of the last passed check. */\ninterface ObservedPage {\n url: string;\n checkedAt?: string;\n errors: string[];\n screenshots: string[];\n}\n\nexport interface BrowserOptions {\n sandbox: Pick<SandboxServices, \"execute\">;\n filesFor: (runId: string) => Promise<string>;\n}\n\nconst capturePath = (id: string): string => `browser/${id}.png`;\n\n/** A run's browser testing: the page lives in the run's executor, the server holds evidence, screenshots and viewport. */\nexport class RunBrowser implements BrowserRuntime {\n readonly #options: BrowserOptions;\n readonly #pages = new Map<string, ObservedPage>();\n readonly #viewports = new Map<string, BrowserViewport>();\n readonly #captures = new Map<string, SavedCapture[]>();\n readonly #captureLoads = new Map<string, Promise<void>>();\n readonly #captureWrites = new Map<string, Promise<void>>();\n readonly #generations = new Map<string, number>();\n #shutdown = false;\n\n constructor(options: BrowserOptions) {\n this.#options = options;\n }\n\n restore(runId: string): Promise<void> {\n const loading = this.#captureLoads.get(runId);\n if (loading) return loading;\n const pending = this.#restore(runId).catch((error) => { this.#captureLoads.delete(runId); throw error; });\n this.#captureLoads.set(runId, pending);\n return pending;\n }\n\n async open(runId: string, url: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n options.signal?.throwIfAborted();\n this.#assertRunning();\n const generation = this.#generation(runId);\n await this.restore(runId);\n options.signal?.throwIfAborted();\n this.#assertRunning();\n if (generation !== this.#generation(runId)) throw new Error(\"The browser was closed.\");\n return this.#run(runId, BROWSER_OPERATIONS.open, { url, viewport: this.#viewports.get(runId) ?? DEFAULT_VIEWPORT }, options);\n }\n\n snapshot(runId: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.snapshot, null, options);\n }\n\n /** The chosen viewport applies to the run, including a browser restarted later. */\n async viewport(runId: string, viewport: BrowserViewport, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n const snapshot = await this.#run<BrowserSnapshot>(runId, BROWSER_OPERATIONS.viewport, viewport, options);\n this.#viewports.set(runId, viewport);\n return snapshot;\n }\n\n click(runId: string, target: BrowserTarget, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.click, { target }, options);\n }\n\n fill(runId: string, target: BrowserTarget, value: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.fill, { target, value }, options);\n }\n\n select(runId: string, target: BrowserTarget, label: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.select, { target, label }, options);\n }\n\n press(runId: string, target: BrowserTarget, key: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.press, { target, key }, options);\n }\n\n /** The time of a passed check is the server's, so it compares with its other times. */\n async check(runId: string, input: BrowserCheck, options: BrowserCallOptions = {}): Promise<{ checkedAt: string; url: string; assertions: string[] }> {\n const generation = this.#generation(runId);\n const { result, page } = await this.#execute<BrowserCheckResult>(runId, generation, BROWSER_OPERATIONS.check, input, options);\n const checkedAt = new Date().toISOString();\n this.#observe(runId, generation, page, checkedAt);\n return { checkedAt, url: result.url, assertions: result.assertions };\n }\n\n async screenshot(runId: string, input: { label?: string; fullPage?: boolean }, options: BrowserCallOptions = {}): Promise<{\n name: string;\n path: string;\n url: string;\n markdown: string;\n capturedAt: string;\n }> {\n await this.restore(runId);\n const id = randomUUID();\n const image = await this.#run<string>(runId, BROWSER_OPERATIONS.screenshot, { id, fullPage: input.fullPage ?? false }, options);\n const capture = { name: input.label?.trim() || \"Browser screenshot\", path: capturePath(id) };\n await this.#store(runId, capture, Buffer.from(image, \"base64\"));\n const url = this.#captureUrl(runId, capture.path);\n return {\n ...capture,\n url,\n markdown: `![${capture.name.replace(/[\\[\\]\\\\]/g, \"\")}](${url})`,\n capturedAt: new Date().toISOString(),\n };\n }\n\n async image(runId: string): Promise<Buffer> {\n const latest = this.#captures.get(runId)?.at(-1);\n if (!latest) throw new Error(\"There is no browser screenshot for this run yet. Call browser_screenshot first.\");\n return readFile(path.join(await this.#options.filesFor(runId), latest.path));\n }\n\n evidence(runId: string): BrowserEvidence {\n const captures = this.#captures.get(runId) ?? [];\n const shown = (capture: SavedCapture) => ({ name: capture.name, url: this.#captureUrl(runId, capture.path) });\n const screenshots = captures.map(shown);\n const page = this.#pages.get(runId);\n if (!page) return { screenshots, currentScreenshots: [], errors: [] };\n const current = page.screenshots\n .map((id) => captures.find((capture) => capture.path === capturePath(id)))\n .filter((capture): capture is SavedCapture => capture !== undefined);\n return {\n ...(page.checkedAt ? { checkedAt: page.checkedAt } : {}),\n url: page.url,\n screenshots,\n currentScreenshots: current.map(shown),\n errors: [...page.errors],\n };\n }\n\n /** Closes the browser in the run's executor; a disconnected workspace holds nothing that could be closed now. */\n async close(runId: string): Promise<void> {\n this.#forget(runId);\n await this.#options.sandbox.execute(runId, BROWSER_OPERATIONS.close, null, { whenReachable: true });\n }\n\n async delete(runId: string): Promise<void> {\n await this.close(runId);\n this.#viewports.delete(runId);\n this.#captures.delete(runId);\n this.#captureLoads.delete(runId);\n this.#captureWrites.delete(runId);\n }\n\n async shutdown(): Promise<void> {\n this.#shutdown = true;\n const results = await Promise.allSettled([...this.#pages.keys()].map((runId) => this.close(runId)));\n this.#viewports.clear();\n this.#captures.clear();\n this.#captureLoads.clear();\n this.#captureWrites.clear();\n const failed = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\n if (failed) throw failed.reason;\n }\n\n #assertRunning(): void {\n if (this.#shutdown) throw new Error(\"The browser service has ended.\");\n }\n\n #generation(runId: string): number {\n return this.#generations.get(runId) ?? 0;\n }\n\n /** A closed browser has no page anymore; results that started before no longer count afterwards. */\n #forget(runId: string): void {\n this.#generations.set(runId, this.#generation(runId) + 1);\n this.#pages.delete(runId);\n }\n\n async #run<T>(runId: string, operation: string, input: unknown, options: BrowserCallOptions): Promise<T> {\n const generation = this.#generation(runId);\n const { result, page } = await this.#execute<T>(runId, generation, operation, input, options);\n this.#observe(runId, generation, page);\n return result;\n }\n\n async #execute<T>(runId: string, generation: number, operation: string, input: unknown, options: BrowserCallOptions): Promise<BrowserStep<T>> {\n try {\n return await this.#options.sandbox.execute(runId, operation, input, options) as BrowserStep<T>;\n } catch (error) {\n await this.#resync(runId, generation);\n throw error;\n }\n }\n\n /** After a failed call the server asks for the page state; whoever cannot report it has no page. */\n async #resync(runId: string, generation: number): Promise<void> {\n const page = await this.#options.sandbox.execute(runId, BROWSER_OPERATIONS.state, null, { whenReachable: true })\n .then((value) => value as BrowserPageState | null, () => null);\n this.#observe(runId, generation, page);\n }\n\n /** Only a passed check sets the time; every other state keeps it as long as the page stays checked. */\n #observe(runId: string, generation: number, page: BrowserPageState | null, checkedAt?: string): void {\n if (generation !== this.#generation(runId)) return;\n if (!page) {\n this.#pages.delete(runId);\n return;\n }\n const stamp = page.checked ? checkedAt ?? this.#pages.get(runId)?.checkedAt : undefined;\n this.#pages.set(runId, {\n url: page.url,\n errors: page.errors,\n screenshots: page.screenshots,\n ...(stamp ? { checkedAt: stamp } : {}),\n });\n }\n\n /** Puts a screenshot into the run's file storage and writes the screenshot list atomically; a run's screenshots one after another. */\n #store(runId: string, capture: SavedCapture, image: Buffer): Promise<void> {\n const previous = this.#captureWrites.get(runId) ?? Promise.resolve();\n const pending = previous.then(async () => {\n const directory = await this.#options.filesFor(runId);\n await mkdir(path.join(directory, \"browser\"), { recursive: true });\n await writeFile(path.join(directory, capture.path), image);\n const captures = [...this.#captures.get(runId) ?? [], capture];\n const manifest = path.join(directory, \"browser\", \".captures.json\");\n const temporary = `${manifest}.${randomUUID()}.tmp`;\n await writeFile(temporary, JSON.stringify(captures), \"utf8\");\n await rename(temporary, manifest);\n this.#captures.set(runId, captures);\n });\n this.#captureWrites.set(runId, pending.then(() => undefined, () => undefined));\n return pending;\n }\n\n #captureUrl(runId: string, filename: string): string {\n return `${documentsApiPrefix}/runs/${encodeURIComponent(runId)}/files/content?path=${encodeURIComponent(filename)}`;\n }\n\n async #restore(runId: string): Promise<void> {\n const directory = await this.#options.filesFor(runId);\n const manifest = path.join(directory, \"browser\", \".captures.json\");\n let content: string;\n try { content = await readFile(manifest, \"utf8\"); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n this.#captures.set(runId, []);\n return;\n }\n const captures: unknown = JSON.parse(content);\n if (!Array.isArray(captures) || captures.some((entry) => !entry || typeof entry.name !== \"string\"\n || typeof entry.path !== \"string\" || !/^browser\\/[a-f0-9-]{36}\\.png$/.test(entry.path))) {\n throw new Error(\"The stored browser screenshot list of this run is corrupt.\");\n }\n this.#captures.set(runId, captures);\n }\n}\n", "import { Type } from \"typebox\";\nimport { defineRunFunction, type AgentContribution, type RunFunction } from \"@ragents/engine\";\nimport { alwaysAvailable } from \"@ragents/host/plugin-support/tool-availability.js\";\nimport { RunBrowser } from \"./browser.js\";\n\nconst targetSchema = Type.Object({\n role: Type.Optional(Type.String({ minLength: 1, description: \"Accessible role, e.g. button, textbox, link, combobox.\" })),\n name: Type.Optional(Type.String({ description: \"Exact accessible name for role.\" })),\n label: Type.Optional(Type.String({ minLength: 1, description: \"Exact form label.\" })),\n text: Type.Optional(Type.String({ minLength: 1, description: \"Exact visible text.\" })),\n testId: Type.Optional(Type.String({ minLength: 1, description: \"data-testid value.\" })),\n css: Type.Optional(Type.String({ minLength: 1, description: \"CSS selector for elements without useful accessible names.\" })),\n frame: Type.Optional(Type.String({ minLength: 1, description: \"CSS selector of an iframe containing the target.\" })),\n nth: Type.Optional(Type.Integer({ minimum: 0, description: \"0-based index among all matches when the target matches several elements; not together with first.\" })),\n first: Type.Optional(Type.Boolean({ description: \"Use the first match when the target matches several elements; not together with nth.\" })),\n}, { additionalProperties: false, description: \"Use exactly one of role (with optional name), label, text, testId, css. Resolve semantic targets server-side; never copy snapshot element IDs. Ambiguous targets are errors naming the candidates unless nth or first selects one.\" });\n\nconst snapshotSchema = Type.Object({\n url: Type.String(),\n title: Type.String(),\n snapshot: Type.String(),\n truncated: Type.Boolean(),\n errors: Type.Array(Type.String()),\n}, { additionalProperties: false });\n\nconst emptySchema = Type.Object({}, { additionalProperties: false });\nconst targetInputSchema = Type.Object({ target: targetSchema }, { additionalProperties: false });\nconst screenshotDescription = \"Capture the real browser page into this run's document library. The returned URL and Markdown display it to the user. Call browser_view_screenshot to inspect the latest capture as an image without copying a path.\";\n\nexport const createBrowserFunctions = (browser: RunBrowser): RunFunction[] => [\n defineRunFunction({\n name: \"browser_open\",\n label: \"Open browser\",\n description: \"Open an HTTP(S) page in this run's isolated headless browser. Returns its accessible structure and browser errors. Reuses the current run browser; other runs have separate cookies and processes.\",\n schema: Type.Object({ url: Type.String({ minLength: 1 }) }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.open(caller.runId, input.url, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_snapshot\",\n label: \"Read browser\",\n description: \"Read the current real page's accessible structure, title, URL and errors. Use role/name or labels for subsequent actions; snapshot reference IDs never need to be copied.\",\n schema: emptySchema,\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId) => ({ ...await browser.snapshot(caller.runId, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_click\",\n label: \"Click in browser\",\n description: \"Click a uniquely identified visible element with Playwright auto-waiting. Returns the actual resulting page. Ambiguous or absent targets are errors.\",\n schema: targetInputSchema,\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.click(caller.runId, input.target, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_fill\",\n label: \"Fill browser field\",\n description: \"Fill an input or textarea by accessible label or another semantic target, firing the normal input events. Returns the resulting page.\",\n schema: Type.Object({ target: targetSchema, value: Type.String() }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.fill(caller.runId, input.target, input.value, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_select\",\n label: \"Select in browser\",\n description: \"Choose an option by its visible label in a native select element. For custom dropdowns use browser_click on the trigger and the visible option.\",\n schema: Type.Object({ target: targetSchema, label: Type.String({ minLength: 1 }) }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.select(caller.runId, input.target, input.label, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_press\",\n label: \"Press browser key\",\n description: \"Focus a target and press a Playwright key or chord such as Enter, Escape, Tab or ControlOrMeta+A. Returns the resulting page.\",\n schema: Type.Object({ target: targetSchema, key: Type.String({ minLength: 1 }) }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.press(caller.runId, input.target, input.key, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_check\",\n label: \"Check browser result\",\n description: \"Assert visible target/text, resulting URL and absence of browser errors. Fails on mismatch; records successful evidence for this page until the next action/navigation/error. Supply at least one assertion. Browser errors are checked by default. Visibility assertions wait at most 5 seconds, shorter than actions.\",\n schema: Type.Object({\n target: Type.Optional(targetSchema),\n text: Type.Optional(Type.String({ minLength: 1 })),\n url: Type.Optional(Type.String({ minLength: 1 })),\n count: Type.Optional(Type.Integer({ minimum: 0, description: \"Expected number of visible matches of target instead of exactly one; 0 asserts absence. Requires target without nth or first.\" })),\n noErrors: Type.Optional(Type.Boolean({ description: \"true (default): the check also fails on any browser error collected since the last navigation. false: ignore browser errors and judge only the assertions; use this when the page has known noise such as 404s or third-party script errors that are not part of the check.\" })),\n }, { additionalProperties: false }),\n resultSchema: Type.Object({ checkedAt: Type.String(), url: Type.String(), assertions: Type.Array(Type.String()) }, { additionalProperties: false }),\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: ({ caller, signal }, toolCallId, input) => browser.check(caller.runId, input, { signal, toolCallId }),\n }),\n defineRunFunction({\n name: \"browser_viewport\",\n label: \"Set browser size\",\n description: \"Resize the page viewport in CSS pixels, for example to check a narrow layout. The default is 1920 x 1080 (16:9) and screenshots use the viewport size at scale 1; the chosen size stays for the run until changed again. Returns the resulting page.\",\n schema: Type.Object({\n width: Type.Integer({ minimum: 320, maximum: 3840 }),\n height: Type.Integer({ minimum: 240, maximum: 2160 }),\n }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.viewport(caller.runId, input, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_screenshot\",\n label: \"Capture browser\",\n description: screenshotDescription,\n schema: Type.Object({ label: Type.Optional(Type.String({ maxLength: 200 })), fullPage: Type.Optional(Type.Boolean()) }, { additionalProperties: false }),\n resultSchema: Type.Object({\n name: Type.String(),\n path: Type.String(),\n url: Type.String(),\n markdown: Type.String(),\n capturedAt: Type.String(),\n }, { additionalProperties: false }),\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: ({ caller, signal }, toolCallId, input) => browser.screenshot(caller.runId, input, { signal, toolCallId }),\n }),\n defineRunFunction({\n name: \"browser_view_screenshot\",\n label: \"View browser screenshot\",\n description: \"View this run's latest screenshot as native image input without a path. Invoke this native tool directly to receive pixels; calling it through TypeScript only verifies image availability. Requires an image-capable model for native image input.\",\n nativeTool: true,\n schema: emptySchema,\n resultSchema: Type.String(),\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }) => {\n signal?.throwIfAborted();\n await browser.image(caller.runId);\n return \"The latest browser screenshot of this run is available.\";\n },\n }),\n defineRunFunction({\n name: \"browser_close\",\n label: \"Close browser\",\n description: \"Close this run's browser and discard its cookies. Saved screenshots remain in the document library.\",\n schema: emptySchema,\n resultSchema: Type.Object({ closed: Type.Boolean() }, { additionalProperties: false }),\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller }) => { await browser.close(caller.runId); return { closed: true }; },\n }),\n];\n\nexport const createBrowserImageContribution = (browser: RunBrowser): AgentContribution => ({\n id: \"ragents.browser.image\",\n afterToolCall: async ({ runId }, outcome, call) => {\n if (outcome.toolName !== \"browser_view_screenshot\" || outcome.isError) return undefined;\n try {\n call.signal?.throwIfAborted();\n if (!call.modelReadsImages) throw new Error(\"The selected model does not support images. View the screenshot in the documents or choose an image-capable model.\");\n const data = (await browser.image(runId)).toString(\"base64\");\n call.signal?.throwIfAborted();\n return { content: [\n { type: \"text\", text: \"Latest browser screenshot of this run.\" },\n { type: \"image\", data, mimeType: \"image/png\" },\n ] };\n } catch (error) {\n return { content: [{ type: \"text\", text: error instanceof Error ? error.message : String(error) }], isError: true };\n }\n },\n});\n", "import { spawn } from \"node:child_process\";\nimport { access, constants } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { chromium } from \"playwright-core\";\nimport {\n hostPackageFolder,\n provisionGap,\n provisionReady,\n type PluginProvision,\n} from \"@ragents/host/plugin-support/provision.js\";\nimport { BROWSER_EXECUTABLE_VARIABLE } from \"./executor/contract.js\";\n\nconst executable = async (file: string): Promise<boolean> => access(file, constants.X_OK).then(() => true, () => false);\n\nconst playwrightCli = (): string => path.join(hostPackageFolder(\"playwright-core\"), \"cli.js\");\n\nconst install = (log: (line: string) => void): Promise<void> => new Promise((resolve, reject) => {\n const child = spawn(process.execPath, [playwrightCli(), \"install\", ...(process.platform === \"linux\" ? [\"--with-deps\"] : []), \"chromium\"], { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n for (const stream of [child.stdout, child.stderr]) stream.on(\"data\", (chunk: Buffer) => log(chunk.toString().trimEnd()));\n child.once(\"error\", reject);\n child.once(\"exit\", (code) => code === 0 ? resolve() : reject(new Error(`playwright-core install chromium exited with code ${code}`)));\n});\n\n// Playwright manages its browser cache itself; the plugin's tool folder stays empty.\nexport const createBrowserProvision = (): PluginProvision => ({\n check: async () => {\n const configured = process.env[BROWSER_EXECUTABLE_VARIABLE];\n if (configured) {\n return await executable(configured)\n ? provisionReady\n : provisionGap(\"browser\", `${BROWSER_EXECUTABLE_VARIABLE} names ${configured}; there is no executable browser there`, false);\n }\n const bundled = chromium.executablePath();\n return await executable(bundled)\n ? provisionReady\n : provisionGap(\"chromium\", `Chromium is missing at ${bundled}; either set ${BROWSER_EXECUTABLE_VARIABLE} to an existing Chrome `\n + \"(on a server in the profile section ragents.browser, on a workspace in its environment) or let \"\n + \"provisioning download the browser\", true);\n },\n apply: async (_target, log) => {\n const state = await createBrowserProvision().check(\"\");\n if (state.kind === \"ready\") return;\n if (!state.installable) throw new Error(state.instruction);\n log(\"Downloading Chromium for playwright-core\");\n await install(log);\n },\n});\n\nexport const provision = createBrowserProvision();\n"],
5
+ "mappings": ";;;;;;;AAEA,SAAS,4BAA4B;AACrC,SAAS,0BAA0B;;;ACH5B,IAAM,qBAAqB;AAAA,EAChC,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,OAAO;AACT;AAGO,IAAM,8BAA8B;;;ACf3C,SAAS,kBAAkB;AAC3B,SAAS,OAAO,UAAU,QAAQ,iBAAiB;AACnD,OAAO,UAAU;AAEjB,SAAS,0BAA0B;AAa5B,IAAM,mBAAoC,EAAE,OAAO,MAAM,QAAQ,KAAK;AAoB7E,IAAM,cAAc,CAAC,OAAuB,WAAW,EAAE;AAGlD,IAAM,aAAN,MAA2C;AAAA,EACvC;AAAA,EACA,SAAS,oBAAI,IAA0B;AAAA,EACvC,aAAa,oBAAI,IAA6B;AAAA,EAC9C,YAAY,oBAAI,IAA4B;AAAA,EAC5C,gBAAgB,oBAAI,IAA2B;AAAA,EAC/C,iBAAiB,oBAAI,IAA2B;AAAA,EAChD,eAAe,oBAAI,IAAoB;AAAA,EAChD,YAAY;AAAA,EAEZ,YAAY,SAAyB;AACnC,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,QAAQ,OAA8B;AACpC,UAAM,UAAU,KAAK,cAAc,IAAI,KAAK;AAC5C,QAAI,QAAS,QAAO;AACpB,UAAM,UAAU,KAAK,SAAS,KAAK,EAAE,MAAM,CAAC,UAAU;AAAE,WAAK,cAAc,OAAO,KAAK;AAAG,YAAM;AAAA,IAAO,CAAC;AACxG,SAAK,cAAc,IAAI,OAAO,OAAO;AACrC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,OAAe,KAAa,UAA8B,CAAC,GAA6B;AACjG,YAAQ,QAAQ,eAAe;AAC/B,SAAK,eAAe;AACpB,UAAM,aAAa,KAAK,YAAY,KAAK;AACzC,UAAM,KAAK,QAAQ,KAAK;AACxB,YAAQ,QAAQ,eAAe;AAC/B,SAAK,eAAe;AACpB,QAAI,eAAe,KAAK,YAAY,KAAK,EAAG,OAAM,IAAI,MAAM,yBAAyB;AACrF,WAAO,KAAK,KAAK,OAAO,mBAAmB,MAAM,EAAE,KAAK,UAAU,KAAK,WAAW,IAAI,KAAK,KAAK,iBAAiB,GAAG,OAAO;AAAA,EAC7H;AAAA,EAEA,SAAS,OAAe,UAA8B,CAAC,GAA6B;AAClF,WAAO,KAAK,KAAK,OAAO,mBAAmB,UAAU,MAAM,OAAO;AAAA,EACpE;AAAA;AAAA,EAGA,MAAM,SAAS,OAAe,UAA2B,UAA8B,CAAC,GAA6B;AACnH,UAAM,WAAW,MAAM,KAAK,KAAsB,OAAO,mBAAmB,UAAU,UAAU,OAAO;AACvG,SAAK,WAAW,IAAI,OAAO,QAAQ;AACnC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAe,QAAuB,UAA8B,CAAC,GAA6B;AACtG,WAAO,KAAK,KAAK,OAAO,mBAAmB,OAAO,EAAE,OAAO,GAAG,OAAO;AAAA,EACvE;AAAA,EAEA,KAAK,OAAe,QAAuB,OAAe,UAA8B,CAAC,GAA6B;AACpH,WAAO,KAAK,KAAK,OAAO,mBAAmB,MAAM,EAAE,QAAQ,MAAM,GAAG,OAAO;AAAA,EAC7E;AAAA,EAEA,OAAO,OAAe,QAAuB,OAAe,UAA8B,CAAC,GAA6B;AACtH,WAAO,KAAK,KAAK,OAAO,mBAAmB,QAAQ,EAAE,QAAQ,MAAM,GAAG,OAAO;AAAA,EAC/E;AAAA,EAEA,MAAM,OAAe,QAAuB,KAAa,UAA8B,CAAC,GAA6B;AACnH,WAAO,KAAK,KAAK,OAAO,mBAAmB,OAAO,EAAE,QAAQ,IAAI,GAAG,OAAO;AAAA,EAC5E;AAAA;AAAA,EAGA,MAAM,MAAM,OAAe,OAAqB,UAA8B,CAAC,GAAsE;AACnJ,UAAM,aAAa,KAAK,YAAY,KAAK;AACzC,UAAM,EAAE,QAAQ,KAAK,IAAI,MAAM,KAAK,SAA6B,OAAO,YAAY,mBAAmB,OAAO,OAAO,OAAO;AAC5H,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,SAAK,SAAS,OAAO,YAAY,MAAM,SAAS;AAChD,WAAO,EAAE,WAAW,KAAK,OAAO,KAAK,YAAY,OAAO,WAAW;AAAA,EACrE;AAAA,EAEA,MAAM,WAAW,OAAe,OAA+C,UAA8B,CAAC,GAM3G;AACD,UAAM,KAAK,QAAQ,KAAK;AACxB,UAAM,KAAK,WAAW;AACtB,UAAM,QAAQ,MAAM,KAAK,KAAa,OAAO,mBAAmB,YAAY,EAAE,IAAI,UAAU,MAAM,YAAY,MAAM,GAAG,OAAO;AAC9H,UAAM,UAAU,EAAE,MAAM,MAAM,OAAO,KAAK,KAAK,sBAAsB,MAAM,YAAY,EAAE,EAAE;AAC3F,UAAM,KAAK,OAAO,OAAO,SAAS,OAAO,KAAK,OAAO,QAAQ,CAAC;AAC9D,UAAM,MAAM,KAAK,YAAY,OAAO,QAAQ,IAAI;AAChD,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA,UAAU,KAAK,QAAQ,KAAK,QAAQ,aAAa,EAAE,CAAC,KAAK,GAAG;AAAA,MAC5D,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,OAAgC;AAC1C,UAAM,SAAS,KAAK,UAAU,IAAI,KAAK,GAAG,GAAG,EAAE;AAC/C,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,iFAAiF;AAC9G,WAAO,SAAS,KAAK,KAAK,MAAM,KAAK,SAAS,SAAS,KAAK,GAAG,OAAO,IAAI,CAAC;AAAA,EAC7E;AAAA,EAEA,SAAS,OAAgC;AACvC,UAAM,WAAW,KAAK,UAAU,IAAI,KAAK,KAAK,CAAC;AAC/C,UAAM,QAAQ,CAAC,aAA2B,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,YAAY,OAAO,QAAQ,IAAI,EAAE;AAC3G,UAAM,cAAc,SAAS,IAAI,KAAK;AACtC,UAAM,OAAO,KAAK,OAAO,IAAI,KAAK;AAClC,QAAI,CAAC,KAAM,QAAO,EAAE,aAAa,oBAAoB,CAAC,GAAG,QAAQ,CAAC,EAAE;AACpE,UAAM,UAAU,KAAK,YAClB,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,YAAY,QAAQ,SAAS,YAAY,EAAE,CAAC,CAAC,EACxE,OAAO,CAAC,YAAqC,YAAY,MAAS;AACrE,WAAO;AAAA,MACL,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;AAAA,MACtD,KAAK,KAAK;AAAA,MACV;AAAA,MACA,oBAAoB,QAAQ,IAAI,KAAK;AAAA,MACrC,QAAQ,CAAC,GAAG,KAAK,MAAM;AAAA,IACzB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,MAAM,OAA8B;AACxC,SAAK,QAAQ,KAAK;AAClB,UAAM,KAAK,SAAS,QAAQ,QAAQ,OAAO,mBAAmB,OAAO,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,EACpG;AAAA,EAEA,MAAM,OAAO,OAA8B;AACzC,UAAM,KAAK,MAAM,KAAK;AACtB,SAAK,WAAW,OAAO,KAAK;AAC5B,SAAK,UAAU,OAAO,KAAK;AAC3B,SAAK,cAAc,OAAO,KAAK;AAC/B,SAAK,eAAe,OAAO,KAAK;AAAA,EAClC;AAAA,EAEA,MAAM,WAA0B;AAC9B,SAAK,YAAY;AACjB,UAAM,UAAU,MAAM,QAAQ,WAAW,CAAC,GAAG,KAAK,OAAO,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,KAAK,MAAM,KAAK,CAAC,CAAC;AAClG,SAAK,WAAW,MAAM;AACtB,SAAK,UAAU,MAAM;AACrB,SAAK,cAAc,MAAM;AACzB,SAAK,eAAe,MAAM;AAC1B,UAAM,SAAS,QAAQ,KAAK,CAAC,WAA4C,OAAO,WAAW,UAAU;AACrG,QAAI,OAAQ,OAAM,OAAO;AAAA,EAC3B;AAAA,EAEA,iBAAuB;AACrB,QAAI,KAAK,UAAW,OAAM,IAAI,MAAM,gCAAgC;AAAA,EACtE;AAAA,EAEA,YAAY,OAAuB;AACjC,WAAO,KAAK,aAAa,IAAI,KAAK,KAAK;AAAA,EACzC;AAAA;AAAA,EAGA,QAAQ,OAAqB;AAC3B,SAAK,aAAa,IAAI,OAAO,KAAK,YAAY,KAAK,IAAI,CAAC;AACxD,SAAK,OAAO,OAAO,KAAK;AAAA,EAC1B;AAAA,EAEA,MAAM,KAAQ,OAAe,WAAmB,OAAgB,SAAyC;AACvG,UAAM,aAAa,KAAK,YAAY,KAAK;AACzC,UAAM,EAAE,QAAQ,KAAK,IAAI,MAAM,KAAK,SAAY,OAAO,YAAY,WAAW,OAAO,OAAO;AAC5F,SAAK,SAAS,OAAO,YAAY,IAAI;AACrC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAY,OAAe,YAAoB,WAAmB,OAAgB,SAAsD;AAC5I,QAAI;AACF,aAAO,MAAM,KAAK,SAAS,QAAQ,QAAQ,OAAO,WAAW,OAAO,OAAO;AAAA,IAC7E,SAAS,OAAO;AACd,YAAM,KAAK,QAAQ,OAAO,UAAU;AACpC,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,QAAQ,OAAe,YAAmC;AAC9D,UAAM,OAAO,MAAM,KAAK,SAAS,QAAQ,QAAQ,OAAO,mBAAmB,OAAO,MAAM,EAAE,eAAe,KAAK,CAAC,EAC5G,KAAK,CAAC,UAAU,OAAkC,MAAM,IAAI;AAC/D,SAAK,SAAS,OAAO,YAAY,IAAI;AAAA,EACvC;AAAA;AAAA,EAGA,SAAS,OAAe,YAAoB,MAA+B,WAA0B;AACnG,QAAI,eAAe,KAAK,YAAY,KAAK,EAAG;AAC5C,QAAI,CAAC,MAAM;AACT,WAAK,OAAO,OAAO,KAAK;AACxB;AAAA,IACF;AACA,UAAM,QAAQ,KAAK,UAAU,aAAa,KAAK,OAAO,IAAI,KAAK,GAAG,YAAY;AAC9E,SAAK,OAAO,IAAI,OAAO;AAAA,MACrB,KAAK,KAAK;AAAA,MACV,QAAQ,KAAK;AAAA,MACb,aAAa,KAAK;AAAA,MAClB,GAAI,QAAQ,EAAE,WAAW,MAAM,IAAI,CAAC;AAAA,IACtC,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,OAAO,OAAe,SAAuB,OAA8B;AACzE,UAAM,WAAW,KAAK,eAAe,IAAI,KAAK,KAAK,QAAQ,QAAQ;AACnE,UAAM,UAAU,SAAS,KAAK,YAAY;AACxC,YAAM,YAAY,MAAM,KAAK,SAAS,SAAS,KAAK;AACpD,YAAM,MAAM,KAAK,KAAK,WAAW,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AAChE,YAAM,UAAU,KAAK,KAAK,WAAW,QAAQ,IAAI,GAAG,KAAK;AACzD,YAAM,WAAW,CAAC,GAAG,KAAK,UAAU,IAAI,KAAK,KAAK,CAAC,GAAG,OAAO;AAC7D,YAAM,WAAW,KAAK,KAAK,WAAW,WAAW,gBAAgB;AACjE,YAAM,YAAY,GAAG,QAAQ,IAAI,WAAW,CAAC;AAC7C,YAAM,UAAU,WAAW,KAAK,UAAU,QAAQ,GAAG,MAAM;AAC3D,YAAM,OAAO,WAAW,QAAQ;AAChC,WAAK,UAAU,IAAI,OAAO,QAAQ;AAAA,IACpC,CAAC;AACD,SAAK,eAAe,IAAI,OAAO,QAAQ,KAAK,MAAM,QAAW,MAAM,MAAS,CAAC;AAC7E,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,OAAe,UAA0B;AACnD,WAAO,GAAG,kBAAkB,SAAS,mBAAmB,KAAK,CAAC,uBAAuB,mBAAmB,QAAQ,CAAC;AAAA,EACnH;AAAA,EAEA,MAAM,SAAS,OAA8B;AAC3C,UAAM,YAAY,MAAM,KAAK,SAAS,SAAS,KAAK;AACpD,UAAM,WAAW,KAAK,KAAK,WAAW,WAAW,gBAAgB;AACjE,QAAI;AACJ,QAAI;AAAE,gBAAU,MAAM,SAAS,UAAU,MAAM;AAAA,IAAG,SAC3C,OAAO;AACZ,UAAK,MAAgC,SAAS,SAAU,OAAM;AAC9D,WAAK,UAAU,IAAI,OAAO,CAAC,CAAC;AAC5B;AAAA,IACF;AACA,UAAM,WAAoB,KAAK,MAAM,OAAO;AAC5C,QAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,KAAK,CAAC,UAAU,CAAC,SAAS,OAAO,MAAM,SAAS,YACpF,OAAO,MAAM,SAAS,YAAY,CAAC,gCAAgC,KAAK,MAAM,IAAI,CAAC,GAAG;AACzF,YAAM,IAAI,MAAM,4DAA4D;AAAA,IAC9E;AACA,SAAK,UAAU,IAAI,OAAO,QAAQ;AAAA,EACpC;AACF;;;AC/QA,SAAS,YAAY;AACrB,SAAS,yBAAmE;AAC5E,SAAS,uBAAuB;AAGhC,IAAM,eAAe,KAAK,OAAO;AAAA,EAC/B,MAAM,KAAK,SAAS,KAAK,OAAO,EAAE,WAAW,GAAG,aAAa,yDAAyD,CAAC,CAAC;AAAA,EACxH,MAAM,KAAK,SAAS,KAAK,OAAO,EAAE,aAAa,kCAAkC,CAAC,CAAC;AAAA,EACnF,OAAO,KAAK,SAAS,KAAK,OAAO,EAAE,WAAW,GAAG,aAAa,oBAAoB,CAAC,CAAC;AAAA,EACpF,MAAM,KAAK,SAAS,KAAK,OAAO,EAAE,WAAW,GAAG,aAAa,sBAAsB,CAAC,CAAC;AAAA,EACrF,QAAQ,KAAK,SAAS,KAAK,OAAO,EAAE,WAAW,GAAG,aAAa,qBAAqB,CAAC,CAAC;AAAA,EACtF,KAAK,KAAK,SAAS,KAAK,OAAO,EAAE,WAAW,GAAG,aAAa,6DAA6D,CAAC,CAAC;AAAA,EAC3H,OAAO,KAAK,SAAS,KAAK,OAAO,EAAE,WAAW,GAAG,aAAa,mDAAmD,CAAC,CAAC;AAAA,EACnH,KAAK,KAAK,SAAS,KAAK,QAAQ,EAAE,SAAS,GAAG,aAAa,qGAAqG,CAAC,CAAC;AAAA,EAClK,OAAO,KAAK,SAAS,KAAK,QAAQ,EAAE,aAAa,uFAAuF,CAAC,CAAC;AAC5I,GAAG,EAAE,sBAAsB,OAAO,aAAa,qOAAqO,CAAC;AAErR,IAAM,iBAAiB,KAAK,OAAO;AAAA,EACjC,KAAK,KAAK,OAAO;AAAA,EACjB,OAAO,KAAK,OAAO;AAAA,EACnB,UAAU,KAAK,OAAO;AAAA,EACtB,WAAW,KAAK,QAAQ;AAAA,EACxB,QAAQ,KAAK,MAAM,KAAK,OAAO,CAAC;AAClC,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAElC,IAAM,cAAc,KAAK,OAAO,CAAC,GAAG,EAAE,sBAAsB,MAAM,CAAC;AACnE,IAAM,oBAAoB,KAAK,OAAO,EAAE,QAAQ,aAAa,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAC/F,IAAM,wBAAwB;AAEvB,IAAM,yBAAyB,CAAC,YAAuC;AAAA,EAC5E,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ,KAAK,OAAO,EAAE,KAAK,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAAA,IAC3F,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,OAAO,EAAE,QAAQ,OAAO,GAAG,YAAY,WAAW,EAAE,GAAG,MAAM,QAAQ,KAAK,OAAO,OAAO,MAAM,KAAK,EAAE,QAAQ,WAAW,CAAC,EAAE;AAAA,EAClI,CAAC;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,OAAO,EAAE,QAAQ,OAAO,GAAG,gBAAgB,EAAE,GAAG,MAAM,QAAQ,SAAS,OAAO,OAAO,EAAE,QAAQ,WAAW,CAAC,EAAE;AAAA,EACpH,CAAC;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,OAAO,EAAE,QAAQ,OAAO,GAAG,YAAY,WAAW,EAAE,GAAG,MAAM,QAAQ,MAAM,OAAO,OAAO,MAAM,QAAQ,EAAE,QAAQ,WAAW,CAAC,EAAE;AAAA,EACtI,CAAC;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ,KAAK,OAAO,EAAE,QAAQ,cAAc,OAAO,KAAK,OAAO,EAAE,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAAA,IACnG,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,OAAO,EAAE,QAAQ,OAAO,GAAG,YAAY,WAAW,EAAE,GAAG,MAAM,QAAQ,KAAK,OAAO,OAAO,MAAM,QAAQ,MAAM,OAAO,EAAE,QAAQ,WAAW,CAAC,EAAE;AAAA,EAClJ,CAAC;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ,KAAK,OAAO,EAAE,QAAQ,cAAc,OAAO,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAAA,IACnH,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,OAAO,EAAE,QAAQ,OAAO,GAAG,YAAY,WAAW,EAAE,GAAG,MAAM,QAAQ,OAAO,OAAO,OAAO,MAAM,QAAQ,MAAM,OAAO,EAAE,QAAQ,WAAW,CAAC,EAAE;AAAA,EACpJ,CAAC;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ,KAAK,OAAO,EAAE,QAAQ,cAAc,KAAK,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAAA,IACjH,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,OAAO,EAAE,QAAQ,OAAO,GAAG,YAAY,WAAW,EAAE,GAAG,MAAM,QAAQ,MAAM,OAAO,OAAO,MAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,WAAW,CAAC,EAAE;AAAA,EACjJ,CAAC;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ,KAAK,OAAO;AAAA,MAClB,QAAQ,KAAK,SAAS,YAAY;AAAA,MAClC,MAAM,KAAK,SAAS,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AAAA,MACjD,KAAK,KAAK,SAAS,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AAAA,MAChD,OAAO,KAAK,SAAS,KAAK,QAAQ,EAAE,SAAS,GAAG,aAAa,gIAAgI,CAAC,CAAC;AAAA,MAC/L,UAAU,KAAK,SAAS,KAAK,QAAQ,EAAE,aAAa,8QAA8Q,CAAC,CAAC;AAAA,IACtU,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAAA,IAClC,cAAc,KAAK,OAAO,EAAE,WAAW,KAAK,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,YAAY,KAAK,MAAM,KAAK,OAAO,CAAC,EAAE,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAAA,IAClJ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,CAAC,EAAE,QAAQ,OAAO,GAAG,YAAY,UAAU,QAAQ,MAAM,OAAO,OAAO,OAAO,EAAE,QAAQ,WAAW,CAAC;AAAA,EAC3G,CAAC;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ,KAAK,OAAO;AAAA,MAClB,OAAO,KAAK,QAAQ,EAAE,SAAS,KAAK,SAAS,KAAK,CAAC;AAAA,MACnD,QAAQ,KAAK,QAAQ,EAAE,SAAS,KAAK,SAAS,KAAK,CAAC;AAAA,IACtD,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAAA,IAClC,cAAc;AAAA,IACd,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,OAAO,EAAE,QAAQ,OAAO,GAAG,YAAY,WAAW,EAAE,GAAG,MAAM,QAAQ,SAAS,OAAO,OAAO,OAAO,EAAE,QAAQ,WAAW,CAAC,EAAE;AAAA,EAClI,CAAC;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ,KAAK,OAAO,EAAE,OAAO,KAAK,SAAS,KAAK,OAAO,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG,UAAU,KAAK,SAAS,KAAK,QAAQ,CAAC,EAAE,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAAA,IACvJ,cAAc,KAAK,OAAO;AAAA,MACxB,MAAM,KAAK,OAAO;AAAA,MAClB,MAAM,KAAK,OAAO;AAAA,MAClB,KAAK,KAAK,OAAO;AAAA,MACjB,UAAU,KAAK,OAAO;AAAA,MACtB,YAAY,KAAK,OAAO;AAAA,IAC1B,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAAA,IAClC,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,CAAC,EAAE,QAAQ,OAAO,GAAG,YAAY,UAAU,QAAQ,WAAW,OAAO,OAAO,OAAO,EAAE,QAAQ,WAAW,CAAC;AAAA,EAChH,CAAC;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,cAAc,KAAK,OAAO;AAAA,IAC1B,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,OAAO,EAAE,QAAQ,OAAO,MAAM;AACjC,cAAQ,eAAe;AACvB,YAAM,QAAQ,MAAM,OAAO,KAAK;AAChC,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,cAAc,KAAK,OAAO,EAAE,QAAQ,KAAK,QAAQ,EAAE,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAAA,IACrF,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,KAAK,OAAO,EAAE,OAAO,MAAM;AAAE,YAAM,QAAQ,MAAM,OAAO,KAAK;AAAG,aAAO,EAAE,QAAQ,KAAK;AAAA,IAAG;AAAA,EAC3F,CAAC;AACH;AAEO,IAAM,iCAAiC,CAAC,aAA4C;AAAA,EACzF,IAAI;AAAA,EACJ,eAAe,OAAO,EAAE,MAAM,GAAG,SAAS,SAAS;AACjD,QAAI,QAAQ,aAAa,6BAA6B,QAAQ,QAAS,QAAO;AAC9E,QAAI;AACF,WAAK,QAAQ,eAAe;AAC5B,UAAI,CAAC,KAAK,iBAAkB,OAAM,IAAI,MAAM,oHAAoH;AAChK,YAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,GAAG,SAAS,QAAQ;AAC3D,WAAK,QAAQ,eAAe;AAC5B,aAAO,EAAE,SAAS;AAAA,QAChB,EAAE,MAAM,QAAQ,MAAM,yCAAyC;AAAA,QAC/D,EAAE,MAAM,SAAS,MAAM,UAAU,YAAY;AAAA,MAC/C,EAAE;AAAA,IACJ,SAAS,OAAO;AACd,aAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK;AAAA,IACpH;AAAA,EACF;AACF;;;AHlLO,IAAM,2BAA2B,CAAC,EAAE,KAAK,6BAA6B,QAAQ,cAAc,CAAC;AAEpG,IAAM,gBAA+B;AAAA,EACnC,UAAU,EAAE,IAAI,kBAAkB;AAAA,EAClC,UAAU,CAAC,SAAS;AAClB,UAAM,YAAY,KAAK,QAAQ,kBAAkB;AACjD,UAAM,UAAU,IAAI,WAAW;AAAA,MAC7B,SAAS,KAAK,QAAQ,oBAAoB;AAAA,MAC1C,UAAU,CAAC,UAAU,UAAU,aAAa,KAAK;AAAA,IACnD,CAAC;AACD,SAAK,OAAO,GAAG,wBAAwB;AACvC,SAAK,QAAQ,qBAAqB,OAAO;AACzC,SAAK,UAAU,GAAG,uBAAuB,OAAO,CAAC;AACjD,SAAK,aAAa,+BAA+B,OAAO,CAAC;AACzD,SAAK,UAAU;AAAA,MACb,IAAI;AAAA,MACJ,gBAAgB,CAAC,EAAE,MAAM,MAAM,QAAQ,QAAQ,KAAK;AAAA,MACpD,aAAa,CAAC,EAAE,MAAM,MAAM,QAAQ,MAAM,KAAK;AAAA,MAC/C,kBAAkB,CAAC,EAAE,MAAM,MAAM,QAAQ,MAAM,KAAK;AAAA,MACpD,eAAe,CAAC,EAAE,MAAM,MAAM,QAAQ,OAAO,KAAK;AAAA,MAClD,UAAU,MAAM,QAAQ,SAAS;AAAA,IACnC,CAAC;AAAA,EACH;AACF;AAEO,IAAM,SAAuB,EAAE,UAAU,CAAC,mBAAmB,GAAG,QAAQ,MAAM,cAAc;;;AInCnG,SAAS,aAAa;AACtB,SAAS,QAAQ,iBAAiB;AAClC,OAAOA,WAAU;AACjB,SAAS,gBAAgB;AACzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAGP,IAAM,aAAa,OAAO,SAAmC,OAAO,MAAM,UAAU,IAAI,EAAE,KAAK,MAAM,MAAM,MAAM,KAAK;AAEtH,IAAM,gBAAgB,MAAcC,MAAK,KAAK,kBAAkB,iBAAiB,GAAG,QAAQ;AAE5F,IAAM,UAAU,CAAC,QAA+C,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/F,QAAM,QAAQ,MAAM,QAAQ,UAAU,CAAC,cAAc,GAAG,WAAW,GAAI,QAAQ,aAAa,UAAU,CAAC,aAAa,IAAI,CAAC,GAAI,UAAU,GAAG,EAAE,OAAO,CAAC,UAAU,QAAQ,MAAM,EAAE,CAAC;AAC/K,aAAW,UAAU,CAAC,MAAM,QAAQ,MAAM,MAAM,EAAG,QAAO,GAAG,QAAQ,CAAC,UAAkB,IAAI,MAAM,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvH,QAAM,KAAK,SAAS,MAAM;AAC1B,QAAM,KAAK,QAAQ,CAAC,SAAS,SAAS,IAAI,QAAQ,IAAI,OAAO,IAAI,MAAM,qDAAqD,IAAI,EAAE,CAAC,CAAC;AACtI,CAAC;AAGM,IAAM,yBAAyB,OAAwB;AAAA,EAC5D,OAAO,YAAY;AACjB,UAAM,aAAa,QAAQ,IAAI,2BAA2B;AAC1D,QAAI,YAAY;AACd,aAAO,MAAM,WAAW,UAAU,IAC9B,iBACA,aAAa,WAAW,GAAG,2BAA2B,UAAU,UAAU,0CAA0C,KAAK;AAAA,IAC/H;AACA,UAAM,UAAU,SAAS,eAAe;AACxC,WAAO,MAAM,WAAW,OAAO,IAC3B,iBACA,aAAa,YAAY,0BAA0B,OAAO,gBAAgB,2BAA2B,2JAE9D,IAAI;AAAA,EACjD;AAAA,EACA,OAAO,OAAO,SAAS,QAAQ;AAC7B,UAAM,QAAQ,MAAM,uBAAuB,EAAE,MAAM,EAAE;AACrD,QAAI,MAAM,SAAS,QAAS;AAC5B,QAAI,CAAC,MAAM,YAAa,OAAM,IAAI,MAAM,MAAM,WAAW;AACzD,QAAI,0CAA0C;AAC9C,UAAM,QAAQ,GAAG;AAAA,EACnB;AACF;AAEO,IAAM,YAAY,uBAAuB;",
6
6
  "names": ["path", "path"]
7
7
  }
@@ -1,38 +1,38 @@
1
1
  ---
2
2
  name: browser-testing
3
- description: Prüfe eine laufende Webanwendung mit echten Browseraktionen, sichtbaren Ergebnissen und Screenshots.
3
+ description: Test a running web application with real browser actions, visible results, and screenshots.
4
4
  ---
5
5
 
6
- # Webanwendung prüfen
6
+ # Testing a web application
7
7
 
8
- Verwende die TypeScript-Funktionen `browser_open`, `browser_snapshot`, `browser_click`,
8
+ Use the TypeScript functions `browser_open`, `browser_snapshot`, `browser_click`,
9
9
  `browser_fill`, `browser_select`, `browser_press`, `browser_check`, `browser_viewport`,
10
- `browser_screenshot` und `browser_close`. Lade deren genaue Verträge mit `typescript_api`.
10
+ `browser_screenshot` and `browser_close`. Load their exact contracts with `typescript_api`.
11
11
 
12
- 1. Starte die Anwendung mit ihren tatsächlichen Diensten und warte auf deren Bereitschaft.
13
- 2. Öffne ihre HTTP-Adresse mit `browser_open`. Jeder Run hat einen eigenen Browser ohne
14
- übernommene Anmeldung. Er läuft auf dem Rechner Deines Arbeitsbereichs; eine dort gestartete
15
- Anwendung erreichst Du über `localhost`. Melde fehlende Dienste und Browser-Voraussetzungen
16
- ausdrücklich.
17
- 3. Lies den Snapshot und bediene den tatsächlichen Nutzerweg. Wähle Ziele über sichtbare
18
- Rollen/Namen oder Feldbeschriftungen, beispielsweise `{ role: "button", name: "Speichern" }`.
19
- Die Auflösung erfolgt im Browser. Snapshot-IDs werden nicht abgeschrieben.
20
- 4. Prüfe Erfolg und relevante Fehlerfälle mit `browser_check`: sichtbares Ergebnis, Zieladresse
21
- und Browserfehler. Ein Typecheck oder Screenshot allein belegt keinen erfolgreichen Nutzerweg.
22
- Nach jeder Aktion ist eine neue Prüfung nötig. Erfinde keine Ergebnisse bei fehlendem Netz.
23
- 5. Erzeuge mit `browser_screenshot` echte Aufnahmen. Übernimm `url` oder `markdown`
24
- programmatisch in den Ergebnisbericht oder die Mini-App. Das Bild liegt in der Dateiablage
25
- dieses Runs. Das native Werkzeug `browser_view_screenshot` zeigt Dir die letzte Aufnahme
26
- ohne Pfadangabe; dafür benötigt Dein Modell Bildunterstützung. Der Viewport ist standardmäßig
27
- 1920 x 1080 (16:9); für schmale Layouts oder kleine Bildschirme stellst Du ihn mit
28
- `browser_viewport` um und prüfst danach erneut.
29
- 6. Benenne geprüfte Schritte und verbleibende Grenzen. Schließe den Browser nach Abschluss;
30
- Aufnahmen bleiben erhalten. Run-Stopp und Serverende schließen ihn ebenfalls.
12
+ 1. Start the application with its actual services and wait until they are ready.
13
+ 2. Open its HTTP address with `browser_open`. Every run has its own browser without an
14
+ inherited sign-in. It runs on the machine of your workspace; you reach an application
15
+ started there via `localhost`. Report missing services and browser prerequisites
16
+ explicitly.
17
+ 3. Read the snapshot and follow the actual user path. Choose targets by visible
18
+ roles/names or field labels, for example `{ role: "button", name: "Save" }`.
19
+ Resolution happens in the browser. Snapshot IDs are not copied.
20
+ 4. Check success and relevant error cases with `browser_check`: visible result, target address
21
+ and browser errors. A typecheck or screenshot alone does not prove a successful user path.
22
+ Every action needs a new check. Do not invent results when the network is missing.
23
+ 5. Create real screenshots with `browser_screenshot`. Put `url` or `markdown`
24
+ programmatically into the result report or the mini-app. The image lives in the file storage
25
+ of this run. The native tool `browser_view_screenshot` shows you the latest screenshot
26
+ without a path; for that your model needs image support. The viewport defaults to
27
+ 1920 x 1080 (16:9); for narrow layouts or small screens you change it with
28
+ `browser_viewport` and check again afterwards.
29
+ 6. Name the checked steps and remaining limits. Close the browser when you are done;
30
+ screenshots are kept. Stopping the run and shutting down the server close it as well.
31
31
 
32
- Die Browseraktionen verwenden Playwright-Locators mit automatischem Warten. Mehrdeutige Ziele
33
- sind Fehler, die die Kandidaten nennen; wähle dann mit `nth` (0-basiert) oder `first: true` im
34
- Ziel einen Treffer, oder prüfe die Anzahl sichtbarer Treffer mit `count` in `browser_check`.
35
- Sichtbarkeitsprüfungen warten höchstens 5 Sekunden, Aktionen länger; ein fehlendes Element
36
- kostet also keine lange Wartezeit. Native Selects verwenden `browser_select`; eigene Auswahlmenüs werden geklickt.
37
- Mit `target.frame` wählst Du ein Iframe per CSS. Neue Fenster werden ausdrücklich gemeldet;
38
- dieser Ablauf bedient eine Seite. Verdeckte Elemente werden nicht per JavaScript angeklickt.
32
+ The browser actions use Playwright locators with automatic waiting. Ambiguous targets
33
+ are errors that name the candidates; then pick one match with `nth` (0-based) or `first: true` in
34
+ the target, or check the number of visible matches with `count` in `browser_check`.
35
+ Visibility checks wait at most 5 seconds, actions longer; a missing element
36
+ therefore costs no long wait. Native selects use `browser_select`; custom dropdown menus are clicked.
37
+ With `target.frame` you choose an iframe by CSS. New windows are reported explicitly;
38
+ this flow operates one page. Hidden elements are not clicked via JavaScript.
@@ -8,7 +8,7 @@ to put something there is the tool `document_write`.
8
8
  they are part of the actual assignment.
9
9
  - `document_write` takes the full `content` of the file. For a file of the working directory,
10
10
  `read` it first and pass the content here.
11
- - The user sees these files in the "Dokumente" area of the interface, grouped by subdirectory.
11
+ - The user sees these files in the "Documents" area of the interface, grouped by subdirectory.
12
12
  - When you spawn agents, name in their assignment the store path they are supposed to write to.
13
13
 
14
14
  If the user wants to see the content of a file or a document, show it COMPLETELY via
@@ -1,5 +1,5 @@
1
1
  {
2
- "format": 4,
2
+ "format": 5,
3
3
  "id": "ragents.documents",
4
4
  "api": 7,
5
5
  "hostNames": {
@@ -100,8 +100,8 @@
100
100
  ]
101
101
  }
102
102
  },
103
- "stand": "54b40df2365ff3facc92feab74c674d0dc8a14e091227de1df650cb8b28cdd46",
104
- "sourceStand": "0ca7e55ce809628cbfd53431f690df48d4b6207f59b2ac53d5e269532259fb68",
103
+ "revision": "05ca6d8d04b7d78376a9726d2472099d2150a1a9e62f5999dacf88aa62a336b0",
104
+ "sourceRevision": "938d5980baa92e0c773c6211d146279da316f8805559e96a169292d19c536b8c",
105
105
  "server": "server/index.js",
106
106
  "web": {
107
107
  "entry": "web/index.js",
@@ -21,10 +21,10 @@ var filesListing = Type.Object({
21
21
  var documentsContracts = {
22
22
  files: defineOperation({
23
23
  id: "ragents.documents.files",
24
- description: "Die Dateiablage eines Runs als Gruppen und lose Dateien. Recht: runs.read.",
24
+ description: "A run's file store as groups and loose files. Right: runs.read.",
25
25
  rights: ["runs.read"],
26
26
  input: Type.Object({
27
- runId: Type.String({ minLength: 1, maxLength: 64, description: "Kennung des Runs" })
27
+ runId: Type.String({ minLength: 1, maxLength: 64, description: "Run id" })
28
28
  }, { additionalProperties: false }),
29
29
  result: filesListing
30
30
  })
@@ -34,4 +34,4 @@ export {
34
34
  documentsApiPrefix,
35
35
  documentsContracts
36
36
  };
37
- //# sourceMappingURL=chunk-QIECRZ7C.js.map
37
+ //# sourceMappingURL=chunk-KMZWOVTI.js.map