@schlenkr/ragents 0.1.4 → 0.1.6

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 (1052) hide show
  1. package/README.md +19 -11
  2. package/apps/server/package.json +8 -6
  3. package/apps/server/src/access-projection.ts +3 -3
  4. package/apps/server/src/access-service.ts +19 -8
  5. package/apps/server/src/access-session.ts +6 -2
  6. package/apps/server/src/api/contracts.ts +19 -18
  7. package/apps/server/src/api/core-methods.ts +45 -26
  8. package/apps/server/src/api/delivery.ts +4 -4
  9. package/apps/server/src/api/reference.ts +1 -1
  10. package/apps/server/src/api/rights.ts +86 -7
  11. package/apps/server/src/chat-context.ts +1 -1
  12. package/apps/server/src/chat-handler.ts +14 -7
  13. package/apps/server/src/config-file.ts +25 -6
  14. package/apps/server/src/config.ts +4 -4
  15. package/apps/server/src/data-directory.ts +1 -1
  16. package/apps/server/src/folder-install.ts +115 -0
  17. package/apps/server/src/host-api.json +1256 -0
  18. package/apps/server/src/host-api.ts +190 -0
  19. package/apps/server/src/host-resolution-hooks.mjs +50 -1
  20. package/apps/server/src/host-resolution.ts +26 -1
  21. package/apps/server/src/host-version.ts +41 -0
  22. package/apps/server/src/host-web.ts +59 -0
  23. package/apps/server/src/layout.ts +1 -1
  24. package/apps/server/src/main.ts +3 -2
  25. package/apps/server/src/missing-environment.ts +47 -0
  26. package/apps/server/src/parent-watch.ts +37 -0
  27. package/apps/server/src/plugin-build/build.ts +650 -0
  28. package/apps/server/src/plugin-build/host-api-names.ts +185 -0
  29. package/apps/server/src/plugin-build/plugin-description.ts +118 -0
  30. package/apps/server/src/plugin-build/typecheck.ts +66 -0
  31. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/app-project.ts +16 -15
  32. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/client-compiler.ts +4 -4
  33. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/client-contracts.ts +4 -4
  34. package/apps/server/src/plugin-support/actor-programs/client-runtime.ts +27 -0
  35. package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/contract.ts +3 -3
  36. package/apps/server/src/plugin-support/actor-programs/service.ts +1 -1
  37. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/tailwind.ts +2 -3
  38. package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/workflow/index.ts +48 -48
  39. package/apps/server/src/plugin-support/agent-tool.ts +10 -5
  40. package/apps/server/src/plugin-support/http.ts +1 -1
  41. package/apps/server/src/plugin-support/language-server/contract.ts +37 -6
  42. package/apps/server/src/plugin-support/language-server/plugin.ts +18 -8
  43. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +32 -7
  44. package/apps/server/src/plugin-support/language-server/tools.ts +59 -15
  45. package/apps/server/src/plugin-support/model-aliases.ts +77 -0
  46. package/apps/server/src/plugin-support/model-choice.ts +17 -7
  47. package/apps/server/src/plugin-support/model-completion.ts +58 -0
  48. package/apps/server/src/plugin-support/model-upstreams.ts +2 -2
  49. package/apps/server/src/plugin-support/native-typescript-executor.ts +10 -7
  50. package/apps/server/src/plugin-support/plugin-config.ts +1 -1
  51. package/apps/server/src/plugin-support/plugin-folder.ts +4 -1
  52. package/apps/server/src/plugin-support/plugin-module.ts +1 -1
  53. package/apps/server/src/plugin-support/plugins-root.ts +6 -10
  54. package/apps/server/src/plugin-support/process-sandbox.ts +312 -0
  55. package/apps/server/src/plugin-support/product-model-settings-contract.ts +14 -5
  56. package/apps/server/src/plugin-support/product-model-settings.ts +10 -9
  57. package/{plugins/ragents.product/server/relay.ts → apps/server/src/plugin-support/product-relay.ts} +2 -2
  58. package/apps/server/src/plugin-support/product-start-options.ts +8 -3
  59. package/apps/server/src/plugin-support/prompt.ts +1 -1
  60. package/apps/server/src/plugin-support/provision.ts +6 -0
  61. package/apps/server/src/plugin-support/run-scripts.ts +16 -2
  62. package/apps/server/src/plugin-support/skills.ts +32 -16
  63. package/apps/server/src/plugin-support/start-entries-contract.ts +12 -3
  64. package/apps/server/src/plugin-support/start-options-contract.ts +5 -1
  65. package/apps/server/src/plugin-support/thinking-level.ts +6 -1
  66. package/apps/server/src/plugin-support/tool-availability.ts +1 -7
  67. package/apps/server/src/plugin-support/workspace-ownership.ts +12 -6
  68. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +184 -37
  69. package/apps/server/src/profile/bundle-manifest.ts +183 -0
  70. package/apps/server/src/profile/compose.ts +19 -10
  71. package/apps/server/src/profile/plugin-discovery.ts +98 -46
  72. package/apps/server/src/profile/provisioning.ts +30 -26
  73. package/apps/server/src/profile-target.ts +3 -0
  74. package/apps/server/src/provider.ts +182 -99
  75. package/apps/server/src/ragents/actor-chat-history.ts +23 -22
  76. package/apps/server/src/ragents/chat-projection.ts +25 -14
  77. package/apps/server/src/ragents/chat-text-positions.ts +4 -4
  78. package/apps/server/src/ragents/coordinator.ts +27 -1
  79. package/apps/server/src/ragents/document-store.ts +1 -1
  80. package/apps/server/src/ragents/engine.ts +69 -36
  81. package/apps/server/src/ragents/global-chat.ts +26 -13
  82. package/apps/server/src/ragents/host-services.ts +15 -6
  83. package/apps/server/src/ragents/journal-chat-events.ts +31 -15
  84. package/apps/server/src/ragents/product-runtime.ts +1 -1
  85. package/apps/server/src/ragents/run-owner.ts +17 -0
  86. package/apps/server/src/ragents/runtime-bridge.ts +1 -1
  87. package/apps/server/src/ragents/session.ts +181 -82
  88. package/apps/server/src/ragents/start-option-state.ts +1 -1
  89. package/apps/server/src/ragents/typescript-tools.ts +35 -27
  90. package/apps/server/src/ragents/workspace-runtime.ts +74 -8
  91. package/apps/server/src/rpc/dispatcher.ts +17 -8
  92. package/apps/server/src/rpc/http-transport.ts +1 -3
  93. package/apps/server/src/rpc/stdio-transport.ts +1 -1
  94. package/apps/server/src/run-preparation-contract.ts +1 -1
  95. package/apps/server/src/run-preparation-input.ts +1 -1
  96. package/apps/server/src/run-preparation.ts +13 -20
  97. package/apps/server/src/run-transfer.ts +2 -2
  98. package/apps/server/src/server.ts +112 -33
  99. package/apps/server/src/settings.ts +7 -8
  100. package/apps/server/src/title-compactor.ts +5 -8
  101. package/apps/server/src/title-settings.ts +3 -3
  102. package/apps/server/src/web-bundles.ts +79 -0
  103. package/apps/server/src/web-stylesheet.ts +85 -0
  104. package/apps/server/tsconfig.json +4 -4
  105. package/apps/server/tsconfig.plugin.json +58 -0
  106. package/apps/web/dist/assets/highlighted-body-KPVGNVTW-B9qYBARS.js +1 -0
  107. package/apps/web/dist/assets/main-BCjvD2Hh.js +6 -0
  108. package/apps/web/dist/assets/mermaid-HWGCJPDP-BPn4aV2r.css +1 -0
  109. package/apps/web/dist/assets/mermaid-HWGCJPDP-CvYYFK_n.js +478 -0
  110. package/apps/web/dist/assets/runPanel-CG7kRMJh.js +21 -0
  111. package/apps/web/dist/help/guide-access.html +199 -0
  112. package/apps/web/dist/help/guide-access.md +84 -0
  113. package/apps/web/dist/help/guide-clients.html +421 -0
  114. package/apps/web/dist/help/guide-clients.md +336 -0
  115. package/apps/web/dist/help/guide-distributed.html +320 -0
  116. package/apps/web/dist/help/guide-distributed.md +225 -0
  117. package/apps/web/dist/help/guide-functions.html +231 -0
  118. package/apps/web/dist/help/guide-functions.md +127 -0
  119. package/apps/web/dist/help/guide-getting-started.html +230 -0
  120. package/apps/web/dist/help/guide-getting-started.md +123 -0
  121. package/apps/web/dist/help/guide-ideas.html +183 -0
  122. package/apps/web/dist/help/guide-ideas.md +71 -0
  123. package/apps/web/dist/help/guide-plugins.html +450 -0
  124. package/apps/web/dist/help/guide-plugins.md +341 -0
  125. package/apps/web/dist/help/guide-programs.html +359 -0
  126. package/apps/web/dist/help/guide-programs.md +271 -0
  127. package/apps/web/dist/help/guide-runtime.html +338 -0
  128. package/apps/web/dist/help/guide-runtime.md +225 -0
  129. package/apps/web/dist/help/guide.html +133 -0
  130. package/apps/web/dist/help/guide.md +13 -0
  131. package/apps/web/dist/help/homepage-bullets.js +12 -0
  132. package/apps/web/dist/help/homepage-distributed.js +261 -0
  133. package/apps/web/dist/help/homepage-plugins.js +30 -0
  134. package/apps/web/dist/help/homepage-scenes.js +368 -0
  135. package/apps/web/dist/help/homepage-stickers.js +69 -0
  136. package/apps/web/dist/help/homepage-story-nav.js +11 -0
  137. package/apps/web/dist/help/homepage-subnav.js +61 -0
  138. package/apps/web/dist/help/homepage.css +833 -0
  139. package/apps/web/dist/help/index.html +1167 -0
  140. package/apps/web/dist/help/mini-app.css +7056 -0
  141. package/apps/web/dist/help/mini-app.html +15 -0
  142. package/apps/web/dist/help/mini-app.js +131 -0
  143. package/apps/web/dist/help/screenshots/release-checklist-vscode.png +0 -0
  144. package/apps/web/dist/help/screenshots/release-checklist-web.png +0 -0
  145. package/apps/web/dist/help/scroll-vendor.js +73 -0
  146. package/apps/web/dist/help/site.css +63 -0
  147. package/apps/web/dist/help/site.js +103 -0
  148. package/apps/web/dist/host-web.json +143 -0
  149. package/apps/web/dist/index.html +15 -0
  150. package/apps/web/dist/run-panel.html +15 -0
  151. package/apps/web/package.json +2 -2
  152. package/apps/web/src/App.tsx +8 -6
  153. package/apps/web/src/Overview.tsx +5 -5
  154. package/apps/web/src/PluginActivation.ts +25 -5
  155. package/apps/web/src/PluginChat.tsx +163 -129
  156. package/apps/web/src/PluginFailureNotice.tsx +15 -0
  157. package/apps/web/src/PluginRegistry.tsx +106 -68
  158. package/apps/web/src/RunPreparationChat.tsx +40 -28
  159. package/apps/web/src/RunStore.ts +2 -2
  160. package/apps/web/src/SettingsModal.tsx +37 -37
  161. package/apps/web/src/StartOptions.tsx +81 -26
  162. package/apps/web/src/StartSelection.tsx +111 -0
  163. package/apps/web/src/StartTiles.tsx +73 -0
  164. package/apps/web/src/{CanvasShortcuts.tsx → SurfaceShortcuts.tsx} +2 -2
  165. package/apps/web/src/ThemeSettings.tsx +1 -1
  166. package/apps/web/src/WorkspacePanel.tsx +4 -4
  167. package/apps/web/src/access-session.ts +4 -1
  168. package/{plugins/ragents.orchestration/web → apps/web/src}/actor-conversation.ts +3 -3
  169. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/DataTable.tsx +9 -9
  170. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FilePicker.tsx +4 -4
  171. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FlowDiagram.tsx +16 -14
  172. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FlowDiagramRenderer.tsx +3 -3
  173. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Form.tsx +12 -12
  174. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Layout.tsx +1 -1
  175. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/MessageList.tsx +5 -5
  176. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Viewers.tsx +8 -7
  177. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/WorkflowDiagram.tsx +1 -1
  178. package/apps/web/src/actor-programs/client-ui/chat-contracts.d.ts +64 -0
  179. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/contracts.d.ts +2 -2
  180. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/file-selection.ts +5 -5
  181. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/index.tsx +22 -16
  182. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/layout-contracts.d.ts +1 -1
  183. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/message-list-contracts.d.ts +2 -2
  184. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/workflow-diagram-contracts.d.ts +1 -1
  185. package/apps/web/src/api.ts +43 -22
  186. package/apps/web/src/chat/QuasselHost.tsx +12 -0
  187. package/apps/web/src/chat/StoppedActorNotice.tsx +39 -0
  188. package/apps/web/src/chat/chat-target.ts +14 -5
  189. package/apps/web/src/chat/requests.ts +13 -5
  190. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  191. package/apps/web/src/chat/useChat.ts +8 -7
  192. package/apps/web/src/chat/user-location.ts +1 -1
  193. package/apps/web/src/chat-view-settings.tsx +49 -0
  194. package/apps/web/src/host-modules.ts +90 -0
  195. package/apps/web/src/language-server/api.ts +24 -0
  196. package/{plugins/ragents.lsp-roslyn/web → apps/web/src/language-server}/language-server-plugin.tsx +133 -6
  197. package/apps/web/src/main.tsx +4 -2
  198. package/apps/web/src/offered-machines.ts +11 -0
  199. package/apps/web/src/panel/ConnectionsPage.tsx +117 -0
  200. package/apps/web/src/panel/LoginForm.tsx +9 -9
  201. package/apps/web/src/panel/PanelDialogs.tsx +44 -27
  202. package/apps/web/src/panel/PanelHeader.tsx +11 -0
  203. package/apps/web/src/panel/PanelPage.tsx +8 -5
  204. package/apps/web/src/panel/RunLine.tsx +48 -0
  205. package/apps/web/src/panel/RunsPage.tsx +84 -0
  206. package/apps/web/src/panel/StartPage.tsx +163 -0
  207. package/apps/web/src/panel/connection-state.ts +40 -0
  208. package/apps/web/src/panel/contract.ts +64 -21
  209. package/apps/web/src/panel/page-props.ts +6 -0
  210. package/apps/web/src/plugin-bootstrap.ts +60 -31
  211. package/{plugins/ragents.product/web → apps/web/src/product}/ModelControl.tsx +3 -3
  212. package/{plugins/ragents.product/web → apps/web/src/product}/ProductModelSettings.tsx +7 -7
  213. package/{plugins/ragents.product/web → apps/web/src/product}/SystemPromptControl.tsx +3 -3
  214. package/{plugins/ragents.product/web → apps/web/src/product}/model-settings.ts +3 -3
  215. package/{plugins/ragents.product/web → apps/web/src/product}/start-options.tsx +2 -2
  216. package/apps/web/src/rpc/client.ts +28 -6
  217. package/apps/web/src/run-panel/RunPanelApp.tsx +334 -0
  218. package/apps/web/src/{column/ColumnRunHeader.tsx → run-panel/RunPanelHeader.tsx} +2 -2
  219. package/apps/web/src/{column/ColumnMenu.tsx → run-panel/RunPanelMenu.tsx} +4 -4
  220. package/apps/web/src/run-panel/RunPanelRail.tsx +38 -0
  221. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +55 -0
  222. package/apps/web/src/{column → run-panel}/clipboard.ts +21 -10
  223. package/apps/web/src/run-panel/host-contract.ts +123 -0
  224. package/apps/web/src/{column → run-panel}/host.ts +31 -23
  225. package/apps/web/src/run-panel/input-bridge.ts +75 -0
  226. package/apps/web/src/run-panel/keyboard.ts +53 -0
  227. package/apps/web/src/run-panel/run-panel-location.ts +35 -0
  228. package/apps/web/src/{column → run-panel}/use-session-list.ts +3 -3
  229. package/apps/web/src/run-panel/workspace-state.ts +43 -0
  230. package/apps/web/src/{column.tsx → run-panel.tsx} +20 -13
  231. package/apps/web/src/run-preparation.ts +1 -1
  232. package/{plugins/ragents.orchestration/web → apps/web/src}/run-view.ts +25 -7
  233. package/apps/web/src/settings-contributions.ts +16 -18
  234. package/apps/web/src/title-model-settings.ts +1 -1
  235. package/apps/web/src/toolLine.ts +1 -1
  236. package/apps/web/src/ui/ListDetail.tsx +1 -1
  237. package/apps/web/src/ui/dialog.tsx +5 -5
  238. package/apps/web/src/ui/frame.css +1 -0
  239. package/apps/web/src/ui/index.ts +5 -0
  240. package/apps/web/src/ui/popover.tsx +2 -2
  241. package/apps/web/src/ui/quassel.css +41 -0
  242. package/apps/web/src/ui/relative-time.ts +36 -0
  243. package/apps/web/src/ui/startup-notice.tsx +22 -0
  244. package/apps/web/src/ui/state-icon.tsx +60 -0
  245. package/apps/web/src/ui/state-vocabulary.ts +31 -0
  246. package/apps/web/src/ui/stop-button.tsx +22 -0
  247. package/apps/web/src/ui/tailwind.css +2 -3
  248. package/apps/web/src/ui/theme.css +19 -19
  249. package/apps/web/tsconfig.json +4 -5
  250. package/apps/web/tsconfig.plugin.json +44 -0
  251. package/bundles/ragents.activity/ragents-bundle.json +38 -0
  252. package/bundles/ragents.activity/server/index.js +14 -0
  253. package/bundles/ragents.activity/server/index.js.map +7 -0
  254. package/bundles/ragents.activity/web/classes.json +1 -0
  255. package/bundles/ragents.activity/web/index.js +2 -0
  256. package/bundles/ragents.activity/web/index.js.map +7 -0
  257. package/bundles/ragents.actor-programs/prompt.hbs +80 -0
  258. package/bundles/ragents.actor-programs/ragents-bundle.json +214 -0
  259. package/bundles/ragents.actor-programs/server/index.js +2071 -0
  260. package/bundles/ragents.actor-programs/server/index.js.map +7 -0
  261. package/bundles/ragents.actor-programs/summary.hbs +17 -0
  262. package/bundles/ragents.actor-programs/web/classes.json +1 -0
  263. package/bundles/ragents.actor-programs/web/index.js +27 -0
  264. package/bundles/ragents.actor-programs/web/index.js.map +7 -0
  265. package/bundles/ragents.ask/ask.hbs +4 -0
  266. package/bundles/ragents.ask/ragents-bundle.json +97 -0
  267. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js +13 -0
  268. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +7 -0
  269. package/bundles/ragents.ask/server/exports/server/contract.js +11 -0
  270. package/bundles/ragents.ask/server/exports/server/contract.js.map +7 -0
  271. package/bundles/ragents.ask/server/index.js +279 -0
  272. package/bundles/ragents.ask/server/index.js.map +7 -0
  273. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +2 -0
  274. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +7 -0
  275. package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js +2 -0
  276. package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js.map +7 -0
  277. package/bundles/ragents.ask/web/chunks/chunk-V7W3QDVS.js +25 -0
  278. package/bundles/ragents.ask/web/chunks/chunk-V7W3QDVS.js.map +7 -0
  279. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +2 -0
  280. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +7 -0
  281. package/bundles/ragents.ask/web/classes.json +1 -0
  282. package/bundles/ragents.ask/web/exports/ask-payload.js +2 -0
  283. package/bundles/ragents.ask/web/exports/ask-payload.js.map +7 -0
  284. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +2 -0
  285. package/bundles/ragents.ask/web/exports/web/QuestionCard.js.map +7 -0
  286. package/bundles/ragents.ask/web/exports/web/api.js +2 -0
  287. package/bundles/ragents.ask/web/exports/web/api.js.map +7 -0
  288. package/bundles/ragents.ask/web/index.js +2 -0
  289. package/bundles/ragents.ask/web/index.js.map +7 -0
  290. package/bundles/ragents.browser/ragents-bundle.json +53 -0
  291. package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js +11 -0
  292. package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js.map +7 -0
  293. package/bundles/ragents.browser/server/exports/server/contract.js +9 -0
  294. package/bundles/ragents.browser/server/exports/server/contract.js.map +7 -0
  295. package/bundles/ragents.browser/server/index.js +479 -0
  296. package/bundles/ragents.browser/server/index.js.map +7 -0
  297. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +38 -0
  298. package/bundles/ragents.documents/prompt.hbs +18 -0
  299. package/bundles/ragents.documents/ragents-bundle.json +120 -0
  300. package/bundles/ragents.documents/server/chunks/chunk-QIECRZ7C.js +37 -0
  301. package/bundles/ragents.documents/server/chunks/chunk-QIECRZ7C.js.map +7 -0
  302. package/bundles/ragents.documents/server/exports/contract.js +11 -0
  303. package/bundles/ragents.documents/server/exports/contract.js.map +7 -0
  304. package/bundles/ragents.documents/server/index.js +290 -0
  305. package/bundles/ragents.documents/server/index.js.map +7 -0
  306. package/bundles/ragents.documents/web/classes.json +1 -0
  307. package/bundles/ragents.documents/web/index.js +26 -0
  308. package/bundles/ragents.documents/web/index.js.map +7 -0
  309. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +49 -0
  310. package/bundles/ragents.lsp-fsharp/server/index.js +82 -0
  311. package/bundles/ragents.lsp-fsharp/server/index.js.map +7 -0
  312. package/bundles/ragents.lsp-fsharp/web/classes.json +1 -0
  313. package/bundles/ragents.lsp-fsharp/web/index.js +2 -0
  314. package/bundles/ragents.lsp-fsharp/web/index.js.map +7 -0
  315. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +61 -0
  316. package/bundles/ragents.lsp-roslyn/server/index.js +208 -0
  317. package/bundles/ragents.lsp-roslyn/server/index.js.map +7 -0
  318. package/bundles/ragents.lsp-roslyn/web/classes.json +1 -0
  319. package/bundles/ragents.lsp-roslyn/web/index.js +2 -0
  320. package/bundles/ragents.lsp-roslyn/web/index.js.map +7 -0
  321. package/bundles/ragents.lsp-typescript/ragents-bundle.json +36 -0
  322. package/bundles/ragents.lsp-typescript/server/index.js +13 -0
  323. package/bundles/ragents.lsp-typescript/server/index.js.map +7 -0
  324. package/bundles/ragents.lsp-typescript/web/classes.json +1 -0
  325. package/bundles/ragents.lsp-typescript/web/index.js +2 -0
  326. package/bundles/ragents.lsp-typescript/web/index.js.map +7 -0
  327. package/bundles/ragents.model-relay/ragents-bundle.json +33 -0
  328. package/bundles/ragents.model-relay/server/index.js +230 -0
  329. package/bundles/ragents.model-relay/server/index.js.map +7 -0
  330. package/bundles/ragents.orchestration/orchestration.hbs +106 -0
  331. package/bundles/ragents.orchestration/ragents-bundle.json +194 -0
  332. package/bundles/ragents.orchestration/server/index.js +277 -0
  333. package/bundles/ragents.orchestration/server/index.js.map +7 -0
  334. package/bundles/ragents.orchestration/web/chunks/chunk-ODMMQGX2.js +2 -0
  335. package/bundles/ragents.orchestration/web/chunks/chunk-ODMMQGX2.js.map +7 -0
  336. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +2 -0
  337. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js.map +7 -0
  338. package/bundles/ragents.orchestration/web/chunks/chunk-OSKPH6SZ.js +2 -0
  339. package/bundles/ragents.orchestration/web/chunks/chunk-OSKPH6SZ.js.map +7 -0
  340. package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js +2 -0
  341. package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js.map +7 -0
  342. package/bundles/ragents.orchestration/web/classes.json +1 -0
  343. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +2 -0
  344. package/bundles/ragents.orchestration/web/exports/web/program-slot.js.map +7 -0
  345. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +2 -0
  346. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js.map +7 -0
  347. package/bundles/ragents.orchestration/web/exports/web/tile-docking.js +2 -0
  348. package/bundles/ragents.orchestration/web/exports/web/tile-docking.js.map +7 -0
  349. package/bundles/ragents.orchestration/web/index.js +51 -0
  350. package/bundles/ragents.orchestration/web/index.js.map +7 -0
  351. package/bundles/ragents.overseer/ragents-bundle.json +144 -0
  352. package/bundles/ragents.overseer/server/index.js +652 -0
  353. package/bundles/ragents.overseer/server/index.js.map +7 -0
  354. package/bundles/ragents.overseer/web/classes.json +1 -0
  355. package/bundles/ragents.overseer/web/index.js +25 -0
  356. package/bundles/ragents.overseer/web/index.js.map +7 -0
  357. package/bundles/ragents.processes/ragents-bundle.json +93 -0
  358. package/bundles/ragents.processes/server/index.js +204 -0
  359. package/bundles/ragents.processes/server/index.js.map +7 -0
  360. package/bundles/ragents.processes/web/classes.json +1 -0
  361. package/bundles/ragents.processes/web/index.js +4 -0
  362. package/bundles/ragents.processes/web/index.js.map +7 -0
  363. package/bundles/ragents.product/preamble.hbs +9 -0
  364. package/bundles/ragents.product/ragents-bundle.json +93 -0
  365. package/bundles/ragents.product/server/index.js +208 -0
  366. package/bundles/ragents.product/server/index.js.map +7 -0
  367. package/bundles/ragents.product/web/classes.json +1 -0
  368. package/bundles/ragents.product/web/index.js +2 -0
  369. package/bundles/ragents.product/web/index.js.map +7 -0
  370. package/bundles/ragents.profile-distribution/ragents-bundle.json +64 -0
  371. package/bundles/ragents.profile-distribution/server/index.js +241 -0
  372. package/bundles/ragents.profile-distribution/server/index.js.map +7 -0
  373. package/bundles/ragents.reference/ragents-bundle.json +39 -0
  374. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +27 -0
  375. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +10 -0
  376. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +80 -0
  377. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +82 -0
  378. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +154 -0
  379. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +9 -0
  380. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +32 -0
  381. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +59 -0
  382. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +13 -0
  383. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +9 -0
  384. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +81 -0
  385. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +26 -0
  386. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +34 -0
  387. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +24 -0
  388. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +10 -0
  389. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -0
  390. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +5 -0
  391. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -0
  392. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +27 -0
  393. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +137 -0
  394. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/state.ts +38 -0
  395. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +42 -0
  396. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +38 -0
  397. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +218 -0
  398. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +12 -0
  399. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +9 -0
  400. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +60 -0
  401. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +26 -0
  402. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +24 -0
  403. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +18 -0
  404. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +16 -0
  405. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +39 -0
  406. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +15 -0
  407. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/server.ts +14 -0
  408. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +13 -0
  409. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +9 -0
  410. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +65 -0
  411. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +26 -0
  412. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +42 -0
  413. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +25 -0
  414. package/bundles/ragents.reference/run-scripts/word-game/package.json +11 -0
  415. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +27 -0
  416. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +23 -0
  417. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +105 -0
  418. package/bundles/ragents.reference/run-scripts/word-game/src/state.ts +22 -0
  419. package/bundles/ragents.reference/run-scripts/word-game/src/view.tsx +54 -0
  420. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +252 -0
  421. package/bundles/ragents.reference/server/index.js +16 -0
  422. package/bundles/ragents.reference/server/index.js.map +7 -0
  423. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +12 -0
  424. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +12 -0
  425. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +12 -0
  426. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +12 -0
  427. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +12 -0
  428. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +12 -0
  429. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +12 -0
  430. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +12 -0
  431. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +12 -0
  432. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +12 -0
  433. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +12 -0
  434. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +12 -0
  435. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +12 -0
  436. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +12 -0
  437. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +12 -0
  438. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +12 -0
  439. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +12 -0
  440. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +12 -0
  441. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +12 -0
  442. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +12 -0
  443. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +12 -0
  444. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +12 -0
  445. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +12 -0
  446. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +12 -0
  447. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +12 -0
  448. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +33 -0
  449. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +33 -0
  450. package/bundles/ragents.reference/web/classes.json +1 -0
  451. package/bundles/ragents.reference/web/index.js +2 -0
  452. package/bundles/ragents.reference/web/index.js.map +7 -0
  453. package/bundles/ragents.todo/ragents-bundle.json +48 -0
  454. package/bundles/ragents.todo/server/index.js +108 -0
  455. package/bundles/ragents.todo/server/index.js.map +7 -0
  456. package/bundles/ragents.todo/web/classes.json +1 -0
  457. package/bundles/ragents.todo/web/index.js +2 -0
  458. package/bundles/ragents.todo/web/index.js.map +7 -0
  459. package/bundles/ragents.transcript/ragents-bundle.json +34 -0
  460. package/bundles/ragents.transcript/server/index.js +102 -0
  461. package/bundles/ragents.transcript/server/index.js.map +7 -0
  462. package/bundles/ragents.watch/ragents-bundle.json +39 -0
  463. package/bundles/ragents.watch/server/chunks/chunk-FHAM6OML.js +11 -0
  464. package/bundles/ragents.watch/server/chunks/chunk-FHAM6OML.js.map +7 -0
  465. package/bundles/ragents.watch/server/chunks/chunk-RPBX3J4P.js +10 -0
  466. package/bundles/ragents.watch/server/chunks/chunk-RPBX3J4P.js.map +7 -0
  467. package/bundles/ragents.watch/server/exports/contract.js +9 -0
  468. package/bundles/ragents.watch/server/exports/contract.js.map +7 -0
  469. package/bundles/ragents.watch/server/exports/server/contract.js +9 -0
  470. package/bundles/ragents.watch/server/exports/server/contract.js.map +7 -0
  471. package/bundles/ragents.watch/server/index.js +482 -0
  472. package/bundles/ragents.watch/server/index.js.map +7 -0
  473. package/bundles/ragents.workspace/prompt.hbs +7 -0
  474. package/bundles/ragents.workspace/ragents-bundle.json +148 -0
  475. package/bundles/ragents.workspace/server/index.js +1049 -0
  476. package/bundles/ragents.workspace/server/index.js.map +7 -0
  477. package/bundles/ragents.workspace/web/classes.json +1 -0
  478. package/bundles/ragents.workspace/web/index.js +39 -0
  479. package/bundles/ragents.workspace/web/index.js.map +7 -0
  480. package/package.json +5 -16
  481. package/packages/agent/dist/core/agent-session-runtime.d.ts +33 -0
  482. package/packages/agent/dist/core/agent-session-services.d.ts +35 -0
  483. package/packages/agent/dist/core/agent-session.d.ts +234 -0
  484. package/packages/agent/dist/core/agent-settings.d.ts +27 -0
  485. package/packages/agent/dist/core/auth-guidance.d.ts +4 -0
  486. package/packages/agent/dist/core/compaction/compaction.d.ts +116 -0
  487. package/packages/agent/dist/core/compaction/index.d.ts +6 -0
  488. package/packages/agent/dist/core/compaction/utils.d.ts +39 -0
  489. package/packages/agent/dist/core/defaults.d.ts +3 -0
  490. package/packages/agent/dist/core/extensions/index.d.ts +11 -0
  491. package/packages/agent/dist/core/extensions/loader.d.ts +12 -0
  492. package/packages/agent/dist/core/extensions/runner.d.ts +39 -0
  493. package/packages/agent/dist/core/extensions/types.d.ts +156 -0
  494. package/packages/agent/dist/core/extensions/wrapper.d.ts +12 -0
  495. package/packages/agent/dist/core/messages.d.ts +37 -0
  496. package/packages/agent/dist/core/model-runtime.d.ts +32 -0
  497. package/packages/agent/dist/core/provider-composer.d.ts +25 -0
  498. package/packages/agent/dist/core/resource-loader.d.ts +39 -0
  499. package/packages/agent/dist/core/sdk.d.ts +38 -0
  500. package/packages/agent/dist/core/session-manager.d.ts +189 -0
  501. package/packages/agent/dist/core/skills.d.ts +20 -0
  502. package/packages/agent/dist/core/source-info.d.ts +16 -0
  503. package/packages/agent/dist/core/system-prompt.d.ts +21 -0
  504. package/packages/agent/dist/core/tools/bash.d.ts +63 -0
  505. package/packages/agent/dist/core/tools/edit-diff.d.ts +98 -0
  506. package/packages/agent/dist/core/tools/edit.d.ts +41 -0
  507. package/packages/agent/dist/core/tools/file-mutation-queue.d.ts +6 -0
  508. package/packages/agent/dist/core/tools/index.d.ts +5 -0
  509. package/packages/agent/dist/core/tools/output-accumulator.d.ts +58 -0
  510. package/packages/agent/dist/core/tools/path-utils.d.ts +8 -0
  511. package/packages/agent/dist/core/tools/read.d.ts +33 -0
  512. package/packages/agent/dist/core/tools/truncate.d.ts +61 -0
  513. package/packages/agent/dist/core/tools/write.d.ts +23 -0
  514. package/packages/agent/dist/index.d.ts +13 -0
  515. package/packages/agent/dist/loop/agent-loop.d.ts +13 -0
  516. package/packages/agent/dist/loop/agent.d.ts +103 -0
  517. package/packages/agent/dist/loop/index.d.ts +5 -0
  518. package/packages/agent/dist/loop/types.d.ts +333 -0
  519. package/packages/agent/dist/loop/uuid.d.ts +2 -0
  520. package/packages/agent/dist/utils/child-process.d.ts +17 -0
  521. package/packages/agent/dist/utils/exif-orientation.d.ts +5 -0
  522. package/packages/agent/dist/utils/frontmatter.d.ts +8 -0
  523. package/packages/agent/dist/utils/image-convert.d.ts +2 -0
  524. package/packages/agent/dist/utils/image-process.d.ts +18 -0
  525. package/packages/agent/dist/utils/image-resize-core.d.ts +30 -0
  526. package/packages/agent/dist/utils/image-resize-worker.d.ts +2 -0
  527. package/packages/agent/dist/utils/image-resize.d.ts +16 -0
  528. package/packages/agent/dist/utils/mime.d.ts +3 -0
  529. package/packages/agent/dist/utils/paths.d.ts +15 -0
  530. package/packages/agent/dist/utils/photon.d.ts +21 -0
  531. package/packages/agent/dist/utils/shell.d.ts +17 -0
  532. package/packages/agent/dist/utils/sleep.d.ts +5 -0
  533. package/packages/agent/package.json +3 -32
  534. package/packages/agent/src/core/agent-session-runtime.ts +15 -469
  535. package/packages/agent/src/core/agent-session-services.ts +17 -167
  536. package/packages/agent/src/core/agent-session.ts +154 -2403
  537. package/packages/agent/src/core/agent-settings.ts +20 -0
  538. package/packages/agent/src/core/auth-guidance.ts +0 -4
  539. package/packages/agent/src/core/compaction/compaction.ts +4 -33
  540. package/packages/agent/src/core/compaction/index.ts +0 -1
  541. package/packages/agent/src/core/compaction/utils.ts +2 -2
  542. package/packages/agent/src/core/defaults.ts +1 -1
  543. package/packages/agent/src/core/extensions/index.ts +6 -117
  544. package/packages/agent/src/core/extensions/loader.ts +21 -605
  545. package/packages/agent/src/core/extensions/runner.ts +48 -969
  546. package/packages/agent/src/core/extensions/types.ts +35 -1298
  547. package/packages/agent/src/core/extensions/wrapper.ts +13 -34
  548. package/packages/agent/src/core/messages.ts +5 -109
  549. package/packages/agent/src/core/model-runtime.ts +109 -467
  550. package/packages/agent/src/core/provider-composer.ts +21 -451
  551. package/packages/agent/src/core/resource-loader.ts +18 -822
  552. package/packages/agent/src/core/sdk.ts +46 -281
  553. package/packages/agent/src/core/session-manager.ts +11 -891
  554. package/packages/agent/src/core/skills.ts +8 -440
  555. package/packages/agent/src/core/source-info.ts +0 -12
  556. package/packages/agent/src/core/system-prompt.ts +2 -41
  557. package/packages/agent/src/core/tools/bash.ts +20 -32
  558. package/packages/agent/src/core/tools/edit-diff.ts +0 -60
  559. package/packages/agent/src/core/tools/edit.ts +2 -18
  560. package/packages/agent/src/core/tools/index.ts +4 -130
  561. package/packages/agent/src/core/tools/output-accumulator.ts +33 -5
  562. package/packages/agent/src/core/tools/path-utils.ts +2 -49
  563. package/packages/agent/src/core/tools/read.ts +4 -12
  564. package/packages/agent/src/core/tools/truncate.ts +0 -15
  565. package/packages/agent/src/core/tools/write.ts +1 -8
  566. package/packages/agent/src/index.ts +11 -272
  567. package/packages/{agent-core/src → agent/src/loop}/agent-loop.ts +127 -273
  568. package/packages/{agent-core/src → agent/src/loop}/agent.ts +12 -164
  569. package/packages/{agent-core/src → agent/src/loop}/types.ts +6 -105
  570. package/packages/agent/src/utils/child-process.ts +0 -13
  571. package/packages/agent/src/utils/image-convert.ts +0 -25
  572. package/packages/agent/src/utils/paths.ts +1 -71
  573. package/packages/agent/src/utils/shell.ts +13 -156
  574. package/packages/ai/dist/api/ai-sdk-messages.d.ts +9 -0
  575. package/packages/ai/dist/api/ai-sdk-transport.d.ts +13 -0
  576. package/packages/ai/dist/api/ai-sdk.d.ts +13 -0
  577. package/packages/ai/dist/api/ai-sdk.lazy.d.ts +3 -0
  578. package/packages/ai/dist/api/lazy.d.ts +15 -0
  579. package/packages/ai/dist/api/simple-options.d.ts +4 -0
  580. package/packages/ai/dist/api/transform-messages.d.ts +8 -0
  581. package/packages/ai/dist/api-registry.d.ts +25 -0
  582. package/packages/ai/dist/auth/context.d.ts +4 -0
  583. package/packages/ai/dist/auth/helpers.d.ts +4 -0
  584. package/packages/ai/dist/auth/resolve.d.ts +19 -0
  585. package/packages/ai/dist/auth/types.d.ts +51 -0
  586. package/packages/ai/dist/env-api-keys.d.ts +8 -0
  587. package/packages/ai/dist/index.d.ts +19 -0
  588. package/packages/ai/dist/models.d.ts +71 -0
  589. package/packages/ai/dist/models.generated.d.ts +8021 -0
  590. package/packages/ai/dist/providers/all.d.ts +15 -0
  591. package/packages/ai/dist/providers/faux.d.ts +97 -0
  592. package/packages/ai/dist/providers/openrouter.d.ts +3 -0
  593. package/packages/ai/dist/providers/openrouter.models.d.ts +8019 -0
  594. package/packages/ai/dist/types.d.ts +541 -0
  595. package/packages/ai/dist/utils/diagnostics.d.ts +13 -0
  596. package/packages/ai/dist/utils/error-body.d.ts +25 -0
  597. package/packages/ai/dist/utils/estimate.d.ts +17 -0
  598. package/packages/ai/dist/utils/event-stream.d.ts +21 -0
  599. package/packages/ai/dist/utils/headers.d.ts +2 -0
  600. package/packages/ai/dist/utils/json-parse.d.ts +16 -0
  601. package/packages/ai/dist/utils/overflow.d.ts +54 -0
  602. package/packages/ai/dist/utils/provider-env.d.ts +7 -0
  603. package/packages/ai/dist/utils/retry.d.ts +12 -0
  604. package/packages/ai/dist/utils/sanitize-unicode.d.ts +22 -0
  605. package/packages/ai/dist/utils/typebox-helpers.d.ts +17 -0
  606. package/packages/ai/dist/utils/validation.d.ts +10 -0
  607. package/packages/ai/package.json +2 -6
  608. package/packages/ai/src/api/ai-sdk-transport.ts +2 -2
  609. package/packages/ai/src/api/simple-options.ts +0 -34
  610. package/packages/ai/src/api-registry.ts +1 -12
  611. package/packages/ai/src/auth/context.ts +1 -30
  612. package/packages/ai/src/auth/helpers.ts +3 -34
  613. package/packages/ai/src/auth/resolve.ts +10 -108
  614. package/packages/ai/src/auth/types.ts +9 -176
  615. package/packages/ai/src/index.ts +1 -13
  616. package/packages/ai/src/models.ts +41 -407
  617. package/packages/ai/src/providers/all.ts +3 -31
  618. package/packages/ai/src/providers/openrouter.models.ts +14 -0
  619. package/packages/ai/src/types.ts +0 -104
  620. package/packages/ai/src/utils/diagnostics.ts +0 -32
  621. package/packages/ai/src/utils/headers.ts +0 -11
  622. package/packages/ai/src/utils/overflow.ts +0 -7
  623. package/packages/ai/src/utils/validation.ts +0 -15
  624. package/packages/ragents/package.json +3 -6
  625. package/packages/ragents/src/access.ts +2 -1
  626. package/packages/ragents/src/agents/actor-input.ts +14 -18
  627. package/packages/ragents/src/agents/catalog.ts +3 -3
  628. package/packages/ragents/src/agents/plugins.ts +0 -4
  629. package/packages/ragents/src/agents/scheduler.ts +232 -78
  630. package/packages/ragents/src/agents/schemas.ts +1 -36
  631. package/packages/ragents/src/agents/tool-orientation.ts +1 -1
  632. package/packages/ragents/src/agents/tools.ts +72 -73
  633. package/packages/ragents/src/agents/toolset.ts +5 -5
  634. package/packages/ragents/src/agents/turn.ts +2 -14
  635. package/packages/ragents/src/agents/workspaces.ts +18 -0
  636. package/packages/ragents/src/domain/actor-reference.ts +22 -0
  637. package/packages/ragents/src/domain/driver.ts +0 -9
  638. package/packages/ragents/src/domain/event-semantics.ts +62 -74
  639. package/packages/ragents/src/domain/event-validation.ts +22 -21
  640. package/packages/ragents/src/domain/events.ts +19 -7
  641. package/packages/ragents/src/domain/json.ts +2 -0
  642. package/packages/ragents/src/domain/model.ts +40 -18
  643. package/packages/ragents/src/domain/projection.ts +43 -15
  644. package/packages/ragents/src/domain/schema-errors.ts +3 -3
  645. package/packages/ragents/src/drivers/agent-hooks.ts +40 -0
  646. package/packages/ragents/src/drivers/agent-runtime.ts +118 -186
  647. package/packages/ragents/src/drivers/agent.ts +5 -20
  648. package/packages/ragents/src/drivers/attachments.ts +4 -24
  649. package/packages/ragents/src/drivers/skill-preload.ts +4 -16
  650. package/packages/ragents/src/drivers/types.ts +20 -3
  651. package/packages/ragents/src/http/contracts.ts +16 -3
  652. package/packages/ragents/src/http/methods.ts +32 -33
  653. package/packages/ragents/src/index.ts +5 -15
  654. package/packages/ragents/src/plugin-host.ts +151 -105
  655. package/packages/ragents/src/plugin-types.ts +86 -23
  656. package/packages/ragents/src/rpc/peer.ts +6 -0
  657. package/packages/ragents/src/runtime/decisions/actions.ts +40 -37
  658. package/packages/ragents/src/runtime/decisions/actors.ts +90 -51
  659. package/packages/ragents/src/runtime/decisions/artifacts.ts +2 -2
  660. package/packages/ragents/src/runtime/decisions/inputs.ts +3 -3
  661. package/packages/ragents/src/runtime/decisions/subscriptions.ts +9 -7
  662. package/packages/ragents/src/runtime/decisions/turns.ts +37 -4
  663. package/packages/ragents/src/runtime/guards.ts +12 -21
  664. package/packages/ragents/src/runtime/journal-storage.ts +4 -2
  665. package/packages/ragents/src/runtime/journal.ts +1 -1
  666. package/packages/ragents/src/runtime/orchestration.ts +31 -14
  667. package/packages/ragents/src/runtime/serial-queue.ts +24 -0
  668. package/packages/ragents/src/runtime/stop.ts +19 -44
  669. package/packages/ragents/src/script/mediators.ts +4 -5
  670. package/packages/ragents/src/typescript/index.ts +2 -0
  671. package/packages/ragents/src/typescript/run-context.ts +10 -8
  672. package/packages/ragents/src/typescript/snippet.ts +7 -6
  673. package/packages/workspace-executor/package.json +2 -2
  674. package/packages/workspace-executor/src/bash-launch.ts +45 -0
  675. package/packages/workspace-executor/src/browser/contract.ts +71 -0
  676. package/packages/workspace-executor/src/browser/module.ts +74 -0
  677. package/packages/workspace-executor/src/browser/pages.ts +298 -0
  678. package/packages/workspace-executor/src/browser/playwright.ts +52 -0
  679. package/packages/workspace-executor/src/commands.ts +170 -0
  680. package/packages/workspace-executor/src/context.ts +34 -6
  681. package/packages/workspace-executor/src/errors.ts +12 -0
  682. package/packages/workspace-executor/src/executor.ts +62 -104
  683. package/packages/workspace-executor/src/files.ts +287 -0
  684. package/packages/workspace-executor/src/index.ts +82 -18
  685. package/packages/workspace-executor/src/language-server/adapters/roslyn.ts +1 -0
  686. package/packages/workspace-executor/src/language-server/contract.ts +14 -0
  687. package/packages/workspace-executor/src/language-server/host.ts +82 -26
  688. package/packages/workspace-executor/src/language-server/module.ts +107 -0
  689. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +90 -0
  690. package/packages/workspace-executor/src/managed-process.ts +1 -1
  691. package/packages/workspace-executor/src/module.ts +35 -0
  692. package/packages/workspace-executor/src/modules.ts +25 -0
  693. package/packages/workspace-executor/src/paths.ts +57 -5
  694. package/packages/workspace-executor/src/process-sandbox.ts +16 -0
  695. package/packages/workspace-executor/src/processes/module.ts +48 -0
  696. package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/process-table.ts +80 -57
  697. package/packages/workspace-executor/src/processes/scanner.ts +106 -0
  698. package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/snapshot.ts +23 -11
  699. package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/terminator.ts +19 -20
  700. package/packages/workspace-executor/src/run-folders.ts +33 -0
  701. package/packages/workspace-executor/src/safe-environment.ts +14 -0
  702. package/packages/workspace-executor/src/sandbox-tools.ts +206 -36
  703. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  704. package/plugins/package.json +1 -1
  705. package/plugins/ragents.activity/ragents-plugin.json +3 -0
  706. package/plugins/ragents.activity/server/index.ts +2 -2
  707. package/plugins/ragents.activity/web/ActivityHeader.tsx +2 -2
  708. package/plugins/ragents.activity/web/activity.ts +1 -1
  709. package/plugins/ragents.activity/web/index.tsx +1 -1
  710. package/plugins/ragents.actor-programs/prompt.hbs +8 -7
  711. package/plugins/ragents.actor-programs/ragents-plugin.json +3 -0
  712. package/plugins/ragents.actor-programs/server/agent-tools.ts +3 -3
  713. package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/capability-resolver.ts +1 -16
  714. package/plugins/ragents.actor-programs/server/controls-template.ts +5 -18
  715. package/plugins/ragents.actor-programs/server/controls-tool.ts +8 -11
  716. package/plugins/ragents.actor-programs/server/index.ts +10 -10
  717. package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/limits.ts +4 -4
  718. package/plugins/ragents.actor-programs/server/methods.ts +2 -2
  719. package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/operations.ts +2 -4
  720. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +65 -70
  721. package/plugins/ragents.actor-programs/server/prompts.ts +4 -4
  722. package/plugins/ragents.actor-programs/server/routes.ts +14 -8
  723. package/plugins/ragents.actor-programs/server/runtime.ts +132 -55
  724. package/plugins/ragents.actor-programs/server/templates.ts +35 -80
  725. package/plugins/ragents.actor-programs/server/test-report.ts +106 -0
  726. package/plugins/ragents.actor-programs/server/tool-contributor.ts +4 -4
  727. package/plugins/ragents.actor-programs/summary.hbs +1 -1
  728. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +15 -10
  729. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +47 -30
  730. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +15 -17
  731. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +3 -3
  732. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +3 -3
  733. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +12 -3
  734. package/plugins/ragents.actor-programs/web/api.ts +5 -5
  735. package/plugins/ragents.actor-programs/web/bridge.ts +2 -3
  736. package/plugins/ragents.actor-programs/web/chat-state.ts +9 -8
  737. package/plugins/ragents.actor-programs/web/index.tsx +7 -17
  738. package/plugins/ragents.actor-programs/web/program-state.ts +3 -3
  739. package/plugins/ragents.actor-programs/web/state-revision.ts +2 -2
  740. package/plugins/ragents.ask/ask-payload.ts +25 -0
  741. package/plugins/ragents.ask/contract.ts +2 -2
  742. package/plugins/ragents.ask/ragents-plugin.json +7 -0
  743. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  744. package/plugins/ragents.ask/server/ask-service.ts +43 -19
  745. package/plugins/ragents.ask/server/ask-tool.ts +2 -2
  746. package/plugins/ragents.ask/server/contract.ts +9 -1
  747. package/plugins/ragents.ask/server/index.ts +8 -10
  748. package/plugins/ragents.ask/server/tool-contributor.ts +3 -3
  749. package/plugins/ragents.ask/web/AskActionView.tsx +36 -0
  750. package/{apps/web/src/chat → plugins/ragents.ask/web}/QuestionCard.tsx +7 -5
  751. package/plugins/ragents.ask/web/QuestionSection.tsx +22 -21
  752. package/plugins/ragents.ask/web/api.ts +1 -1
  753. package/plugins/ragents.ask/web/index.tsx +11 -8
  754. package/plugins/ragents.browser/provision.ts +9 -8
  755. package/plugins/ragents.browser/ragents-plugin.json +6 -0
  756. package/plugins/ragents.browser/server/browser.ts +165 -286
  757. package/plugins/ragents.browser/server/contract.ts +8 -19
  758. package/plugins/ragents.browser/server/index.ts +8 -7
  759. package/plugins/ragents.browser/server/tools.ts +29 -37
  760. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +3 -1
  761. package/plugins/ragents.documents/contract.ts +4 -2
  762. package/plugins/ragents.documents/ragents-plugin.json +6 -0
  763. package/plugins/ragents.documents/server/config.ts +1 -1
  764. package/plugins/ragents.documents/server/document-write-tool.ts +2 -2
  765. package/plugins/ragents.documents/server/files-route.ts +2 -3
  766. package/plugins/ragents.documents/server/index.ts +10 -11
  767. package/plugins/ragents.documents/server/show-document-tool.ts +2 -2
  768. package/plugins/ragents.documents/server/store.ts +3 -3
  769. package/plugins/ragents.documents/server/tool-contributor.ts +3 -3
  770. package/plugins/ragents.documents/web/DocumentViewer.tsx +5 -6
  771. package/plugins/ragents.documents/web/api.ts +1 -1
  772. package/plugins/ragents.documents/web/index.tsx +4 -4
  773. package/plugins/ragents.lsp-fsharp/provision.ts +2 -2
  774. package/plugins/ragents.lsp-fsharp/ragents-plugin.json +3 -0
  775. package/plugins/ragents.lsp-fsharp/server/index.ts +3 -3
  776. package/plugins/ragents.lsp-fsharp/web/index.tsx +1 -1
  777. package/plugins/ragents.lsp-roslyn/provision.ts +2 -2
  778. package/plugins/ragents.lsp-roslyn/ragents-plugin.json +3 -0
  779. package/plugins/ragents.lsp-roslyn/server/index.ts +47 -8
  780. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +145 -0
  781. package/plugins/ragents.lsp-roslyn/web/index.tsx +1 -1
  782. package/plugins/ragents.lsp-typescript/ragents-plugin.json +3 -0
  783. package/plugins/ragents.lsp-typescript/server/index.ts +3 -3
  784. package/plugins/ragents.lsp-typescript/web/index.tsx +1 -1
  785. package/plugins/ragents.model-relay/ragents-plugin.json +3 -0
  786. package/plugins/ragents.model-relay/server/config.ts +5 -31
  787. package/plugins/ragents.model-relay/server/index.ts +5 -6
  788. package/plugins/ragents.model-relay/server/relay.ts +8 -9
  789. package/plugins/ragents.orchestration/contract.ts +13 -14
  790. package/plugins/ragents.orchestration/orchestration.hbs +4 -3
  791. package/plugins/ragents.orchestration/ragents-plugin.json +6 -0
  792. package/plugins/ragents.orchestration/server/index.ts +13 -16
  793. package/plugins/ragents.orchestration/server/run-stop-tool.ts +4 -4
  794. package/plugins/ragents.orchestration/server/{canvas-tool.ts → surface-tool.ts} +42 -43
  795. package/plugins/ragents.orchestration/surface.hbs +34 -0
  796. package/plugins/ragents.orchestration/tiled-layout.ts +16 -16
  797. package/plugins/ragents.orchestration/web/ActorChat.tsx +16 -14
  798. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +23 -26
  799. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +5 -6
  800. package/plugins/ragents.orchestration/web/ActorPopout.tsx +7 -5
  801. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +16 -16
  802. package/plugins/ragents.orchestration/web/{ActorCanvasControls.tsx → ActorSurfaceControls.tsx} +23 -28
  803. package/plugins/ragents.orchestration/web/ActorTile.tsx +2 -2
  804. package/plugins/ragents.orchestration/web/Center.tsx +47 -55
  805. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +4 -4
  806. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +7 -7
  807. package/plugins/ragents.orchestration/web/FlowInspector.tsx +24 -42
  808. package/plugins/ragents.orchestration/web/JournalStatus.tsx +8 -8
  809. package/plugins/ragents.orchestration/web/MaterialBody.tsx +5 -5
  810. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  811. package/plugins/ragents.orchestration/web/SurfaceStartup.tsx +8 -0
  812. package/plugins/ragents.orchestration/web/{CanvasTiles.tsx → SurfaceTiles.tsx} +18 -18
  813. package/plugins/ragents.orchestration/web/{TiledCanvas.tsx → TiledSurface.tsx} +22 -22
  814. package/plugins/ragents.orchestration/web/actor-header-settings.ts +2 -2
  815. package/plugins/ragents.orchestration/web/api.ts +4 -10
  816. package/plugins/ragents.orchestration/web/constants.ts +0 -1
  817. package/plugins/ragents.orchestration/web/executions.ts +3 -3
  818. package/plugins/ragents.orchestration/web/index.tsx +19 -124
  819. package/plugins/ragents.orchestration/web/program-slot.ts +14 -0
  820. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +95 -0
  821. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +109 -0
  822. package/plugins/ragents.orchestration/web/{column/RunColumn.tsx → run-panel/RunPanel.tsx} +211 -83
  823. package/plugins/ragents.orchestration/web/{column/ColumnSettings.tsx → run-panel/RunPanelSettings.tsx} +13 -13
  824. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +165 -0
  825. package/plugins/ragents.orchestration/web/{column/column-actors.ts → run-panel/run-panel-actors.ts} +14 -13
  826. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +47 -0
  827. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +30 -0
  828. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +71 -0
  829. package/plugins/ragents.orchestration/web/{column → run-panel}/sheet-status.ts +4 -4
  830. package/plugins/ragents.orchestration/web/{canvas-stage.ts → surface-entities.ts} +2 -2
  831. package/plugins/ragents.orchestration/web/{canvas-startup.ts → surface-startup.ts} +7 -10
  832. package/plugins/ragents.orchestration/web/surface-view-settings.ts +42 -0
  833. package/plugins/ragents.orchestration/web/tile-docking.ts +14 -14
  834. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +26 -26
  835. package/plugins/ragents.overseer/contract.ts +20 -14
  836. package/plugins/ragents.overseer/ragents-plugin.json +3 -0
  837. package/plugins/ragents.overseer/server/api.ts +34 -23
  838. package/plugins/ragents.overseer/server/coordinator-prompt.ts +3 -3
  839. package/plugins/ragents.overseer/server/coordinator.ts +19 -0
  840. package/plugins/ragents.overseer/server/index.ts +39 -27
  841. package/plugins/ragents.overseer/server/orientation.ts +4 -5
  842. package/plugins/ragents.overseer/server/quick-answer.ts +5 -4
  843. package/plugins/ragents.overseer/server/reset-method.ts +4 -3
  844. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  845. package/plugins/ragents.overseer/server/settings-method.ts +1 -1
  846. package/plugins/ragents.overseer/server/settings.ts +6 -6
  847. package/plugins/ragents.overseer/server/user-location.ts +20 -19
  848. package/plugins/ragents.overseer/web/ModelSettings.tsx +4 -4
  849. package/plugins/ragents.overseer/web/chat-display.ts +1 -1
  850. package/plugins/ragents.overseer/web/index.tsx +51 -26
  851. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  852. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  853. package/plugins/ragents.processes/contract.ts +5 -5
  854. package/plugins/ragents.processes/ragents-plugin.json +3 -0
  855. package/plugins/ragents.processes/server/index.ts +13 -19
  856. package/plugins/ragents.processes/server/methods.ts +18 -20
  857. package/plugins/ragents.processes/server/observer.ts +64 -104
  858. package/plugins/ragents.processes/server/run-processes.ts +24 -0
  859. package/plugins/ragents.processes/web/ProcessHeader.tsx +13 -16
  860. package/plugins/ragents.processes/web/index.tsx +2 -1
  861. package/plugins/ragents.processes/web/processes.ts +1 -1
  862. package/plugins/ragents.product/ragents-plugin.json +3 -0
  863. package/plugins/ragents.product/server/config.ts +12 -13
  864. package/plugins/ragents.product/server/index.ts +15 -16
  865. package/plugins/ragents.product/server/runtime.ts +2 -2
  866. package/plugins/ragents.product/web/index.tsx +3 -3
  867. package/plugins/ragents.profile-distribution/contract.ts +6 -9
  868. package/plugins/ragents.profile-distribution/ragents-plugin.json +3 -0
  869. package/plugins/ragents.profile-distribution/server/archive.ts +26 -51
  870. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  871. package/plugins/ragents.profile-distribution/server/index.ts +9 -16
  872. package/plugins/ragents.reference/examples.ts +1 -1
  873. package/plugins/ragents.reference/ragents-plugin.json +3 -0
  874. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +2 -2
  875. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +1 -1
  876. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +1 -1
  877. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +4 -4
  878. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +1 -1
  879. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +1 -1
  880. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  881. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +2 -2
  882. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +1 -1
  883. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +1 -1
  884. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/state.ts +2 -2
  885. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +11 -11
  886. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +15 -15
  887. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +3 -8
  888. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +1 -1
  889. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  890. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +2 -2
  891. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +6 -6
  892. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +3 -3
  893. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  894. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +1 -1
  895. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  896. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +1 -2
  897. package/plugins/ragents.reference/run-scripts/word-game/src/state.ts +6 -6
  898. package/plugins/ragents.reference/run-scripts/word-game/src/view.tsx +14 -14
  899. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +4 -5
  900. package/plugins/ragents.reference/server/index.ts +2 -2
  901. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +1 -1
  902. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +1 -1
  903. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +1 -1
  904. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +1 -1
  905. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +2 -2
  906. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +2 -2
  907. package/plugins/ragents.reference/walkthroughs.ts +26 -26
  908. package/plugins/ragents.reference/web/StartGuides.tsx +2 -2
  909. package/plugins/ragents.reference/web/index.tsx +1 -1
  910. package/plugins/ragents.todo/ragents-plugin.json +3 -0
  911. package/plugins/ragents.todo/server/index.ts +2 -2
  912. package/plugins/ragents.todo/server/todo-tool.ts +4 -5
  913. package/plugins/ragents.todo/server/tool-contributor.ts +2 -2
  914. package/plugins/ragents.todo/web/TodoSection.tsx +3 -3
  915. package/plugins/ragents.todo/web/index.ts +1 -1
  916. package/plugins/ragents.transcript/ragents-plugin.json +3 -0
  917. package/plugins/ragents.transcript/server/index.ts +4 -4
  918. package/plugins/ragents.transcript/server/transcript.ts +2 -3
  919. package/plugins/ragents.watch/ragents-plugin.json +6 -0
  920. package/plugins/ragents.watch/server/condition.ts +2 -2
  921. package/plugins/ragents.watch/server/contract.ts +1 -1
  922. package/plugins/ragents.watch/server/functions.ts +3 -3
  923. package/plugins/ragents.watch/server/index.ts +3 -3
  924. package/plugins/ragents.watch/server/observation.ts +6 -6
  925. package/plugins/ragents.watch/server/service.ts +5 -5
  926. package/plugins/ragents.workspace/client/workspace-client.ts +129 -58
  927. package/plugins/ragents.workspace/contract.ts +98 -35
  928. package/plugins/ragents.workspace/prompt.hbs +1 -8
  929. package/plugins/ragents.workspace/ragents-plugin.json +3 -0
  930. package/plugins/ragents.workspace/server/binding.ts +122 -39
  931. package/plugins/ragents.workspace/server/browse-route.ts +96 -103
  932. package/plugins/ragents.workspace/server/clients.ts +236 -68
  933. package/plugins/ragents.workspace/server/config.ts +30 -0
  934. package/plugins/ragents.workspace/server/index.ts +61 -26
  935. package/plugins/ragents.workspace/server/runtime.ts +271 -46
  936. package/{apps/server/src/plugin-support → plugins/ragents.workspace/server}/shell-platform.ts +3 -5
  937. package/{apps/server/src/plugin-support → plugins/ragents.workspace/server}/workspace-tool-naming.ts +7 -1
  938. package/plugins/ragents.workspace/web/FileBrowser.tsx +11 -8
  939. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +115 -61
  940. package/plugins/ragents.workspace/web/api.ts +1 -1
  941. package/plugins/ragents.workspace/web/index.tsx +1 -1
  942. package/ragents.config.core.ts +2 -8
  943. package/ragents.config.showcase.ts +61 -0
  944. package/scripts/agent/agent-cli.ts +265 -107
  945. package/scripts/agent/journal.ts +3 -1
  946. package/scripts/agent/turn-control.ts +19 -0
  947. package/scripts/package/build-package.ts +70 -15
  948. package/scripts/package/ragents.mjs +4 -2
  949. package/scripts/plugin/build-builtin-plugins.ts +52 -0
  950. package/scripts/plugin/plugin-cli.ts +99 -0
  951. package/scripts/provision/run-provision.ts +20 -18
  952. package/scripts/remote/connect.ts +75 -53
  953. package/scripts/remote/start.ts +3 -4
  954. package/scripts/workspace-client/run-workspace-client.ts +15 -9
  955. package/apps/server/agent-home/settings.json +0 -3
  956. package/apps/server/src/chat-attachments.ts +0 -52
  957. package/apps/server/src/chat-events.ts +0 -185
  958. package/apps/server/src/plugin-support/asset-path.ts +0 -4
  959. package/apps/server/src/profile/plugin-list.ts +0 -19
  960. package/apps/server/src/web-build.ts +0 -82
  961. package/apps/web/column.html +0 -12
  962. package/apps/web/index.html +0 -12
  963. package/apps/web/src/StartSurface.tsx +0 -161
  964. package/apps/web/src/chat/ChatInputToolbar.tsx +0 -488
  965. package/apps/web/src/chat/ChatMessages.tsx +0 -666
  966. package/apps/web/src/chat/ChatPanel.tsx +0 -61
  967. package/apps/web/src/chat/DetailModeSwitch.tsx +0 -58
  968. package/apps/web/src/chat/Markdown.tsx +0 -104
  969. package/apps/web/src/chat/StepPopover.tsx +0 -82
  970. package/apps/web/src/chat/WorkingScenes.tsx +0 -235
  971. package/apps/web/src/chat/attachments.ts +0 -53
  972. package/apps/web/src/chat/chat-scroll.ts +0 -41
  973. package/apps/web/src/chat/texts.ts +0 -61
  974. package/apps/web/src/chat/types.ts +0 -26
  975. package/apps/web/src/column/ColumnApp.tsx +0 -234
  976. package/apps/web/src/column/column-location.ts +0 -30
  977. package/apps/web/src/column/host-contract.ts +0 -93
  978. package/apps/web/src/panel/OverviewPage.tsx +0 -215
  979. package/apps/web/src/panel/SettingsPage.tsx +0 -98
  980. package/apps/web/src/panel/target-state.ts +0 -78
  981. package/apps/web/src/plugin-discovery.ts +0 -5
  982. package/apps/web/src/virtual-plugins.d.ts +0 -3
  983. package/apps/web/vite.config.ts +0 -140
  984. package/packages/agent/src/config.ts +0 -161
  985. package/packages/agent/src/core/auth-storage.ts +0 -271
  986. package/packages/agent/src/core/bash-executor.ts +0 -156
  987. package/packages/agent/src/core/compaction/branch-summarization.ts +0 -372
  988. package/packages/agent/src/core/diagnostics.ts +0 -15
  989. package/packages/agent/src/core/event-bus.ts +0 -33
  990. package/packages/agent/src/core/exec.ts +0 -107
  991. package/packages/agent/src/core/experimental.ts +0 -3
  992. package/packages/agent/src/core/footer-data-provider.ts +0 -388
  993. package/packages/agent/src/core/http-dispatcher.ts +0 -106
  994. package/packages/agent/src/core/index.ts +0 -78
  995. package/packages/agent/src/core/model-config.ts +0 -287
  996. package/packages/agent/src/core/model-registry.ts +0 -126
  997. package/packages/agent/src/core/model-resolver.ts +0 -675
  998. package/packages/agent/src/core/output-guard.ts +0 -108
  999. package/packages/agent/src/core/package-manager.ts +0 -2441
  1000. package/packages/agent/src/core/prompt-templates.ts +0 -284
  1001. package/packages/agent/src/core/resolve-config-value.ts +0 -287
  1002. package/packages/agent/src/core/runtime-credentials.ts +0 -48
  1003. package/packages/agent/src/core/session-cwd.ts +0 -59
  1004. package/packages/agent/src/core/settings-manager.ts +0 -1212
  1005. package/packages/agent/src/core/slash-commands.ts +0 -41
  1006. package/packages/agent/src/core/timings.ts +0 -50
  1007. package/packages/agent/src/core/tools/tool-definition-wrapper.ts +0 -45
  1008. package/packages/agent/src/core/trust-manager.ts +0 -244
  1009. package/packages/agent/src/utils/ansi.ts +0 -60
  1010. package/packages/agent/src/utils/fs-watch.ts +0 -30
  1011. package/packages/agent/src/utils/git.ts +0 -226
  1012. package/packages/agent/src/utils/json.ts +0 -6
  1013. package/packages/agent/src/utils/tools-manager.ts +0 -63
  1014. package/packages/agent-core/package.json +0 -32
  1015. package/packages/ai/src/api/openrouter-images.lazy.ts +0 -10
  1016. package/packages/ai/src/api/openrouter-images.ts +0 -98
  1017. package/packages/ai/src/auth/credential-store.ts +0 -51
  1018. package/packages/ai/src/compat/extension-oauth-types.ts +0 -45
  1019. package/packages/ai/src/image-models.generated.ts +0 -533
  1020. package/packages/ai/src/images-models.ts +0 -274
  1021. package/packages/ai/src/models-store.ts +0 -38
  1022. package/packages/ai/src/oauth.ts +0 -10
  1023. package/packages/ai/src/providers/openrouter-images.ts +0 -14
  1024. package/packages/ai/src/session-resources.ts +0 -24
  1025. package/packages/ai/src/utils/abort-signals.ts +0 -41
  1026. package/packages/ai/src/utils/deferred-tools.ts +0 -39
  1027. package/packages/ai/src/utils/hash.ts +0 -13
  1028. package/packages/ai/src/utils/node-http-proxy.ts +0 -112
  1029. package/plugins/ragents.actor-programs/server/client-runtime.ts +0 -16
  1030. package/plugins/ragents.ask/web/constants.ts +0 -1
  1031. package/plugins/ragents.lsp-roslyn/web/api.ts +0 -10
  1032. package/plugins/ragents.orchestration/web/CanvasStartup.tsx +0 -14
  1033. package/plugins/ragents.orchestration/web/canvas-view-settings.ts +0 -42
  1034. package/plugins/ragents.orchestration/web/column/AddresseeControl.tsx +0 -116
  1035. package/plugins/ragents.orchestration/web/column/column-settings.ts +0 -47
  1036. package/plugins/ragents.orchestration/web/column/column-state.ts +0 -68
  1037. package/plugins/ragents.orchestration/web/contract.ts +0 -25
  1038. package/plugins/ragents.product/model-settings-contract.ts +0 -10
  1039. package/plugins/ragents.profile-distribution/server/web.ts +0 -24
  1040. /package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/authoring-contracts.ts +0 -0
  1041. /package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/runtime-libraries.ts +0 -0
  1042. /package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/workflow/prompt-reader.ts +0 -0
  1043. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/file-contracts.d.ts +0 -0
  1044. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/flow-diagram-contracts.d.ts +0 -0
  1045. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/flow-diagram.css +0 -0
  1046. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/form-contracts.d.ts +0 -0
  1047. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/frame-layout.ts +0 -0
  1048. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/table-contracts.d.ts +0 -0
  1049. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/viewer-contracts.d.ts +0 -0
  1050. /package/{plugins/ragents.orchestration/canvas.hbs → bundles/ragents.orchestration/surface.hbs} +0 -0
  1051. /package/packages/{agent-core/src → agent/src/loop}/index.ts +0 -0
  1052. /package/packages/{agent-core/src → agent/src/loop}/uuid.ts +0 -0
@@ -0,0 +1,479 @@
1
+ import { createRequire as __ragentsCreateRequire } from "node:module";
2
+ const require = __ragentsCreateRequire(import.meta.url);
3
+ import {
4
+ browserRuntimeToken
5
+ } from "./chunks/chunk-2GKLLCBE.js";
6
+
7
+ // server/index.ts
8
+ import { BROWSER_EXECUTABLE_VARIABLE } from "@ragents/workspace-executor";
9
+ import { sandboxServicesToken } from "@ragents/host/plugin-support/workspace-sandbox-host.js";
10
+ import { documentStoreToken } from "@ragents/host/ragents/document-store.js";
11
+
12
+ // server/browser.ts
13
+ import { randomUUID } from "node:crypto";
14
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
15
+ import path from "node:path";
16
+ import {
17
+ BROWSER_OPERATIONS
18
+ } from "@ragents/workspace-executor";
19
+ import { documentsApiPrefix } from "@ragents/plugins/ragents.documents/contract";
20
+ var DEFAULT_VIEWPORT = { width: 1920, height: 1080 };
21
+ var capturePath = (id) => `browser/${id}.png`;
22
+ var RunBrowser = class {
23
+ #options;
24
+ #pages = /* @__PURE__ */ new Map();
25
+ #viewports = /* @__PURE__ */ new Map();
26
+ #captures = /* @__PURE__ */ new Map();
27
+ #captureLoads = /* @__PURE__ */ new Map();
28
+ #captureWrites = /* @__PURE__ */ new Map();
29
+ #generations = /* @__PURE__ */ new Map();
30
+ #shutdown = false;
31
+ constructor(options) {
32
+ this.#options = options;
33
+ }
34
+ restore(runId) {
35
+ const loading = this.#captureLoads.get(runId);
36
+ if (loading) return loading;
37
+ const pending = this.#restore(runId).catch((error) => {
38
+ this.#captureLoads.delete(runId);
39
+ throw error;
40
+ });
41
+ this.#captureLoads.set(runId, pending);
42
+ return pending;
43
+ }
44
+ async open(runId, url, options = {}) {
45
+ options.signal?.throwIfAborted();
46
+ this.#assertRunning();
47
+ const generation = this.#generation(runId);
48
+ await this.restore(runId);
49
+ options.signal?.throwIfAborted();
50
+ this.#assertRunning();
51
+ if (generation !== this.#generation(runId)) throw new Error("Der Browser wurde beendet.");
52
+ return this.#run(runId, BROWSER_OPERATIONS.open, { url, viewport: this.#viewports.get(runId) ?? DEFAULT_VIEWPORT }, options);
53
+ }
54
+ snapshot(runId, options = {}) {
55
+ return this.#run(runId, BROWSER_OPERATIONS.snapshot, null, options);
56
+ }
57
+ /** Der gewählte Viewport gilt für den Run, auch für einen später neu gestarteten Browser. */
58
+ async viewport(runId, viewport, options = {}) {
59
+ const snapshot = await this.#run(runId, BROWSER_OPERATIONS.viewport, viewport, options);
60
+ this.#viewports.set(runId, viewport);
61
+ return snapshot;
62
+ }
63
+ click(runId, target, options = {}) {
64
+ return this.#run(runId, BROWSER_OPERATIONS.click, { target }, options);
65
+ }
66
+ fill(runId, target, value, options = {}) {
67
+ return this.#run(runId, BROWSER_OPERATIONS.fill, { target, value }, options);
68
+ }
69
+ select(runId, target, label, options = {}) {
70
+ return this.#run(runId, BROWSER_OPERATIONS.select, { target, label }, options);
71
+ }
72
+ press(runId, target, key, options = {}) {
73
+ return this.#run(runId, BROWSER_OPERATIONS.press, { target, key }, options);
74
+ }
75
+ /** Die Zeit einer bestandenen Prüfung ist die des Servers, damit sie sich mit seinen übrigen Zeiten vergleichen lässt. */
76
+ async check(runId, input, options = {}) {
77
+ const generation = this.#generation(runId);
78
+ const { result, page } = await this.#execute(runId, generation, BROWSER_OPERATIONS.check, input, options);
79
+ const checkedAt = (/* @__PURE__ */ new Date()).toISOString();
80
+ this.#observe(runId, generation, page, checkedAt);
81
+ return { checkedAt, url: result.url, assertions: result.assertions };
82
+ }
83
+ async screenshot(runId, input, options = {}) {
84
+ await this.restore(runId);
85
+ const id = randomUUID();
86
+ const image = await this.#run(runId, BROWSER_OPERATIONS.screenshot, { id, fullPage: input.fullPage ?? false }, options);
87
+ const capture = { name: input.label?.trim() || "Browseraufnahme", path: capturePath(id) };
88
+ await this.#store(runId, capture, Buffer.from(image, "base64"));
89
+ const url = this.#captureUrl(runId, capture.path);
90
+ return {
91
+ ...capture,
92
+ url,
93
+ markdown: `![${capture.name.replace(/[\[\]\\]/g, "")}](${url})`,
94
+ capturedAt: (/* @__PURE__ */ new Date()).toISOString()
95
+ };
96
+ }
97
+ async image(runId) {
98
+ const latest = this.#captures.get(runId)?.at(-1);
99
+ if (!latest) throw new Error("F\xFCr diesen Run gibt es noch keinen Browser-Screenshot. Zuerst browser_screenshot aufrufen.");
100
+ return readFile(path.join(await this.#options.filesFor(runId), latest.path));
101
+ }
102
+ evidence(runId) {
103
+ const captures = this.#captures.get(runId) ?? [];
104
+ const shown = (capture) => ({ name: capture.name, url: this.#captureUrl(runId, capture.path) });
105
+ const screenshots = captures.map(shown);
106
+ const page = this.#pages.get(runId);
107
+ if (!page) return { screenshots, currentScreenshots: [], errors: [] };
108
+ const current = page.screenshots.map((id) => captures.find((capture) => capture.path === capturePath(id))).filter((capture) => capture !== void 0);
109
+ return {
110
+ ...page.checkedAt ? { checkedAt: page.checkedAt } : {},
111
+ url: page.url,
112
+ screenshots,
113
+ currentScreenshots: current.map(shown),
114
+ errors: [...page.errors]
115
+ };
116
+ }
117
+ /** Schließt den Browser beim Executor des Runs; ein nicht verbundener Arbeitsplatz hält nichts, was sich jetzt schließen ließe. */
118
+ async close(runId) {
119
+ this.#forget(runId);
120
+ await this.#options.sandbox.execute(runId, BROWSER_OPERATIONS.close, null, { whenReachable: true });
121
+ }
122
+ async delete(runId) {
123
+ await this.close(runId);
124
+ this.#viewports.delete(runId);
125
+ this.#captures.delete(runId);
126
+ this.#captureLoads.delete(runId);
127
+ this.#captureWrites.delete(runId);
128
+ }
129
+ async shutdown() {
130
+ this.#shutdown = true;
131
+ const results = await Promise.allSettled([...this.#pages.keys()].map((runId) => this.close(runId)));
132
+ this.#viewports.clear();
133
+ this.#captures.clear();
134
+ this.#captureLoads.clear();
135
+ this.#captureWrites.clear();
136
+ const failed = results.find((result) => result.status === "rejected");
137
+ if (failed) throw failed.reason;
138
+ }
139
+ #assertRunning() {
140
+ if (this.#shutdown) throw new Error("Der Browserdienst ist beendet.");
141
+ }
142
+ #generation(runId) {
143
+ return this.#generations.get(runId) ?? 0;
144
+ }
145
+ /** Ein geschlossener Browser hat keine Seite mehr; Ergebnisse, die vorher begonnen haben, zählen danach nicht. */
146
+ #forget(runId) {
147
+ this.#generations.set(runId, this.#generation(runId) + 1);
148
+ this.#pages.delete(runId);
149
+ }
150
+ async #run(runId, operation, input, options) {
151
+ const generation = this.#generation(runId);
152
+ const { result, page } = await this.#execute(runId, generation, operation, input, options);
153
+ this.#observe(runId, generation, page);
154
+ return result;
155
+ }
156
+ async #execute(runId, generation, operation, input, options) {
157
+ try {
158
+ return await this.#options.sandbox.execute(runId, operation, input, options);
159
+ } catch (error) {
160
+ await this.#resync(runId, generation);
161
+ throw error;
162
+ }
163
+ }
164
+ /** Nach einem gescheiterten Aufruf fragt der Server den Stand der Seite nach; wer ihn nicht nennen kann, hat keine Seite. */
165
+ async #resync(runId, generation) {
166
+ const page = await this.#options.sandbox.execute(runId, BROWSER_OPERATIONS.state, null, { whenReachable: true }).then((value) => value, () => null);
167
+ this.#observe(runId, generation, page);
168
+ }
169
+ /** Nur eine bestandene Prüfung setzt die Zeit; jeder andere Stand behält sie, solange die Seite geprüft bleibt. */
170
+ #observe(runId, generation, page, checkedAt) {
171
+ if (generation !== this.#generation(runId)) return;
172
+ if (!page) {
173
+ this.#pages.delete(runId);
174
+ return;
175
+ }
176
+ const stamp = page.checked ? checkedAt ?? this.#pages.get(runId)?.checkedAt : void 0;
177
+ this.#pages.set(runId, {
178
+ url: page.url,
179
+ errors: page.errors,
180
+ screenshots: page.screenshots,
181
+ ...stamp ? { checkedAt: stamp } : {}
182
+ });
183
+ }
184
+ /** Legt eine Aufnahme in die Dateiablage des Runs und schreibt die Aufnahmeliste atomar; die Aufnahmen eines Runs der Reihe nach. */
185
+ #store(runId, capture, image) {
186
+ const previous = this.#captureWrites.get(runId) ?? Promise.resolve();
187
+ const pending = previous.then(async () => {
188
+ const directory = await this.#options.filesFor(runId);
189
+ await mkdir(path.join(directory, "browser"), { recursive: true });
190
+ await writeFile(path.join(directory, capture.path), image);
191
+ const captures = [...this.#captures.get(runId) ?? [], capture];
192
+ const manifest = path.join(directory, "browser", ".captures.json");
193
+ const temporary = `${manifest}.${randomUUID()}.tmp`;
194
+ await writeFile(temporary, JSON.stringify(captures), "utf8");
195
+ await rename(temporary, manifest);
196
+ this.#captures.set(runId, captures);
197
+ });
198
+ this.#captureWrites.set(runId, pending.then(() => void 0, () => void 0));
199
+ return pending;
200
+ }
201
+ #captureUrl(runId, filename) {
202
+ return `${documentsApiPrefix}/runs/${encodeURIComponent(runId)}/files/content?path=${encodeURIComponent(filename)}`;
203
+ }
204
+ async #restore(runId) {
205
+ const directory = await this.#options.filesFor(runId);
206
+ const manifest = path.join(directory, "browser", ".captures.json");
207
+ let content;
208
+ try {
209
+ content = await readFile(manifest, "utf8");
210
+ } catch (error) {
211
+ if (error.code !== "ENOENT") throw error;
212
+ this.#captures.set(runId, []);
213
+ return;
214
+ }
215
+ const captures = JSON.parse(content);
216
+ if (!Array.isArray(captures) || captures.some((entry) => !entry || typeof entry.name !== "string" || typeof entry.path !== "string" || !/^browser\/[a-f0-9-]{36}\.png$/.test(entry.path))) {
217
+ throw new Error("Die gespeicherte Browser-Aufnahmeliste dieses Runs ist besch\xE4digt.");
218
+ }
219
+ this.#captures.set(runId, captures);
220
+ }
221
+ };
222
+
223
+ // server/tools.ts
224
+ import { Type } from "typebox";
225
+ import { defineRunFunction } from "@ragents/engine";
226
+ import { alwaysAvailable } from "@ragents/host/plugin-support/tool-availability.js";
227
+ var targetSchema = Type.Object({
228
+ role: Type.Optional(Type.String({ minLength: 1, description: "Accessible role, e.g. button, textbox, link, combobox." })),
229
+ name: Type.Optional(Type.String({ description: "Exact accessible name for role." })),
230
+ label: Type.Optional(Type.String({ minLength: 1, description: "Exact form label." })),
231
+ text: Type.Optional(Type.String({ minLength: 1, description: "Exact visible text." })),
232
+ testId: Type.Optional(Type.String({ minLength: 1, description: "data-testid value." })),
233
+ css: Type.Optional(Type.String({ minLength: 1, description: "CSS selector for elements without useful accessible names." })),
234
+ frame: Type.Optional(Type.String({ minLength: 1, description: "CSS selector of an iframe containing the target." })),
235
+ nth: Type.Optional(Type.Integer({ minimum: 0, description: "0-based index among all matches when the target matches several elements; not together with first." })),
236
+ first: Type.Optional(Type.Boolean({ description: "Use the first match when the target matches several elements; not together with nth." }))
237
+ }, { additionalProperties: false, description: "Use exactly one of role (with optional name), label, text, testId, css. Resolve semantic targets server-side; never copy snapshot element IDs. Ambiguous targets are errors naming the candidates unless nth or first selects one." });
238
+ var snapshotSchema = Type.Object({
239
+ url: Type.String(),
240
+ title: Type.String(),
241
+ snapshot: Type.String(),
242
+ truncated: Type.Boolean(),
243
+ errors: Type.Array(Type.String())
244
+ }, { additionalProperties: false });
245
+ var emptySchema = Type.Object({}, { additionalProperties: false });
246
+ var targetInputSchema = Type.Object({ target: targetSchema }, { additionalProperties: false });
247
+ var screenshotDescription = "Capture the real browser page into this run's document library. The returned URL and Markdown display it to the user. Call browser_view_screenshot to inspect the latest capture as an image without copying a path.";
248
+ var createBrowserFunctions = (browser) => [
249
+ defineRunFunction({
250
+ name: "browser_open",
251
+ label: "Browser \xF6ffnen",
252
+ description: "Open an HTTP(S) page in this run's isolated headless browser. Returns its accessible structure and browser errors. Reuses the current run browser; other runs have separate cookies and processes.",
253
+ schema: Type.Object({ url: Type.String({ minLength: 1 }) }, { additionalProperties: false }),
254
+ resultSchema: snapshotSchema,
255
+ nativeTool: true,
256
+ available: alwaysAvailable,
257
+ executionMode: "sequential",
258
+ run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.open(caller.runId, input.url, { signal, toolCallId }) })
259
+ }),
260
+ defineRunFunction({
261
+ name: "browser_snapshot",
262
+ label: "Browser lesen",
263
+ description: "Read the current real page's accessible structure, title, URL and errors. Use role/name or labels for subsequent actions; snapshot reference IDs never need to be copied.",
264
+ schema: emptySchema,
265
+ resultSchema: snapshotSchema,
266
+ nativeTool: true,
267
+ available: alwaysAvailable,
268
+ executionMode: "sequential",
269
+ run: async ({ caller, signal }, toolCallId) => ({ ...await browser.snapshot(caller.runId, { signal, toolCallId }) })
270
+ }),
271
+ defineRunFunction({
272
+ name: "browser_click",
273
+ label: "Im Browser klicken",
274
+ description: "Click a uniquely identified visible element with Playwright auto-waiting. Returns the actual resulting page. Ambiguous or absent targets are errors.",
275
+ schema: targetInputSchema,
276
+ resultSchema: snapshotSchema,
277
+ nativeTool: true,
278
+ available: alwaysAvailable,
279
+ executionMode: "sequential",
280
+ run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.click(caller.runId, input.target, { signal, toolCallId }) })
281
+ }),
282
+ defineRunFunction({
283
+ name: "browser_fill",
284
+ label: "Browserfeld ausf\xFCllen",
285
+ description: "Fill an input or textarea by accessible label or another semantic target, firing the normal input events. Returns the resulting page.",
286
+ schema: Type.Object({ target: targetSchema, value: Type.String() }, { additionalProperties: false }),
287
+ resultSchema: snapshotSchema,
288
+ nativeTool: true,
289
+ available: alwaysAvailable,
290
+ executionMode: "sequential",
291
+ run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.fill(caller.runId, input.target, input.value, { signal, toolCallId }) })
292
+ }),
293
+ defineRunFunction({
294
+ name: "browser_select",
295
+ label: "Im Browser ausw\xE4hlen",
296
+ description: "Choose an option by its visible label in a native select element. For custom dropdowns use browser_click on the trigger and the visible option.",
297
+ schema: Type.Object({ target: targetSchema, label: Type.String({ minLength: 1 }) }, { additionalProperties: false }),
298
+ resultSchema: snapshotSchema,
299
+ nativeTool: true,
300
+ available: alwaysAvailable,
301
+ executionMode: "sequential",
302
+ run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.select(caller.runId, input.target, input.label, { signal, toolCallId }) })
303
+ }),
304
+ defineRunFunction({
305
+ name: "browser_press",
306
+ label: "Browsertaste dr\xFCcken",
307
+ description: "Focus a target and press a Playwright key or chord such as Enter, Escape, Tab or ControlOrMeta+A. Returns the resulting page.",
308
+ schema: Type.Object({ target: targetSchema, key: Type.String({ minLength: 1 }) }, { additionalProperties: false }),
309
+ resultSchema: snapshotSchema,
310
+ nativeTool: true,
311
+ available: alwaysAvailable,
312
+ executionMode: "sequential",
313
+ run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.press(caller.runId, input.target, input.key, { signal, toolCallId }) })
314
+ }),
315
+ defineRunFunction({
316
+ name: "browser_check",
317
+ label: "Browserergebnis pr\xFCfen",
318
+ description: "Assert visible target/text, resulting URL and absence of browser errors. Fails on mismatch; records successful evidence for this page until the next action/navigation/error. Supply at least one assertion. Browser errors are checked by default. Visibility assertions wait at most 5 seconds, shorter than actions.",
319
+ schema: Type.Object({
320
+ target: Type.Optional(targetSchema),
321
+ text: Type.Optional(Type.String({ minLength: 1 })),
322
+ url: Type.Optional(Type.String({ minLength: 1 })),
323
+ count: Type.Optional(Type.Integer({ minimum: 0, description: "Expected number of visible matches of target instead of exactly one; 0 asserts absence. Requires target without nth or first." })),
324
+ noErrors: Type.Optional(Type.Boolean({ description: "true (default): the check also fails on any browser error collected since the last navigation. false: ignore browser errors and judge only the assertions; use this when the page has known noise such as 404s or third-party script errors that are not part of the check." }))
325
+ }, { additionalProperties: false }),
326
+ resultSchema: Type.Object({ checkedAt: Type.String(), url: Type.String(), assertions: Type.Array(Type.String()) }, { additionalProperties: false }),
327
+ nativeTool: true,
328
+ available: alwaysAvailable,
329
+ executionMode: "sequential",
330
+ run: ({ caller, signal }, toolCallId, input) => browser.check(caller.runId, input, { signal, toolCallId })
331
+ }),
332
+ defineRunFunction({
333
+ name: "browser_viewport",
334
+ label: "Browsergr\xF6\xDFe setzen",
335
+ description: "Resize the page viewport in CSS pixels, for example to check a narrow layout. The default is 1920 x 1080 (16:9) and screenshots use the viewport size at scale 1; the chosen size stays for the run until changed again. Returns the resulting page.",
336
+ schema: Type.Object({
337
+ width: Type.Integer({ minimum: 320, maximum: 3840 }),
338
+ height: Type.Integer({ minimum: 240, maximum: 2160 })
339
+ }, { additionalProperties: false }),
340
+ resultSchema: snapshotSchema,
341
+ available: alwaysAvailable,
342
+ executionMode: "sequential",
343
+ run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.viewport(caller.runId, input, { signal, toolCallId }) })
344
+ }),
345
+ defineRunFunction({
346
+ name: "browser_screenshot",
347
+ label: "Browser aufnehmen",
348
+ description: screenshotDescription,
349
+ schema: Type.Object({ label: Type.Optional(Type.String({ maxLength: 200 })), fullPage: Type.Optional(Type.Boolean()) }, { additionalProperties: false }),
350
+ resultSchema: Type.Object({
351
+ name: Type.String(),
352
+ path: Type.String(),
353
+ url: Type.String(),
354
+ markdown: Type.String(),
355
+ capturedAt: Type.String()
356
+ }, { additionalProperties: false }),
357
+ nativeTool: true,
358
+ available: alwaysAvailable,
359
+ executionMode: "sequential",
360
+ run: ({ caller, signal }, toolCallId, input) => browser.screenshot(caller.runId, input, { signal, toolCallId })
361
+ }),
362
+ defineRunFunction({
363
+ name: "browser_view_screenshot",
364
+ label: "Browseraufnahme ansehen",
365
+ description: "View this run's latest screenshot as native image input without a path. Invoke this native tool directly to receive pixels; calling it through TypeScript only verifies image availability. Requires an image-capable model for native image input.",
366
+ nativeTool: true,
367
+ schema: emptySchema,
368
+ resultSchema: Type.String(),
369
+ available: alwaysAvailable,
370
+ executionMode: "sequential",
371
+ run: async ({ caller, signal }) => {
372
+ signal?.throwIfAborted();
373
+ await browser.image(caller.runId);
374
+ return "Letzte Browseraufnahme dieses Runs ist verf\xFCgbar.";
375
+ }
376
+ }),
377
+ defineRunFunction({
378
+ name: "browser_close",
379
+ label: "Browser schlie\xDFen",
380
+ description: "Close this run's browser and discard its cookies. Saved screenshots remain in the document library.",
381
+ schema: emptySchema,
382
+ resultSchema: Type.Object({ closed: Type.Boolean() }, { additionalProperties: false }),
383
+ nativeTool: true,
384
+ available: alwaysAvailable,
385
+ executionMode: "sequential",
386
+ run: async ({ caller }) => {
387
+ await browser.close(caller.runId);
388
+ return { closed: true };
389
+ }
390
+ })
391
+ ];
392
+ var createBrowserImageContribution = (browser) => ({
393
+ id: "ragents.browser.image",
394
+ afterToolCall: async ({ runId }, outcome, call) => {
395
+ if (outcome.toolName !== "browser_view_screenshot" || outcome.isError) return void 0;
396
+ try {
397
+ call.signal?.throwIfAborted();
398
+ if (!call.modelReadsImages) throw new Error("Das gew\xE4hlte Modell unterst\xFCtzt keine Bilder. Screenshot \xFCber die Dokumente ansehen oder ein bildf\xE4higes Modell w\xE4hlen.");
399
+ const data = (await browser.image(runId)).toString("base64");
400
+ call.signal?.throwIfAborted();
401
+ return { content: [
402
+ { type: "text", text: "Letzte Browseraufnahme dieses Runs." },
403
+ { type: "image", data, mimeType: "image/png" }
404
+ ] };
405
+ } catch (error) {
406
+ return { content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }], isError: true };
407
+ }
408
+ }
409
+ });
410
+
411
+ // server/index.ts
412
+ var browserConfigDescriptors = [{ key: BROWSER_EXECUTABLE_VARIABLE, source: "environment" }];
413
+ var browserPlugin = {
414
+ manifest: { id: "ragents.browser" },
415
+ register: (host) => {
416
+ const documents = host.service(documentStoreToken);
417
+ const browser = new RunBrowser({
418
+ sandbox: host.service(sandboxServicesToken),
419
+ filesFor: (runId) => documents.directoryFor(runId)
420
+ });
421
+ host.config(...browserConfigDescriptors);
422
+ host.provide(browserRuntimeToken, browser);
423
+ host.functions(...createBrowserFunctions(browser));
424
+ host.agentRuntime(createBrowserImageContribution(browser));
425
+ host.lifecycle({
426
+ id: "ragents.browser.lifecycle",
427
+ prepareSession: ({ runId }) => browser.restore(runId),
428
+ stopSession: ({ runId }) => browser.close(runId),
429
+ afterStopSession: ({ runId }) => browser.close(runId),
430
+ deleteSession: ({ runId }) => browser.delete(runId),
431
+ shutdown: () => browser.shutdown()
432
+ });
433
+ }
434
+ };
435
+ var plugin = { requires: ["ragents.documents"], create: () => browserPlugin };
436
+
437
+ // provision.ts
438
+ import { spawn } from "node:child_process";
439
+ import { access, constants } from "node:fs/promises";
440
+ import path2 from "node:path";
441
+ import { chromium } from "playwright-core";
442
+ import { BROWSER_EXECUTABLE_VARIABLE as BROWSER_EXECUTABLE_VARIABLE2 } from "@ragents/workspace-executor";
443
+ import {
444
+ hostPackageFolder,
445
+ provisionGap,
446
+ provisionReady
447
+ } from "@ragents/host/plugin-support/provision.js";
448
+ var executable = async (file) => access(file, constants.X_OK).then(() => true, () => false);
449
+ var playwrightCli = () => path2.join(hostPackageFolder("playwright-core"), "cli.js");
450
+ var install = (log) => new Promise((resolve, reject) => {
451
+ const child = spawn(process.execPath, [playwrightCli(), "install", ...process.platform === "linux" ? ["--with-deps"] : [], "chromium"], { stdio: ["ignore", "pipe", "pipe"] });
452
+ for (const stream of [child.stdout, child.stderr]) stream.on("data", (chunk) => log(chunk.toString().trimEnd()));
453
+ child.once("error", reject);
454
+ child.once("exit", (code) => code === 0 ? resolve() : reject(new Error(`playwright-core install chromium endete mit Code ${code}`)));
455
+ });
456
+ var createBrowserProvision = () => ({
457
+ check: async () => {
458
+ const configured = process.env[BROWSER_EXECUTABLE_VARIABLE2];
459
+ if (configured) {
460
+ return await executable(configured) ? provisionReady : provisionGap("browser", `${BROWSER_EXECUTABLE_VARIABLE2} nennt ${configured}; dort gibt es keinen ausf\xFChrbaren Browser`, false);
461
+ }
462
+ const bundled = chromium.executablePath();
463
+ return await executable(bundled) ? provisionReady : provisionGap("chromium", `Chromium fehlt unter ${bundled}; entweder ${BROWSER_EXECUTABLE_VARIABLE2} auf einen vorhandenen Chrome setzen (auf einem Server in der Profilsektion ragents.browser, auf einem Arbeitsplatz in seiner Umgebung) oder die Provisionierung den Browser laden lassen`, true);
464
+ },
465
+ apply: async (_target, log) => {
466
+ const state = await createBrowserProvision().check("");
467
+ if (state.kind === "ready") return;
468
+ if (!state.installable) throw new Error(state.instruction);
469
+ log("Chromium f\xFCr playwright-core laden");
470
+ await install(log);
471
+ }
472
+ });
473
+ var provision = createBrowserProvision();
474
+ export {
475
+ browserConfigDescriptors,
476
+ plugin,
477
+ provision
478
+ };
479
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../plugins/ragents.browser/server/index.ts", "../../../plugins/ragents.browser/server/browser.ts", "../../../plugins/ragents.browser/server/tools.ts", "../../../plugins/ragents.browser/provision.ts"],
4
+ "sourcesContent": ["import type { RAgentsPlugin } from \"@ragents/engine\";\nimport { BROWSER_EXECUTABLE_VARIABLE } from \"@ragents/workspace-executor\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { sandboxServicesToken } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport { documentStoreToken } from \"@ragents/host/ragents/document-store.js\";\nimport { RunBrowser } from \"./browser.js\";\nimport { browserRuntimeToken } from \"./contract.js\";\nimport { createBrowserFunctions, createBrowserImageContribution } from \"./tools.js\";\n\n/** Der Executor des Servers liest den Wert aus seiner Umgebung; ein Arbeitsplatz aus seiner eigenen, nie aus dem Profil. */\nexport const browserConfigDescriptors = [{ key: BROWSER_EXECUTABLE_VARIABLE, source: \"environment\" }] as const;\n\nconst browserPlugin: RAgentsPlugin = {\n manifest: { id: \"ragents.browser\" },\n register: (host) => {\n const documents = host.service(documentStoreToken);\n const browser = new RunBrowser({\n sandbox: host.service(sandboxServicesToken),\n filesFor: (runId) => documents.directoryFor(runId),\n });\n host.config(...browserConfigDescriptors);\n host.provide(browserRuntimeToken, browser);\n host.functions(...createBrowserFunctions(browser));\n host.agentRuntime(createBrowserImageContribution(browser));\n host.lifecycle({\n id: \"ragents.browser.lifecycle\",\n prepareSession: ({ runId }) => browser.restore(runId),\n stopSession: ({ runId }) => browser.close(runId),\n afterStopSession: ({ runId }) => browser.close(runId),\n deleteSession: ({ runId }) => browser.delete(runId),\n shutdown: () => browser.shutdown(),\n });\n },\n};\n\nexport const plugin: PluginModule = { requires: [\"ragents.documents\"], create: () => browserPlugin };\n", "import { randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n BROWSER_OPERATIONS,\n type BrowserCheck,\n type BrowserCheckResult,\n type BrowserPageState,\n type BrowserSnapshot,\n type BrowserStep,\n type BrowserTarget,\n type BrowserViewport,\n} from \"@ragents/workspace-executor\";\nimport type { SandboxServices } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport { documentsApiPrefix } from \"@ragents/plugins/ragents.documents/contract.js\";\nimport type { BrowserCallOptions, BrowserEvidence, BrowserRuntime } from \"./contract.js\";\n\nexport const DEFAULT_VIEWPORT: BrowserViewport = { width: 1920, height: 1080 };\n\ninterface SavedCapture {\n name: string;\n path: string;\n}\n\n/** Was der Server von der Seite eines Runs wei\u00DF: den zuletzt gemeldeten Stand und die Zeit der letzten bestandenen Pr\u00FCfung. */\ninterface ObservedPage {\n url: string;\n checkedAt?: string;\n errors: string[];\n screenshots: string[];\n}\n\nexport interface BrowserOptions {\n sandbox: Pick<SandboxServices, \"execute\">;\n filesFor: (runId: string) => Promise<string>;\n}\n\nconst capturePath = (id: string): string => `browser/${id}.png`;\n\n/** Die Browserpr\u00FCfung eines Runs: die Seite lebt beim Executor des Runs, Evidenz, Aufnahmen und Viewport h\u00E4lt der Server. */\nexport class RunBrowser implements BrowserRuntime {\n readonly #options: BrowserOptions;\n readonly #pages = new Map<string, ObservedPage>();\n readonly #viewports = new Map<string, BrowserViewport>();\n readonly #captures = new Map<string, SavedCapture[]>();\n readonly #captureLoads = new Map<string, Promise<void>>();\n readonly #captureWrites = new Map<string, Promise<void>>();\n readonly #generations = new Map<string, number>();\n #shutdown = false;\n\n constructor(options: BrowserOptions) {\n this.#options = options;\n }\n\n restore(runId: string): Promise<void> {\n const loading = this.#captureLoads.get(runId);\n if (loading) return loading;\n const pending = this.#restore(runId).catch((error) => { this.#captureLoads.delete(runId); throw error; });\n this.#captureLoads.set(runId, pending);\n return pending;\n }\n\n async open(runId: string, url: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n options.signal?.throwIfAborted();\n this.#assertRunning();\n const generation = this.#generation(runId);\n await this.restore(runId);\n options.signal?.throwIfAborted();\n this.#assertRunning();\n if (generation !== this.#generation(runId)) throw new Error(\"Der Browser wurde beendet.\");\n return this.#run(runId, BROWSER_OPERATIONS.open, { url, viewport: this.#viewports.get(runId) ?? DEFAULT_VIEWPORT }, options);\n }\n\n snapshot(runId: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.snapshot, null, options);\n }\n\n /** Der gew\u00E4hlte Viewport gilt f\u00FCr den Run, auch f\u00FCr einen sp\u00E4ter neu gestarteten Browser. */\n async viewport(runId: string, viewport: BrowserViewport, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n const snapshot = await this.#run<BrowserSnapshot>(runId, BROWSER_OPERATIONS.viewport, viewport, options);\n this.#viewports.set(runId, viewport);\n return snapshot;\n }\n\n click(runId: string, target: BrowserTarget, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.click, { target }, options);\n }\n\n fill(runId: string, target: BrowserTarget, value: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.fill, { target, value }, options);\n }\n\n select(runId: string, target: BrowserTarget, label: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.select, { target, label }, options);\n }\n\n press(runId: string, target: BrowserTarget, key: string, options: BrowserCallOptions = {}): Promise<BrowserSnapshot> {\n return this.#run(runId, BROWSER_OPERATIONS.press, { target, key }, options);\n }\n\n /** Die Zeit einer bestandenen Pr\u00FCfung ist die des Servers, damit sie sich mit seinen \u00FCbrigen Zeiten vergleichen l\u00E4sst. */\n async check(runId: string, input: BrowserCheck, options: BrowserCallOptions = {}): Promise<{ checkedAt: string; url: string; assertions: string[] }> {\n const generation = this.#generation(runId);\n const { result, page } = await this.#execute<BrowserCheckResult>(runId, generation, BROWSER_OPERATIONS.check, input, options);\n const checkedAt = new Date().toISOString();\n this.#observe(runId, generation, page, checkedAt);\n return { checkedAt, url: result.url, assertions: result.assertions };\n }\n\n async screenshot(runId: string, input: { label?: string; fullPage?: boolean }, options: BrowserCallOptions = {}): Promise<{\n name: string;\n path: string;\n url: string;\n markdown: string;\n capturedAt: string;\n }> {\n await this.restore(runId);\n const id = randomUUID();\n const image = await this.#run<string>(runId, BROWSER_OPERATIONS.screenshot, { id, fullPage: input.fullPage ?? false }, options);\n const capture = { name: input.label?.trim() || \"Browseraufnahme\", path: capturePath(id) };\n await this.#store(runId, capture, Buffer.from(image, \"base64\"));\n const url = this.#captureUrl(runId, capture.path);\n return {\n ...capture,\n url,\n markdown: `![${capture.name.replace(/[\\[\\]\\\\]/g, \"\")}](${url})`,\n capturedAt: new Date().toISOString(),\n };\n }\n\n async image(runId: string): Promise<Buffer> {\n const latest = this.#captures.get(runId)?.at(-1);\n if (!latest) throw new Error(\"F\u00FCr diesen Run gibt es noch keinen Browser-Screenshot. Zuerst browser_screenshot aufrufen.\");\n return readFile(path.join(await this.#options.filesFor(runId), latest.path));\n }\n\n evidence(runId: string): BrowserEvidence {\n const captures = this.#captures.get(runId) ?? [];\n const shown = (capture: SavedCapture) => ({ name: capture.name, url: this.#captureUrl(runId, capture.path) });\n const screenshots = captures.map(shown);\n const page = this.#pages.get(runId);\n if (!page) return { screenshots, currentScreenshots: [], errors: [] };\n const current = page.screenshots\n .map((id) => captures.find((capture) => capture.path === capturePath(id)))\n .filter((capture): capture is SavedCapture => capture !== undefined);\n return {\n ...(page.checkedAt ? { checkedAt: page.checkedAt } : {}),\n url: page.url,\n screenshots,\n currentScreenshots: current.map(shown),\n errors: [...page.errors],\n };\n }\n\n /** Schlie\u00DFt den Browser beim Executor des Runs; ein nicht verbundener Arbeitsplatz h\u00E4lt nichts, was sich jetzt schlie\u00DFen lie\u00DFe. */\n async close(runId: string): Promise<void> {\n this.#forget(runId);\n await this.#options.sandbox.execute(runId, BROWSER_OPERATIONS.close, null, { whenReachable: true });\n }\n\n async delete(runId: string): Promise<void> {\n await this.close(runId);\n this.#viewports.delete(runId);\n this.#captures.delete(runId);\n this.#captureLoads.delete(runId);\n this.#captureWrites.delete(runId);\n }\n\n async shutdown(): Promise<void> {\n this.#shutdown = true;\n const results = await Promise.allSettled([...this.#pages.keys()].map((runId) => this.close(runId)));\n this.#viewports.clear();\n this.#captures.clear();\n this.#captureLoads.clear();\n this.#captureWrites.clear();\n const failed = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\n if (failed) throw failed.reason;\n }\n\n #assertRunning(): void {\n if (this.#shutdown) throw new Error(\"Der Browserdienst ist beendet.\");\n }\n\n #generation(runId: string): number {\n return this.#generations.get(runId) ?? 0;\n }\n\n /** Ein geschlossener Browser hat keine Seite mehr; Ergebnisse, die vorher begonnen haben, z\u00E4hlen danach nicht. */\n #forget(runId: string): void {\n this.#generations.set(runId, this.#generation(runId) + 1);\n this.#pages.delete(runId);\n }\n\n async #run<T>(runId: string, operation: string, input: unknown, options: BrowserCallOptions): Promise<T> {\n const generation = this.#generation(runId);\n const { result, page } = await this.#execute<T>(runId, generation, operation, input, options);\n this.#observe(runId, generation, page);\n return result;\n }\n\n async #execute<T>(runId: string, generation: number, operation: string, input: unknown, options: BrowserCallOptions): Promise<BrowserStep<T>> {\n try {\n return await this.#options.sandbox.execute(runId, operation, input, options) as BrowserStep<T>;\n } catch (error) {\n await this.#resync(runId, generation);\n throw error;\n }\n }\n\n /** Nach einem gescheiterten Aufruf fragt der Server den Stand der Seite nach; wer ihn nicht nennen kann, hat keine Seite. */\n async #resync(runId: string, generation: number): Promise<void> {\n const page = await this.#options.sandbox.execute(runId, BROWSER_OPERATIONS.state, null, { whenReachable: true })\n .then((value) => value as BrowserPageState | null, () => null);\n this.#observe(runId, generation, page);\n }\n\n /** Nur eine bestandene Pr\u00FCfung setzt die Zeit; jeder andere Stand beh\u00E4lt sie, solange die Seite gepr\u00FCft bleibt. */\n #observe(runId: string, generation: number, page: BrowserPageState | null, checkedAt?: string): void {\n if (generation !== this.#generation(runId)) return;\n if (!page) {\n this.#pages.delete(runId);\n return;\n }\n const stamp = page.checked ? checkedAt ?? this.#pages.get(runId)?.checkedAt : undefined;\n this.#pages.set(runId, {\n url: page.url,\n errors: page.errors,\n screenshots: page.screenshots,\n ...(stamp ? { checkedAt: stamp } : {}),\n });\n }\n\n /** Legt eine Aufnahme in die Dateiablage des Runs und schreibt die Aufnahmeliste atomar; die Aufnahmen eines Runs der Reihe nach. */\n #store(runId: string, capture: SavedCapture, image: Buffer): Promise<void> {\n const previous = this.#captureWrites.get(runId) ?? Promise.resolve();\n const pending = previous.then(async () => {\n const directory = await this.#options.filesFor(runId);\n await mkdir(path.join(directory, \"browser\"), { recursive: true });\n await writeFile(path.join(directory, capture.path), image);\n const captures = [...this.#captures.get(runId) ?? [], capture];\n const manifest = path.join(directory, \"browser\", \".captures.json\");\n const temporary = `${manifest}.${randomUUID()}.tmp`;\n await writeFile(temporary, JSON.stringify(captures), \"utf8\");\n await rename(temporary, manifest);\n this.#captures.set(runId, captures);\n });\n this.#captureWrites.set(runId, pending.then(() => undefined, () => undefined));\n return pending;\n }\n\n #captureUrl(runId: string, filename: string): string {\n return `${documentsApiPrefix}/runs/${encodeURIComponent(runId)}/files/content?path=${encodeURIComponent(filename)}`;\n }\n\n async #restore(runId: string): Promise<void> {\n const directory = await this.#options.filesFor(runId);\n const manifest = path.join(directory, \"browser\", \".captures.json\");\n let content: string;\n try { content = await readFile(manifest, \"utf8\"); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n this.#captures.set(runId, []);\n return;\n }\n const captures: unknown = JSON.parse(content);\n if (!Array.isArray(captures) || captures.some((entry) => !entry || typeof entry.name !== \"string\"\n || typeof entry.path !== \"string\" || !/^browser\\/[a-f0-9-]{36}\\.png$/.test(entry.path))) {\n throw new Error(\"Die gespeicherte Browser-Aufnahmeliste dieses Runs ist besch\u00E4digt.\");\n }\n this.#captures.set(runId, captures);\n }\n}\n", "import { Type } from \"typebox\";\nimport { defineRunFunction, type AgentContribution, type RunFunction } from \"@ragents/engine\";\nimport { alwaysAvailable } from \"@ragents/host/plugin-support/tool-availability.js\";\nimport { RunBrowser } from \"./browser.js\";\n\nconst targetSchema = Type.Object({\n role: Type.Optional(Type.String({ minLength: 1, description: \"Accessible role, e.g. button, textbox, link, combobox.\" })),\n name: Type.Optional(Type.String({ description: \"Exact accessible name for role.\" })),\n label: Type.Optional(Type.String({ minLength: 1, description: \"Exact form label.\" })),\n text: Type.Optional(Type.String({ minLength: 1, description: \"Exact visible text.\" })),\n testId: Type.Optional(Type.String({ minLength: 1, description: \"data-testid value.\" })),\n css: Type.Optional(Type.String({ minLength: 1, description: \"CSS selector for elements without useful accessible names.\" })),\n frame: Type.Optional(Type.String({ minLength: 1, description: \"CSS selector of an iframe containing the target.\" })),\n nth: Type.Optional(Type.Integer({ minimum: 0, description: \"0-based index among all matches when the target matches several elements; not together with first.\" })),\n first: Type.Optional(Type.Boolean({ description: \"Use the first match when the target matches several elements; not together with nth.\" })),\n}, { additionalProperties: false, description: \"Use exactly one of role (with optional name), label, text, testId, css. Resolve semantic targets server-side; never copy snapshot element IDs. Ambiguous targets are errors naming the candidates unless nth or first selects one.\" });\n\nconst snapshotSchema = Type.Object({\n url: Type.String(),\n title: Type.String(),\n snapshot: Type.String(),\n truncated: Type.Boolean(),\n errors: Type.Array(Type.String()),\n}, { additionalProperties: false });\n\nconst emptySchema = Type.Object({}, { additionalProperties: false });\nconst targetInputSchema = Type.Object({ target: targetSchema }, { additionalProperties: false });\nconst screenshotDescription = \"Capture the real browser page into this run's document library. The returned URL and Markdown display it to the user. Call browser_view_screenshot to inspect the latest capture as an image without copying a path.\";\n\nexport const createBrowserFunctions = (browser: RunBrowser): RunFunction[] => [\n defineRunFunction({\n name: \"browser_open\",\n label: \"Browser \u00F6ffnen\",\n description: \"Open an HTTP(S) page in this run's isolated headless browser. Returns its accessible structure and browser errors. Reuses the current run browser; other runs have separate cookies and processes.\",\n schema: Type.Object({ url: Type.String({ minLength: 1 }) }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.open(caller.runId, input.url, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_snapshot\",\n label: \"Browser lesen\",\n description: \"Read the current real page's accessible structure, title, URL and errors. Use role/name or labels for subsequent actions; snapshot reference IDs never need to be copied.\",\n schema: emptySchema,\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId) => ({ ...await browser.snapshot(caller.runId, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_click\",\n label: \"Im Browser klicken\",\n description: \"Click a uniquely identified visible element with Playwright auto-waiting. Returns the actual resulting page. Ambiguous or absent targets are errors.\",\n schema: targetInputSchema,\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.click(caller.runId, input.target, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_fill\",\n label: \"Browserfeld ausf\u00FCllen\",\n description: \"Fill an input or textarea by accessible label or another semantic target, firing the normal input events. Returns the resulting page.\",\n schema: Type.Object({ target: targetSchema, value: Type.String() }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.fill(caller.runId, input.target, input.value, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_select\",\n label: \"Im Browser ausw\u00E4hlen\",\n description: \"Choose an option by its visible label in a native select element. For custom dropdowns use browser_click on the trigger and the visible option.\",\n schema: Type.Object({ target: targetSchema, label: Type.String({ minLength: 1 }) }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.select(caller.runId, input.target, input.label, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_press\",\n label: \"Browsertaste dr\u00FCcken\",\n description: \"Focus a target and press a Playwright key or chord such as Enter, Escape, Tab or ControlOrMeta+A. Returns the resulting page.\",\n schema: Type.Object({ target: targetSchema, key: Type.String({ minLength: 1 }) }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.press(caller.runId, input.target, input.key, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_check\",\n label: \"Browserergebnis pr\u00FCfen\",\n description: \"Assert visible target/text, resulting URL and absence of browser errors. Fails on mismatch; records successful evidence for this page until the next action/navigation/error. Supply at least one assertion. Browser errors are checked by default. Visibility assertions wait at most 5 seconds, shorter than actions.\",\n schema: Type.Object({\n target: Type.Optional(targetSchema),\n text: Type.Optional(Type.String({ minLength: 1 })),\n url: Type.Optional(Type.String({ minLength: 1 })),\n count: Type.Optional(Type.Integer({ minimum: 0, description: \"Expected number of visible matches of target instead of exactly one; 0 asserts absence. Requires target without nth or first.\" })),\n noErrors: Type.Optional(Type.Boolean({ description: \"true (default): the check also fails on any browser error collected since the last navigation. false: ignore browser errors and judge only the assertions; use this when the page has known noise such as 404s or third-party script errors that are not part of the check.\" })),\n }, { additionalProperties: false }),\n resultSchema: Type.Object({ checkedAt: Type.String(), url: Type.String(), assertions: Type.Array(Type.String()) }, { additionalProperties: false }),\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: ({ caller, signal }, toolCallId, input) => browser.check(caller.runId, input, { signal, toolCallId }),\n }),\n defineRunFunction({\n name: \"browser_viewport\",\n label: \"Browsergr\u00F6\u00DFe setzen\",\n description: \"Resize the page viewport in CSS pixels, for example to check a narrow layout. The default is 1920 x 1080 (16:9) and screenshots use the viewport size at scale 1; the chosen size stays for the run until changed again. Returns the resulting page.\",\n schema: Type.Object({\n width: Type.Integer({ minimum: 320, maximum: 3840 }),\n height: Type.Integer({ minimum: 240, maximum: 2160 }),\n }, { additionalProperties: false }),\n resultSchema: snapshotSchema,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }, toolCallId, input) => ({ ...await browser.viewport(caller.runId, input, { signal, toolCallId }) }),\n }),\n defineRunFunction({\n name: \"browser_screenshot\",\n label: \"Browser aufnehmen\",\n description: screenshotDescription,\n schema: Type.Object({ label: Type.Optional(Type.String({ maxLength: 200 })), fullPage: Type.Optional(Type.Boolean()) }, { additionalProperties: false }),\n resultSchema: Type.Object({\n name: Type.String(),\n path: Type.String(),\n url: Type.String(),\n markdown: Type.String(),\n capturedAt: Type.String(),\n }, { additionalProperties: false }),\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: ({ caller, signal }, toolCallId, input) => browser.screenshot(caller.runId, input, { signal, toolCallId }),\n }),\n defineRunFunction({\n name: \"browser_view_screenshot\",\n label: \"Browseraufnahme ansehen\",\n description: \"View this run's latest screenshot as native image input without a path. Invoke this native tool directly to receive pixels; calling it through TypeScript only verifies image availability. Requires an image-capable model for native image input.\",\n nativeTool: true,\n schema: emptySchema,\n resultSchema: Type.String(),\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller, signal }) => {\n signal?.throwIfAborted();\n await browser.image(caller.runId);\n return \"Letzte Browseraufnahme dieses Runs ist verf\u00FCgbar.\";\n },\n }),\n defineRunFunction({\n name: \"browser_close\",\n label: \"Browser schlie\u00DFen\",\n description: \"Close this run's browser and discard its cookies. Saved screenshots remain in the document library.\",\n schema: emptySchema,\n resultSchema: Type.Object({ closed: Type.Boolean() }, { additionalProperties: false }),\n nativeTool: true,\n available: alwaysAvailable,\n executionMode: \"sequential\",\n run: async ({ caller }) => { await browser.close(caller.runId); return { closed: true }; },\n }),\n];\n\nexport const createBrowserImageContribution = (browser: RunBrowser): AgentContribution => ({\n id: \"ragents.browser.image\",\n afterToolCall: async ({ runId }, outcome, call) => {\n if (outcome.toolName !== \"browser_view_screenshot\" || outcome.isError) return undefined;\n try {\n call.signal?.throwIfAborted();\n if (!call.modelReadsImages) throw new Error(\"Das gew\u00E4hlte Modell unterst\u00FCtzt keine Bilder. Screenshot \u00FCber die Dokumente ansehen oder ein bildf\u00E4higes Modell w\u00E4hlen.\");\n const data = (await browser.image(runId)).toString(\"base64\");\n call.signal?.throwIfAborted();\n return { content: [\n { type: \"text\", text: \"Letzte Browseraufnahme dieses Runs.\" },\n { type: \"image\", data, mimeType: \"image/png\" },\n ] };\n } catch (error) {\n return { content: [{ type: \"text\", text: error instanceof Error ? error.message : String(error) }], isError: true };\n }\n },\n});\n", "import { spawn } from \"node:child_process\";\nimport { access, constants } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { chromium } from \"playwright-core\";\nimport { BROWSER_EXECUTABLE_VARIABLE } from \"@ragents/workspace-executor\";\nimport {\n hostPackageFolder,\n provisionGap,\n provisionReady,\n type PluginProvision,\n} from \"@ragents/host/plugin-support/provision.js\";\n\nconst executable = async (file: string): Promise<boolean> => access(file, constants.X_OK).then(() => true, () => false);\n\nconst playwrightCli = (): string => path.join(hostPackageFolder(\"playwright-core\"), \"cli.js\");\n\nconst install = (log: (line: string) => void): Promise<void> => new Promise((resolve, reject) => {\n const child = spawn(process.execPath, [playwrightCli(), \"install\", ...(process.platform === \"linux\" ? [\"--with-deps\"] : []), \"chromium\"], { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n for (const stream of [child.stdout, child.stderr]) stream.on(\"data\", (chunk: Buffer) => log(chunk.toString().trimEnd()));\n child.once(\"error\", reject);\n child.once(\"exit\", (code) => code === 0 ? resolve() : reject(new Error(`playwright-core install chromium endete mit Code ${code}`)));\n});\n\n// Playwright verwaltet seinen Browsercache selbst; der Werkzeugordner des Plugins bleibt leer.\nexport const createBrowserProvision = (): PluginProvision => ({\n check: async () => {\n const configured = process.env[BROWSER_EXECUTABLE_VARIABLE];\n if (configured) {\n return await executable(configured)\n ? provisionReady\n : provisionGap(\"browser\", `${BROWSER_EXECUTABLE_VARIABLE} nennt ${configured}; dort gibt es keinen ausf\u00FChrbaren Browser`, false);\n }\n const bundled = chromium.executablePath();\n return await executable(bundled)\n ? provisionReady\n : provisionGap(\"chromium\", `Chromium fehlt unter ${bundled}; entweder ${BROWSER_EXECUTABLE_VARIABLE} auf einen vorhandenen Chrome `\n + \"setzen (auf einem Server in der Profilsektion ragents.browser, auf einem Arbeitsplatz in seiner Umgebung) oder die \"\n + \"Provisionierung den Browser laden lassen\", true);\n },\n apply: async (_target, log) => {\n const state = await createBrowserProvision().check(\"\");\n if (state.kind === \"ready\") return;\n if (!state.installable) throw new Error(state.instruction);\n log(\"Chromium f\u00FCr playwright-core laden\");\n await install(log);\n },\n});\n\nexport const provision = createBrowserProvision();\n"],
5
+ "mappings": "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",
6
+ "names": ["path", "BROWSER_EXECUTABLE_VARIABLE"]
7
+ }
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: browser-testing
3
+ description: Prüfe eine laufende Webanwendung mit echten Browseraktionen, sichtbaren Ergebnissen und Screenshots.
4
+ ---
5
+
6
+ # Webanwendung prüfen
7
+
8
+ Verwende die TypeScript-Funktionen `browser_open`, `browser_snapshot`, `browser_click`,
9
+ `browser_fill`, `browser_select`, `browser_press`, `browser_check`, `browser_viewport`,
10
+ `browser_screenshot` und `browser_close`. Lade deren genaue Verträge mit `typescript_api`.
11
+
12
+ 1. Starte die Anwendung mit ihren tatsächlichen Diensten und warte auf deren Bereitschaft.
13
+ 2. Öffne ihre HTTP-Adresse mit `browser_open`. Jeder Run hat einen eigenen Browser ohne
14
+ übernommene Anmeldung. Er läuft auf dem Rechner Deines Arbeitsbereichs; eine dort gestartete
15
+ Anwendung erreichst Du über `localhost`. Melde fehlende Dienste und Browser-Voraussetzungen
16
+ ausdrücklich.
17
+ 3. Lies den Snapshot und bediene den tatsächlichen Nutzerweg. Wähle Ziele über sichtbare
18
+ Rollen/Namen oder Feldbeschriftungen, beispielsweise `{ role: "button", name: "Speichern" }`.
19
+ Die Auflösung erfolgt im Browser. Snapshot-IDs werden nicht abgeschrieben.
20
+ 4. Prüfe Erfolg und relevante Fehlerfälle mit `browser_check`: sichtbares Ergebnis, Zieladresse
21
+ und Browserfehler. Ein Typecheck oder Screenshot allein belegt keinen erfolgreichen Nutzerweg.
22
+ Nach jeder Aktion ist eine neue Prüfung nötig. Erfinde keine Ergebnisse bei fehlendem Netz.
23
+ 5. Erzeuge mit `browser_screenshot` echte Aufnahmen. Übernimm `url` oder `markdown`
24
+ programmatisch in den Ergebnisbericht oder die Mini-App. Das Bild liegt in der Dateiablage
25
+ dieses Runs. Das native Werkzeug `browser_view_screenshot` zeigt Dir die letzte Aufnahme
26
+ ohne Pfadangabe; dafür benötigt Dein Modell Bildunterstützung. Der Viewport ist standardmäßig
27
+ 1920 x 1080 (16:9); für schmale Layouts oder kleine Bildschirme stellst Du ihn mit
28
+ `browser_viewport` um und prüfst danach erneut.
29
+ 6. Benenne geprüfte Schritte und verbleibende Grenzen. Schließe den Browser nach Abschluss;
30
+ Aufnahmen bleiben erhalten. Run-Stopp und Serverende schließen ihn ebenfalls.
31
+
32
+ Die Browseraktionen verwenden Playwright-Locators mit automatischem Warten. Mehrdeutige Ziele
33
+ sind Fehler, die die Kandidaten nennen; wähle dann mit `nth` (0-basiert) oder `first: true` im
34
+ Ziel einen Treffer, oder prüfe die Anzahl sichtbarer Treffer mit `count` in `browser_check`.
35
+ Sichtbarkeitsprüfungen warten höchstens 5 Sekunden, Aktionen länger; ein fehlendes Element
36
+ kostet also keine lange Wartezeit. Native Selects verwenden `browser_select`; eigene Auswahlmenüs werden geklickt.
37
+ Mit `target.frame` wählst Du ein Iframe per CSS. Neue Fenster werden ausdrücklich gemeldet;
38
+ dieser Ablauf bedient eine Seite. Verdeckte Elemente werden nicht per JavaScript angeklickt.
@@ -0,0 +1,18 @@
1
+ # File store and documents
2
+
3
+ This run has a file store outside the working directory. It is not a path in bash; the only way
4
+ to put something there is the tool `document_write`.
5
+
6
+ - Create one subdirectory per topic: `<topic>/<file>`.
7
+ - Put documents, reports and temporary products there - NOT into the working directory, unless
8
+ they are part of the actual assignment.
9
+ - `document_write` takes the full `content` of the file. For a file of the working directory,
10
+ `read` it first and pass the content here.
11
+ - The user sees these files in the "Dokumente" area of the interface, grouped by subdirectory.
12
+ - When you spawn agents, name in their assignment the store path they are supposed to write to.
13
+
14
+ If the user wants to see the content of a file or a document, show it COMPLETELY via
15
+ `show_document` (title = file name or document name) - never paraphrase or shorten. Files of the
16
+ file store you show via `path`, relative to the store. Everything else - files from your working
17
+ directory and content you produced yourself - you pass via `content`; `path` finds nothing outside
18
+ the file store.