@schlenkr/ragents 0.1.10 → 0.1.11

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 (743) hide show
  1. package/apps/server/package.json +1 -1
  2. package/apps/server/src/access-projection.ts +4 -4
  3. package/apps/server/src/access-service.ts +3 -3
  4. package/apps/server/src/access-session.ts +19 -19
  5. package/apps/server/src/api/contracts.ts +29 -29
  6. package/apps/server/src/api/core-methods.ts +17 -17
  7. package/apps/server/src/api/delivery.ts +2 -2
  8. package/apps/server/src/api/reference.ts +27 -27
  9. package/apps/server/src/api/rights.ts +18 -18
  10. package/apps/server/src/chat-handler.ts +5 -5
  11. package/apps/server/src/config-definition.ts +37 -10
  12. package/apps/server/src/config-file.ts +49 -49
  13. package/apps/server/src/config.ts +2 -0
  14. package/apps/server/src/data-directory.ts +2 -2
  15. package/apps/server/src/external-access.ts +1 -1
  16. package/apps/server/src/folder-install.ts +1 -1
  17. package/apps/server/src/help-files.ts +1 -1
  18. package/apps/server/src/host-api.json +6 -1
  19. package/apps/server/src/host-api.ts +3 -2
  20. package/apps/server/src/host-record.ts +3 -3
  21. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  22. package/apps/server/src/host-version.ts +17 -17
  23. package/apps/server/src/host-web.ts +5 -5
  24. package/apps/server/src/main.ts +6 -6
  25. package/apps/server/src/missing-environment.ts +6 -6
  26. package/apps/server/src/parent-watch.ts +4 -4
  27. package/apps/server/src/plugin-build/build.ts +31 -31
  28. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  29. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  30. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  31. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  32. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  33. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  34. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  35. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  36. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  37. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  38. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  39. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  40. package/apps/server/src/plugin-support/http.ts +2 -2
  41. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  42. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  43. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  44. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  45. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  46. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  47. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  48. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  49. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  50. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  51. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  52. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  53. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  54. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  55. package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
  56. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  57. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  58. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  59. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  60. package/apps/server/src/plugin-support/prompt.ts +1 -1
  61. package/apps/server/src/plugin-support/provision.ts +8 -8
  62. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  63. package/apps/server/src/plugin-support/skills.ts +18 -18
  64. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  65. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  66. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  67. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  68. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  69. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  70. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  71. package/apps/server/src/plugin-support/zip.ts +7 -7
  72. package/apps/server/src/profile/bundle-manifest.ts +17 -17
  73. package/apps/server/src/profile/compose.ts +12 -7
  74. package/apps/server/src/profile/plugin-discovery.ts +12 -12
  75. package/apps/server/src/profile/provisioning.ts +5 -5
  76. package/apps/server/src/profile-target.ts +10 -10
  77. package/apps/server/src/protocol.ts +2 -2
  78. package/apps/server/src/provider.ts +61 -56
  79. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  80. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  81. package/apps/server/src/ragents/coordinator.ts +2 -2
  82. package/apps/server/src/ragents/engine.ts +23 -23
  83. package/apps/server/src/ragents/global-chat.ts +8 -8
  84. package/apps/server/src/ragents/host-services.ts +6 -3
  85. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  86. package/apps/server/src/ragents/run-owner.ts +2 -2
  87. package/apps/server/src/ragents/session.ts +49 -49
  88. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  89. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  90. package/apps/server/src/rpc/dispatcher.ts +19 -19
  91. package/apps/server/src/rpc/http-transport.ts +11 -11
  92. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  93. package/apps/server/src/run-preparation-input.ts +5 -5
  94. package/apps/server/src/run-preparation.ts +24 -24
  95. package/apps/server/src/run-transfer.ts +39 -39
  96. package/apps/server/src/server.ts +48 -48
  97. package/apps/server/src/settings.ts +1 -1
  98. package/apps/server/src/startup.ts +3 -3
  99. package/apps/server/src/title-compactor.ts +9 -9
  100. package/apps/server/src/title-settings.ts +3 -3
  101. package/apps/server/src/web-bundles.ts +2 -2
  102. package/apps/server/src/web-stylesheet.ts +2 -2
  103. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-BfNSGxjB.js} +1 -1
  104. package/apps/web/dist/assets/main-D6bsKcIK.js +11 -0
  105. package/apps/web/dist/assets/mermaid-HWGCJPDP-DROEqEeg.js +608 -0
  106. package/apps/web/dist/assets/runPanel-Dumuuqry.js +21 -0
  107. package/apps/web/dist/help/guide-access.html +5 -5
  108. package/apps/web/dist/help/guide-access.md +2 -2
  109. package/apps/web/dist/help/guide-clients.html +53 -54
  110. package/apps/web/dist/help/guide-clients.md +50 -51
  111. package/apps/web/dist/help/guide-distributed.html +12 -7
  112. package/apps/web/dist/help/guide-distributed.md +9 -4
  113. package/apps/web/dist/help/guide-functions.html +3 -3
  114. package/apps/web/dist/help/guide-getting-started.html +24 -15
  115. package/apps/web/dist/help/guide-getting-started.md +22 -12
  116. package/apps/web/dist/help/guide-ideas.html +3 -3
  117. package/apps/web/dist/help/guide-plugins.html +5 -4
  118. package/apps/web/dist/help/guide-plugins.md +2 -1
  119. package/apps/web/dist/help/guide-programs.html +3 -3
  120. package/apps/web/dist/help/guide-runtime.html +6 -6
  121. package/apps/web/dist/help/guide-runtime.md +3 -3
  122. package/apps/web/dist/help/guide.html +3 -3
  123. package/apps/web/dist/help/index.html +196 -144
  124. package/apps/web/dist/help/mini-app.css +6 -0
  125. package/apps/web/dist/help/mini-app.js +14 -14
  126. package/apps/web/dist/host-web.json +90 -90
  127. package/apps/web/dist/index.html +3 -3
  128. package/apps/web/dist/run-panel.html +3 -3
  129. package/apps/web/package.json +1 -1
  130. package/apps/web/src/AccessContext.tsx +15 -15
  131. package/apps/web/src/App.tsx +13 -13
  132. package/apps/web/src/DiffCode.tsx +2 -2
  133. package/apps/web/src/HelpDialog.tsx +3 -3
  134. package/apps/web/src/Overview.tsx +13 -13
  135. package/apps/web/src/PluginActivation.ts +1 -1
  136. package/apps/web/src/PluginChat.tsx +15 -15
  137. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  138. package/apps/web/src/PluginRegistry.tsx +44 -44
  139. package/apps/web/src/RunPreparationChat.tsx +11 -11
  140. package/apps/web/src/RunStore.ts +1 -1
  141. package/apps/web/src/SessionList.tsx +14 -14
  142. package/apps/web/src/SettingsModal.tsx +112 -112
  143. package/apps/web/src/StartOptions.tsx +11 -11
  144. package/apps/web/src/StartSelection.tsx +11 -11
  145. package/apps/web/src/StartTiles.tsx +8 -8
  146. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  147. package/apps/web/src/ThemeSettings.tsx +8 -8
  148. package/apps/web/src/TitleModelSettings.tsx +13 -13
  149. package/apps/web/src/WorkspacePanel.tsx +9 -9
  150. package/apps/web/src/access-session.ts +4 -4
  151. package/apps/web/src/access-token.ts +5 -5
  152. package/apps/web/src/actor-conversation.ts +3 -3
  153. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  154. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  155. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  156. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  157. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  158. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  159. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  160. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  161. package/apps/web/src/api.ts +7 -7
  162. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  163. package/apps/web/src/chat/chat-target.ts +3 -3
  164. package/apps/web/src/chat/requests.ts +2 -2
  165. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  166. package/apps/web/src/chat-view-settings.tsx +5 -6
  167. package/apps/web/src/diff-view.css +1 -1
  168. package/apps/web/src/highlighting.css +1 -1
  169. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  170. package/apps/web/src/lib/labels.ts +6 -6
  171. package/apps/web/src/main.tsx +4 -4
  172. package/apps/web/src/offered-machines.ts +2 -2
  173. package/apps/web/src/page-opener.tsx +1 -1
  174. package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
  175. package/apps/web/src/panel/LoginForm.tsx +6 -6
  176. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  177. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  178. package/apps/web/src/panel/PanelPage.tsx +1 -1
  179. package/apps/web/src/panel/RunLine.tsx +4 -4
  180. package/apps/web/src/panel/RunsPage.tsx +15 -15
  181. package/apps/web/src/panel/StartPage.tsx +26 -26
  182. package/apps/web/src/panel/connection-state.ts +9 -9
  183. package/apps/web/src/panel/contract.ts +28 -28
  184. package/apps/web/src/panel.tsx +1 -1
  185. package/apps/web/src/plugin-bootstrap.ts +5 -5
  186. package/apps/web/src/product/ModelControl.tsx +3 -3
  187. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  188. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  189. package/apps/web/src/product/model-settings.ts +2 -2
  190. package/apps/web/src/rpc/client.ts +16 -16
  191. package/apps/web/src/rpc.ts +1 -1
  192. package/apps/web/src/run-overview.ts +1 -1
  193. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  194. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  195. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  196. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  197. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  198. package/apps/web/src/run-panel/clipboard.ts +3 -3
  199. package/apps/web/src/run-panel/host-contract.ts +5 -5
  200. package/apps/web/src/run-panel/host.ts +15 -15
  201. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  202. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  203. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  204. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  205. package/apps/web/src/run-panel.tsx +4 -4
  206. package/apps/web/src/run-preparation.ts +2 -2
  207. package/apps/web/src/run-view.ts +3 -3
  208. package/apps/web/src/settings-contributions.ts +32 -32
  209. package/apps/web/src/theme.ts +9 -9
  210. package/apps/web/src/title-model-settings.ts +6 -6
  211. package/apps/web/src/ui/ListDetail.tsx +9 -9
  212. package/apps/web/src/ui/dialog.tsx +2 -2
  213. package/apps/web/src/ui/modal-controller.ts +3 -3
  214. package/apps/web/src/ui/modal.tsx +2 -2
  215. package/apps/web/src/ui/popover.tsx +1 -1
  216. package/apps/web/src/ui/relative-time.ts +8 -8
  217. package/apps/web/src/ui/startup-notice.tsx +2 -2
  218. package/apps/web/src/ui/state-icon.tsx +1 -1
  219. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  220. package/apps/web/src/ui/stop-button.tsx +2 -2
  221. package/bundles/ragents.activity/ragents-bundle.json +2 -2
  222. package/bundles/ragents.activity/web/classes.json +1 -1
  223. package/bundles/ragents.activity/web/index.js +1 -1
  224. package/bundles/ragents.activity/web/index.js.map +2 -2
  225. package/bundles/ragents.actor-programs/ragents-bundle.json +2 -2
  226. package/bundles/ragents.actor-programs/server/index.js +225 -225
  227. package/bundles/ragents.actor-programs/server/index.js.map +2 -2
  228. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  229. package/bundles/ragents.actor-programs/web/index.js +1 -1
  230. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  231. package/bundles/ragents.ask/ragents-bundle.json +2 -2
  232. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  233. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  234. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  235. package/bundles/ragents.ask/server/index.js +23 -23
  236. package/bundles/ragents.ask/server/index.js.map +2 -2
  237. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  238. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  239. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
  240. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
  241. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  242. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  243. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  245. package/bundles/ragents.ask/web/classes.json +1 -1
  246. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  247. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  248. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  249. package/bundles/ragents.ask/web/index.js +1 -1
  250. package/bundles/ragents.ask/web/index.js.map +2 -2
  251. package/bundles/ragents.browser/executor/index.mjs +35 -35
  252. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  253. package/bundles/ragents.browser/ragents-bundle.json +2 -2
  254. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  255. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  256. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  257. package/bundles/ragents.browser/server/index.js +31 -31
  258. package/bundles/ragents.browser/server/index.js.map +2 -2
  259. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  260. package/bundles/ragents.documents/prompt.hbs +1 -1
  261. package/bundles/ragents.documents/ragents-bundle.json +2 -2
  262. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  263. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  264. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  265. package/bundles/ragents.documents/server/index.js +26 -26
  266. package/bundles/ragents.documents/server/index.js.map +2 -2
  267. package/bundles/ragents.documents/web/classes.json +1 -1
  268. package/bundles/ragents.documents/web/index.js +1 -1
  269. package/bundles/ragents.documents/web/index.js.map +3 -3
  270. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  271. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  272. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +2 -2
  273. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  274. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  275. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  276. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  277. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  278. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +2 -2
  280. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  281. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  282. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  283. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  284. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  285. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  286. package/bundles/ragents.lsp-typescript/ragents-bundle.json +2 -2
  287. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  288. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  289. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  290. package/bundles/ragents.model-relay/ragents-bundle.json +7 -3
  291. package/bundles/ragents.model-relay/server/index.js +25 -21
  292. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  293. package/bundles/ragents.orchestration/ragents-bundle.json +2 -2
  294. package/bundles/ragents.orchestration/server/index.js +28 -28
  295. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  296. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  297. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  300. package/bundles/ragents.orchestration/web/classes.json +1 -1
  301. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  302. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  303. package/bundles/ragents.orchestration/web/index.js +8 -8
  304. package/bundles/ragents.orchestration/web/index.js.map +2 -2
  305. package/bundles/ragents.overseer/ragents-bundle.json +2 -2
  306. package/bundles/ragents.overseer/server/index.js +98 -98
  307. package/bundles/ragents.overseer/server/index.js.map +2 -2
  308. package/bundles/ragents.overseer/web/classes.json +1 -1
  309. package/bundles/ragents.overseer/web/index.js +1 -1
  310. package/bundles/ragents.overseer/web/index.js.map +2 -2
  311. package/bundles/ragents.processes/ragents-bundle.json +2 -2
  312. package/bundles/ragents.processes/server/index.js +11 -11
  313. package/bundles/ragents.processes/server/index.js.map +2 -2
  314. package/bundles/ragents.processes/web/classes.json +1 -1
  315. package/bundles/ragents.processes/web/index.js +3 -3
  316. package/bundles/ragents.processes/web/index.js.map +2 -2
  317. package/bundles/ragents.product/ragents-bundle.json +2 -2
  318. package/bundles/ragents.product/server/index.js +12 -13
  319. package/bundles/ragents.product/server/index.js.map +2 -2
  320. package/bundles/ragents.product/web/classes.json +1 -1
  321. package/bundles/ragents.product/web/index.js +1 -1
  322. package/bundles/ragents.product/web/index.js.map +2 -2
  323. package/bundles/ragents.profile-distribution/ragents-bundle.json +2 -2
  324. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  325. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  326. package/bundles/ragents.reference/ragents-bundle.json +2 -2
  327. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  328. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  335. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  336. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  340. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  341. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  347. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  348. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  349. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  350. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  352. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  353. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  360. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  361. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  362. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  363. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  365. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  366. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  367. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  368. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  392. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  393. package/bundles/ragents.reference/web/classes.json +1 -1
  394. package/bundles/ragents.reference/web/index.js +1 -1
  395. package/bundles/ragents.reference/web/index.js.map +2 -2
  396. package/bundles/ragents.todo/ragents-bundle.json +2 -2
  397. package/bundles/ragents.todo/server/index.js +5 -5
  398. package/bundles/ragents.todo/server/index.js.map +2 -2
  399. package/bundles/ragents.todo/web/classes.json +1 -1
  400. package/bundles/ragents.todo/web/index.js +1 -1
  401. package/bundles/ragents.todo/web/index.js.map +2 -2
  402. package/bundles/ragents.transcript/ragents-bundle.json +2 -2
  403. package/bundles/ragents.transcript/server/index.js +11 -11
  404. package/bundles/ragents.transcript/server/index.js.map +2 -2
  405. package/bundles/ragents.watch/ragents-bundle.json +2 -2
  406. package/bundles/ragents.watch/server/index.js +48 -48
  407. package/bundles/ragents.watch/server/index.js.map +2 -2
  408. package/bundles/ragents.workspace/ragents-bundle.json +2 -2
  409. package/bundles/ragents.workspace/server/index.js +81 -81
  410. package/bundles/ragents.workspace/server/index.js.map +2 -2
  411. package/bundles/ragents.workspace/web/classes.json +1 -1
  412. package/bundles/ragents.workspace/web/index.js +1 -1
  413. package/bundles/ragents.workspace/web/index.js.map +2 -2
  414. package/package.json +4 -4
  415. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  416. package/packages/agent/dist/index.d.ts +1 -1
  417. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  418. package/packages/agent/src/core/compaction/utils.ts +1 -1
  419. package/packages/agent/src/core/model-runtime.ts +45 -5
  420. package/packages/agent/src/index.ts +1 -1
  421. package/packages/agent/src/loop/agent-loop.ts +2 -2
  422. package/packages/ai/dist/models.d.ts +1 -0
  423. package/packages/ai/dist/models.generated.d.ts +4544 -983
  424. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  425. package/packages/ai/src/api/ai-sdk.ts +33 -7
  426. package/packages/ai/src/api-registry.ts +1 -1
  427. package/packages/ai/src/index.ts +2 -2
  428. package/packages/ai/src/models.generated.ts +1 -1
  429. package/packages/ai/src/models.ts +1 -1
  430. package/packages/ai/src/providers/openrouter.models.ts +3723 -550
  431. package/packages/ragents/src/access.ts +12 -12
  432. package/packages/ragents/src/agents/actor-input.ts +33 -33
  433. package/packages/ragents/src/agents/catalog.ts +1 -1
  434. package/packages/ragents/src/agents/delivery.ts +17 -17
  435. package/packages/ragents/src/agents/plugins.ts +1 -1
  436. package/packages/ragents/src/agents/scheduler.ts +7 -7
  437. package/packages/ragents/src/agents/schemas.ts +1 -1
  438. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  439. package/packages/ragents/src/agents/tools.ts +20 -20
  440. package/packages/ragents/src/agents/toolset.ts +5 -5
  441. package/packages/ragents/src/agents/workspaces.ts +1 -1
  442. package/packages/ragents/src/domain/events.ts +1 -1
  443. package/packages/ragents/src/domain/model.ts +5 -5
  444. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  445. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  446. package/packages/ragents/src/drivers/agent.ts +2 -2
  447. package/packages/ragents/src/drivers/attachments.ts +4 -4
  448. package/packages/ragents/src/http/contracts.ts +14 -14
  449. package/packages/ragents/src/http/methods.ts +6 -6
  450. package/packages/ragents/src/plugin-host.ts +119 -119
  451. package/packages/ragents/src/plugin-types.ts +16 -16
  452. package/packages/ragents/src/rpc/contract.ts +5 -5
  453. package/packages/ragents/src/rpc/contribution.ts +2 -2
  454. package/packages/ragents/src/rpc/peer.ts +11 -11
  455. package/packages/ragents/src/rpc/protocol.ts +2 -2
  456. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  457. package/packages/ragents/src/runtime/journal.ts +10 -10
  458. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  459. package/packages/ragents/src/runtime/stop.ts +2 -2
  460. package/packages/ragents/src/script/mediators.ts +35 -35
  461. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  462. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  463. package/packages/ragents/src/typescript/compiler.ts +7 -7
  464. package/packages/ragents/src/typescript/snippet.ts +5 -5
  465. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  466. package/packages/workspace-executor/src/commands.ts +18 -18
  467. package/packages/workspace-executor/src/context.ts +15 -15
  468. package/packages/workspace-executor/src/contributions.ts +35 -35
  469. package/packages/workspace-executor/src/errors.ts +1 -1
  470. package/packages/workspace-executor/src/executor.ts +15 -15
  471. package/packages/workspace-executor/src/files.ts +30 -30
  472. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  473. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  474. package/packages/workspace-executor/src/language-server/host.ts +35 -35
  475. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  476. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  477. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  478. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  479. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
  480. package/packages/workspace-executor/src/managed-process.ts +12 -12
  481. package/packages/workspace-executor/src/module.ts +8 -8
  482. package/packages/workspace-executor/src/modules.ts +3 -3
  483. package/packages/workspace-executor/src/paths.ts +11 -11
  484. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  485. package/packages/workspace-executor/src/processes/module.ts +3 -3
  486. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  487. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  488. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  489. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  490. package/packages/workspace-executor/src/run-folders.ts +3 -3
  491. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  492. package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
  493. package/packages/workspace-executor/src/session-ident.ts +2 -2
  494. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  495. package/packages/workspace-executor/src/tools.ts +5 -5
  496. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  497. package/plugins/ragents.activity/web/activity.ts +2 -2
  498. package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
  499. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  500. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  501. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  502. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  503. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  504. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  505. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  506. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  507. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  508. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  509. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  510. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  511. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  512. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  513. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  514. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  515. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  516. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  517. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  518. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  519. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  520. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  521. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  522. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  523. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  524. package/plugins/ragents.ask/ask-payload.ts +1 -1
  525. package/plugins/ragents.ask/contract.ts +5 -5
  526. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  527. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  528. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  529. package/plugins/ragents.ask/server/contract.ts +5 -5
  530. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  531. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  532. package/plugins/ragents.ask/web/index.tsx +2 -2
  533. package/plugins/ragents.browser/executor/contract.ts +6 -6
  534. package/plugins/ragents.browser/executor/index.ts +1 -1
  535. package/plugins/ragents.browser/executor/module.ts +6 -6
  536. package/plugins/ragents.browser/executor/pages.ts +32 -32
  537. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  538. package/plugins/ragents.browser/provision.ts +7 -7
  539. package/plugins/ragents.browser/server/browser.ts +14 -14
  540. package/plugins/ragents.browser/server/contract.ts +1 -1
  541. package/plugins/ragents.browser/server/index.ts +1 -1
  542. package/plugins/ragents.browser/server/tools.ts +14 -14
  543. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  544. package/plugins/ragents.documents/contract.ts +2 -2
  545. package/plugins/ragents.documents/prompt.hbs +1 -1
  546. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  547. package/plugins/ragents.documents/server/files-route.ts +6 -6
  548. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  549. package/plugins/ragents.documents/server/store.ts +1 -1
  550. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  551. package/plugins/ragents.documents/web/index.tsx +11 -11
  552. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  553. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  554. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  555. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  556. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  557. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  558. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  559. package/plugins/ragents.model-relay/server/config.ts +6 -2
  560. package/plugins/ragents.model-relay/server/index.ts +2 -2
  561. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  562. package/plugins/ragents.orchestration/contract.ts +8 -8
  563. package/plugins/ragents.orchestration/server/index.ts +4 -4
  564. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  565. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  566. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  567. package/plugins/ragents.orchestration/web/ActorChat.tsx +2 -2
  568. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
  569. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  570. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  571. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  572. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  573. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  574. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  575. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  576. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  577. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  578. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  579. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  580. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  581. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  582. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  583. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  584. package/plugins/ragents.orchestration/web/format.ts +1 -1
  585. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  586. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  587. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  588. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
  589. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  590. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  591. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  592. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  593. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  594. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  595. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
  596. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  597. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  598. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  599. package/plugins/ragents.overseer/contract.ts +20 -20
  600. package/plugins/ragents.overseer/server/api.ts +6 -6
  601. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  602. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  603. package/plugins/ragents.overseer/server/index.ts +24 -24
  604. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  605. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  606. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  607. package/plugins/ragents.overseer/server/settings.ts +6 -6
  608. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  609. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  610. package/plugins/ragents.overseer/web/index.tsx +20 -20
  611. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  612. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  613. package/plugins/ragents.processes/contract.ts +5 -5
  614. package/plugins/ragents.processes/server/methods.ts +4 -4
  615. package/plugins/ragents.processes/server/observer.ts +8 -8
  616. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  617. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  618. package/plugins/ragents.processes/web/processes.ts +10 -10
  619. package/plugins/ragents.product/server/config.ts +1 -1
  620. package/plugins/ragents.product/server/index.ts +4 -4
  621. package/plugins/ragents.product/server/runtime.ts +9 -10
  622. package/plugins/ragents.product/web/index.tsx +1 -1
  623. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  624. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  625. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  626. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  627. package/plugins/ragents.reference/examples.ts +27 -27
  628. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  629. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  630. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  631. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  632. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  636. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  637. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  638. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  639. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  640. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  641. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  642. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  643. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  644. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  645. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  648. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  649. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  650. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  651. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  652. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  653. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  654. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  655. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  656. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  657. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  661. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  662. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  663. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  664. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  665. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  666. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  667. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  668. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  669. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  670. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  671. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  672. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  693. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  694. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  695. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  696. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  697. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  698. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  699. package/plugins/ragents.watch/server/condition.ts +4 -4
  700. package/plugins/ragents.watch/server/functions.ts +27 -27
  701. package/plugins/ragents.watch/server/observation.ts +2 -2
  702. package/plugins/ragents.watch/server/service.ts +14 -14
  703. package/plugins/ragents.workspace/client/transport.ts +1 -1
  704. package/plugins/ragents.workspace/client/workspace-client.ts +54 -54
  705. package/plugins/ragents.workspace/contract.ts +46 -46
  706. package/plugins/ragents.workspace/server/binding.ts +20 -20
  707. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  708. package/plugins/ragents.workspace/server/clients.ts +42 -42
  709. package/plugins/ragents.workspace/server/config.ts +7 -7
  710. package/plugins/ragents.workspace/server/index.ts +3 -3
  711. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  712. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  713. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  714. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  715. package/plugins/ragents.workspace/web/index.tsx +1 -1
  716. package/ragents.config.core.ts +1 -1
  717. package/ragents.config.developer.ts +3 -3
  718. package/ragents.config.showcase.ts +2 -2
  719. package/scripts/agent/agent-cli.ts +96 -96
  720. package/scripts/agent/journal.ts +5 -5
  721. package/scripts/agent/turn-control.ts +4 -4
  722. package/scripts/package/build-package.ts +29 -29
  723. package/scripts/package/host-links.mjs +3 -3
  724. package/scripts/package/publish-package.ts +29 -29
  725. package/scripts/package/ragents.mjs +19 -19
  726. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  727. package/scripts/plugin/plugin-cli.ts +14 -14
  728. package/scripts/provision/run-provision.ts +14 -15
  729. package/scripts/remote/connect.ts +46 -46
  730. package/scripts/remote/start.ts +18 -18
  731. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  732. package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
  733. package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
  734. package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
  735. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  736. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  737. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  738. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  739. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  740. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  741. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  742. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  743. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -1 +1 @@
1
- ["a","access","actionId","actionViews","activate","active","additionalProperties","alert","answer","answerQuestion","answerTextOf","answered","antworten","approved","aria-pressed","aria-pressed:bg-accent","aria-pressed:border-primary","as","ask","askContracts","askPayloadOf","askedBy","asker","askerHandle","asking","assess","async","attention","attentionFor","await","beantworten","bg-background","border","border-border","call","candidate","cardClasses","caught","className","closes","configuredPlugin","const","data-question","dazu","defineOperation","den","der","des","description","descriptor","die","disabled","dismiss","eine","eines","entry","export","false","flex","flex-1","flex-col","flex-none","font-normal","fragt","frei","freiSenden","freie","from","function","gap-1.5","gap-2","gap-2.5","gets","group-aria-pressed/button:border-primary","h-auto","handle","hat","id","if","immer","import","inline-flex","input","instanceof","interface","items-center","items-stretch","its","justify-center","justify-start","key","label","leading-normal","length","list-disc","lucide-react","maxLength","message","minLength","multi","needsRunView","new","noch","null","nur","o","object","oder","offen","ohne","onAnswer","onChange","onClick","onKeyDown","option","optionClasses","options","outline","owner","payload","pending","pending-questions","pendingQuestions","person","pl-6","placeholder","px-3","px-3.5","py-1.5","question","react","read","recipient","rest","result","return","rights","role","rounded-sm","rpc","runId","s","self-start","sent","session","setError","setFrei","setGewaehlt","sie","size","size-3.5","sm","status","string","stringArrayOf","supersededBy","supersedingInputOf","text","text-[0.7rem]","text-destructive","text-left","text-muted-foreground","text-primary","text-sm","text-success","the","to","tool","true","type","typebox","typeof","umschalten","und","undefined","unknown","useAccess","useState","user","value","variant","verwirft","view","w-full","wahlweise","webPlugin","wenn","wert","when","whitespace-normal","write"]
1
+ ["a","access","actionId","actionViews","activate","active","actor","additionalProperties","alert","always","an","and","answer","answerQuestion","answerTextOf","answered","approved","aria-pressed","aria-pressed:bg-accent","aria-pressed:border-primary","as","ask","askContracts","askPayloadOf","askedBy","asker","askerHandle","asking","asks","assess","async","attention","attentionFor","await","bg-background","border","border-border","call","candidate","card","cardClasses","caught","choice","className","closes","configuredPlugin","const","data-question","defineOperation","description","descriptor","disabled","dismiss","dismissed","dismisses","either","entry","export","false","flex","flex-1","flex-col","flex-none","font-normal","for","free","freely","from","function","gap-1.5","gap-2","gap-2.5","gets","group-aria-pressed/button:border-primary","h-auto","handle","id","if","import","inline-flex","input","instanceof","interface","it","items-center","items-stretch","its","justify-center","justify-start","key","label","leading-normal","length","list-disc","lucide-react","maxLength","message","minLength","multi","multiple","needsRunView","new","null","o","object","of","onAnswer","onChange","onClick","onKeyDown","only","open","option","optionClasses","options","or","outline","outside","owner","payload","pending","pending-questions","pendingQuestions","person","pl-6","placeholder","plus","px-3","px-3.5","py-1.5","question","questions","react","read","recipient","record","rest","result","return","rights","role","rounded-sm","rpc","run","runId","s","selection","self-start","sendFreeText","sent","session","setError","setFreeText","setSelected","single","size","size-3.5","sm","stands","status","string","stringArrayOf","supersededBy","supersedingInputOf","text","text-[0.7rem]","text-destructive","text-left","text-muted-foreground","text-primary","text-sm","text-success","the","to","toggle","tool","true","type","typebox","typeof","undefined","unknown","useAccess","useState","user","value","variant","view","w-full","webPlugin","when","whitespace-normal","without","write"]
@@ -1,2 +1,2 @@
1
- import{a,b,c,d}from"/plugins/ragents.ask/web/chunks/chunk-WFN4374U.js";export{a as ASK_PLUGIN_ID,b as SUPERSEDED_ANSWER,c as askPayloadOf,d as supersedingInputOf};
1
+ import{a,b,c,d}from"/plugins/ragents.ask/web/chunks/chunk-D6NNB5DS.js";export{a as ASK_PLUGIN_ID,b as SUPERSEDED_ANSWER,c as askPayloadOf,d as supersedingInputOf};
2
2
  //# sourceMappingURL=/plugins/ragents.ask/web/exports/ask-payload.js.map
@@ -1,2 +1,2 @@
1
- import{e as a}from"/plugins/ragents.ask/web/chunks/chunk-MBRPS477.js";import"/plugins/ragents.ask/web/chunks/chunk-VUBJDIKQ.js";export{a as QuestionCard};
1
+ import{e as a}from"/plugins/ragents.ask/web/chunks/chunk-IQBHK7MV.js";import"/plugins/ragents.ask/web/chunks/chunk-PWFIAMX4.js";export{a as QuestionCard};
2
2
  //# sourceMappingURL=/plugins/ragents.ask/web/exports/web/QuestionCard.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"/plugins/ragents.ask/web/chunks/chunk-4VXWWEG7.js";import"/plugins/ragents.ask/web/chunks/chunk-VUBJDIKQ.js";export{a as answerQuestion};
1
+ import{a}from"/plugins/ragents.ask/web/chunks/chunk-QHGKEESD.js";import"/plugins/ragents.ask/web/chunks/chunk-PWFIAMX4.js";export{a as answerQuestion};
2
2
  //# sourceMappingURL=/plugins/ragents.ask/web/exports/web/api.js.map
@@ -1,2 +1,2 @@
1
- import{a as s,b as l,c as i,d as g}from"/plugins/ragents.ask/web/chunks/chunk-WFN4374U.js";import{a as w,b as A,c as u,d as P,e as V}from"/plugins/ragents.ask/web/chunks/chunk-MBRPS477.js";import{a as x}from"/plugins/ragents.ask/web/chunks/chunk-4VXWWEG7.js";import{a as o}from"/plugins/ragents.ask/web/chunks/chunk-VUBJDIKQ.js";var f=o("@ragents/web/run-view","runViewFrom");var d=o("@ragents/web/AccessContext","useAccess");var R=e=>typeof e=="string"?e:e==null?"":JSON.stringify(e);function y({action:e,session:t,text:n}){let r=d(),[p,c]=w(),m=i(e.payload);if(!m)return null;let S=k=>{c(void 0),x(t.session.id,e.actionId,k).catch(a=>c(a instanceof Error?a.message:String(a)))};return P(A,{children:[u(V,{answer:e.status===void 0?void 0:e.status==="approved"?R(e.result):g(e.result)!==void 0?l:"Der Benutzer hat die Frage verworfen.",onAnswer:r.can("runs.write")?S:void 0,question:m,text:n}),p&&u("p",{className:"text-[0.7rem] text-destructive",role:"alert",children:p})]})}var v=e=>e.actions.filter(t=>t.owner===s&&t.status==="pending"),C=(e,t)=>e.actors.find(n=>n.id===t)?.handle??t,D=e=>{let t=f(e.runView);if(!t)return;let[n,...r]=v(t);if(n)return{active:!0,label:r.length===0?`@${C(t,i(n.payload)?.recipient??n.askedBy)} fragt`:`${r.length+1} R\xFCckfragen offen`}},W=e=>({...e,needsRunView:!0,actionViews:[{owner:s,View:y}],attention:[{id:"ragents.ask.pending-questions",assess:D}]}),b={id:s},L={...b,activate:()=>W(b)};export{L as webPlugin};
1
+ import{a as s,b as l,c as i,d as g}from"/plugins/ragents.ask/web/chunks/chunk-D6NNB5DS.js";import{a as w,b as A,c as a,d as P,e as V}from"/plugins/ragents.ask/web/chunks/chunk-IQBHK7MV.js";import{a as x}from"/plugins/ragents.ask/web/chunks/chunk-QHGKEESD.js";import{a as o}from"/plugins/ragents.ask/web/chunks/chunk-PWFIAMX4.js";var d=o("@ragents/web/run-view","runViewFrom");var f=o("@ragents/web/AccessContext","useAccess");var R=e=>typeof e=="string"?e:e==null?"":JSON.stringify(e);function y({action:e,session:t,text:n}){let r=f(),[p,c]=w(),m=i(e.payload);if(!m)return null;let S=k=>{c(void 0),x(t.session.id,e.actionId,k).catch(u=>c(u instanceof Error?u.message:String(u)))};return P(A,{children:[a(V,{answer:e.status===void 0?void 0:e.status==="approved"?R(e.result):g(e.result)!==void 0?l:"The user dismissed the question.",onAnswer:r.can("runs.write")?S:void 0,question:m,text:n}),p&&a("p",{className:"text-[0.7rem] text-destructive",role:"alert",children:p})]})}var C=e=>e.actions.filter(t=>t.owner===s&&t.status==="pending"),W=(e,t)=>e.actors.find(n=>n.id===t)?.handle??t,v=e=>{let t=d(e.runView);if(!t)return;let[n,...r]=C(t);if(n)return{active:!0,label:r.length===0?`@${W(t,i(n.payload)?.recipient??n.askedBy)} asks`:`${r.length+1} open questions`}},D=e=>({...e,needsRunView:!0,actionViews:[{owner:s,View:y}],attention:[{id:"ragents.ask.pending-questions",assess:v}]}),b={id:s},B={...b,activate:()=>D(b)};export{B as webPlugin};
2
2
  //# sourceMappingURL=/plugins/ragents.ask/web/index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["ragents-host-value:@ragents/web/run-view#runViewFrom", "ragents-host-value:@ragents/web/AccessContext#useAccess", "../../../plugins/ragents.ask/web/AskActionView.tsx", "../../../plugins/ragents.ask/web/index.tsx"],
4
- "sourcesContent": ["import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runViewFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/AccessContext\", \"useAccess\");\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { useState } from \"react\";\nimport type { ActionViewContext } from \"@ragents/web/PluginRegistry\";\nimport { askPayloadOf, SUPERSEDED_ANSWER, supersedingInputOf } from \"../ask-payload\";\nimport { answerQuestion } from \"./api\";\nimport { QuestionCard } from \"./QuestionCard\";\n\nconst answerTextOf = (result: unknown): string =>\n typeof result === \"string\" ? result : result === null || result === undefined ? \"\" : JSON.stringify(result);\n\nexport function AskActionView({ action, session, text }: ActionViewContext) {\n const access = useAccess();\n const [error, setError] = useState<string>();\n const question = askPayloadOf(action.payload);\n if (!question) return null;\n\n const answer = (value: string) => {\n setError(undefined);\n answerQuestion(session.session.id, action.actionId, value)\n .catch((caught: unknown) => setError(caught instanceof Error ? caught.message : String(caught)));\n };\n\n return (\n <>\n <QuestionCard\n answer={action.status === undefined\n ? undefined\n : action.status === \"approved\" ? answerTextOf(action.result)\n : supersedingInputOf(action.result) !== undefined ? SUPERSEDED_ANSWER : \"Der Benutzer hat die Frage verworfen.\"}\n onAnswer={access.can(\"runs.write\") ? answer : undefined}\n question={question}\n text={text}\n />\n {error && <p className=\"text-[0.7rem] text-destructive\" role=\"alert\">{error}</p>}\n </>\n );\n}\n", "import {\n type SessionContext,\n type WebPlugin,\n type WebPluginDescriptor,\n} from \"@ragents/web/PluginRegistry\";\nimport { runViewFrom, type RunView } from \"@ragents/web/run-view\";\nimport { askPayloadOf, ASK_PLUGIN_ID } from \"../ask-payload\";\nimport { AskActionView } from \"./AskActionView\";\n\nconst pendingQuestions = (view: RunView) =>\n view.actions.filter((action) => action.owner === ASK_PLUGIN_ID && action.status === \"pending\");\n\nconst askerHandle = (view: RunView, askedBy: string): string =>\n view.actors.find((actor) => actor.id === askedBy)?.handle ?? askedBy;\n\nconst attentionFor = (session: SessionContext) => {\n const view = runViewFrom(session.runView);\n if (!view) return undefined;\n const [first, ...rest] = pendingQuestions(view);\n if (!first) return undefined;\n return {\n active: true as const,\n label: rest.length === 0\n ? `@${askerHandle(view, askPayloadOf(first.payload)?.recipient ?? first.askedBy)} fragt`\n : `${rest.length + 1} R\u00FCckfragen offen`,\n };\n};\n\nconst configuredPlugin = (descriptor: WebPluginDescriptor): WebPlugin => ({\n ...descriptor,\n needsRunView: true,\n actionViews: [{\n owner: ASK_PLUGIN_ID,\n View: AskActionView,\n }],\n attention: [{\n id: \"ragents.ask.pending-questions\",\n assess: attentionFor,\n }],\n});\n\nconst descriptor: WebPluginDescriptor = { id: ASK_PLUGIN_ID };\n\nexport const webPlugin: WebPlugin = {\n ...descriptor,\n activate: () => configuredPlugin(descriptor),\n};\n"],
5
- "mappings": "yUACA,IAAOA,EAAQC,EAAK,wBAAyB,aAAa,ECA1D,IAAOC,EAAQC,EAAK,6BAA8B,WAAW,ECM7D,IAAMC,EAAgBC,GACpB,OAAOA,GAAW,SAAWA,EAASA,GAAW,KAA+B,GAAK,KAAK,UAAUA,CAAM,EAErG,SAASC,EAAc,CAAE,OAAAC,EAAQ,QAAAC,EAAS,KAAAC,CAAK,EAAsB,CAC1E,IAAMC,EAASC,EAAU,EACnB,CAACC,EAAOC,CAAQ,EAAIC,EAAiB,EACrCC,EAAWC,EAAaT,EAAO,OAAO,EAC5C,GAAI,CAACQ,EAAU,OAAO,KAEtB,IAAME,EAAUC,GAAkB,CAChCL,EAAS,MAAS,EAClBM,EAAeX,EAAQ,QAAQ,GAAID,EAAO,SAAUW,CAAK,EACtD,MAAOE,GAAoBP,EAASO,aAAkB,MAAQA,EAAO,QAAU,OAAOA,CAAM,CAAC,CAAC,CACnG,EAEA,OACEC,EAAAC,EAAA,CACE,UAAAC,EAACC,EAAA,CACC,OAAQjB,EAAO,SAAW,OACtB,OACAA,EAAO,SAAW,WAAaH,EAAaG,EAAO,MAAM,EACzDkB,EAAmBlB,EAAO,MAAM,IAAM,OAAYmB,EAAoB,wCAC1E,SAAUhB,EAAO,IAAI,YAAY,EAAIO,EAAS,OAC9C,SAAUF,EACV,KAAMN,EACR,EACCG,GAASW,EAAC,KAAE,UAAU,iCAAiC,KAAK,QAAS,SAAAX,EAAM,GAC9E,CAEJ,CC3BA,IAAMe,EAAoBC,GACxBA,EAAK,QAAQ,OAAQC,GAAWA,EAAO,QAAUC,GAAiBD,EAAO,SAAW,SAAS,EAEzFE,EAAc,CAACH,EAAeI,IAClCJ,EAAK,OAAO,KAAMK,GAAUA,EAAM,KAAOD,CAAO,GAAG,QAAUA,EAEzDE,EAAgBC,GAA4B,CAChD,IAAMP,EAAOQ,EAAYD,EAAQ,OAAO,EACxC,GAAI,CAACP,EAAM,OACX,GAAM,CAACS,EAAO,GAAGC,CAAI,EAAIX,EAAiBC,CAAI,EAC9C,GAAKS,EACL,MAAO,CACL,OAAQ,GACR,MAAOC,EAAK,SAAW,EACnB,IAAIP,EAAYH,EAAMW,EAAaF,EAAM,OAAO,GAAG,WAAaA,EAAM,OAAO,CAAC,SAC9E,GAAGC,EAAK,OAAS,CAAC,sBACxB,CACF,EAEME,EAAoBC,IAAgD,CACxE,GAAGA,EACH,aAAc,GACd,YAAa,CAAC,CACZ,MAAOX,EACP,KAAMY,CACR,CAAC,EACD,UAAW,CAAC,CACV,GAAI,gCACJ,OAAQR,CACV,CAAC,CACH,GAEMO,EAAkC,CAAE,GAAIX,CAAc,EAE/Ca,EAAuB,CAClC,GAAGF,EACH,SAAU,IAAMD,EAAiBC,CAAU,CAC7C",
4
+ "sourcesContent": ["import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runViewFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/AccessContext\", \"useAccess\");\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { useState } from \"react\";\nimport type { ActionViewContext } from \"@ragents/web/PluginRegistry\";\nimport { askPayloadOf, SUPERSEDED_ANSWER, supersedingInputOf } from \"../ask-payload\";\nimport { answerQuestion } from \"./api\";\nimport { QuestionCard } from \"./QuestionCard\";\n\nconst answerTextOf = (result: unknown): string =>\n typeof result === \"string\" ? result : result === null || result === undefined ? \"\" : JSON.stringify(result);\n\nexport function AskActionView({ action, session, text }: ActionViewContext) {\n const access = useAccess();\n const [error, setError] = useState<string>();\n const question = askPayloadOf(action.payload);\n if (!question) return null;\n\n const answer = (value: string) => {\n setError(undefined);\n answerQuestion(session.session.id, action.actionId, value)\n .catch((caught: unknown) => setError(caught instanceof Error ? caught.message : String(caught)));\n };\n\n return (\n <>\n <QuestionCard\n answer={action.status === undefined\n ? undefined\n : action.status === \"approved\" ? answerTextOf(action.result)\n : supersedingInputOf(action.result) !== undefined ? SUPERSEDED_ANSWER : \"The user dismissed the question.\"}\n onAnswer={access.can(\"runs.write\") ? answer : undefined}\n question={question}\n text={text}\n />\n {error && <p className=\"text-[0.7rem] text-destructive\" role=\"alert\">{error}</p>}\n </>\n );\n}\n", "import {\n type SessionContext,\n type WebPlugin,\n type WebPluginDescriptor,\n} from \"@ragents/web/PluginRegistry\";\nimport { runViewFrom, type RunView } from \"@ragents/web/run-view\";\nimport { askPayloadOf, ASK_PLUGIN_ID } from \"../ask-payload\";\nimport { AskActionView } from \"./AskActionView\";\n\nconst pendingQuestions = (view: RunView) =>\n view.actions.filter((action) => action.owner === ASK_PLUGIN_ID && action.status === \"pending\");\n\nconst askerHandle = (view: RunView, askedBy: string): string =>\n view.actors.find((actor) => actor.id === askedBy)?.handle ?? askedBy;\n\nconst attentionFor = (session: SessionContext) => {\n const view = runViewFrom(session.runView);\n if (!view) return undefined;\n const [first, ...rest] = pendingQuestions(view);\n if (!first) return undefined;\n return {\n active: true as const,\n label: rest.length === 0\n ? `@${askerHandle(view, askPayloadOf(first.payload)?.recipient ?? first.askedBy)} asks`\n : `${rest.length + 1} open questions`,\n };\n};\n\nconst configuredPlugin = (descriptor: WebPluginDescriptor): WebPlugin => ({\n ...descriptor,\n needsRunView: true,\n actionViews: [{\n owner: ASK_PLUGIN_ID,\n View: AskActionView,\n }],\n attention: [{\n id: \"ragents.ask.pending-questions\",\n assess: attentionFor,\n }],\n});\n\nconst descriptor: WebPluginDescriptor = { id: ASK_PLUGIN_ID };\n\nexport const webPlugin: WebPlugin = {\n ...descriptor,\n activate: () => configuredPlugin(descriptor),\n};\n"],
5
+ "mappings": "yUACA,IAAOA,EAAQC,EAAK,wBAAyB,aAAa,ECA1D,IAAOC,EAAQC,EAAK,6BAA8B,WAAW,ECM7D,IAAMC,EAAgBC,GACpB,OAAOA,GAAW,SAAWA,EAASA,GAAW,KAA+B,GAAK,KAAK,UAAUA,CAAM,EAErG,SAASC,EAAc,CAAE,OAAAC,EAAQ,QAAAC,EAAS,KAAAC,CAAK,EAAsB,CAC1E,IAAMC,EAASC,EAAU,EACnB,CAACC,EAAOC,CAAQ,EAAIC,EAAiB,EACrCC,EAAWC,EAAaT,EAAO,OAAO,EAC5C,GAAI,CAACQ,EAAU,OAAO,KAEtB,IAAME,EAAUC,GAAkB,CAChCL,EAAS,MAAS,EAClBM,EAAeX,EAAQ,QAAQ,GAAID,EAAO,SAAUW,CAAK,EACtD,MAAOE,GAAoBP,EAASO,aAAkB,MAAQA,EAAO,QAAU,OAAOA,CAAM,CAAC,CAAC,CACnG,EAEA,OACEC,EAAAC,EAAA,CACE,UAAAC,EAACC,EAAA,CACC,OAAQjB,EAAO,SAAW,OACtB,OACAA,EAAO,SAAW,WAAaH,EAAaG,EAAO,MAAM,EACzDkB,EAAmBlB,EAAO,MAAM,IAAM,OAAYmB,EAAoB,mCAC1E,SAAUhB,EAAO,IAAI,YAAY,EAAIO,EAAS,OAC9C,SAAUF,EACV,KAAMN,EACR,EACCG,GAASW,EAAC,KAAE,UAAU,iCAAiC,KAAK,QAAS,SAAAX,EAAM,GAC9E,CAEJ,CC3BA,IAAMe,EAAoBC,GACxBA,EAAK,QAAQ,OAAQC,GAAWA,EAAO,QAAUC,GAAiBD,EAAO,SAAW,SAAS,EAEzFE,EAAc,CAACH,EAAeI,IAClCJ,EAAK,OAAO,KAAMK,GAAUA,EAAM,KAAOD,CAAO,GAAG,QAAUA,EAEzDE,EAAgBC,GAA4B,CAChD,IAAMP,EAAOQ,EAAYD,EAAQ,OAAO,EACxC,GAAI,CAACP,EAAM,OACX,GAAM,CAACS,EAAO,GAAGC,CAAI,EAAIX,EAAiBC,CAAI,EAC9C,GAAKS,EACL,MAAO,CACL,OAAQ,GACR,MAAOC,EAAK,SAAW,EACnB,IAAIP,EAAYH,EAAMW,EAAaF,EAAM,OAAO,GAAG,WAAaA,EAAM,OAAO,CAAC,QAC9E,GAAGC,EAAK,OAAS,CAAC,iBACxB,CACF,EAEME,EAAoBC,IAAgD,CACxE,GAAGA,EACH,aAAc,GACd,YAAa,CAAC,CACZ,MAAOX,EACP,KAAMY,CACR,CAAC,EACD,UAAW,CAAC,CACV,GAAI,gCACJ,OAAQR,CACV,CAAC,CACH,GAEMO,EAAkC,CAAE,GAAIX,CAAc,EAE/Ca,EAAuB,CAClC,GAAGF,EACH,SAAU,IAAMD,EAAiBC,CAAU,CAC7C",
6
6
  "names": ["run_view_runViewFrom_default", "read", "AccessContext_useAccess_default", "read", "answerTextOf", "result", "AskActionView", "action", "session", "text", "access", "AccessContext_useAccess_default", "error", "setError", "react_useState_default", "question", "askPayloadOf", "answer", "value", "answerQuestion", "caught", "jsx_runtime_jsxs_default", "jsx_runtime_Fragment_default", "jsx_runtime_jsx_default", "QuestionCard", "supersedingInputOf", "SUPERSEDED_ANSWER", "pendingQuestions", "view", "action", "ASK_PLUGIN_ID", "askerHandle", "askedBy", "actor", "attentionFor", "session", "run_view_runViewFrom_default", "first", "rest", "askPayloadOf", "configuredPlugin", "descriptor", "AskActionView", "webPlugin"]
7
7
  }
@@ -19,9 +19,9 @@ var BROWSER_EXECUTABLE_VARIABLE = "BROWSER_EXECUTABLE_PATH";
19
19
 
20
20
  // executor/pages.ts
21
21
  var errorText = (error) => error instanceof Error ? error.message : String(error);
22
- var endedError = () => new Error("Der Browserdienst dieses Executors ist beendet.");
22
+ var endedError = () => new Error("The browser service of this executor has ended.");
23
23
  var maxSnapshotLength = 4e4;
24
- var ambiguityHint = "W\xE4hle mit nth (0-basiert) oder first: true im Ziel einen Treffer, oder pr\xFCfe die Anzahl mit count in browser_check.";
24
+ var ambiguityHint = "Pick one match with nth (0-based) or first: true in the target, or check the number with count in browser_check.";
25
25
  var withAmbiguityHint = (error) => {
26
26
  if (error instanceof Error && error.message.includes("strict mode violation")) throw new Error(`${error.message}
27
27
  ${ambiguityHint}`, { cause: error });
@@ -30,9 +30,9 @@ ${ambiguityHint}`, { cause: error });
30
30
  var browserLocator = (page, target) => {
31
31
  const selectors = [target.role, target.label, target.text, target.testId, target.css].filter((value) => value !== void 0);
32
32
  if (selectors.length !== 1 || target.name !== void 0 && target.role === void 0) {
33
- throw new Error("Ein Browserziel braucht genau role (optional name), label, text, testId oder css.");
33
+ throw new Error("A browser target needs exactly one of role (optional name), label, text, testId or css.");
34
34
  }
35
- if (target.nth !== void 0 && target.first) throw new Error("Ein Browserziel verwendet entweder nth oder first, nicht beides.");
35
+ if (target.nth !== void 0 && target.first) throw new Error("A browser target uses either nth or first, not both.");
36
36
  const root = target.frame ? page.frameLocator(target.frame) : page;
37
37
  const base = target.role ? root.getByRole(target.role, { name: target.name, exact: true }) : target.label ? root.getByLabel(target.label, { exact: true }) : target.text ? root.getByText(target.text, { exact: true }) : target.testId ? root.getByTestId(target.testId) : root.locator(target.css);
38
38
  return target.first ? base.first() : target.nth !== void 0 ? base.nth(target.nth) : base;
@@ -47,13 +47,13 @@ var BrowserPages = class {
47
47
  async open(runId, url, viewport, signal) {
48
48
  if (this.#shutDown) throw endedError();
49
49
  const parsed = new URL(url);
50
- if (!["http:", "https:"].includes(parsed.protocol)) throw new Error("browser_open braucht eine HTTP- oder HTTPS-Adresse.");
50
+ if (!["http:", "https:"].includes(parsed.protocol)) throw new Error("browser_open needs an HTTP or HTTPS address.");
51
51
  signal?.throwIfAborted();
52
52
  if (!this.#sessions.has(runId)) this.#start(runId, viewport);
53
53
  return this.#perform(runId, signal, async (session, page) => {
54
54
  this.#resetEvidence(session);
55
55
  const response = await page.goto(parsed.href, { waitUntil: "domcontentloaded" });
56
- if (response && !response.ok()) throw new Error(`Browsernavigation fehlgeschlagen: HTTP ${response.status()} (${page.url()}).`);
56
+ if (response && !response.ok()) throw new Error(`Browser navigation failed: HTTP ${response.status()} (${page.url()}).`);
57
57
  return this.#snapshot(session, page);
58
58
  });
59
59
  }
@@ -82,47 +82,47 @@ var BrowserPages = class {
82
82
  return this.#perform(runId, signal, async (session, page) => {
83
83
  session.checked = false;
84
84
  if (!input.target && input.text === void 0 && input.url === void 0 && input.noErrors !== true) {
85
- throw new Error("browser_check braucht mindestens target, text, url oder noErrors: true.");
85
+ throw new Error("browser_check needs at least target, text, url or noErrors: true.");
86
86
  }
87
87
  if (input.count !== void 0 && (!input.target || input.target.nth !== void 0 || input.target.first)) {
88
- throw new Error("count in browser_check braucht ein target ohne nth oder first und z\xE4hlt dessen sichtbare Treffer.");
88
+ throw new Error("count in browser_check needs a target without nth or first and counts its visible matches.");
89
89
  }
90
90
  const timeout = this.#options.checkTimeoutMs;
91
91
  const assertions = [];
92
92
  if (input.target && input.count !== void 0) {
93
93
  const visible = browserLocator(page, input.target).filter({ visible: true });
94
94
  const found = await this.#waitForCount(visible, input.count, timeout);
95
- if (found !== input.count) throw new Error(`Erwartet ${input.count} sichtbare Treffer, gefunden ${found}.`);
96
- assertions.push(`${input.count} sichtbare Treffer`);
95
+ if (found !== input.count) throw new Error(`Expected ${input.count} visible matches, found ${found}.`);
96
+ assertions.push(`${input.count} visible matches`);
97
97
  } else if (input.target) {
98
98
  const locator = browserLocator(page, input.target);
99
99
  await locator.waitFor({ state: "visible", timeout }).catch(withAmbiguityHint);
100
- assertions.push("Ziel ist sichtbar");
100
+ assertions.push("Target is visible");
101
101
  if (input.text !== void 0) {
102
102
  try {
103
103
  await locator.filter({ hasText: input.text }).waitFor({ state: "visible", timeout });
104
104
  } catch (error) {
105
- throw new Error(`Erwarteter Text fehlt im Ziel: ${input.text}`, { cause: error });
105
+ throw new Error(`Expected text is missing in the target: ${input.text}`, { cause: error });
106
106
  }
107
- assertions.push(`Text im Ziel: ${input.text}`);
107
+ assertions.push(`Text in target: ${input.text}`);
108
108
  }
109
109
  } else if (input.text !== void 0) {
110
110
  await page.getByText(input.text, { exact: false }).first().waitFor({ state: "visible", timeout });
111
- assertions.push(`Sichtbarer Text: ${input.text}`);
111
+ assertions.push(`Visible text: ${input.text}`);
112
112
  }
113
113
  if (input.url !== void 0) {
114
114
  await page.waitForURL(input.url, { timeout });
115
- assertions.push(`Adresse: ${input.url}`);
115
+ assertions.push(`Address: ${input.url}`);
116
116
  }
117
117
  if (input.noErrors !== false) {
118
- if (session.errors.length > 0) throw new Error(`Browserfehler: ${session.errors.join("\n")}`);
119
- assertions.push("Keine erfassten Browser- oder Netzwerkfehler seit der Navigation");
118
+ if (session.errors.length > 0) throw new Error(`Browser errors: ${session.errors.join("\n")}`);
119
+ assertions.push("No captured browser or network errors since the navigation");
120
120
  }
121
121
  session.checked = true;
122
122
  return { url: page.url(), assertions };
123
123
  });
124
124
  }
125
- /** Nimmt die Seite als PNG auf und liefert es Base64-kodiert; `id` merkt sich die Seite als aktuelle Aufnahme. */
125
+ /** Captures the page as PNG and returns it Base64-encoded; the page remembers `id` as the current screenshot. */
126
126
  screenshot(runId, id, fullPage, signal) {
127
127
  return this.#perform(runId, signal, async (session, page) => {
128
128
  const image = await page.screenshot({ fullPage, type: "png", timeout: this.#options.timeoutMs });
@@ -130,7 +130,7 @@ var BrowserPages = class {
130
130
  return image.toString("base64");
131
131
  });
132
132
  }
133
- /** Der Stand der Seite, ohne auf laufende Aktionen zu warten; ohne offene Seite `null`. */
133
+ /** The page state without waiting for running actions; `null` without an open page. */
134
134
  state(runId) {
135
135
  const session = this.#sessions.get(runId);
136
136
  return session && !session.closed && session.page ? this.#stateOf(session, session.page) : null;
@@ -144,7 +144,7 @@ var BrowserPages = class {
144
144
  if (browser) await browser.close();
145
145
  await session.queue;
146
146
  }
147
- /** Schließt jeden Browser; danach startet keiner mehr, weil niemand ihn schließen würde. */
147
+ /** Closes every browser; afterwards none starts anymore because nobody would close it. */
148
148
  async shutdown() {
149
149
  this.#shutDown = true;
150
150
  const results = await Promise.allSettled([...this.#sessions.keys()].map((runId) => this.close(runId)));
@@ -187,10 +187,10 @@ var BrowserPages = class {
187
187
  session.failedRequests = /* @__PURE__ */ new Set();
188
188
  }
189
189
  async #page(session) {
190
- if (session.closed) throw new Error("Der Browser wurde beendet.");
190
+ if (session.closed) throw new Error("The browser was closed.");
191
191
  if (session.page) return session.page;
192
192
  const browser = await session.browser;
193
- if (session.closed) throw new Error("Der Browser wurde beendet.");
193
+ if (session.closed) throw new Error("The browser was closed.");
194
194
  const context = await browser.newContext({ viewport: session.viewport });
195
195
  context.setDefaultTimeout(this.#options.timeoutMs);
196
196
  context.setDefaultNavigationTimeout(this.#options.timeoutMs);
@@ -207,11 +207,11 @@ var BrowserPages = class {
207
207
  page.on("console", (message) => {
208
208
  if (message.type() !== "error") return;
209
209
  const source = message.text().startsWith("Failed to load resource") ? message.location().url : "";
210
- if (source) addRequestError(source, `Konsole: ${message.text()} (${source})`);
211
- else addError(`Konsole: ${message.text()}`);
210
+ if (source) addRequestError(source, `Console: ${message.text()} (${source})`);
211
+ else addError(`Console: ${message.text()}`);
212
212
  });
213
213
  page.on("pageerror", (error) => addError(`JavaScript: ${error.message}`));
214
- page.on("requestfailed", (request) => addRequestError(request.url(), `Netzwerk: ${request.method()} ${request.url()} ${request.failure()?.errorText}`));
214
+ page.on("requestfailed", (request) => addRequestError(request.url(), `Network: ${request.method()} ${request.url()} ${request.failure()?.errorText}`));
215
215
  page.on("response", (response) => {
216
216
  if (response.status() >= 400) addRequestError(response.url(), `HTTP ${response.status()}: ${response.url()}`);
217
217
  });
@@ -219,8 +219,8 @@ var BrowserPages = class {
219
219
  if (frame === page.mainFrame()) this.#resetEvidence(session);
220
220
  });
221
221
  page.on("popup", (popup) => {
222
- addError(`Die Anwendung hat ein neues Fenster ge\xF6ffnet: ${popup.url()}. Popups werden nicht bedient.`);
223
- void popup.close().catch((error) => addError(`Fenster schlie\xDFen: ${errorText(error)}`));
222
+ addError(`The application opened a new window: ${popup.url()}. Popups are not operated.`);
223
+ void popup.close().catch((error) => addError(`Closing window: ${errorText(error)}`));
224
224
  });
225
225
  session.page = page;
226
226
  return page;
@@ -228,11 +228,11 @@ var BrowserPages = class {
228
228
  #perform(runId, signal, action) {
229
229
  if (this.#shutDown) return Promise.reject(endedError());
230
230
  const session = this.#sessions.get(runId);
231
- if (!session || session.closed) return Promise.reject(new Error("F\xFCr diesen Run ist kein Browser offen. Zuerst browser_open aufrufen."));
231
+ if (!session || session.closed) return Promise.reject(new Error("No browser is open for this run. Call browser_open first."));
232
232
  const pending = session.queue.then(async () => {
233
233
  signal?.throwIfAborted();
234
234
  const abort = () => {
235
- void this.close(runId).catch((error) => console.error("Browserstopp fehlgeschlagen:", errorText(error)));
235
+ void this.close(runId).catch((error) => console.error("Browser stop failed:", errorText(error)));
236
236
  };
237
237
  signal?.addEventListener("abort", abort, { once: true });
238
238
  try {
@@ -240,7 +240,7 @@ var BrowserPages = class {
240
240
  signal?.throwIfAborted();
241
241
  const result = await action(session, page);
242
242
  signal?.throwIfAborted();
243
- if (session.closed) throw new Error("Der Browser wurde beendet.");
243
+ if (session.closed) throw new Error("The browser was closed.");
244
244
  return { result, page: this.#stateOf(session, page) };
245
245
  } finally {
246
246
  signal?.removeEventListener("abort", abort);
@@ -284,7 +284,7 @@ var browserExecutable = async (playwright, environment = process.env) => {
284
284
  const configured = environment[BROWSER_EXECUTABLE_VARIABLE];
285
285
  const candidate = configured ? configured : playwright.chromium.executablePath();
286
286
  if (await access(candidate, constants.X_OK).then(() => true, () => false)) return candidate;
287
- throw new Error((configured ? `${BROWSER_EXECUTABLE_VARIABLE} nennt ${configured}; dort gibt es auf diesem Rechner keinen ausf\xFChrbaren Browser. ` : `Auf diesem Rechner gibt es keinen ausf\xFChrbaren Browser: ${BROWSER_EXECUTABLE_VARIABLE} ist nicht gesetzt und Chromium fehlt unter ${candidate}. `) + `Ein Arbeitsplatz holt Chromium mit pnpm provision --workspace, ein Server mit pnpm provision <profil>; ${BROWSER_EXECUTABLE_VARIABLE} nennt einen vorhandenen Chrome, auf einem Server in der Profilsektion ragents.browser, auf einem Arbeitsplatz in seiner Umgebung.`);
287
+ throw new Error((configured ? `${BROWSER_EXECUTABLE_VARIABLE} names ${configured}; there is no executable browser there on this machine. ` : `There is no executable browser on this machine: ${BROWSER_EXECUTABLE_VARIABLE} is not set and Chromium is missing at ${candidate}. `) + `A workspace fetches Chromium with pnpm provision --workspace, a server with pnpm provision <profile>; ${BROWSER_EXECUTABLE_VARIABLE} names an existing Chrome, on a server in the profile section ragents.browser, on a workspace in its environment.`);
288
288
  };
289
289
  var launchChromium = async (machine, hostRoot, runId, timeoutMs) => {
290
290
  const playwright = await hostPlaywright(machine, hostRoot);
@@ -301,23 +301,23 @@ var BROWSER_TIMEOUT_MS = 15e3;
301
301
  var browserModule = (machine, options = {}) => (host) => {
302
302
  const invalid = (message) => machine.operationError("browser-input-invalid", message, 400);
303
303
  const fieldsOf = (input) => {
304
- if (typeof input !== "object" || input === null || Array.isArray(input)) throw invalid("Die Eingabe einer Browseroperation ist ein Objekt");
304
+ if (typeof input !== "object" || input === null || Array.isArray(input)) throw invalid("The input of a browser operation is an object");
305
305
  return input;
306
306
  };
307
307
  const textOf = (input, key) => {
308
308
  const value = fieldsOf(input)[key];
309
- if (typeof value !== "string") throw invalid(`Die Browseroperation braucht ${key} als Text`);
309
+ if (typeof value !== "string") throw invalid(`The browser operation needs ${key} as text`);
310
310
  return value;
311
311
  };
312
312
  const targetOf = (input) => {
313
313
  const value = fieldsOf(input).target;
314
- if (typeof value !== "object" || value === null || Array.isArray(value)) throw invalid("Die Browseroperation braucht ein Ziel");
314
+ if (typeof value !== "object" || value === null || Array.isArray(value)) throw invalid("The browser operation needs a target");
315
315
  return value;
316
316
  };
317
317
  const viewportOf = (input) => {
318
318
  const { width, height } = fieldsOf(input);
319
319
  if (typeof width !== "number" || typeof height !== "number" || !Number.isInteger(width) || !Number.isInteger(height) || width <= 0 || height <= 0) {
320
- throw invalid("Ein Viewport braucht Breite und H\xF6he als positive ganze Zahlen");
320
+ throw invalid("A viewport needs width and height as positive integers");
321
321
  }
322
322
  return { width, height };
323
323
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../plugins/ragents.browser/executor/contract.ts", "../../../plugins/ragents.browser/executor/pages.ts", "../../../plugins/ragents.browser/executor/playwright.ts", "../../../plugins/ragents.browser/executor/module.ts", "../../../plugins/ragents.browser/executor/index.ts"],
4
- "sourcesContent": ["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 type { Browser, Locator, Page } from \"playwright-core\";\nimport type {\n BrowserCheck,\n BrowserCheckResult,\n BrowserPageState,\n BrowserSnapshot,\n BrowserStep,\n BrowserTarget,\n BrowserViewport,\n} from \"./contract.js\";\n\ninterface BrowserSession {\n readonly browser: Promise<Browser>;\n readonly viewport: BrowserViewport;\n page?: Page;\n queue: Promise<void>;\n closed: boolean;\n checked: boolean;\n errors: string[];\n /** Adressen, deren fehlgeschlagene Anfrage schon gemeldet ist; HTTP-Status, Konsole und Netzwerk melden dieselbe Ursache nur einmal. */\n failedRequests: Set<string>;\n screenshots: string[];\n}\n\nexport interface BrowserPagesOptions {\n launch: (runId: string) => Promise<Browser>;\n timeoutMs: number;\n checkTimeoutMs: number;\n}\n\nconst errorText = (error: unknown): string => error instanceof Error ? error.message : String(error);\nconst endedError = (): Error => new Error(\"Der Browserdienst dieses Executors ist beendet.\");\nconst maxSnapshotLength = 40_000;\nconst ambiguityHint = \"W\u00E4hle mit nth (0-basiert) oder first: true im Ziel einen Treffer, oder pr\u00FCfe die Anzahl mit count in browser_check.\";\n\nconst withAmbiguityHint = (error: unknown): never => {\n if (error instanceof Error && error.message.includes(\"strict mode violation\")) throw new Error(`${error.message}\\n${ambiguityHint}`, { cause: error });\n throw error;\n};\n\nexport const browserLocator = (page: Page, target: BrowserTarget): Locator => {\n const selectors = [target.role, target.label, target.text, target.testId, target.css].filter((value) => value !== undefined);\n if (selectors.length !== 1 || (target.name !== undefined && target.role === undefined)) {\n throw new Error(\"Ein Browserziel braucht genau role (optional name), label, text, testId oder css.\");\n }\n if (target.nth !== undefined && target.first) throw new Error(\"Ein Browserziel verwendet entweder nth oder first, nicht beides.\");\n const root = target.frame ? page.frameLocator(target.frame) : page;\n const base = target.role ? root.getByRole(target.role as Parameters<Page[\"getByRole\"]>[0], { name: target.name, exact: true })\n : target.label ? root.getByLabel(target.label, { exact: true })\n : target.text ? root.getByText(target.text, { exact: true })\n : target.testId ? root.getByTestId(target.testId)\n : root.locator(target.css!);\n return target.first ? base.first() : target.nth !== undefined ? base.nth(target.nth) : base;\n};\n\n/** Je Run ein Browser mit einer Seite auf dieser Maschine; die Aktionen eines Runs laufen der Reihe nach. */\nexport class BrowserPages {\n readonly #options: BrowserPagesOptions;\n readonly #sessions = new Map<string, BrowserSession>();\n #shutDown = false;\n\n constructor(options: BrowserPagesOptions) {\n this.#options = options;\n }\n\n async open(runId: string, url: string, viewport: BrowserViewport, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n if (this.#shutDown) throw endedError();\n const parsed = new URL(url);\n if (![\"http:\", \"https:\"].includes(parsed.protocol)) throw new Error(\"browser_open braucht eine HTTP- oder HTTPS-Adresse.\");\n signal?.throwIfAborted();\n if (!this.#sessions.has(runId)) this.#start(runId, viewport);\n return this.#perform(runId, signal, async (session, page) => {\n this.#resetEvidence(session);\n const response = await page.goto(parsed.href, { waitUntil: \"domcontentloaded\" });\n if (response && !response.ok()) throw new Error(`Browsernavigation fehlgeschlagen: HTTP ${response.status()} (${page.url()}).`);\n return this.#snapshot(session, page);\n });\n }\n\n snapshot(runId: string, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#perform(runId, signal, (session, page) => this.#snapshot(session, page));\n }\n\n viewport(runId: string, viewport: BrowserViewport, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#perform(runId, signal, async (session, page) => {\n await page.setViewportSize(viewport);\n return this.#snapshot(session, page);\n });\n }\n\n click(runId: string, target: BrowserTarget, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#action(runId, target, signal, (locator) => locator.click());\n }\n\n fill(runId: string, target: BrowserTarget, value: string, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#action(runId, target, signal, (locator) => locator.fill(value));\n }\n\n select(runId: string, target: BrowserTarget, label: string, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#action(runId, target, signal, (locator) => locator.selectOption({ label }));\n }\n\n press(runId: string, target: BrowserTarget, key: string, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#action(runId, target, signal, (locator) => locator.press(key));\n }\n\n check(runId: string, input: BrowserCheck, signal?: AbortSignal): Promise<BrowserStep<BrowserCheckResult>> {\n return this.#perform(runId, signal, async (session, page) => {\n session.checked = false;\n if (!input.target && input.text === undefined && input.url === undefined && input.noErrors !== true) {\n throw new Error(\"browser_check braucht mindestens target, text, url oder noErrors: true.\");\n }\n if (input.count !== undefined && (!input.target || input.target.nth !== undefined || input.target.first)) {\n throw new Error(\"count in browser_check braucht ein target ohne nth oder first und z\u00E4hlt dessen sichtbare Treffer.\");\n }\n const timeout = this.#options.checkTimeoutMs;\n const assertions: string[] = [];\n if (input.target && input.count !== undefined) {\n const visible = browserLocator(page, input.target).filter({ visible: true });\n const found = await this.#waitForCount(visible, input.count, timeout);\n if (found !== input.count) throw new Error(`Erwartet ${input.count} sichtbare Treffer, gefunden ${found}.`);\n assertions.push(`${input.count} sichtbare Treffer`);\n } else if (input.target) {\n const locator = browserLocator(page, input.target);\n await locator.waitFor({ state: \"visible\", timeout }).catch(withAmbiguityHint);\n assertions.push(\"Ziel ist sichtbar\");\n if (input.text !== undefined) {\n try { await locator.filter({ hasText: input.text }).waitFor({ state: \"visible\", timeout }); }\n catch (error) { throw new Error(`Erwarteter Text fehlt im Ziel: ${input.text}`, { cause: error }); }\n assertions.push(`Text im Ziel: ${input.text}`);\n }\n } else if (input.text !== undefined) {\n await page.getByText(input.text, { exact: false }).first().waitFor({ state: \"visible\", timeout });\n assertions.push(`Sichtbarer Text: ${input.text}`);\n }\n if (input.url !== undefined) {\n await page.waitForURL(input.url, { timeout });\n assertions.push(`Adresse: ${input.url}`);\n }\n if (input.noErrors !== false) {\n if (session.errors.length > 0) throw new Error(`Browserfehler: ${session.errors.join(\"\\n\")}`);\n assertions.push(\"Keine erfassten Browser- oder Netzwerkfehler seit der Navigation\");\n }\n session.checked = true;\n return { url: page.url(), assertions };\n });\n }\n\n /** Nimmt die Seite als PNG auf und liefert es Base64-kodiert; `id` merkt sich die Seite als aktuelle Aufnahme. */\n screenshot(runId: string, id: string, fullPage: boolean, signal?: AbortSignal): Promise<BrowserStep<string>> {\n return this.#perform(runId, signal, async (session, page) => {\n const image = await page.screenshot({ fullPage, type: \"png\", timeout: this.#options.timeoutMs });\n session.screenshots.push(id);\n return image.toString(\"base64\");\n });\n }\n\n /** Der Stand der Seite, ohne auf laufende Aktionen zu warten; ohne offene Seite `null`. */\n state(runId: string): BrowserPageState | null {\n const session = this.#sessions.get(runId);\n return session && !session.closed && session.page ? this.#stateOf(session, session.page) : null;\n }\n\n async close(runId: string): Promise<void> {\n const session = this.#sessions.get(runId);\n if (!session) return;\n session.closed = true;\n this.#sessions.delete(runId);\n const browser = await session.browser.catch(() => undefined);\n if (browser) await browser.close();\n await session.queue;\n }\n\n /** Schlie\u00DFt jeden Browser; danach startet keiner mehr, weil niemand ihn schlie\u00DFen w\u00FCrde. */\n async shutdown(): Promise<void> {\n this.#shutDown = true;\n const results = await Promise.allSettled([...this.#sessions.keys()].map((runId) => this.close(runId)));\n const failed = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\n if (failed) throw failed.reason;\n }\n\n #start(runId: string, viewport: BrowserViewport): void {\n const session: BrowserSession = {\n browser: this.#launch(runId),\n viewport,\n queue: Promise.resolve(),\n closed: false,\n checked: false,\n errors: [],\n failedRequests: new Set(),\n screenshots: [],\n };\n this.#sessions.set(runId, session);\n void session.browser.catch(() => {\n session.closed = true;\n if (this.#sessions.get(runId) === session) this.#sessions.delete(runId);\n });\n }\n\n async #launch(runId: string): Promise<Browser> {\n return this.#options.launch(runId);\n }\n\n async #waitForCount(locator: Locator, expected: number, timeout: number): Promise<number> {\n const deadline = Date.now() + timeout;\n let found = await locator.count();\n while (found !== expected && Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n found = await locator.count();\n }\n return found;\n }\n\n #resetEvidence(session: BrowserSession): void {\n session.checked = false;\n session.screenshots = [];\n session.errors = [];\n session.failedRequests = new Set();\n }\n\n async #page(session: BrowserSession): Promise<Page> {\n if (session.closed) throw new Error(\"Der Browser wurde beendet.\");\n if (session.page) return session.page;\n const browser = await session.browser;\n if (session.closed) throw new Error(\"Der Browser wurde beendet.\");\n const context = await browser.newContext({ viewport: session.viewport });\n context.setDefaultTimeout(this.#options.timeoutMs);\n context.setDefaultNavigationTimeout(this.#options.timeoutMs);\n const page = await context.newPage();\n const addError = (text: string) => {\n session.errors.push(text.slice(0, 2000));\n if (session.errors.length > 100) session.errors.shift();\n };\n const addRequestError = (url: string, text: string) => {\n if (session.failedRequests.has(url)) return;\n session.failedRequests.add(url);\n addError(text);\n };\n page.on(\"console\", (message) => {\n if (message.type() !== \"error\") return;\n const source = message.text().startsWith(\"Failed to load resource\") ? message.location().url : \"\";\n if (source) addRequestError(source, `Konsole: ${message.text()} (${source})`);\n else addError(`Konsole: ${message.text()}`);\n });\n page.on(\"pageerror\", (error) => addError(`JavaScript: ${error.message}`));\n page.on(\"requestfailed\", (request) => addRequestError(request.url(), `Netzwerk: ${request.method()} ${request.url()} ${request.failure()?.errorText}`));\n page.on(\"response\", (response) => { if (response.status() >= 400) addRequestError(response.url(), `HTTP ${response.status()}: ${response.url()}`); });\n page.on(\"framenavigated\", (frame) => { if (frame === page.mainFrame()) this.#resetEvidence(session); });\n page.on(\"popup\", (popup) => {\n addError(`Die Anwendung hat ein neues Fenster ge\u00F6ffnet: ${popup.url()}. Popups werden nicht bedient.`);\n void popup.close().catch((error) => addError(`Fenster schlie\u00DFen: ${errorText(error)}`));\n });\n session.page = page;\n return page;\n }\n\n #perform<T>(runId: string, signal: AbortSignal | undefined, action: (session: BrowserSession, page: Page) => Promise<T>): Promise<BrowserStep<T>> {\n if (this.#shutDown) return Promise.reject(endedError());\n const session = this.#sessions.get(runId);\n if (!session || session.closed) return Promise.reject(new Error(\"F\u00FCr diesen Run ist kein Browser offen. Zuerst browser_open aufrufen.\"));\n const pending = session.queue.then(async () => {\n signal?.throwIfAborted();\n const abort = () => { void this.close(runId).catch((error) => console.error(\"Browserstopp fehlgeschlagen:\", errorText(error))); };\n signal?.addEventListener(\"abort\", abort, { once: true });\n try {\n const page = await this.#page(session);\n signal?.throwIfAborted();\n const result = await action(session, page);\n signal?.throwIfAborted();\n if (session.closed) throw new Error(\"Der Browser wurde beendet.\");\n return { result, page: this.#stateOf(session, page) };\n } finally {\n signal?.removeEventListener(\"abort\", abort);\n }\n });\n session.queue = pending.then(() => undefined, () => undefined);\n return pending;\n }\n\n #action(runId: string, target: BrowserTarget, signal: AbortSignal | undefined, action: (locator: Locator) => Promise<unknown>): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#perform(runId, signal, async (session, page) => {\n session.checked = false;\n session.screenshots = [];\n await action(browserLocator(page, target)).catch(withAmbiguityHint);\n return this.#snapshot(session, page);\n });\n }\n\n #stateOf(session: BrowserSession, page: Page): BrowserPageState {\n return { url: page.url(), checked: session.checked, errors: [...session.errors], screenshots: [...session.screenshots] };\n }\n\n async #snapshot(session: BrowserSession, page: Page): Promise<BrowserSnapshot> {\n const snapshot = await page.locator(\"body\").ariaSnapshot({ mode: \"ai\", timeout: this.#options.timeoutMs });\n return { url: page.url(), title: await page.title(), snapshot: snapshot.slice(0, maxSnapshotLength),\n truncated: snapshot.length > maxSnapshotLength, errors: [...session.errors] };\n }\n}\n", "import { constants } from \"node:fs\";\nimport { access } from \"node:fs/promises\";\nimport { pathToFileURL } from \"node:url\";\nimport type { Browser } from \"playwright-core\";\nimport type { WorkspaceExecutorMachine } from \"@ragents/workspace-executor\";\nimport { BROWSER_EXECUTABLE_VARIABLE } from \"./contract.js\";\n\ntype Playwright = typeof import(\"playwright-core\");\n\n/** playwright-core liegt in den node_modules des Hosts dieser Maschine und wird erst im Aufruf geladen, nie mit dem Beitrag. */\nexport const hostPlaywright = async (machine: WorkspaceExecutorMachine, hostRoot: string | undefined): Promise<Playwright> => {\n const loaded = await import(pathToFileURL(machine.hostPackageFile(hostRoot, \"playwright-core\")).href) as { default: Playwright };\n return loaded.default;\n};\n\n/** Der Chrome dieser Maschine: der aus ihrer Umgebung, sonst das Chromium, das die Provisionierung f\u00FCr playwright-core holt. */\nexport const browserExecutable = async (playwright: Playwright, environment: NodeJS.ProcessEnv = process.env): Promise<string> => {\n const configured = environment[BROWSER_EXECUTABLE_VARIABLE];\n const candidate = configured ? configured : playwright.chromium.executablePath();\n if (await access(candidate, constants.X_OK).then(() => true, () => false)) return candidate;\n throw new Error((configured\n ? `${BROWSER_EXECUTABLE_VARIABLE} nennt ${configured}; dort gibt es auf diesem Rechner keinen ausf\u00FChrbaren Browser. `\n : `Auf diesem Rechner gibt es keinen ausf\u00FChrbaren Browser: ${BROWSER_EXECUTABLE_VARIABLE} ist nicht gesetzt und Chromium fehlt unter ${candidate}. `)\n + \"Ein Arbeitsplatz holt Chromium mit pnpm provision --workspace, ein Server mit pnpm provision <profil>; \"\n + `${BROWSER_EXECUTABLE_VARIABLE} nennt einen vorhandenen Chrome, auf einem Server in der Profilsektion ragents.browser, `\n + \"auf einem Arbeitsplatz in seiner Umgebung.\");\n};\n\n/** Startet Chrome headless mit der Umgebung dieser Maschine und dem Marker des Runs, damit die Prozessanzeige ihn zuordnet. */\nexport const launchChromium = async (machine: WorkspaceExecutorMachine, hostRoot: string | undefined, runId: string, timeoutMs: number): Promise<Browser> => {\n const playwright = await hostPlaywright(machine, hostRoot);\n return playwright.chromium.launch({\n executablePath: await browserExecutable(playwright),\n headless: true,\n timeout: timeoutMs,\n env: machine.processEnvironment(runId),\n });\n};\n", "import type { Browser } from \"playwright-core\";\nimport type { WorkspaceExecutorMachine, WorkspaceModuleFactory } from \"@ragents/workspace-executor\";\nimport { BROWSER_OPERATIONS, type BrowserCheck, type BrowserTarget, type BrowserViewport } from \"./contract.js\";\nimport { BrowserPages } from \"./pages.js\";\nimport { launchChromium } from \"./playwright.js\";\n\nconst BROWSER_TIMEOUT_MS = 15_000;\n\nexport interface BrowserModuleOptions {\n /** Startet den Browser eines Runs; ohne Angabe Chrome \u00FCber playwright-core aus dem Host dieser Maschine. */\n launch?: (runId: string) => Promise<Browser>;\n timeoutMs?: number;\n checkTimeoutMs?: number;\n}\n\n/** Der Browser eines Runs auf dieser Maschine: Seite, Aktionen, Pr\u00FCfungen und Aufnahmen; Evidenz und Ablage h\u00E4lt der Aufrufer. */\nexport const browserModule = (machine: WorkspaceExecutorMachine, options: BrowserModuleOptions = {}): WorkspaceModuleFactory => (host) => {\n const invalid = (message: string): Error => machine.operationError(\"browser-input-invalid\", message, 400);\n const fieldsOf = (input: unknown): Readonly<Record<string, unknown>> => {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) throw invalid(\"Die Eingabe einer Browseroperation ist ein Objekt\");\n return input as Readonly<Record<string, unknown>>;\n };\n const textOf = (input: unknown, key: string): string => {\n const value = fieldsOf(input)[key];\n if (typeof value !== \"string\") throw invalid(`Die Browseroperation braucht ${key} als Text`);\n return value;\n };\n const targetOf = (input: unknown): BrowserTarget => {\n const value = fieldsOf(input).target;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw invalid(\"Die Browseroperation braucht ein Ziel\");\n return value as BrowserTarget;\n };\n const viewportOf = (input: unknown): BrowserViewport => {\n const { width, height } = fieldsOf(input);\n if (typeof width !== \"number\" || typeof height !== \"number\" || !Number.isInteger(width) || !Number.isInteger(height) || width <= 0 || height <= 0) {\n throw invalid(\"Ein Viewport braucht Breite und H\u00F6he als positive ganze Zahlen\");\n }\n return { width, height };\n };\n const timeoutMs = options.timeoutMs ?? BROWSER_TIMEOUT_MS;\n const pages = new BrowserPages({\n launch: options.launch ?? (async (runId) => launchChromium(machine, (await host.contextFor(runId)).hostRoot, runId, timeoutMs)),\n timeoutMs,\n checkTimeoutMs: options.checkTimeoutMs ?? Math.min(5_000, timeoutMs),\n });\n return {\n operations: {\n [BROWSER_OPERATIONS.open]: ({ runId, input, signal }) =>\n pages.open(runId, textOf(input, \"url\"), viewportOf(fieldsOf(input).viewport), signal),\n [BROWSER_OPERATIONS.snapshot]: ({ runId, signal }) => pages.snapshot(runId, signal),\n [BROWSER_OPERATIONS.viewport]: ({ runId, input, signal }) => pages.viewport(runId, viewportOf(input), signal),\n [BROWSER_OPERATIONS.click]: ({ runId, input, signal }) => pages.click(runId, targetOf(input), signal),\n [BROWSER_OPERATIONS.fill]: ({ runId, input, signal }) => pages.fill(runId, targetOf(input), textOf(input, \"value\"), signal),\n [BROWSER_OPERATIONS.select]: ({ runId, input, signal }) => pages.select(runId, targetOf(input), textOf(input, \"label\"), signal),\n [BROWSER_OPERATIONS.press]: ({ runId, input, signal }) => pages.press(runId, targetOf(input), textOf(input, \"key\"), signal),\n [BROWSER_OPERATIONS.check]: ({ runId, input, signal }) => pages.check(runId, fieldsOf(input) as BrowserCheck, signal),\n [BROWSER_OPERATIONS.screenshot]: ({ runId, input, signal }) =>\n pages.screenshot(runId, textOf(input, \"id\"), fieldsOf(input).fullPage === true, signal),\n [BROWSER_OPERATIONS.state]: async ({ runId }) => pages.state(runId),\n [BROWSER_OPERATIONS.close]: async ({ runId }) => {\n await pages.close(runId);\n return null;\n },\n },\n stopRun: (runId) => pages.close(runId),\n shutdown: () => pages.shutdown(),\n };\n};\n", "import type { WorkspaceExecutorContribution } from \"@ragents/workspace-executor\";\nimport { browserModule } from \"./module.js\";\n\n/** Der Browser l\u00E4uft dort, wo der Arbeitsbereich des Runs liegt: im Executor des Servers oder in dem des Arbeitsplatzes. */\nexport const executor: WorkspaceExecutorContribution = (machine) => ({ modules: [browserModule(machine)] });\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["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 type { Browser, Locator, Page } from \"playwright-core\";\nimport type {\n BrowserCheck,\n BrowserCheckResult,\n BrowserPageState,\n BrowserSnapshot,\n BrowserStep,\n BrowserTarget,\n BrowserViewport,\n} from \"./contract.js\";\n\ninterface BrowserSession {\n readonly browser: Promise<Browser>;\n readonly viewport: BrowserViewport;\n page?: Page;\n queue: Promise<void>;\n closed: boolean;\n checked: boolean;\n errors: string[];\n /** Addresses whose failed request is already reported; HTTP status, console and network report the same cause only once. */\n failedRequests: Set<string>;\n screenshots: string[];\n}\n\nexport interface BrowserPagesOptions {\n launch: (runId: string) => Promise<Browser>;\n timeoutMs: number;\n checkTimeoutMs: number;\n}\n\nconst errorText = (error: unknown): string => error instanceof Error ? error.message : String(error);\nconst endedError = (): Error => new Error(\"The browser service of this executor has ended.\");\nconst maxSnapshotLength = 40_000;\nconst ambiguityHint = \"Pick one match with nth (0-based) or first: true in the target, or check the number with count in browser_check.\";\n\nconst withAmbiguityHint = (error: unknown): never => {\n if (error instanceof Error && error.message.includes(\"strict mode violation\")) throw new Error(`${error.message}\\n${ambiguityHint}`, { cause: error });\n throw error;\n};\n\nexport const browserLocator = (page: Page, target: BrowserTarget): Locator => {\n const selectors = [target.role, target.label, target.text, target.testId, target.css].filter((value) => value !== undefined);\n if (selectors.length !== 1 || (target.name !== undefined && target.role === undefined)) {\n throw new Error(\"A browser target needs exactly one of role (optional name), label, text, testId or css.\");\n }\n if (target.nth !== undefined && target.first) throw new Error(\"A browser target uses either nth or first, not both.\");\n const root = target.frame ? page.frameLocator(target.frame) : page;\n const base = target.role ? root.getByRole(target.role as Parameters<Page[\"getByRole\"]>[0], { name: target.name, exact: true })\n : target.label ? root.getByLabel(target.label, { exact: true })\n : target.text ? root.getByText(target.text, { exact: true })\n : target.testId ? root.getByTestId(target.testId)\n : root.locator(target.css!);\n return target.first ? base.first() : target.nth !== undefined ? base.nth(target.nth) : base;\n};\n\n/** One browser with one page per run on this machine; a run's actions run one after another. */\nexport class BrowserPages {\n readonly #options: BrowserPagesOptions;\n readonly #sessions = new Map<string, BrowserSession>();\n #shutDown = false;\n\n constructor(options: BrowserPagesOptions) {\n this.#options = options;\n }\n\n async open(runId: string, url: string, viewport: BrowserViewport, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n if (this.#shutDown) throw endedError();\n const parsed = new URL(url);\n if (![\"http:\", \"https:\"].includes(parsed.protocol)) throw new Error(\"browser_open needs an HTTP or HTTPS address.\");\n signal?.throwIfAborted();\n if (!this.#sessions.has(runId)) this.#start(runId, viewport);\n return this.#perform(runId, signal, async (session, page) => {\n this.#resetEvidence(session);\n const response = await page.goto(parsed.href, { waitUntil: \"domcontentloaded\" });\n if (response && !response.ok()) throw new Error(`Browser navigation failed: HTTP ${response.status()} (${page.url()}).`);\n return this.#snapshot(session, page);\n });\n }\n\n snapshot(runId: string, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#perform(runId, signal, (session, page) => this.#snapshot(session, page));\n }\n\n viewport(runId: string, viewport: BrowserViewport, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#perform(runId, signal, async (session, page) => {\n await page.setViewportSize(viewport);\n return this.#snapshot(session, page);\n });\n }\n\n click(runId: string, target: BrowserTarget, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#action(runId, target, signal, (locator) => locator.click());\n }\n\n fill(runId: string, target: BrowserTarget, value: string, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#action(runId, target, signal, (locator) => locator.fill(value));\n }\n\n select(runId: string, target: BrowserTarget, label: string, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#action(runId, target, signal, (locator) => locator.selectOption({ label }));\n }\n\n press(runId: string, target: BrowserTarget, key: string, signal?: AbortSignal): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#action(runId, target, signal, (locator) => locator.press(key));\n }\n\n check(runId: string, input: BrowserCheck, signal?: AbortSignal): Promise<BrowserStep<BrowserCheckResult>> {\n return this.#perform(runId, signal, async (session, page) => {\n session.checked = false;\n if (!input.target && input.text === undefined && input.url === undefined && input.noErrors !== true) {\n throw new Error(\"browser_check needs at least target, text, url or noErrors: true.\");\n }\n if (input.count !== undefined && (!input.target || input.target.nth !== undefined || input.target.first)) {\n throw new Error(\"count in browser_check needs a target without nth or first and counts its visible matches.\");\n }\n const timeout = this.#options.checkTimeoutMs;\n const assertions: string[] = [];\n if (input.target && input.count !== undefined) {\n const visible = browserLocator(page, input.target).filter({ visible: true });\n const found = await this.#waitForCount(visible, input.count, timeout);\n if (found !== input.count) throw new Error(`Expected ${input.count} visible matches, found ${found}.`);\n assertions.push(`${input.count} visible matches`);\n } else if (input.target) {\n const locator = browserLocator(page, input.target);\n await locator.waitFor({ state: \"visible\", timeout }).catch(withAmbiguityHint);\n assertions.push(\"Target is visible\");\n if (input.text !== undefined) {\n try { await locator.filter({ hasText: input.text }).waitFor({ state: \"visible\", timeout }); }\n catch (error) { throw new Error(`Expected text is missing in the target: ${input.text}`, { cause: error }); }\n assertions.push(`Text in target: ${input.text}`);\n }\n } else if (input.text !== undefined) {\n await page.getByText(input.text, { exact: false }).first().waitFor({ state: \"visible\", timeout });\n assertions.push(`Visible text: ${input.text}`);\n }\n if (input.url !== undefined) {\n await page.waitForURL(input.url, { timeout });\n assertions.push(`Address: ${input.url}`);\n }\n if (input.noErrors !== false) {\n if (session.errors.length > 0) throw new Error(`Browser errors: ${session.errors.join(\"\\n\")}`);\n assertions.push(\"No captured browser or network errors since the navigation\");\n }\n session.checked = true;\n return { url: page.url(), assertions };\n });\n }\n\n /** Captures the page as PNG and returns it Base64-encoded; the page remembers `id` as the current screenshot. */\n screenshot(runId: string, id: string, fullPage: boolean, signal?: AbortSignal): Promise<BrowserStep<string>> {\n return this.#perform(runId, signal, async (session, page) => {\n const image = await page.screenshot({ fullPage, type: \"png\", timeout: this.#options.timeoutMs });\n session.screenshots.push(id);\n return image.toString(\"base64\");\n });\n }\n\n /** The page state without waiting for running actions; `null` without an open page. */\n state(runId: string): BrowserPageState | null {\n const session = this.#sessions.get(runId);\n return session && !session.closed && session.page ? this.#stateOf(session, session.page) : null;\n }\n\n async close(runId: string): Promise<void> {\n const session = this.#sessions.get(runId);\n if (!session) return;\n session.closed = true;\n this.#sessions.delete(runId);\n const browser = await session.browser.catch(() => undefined);\n if (browser) await browser.close();\n await session.queue;\n }\n\n /** Closes every browser; afterwards none starts anymore because nobody would close it. */\n async shutdown(): Promise<void> {\n this.#shutDown = true;\n const results = await Promise.allSettled([...this.#sessions.keys()].map((runId) => this.close(runId)));\n const failed = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\n if (failed) throw failed.reason;\n }\n\n #start(runId: string, viewport: BrowserViewport): void {\n const session: BrowserSession = {\n browser: this.#launch(runId),\n viewport,\n queue: Promise.resolve(),\n closed: false,\n checked: false,\n errors: [],\n failedRequests: new Set(),\n screenshots: [],\n };\n this.#sessions.set(runId, session);\n void session.browser.catch(() => {\n session.closed = true;\n if (this.#sessions.get(runId) === session) this.#sessions.delete(runId);\n });\n }\n\n async #launch(runId: string): Promise<Browser> {\n return this.#options.launch(runId);\n }\n\n async #waitForCount(locator: Locator, expected: number, timeout: number): Promise<number> {\n const deadline = Date.now() + timeout;\n let found = await locator.count();\n while (found !== expected && Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n found = await locator.count();\n }\n return found;\n }\n\n #resetEvidence(session: BrowserSession): void {\n session.checked = false;\n session.screenshots = [];\n session.errors = [];\n session.failedRequests = new Set();\n }\n\n async #page(session: BrowserSession): Promise<Page> {\n if (session.closed) throw new Error(\"The browser was closed.\");\n if (session.page) return session.page;\n const browser = await session.browser;\n if (session.closed) throw new Error(\"The browser was closed.\");\n const context = await browser.newContext({ viewport: session.viewport });\n context.setDefaultTimeout(this.#options.timeoutMs);\n context.setDefaultNavigationTimeout(this.#options.timeoutMs);\n const page = await context.newPage();\n const addError = (text: string) => {\n session.errors.push(text.slice(0, 2000));\n if (session.errors.length > 100) session.errors.shift();\n };\n const addRequestError = (url: string, text: string) => {\n if (session.failedRequests.has(url)) return;\n session.failedRequests.add(url);\n addError(text);\n };\n page.on(\"console\", (message) => {\n if (message.type() !== \"error\") return;\n const source = message.text().startsWith(\"Failed to load resource\") ? message.location().url : \"\";\n if (source) addRequestError(source, `Console: ${message.text()} (${source})`);\n else addError(`Console: ${message.text()}`);\n });\n page.on(\"pageerror\", (error) => addError(`JavaScript: ${error.message}`));\n page.on(\"requestfailed\", (request) => addRequestError(request.url(), `Network: ${request.method()} ${request.url()} ${request.failure()?.errorText}`));\n page.on(\"response\", (response) => { if (response.status() >= 400) addRequestError(response.url(), `HTTP ${response.status()}: ${response.url()}`); });\n page.on(\"framenavigated\", (frame) => { if (frame === page.mainFrame()) this.#resetEvidence(session); });\n page.on(\"popup\", (popup) => {\n addError(`The application opened a new window: ${popup.url()}. Popups are not operated.`);\n void popup.close().catch((error) => addError(`Closing window: ${errorText(error)}`));\n });\n session.page = page;\n return page;\n }\n\n #perform<T>(runId: string, signal: AbortSignal | undefined, action: (session: BrowserSession, page: Page) => Promise<T>): Promise<BrowserStep<T>> {\n if (this.#shutDown) return Promise.reject(endedError());\n const session = this.#sessions.get(runId);\n if (!session || session.closed) return Promise.reject(new Error(\"No browser is open for this run. Call browser_open first.\"));\n const pending = session.queue.then(async () => {\n signal?.throwIfAborted();\n const abort = () => { void this.close(runId).catch((error) => console.error(\"Browser stop failed:\", errorText(error))); };\n signal?.addEventListener(\"abort\", abort, { once: true });\n try {\n const page = await this.#page(session);\n signal?.throwIfAborted();\n const result = await action(session, page);\n signal?.throwIfAborted();\n if (session.closed) throw new Error(\"The browser was closed.\");\n return { result, page: this.#stateOf(session, page) };\n } finally {\n signal?.removeEventListener(\"abort\", abort);\n }\n });\n session.queue = pending.then(() => undefined, () => undefined);\n return pending;\n }\n\n #action(runId: string, target: BrowserTarget, signal: AbortSignal | undefined, action: (locator: Locator) => Promise<unknown>): Promise<BrowserStep<BrowserSnapshot>> {\n return this.#perform(runId, signal, async (session, page) => {\n session.checked = false;\n session.screenshots = [];\n await action(browserLocator(page, target)).catch(withAmbiguityHint);\n return this.#snapshot(session, page);\n });\n }\n\n #stateOf(session: BrowserSession, page: Page): BrowserPageState {\n return { url: page.url(), checked: session.checked, errors: [...session.errors], screenshots: [...session.screenshots] };\n }\n\n async #snapshot(session: BrowserSession, page: Page): Promise<BrowserSnapshot> {\n const snapshot = await page.locator(\"body\").ariaSnapshot({ mode: \"ai\", timeout: this.#options.timeoutMs });\n return { url: page.url(), title: await page.title(), snapshot: snapshot.slice(0, maxSnapshotLength),\n truncated: snapshot.length > maxSnapshotLength, errors: [...session.errors] };\n }\n}\n", "import { constants } from \"node:fs\";\nimport { access } from \"node:fs/promises\";\nimport { pathToFileURL } from \"node:url\";\nimport type { Browser } from \"playwright-core\";\nimport type { WorkspaceExecutorMachine } from \"@ragents/workspace-executor\";\nimport { BROWSER_EXECUTABLE_VARIABLE } from \"./contract.js\";\n\ntype Playwright = typeof import(\"playwright-core\");\n\n/** playwright-core lives in the node_modules of this machine's host and is loaded only on call, never with the contribution. */\nexport const hostPlaywright = async (machine: WorkspaceExecutorMachine, hostRoot: string | undefined): Promise<Playwright> => {\n const loaded = await import(pathToFileURL(machine.hostPackageFile(hostRoot, \"playwright-core\")).href) as { default: Playwright };\n return loaded.default;\n};\n\n/** This machine's Chrome: the one from its environment, otherwise the Chromium that provisioning fetches for playwright-core. */\nexport const browserExecutable = async (playwright: Playwright, environment: NodeJS.ProcessEnv = process.env): Promise<string> => {\n const configured = environment[BROWSER_EXECUTABLE_VARIABLE];\n const candidate = configured ? configured : playwright.chromium.executablePath();\n if (await access(candidate, constants.X_OK).then(() => true, () => false)) return candidate;\n throw new Error((configured\n ? `${BROWSER_EXECUTABLE_VARIABLE} names ${configured}; there is no executable browser there on this machine. `\n : `There is no executable browser on this machine: ${BROWSER_EXECUTABLE_VARIABLE} is not set and Chromium is missing at ${candidate}. `)\n + \"A workspace fetches Chromium with pnpm provision --workspace, a server with pnpm provision <profile>; \"\n + `${BROWSER_EXECUTABLE_VARIABLE} names an existing Chrome, on a server in the profile section ragents.browser, `\n + \"on a workspace in its environment.\");\n};\n\n/** Starts Chrome headless with this machine's environment and the run's marker so the process view can attribute it. */\nexport const launchChromium = async (machine: WorkspaceExecutorMachine, hostRoot: string | undefined, runId: string, timeoutMs: number): Promise<Browser> => {\n const playwright = await hostPlaywright(machine, hostRoot);\n return playwright.chromium.launch({\n executablePath: await browserExecutable(playwright),\n headless: true,\n timeout: timeoutMs,\n env: machine.processEnvironment(runId),\n });\n};\n", "import type { Browser } from \"playwright-core\";\nimport type { WorkspaceExecutorMachine, WorkspaceModuleFactory } from \"@ragents/workspace-executor\";\nimport { BROWSER_OPERATIONS, type BrowserCheck, type BrowserTarget, type BrowserViewport } from \"./contract.js\";\nimport { BrowserPages } from \"./pages.js\";\nimport { launchChromium } from \"./playwright.js\";\n\nconst BROWSER_TIMEOUT_MS = 15_000;\n\nexport interface BrowserModuleOptions {\n /** Starts a run's browser; if omitted, Chrome via playwright-core from this machine's host. */\n launch?: (runId: string) => Promise<Browser>;\n timeoutMs?: number;\n checkTimeoutMs?: number;\n}\n\n/** A run's browser on this machine: page, actions, checks and screenshots; the caller holds evidence and storage. */\nexport const browserModule = (machine: WorkspaceExecutorMachine, options: BrowserModuleOptions = {}): WorkspaceModuleFactory => (host) => {\n const invalid = (message: string): Error => machine.operationError(\"browser-input-invalid\", message, 400);\n const fieldsOf = (input: unknown): Readonly<Record<string, unknown>> => {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) throw invalid(\"The input of a browser operation is an object\");\n return input as Readonly<Record<string, unknown>>;\n };\n const textOf = (input: unknown, key: string): string => {\n const value = fieldsOf(input)[key];\n if (typeof value !== \"string\") throw invalid(`The browser operation needs ${key} as text`);\n return value;\n };\n const targetOf = (input: unknown): BrowserTarget => {\n const value = fieldsOf(input).target;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw invalid(\"The browser operation needs a target\");\n return value as BrowserTarget;\n };\n const viewportOf = (input: unknown): BrowserViewport => {\n const { width, height } = fieldsOf(input);\n if (typeof width !== \"number\" || typeof height !== \"number\" || !Number.isInteger(width) || !Number.isInteger(height) || width <= 0 || height <= 0) {\n throw invalid(\"A viewport needs width and height as positive integers\");\n }\n return { width, height };\n };\n const timeoutMs = options.timeoutMs ?? BROWSER_TIMEOUT_MS;\n const pages = new BrowserPages({\n launch: options.launch ?? (async (runId) => launchChromium(machine, (await host.contextFor(runId)).hostRoot, runId, timeoutMs)),\n timeoutMs,\n checkTimeoutMs: options.checkTimeoutMs ?? Math.min(5_000, timeoutMs),\n });\n return {\n operations: {\n [BROWSER_OPERATIONS.open]: ({ runId, input, signal }) =>\n pages.open(runId, textOf(input, \"url\"), viewportOf(fieldsOf(input).viewport), signal),\n [BROWSER_OPERATIONS.snapshot]: ({ runId, signal }) => pages.snapshot(runId, signal),\n [BROWSER_OPERATIONS.viewport]: ({ runId, input, signal }) => pages.viewport(runId, viewportOf(input), signal),\n [BROWSER_OPERATIONS.click]: ({ runId, input, signal }) => pages.click(runId, targetOf(input), signal),\n [BROWSER_OPERATIONS.fill]: ({ runId, input, signal }) => pages.fill(runId, targetOf(input), textOf(input, \"value\"), signal),\n [BROWSER_OPERATIONS.select]: ({ runId, input, signal }) => pages.select(runId, targetOf(input), textOf(input, \"label\"), signal),\n [BROWSER_OPERATIONS.press]: ({ runId, input, signal }) => pages.press(runId, targetOf(input), textOf(input, \"key\"), signal),\n [BROWSER_OPERATIONS.check]: ({ runId, input, signal }) => pages.check(runId, fieldsOf(input) as BrowserCheck, signal),\n [BROWSER_OPERATIONS.screenshot]: ({ runId, input, signal }) =>\n pages.screenshot(runId, textOf(input, \"id\"), fieldsOf(input).fullPage === true, signal),\n [BROWSER_OPERATIONS.state]: async ({ runId }) => pages.state(runId),\n [BROWSER_OPERATIONS.close]: async ({ runId }) => {\n await pages.close(runId);\n return null;\n },\n },\n stopRun: (runId) => pages.close(runId),\n shutdown: () => pages.shutdown(),\n };\n};\n", "import type { WorkspaceExecutorContribution } from \"@ragents/workspace-executor\";\nimport { browserModule } from \"./module.js\";\n\n/** The browser runs where the run's workspace lives: in the server's executor or in the workspace's. */\nexport const executor: WorkspaceExecutorContribution = (machine) => ({ modules: [browserModule(machine)] });\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -31,8 +31,8 @@
31
31
  },
32
32
  "web": {}
33
33
  },
34
- "stand": "7da41ec4995b51a143b3e7d7c32f231db7b4ac353fe01df9bd0f02fb7b2c2eaf",
35
- "sourceStand": "956dfae6e6397e718d0a726b60efea5b798a07551af23190d3f70963e215d454",
34
+ "stand": "333c6a9b57576a4ab95556e201da67ed864acdf02787ce5edbd653e7beba6020",
35
+ "sourceStand": "f898635fb2a9873568fe23da263a7794339e9e0bf990b485d32b4efb555454e1",
36
36
  "server": "server/index.js",
37
37
  "executor": "executor/index.mjs",
38
38
  "exports": {
@@ -8,4 +8,4 @@ var browserRuntimeToken = serviceToken("ragents.browser.runtime");
8
8
  export {
9
9
  browserRuntimeToken
10
10
  };
11
- //# sourceMappingURL=chunk-CWLX4VA5.js.map
11
+ //# sourceMappingURL=chunk-PYEISBNE.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../plugins/ragents.browser/server/contract.ts"],
4
- "sourcesContent": ["import { serviceToken } from \"@ragents/engine\";\nimport type { BrowserSnapshot } from \"../executor/contract.js\";\n\nexport type { BrowserSnapshot, BrowserTarget } from \"../executor/contract.js\";\n\nexport interface BrowserEvidence {\n checkedAt?: string;\n url?: string;\n screenshots: { name: string; url: string }[];\n currentScreenshots: { name: string; url: string }[];\n errors: string[];\n}\n\n/** Wer eine Operation an der Seite ausl\u00F6st: bei einem Werkzeugaufruf dessen Kennung, dazu der Abbruch. */\nexport interface BrowserCallOptions {\n signal?: AbortSignal;\n toolCallId?: string;\n}\n\nexport interface BrowserRuntime {\n open: (runId: string, url: string, options?: BrowserCallOptions) => Promise<BrowserSnapshot>;\n evidence: (runId: string) => BrowserEvidence;\n}\n\nexport const browserRuntimeToken = serviceToken<BrowserRuntime>(\"ragents.browser.runtime\");\n"],
4
+ "sourcesContent": ["import { serviceToken } from \"@ragents/engine\";\nimport type { BrowserSnapshot } from \"../executor/contract.js\";\n\nexport type { BrowserSnapshot, BrowserTarget } from \"../executor/contract.js\";\n\nexport interface BrowserEvidence {\n checkedAt?: string;\n url?: string;\n screenshots: { name: string; url: string }[];\n currentScreenshots: { name: string; url: string }[];\n errors: string[];\n}\n\n/** Who triggers an operation on the page: for a tool call its id, plus the abort signal. */\nexport interface BrowserCallOptions {\n signal?: AbortSignal;\n toolCallId?: string;\n}\n\nexport interface BrowserRuntime {\n open: (runId: string, url: string, options?: BrowserCallOptions) => Promise<BrowserSnapshot>;\n evidence: (runId: string) => BrowserEvidence;\n}\n\nexport const browserRuntimeToken = serviceToken<BrowserRuntime>(\"ragents.browser.runtime\");\n"],
5
5
  "mappings": ";;;;AAAA,SAAS,oBAAoB;AAwBtB,IAAM,sBAAsB,aAA6B,yBAAyB;",
6
6
  "names": []
7
7
  }
@@ -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
  export {
7
7
  browserRuntimeToken
8
8
  };