@schlenkr/ragents 0.1.10 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (743) hide show
  1. package/apps/server/package.json +1 -1
  2. package/apps/server/src/access-projection.ts +4 -4
  3. package/apps/server/src/access-service.ts +3 -3
  4. package/apps/server/src/access-session.ts +19 -19
  5. package/apps/server/src/api/contracts.ts +29 -29
  6. package/apps/server/src/api/core-methods.ts +17 -17
  7. package/apps/server/src/api/delivery.ts +2 -2
  8. package/apps/server/src/api/reference.ts +27 -27
  9. package/apps/server/src/api/rights.ts +18 -18
  10. package/apps/server/src/chat-handler.ts +5 -5
  11. package/apps/server/src/config-definition.ts +37 -10
  12. package/apps/server/src/config-file.ts +49 -49
  13. package/apps/server/src/config.ts +2 -0
  14. package/apps/server/src/data-directory.ts +2 -2
  15. package/apps/server/src/external-access.ts +1 -1
  16. package/apps/server/src/folder-install.ts +1 -1
  17. package/apps/server/src/help-files.ts +1 -1
  18. package/apps/server/src/host-api.json +6 -1
  19. package/apps/server/src/host-api.ts +3 -2
  20. package/apps/server/src/host-record.ts +3 -3
  21. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  22. package/apps/server/src/host-version.ts +17 -17
  23. package/apps/server/src/host-web.ts +5 -5
  24. package/apps/server/src/main.ts +6 -6
  25. package/apps/server/src/missing-environment.ts +6 -6
  26. package/apps/server/src/parent-watch.ts +4 -4
  27. package/apps/server/src/plugin-build/build.ts +31 -31
  28. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  29. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  30. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  31. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  32. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  33. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  34. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  35. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  36. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  37. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  38. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  39. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  40. package/apps/server/src/plugin-support/http.ts +2 -2
  41. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  42. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  43. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  44. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  45. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  46. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  47. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  48. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  49. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  50. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  51. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  52. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  53. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  54. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  55. package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
  56. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  57. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  58. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  59. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  60. package/apps/server/src/plugin-support/prompt.ts +1 -1
  61. package/apps/server/src/plugin-support/provision.ts +8 -8
  62. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  63. package/apps/server/src/plugin-support/skills.ts +18 -18
  64. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  65. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  66. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  67. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  68. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  69. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  70. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  71. package/apps/server/src/plugin-support/zip.ts +7 -7
  72. package/apps/server/src/profile/bundle-manifest.ts +17 -17
  73. package/apps/server/src/profile/compose.ts +12 -7
  74. package/apps/server/src/profile/plugin-discovery.ts +12 -12
  75. package/apps/server/src/profile/provisioning.ts +5 -5
  76. package/apps/server/src/profile-target.ts +10 -10
  77. package/apps/server/src/protocol.ts +2 -2
  78. package/apps/server/src/provider.ts +61 -56
  79. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  80. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  81. package/apps/server/src/ragents/coordinator.ts +2 -2
  82. package/apps/server/src/ragents/engine.ts +23 -23
  83. package/apps/server/src/ragents/global-chat.ts +8 -8
  84. package/apps/server/src/ragents/host-services.ts +6 -3
  85. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  86. package/apps/server/src/ragents/run-owner.ts +2 -2
  87. package/apps/server/src/ragents/session.ts +49 -49
  88. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  89. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  90. package/apps/server/src/rpc/dispatcher.ts +19 -19
  91. package/apps/server/src/rpc/http-transport.ts +11 -11
  92. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  93. package/apps/server/src/run-preparation-input.ts +5 -5
  94. package/apps/server/src/run-preparation.ts +24 -24
  95. package/apps/server/src/run-transfer.ts +39 -39
  96. package/apps/server/src/server.ts +48 -48
  97. package/apps/server/src/settings.ts +1 -1
  98. package/apps/server/src/startup.ts +3 -3
  99. package/apps/server/src/title-compactor.ts +9 -9
  100. package/apps/server/src/title-settings.ts +3 -3
  101. package/apps/server/src/web-bundles.ts +2 -2
  102. package/apps/server/src/web-stylesheet.ts +2 -2
  103. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-BfNSGxjB.js} +1 -1
  104. package/apps/web/dist/assets/main-D6bsKcIK.js +11 -0
  105. package/apps/web/dist/assets/mermaid-HWGCJPDP-DROEqEeg.js +608 -0
  106. package/apps/web/dist/assets/runPanel-Dumuuqry.js +21 -0
  107. package/apps/web/dist/help/guide-access.html +5 -5
  108. package/apps/web/dist/help/guide-access.md +2 -2
  109. package/apps/web/dist/help/guide-clients.html +53 -54
  110. package/apps/web/dist/help/guide-clients.md +50 -51
  111. package/apps/web/dist/help/guide-distributed.html +12 -7
  112. package/apps/web/dist/help/guide-distributed.md +9 -4
  113. package/apps/web/dist/help/guide-functions.html +3 -3
  114. package/apps/web/dist/help/guide-getting-started.html +24 -15
  115. package/apps/web/dist/help/guide-getting-started.md +22 -12
  116. package/apps/web/dist/help/guide-ideas.html +3 -3
  117. package/apps/web/dist/help/guide-plugins.html +5 -4
  118. package/apps/web/dist/help/guide-plugins.md +2 -1
  119. package/apps/web/dist/help/guide-programs.html +3 -3
  120. package/apps/web/dist/help/guide-runtime.html +6 -6
  121. package/apps/web/dist/help/guide-runtime.md +3 -3
  122. package/apps/web/dist/help/guide.html +3 -3
  123. package/apps/web/dist/help/index.html +196 -144
  124. package/apps/web/dist/help/mini-app.css +6 -0
  125. package/apps/web/dist/help/mini-app.js +14 -14
  126. package/apps/web/dist/host-web.json +90 -90
  127. package/apps/web/dist/index.html +3 -3
  128. package/apps/web/dist/run-panel.html +3 -3
  129. package/apps/web/package.json +1 -1
  130. package/apps/web/src/AccessContext.tsx +15 -15
  131. package/apps/web/src/App.tsx +13 -13
  132. package/apps/web/src/DiffCode.tsx +2 -2
  133. package/apps/web/src/HelpDialog.tsx +3 -3
  134. package/apps/web/src/Overview.tsx +13 -13
  135. package/apps/web/src/PluginActivation.ts +1 -1
  136. package/apps/web/src/PluginChat.tsx +15 -15
  137. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  138. package/apps/web/src/PluginRegistry.tsx +44 -44
  139. package/apps/web/src/RunPreparationChat.tsx +11 -11
  140. package/apps/web/src/RunStore.ts +1 -1
  141. package/apps/web/src/SessionList.tsx +14 -14
  142. package/apps/web/src/SettingsModal.tsx +112 -112
  143. package/apps/web/src/StartOptions.tsx +11 -11
  144. package/apps/web/src/StartSelection.tsx +11 -11
  145. package/apps/web/src/StartTiles.tsx +8 -8
  146. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  147. package/apps/web/src/ThemeSettings.tsx +8 -8
  148. package/apps/web/src/TitleModelSettings.tsx +13 -13
  149. package/apps/web/src/WorkspacePanel.tsx +9 -9
  150. package/apps/web/src/access-session.ts +4 -4
  151. package/apps/web/src/access-token.ts +5 -5
  152. package/apps/web/src/actor-conversation.ts +3 -3
  153. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  154. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  155. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  156. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  157. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  158. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  159. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  160. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  161. package/apps/web/src/api.ts +7 -7
  162. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  163. package/apps/web/src/chat/chat-target.ts +3 -3
  164. package/apps/web/src/chat/requests.ts +2 -2
  165. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  166. package/apps/web/src/chat-view-settings.tsx +5 -6
  167. package/apps/web/src/diff-view.css +1 -1
  168. package/apps/web/src/highlighting.css +1 -1
  169. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  170. package/apps/web/src/lib/labels.ts +6 -6
  171. package/apps/web/src/main.tsx +4 -4
  172. package/apps/web/src/offered-machines.ts +2 -2
  173. package/apps/web/src/page-opener.tsx +1 -1
  174. package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
  175. package/apps/web/src/panel/LoginForm.tsx +6 -6
  176. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  177. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  178. package/apps/web/src/panel/PanelPage.tsx +1 -1
  179. package/apps/web/src/panel/RunLine.tsx +4 -4
  180. package/apps/web/src/panel/RunsPage.tsx +15 -15
  181. package/apps/web/src/panel/StartPage.tsx +26 -26
  182. package/apps/web/src/panel/connection-state.ts +9 -9
  183. package/apps/web/src/panel/contract.ts +28 -28
  184. package/apps/web/src/panel.tsx +1 -1
  185. package/apps/web/src/plugin-bootstrap.ts +5 -5
  186. package/apps/web/src/product/ModelControl.tsx +3 -3
  187. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  188. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  189. package/apps/web/src/product/model-settings.ts +2 -2
  190. package/apps/web/src/rpc/client.ts +16 -16
  191. package/apps/web/src/rpc.ts +1 -1
  192. package/apps/web/src/run-overview.ts +1 -1
  193. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  194. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  195. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  196. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  197. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  198. package/apps/web/src/run-panel/clipboard.ts +3 -3
  199. package/apps/web/src/run-panel/host-contract.ts +5 -5
  200. package/apps/web/src/run-panel/host.ts +15 -15
  201. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  202. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  203. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  204. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  205. package/apps/web/src/run-panel.tsx +4 -4
  206. package/apps/web/src/run-preparation.ts +2 -2
  207. package/apps/web/src/run-view.ts +3 -3
  208. package/apps/web/src/settings-contributions.ts +32 -32
  209. package/apps/web/src/theme.ts +9 -9
  210. package/apps/web/src/title-model-settings.ts +6 -6
  211. package/apps/web/src/ui/ListDetail.tsx +9 -9
  212. package/apps/web/src/ui/dialog.tsx +2 -2
  213. package/apps/web/src/ui/modal-controller.ts +3 -3
  214. package/apps/web/src/ui/modal.tsx +2 -2
  215. package/apps/web/src/ui/popover.tsx +1 -1
  216. package/apps/web/src/ui/relative-time.ts +8 -8
  217. package/apps/web/src/ui/startup-notice.tsx +2 -2
  218. package/apps/web/src/ui/state-icon.tsx +1 -1
  219. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  220. package/apps/web/src/ui/stop-button.tsx +2 -2
  221. package/bundles/ragents.activity/ragents-bundle.json +2 -2
  222. package/bundles/ragents.activity/web/classes.json +1 -1
  223. package/bundles/ragents.activity/web/index.js +1 -1
  224. package/bundles/ragents.activity/web/index.js.map +2 -2
  225. package/bundles/ragents.actor-programs/ragents-bundle.json +2 -2
  226. package/bundles/ragents.actor-programs/server/index.js +225 -225
  227. package/bundles/ragents.actor-programs/server/index.js.map +2 -2
  228. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  229. package/bundles/ragents.actor-programs/web/index.js +1 -1
  230. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  231. package/bundles/ragents.ask/ragents-bundle.json +2 -2
  232. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  233. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  234. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  235. package/bundles/ragents.ask/server/index.js +23 -23
  236. package/bundles/ragents.ask/server/index.js.map +2 -2
  237. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  238. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  239. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
  240. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
  241. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  242. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  243. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  245. package/bundles/ragents.ask/web/classes.json +1 -1
  246. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  247. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  248. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  249. package/bundles/ragents.ask/web/index.js +1 -1
  250. package/bundles/ragents.ask/web/index.js.map +2 -2
  251. package/bundles/ragents.browser/executor/index.mjs +35 -35
  252. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  253. package/bundles/ragents.browser/ragents-bundle.json +2 -2
  254. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  255. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  256. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  257. package/bundles/ragents.browser/server/index.js +31 -31
  258. package/bundles/ragents.browser/server/index.js.map +2 -2
  259. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  260. package/bundles/ragents.documents/prompt.hbs +1 -1
  261. package/bundles/ragents.documents/ragents-bundle.json +2 -2
  262. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  263. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  264. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  265. package/bundles/ragents.documents/server/index.js +26 -26
  266. package/bundles/ragents.documents/server/index.js.map +2 -2
  267. package/bundles/ragents.documents/web/classes.json +1 -1
  268. package/bundles/ragents.documents/web/index.js +1 -1
  269. package/bundles/ragents.documents/web/index.js.map +3 -3
  270. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  271. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  272. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +2 -2
  273. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  274. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  275. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  276. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  277. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  278. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +2 -2
  280. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  281. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  282. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  283. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  284. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  285. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  286. package/bundles/ragents.lsp-typescript/ragents-bundle.json +2 -2
  287. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  288. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  289. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  290. package/bundles/ragents.model-relay/ragents-bundle.json +7 -3
  291. package/bundles/ragents.model-relay/server/index.js +25 -21
  292. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  293. package/bundles/ragents.orchestration/ragents-bundle.json +2 -2
  294. package/bundles/ragents.orchestration/server/index.js +28 -28
  295. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  296. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  297. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  300. package/bundles/ragents.orchestration/web/classes.json +1 -1
  301. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  302. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  303. package/bundles/ragents.orchestration/web/index.js +8 -8
  304. package/bundles/ragents.orchestration/web/index.js.map +2 -2
  305. package/bundles/ragents.overseer/ragents-bundle.json +2 -2
  306. package/bundles/ragents.overseer/server/index.js +98 -98
  307. package/bundles/ragents.overseer/server/index.js.map +2 -2
  308. package/bundles/ragents.overseer/web/classes.json +1 -1
  309. package/bundles/ragents.overseer/web/index.js +1 -1
  310. package/bundles/ragents.overseer/web/index.js.map +2 -2
  311. package/bundles/ragents.processes/ragents-bundle.json +2 -2
  312. package/bundles/ragents.processes/server/index.js +11 -11
  313. package/bundles/ragents.processes/server/index.js.map +2 -2
  314. package/bundles/ragents.processes/web/classes.json +1 -1
  315. package/bundles/ragents.processes/web/index.js +3 -3
  316. package/bundles/ragents.processes/web/index.js.map +2 -2
  317. package/bundles/ragents.product/ragents-bundle.json +2 -2
  318. package/bundles/ragents.product/server/index.js +12 -13
  319. package/bundles/ragents.product/server/index.js.map +2 -2
  320. package/bundles/ragents.product/web/classes.json +1 -1
  321. package/bundles/ragents.product/web/index.js +1 -1
  322. package/bundles/ragents.product/web/index.js.map +2 -2
  323. package/bundles/ragents.profile-distribution/ragents-bundle.json +2 -2
  324. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  325. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  326. package/bundles/ragents.reference/ragents-bundle.json +2 -2
  327. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  328. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  335. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  336. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  340. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  341. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  347. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  348. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  349. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  350. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  352. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  353. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  360. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  361. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  362. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  363. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  365. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  366. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  367. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  368. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  392. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  393. package/bundles/ragents.reference/web/classes.json +1 -1
  394. package/bundles/ragents.reference/web/index.js +1 -1
  395. package/bundles/ragents.reference/web/index.js.map +2 -2
  396. package/bundles/ragents.todo/ragents-bundle.json +2 -2
  397. package/bundles/ragents.todo/server/index.js +5 -5
  398. package/bundles/ragents.todo/server/index.js.map +2 -2
  399. package/bundles/ragents.todo/web/classes.json +1 -1
  400. package/bundles/ragents.todo/web/index.js +1 -1
  401. package/bundles/ragents.todo/web/index.js.map +2 -2
  402. package/bundles/ragents.transcript/ragents-bundle.json +2 -2
  403. package/bundles/ragents.transcript/server/index.js +11 -11
  404. package/bundles/ragents.transcript/server/index.js.map +2 -2
  405. package/bundles/ragents.watch/ragents-bundle.json +2 -2
  406. package/bundles/ragents.watch/server/index.js +48 -48
  407. package/bundles/ragents.watch/server/index.js.map +2 -2
  408. package/bundles/ragents.workspace/ragents-bundle.json +2 -2
  409. package/bundles/ragents.workspace/server/index.js +81 -81
  410. package/bundles/ragents.workspace/server/index.js.map +2 -2
  411. package/bundles/ragents.workspace/web/classes.json +1 -1
  412. package/bundles/ragents.workspace/web/index.js +1 -1
  413. package/bundles/ragents.workspace/web/index.js.map +2 -2
  414. package/package.json +4 -4
  415. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  416. package/packages/agent/dist/index.d.ts +1 -1
  417. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  418. package/packages/agent/src/core/compaction/utils.ts +1 -1
  419. package/packages/agent/src/core/model-runtime.ts +45 -5
  420. package/packages/agent/src/index.ts +1 -1
  421. package/packages/agent/src/loop/agent-loop.ts +2 -2
  422. package/packages/ai/dist/models.d.ts +1 -0
  423. package/packages/ai/dist/models.generated.d.ts +4544 -983
  424. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  425. package/packages/ai/src/api/ai-sdk.ts +33 -7
  426. package/packages/ai/src/api-registry.ts +1 -1
  427. package/packages/ai/src/index.ts +2 -2
  428. package/packages/ai/src/models.generated.ts +1 -1
  429. package/packages/ai/src/models.ts +1 -1
  430. package/packages/ai/src/providers/openrouter.models.ts +3723 -550
  431. package/packages/ragents/src/access.ts +12 -12
  432. package/packages/ragents/src/agents/actor-input.ts +33 -33
  433. package/packages/ragents/src/agents/catalog.ts +1 -1
  434. package/packages/ragents/src/agents/delivery.ts +17 -17
  435. package/packages/ragents/src/agents/plugins.ts +1 -1
  436. package/packages/ragents/src/agents/scheduler.ts +7 -7
  437. package/packages/ragents/src/agents/schemas.ts +1 -1
  438. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  439. package/packages/ragents/src/agents/tools.ts +20 -20
  440. package/packages/ragents/src/agents/toolset.ts +5 -5
  441. package/packages/ragents/src/agents/workspaces.ts +1 -1
  442. package/packages/ragents/src/domain/events.ts +1 -1
  443. package/packages/ragents/src/domain/model.ts +5 -5
  444. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  445. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  446. package/packages/ragents/src/drivers/agent.ts +2 -2
  447. package/packages/ragents/src/drivers/attachments.ts +4 -4
  448. package/packages/ragents/src/http/contracts.ts +14 -14
  449. package/packages/ragents/src/http/methods.ts +6 -6
  450. package/packages/ragents/src/plugin-host.ts +119 -119
  451. package/packages/ragents/src/plugin-types.ts +16 -16
  452. package/packages/ragents/src/rpc/contract.ts +5 -5
  453. package/packages/ragents/src/rpc/contribution.ts +2 -2
  454. package/packages/ragents/src/rpc/peer.ts +11 -11
  455. package/packages/ragents/src/rpc/protocol.ts +2 -2
  456. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  457. package/packages/ragents/src/runtime/journal.ts +10 -10
  458. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  459. package/packages/ragents/src/runtime/stop.ts +2 -2
  460. package/packages/ragents/src/script/mediators.ts +35 -35
  461. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  462. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  463. package/packages/ragents/src/typescript/compiler.ts +7 -7
  464. package/packages/ragents/src/typescript/snippet.ts +5 -5
  465. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  466. package/packages/workspace-executor/src/commands.ts +18 -18
  467. package/packages/workspace-executor/src/context.ts +15 -15
  468. package/packages/workspace-executor/src/contributions.ts +35 -35
  469. package/packages/workspace-executor/src/errors.ts +1 -1
  470. package/packages/workspace-executor/src/executor.ts +15 -15
  471. package/packages/workspace-executor/src/files.ts +30 -30
  472. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  473. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  474. package/packages/workspace-executor/src/language-server/host.ts +35 -35
  475. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  476. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  477. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  478. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  479. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
  480. package/packages/workspace-executor/src/managed-process.ts +12 -12
  481. package/packages/workspace-executor/src/module.ts +8 -8
  482. package/packages/workspace-executor/src/modules.ts +3 -3
  483. package/packages/workspace-executor/src/paths.ts +11 -11
  484. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  485. package/packages/workspace-executor/src/processes/module.ts +3 -3
  486. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  487. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  488. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  489. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  490. package/packages/workspace-executor/src/run-folders.ts +3 -3
  491. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  492. package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
  493. package/packages/workspace-executor/src/session-ident.ts +2 -2
  494. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  495. package/packages/workspace-executor/src/tools.ts +5 -5
  496. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  497. package/plugins/ragents.activity/web/activity.ts +2 -2
  498. package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
  499. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  500. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  501. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  502. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  503. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  504. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  505. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  506. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  507. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  508. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  509. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  510. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  511. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  512. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  513. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  514. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  515. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  516. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  517. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  518. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  519. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  520. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  521. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  522. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  523. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  524. package/plugins/ragents.ask/ask-payload.ts +1 -1
  525. package/plugins/ragents.ask/contract.ts +5 -5
  526. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  527. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  528. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  529. package/plugins/ragents.ask/server/contract.ts +5 -5
  530. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  531. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  532. package/plugins/ragents.ask/web/index.tsx +2 -2
  533. package/plugins/ragents.browser/executor/contract.ts +6 -6
  534. package/plugins/ragents.browser/executor/index.ts +1 -1
  535. package/plugins/ragents.browser/executor/module.ts +6 -6
  536. package/plugins/ragents.browser/executor/pages.ts +32 -32
  537. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  538. package/plugins/ragents.browser/provision.ts +7 -7
  539. package/plugins/ragents.browser/server/browser.ts +14 -14
  540. package/plugins/ragents.browser/server/contract.ts +1 -1
  541. package/plugins/ragents.browser/server/index.ts +1 -1
  542. package/plugins/ragents.browser/server/tools.ts +14 -14
  543. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  544. package/plugins/ragents.documents/contract.ts +2 -2
  545. package/plugins/ragents.documents/prompt.hbs +1 -1
  546. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  547. package/plugins/ragents.documents/server/files-route.ts +6 -6
  548. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  549. package/plugins/ragents.documents/server/store.ts +1 -1
  550. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  551. package/plugins/ragents.documents/web/index.tsx +11 -11
  552. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  553. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  554. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  555. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  556. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  557. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  558. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  559. package/plugins/ragents.model-relay/server/config.ts +6 -2
  560. package/plugins/ragents.model-relay/server/index.ts +2 -2
  561. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  562. package/plugins/ragents.orchestration/contract.ts +8 -8
  563. package/plugins/ragents.orchestration/server/index.ts +4 -4
  564. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  565. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  566. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  567. package/plugins/ragents.orchestration/web/ActorChat.tsx +2 -2
  568. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
  569. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  570. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  571. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  572. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  573. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  574. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  575. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  576. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  577. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  578. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  579. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  580. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  581. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  582. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  583. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  584. package/plugins/ragents.orchestration/web/format.ts +1 -1
  585. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  586. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  587. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  588. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
  589. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  590. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  591. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  592. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  593. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  594. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  595. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
  596. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  597. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  598. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  599. package/plugins/ragents.overseer/contract.ts +20 -20
  600. package/plugins/ragents.overseer/server/api.ts +6 -6
  601. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  602. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  603. package/plugins/ragents.overseer/server/index.ts +24 -24
  604. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  605. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  606. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  607. package/plugins/ragents.overseer/server/settings.ts +6 -6
  608. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  609. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  610. package/plugins/ragents.overseer/web/index.tsx +20 -20
  611. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  612. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  613. package/plugins/ragents.processes/contract.ts +5 -5
  614. package/plugins/ragents.processes/server/methods.ts +4 -4
  615. package/plugins/ragents.processes/server/observer.ts +8 -8
  616. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  617. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  618. package/plugins/ragents.processes/web/processes.ts +10 -10
  619. package/plugins/ragents.product/server/config.ts +1 -1
  620. package/plugins/ragents.product/server/index.ts +4 -4
  621. package/plugins/ragents.product/server/runtime.ts +9 -10
  622. package/plugins/ragents.product/web/index.tsx +1 -1
  623. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  624. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  625. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  626. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  627. package/plugins/ragents.reference/examples.ts +27 -27
  628. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  629. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  630. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  631. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  632. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  636. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  637. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  638. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  639. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  640. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  641. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  642. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  643. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  644. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  645. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  648. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  649. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  650. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  651. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  652. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  653. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  654. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  655. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  656. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  657. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  661. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  662. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  663. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  664. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  665. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  666. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  667. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  668. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  669. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  670. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  671. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  672. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  693. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  694. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  695. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  696. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  697. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  698. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  699. package/plugins/ragents.watch/server/condition.ts +4 -4
  700. package/plugins/ragents.watch/server/functions.ts +27 -27
  701. package/plugins/ragents.watch/server/observation.ts +2 -2
  702. package/plugins/ragents.watch/server/service.ts +14 -14
  703. package/plugins/ragents.workspace/client/transport.ts +1 -1
  704. package/plugins/ragents.workspace/client/workspace-client.ts +54 -54
  705. package/plugins/ragents.workspace/contract.ts +46 -46
  706. package/plugins/ragents.workspace/server/binding.ts +20 -20
  707. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  708. package/plugins/ragents.workspace/server/clients.ts +42 -42
  709. package/plugins/ragents.workspace/server/config.ts +7 -7
  710. package/plugins/ragents.workspace/server/index.ts +3 -3
  711. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  712. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  713. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  714. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  715. package/plugins/ragents.workspace/web/index.tsx +1 -1
  716. package/ragents.config.core.ts +1 -1
  717. package/ragents.config.developer.ts +3 -3
  718. package/ragents.config.showcase.ts +2 -2
  719. package/scripts/agent/agent-cli.ts +96 -96
  720. package/scripts/agent/journal.ts +5 -5
  721. package/scripts/agent/turn-control.ts +4 -4
  722. package/scripts/package/build-package.ts +29 -29
  723. package/scripts/package/host-links.mjs +3 -3
  724. package/scripts/package/publish-package.ts +29 -29
  725. package/scripts/package/ragents.mjs +19 -19
  726. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  727. package/scripts/plugin/plugin-cli.ts +14 -14
  728. package/scripts/provision/run-provision.ts +14 -15
  729. package/scripts/remote/connect.ts +46 -46
  730. package/scripts/remote/start.ts +18 -18
  731. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  732. package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
  733. package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
  734. package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
  735. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  736. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  737. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  738. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  739. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  740. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  741. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  742. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  743. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../plugins/ragents.processes/server/index.ts", "../../../plugins/ragents.processes/contract.ts", "../../../plugins/ragents.processes/server/observer.ts", "../../../plugins/ragents.processes/server/methods.ts", "../../../plugins/ragents.processes/server/run-processes.ts"],
4
- "sourcesContent": ["import type { RAgentsPlugin } from \"@ragents/engine\";\nimport { workspaceGuardToken } from \"@ragents/host/ragents/host-services.js\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { sandboxServicesToken } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport { PROCESSES_PLUGIN_ID } from \"../contract.js\";\nimport { RunProcessObserver } from \"./observer.js\";\nimport { createProcessChannel, createProcessMethods } from \"./methods.js\";\nimport { runProcessesOf } from \"./run-processes.js\";\n\nconst POLL_INTERVAL_MS = 2_000;\n\nconst processesPlugin: RAgentsPlugin = {\n manifest: { id: PROCESSES_PLUGIN_ID },\n register: (host) => {\n const processes = runProcessesOf(host.service(sandboxServicesToken));\n const observer = new RunProcessObserver({ snapshot: processes.snapshot, pollIntervalMs: POLL_INTERVAL_MS });\n const ensureWorkspaceAccess = host.service(workspaceGuardToken);\n host.methods(...createProcessMethods({ observer, ensureWorkspaceAccess, terminate: processes.terminate }));\n host.channels(createProcessChannel({ observer, ensureWorkspaceAccess }));\n host.lifecycle({\n id: \"ragents.processes.lifecycle\",\n stopSession: ({ runId, signal }) => processes.stopAll(runId, signal),\n afterStopSession: ({ runId, signal }) => processes.stopAll(runId, signal),\n deleteSession: ({ runId }) => processes.stopAll(runId),\n shutdown: () => observer.shutdown(),\n });\n },\n};\n\nexport const plugin: PluginModule = { create: () => processesPlugin };\n", "import { Type } from \"typebox\";\nimport { defineChannel, defineOperation } from \"@ragents/engine/src/rpc/contract\";\nimport { openJson } from \"@ragents/engine/src/http/contracts\";\n\nexport const PROCESSES_PLUGIN_ID = \"ragents.processes\";\n\nexport interface RunProcessPort {\n port: number;\n address: string;\n}\n\nexport type RunProcessOrigin = \"tool-call\" | \"background\";\n\nexport interface RunProcess {\n id: string;\n pid: number;\n label: string;\n command: string;\n origin: RunProcessOrigin;\n ports: RunProcessPort[];\n seenSince: string;\n}\n\nexport interface RunProcessSnapshot {\n runId: string;\n observedAt: string;\n processes: RunProcess[];\n}\n\nexport type RunProcessMessage =\n | { kind: \"snapshot\"; snapshot: RunProcessSnapshot }\n | { kind: \"error\"; error: string };\n\nconst runId = Type.String({ minLength: 1, maxLength: 64, description: \"Kennung des Runs\" });\n\nexport const processesContracts = {\n snapshot: defineOperation({\n id: \"ragents.processes.snapshot\",\n description: \"Die beobachteten Prozesse eines Runs mit ihren offenen Ports. Rechte: runs.read und ragents.processes.read.\",\n rights: [\"runs.read\", \"ragents.processes.read\"],\n input: Type.Object({ runId }, { additionalProperties: false }),\n result: openJson<RunProcessSnapshot>(\"RunProcessSnapshot\"),\n }),\n stop: defineOperation({\n id: \"ragents.processes.stop\",\n description: \"Einen Prozess des Runs beenden. Rechte: runs.read, runs.write und runs.inspect.\",\n rights: [\"runs.read\", \"runs.write\", \"runs.inspect\"],\n input: Type.Object({\n runId,\n processId: Type.String({ pattern: \"^[1-9][0-9]*-[a-f0-9]{64}$\", description: \"Kennung des Prozesses aus dem Stand\" }),\n }, { additionalProperties: false }),\n result: Type.Null(),\n }),\n live: defineChannel({\n id: \"ragents.processes\",\n description: \"Der laufende Stand der Prozess\u00FCberwachung eines Runs. Rechte: runs.read und ragents.processes.read.\",\n rights: [\"runs.read\", \"ragents.processes.read\"],\n params: Type.Object({ runId }, { additionalProperties: false }),\n message: openJson<RunProcessMessage>(\"RunProcessMessage\"),\n }),\n};\n", "import type { RunProcessMessage, RunProcessSnapshot } from \"../contract.js\";\n\nexport interface RunProcessObserverOptions {\n /** Der Stand eines Runs beim Executor, der ihn ausf\u00FChrt; `signal` bricht die Abfrage dort ab. */\n snapshot: (runId: string, signal: AbortSignal) => Promise<RunProcessSnapshot>;\n pollIntervalMs: number;\n}\n\nexport type RunProcessListener = (message: RunProcessMessage) => void;\n\ninterface RunWatch {\n listeners: Set<RunProcessListener>;\n fresh: Set<RunProcessListener>;\n last: string | undefined;\n /** Die laufende Abfrage dieses Runs; ein h\u00E4ngender Executor h\u00E4lt nur sie auf. */\n polling: Promise<void> | undefined;\n controller: AbortController | undefined;\n}\n\n/** So viele Takte darf eine Abfrage dauern, bevor sie als gescheitert gilt. */\nconst SNAPSHOT_TIMEOUT_TICKS = 5;\n\nconst messageOf = (error: unknown): string => error instanceof Error ? error.message : String(error);\n\n/** Fragt je Takt den Stand jedes beobachteten Runs bei seinem Executor ab, jeden f\u00FCr sich und mit Zeitgrenze, und meldet nur \u00C4nderungen. */\nexport class RunProcessObserver {\n readonly #options: RunProcessObserverOptions;\n readonly #watches = new Map<string, RunWatch>();\n #timer: NodeJS.Timeout | undefined;\n #stopped = false;\n\n constructor(options: RunProcessObserverOptions) {\n this.#options = options;\n }\n\n observe(runId: string, signal?: AbortSignal): Promise<RunProcessSnapshot> {\n return this.#bounded(runId, signal);\n }\n\n watch(runId: string, listener: RunProcessListener): () => void {\n if (this.#stopped) throw new Error(\"Die Prozess\u00FCberwachung ist beendet\");\n let watch = this.#watches.get(runId);\n if (!watch) {\n watch = { listeners: new Set(), fresh: new Set(), last: undefined, polling: undefined, controller: undefined };\n this.#watches.set(runId, watch);\n }\n watch.listeners.add(listener);\n watch.fresh.add(listener);\n this.#ensureTimer();\n void this.#poll(runId, watch);\n return () => {\n const current = this.#watches.get(runId);\n if (!current) return;\n current.listeners.delete(listener);\n current.fresh.delete(listener);\n if (current.listeners.size === 0) {\n this.#watches.delete(runId);\n current.controller?.abort();\n }\n if (this.#watches.size === 0) this.#clearTimer();\n };\n }\n\n watchedRuns(): readonly string[] {\n return [...this.#watches.keys()];\n }\n\n async shutdown(): Promise<void> {\n this.#stopped = true;\n this.#clearTimer();\n const watches = [...this.#watches.values()];\n this.#watches.clear();\n for (const watch of watches) watch.controller?.abort();\n await Promise.allSettled(watches.map((watch) => watch.polling));\n }\n\n #ensureTimer(): void {\n if (this.#timer || this.#watches.size === 0) return;\n this.#timer = setInterval(() => {\n for (const [runId, watch] of this.#watches) void this.#poll(runId, watch);\n }, this.#options.pollIntervalMs);\n this.#timer.unref();\n }\n\n #clearTimer(): void {\n if (!this.#timer) return;\n clearInterval(this.#timer);\n this.#timer = undefined;\n }\n\n #poll(runId: string, watch: RunWatch): Promise<void> {\n if (watch.polling) return watch.polling;\n const controller = new AbortController();\n watch.controller = controller;\n watch.polling = this.#bounded(runId, controller.signal)\n .then((snapshot): RunProcessMessage => ({ kind: \"snapshot\", snapshot }), (error: unknown): RunProcessMessage => ({ kind: \"error\", error: messageOf(error) }))\n .then((message) => {\n if (!controller.signal.aborted && this.#watches.get(runId) === watch) this.#publish(watch, runId, message);\n })\n .finally(() => {\n watch.polling = undefined;\n watch.controller = undefined;\n });\n return watch.polling;\n }\n\n /** Eine Abfrage endet sp\u00E4testens nach ihrer Zeitgrenze; der Abbruch erreicht dabei auch den Executor. */\n #bounded(runId: string, signal: AbortSignal | undefined): Promise<RunProcessSnapshot> {\n const timeoutMs = this.#options.pollIntervalMs * SNAPSHOT_TIMEOUT_TICKS;\n const controller = new AbortController();\n const forward = (): void => controller.abort(signal?.reason);\n signal?.addEventListener(\"abort\", forward, { once: true });\n let timer: NodeJS.Timeout | undefined;\n const deadline = new Promise<never>((_settle, fail) => {\n timer = setTimeout(() => {\n const error = new Error(`Der Executor des Runs ${runId} hat die Prozessabfrage nicht innerhalb von ${timeoutMs / 1000} s beantwortet`);\n fail(error);\n controller.abort(error);\n }, timeoutMs);\n });\n return Promise.race([this.#options.snapshot(runId, controller.signal), deadline]).finally(() => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", forward);\n });\n }\n\n #publish(watch: RunWatch, runId: string, message: RunProcessMessage): void {\n const serialized = JSON.stringify(message.kind === \"snapshot\"\n ? { kind: message.kind, processes: message.snapshot.processes }\n : message);\n const changed = serialized !== watch.last;\n watch.last = serialized;\n if (changed && message.kind === \"error\") console.error(`Prozess\u00FCberwachung f\u00FCr ${runId}: ${message.error}`);\n for (const listener of watch.listeners) {\n if (changed || watch.fresh.has(listener)) listener(message);\n }\n watch.fresh.clear();\n }\n}\n", "import { DomainError, implement, implementChannel, type AccessContext, type ChannelContribution, type MethodContribution } from \"@ragents/engine\";\nimport { processesContracts, type RunProcessMessage, type RunProcessSnapshot } from \"../contract.js\";\n\nexport interface ProcessObservation {\n observe: (runId: string, signal?: AbortSignal) => Promise<RunProcessSnapshot>;\n watch: (runId: string, listener: (message: RunProcessMessage) => void) => () => void;\n}\n\nexport interface ProcessMethodOptions {\n observer: ProcessObservation;\n /** Die Prozesse liegen im Arbeitsbereich des Runs; wer ihn nicht sehen darf, sieht auch sie nicht. */\n ensureWorkspaceAccess: (access: AccessContext, runId: string) => void;\n /** Beendet beim Executor des Runs; der Abbruch der Anfrage erreicht ihn \u00FCber `signal`. */\n terminate: (runId: string, processId: string, signal: AbortSignal) => Promise<void>;\n}\n\nexport const createProcessMethods = (options: ProcessMethodOptions): MethodContribution[] => [\n implement(processesContracts.snapshot, ({ runId }, { access, signal }) => {\n options.ensureWorkspaceAccess(access, runId);\n return options.observer.observe(runId, signal);\n }),\n implement(processesContracts.stop, async ({ runId, processId }, { access, signal }) => {\n for (const right of processesContracts.stop.rights) {\n if (!access.can(right)) throw new DomainError(\"forbidden\", \"Das Beenden von Prozessen ist nicht erlaubt\", 403);\n }\n if (signal.aborted) throw new Error(\"Die Prozess-Stopp-Anfrage wurde abgebrochen\");\n options.ensureWorkspaceAccess(access, runId);\n await options.terminate(runId, processId, signal);\n return null;\n }),\n];\n\nexport const createProcessChannel = (options: Pick<ProcessMethodOptions, \"observer\" | \"ensureWorkspaceAccess\">): ChannelContribution =>\n implementChannel(processesContracts.live, ({ runId }, emit, { access }) => {\n options.ensureWorkspaceAccess(access, runId);\n return options.observer.watch(runId, emit);\n });\n", "import { PROCESS_OPERATIONS } from \"@ragents/workspace-executor\";\nimport type { SandboxServices } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport type { RunProcessSnapshot } from \"../contract.js\";\n\nexport interface RunProcesses {\n snapshot: (runId: string, signal?: AbortSignal) => Promise<RunProcessSnapshot>;\n terminate: (runId: string, processId: string, signal: AbortSignal) => Promise<void>;\n /** Ist der Arbeitsplatz nicht erreichbar, holt der Stopp des Runs (`stopRun` seines Executors) das Beenden nach, sobald er wieder da ist. */\n stopAll: (runId: string, signal?: AbortSignal) => Promise<void>;\n}\n\n/** Die Prozesse eines Runs liegen beim Executor, der ihn ausf\u00FChrt; wo das ist, entscheidet allein seine Bindung. */\nexport const runProcessesOf = (sandbox: Pick<SandboxServices, \"execute\">): RunProcesses => ({\n snapshot: async (runId, signal) => {\n const observed = await sandbox.execute(runId, PROCESS_OPERATIONS.snapshot, {}, signal ? { signal } : {}) as Omit<RunProcessSnapshot, \"runId\">;\n return { runId, ...observed };\n },\n terminate: async (runId, processId, signal) => {\n await sandbox.execute(runId, PROCESS_OPERATIONS.stop, { processId }, { signal });\n },\n stopAll: async (runId, signal) => {\n await sandbox.execute(runId, PROCESS_OPERATIONS.stopAll, {}, { whenReachable: true, ...(signal ? { signal } : {}) });\n },\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { RAgentsPlugin } from \"@ragents/engine\";\nimport { workspaceGuardToken } from \"@ragents/host/ragents/host-services.js\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { sandboxServicesToken } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport { PROCESSES_PLUGIN_ID } from \"../contract.js\";\nimport { RunProcessObserver } from \"./observer.js\";\nimport { createProcessChannel, createProcessMethods } from \"./methods.js\";\nimport { runProcessesOf } from \"./run-processes.js\";\n\nconst POLL_INTERVAL_MS = 2_000;\n\nconst processesPlugin: RAgentsPlugin = {\n manifest: { id: PROCESSES_PLUGIN_ID },\n register: (host) => {\n const processes = runProcessesOf(host.service(sandboxServicesToken));\n const observer = new RunProcessObserver({ snapshot: processes.snapshot, pollIntervalMs: POLL_INTERVAL_MS });\n const ensureWorkspaceAccess = host.service(workspaceGuardToken);\n host.methods(...createProcessMethods({ observer, ensureWorkspaceAccess, terminate: processes.terminate }));\n host.channels(createProcessChannel({ observer, ensureWorkspaceAccess }));\n host.lifecycle({\n id: \"ragents.processes.lifecycle\",\n stopSession: ({ runId, signal }) => processes.stopAll(runId, signal),\n afterStopSession: ({ runId, signal }) => processes.stopAll(runId, signal),\n deleteSession: ({ runId }) => processes.stopAll(runId),\n shutdown: () => observer.shutdown(),\n });\n },\n};\n\nexport const plugin: PluginModule = { create: () => processesPlugin };\n", "import { Type } from \"typebox\";\nimport { defineChannel, defineOperation } from \"@ragents/engine/src/rpc/contract\";\nimport { openJson } from \"@ragents/engine/src/http/contracts\";\n\nexport const PROCESSES_PLUGIN_ID = \"ragents.processes\";\n\nexport interface RunProcessPort {\n port: number;\n address: string;\n}\n\nexport type RunProcessOrigin = \"tool-call\" | \"background\";\n\nexport interface RunProcess {\n id: string;\n pid: number;\n label: string;\n command: string;\n origin: RunProcessOrigin;\n ports: RunProcessPort[];\n seenSince: string;\n}\n\nexport interface RunProcessSnapshot {\n runId: string;\n observedAt: string;\n processes: RunProcess[];\n}\n\nexport type RunProcessMessage =\n | { kind: \"snapshot\"; snapshot: RunProcessSnapshot }\n | { kind: \"error\"; error: string };\n\nconst runId = Type.String({ minLength: 1, maxLength: 64, description: \"Run id\" });\n\nexport const processesContracts = {\n snapshot: defineOperation({\n id: \"ragents.processes.snapshot\",\n description: \"The observed processes of a run with their open ports. Rights: runs.read and ragents.processes.read.\",\n rights: [\"runs.read\", \"ragents.processes.read\"],\n input: Type.Object({ runId }, { additionalProperties: false }),\n result: openJson<RunProcessSnapshot>(\"RunProcessSnapshot\"),\n }),\n stop: defineOperation({\n id: \"ragents.processes.stop\",\n description: \"End a process of the run. Rights: runs.read, runs.write and runs.inspect.\",\n rights: [\"runs.read\", \"runs.write\", \"runs.inspect\"],\n input: Type.Object({\n runId,\n processId: Type.String({ pattern: \"^[1-9][0-9]*-[a-f0-9]{64}$\", description: \"Process id from the snapshot\" }),\n }, { additionalProperties: false }),\n result: Type.Null(),\n }),\n live: defineChannel({\n id: \"ragents.processes\",\n description: \"The live state of a run's process monitoring. Rights: runs.read and ragents.processes.read.\",\n rights: [\"runs.read\", \"ragents.processes.read\"],\n params: Type.Object({ runId }, { additionalProperties: false }),\n message: openJson<RunProcessMessage>(\"RunProcessMessage\"),\n }),\n};\n", "import type { RunProcessMessage, RunProcessSnapshot } from \"../contract.js\";\n\nexport interface RunProcessObserverOptions {\n /** A run's state at the executor running it; `signal` cancels the query there. */\n snapshot: (runId: string, signal: AbortSignal) => Promise<RunProcessSnapshot>;\n pollIntervalMs: number;\n}\n\nexport type RunProcessListener = (message: RunProcessMessage) => void;\n\ninterface RunWatch {\n listeners: Set<RunProcessListener>;\n fresh: Set<RunProcessListener>;\n last: string | undefined;\n /** The running query of this run; a hanging executor holds up only this one. */\n polling: Promise<void> | undefined;\n controller: AbortController | undefined;\n}\n\n/** How many ticks a query may take before it counts as failed. */\nconst SNAPSHOT_TIMEOUT_TICKS = 5;\n\nconst messageOf = (error: unknown): string => error instanceof Error ? error.message : String(error);\n\n/** Queries the state of every observed run from its executor on each tick, each on its own and with a time limit, and reports only changes. */\nexport class RunProcessObserver {\n readonly #options: RunProcessObserverOptions;\n readonly #watches = new Map<string, RunWatch>();\n #timer: NodeJS.Timeout | undefined;\n #stopped = false;\n\n constructor(options: RunProcessObserverOptions) {\n this.#options = options;\n }\n\n observe(runId: string, signal?: AbortSignal): Promise<RunProcessSnapshot> {\n return this.#bounded(runId, signal);\n }\n\n watch(runId: string, listener: RunProcessListener): () => void {\n if (this.#stopped) throw new Error(\"The process monitoring has ended\");\n let watch = this.#watches.get(runId);\n if (!watch) {\n watch = { listeners: new Set(), fresh: new Set(), last: undefined, polling: undefined, controller: undefined };\n this.#watches.set(runId, watch);\n }\n watch.listeners.add(listener);\n watch.fresh.add(listener);\n this.#ensureTimer();\n void this.#poll(runId, watch);\n return () => {\n const current = this.#watches.get(runId);\n if (!current) return;\n current.listeners.delete(listener);\n current.fresh.delete(listener);\n if (current.listeners.size === 0) {\n this.#watches.delete(runId);\n current.controller?.abort();\n }\n if (this.#watches.size === 0) this.#clearTimer();\n };\n }\n\n watchedRuns(): readonly string[] {\n return [...this.#watches.keys()];\n }\n\n async shutdown(): Promise<void> {\n this.#stopped = true;\n this.#clearTimer();\n const watches = [...this.#watches.values()];\n this.#watches.clear();\n for (const watch of watches) watch.controller?.abort();\n await Promise.allSettled(watches.map((watch) => watch.polling));\n }\n\n #ensureTimer(): void {\n if (this.#timer || this.#watches.size === 0) return;\n this.#timer = setInterval(() => {\n for (const [runId, watch] of this.#watches) void this.#poll(runId, watch);\n }, this.#options.pollIntervalMs);\n this.#timer.unref();\n }\n\n #clearTimer(): void {\n if (!this.#timer) return;\n clearInterval(this.#timer);\n this.#timer = undefined;\n }\n\n #poll(runId: string, watch: RunWatch): Promise<void> {\n if (watch.polling) return watch.polling;\n const controller = new AbortController();\n watch.controller = controller;\n watch.polling = this.#bounded(runId, controller.signal)\n .then((snapshot): RunProcessMessage => ({ kind: \"snapshot\", snapshot }), (error: unknown): RunProcessMessage => ({ kind: \"error\", error: messageOf(error) }))\n .then((message) => {\n if (!controller.signal.aborted && this.#watches.get(runId) === watch) this.#publish(watch, runId, message);\n })\n .finally(() => {\n watch.polling = undefined;\n watch.controller = undefined;\n });\n return watch.polling;\n }\n\n /** A query ends at the latest after its time limit; the cancellation also reaches the executor. */\n #bounded(runId: string, signal: AbortSignal | undefined): Promise<RunProcessSnapshot> {\n const timeoutMs = this.#options.pollIntervalMs * SNAPSHOT_TIMEOUT_TICKS;\n const controller = new AbortController();\n const forward = (): void => controller.abort(signal?.reason);\n signal?.addEventListener(\"abort\", forward, { once: true });\n let timer: NodeJS.Timeout | undefined;\n const deadline = new Promise<never>((_settle, fail) => {\n timer = setTimeout(() => {\n const error = new Error(`The executor of run ${runId} did not answer the process query within ${timeoutMs / 1000} s`);\n fail(error);\n controller.abort(error);\n }, timeoutMs);\n });\n return Promise.race([this.#options.snapshot(runId, controller.signal), deadline]).finally(() => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", forward);\n });\n }\n\n #publish(watch: RunWatch, runId: string, message: RunProcessMessage): void {\n const serialized = JSON.stringify(message.kind === \"snapshot\"\n ? { kind: message.kind, processes: message.snapshot.processes }\n : message);\n const changed = serialized !== watch.last;\n watch.last = serialized;\n if (changed && message.kind === \"error\") console.error(`Process monitoring for ${runId}: ${message.error}`);\n for (const listener of watch.listeners) {\n if (changed || watch.fresh.has(listener)) listener(message);\n }\n watch.fresh.clear();\n }\n}\n", "import { DomainError, implement, implementChannel, type AccessContext, type ChannelContribution, type MethodContribution } from \"@ragents/engine\";\nimport { processesContracts, type RunProcessMessage, type RunProcessSnapshot } from \"../contract.js\";\n\nexport interface ProcessObservation {\n observe: (runId: string, signal?: AbortSignal) => Promise<RunProcessSnapshot>;\n watch: (runId: string, listener: (message: RunProcessMessage) => void) => () => void;\n}\n\nexport interface ProcessMethodOptions {\n observer: ProcessObservation;\n /** The processes live in the run's workspace; whoever may not see it does not see them either. */\n ensureWorkspaceAccess: (access: AccessContext, runId: string) => void;\n /** Ends in the run's executor; cancelling the request reaches it via `signal`. */\n terminate: (runId: string, processId: string, signal: AbortSignal) => Promise<void>;\n}\n\nexport const createProcessMethods = (options: ProcessMethodOptions): MethodContribution[] => [\n implement(processesContracts.snapshot, ({ runId }, { access, signal }) => {\n options.ensureWorkspaceAccess(access, runId);\n return options.observer.observe(runId, signal);\n }),\n implement(processesContracts.stop, async ({ runId, processId }, { access, signal }) => {\n for (const right of processesContracts.stop.rights) {\n if (!access.can(right)) throw new DomainError(\"forbidden\", \"Ending processes is not allowed\", 403);\n }\n if (signal.aborted) throw new Error(\"The process stop request was cancelled\");\n options.ensureWorkspaceAccess(access, runId);\n await options.terminate(runId, processId, signal);\n return null;\n }),\n];\n\nexport const createProcessChannel = (options: Pick<ProcessMethodOptions, \"observer\" | \"ensureWorkspaceAccess\">): ChannelContribution =>\n implementChannel(processesContracts.live, ({ runId }, emit, { access }) => {\n options.ensureWorkspaceAccess(access, runId);\n return options.observer.watch(runId, emit);\n });\n", "import { PROCESS_OPERATIONS } from \"@ragents/workspace-executor\";\nimport type { SandboxServices } from \"@ragents/host/plugin-support/workspace-sandbox-host.js\";\nimport type { RunProcessSnapshot } from \"../contract.js\";\n\nexport interface RunProcesses {\n snapshot: (runId: string, signal?: AbortSignal) => Promise<RunProcessSnapshot>;\n terminate: (runId: string, processId: string, signal: AbortSignal) => Promise<void>;\n /** If the workspace is unreachable, the run's stop (`stopRun` of its executor) catches up on ending once it is back. */\n stopAll: (runId: string, signal?: AbortSignal) => Promise<void>;\n}\n\n/** A run's processes live at the executor running it; where that is is decided solely by its binding. */\nexport const runProcessesOf = (sandbox: Pick<SandboxServices, \"execute\">): RunProcesses => ({\n snapshot: async (runId, signal) => {\n const observed = await sandbox.execute(runId, PROCESS_OPERATIONS.snapshot, {}, signal ? { signal } : {}) as Omit<RunProcessSnapshot, \"runId\">;\n return { runId, ...observed };\n },\n terminate: async (runId, processId, signal) => {\n await sandbox.execute(runId, PROCESS_OPERATIONS.stop, { processId }, { signal });\n },\n stopAll: async (runId, signal) => {\n await sandbox.execute(runId, PROCESS_OPERATIONS.stopAll, {}, { whenReachable: true, ...(signal ? { signal } : {}) });\n },\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["runId", "runId", "runId", "runId"]
7
7
  }
@@ -1 +1 @@
1
- ["[&>svg]:flex-none","[&_svg]:size-2.5","[overflow-wrap:anywhere]","access","activate","active","activeElement","additionalProperties","address","aktiven","alert","allOpen","anderen","anzeigen","aria-hidden","aria-label","as","async","auf","aus","await","background","beenden","beendet","beobachtet","beobachteten","bg-card/78","bg-primary/14","boolean","border","border-border-soft","busy","button","catch","caught","cause","className","cn","command","configuredPlugin","const","controller","current","currentColor","data-[origin=background]:[border-right-style:dashed]","data-[origin=background]:border-dashed","data-hidden","data-origin","data-process-id","de-DE","defineOperation","dem","der","des","description","descriptor","dialogRef","disabled","eine","einem","eines","error","event","export","fallback","false","fehlen","fill","finally","flex","flex-1","flex-col","flex-none","focus-visible:bg-primary/28","focused","font-bold","font-medium","for","from","function","gap-1.5","gap-3","h-6","hat","header","height","hidden","hostname","hover:bg-primary/28","href","icon-xs","id","idle","if","ihren","im","import","in","inline-flex","input","inspect","instanceof","interface","isConnected","isRecord","iso","ist","items-center","items-stretch","key","kind","kindLabel","label","laufende","length","live","m7","max-md:hidden","max-md:inline","max-md:not-first:hidden","max-w-62","max-w-none","maxLength","md:data-[hidden=false]:hidden","message","messageFrom","min-w-0","min-w-5","minLength","mit","neuen","new","none","noreferrer","not-italic","number","observedAt","oder","of","offenen","onClick","onFocusCapture","onOpenChange","onStop","open","openJson","order","origin","originText","outline-none","overflow-hidden","p-0.75","params","parsed","pattern","pid","pillClass","pl-2.5","port","portClass","portFrom","ports","pr-0.5","preventScroll","process","processFrom","processHeader","processId","processes","processesContracts","px-1.5","py-px","querySelector","querySelectorAll","react","read","readRight","readonly","ref","rel","rememberFocus","renderProcess","requests","requiresWorkspace","result","return","rights","role","rootRef","round","rounded-full","rpc","run","runId","rx","scope","seenSince","seit","self-stretch","serviceUrl","session","sessionHeaders","setAllOpen","setState","setStops","shown","signal","size","size-5","snapshot","snapshotFrom","state","status","stop","stopClass","string","stroke","strokeLinecap","strokeLinejoin","strokeWidth","tabIndex","tabular-nums","target","text-[0.56rem]","text-[0.65rem]","text-destructive","text-ellipsis","text-foreground","text-muted-foreground","text-xs","throw","timeText","title","titleOf","tool-call","toolbar","tracking-[0.035em]","true","try","type","typebox","typeof","unbekannte","und","undefined","underline","underline-offset-2","unlesbar","uppercase","useAccess","useRef","useRunProcesses","useState","value","viewBox","visibleProcesses","void","w-35","w-42","w-full","webPlugin","weiter","weitere","whitespace-nowrap","width","wird","writable","write","zu"]
1
+ ["[&>svg]:flex-none","[&_svg]:size-2.5","[overflow-wrap:anywhere]","a","access","activate","active","activeElement","additionalProperties","address","alert","all","allOpen","an","and","another","are","aria-hidden","aria-label","as","async","await","background","belongs","bg-card/78","bg-primary/14","boolean","border","border-border-soft","busy","button","call","catch","caught","cause","className","cn","command","configuredPlugin","const","controller","current","currentColor","data-[origin=background]:[border-right-style:dashed]","data-[origin=background]:border-dashed","data-hidden","data-origin","data-process-id","defineOperation","description","descriptor","dialogRef","disabled","disrupted","en-US","entry","error","event","export","fallback","false","fill","finally","flex","flex-1","flex-col","flex-none","focus-visible:bg-primary/28","focused","font-bold","font-medium","for","from","function","gap-1.5","gap-3","h-6","has","header","height","hidden","hostname","hover:bg-primary/28","href","icon-xs","id","idle","if","import","in","inline-flex","input","inspect","instanceof","interface","is","isConnected","isRecord","iso","items-center","items-stretch","keeps","key","kind","kindLabel","label","length","live","m7","max-md:hidden","max-md:inline","max-md:not-first:hidden","max-w-62","max-w-none","maxLength","md:data-[hidden=false]:hidden","message","messageFrom","min-w-0","min-w-5","minLength","missing","monitoring","more","new","none","noreferrer","not-italic","number","observed","observedAt","of","on","onClick","onFocusCapture","onOpenChange","onStop","open","openJson","or","order","origin","originText","outline-none","overflow-hidden","p-0.75","params","parsed","pattern","pid","pillClass","pl-2.5","port","portClass","portFrom","ports","pr-0.5","preventScroll","process","processFrom","processHeader","processId","processes","processesContracts","px-1.5","py-px","querySelector","querySelectorAll","react","read","readRight","readonly","ref","rel","rememberFocus","renderProcess","requests","requiresWorkspace","result","return","rights","role","rootRef","round","rounded-full","rpc","run","runId","running","runs","rx","s","scope","seenSince","self-stretch","serviceUrl","session","sessionHeaders","setAllOpen","setState","setStops","shown","signal","since","size","size-5","snapshot","snapshotFrom","state","status","stop","stopClass","string","stroke","strokeLinecap","strokeLinejoin","strokeWidth","tab","tabIndex","tabular-nums","target","text-[0.56rem]","text-[0.65rem]","text-destructive","text-ellipsis","text-foreground","text-muted-foreground","text-xs","the","their","throw","timeText","title","titleOf","to","tool","tool-call","toolbar","tracking-[0.035em]","true","try","type","typebox","typeof","undefined","underline","underline-offset-2","unknown","unreadable","uppercase","useAccess","useRef","useRunProcesses","useState","value","viewBox","visibleProcesses","void","w-35","w-42","w-full","webPlugin","whitespace-nowrap","width","with","writable","write"]
@@ -1,4 +1,4 @@
1
- var t=(e,r)=>{let s=globalThis.__ragentsHostModules?.[e];if(s===void 0)throw new Error(`Der Host stellt ${e} nicht bereit`);if(!(r in s))throw new Error(`Der Host stellt ${r} aus ${e} nicht bereit; das Bundle ist gegen einen neueren Host gebaut`);return s[r]};var m=t("typebox","Type");var z=t("@ragents/engine/src/rpc/contract","defineChannel");var D=t("@ragents/engine/src/rpc/contract","defineOperation");var w=t("@ragents/engine/src/http/contracts","openJson");var Q="ragents.processes",H=m.String({minLength:1,maxLength:64,description:"Kennung des Runs"}),F={snapshot:D({id:"ragents.processes.snapshot",description:"Die beobachteten Prozesse eines Runs mit ihren offenen Ports. Rechte: runs.read und ragents.processes.read.",rights:["runs.read","ragents.processes.read"],input:m.Object({runId:H},{additionalProperties:!1}),result:w("RunProcessSnapshot")}),stop:D({id:"ragents.processes.stop",description:"Einen Prozess des Runs beenden. Rechte: runs.read, runs.write und runs.inspect.",rights:["runs.read","runs.write","runs.inspect"],input:m.Object({runId:H,processId:m.String({pattern:"^[1-9][0-9]*-[a-f0-9]{64}$",description:"Kennung des Prozesses aus dem Stand"})},{additionalProperties:!1}),result:m.Null()}),live:z({id:"ragents.processes",description:"Der laufende Stand der Prozess\xFCberwachung eines Runs. Rechte: runs.read und ragents.processes.read.",rights:["runs.read","ragents.processes.read"],params:m.Object({runId:H},{additionalProperties:!1}),message:w("RunProcessMessage")})};var C=t("react","useEffect");var M=t("react","useLayoutEffect");var c=t("react","useRef");var I=t("react","useState");var S=t("@ragents/web/AccessContext","useAccess");var B=t("@ragents/web/ui","Dialog");var U=t("@ragents/web/ui","DialogBody");var $=t("@ragents/web/ui","DialogContent");var j=t("@ragents/web/ui","DialogHeader");var W=t("@ragents/web/ui","DialogTitle");var K=t("@ragents/web/ui","StopButton");var h=t("@ragents/web/ui","cn");var E=t("@ragents/web/Toolbar","ToolbarCopy");var y=t("@ragents/web/Toolbar","ToolbarItem");var A=t("@ragents/web/Toolbar","ToolbarLabel");var L=t("@ragents/web/Toolbar","ToolbarText");var O=t("@ragents/web/rpc","rpc");var b=t("@ragents/web/lib/guards","isRecord");var X=4,le=["tool-call","background"],de=e=>{if(!b(e)||typeof e.port!="number"||typeof e.address!="string")throw new Error("Ein Port-Eintrag der Prozess\xFCberwachung ist unlesbar");return{port:e.port,address:e.address}},ue=e=>{if(!b(e)||typeof e.id!="string"||!e.id||typeof e.pid!="number"||typeof e.label!="string"||typeof e.command!="string"||typeof e.seenSince!="string"||!le.includes(e.origin)||!Array.isArray(e.ports))throw new Error("Ein Prozess-Eintrag der Prozess\xFCberwachung ist unlesbar");return{id:e.id,pid:e.pid,label:e.label,command:e.command,origin:e.origin,ports:e.ports.map(de),seenSince:e.seenSince}},pe=e=>{if(!b(e)||typeof e.runId!="string"||typeof e.observedAt!="string"||!Array.isArray(e.processes))throw new Error("Der Stand der Prozess\xFCberwachung ist unlesbar");return{runId:e.runId,observedAt:e.observedAt,processes:e.processes.map(ue)}},Y=e=>{if(!b(e))throw new Error("Die Nachricht der Prozess\xFCberwachung ist unlesbar");if(e.kind==="error"&&typeof e.error=="string")return{kind:"error",error:e.error};if(e.kind==="snapshot")return{kind:"snapshot",snapshot:pe(e.snapshot)};throw new Error("Die Nachricht der Prozess\xFCberwachung hat eine unbekannte Art")},ee=(e,r)=>`http://${e.includes(":")?`[${e}]`:e}:${r}/`,V=e=>e.ports.length>0?"Dienst":"Prozess",ie=e=>e==="background"?"l\xE4uft im Hintergrund weiter":"l\xE4uft in einem Werkzeugaufruf",me=e=>{let r=new Date(e);return Number.isNaN(r.getTime())?e:r.toLocaleTimeString("de-DE")},_=e=>{let r=e.ports.length>0?`
2
- Lauscht auf ${e.ports.map(s=>`${s.address}:${s.port}`).join(", ")}`:"";return`${e.command}
3
- PID ${e.pid}, ${ie(e.origin)}, beobachtet seit ${me(e.seenSince)}${r}`},te=e=>({shown:e.slice(0,X),hidden:Math.max(0,e.length-X)});var q=t("react/jsx-runtime","Fragment");var a=t("react/jsx-runtime","jsx");var n=t("react/jsx-runtime","jsxs");var re={snapshot:void 0,error:void 0},xe="inline-flex h-6 min-w-0 items-center gap-1.5 whitespace-nowrap rounded-full border border-border-soft bg-card/78 pl-2.5 pr-0.5 text-xs font-medium text-muted-foreground data-[origin=background]:border-dashed [&>svg]:flex-none",ce="flex-none rounded-full bg-primary/14 px-1.5 py-px text-foreground tabular-nums underline underline-offset-2 hover:bg-primary/28 focus-visible:bg-primary/28",ge="size-5 min-w-5 rounded-full p-0.75 [&_svg]:size-2.5",be=e=>{let[r,s]=I(re);return C(()=>(s(re),O.subscribe(F.live,{runId:e},l=>{try{let f=Y(l);if(f.kind==="snapshot"&&f.snapshot.runId!==e)throw new Error("Der Prozessstand geh\xF6rt zu einem anderen Run");s(u=>f.kind==="snapshot"?{snapshot:f.snapshot,error:void 0}:{snapshot:u.snapshot,error:f.error})}catch(f){s(u=>({...u,error:f instanceof Error?f.message:String(f)}))}},l=>s(f=>({...f,error:l})))),[e]),r};function oe(){return n("svg",{"aria-hidden":!0,fill:"none",height:"12",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.8",viewBox:"0 0 24 24",width:"12",children:[a("rect",{height:"16",rx:"2",width:"18",x:"3",y:"4"}),a("path",{d:"m7 9 3 3-3 3M13 15h4"})]})}function Ie({process:e,state:r,writable:s,onStop:l,toolbar:f=!1}){let u=a(K,{busy:r?.busy===!0,className:ge,disabled:!s||r?.busy,label:r?.busy?`${e.label} wird beendet`:`${e.label} beenden`,onClick:l,size:"icon-xs",title:s?r?.busy?"Wird beendet ...":`${e.label} beenden`:"Zum Beenden fehlen Schreib- oder Inspektionsrechte"}),d=e.ports.map(p=>n("a",{className:ce,href:ee(window.location.hostname,p.port),rel:"noreferrer",target:"_blank",title:`${p.address}:${p.port} im neuen Tab \xF6ffnen`,children:[":",p.port]},`${p.address}:${p.port}`));return n("div",{className:h("flex min-w-0 flex-col",f?"flex-none self-stretch max-md:not-first:hidden":"w-full"),"data-process-id":e.id,children:[f?n(y,{className:"max-w-none flex-1 data-[origin=background]:[border-right-style:dashed]","data-origin":e.origin,title:_(e),children:[a(oe,{}),n(E,{className:"w-35 flex-none",children:[a(A,{children:V(e)}),a(L,{children:e.label})]}),d,u]}):n("span",{className:h(xe,"w-full"),"data-origin":e.origin,title:_(e),children:[a(oe,{}),a("em",{className:"flex-none text-[0.56rem] font-bold uppercase not-italic tracking-[0.035em]",children:V(e)}),a("span",{className:"min-w-0 flex-1 overflow-hidden text-ellipsis text-foreground",children:e.label}),d,u]}),r?.error&&a("span",{className:h("text-[0.65rem] text-destructive",f?"max-w-62 overflow-hidden text-ellipsis whitespace-nowrap":"[overflow-wrap:anywhere]"),role:"alert",title:r.error,children:r.error})]})}function he({runId:e}){let r=S(),s=r.can("runs.write")&&r.can("runs.inspect"),l=be(e),[f,u]=I({}),[d,p]=I(!1),P=c(new Map),R=c(null),N=c(null),T=c(null),k=c(null),g=l.snapshot?.processes??[],{shown:G,hidden:v}=te(g);C(()=>{let o=P.current;return()=>{for(let i of o.values())i.abort();o.clear()}},[]),M(()=>{if(!T.current||T.current.isConnected||document.activeElement!==document.body)return;let o=(d?N.current:R.current)?.querySelector("button:not(:disabled), a[href]")??(d?N.current:null)??k.current;T.current=null,o?.focus({preventScroll:!0})},[l.snapshot,d]);let J=o=>{if(!(o.target instanceof HTMLElement))return;T.current=o.target;let i=R.current?.closest("header");k.current=[...i?.querySelectorAll("button:not(:disabled), a[href]")??[]].find(x=>!R.current?.contains(x))??null},fe=async o=>{if(!s||P.current.has(o.id)||f[o.id]?.busy)return;let i=new AbortController;P.current.set(o.id,i),u(x=>({...x,[o.id]:{busy:!0}}));try{await O.call(F.stop,{runId:e,processId:o.id},{signal:i.signal})}catch(x){i.signal.aborted||u(ne=>({...ne,[o.id]:{error:x instanceof Error?x.message:String(x)}}))}finally{P.current.delete(o.id)}},Z=(o,i=!1)=>a(Ie,{process:o,state:f[o.id],writable:s,toolbar:i,onStop:()=>{fe(o)}},o.id);return G.length===0&&l.error===void 0&&!d?null:n(q,{children:[n("div",{"aria-label":"Prozesse und Ports des Runs",className:"flex min-w-0 flex-none items-stretch self-stretch",ref:R,onFocusCapture:J,children:[G.map(o=>Z(o,!0)),(g.length>1||d)&&n(y,{as:"button",className:"md:data-[hidden=false]:hidden","data-hidden":v>0||d,type:"button",onClick:()=>p(!0),title:"Alle Prozesse des Runs anzeigen",children:[a("span",{className:"max-md:hidden",children:v>0?`+${v} weitere`:"Prozesse"}),n("span",{className:"hidden max-md:inline",children:["Alle ",g.length]})]}),l.error!==void 0&&a(y,{className:"w-42 text-destructive",role:"status",title:l.error,children:n(E,{children:[a(A,{children:"Prozesse"}),a(L,{children:"\xDCberwachung gest\xF6rt"})]})})]}),d&&a(B,{open:!0,onOpenChange:o=>{o||(p(!1),g.length===0&&requestAnimationFrame(()=>k.current?.focus({preventScroll:!0})))},children:n($,{scope:"run",children:[a(j,{children:a(W,{children:"Prozesse und Ports"})}),n(U,{className:"flex flex-col gap-3 outline-none",ref:N,tabIndex:-1,onFocusCapture:J,children:[g.length>0?g.map(o=>Z(o)):a("p",{role:"status",children:"Keine aktiven Prozesse."}),l.error!==void 0&&a("p",{className:"text-destructive",role:"alert",children:l.error})]})]})})]})}var ae=()=>function({session:r}){let s=S();return s.can("runs.read")&&s.can("ragents.processes.read")?a(he,{runId:r.session.id},r.session.id):null};var ye=e=>({...e,sessionHeaders:[{readRight:"ragents.processes.read",requiresWorkspace:!0,id:"ragents.processes.live",order:110,Header:ae()}]}),se={id:Q},gr={...se,activate:()=>ye(se)};export{gr as webPlugin};
1
+ var t=(e,r)=>{let s=globalThis.__ragentsHostModules?.[e];if(s===void 0)throw new Error(`The host does not provide ${e}`);if(!(r in s))throw new Error(`The host does not provide ${r} from ${e}; the bundle was built against a newer host`);return s[r]};var m=t("typebox","Type");var F=t("@ragents/engine/src/rpc/contract","defineChannel");var C=t("@ragents/engine/src/rpc/contract","defineOperation");var S=t("@ragents/engine/src/http/contracts","openJson");var X="ragents.processes",M=m.String({minLength:1,maxLength:64,description:"Run id"}),H={snapshot:C({id:"ragents.processes.snapshot",description:"The observed processes of a run with their open ports. Rights: runs.read and ragents.processes.read.",rights:["runs.read","ragents.processes.read"],input:m.Object({runId:M},{additionalProperties:!1}),result:S("RunProcessSnapshot")}),stop:C({id:"ragents.processes.stop",description:"End a process of the run. Rights: runs.read, runs.write and runs.inspect.",rights:["runs.read","runs.write","runs.inspect"],input:m.Object({runId:M,processId:m.String({pattern:"^[1-9][0-9]*-[a-f0-9]{64}$",description:"Process id from the snapshot"})},{additionalProperties:!1}),result:m.Null()}),live:F({id:"ragents.processes",description:"The live state of a run's process monitoring. Rights: runs.read and ragents.processes.read.",rights:["runs.read","ragents.processes.read"],params:m.Object({runId:M},{additionalProperties:!1}),message:S("RunProcessMessage")})};var w=t("react","useEffect");var U=t("react","useLayoutEffect");var c=t("react","useRef");var I=t("react","useState");var D=t("@ragents/web/AccessContext","useAccess");var $=t("@ragents/web/ui","Dialog");var B=t("@ragents/web/ui","DialogBody");var j=t("@ragents/web/ui","DialogContent");var W=t("@ragents/web/ui","DialogHeader");var V=t("@ragents/web/ui","DialogTitle");var _=t("@ragents/web/ui","StopButton");var h=t("@ragents/web/ui","cn");var E=t("@ragents/web/Toolbar","ToolbarCopy");var y=t("@ragents/web/Toolbar","ToolbarItem");var A=t("@ragents/web/Toolbar","ToolbarLabel");var L=t("@ragents/web/Toolbar","ToolbarText");var O=t("@ragents/web/rpc","rpc");var b=t("@ragents/web/lib/guards","isRecord");var Y=4,le=["tool-call","background"],de=e=>{if(!b(e)||typeof e.port!="number"||typeof e.address!="string")throw new Error("A port entry of the process monitoring is unreadable");return{port:e.port,address:e.address}},pe=e=>{if(!b(e)||typeof e.id!="string"||!e.id||typeof e.pid!="number"||typeof e.label!="string"||typeof e.command!="string"||typeof e.seenSince!="string"||!le.includes(e.origin)||!Array.isArray(e.ports))throw new Error("A process entry of the process monitoring is unreadable");return{id:e.id,pid:e.pid,label:e.label,command:e.command,origin:e.origin,ports:e.ports.map(de),seenSince:e.seenSince}},ue=e=>{if(!b(e)||typeof e.runId!="string"||typeof e.observedAt!="string"||!Array.isArray(e.processes))throw new Error("The process monitoring snapshot is unreadable");return{runId:e.runId,observedAt:e.observedAt,processes:e.processes.map(pe)}},Z=e=>{if(!b(e))throw new Error("The process monitoring message is unreadable");if(e.kind==="error"&&typeof e.error=="string")return{kind:"error",error:e.error};if(e.kind==="snapshot")return{kind:"snapshot",snapshot:ue(e.snapshot)};throw new Error("The process monitoring message has an unknown kind")},ee=(e,r)=>`http://${e.includes(":")?`[${e}]`:e}:${r}/`,K=e=>e.ports.length>0?"Service":"Process",ie=e=>e==="background"?"keeps running in the background":"runs in a tool call",me=e=>{let r=new Date(e);return Number.isNaN(r.getTime())?e:r.toLocaleTimeString("en-US")},z=e=>{let r=e.ports.length>0?`
2
+ Listening on ${e.ports.map(s=>`${s.address}:${s.port}`).join(", ")}`:"";return`${e.command}
3
+ PID ${e.pid}, ${ie(e.origin)}, observed since ${me(e.seenSince)}${r}`},te=e=>({shown:e.slice(0,Y),hidden:Math.max(0,e.length-Y)});var q=t("react/jsx-runtime","Fragment");var a=t("react/jsx-runtime","jsx");var n=t("react/jsx-runtime","jsxs");var re={snapshot:void 0,error:void 0},xe="inline-flex h-6 min-w-0 items-center gap-1.5 whitespace-nowrap rounded-full border border-border-soft bg-card/78 pl-2.5 pr-0.5 text-xs font-medium text-muted-foreground data-[origin=background]:border-dashed [&>svg]:flex-none",ce="flex-none rounded-full bg-primary/14 px-1.5 py-px text-foreground tabular-nums underline underline-offset-2 hover:bg-primary/28 focus-visible:bg-primary/28",ge="size-5 min-w-5 rounded-full p-0.75 [&_svg]:size-2.5",be=e=>{let[r,s]=I(re);return w(()=>(s(re),O.subscribe(H.live,{runId:e},l=>{try{let f=Z(l);if(f.kind==="snapshot"&&f.snapshot.runId!==e)throw new Error("The process snapshot belongs to another run");s(p=>f.kind==="snapshot"?{snapshot:f.snapshot,error:void 0}:{snapshot:p.snapshot,error:f.error})}catch(f){s(p=>({...p,error:f instanceof Error?f.message:String(f)}))}},l=>s(f=>({...f,error:l})))),[e]),r};function oe(){return n("svg",{"aria-hidden":!0,fill:"none",height:"12",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.8",viewBox:"0 0 24 24",width:"12",children:[a("rect",{height:"16",rx:"2",width:"18",x:"3",y:"4"}),a("path",{d:"m7 9 3 3-3 3M13 15h4"})]})}function Ie({process:e,state:r,writable:s,onStop:l,toolbar:f=!1}){let p=a(_,{busy:r?.busy===!0,className:ge,disabled:!s||r?.busy,label:r?.busy?`Stopping ${e.label}`:`Stop ${e.label}`,onClick:l,size:"icon-xs",title:s?r?.busy?"Stopping ...":`Stop ${e.label}`:"Write or inspect rights are missing to stop"}),d=e.ports.map(u=>n("a",{className:ce,href:ee(window.location.hostname,u.port),rel:"noreferrer",target:"_blank",title:`Open ${u.address}:${u.port} in a new tab`,children:[":",u.port]},`${u.address}:${u.port}`));return n("div",{className:h("flex min-w-0 flex-col",f?"flex-none self-stretch max-md:not-first:hidden":"w-full"),"data-process-id":e.id,children:[f?n(y,{className:"max-w-none flex-1 data-[origin=background]:[border-right-style:dashed]","data-origin":e.origin,title:z(e),children:[a(oe,{}),n(E,{className:"w-35 flex-none",children:[a(A,{children:K(e)}),a(L,{children:e.label})]}),d,p]}):n("span",{className:h(xe,"w-full"),"data-origin":e.origin,title:z(e),children:[a(oe,{}),a("em",{className:"flex-none text-[0.56rem] font-bold uppercase not-italic tracking-[0.035em]",children:K(e)}),a("span",{className:"min-w-0 flex-1 overflow-hidden text-ellipsis text-foreground",children:e.label}),d,p]}),r?.error&&a("span",{className:h("text-[0.65rem] text-destructive",f?"max-w-62 overflow-hidden text-ellipsis whitespace-nowrap":"[overflow-wrap:anywhere]"),role:"alert",title:r.error,children:r.error})]})}function he({runId:e}){let r=D(),s=r.can("runs.write")&&r.can("runs.inspect"),l=be(e),[f,p]=I({}),[d,u]=I(!1),T=c(new Map),P=c(null),k=c(null),R=c(null),N=c(null),g=l.snapshot?.processes??[],{shown:G,hidden:v}=te(g);w(()=>{let o=T.current;return()=>{for(let i of o.values())i.abort();o.clear()}},[]),U(()=>{if(!R.current||R.current.isConnected||document.activeElement!==document.body)return;let o=(d?k.current:P.current)?.querySelector("button:not(:disabled), a[href]")??(d?k.current:null)??N.current;R.current=null,o?.focus({preventScroll:!0})},[l.snapshot,d]);let J=o=>{if(!(o.target instanceof HTMLElement))return;R.current=o.target;let i=P.current?.closest("header");N.current=[...i?.querySelectorAll("button:not(:disabled), a[href]")??[]].find(x=>!P.current?.contains(x))??null},fe=async o=>{if(!s||T.current.has(o.id)||f[o.id]?.busy)return;let i=new AbortController;T.current.set(o.id,i),p(x=>({...x,[o.id]:{busy:!0}}));try{await O.call(H.stop,{runId:e,processId:o.id},{signal:i.signal})}catch(x){i.signal.aborted||p(ne=>({...ne,[o.id]:{error:x instanceof Error?x.message:String(x)}}))}finally{T.current.delete(o.id)}},Q=(o,i=!1)=>a(Ie,{process:o,state:f[o.id],writable:s,toolbar:i,onStop:()=>{fe(o)}},o.id);return G.length===0&&l.error===void 0&&!d?null:n(q,{children:[n("div",{"aria-label":"Processes and ports of the run",className:"flex min-w-0 flex-none items-stretch self-stretch",ref:P,onFocusCapture:J,children:[G.map(o=>Q(o,!0)),(g.length>1||d)&&n(y,{as:"button",className:"md:data-[hidden=false]:hidden","data-hidden":v>0||d,type:"button",onClick:()=>u(!0),title:"Show all processes of the run",children:[a("span",{className:"max-md:hidden",children:v>0?`+${v} more`:"Processes"}),n("span",{className:"hidden max-md:inline",children:["All ",g.length]})]}),l.error!==void 0&&a(y,{className:"w-42 text-destructive",role:"status",title:l.error,children:n(E,{children:[a(A,{children:"Processes"}),a(L,{children:"Monitoring disrupted"})]})})]}),d&&a($,{open:!0,onOpenChange:o=>{o||(u(!1),g.length===0&&requestAnimationFrame(()=>N.current?.focus({preventScroll:!0})))},children:n(j,{scope:"run",children:[a(W,{children:a(V,{children:"Processes and ports"})}),n(B,{className:"flex flex-col gap-3 outline-none",ref:k,tabIndex:-1,onFocusCapture:J,children:[g.length>0?g.map(o=>Q(o)):a("p",{role:"status",children:"No active processes."}),l.error!==void 0&&a("p",{className:"text-destructive",role:"alert",children:l.error})]})]})})]})}var ae=()=>function({session:r}){let s=D();return s.can("runs.read")&&s.can("ragents.processes.read")?a(he,{runId:r.session.id},r.session.id):null};var ye=e=>({...e,sessionHeaders:[{readRight:"ragents.processes.read",requiresWorkspace:!0,id:"ragents.processes.live",order:110,Header:ae()}]}),se={id:X},gr={...se,activate:()=>ye(se)};export{gr as webPlugin};
4
4
  //# sourceMappingURL=/plugins/ragents.processes/web/index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["ragents-host-read:read", "ragents-host-value:typebox#Type", "ragents-host-value:@ragents/engine/src/rpc/contract#defineChannel", "ragents-host-value:@ragents/engine/src/rpc/contract#defineOperation", "ragents-host-value:@ragents/engine/src/http/contracts#openJson", "../../../plugins/ragents.processes/contract.ts", "ragents-host-value:react#useEffect", "ragents-host-value:react#useLayoutEffect", "ragents-host-value:react#useRef", "ragents-host-value:react#useState", "ragents-host-value:@ragents/web/AccessContext#useAccess", "ragents-host-value:@ragents/web/ui#Dialog", "ragents-host-value:@ragents/web/ui#DialogBody", "ragents-host-value:@ragents/web/ui#DialogContent", "ragents-host-value:@ragents/web/ui#DialogHeader", "ragents-host-value:@ragents/web/ui#DialogTitle", "ragents-host-value:@ragents/web/ui#StopButton", "ragents-host-value:@ragents/web/ui#cn", "ragents-host-value:@ragents/web/Toolbar#ToolbarCopy", "ragents-host-value:@ragents/web/Toolbar#ToolbarItem", "ragents-host-value:@ragents/web/Toolbar#ToolbarLabel", "ragents-host-value:@ragents/web/Toolbar#ToolbarText", "ragents-host-value:@ragents/web/rpc#rpc", "ragents-host-value:@ragents/web/lib/guards#isRecord", "../../../plugins/ragents.processes/web/processes.ts", "ragents-host-value:react/jsx-runtime#Fragment", "ragents-host-value:react/jsx-runtime#jsx", "ragents-host-value:react/jsx-runtime#jsxs", "../../../plugins/ragents.processes/web/ProcessHeader.tsx", "../../../plugins/ragents.processes/web/index.tsx"],
4
- "sourcesContent": ["export const read = (specifier, name) => {\n const module = globalThis[\"__ragentsHostModules\"]?.[specifier];\n if (module === undefined) throw new Error(`Der Host stellt ${specifier} nicht bereit`);\n if (!(name in module)) throw new Error(`Der Host stellt ${name} aus ${specifier} nicht bereit; das Bundle ist gegen einen neueren Host gebaut`);\n return module[name];\n};", "import { read } from \"ragents-host-read:read\";\nexport default read(\"typebox\", \"Type\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/rpc/contract\", \"defineChannel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/rpc/contract\", \"defineOperation\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/http/contracts\", \"openJson\");\n", "import { Type } from \"typebox\";\nimport { defineChannel, defineOperation } from \"@ragents/engine/src/rpc/contract\";\nimport { openJson } from \"@ragents/engine/src/http/contracts\";\n\nexport const PROCESSES_PLUGIN_ID = \"ragents.processes\";\n\nexport interface RunProcessPort {\n port: number;\n address: string;\n}\n\nexport type RunProcessOrigin = \"tool-call\" | \"background\";\n\nexport interface RunProcess {\n id: string;\n pid: number;\n label: string;\n command: string;\n origin: RunProcessOrigin;\n ports: RunProcessPort[];\n seenSince: string;\n}\n\nexport interface RunProcessSnapshot {\n runId: string;\n observedAt: string;\n processes: RunProcess[];\n}\n\nexport type RunProcessMessage =\n | { kind: \"snapshot\"; snapshot: RunProcessSnapshot }\n | { kind: \"error\"; error: string };\n\nconst runId = Type.String({ minLength: 1, maxLength: 64, description: \"Kennung des Runs\" });\n\nexport const processesContracts = {\n snapshot: defineOperation({\n id: \"ragents.processes.snapshot\",\n description: \"Die beobachteten Prozesse eines Runs mit ihren offenen Ports. Rechte: runs.read und ragents.processes.read.\",\n rights: [\"runs.read\", \"ragents.processes.read\"],\n input: Type.Object({ runId }, { additionalProperties: false }),\n result: openJson<RunProcessSnapshot>(\"RunProcessSnapshot\"),\n }),\n stop: defineOperation({\n id: \"ragents.processes.stop\",\n description: \"Einen Prozess des Runs beenden. Rechte: runs.read, runs.write und runs.inspect.\",\n rights: [\"runs.read\", \"runs.write\", \"runs.inspect\"],\n input: Type.Object({\n runId,\n processId: Type.String({ pattern: \"^[1-9][0-9]*-[a-f0-9]{64}$\", description: \"Kennung des Prozesses aus dem Stand\" }),\n }, { additionalProperties: false }),\n result: Type.Null(),\n }),\n live: defineChannel({\n id: \"ragents.processes\",\n description: \"Der laufende Stand der Prozess\u00FCberwachung eines Runs. Rechte: runs.read und ragents.processes.read.\",\n rights: [\"runs.read\", \"ragents.processes.read\"],\n params: Type.Object({ runId }, { additionalProperties: false }),\n message: openJson<RunProcessMessage>(\"RunProcessMessage\"),\n }),\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useLayoutEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useState\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/AccessContext\", \"useAccess\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Dialog\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogBody\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogHeader\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"StopButton\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"cn\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarCopy\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarText\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/rpc\", \"rpc\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/guards\", \"isRecord\");\n", "import { isRecord } from \"@ragents/web/lib/guards\";\nimport type { RunProcess, RunProcessMessage, RunProcessPort, RunProcessSnapshot } from \"../contract\";\n\nexport const VISIBLE_PROCESSES = 4;\n\nconst ORIGINS = [\"tool-call\", \"background\"] as const;\n\nconst portFrom = (value: unknown): RunProcessPort => {\n if (!isRecord(value) || typeof value.port !== \"number\" || typeof value.address !== \"string\") {\n throw new Error(\"Ein Port-Eintrag der Prozess\u00FCberwachung ist unlesbar\");\n }\n return { port: value.port, address: value.address };\n};\n\nconst processFrom = (value: unknown): RunProcess => {\n if (!isRecord(value) || typeof value.id !== \"string\" || !value.id || typeof value.pid !== \"number\" || typeof value.label !== \"string\"\n || typeof value.command !== \"string\" || typeof value.seenSince !== \"string\"\n || !ORIGINS.includes(value.origin as RunProcess[\"origin\"]) || !Array.isArray(value.ports)) {\n throw new Error(\"Ein Prozess-Eintrag der Prozess\u00FCberwachung ist unlesbar\");\n }\n return {\n id: value.id,\n pid: value.pid,\n label: value.label,\n command: value.command,\n origin: value.origin as RunProcess[\"origin\"],\n ports: value.ports.map(portFrom),\n seenSince: value.seenSince,\n };\n};\n\nconst snapshotFrom = (value: unknown): RunProcessSnapshot => {\n if (!isRecord(value) || typeof value.runId !== \"string\" || typeof value.observedAt !== \"string\"\n || !Array.isArray(value.processes)) {\n throw new Error(\"Der Stand der Prozess\u00FCberwachung ist unlesbar\");\n }\n return { runId: value.runId, observedAt: value.observedAt, processes: value.processes.map(processFrom) };\n};\n\nexport const messageFrom = (value: unknown): RunProcessMessage => {\n if (!isRecord(value)) throw new Error(\"Die Nachricht der Prozess\u00FCberwachung ist unlesbar\");\n if (value.kind === \"error\" && typeof value.error === \"string\") return { kind: \"error\", error: value.error };\n if (value.kind === \"snapshot\") return { kind: \"snapshot\", snapshot: snapshotFrom(value.snapshot) };\n throw new Error(\"Die Nachricht der Prozess\u00FCberwachung hat eine unbekannte Art\");\n};\n\nexport const serviceUrl = (hostname: string, port: number): string =>\n `http://${hostname.includes(\":\") ? `[${hostname}]` : hostname}:${port}/`;\n\nexport const kindLabel = (process: RunProcess): string => process.ports.length > 0 ? \"Dienst\" : \"Prozess\";\n\nconst originText = (origin: RunProcess[\"origin\"]): string =>\n origin === \"background\" ? \"l\u00E4uft im Hintergrund weiter\" : \"l\u00E4uft in einem Werkzeugaufruf\";\n\nconst timeText = (iso: string): string => {\n const parsed = new Date(iso);\n return Number.isNaN(parsed.getTime()) ? iso : parsed.toLocaleTimeString(\"de-DE\");\n};\n\nexport const titleOf = (process: RunProcess): string => {\n const ports = process.ports.length > 0\n ? `\\nLauscht auf ${process.ports.map((port) => `${port.address}:${port.port}`).join(\", \")}`\n : \"\";\n return `${process.command}\\nPID ${process.pid}, ${originText(process.origin)}, beobachtet seit ${timeText(process.seenSince)}${ports}`;\n};\n\nexport interface VisibleProcesses {\n shown: readonly RunProcess[];\n hidden: number;\n}\n\nexport const visibleProcesses = (processes: readonly RunProcess[]): VisibleProcesses => ({\n shown: processes.slice(0, VISIBLE_PROCESSES),\n hidden: Math.max(0, processes.length - VISIBLE_PROCESSES),\n});\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"Fragment\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsxs\");\n", "import { useEffect, useLayoutEffect, useRef, useState, type ComponentType, type FocusEvent } from \"react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport type { SessionHeaderContext } from \"@ragents/web/PluginRegistry\";\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle, StopButton, cn } from \"@ragents/web/ui\";\nimport { ToolbarCopy, ToolbarItem, ToolbarLabel, ToolbarText } from \"@ragents/web/Toolbar\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { processesContracts, type RunProcess, type RunProcessSnapshot } from \"../contract\";\nimport { kindLabel, messageFrom, serviceUrl, titleOf, visibleProcesses } from \"./processes\";\n\ninterface ProcessWatchState {\n snapshot: RunProcessSnapshot | undefined;\n error: string | undefined;\n}\n\nconst idle: ProcessWatchState = { snapshot: undefined, error: undefined };\n\nconst pillClass = \"inline-flex h-6 min-w-0 items-center gap-1.5 whitespace-nowrap rounded-full border border-border-soft bg-card/78 pl-2.5 pr-0.5 text-xs font-medium text-muted-foreground data-[origin=background]:border-dashed [&>svg]:flex-none\";\nconst portClass = \"flex-none rounded-full bg-primary/14 px-1.5 py-px text-foreground tabular-nums underline underline-offset-2 hover:bg-primary/28 focus-visible:bg-primary/28\";\nconst stopClass = \"size-5 min-w-5 rounded-full p-0.75 [&_svg]:size-2.5\";\n\nconst useRunProcesses = (runId: string): ProcessWatchState => {\n const [state, setState] = useState<ProcessWatchState>(idle);\n useEffect(() => {\n setState(idle);\n return rpc.subscribe(processesContracts.live, { runId }, (data) => {\n try {\n const message = messageFrom(data);\n if (message.kind === \"snapshot\" && message.snapshot.runId !== runId) throw new Error(\"Der Prozessstand geh\u00F6rt zu einem anderen Run\");\n setState((current) => message.kind === \"snapshot\"\n ? { snapshot: message.snapshot, error: undefined }\n : { snapshot: current.snapshot, error: message.error });\n } catch (caught) {\n setState((current) => ({ ...current, error: caught instanceof Error ? caught.message : String(caught) }));\n }\n }, (message) => setState((current) => ({ ...current, error: message })));\n }, [runId]);\n return state;\n};\n\nfunction IconProcess() {\n return <svg aria-hidden fill=\"none\" height=\"12\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.8\" viewBox=\"0 0 24 24\" width=\"12\">\n <rect height=\"16\" rx=\"2\" width=\"18\" x=\"3\" y=\"4\" />\n <path d=\"m7 9 3 3-3 3M13 15h4\" />\n </svg>;\n}\n\ninterface StopState { busy?: boolean; error?: string }\n\nfunction ProcessPill({ process, state, writable, onStop, toolbar = false }: { process: RunProcess; state?: StopState; writable: boolean; onStop: () => void; toolbar?: boolean }) {\n const stop = <StopButton busy={state?.busy === true} className={stopClass} disabled={!writable || state?.busy}\n label={state?.busy ? `${process.label} wird beendet` : `${process.label} beenden`}\n onClick={onStop} size=\"icon-xs\"\n title={!writable ? \"Zum Beenden fehlen Schreib- oder Inspektionsrechte\" : state?.busy ? \"Wird beendet ...\" : `${process.label} beenden`} />;\n const ports = process.ports.map((port) => <a className={portClass} href={serviceUrl(window.location.hostname, port.port)}\n key={`${port.address}:${port.port}`} rel=\"noreferrer\" target=\"_blank\" title={`${port.address}:${port.port} im neuen Tab \u00F6ffnen`}>\n :{port.port}\n </a>);\n return <div className={cn(\"flex min-w-0 flex-col\", toolbar ? \"flex-none self-stretch max-md:not-first:hidden\" : \"w-full\")} data-process-id={process.id}>\n {toolbar\n ? <ToolbarItem className=\"max-w-none flex-1 data-[origin=background]:[border-right-style:dashed]\" data-origin={process.origin} title={titleOf(process)}>\n <IconProcess />\n <ToolbarCopy className=\"w-35 flex-none\">\n <ToolbarLabel>{kindLabel(process)}</ToolbarLabel>\n <ToolbarText>{process.label}</ToolbarText>\n </ToolbarCopy>\n {ports}\n {stop}\n </ToolbarItem>\n : <span className={cn(pillClass, \"w-full\")} data-origin={process.origin} title={titleOf(process)}>\n <IconProcess />\n <em className=\"flex-none text-[0.56rem] font-bold uppercase not-italic tracking-[0.035em]\">{kindLabel(process)}</em>\n <span className=\"min-w-0 flex-1 overflow-hidden text-ellipsis text-foreground\">{process.label}</span>\n {ports}\n {stop}\n </span>}\n {state?.error && <span className={cn(\"text-[0.65rem] text-destructive\", toolbar ? \"max-w-62 overflow-hidden text-ellipsis whitespace-nowrap\" : \"[overflow-wrap:anywhere]\")}\n role=\"alert\" title={state.error}>{state.error}</span>}\n </div>;\n}\n\nfunction ProcessHeaderContent({ runId }: { runId: string }) {\n const access = useAccess();\n const writable = access.can(\"runs.write\") && access.can(\"runs.inspect\");\n const state = useRunProcesses(runId);\n const [stops, setStops] = useState<Record<string, StopState>>({});\n const [allOpen, setAllOpen] = useState(false);\n const requests = useRef(new Map<string, AbortController>());\n const rootRef = useRef<HTMLDivElement>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n const focused = useRef<HTMLElement>(null);\n const fallback = useRef<HTMLElement>(null);\n const processes = state.snapshot?.processes ?? [];\n const { shown, hidden } = visibleProcesses(processes);\n useEffect(() => {\n const active = requests.current;\n return () => { for (const controller of active.values()) controller.abort(); active.clear(); };\n }, []);\n useLayoutEffect(() => {\n if (!focused.current || focused.current.isConnected || document.activeElement !== document.body) return;\n const target = (allOpen ? dialogRef.current : rootRef.current)?.querySelector<HTMLElement>(\"button:not(:disabled), a[href]\")\n ?? (allOpen ? dialogRef.current : null) ?? fallback.current;\n focused.current = null;\n target?.focus({ preventScroll: true });\n }, [state.snapshot, allOpen]);\n const rememberFocus = (event: FocusEvent<HTMLElement>) => {\n if (!(event.target instanceof HTMLElement)) return;\n focused.current = event.target;\n const header = rootRef.current?.closest(\"header\");\n fallback.current = [...(header?.querySelectorAll<HTMLElement>(\"button:not(:disabled), a[href]\") ?? [])]\n .find((element) => !rootRef.current?.contains(element)) ?? null;\n };\n const stop = async (process: RunProcess) => {\n if (!writable || requests.current.has(process.id) || stops[process.id]?.busy) return;\n const controller = new AbortController();\n requests.current.set(process.id, controller);\n setStops((current) => ({ ...current, [process.id]: { busy: true } }));\n try {\n await rpc.call(processesContracts.stop, { runId, processId: process.id }, { signal: controller.signal });\n } catch (cause) {\n if (!controller.signal.aborted) setStops((current) => ({ ...current, [process.id]: { error: cause instanceof Error ? cause.message : String(cause) } }));\n } finally { requests.current.delete(process.id); }\n };\n const renderProcess = (process: RunProcess, toolbar = false) => <ProcessPill key={process.id} process={process} state={stops[process.id]} writable={writable} toolbar={toolbar} onStop={() => { void stop(process); }} />;\n if (shown.length === 0 && state.error === undefined && !allOpen) return null;\n return <>\n <div aria-label=\"Prozesse und Ports des Runs\" className=\"flex min-w-0 flex-none items-stretch self-stretch\" ref={rootRef} onFocusCapture={rememberFocus}>\n {shown.map((process) => renderProcess(process, true))}\n {(processes.length > 1 || allOpen) && <ToolbarItem as=\"button\" className=\"md:data-[hidden=false]:hidden\" data-hidden={hidden > 0 || allOpen} type=\"button\" onClick={() => setAllOpen(true)} title=\"Alle Prozesse des Runs anzeigen\">\n <span className=\"max-md:hidden\">{hidden > 0 ? `+${hidden} weitere` : \"Prozesse\"}</span><span className=\"hidden max-md:inline\">Alle {processes.length}</span>\n </ToolbarItem>}\n {state.error !== undefined && <ToolbarItem className=\"w-42 text-destructive\" role=\"status\" title={state.error}><ToolbarCopy><ToolbarLabel>Prozesse</ToolbarLabel><ToolbarText>\u00DCberwachung gest\u00F6rt</ToolbarText></ToolbarCopy></ToolbarItem>}\n </div>\n {allOpen && <Dialog open onOpenChange={(open) => {\n if (open) return;\n setAllOpen(false);\n if (processes.length === 0) requestAnimationFrame(() => fallback.current?.focus({ preventScroll: true }));\n }}>\n <DialogContent scope=\"run\">\n <DialogHeader><DialogTitle>Prozesse und Ports</DialogTitle></DialogHeader>\n <DialogBody className=\"flex flex-col gap-3 outline-none\" ref={dialogRef} tabIndex={-1} onFocusCapture={rememberFocus}>\n {processes.length > 0 ? processes.map((process) => renderProcess(process)) : <p role=\"status\">Keine aktiven Prozesse.</p>}\n {state.error !== undefined && <p className=\"text-destructive\" role=\"alert\">{state.error}</p>}\n </DialogBody>\n </DialogContent>\n </Dialog>}\n </>;\n}\n\nexport const processHeader = (): ComponentType<SessionHeaderContext> =>\n function ProcessHeader({ session }: SessionHeaderContext) {\n const access = useAccess();\n return access.can(\"runs.read\") && access.can(\"ragents.processes.read\")\n ? <ProcessHeaderContent key={session.session.id} runId={session.session.id} /> : null;\n };\n", "import {\n type WebPlugin,\n type WebPluginDescriptor,\n} from \"@ragents/web/PluginRegistry\";\nimport { PROCESSES_PLUGIN_ID } from \"../contract\";\nimport { processHeader } from \"./ProcessHeader\";\n\nconst configuredPlugin = (descriptor: WebPluginDescriptor): WebPlugin => ({\n ...descriptor,\n sessionHeaders: [{\n readRight: \"ragents.processes.read\",\n requiresWorkspace: true,\n id: \"ragents.processes.live\",\n order: 110,\n Header: processHeader(),\n }],\n});\n\nconst descriptor: WebPluginDescriptor = { id: PROCESSES_PLUGIN_ID };\n\nexport const webPlugin: WebPlugin = {\n ...descriptor,\n activate: () => configuredPlugin(descriptor),\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["export const read = (specifier, name) => {\n const module = globalThis[\"__ragentsHostModules\"]?.[specifier];\n if (module === undefined) throw new Error(`The host does not provide ${specifier}`);\n if (!(name in module)) throw new Error(`The host does not provide ${name} from ${specifier}; the bundle was built against a newer host`);\n return module[name];\n};", "import { read } from \"ragents-host-read:read\";\nexport default read(\"typebox\", \"Type\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/rpc/contract\", \"defineChannel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/rpc/contract\", \"defineOperation\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/http/contracts\", \"openJson\");\n", "import { Type } from \"typebox\";\nimport { defineChannel, defineOperation } from \"@ragents/engine/src/rpc/contract\";\nimport { openJson } from \"@ragents/engine/src/http/contracts\";\n\nexport const PROCESSES_PLUGIN_ID = \"ragents.processes\";\n\nexport interface RunProcessPort {\n port: number;\n address: string;\n}\n\nexport type RunProcessOrigin = \"tool-call\" | \"background\";\n\nexport interface RunProcess {\n id: string;\n pid: number;\n label: string;\n command: string;\n origin: RunProcessOrigin;\n ports: RunProcessPort[];\n seenSince: string;\n}\n\nexport interface RunProcessSnapshot {\n runId: string;\n observedAt: string;\n processes: RunProcess[];\n}\n\nexport type RunProcessMessage =\n | { kind: \"snapshot\"; snapshot: RunProcessSnapshot }\n | { kind: \"error\"; error: string };\n\nconst runId = Type.String({ minLength: 1, maxLength: 64, description: \"Run id\" });\n\nexport const processesContracts = {\n snapshot: defineOperation({\n id: \"ragents.processes.snapshot\",\n description: \"The observed processes of a run with their open ports. Rights: runs.read and ragents.processes.read.\",\n rights: [\"runs.read\", \"ragents.processes.read\"],\n input: Type.Object({ runId }, { additionalProperties: false }),\n result: openJson<RunProcessSnapshot>(\"RunProcessSnapshot\"),\n }),\n stop: defineOperation({\n id: \"ragents.processes.stop\",\n description: \"End a process of the run. Rights: runs.read, runs.write and runs.inspect.\",\n rights: [\"runs.read\", \"runs.write\", \"runs.inspect\"],\n input: Type.Object({\n runId,\n processId: Type.String({ pattern: \"^[1-9][0-9]*-[a-f0-9]{64}$\", description: \"Process id from the snapshot\" }),\n }, { additionalProperties: false }),\n result: Type.Null(),\n }),\n live: defineChannel({\n id: \"ragents.processes\",\n description: \"The live state of a run's process monitoring. Rights: runs.read and ragents.processes.read.\",\n rights: [\"runs.read\", \"ragents.processes.read\"],\n params: Type.Object({ runId }, { additionalProperties: false }),\n message: openJson<RunProcessMessage>(\"RunProcessMessage\"),\n }),\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useLayoutEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useState\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/AccessContext\", \"useAccess\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Dialog\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogBody\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogHeader\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"StopButton\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"cn\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarCopy\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarText\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/rpc\", \"rpc\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/guards\", \"isRecord\");\n", "import { isRecord } from \"@ragents/web/lib/guards\";\nimport type { RunProcess, RunProcessMessage, RunProcessPort, RunProcessSnapshot } from \"../contract\";\n\nexport const VISIBLE_PROCESSES = 4;\n\nconst ORIGINS = [\"tool-call\", \"background\"] as const;\n\nconst portFrom = (value: unknown): RunProcessPort => {\n if (!isRecord(value) || typeof value.port !== \"number\" || typeof value.address !== \"string\") {\n throw new Error(\"A port entry of the process monitoring is unreadable\");\n }\n return { port: value.port, address: value.address };\n};\n\nconst processFrom = (value: unknown): RunProcess => {\n if (!isRecord(value) || typeof value.id !== \"string\" || !value.id || typeof value.pid !== \"number\" || typeof value.label !== \"string\"\n || typeof value.command !== \"string\" || typeof value.seenSince !== \"string\"\n || !ORIGINS.includes(value.origin as RunProcess[\"origin\"]) || !Array.isArray(value.ports)) {\n throw new Error(\"A process entry of the process monitoring is unreadable\");\n }\n return {\n id: value.id,\n pid: value.pid,\n label: value.label,\n command: value.command,\n origin: value.origin as RunProcess[\"origin\"],\n ports: value.ports.map(portFrom),\n seenSince: value.seenSince,\n };\n};\n\nconst snapshotFrom = (value: unknown): RunProcessSnapshot => {\n if (!isRecord(value) || typeof value.runId !== \"string\" || typeof value.observedAt !== \"string\"\n || !Array.isArray(value.processes)) {\n throw new Error(\"The process monitoring snapshot is unreadable\");\n }\n return { runId: value.runId, observedAt: value.observedAt, processes: value.processes.map(processFrom) };\n};\n\nexport const messageFrom = (value: unknown): RunProcessMessage => {\n if (!isRecord(value)) throw new Error(\"The process monitoring message is unreadable\");\n if (value.kind === \"error\" && typeof value.error === \"string\") return { kind: \"error\", error: value.error };\n if (value.kind === \"snapshot\") return { kind: \"snapshot\", snapshot: snapshotFrom(value.snapshot) };\n throw new Error(\"The process monitoring message has an unknown kind\");\n};\n\nexport const serviceUrl = (hostname: string, port: number): string =>\n `http://${hostname.includes(\":\") ? `[${hostname}]` : hostname}:${port}/`;\n\nexport const kindLabel = (process: RunProcess): string => process.ports.length > 0 ? \"Service\" : \"Process\";\n\nconst originText = (origin: RunProcess[\"origin\"]): string =>\n origin === \"background\" ? \"keeps running in the background\" : \"runs in a tool call\";\n\nconst timeText = (iso: string): string => {\n const parsed = new Date(iso);\n return Number.isNaN(parsed.getTime()) ? iso : parsed.toLocaleTimeString(\"en-US\");\n};\n\nexport const titleOf = (process: RunProcess): string => {\n const ports = process.ports.length > 0\n ? `\\nListening on ${process.ports.map((port) => `${port.address}:${port.port}`).join(\", \")}`\n : \"\";\n return `${process.command}\\nPID ${process.pid}, ${originText(process.origin)}, observed since ${timeText(process.seenSince)}${ports}`;\n};\n\nexport interface VisibleProcesses {\n shown: readonly RunProcess[];\n hidden: number;\n}\n\nexport const visibleProcesses = (processes: readonly RunProcess[]): VisibleProcesses => ({\n shown: processes.slice(0, VISIBLE_PROCESSES),\n hidden: Math.max(0, processes.length - VISIBLE_PROCESSES),\n});\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"Fragment\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsxs\");\n", "import { useEffect, useLayoutEffect, useRef, useState, type ComponentType, type FocusEvent } from \"react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport type { SessionHeaderContext } from \"@ragents/web/PluginRegistry\";\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle, StopButton, cn } from \"@ragents/web/ui\";\nimport { ToolbarCopy, ToolbarItem, ToolbarLabel, ToolbarText } from \"@ragents/web/Toolbar\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { processesContracts, type RunProcess, type RunProcessSnapshot } from \"../contract\";\nimport { kindLabel, messageFrom, serviceUrl, titleOf, visibleProcesses } from \"./processes\";\n\ninterface ProcessWatchState {\n snapshot: RunProcessSnapshot | undefined;\n error: string | undefined;\n}\n\nconst idle: ProcessWatchState = { snapshot: undefined, error: undefined };\n\nconst pillClass = \"inline-flex h-6 min-w-0 items-center gap-1.5 whitespace-nowrap rounded-full border border-border-soft bg-card/78 pl-2.5 pr-0.5 text-xs font-medium text-muted-foreground data-[origin=background]:border-dashed [&>svg]:flex-none\";\nconst portClass = \"flex-none rounded-full bg-primary/14 px-1.5 py-px text-foreground tabular-nums underline underline-offset-2 hover:bg-primary/28 focus-visible:bg-primary/28\";\nconst stopClass = \"size-5 min-w-5 rounded-full p-0.75 [&_svg]:size-2.5\";\n\nconst useRunProcesses = (runId: string): ProcessWatchState => {\n const [state, setState] = useState<ProcessWatchState>(idle);\n useEffect(() => {\n setState(idle);\n return rpc.subscribe(processesContracts.live, { runId }, (data) => {\n try {\n const message = messageFrom(data);\n if (message.kind === \"snapshot\" && message.snapshot.runId !== runId) throw new Error(\"The process snapshot belongs to another run\");\n setState((current) => message.kind === \"snapshot\"\n ? { snapshot: message.snapshot, error: undefined }\n : { snapshot: current.snapshot, error: message.error });\n } catch (caught) {\n setState((current) => ({ ...current, error: caught instanceof Error ? caught.message : String(caught) }));\n }\n }, (message) => setState((current) => ({ ...current, error: message })));\n }, [runId]);\n return state;\n};\n\nfunction IconProcess() {\n return <svg aria-hidden fill=\"none\" height=\"12\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.8\" viewBox=\"0 0 24 24\" width=\"12\">\n <rect height=\"16\" rx=\"2\" width=\"18\" x=\"3\" y=\"4\" />\n <path d=\"m7 9 3 3-3 3M13 15h4\" />\n </svg>;\n}\n\ninterface StopState { busy?: boolean; error?: string }\n\nfunction ProcessPill({ process, state, writable, onStop, toolbar = false }: { process: RunProcess; state?: StopState; writable: boolean; onStop: () => void; toolbar?: boolean }) {\n const stop = <StopButton busy={state?.busy === true} className={stopClass} disabled={!writable || state?.busy}\n label={state?.busy ? `Stopping ${process.label}` : `Stop ${process.label}`}\n onClick={onStop} size=\"icon-xs\"\n title={!writable ? \"Write or inspect rights are missing to stop\" : state?.busy ? \"Stopping ...\" : `Stop ${process.label}`} />;\n const ports = process.ports.map((port) => <a className={portClass} href={serviceUrl(window.location.hostname, port.port)}\n key={`${port.address}:${port.port}`} rel=\"noreferrer\" target=\"_blank\" title={`Open ${port.address}:${port.port} in a new tab`}>\n :{port.port}\n </a>);\n return <div className={cn(\"flex min-w-0 flex-col\", toolbar ? \"flex-none self-stretch max-md:not-first:hidden\" : \"w-full\")} data-process-id={process.id}>\n {toolbar\n ? <ToolbarItem className=\"max-w-none flex-1 data-[origin=background]:[border-right-style:dashed]\" data-origin={process.origin} title={titleOf(process)}>\n <IconProcess />\n <ToolbarCopy className=\"w-35 flex-none\">\n <ToolbarLabel>{kindLabel(process)}</ToolbarLabel>\n <ToolbarText>{process.label}</ToolbarText>\n </ToolbarCopy>\n {ports}\n {stop}\n </ToolbarItem>\n : <span className={cn(pillClass, \"w-full\")} data-origin={process.origin} title={titleOf(process)}>\n <IconProcess />\n <em className=\"flex-none text-[0.56rem] font-bold uppercase not-italic tracking-[0.035em]\">{kindLabel(process)}</em>\n <span className=\"min-w-0 flex-1 overflow-hidden text-ellipsis text-foreground\">{process.label}</span>\n {ports}\n {stop}\n </span>}\n {state?.error && <span className={cn(\"text-[0.65rem] text-destructive\", toolbar ? \"max-w-62 overflow-hidden text-ellipsis whitespace-nowrap\" : \"[overflow-wrap:anywhere]\")}\n role=\"alert\" title={state.error}>{state.error}</span>}\n </div>;\n}\n\nfunction ProcessHeaderContent({ runId }: { runId: string }) {\n const access = useAccess();\n const writable = access.can(\"runs.write\") && access.can(\"runs.inspect\");\n const state = useRunProcesses(runId);\n const [stops, setStops] = useState<Record<string, StopState>>({});\n const [allOpen, setAllOpen] = useState(false);\n const requests = useRef(new Map<string, AbortController>());\n const rootRef = useRef<HTMLDivElement>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n const focused = useRef<HTMLElement>(null);\n const fallback = useRef<HTMLElement>(null);\n const processes = state.snapshot?.processes ?? [];\n const { shown, hidden } = visibleProcesses(processes);\n useEffect(() => {\n const active = requests.current;\n return () => { for (const controller of active.values()) controller.abort(); active.clear(); };\n }, []);\n useLayoutEffect(() => {\n if (!focused.current || focused.current.isConnected || document.activeElement !== document.body) return;\n const target = (allOpen ? dialogRef.current : rootRef.current)?.querySelector<HTMLElement>(\"button:not(:disabled), a[href]\")\n ?? (allOpen ? dialogRef.current : null) ?? fallback.current;\n focused.current = null;\n target?.focus({ preventScroll: true });\n }, [state.snapshot, allOpen]);\n const rememberFocus = (event: FocusEvent<HTMLElement>) => {\n if (!(event.target instanceof HTMLElement)) return;\n focused.current = event.target;\n const header = rootRef.current?.closest(\"header\");\n fallback.current = [...(header?.querySelectorAll<HTMLElement>(\"button:not(:disabled), a[href]\") ?? [])]\n .find((element) => !rootRef.current?.contains(element)) ?? null;\n };\n const stop = async (process: RunProcess) => {\n if (!writable || requests.current.has(process.id) || stops[process.id]?.busy) return;\n const controller = new AbortController();\n requests.current.set(process.id, controller);\n setStops((current) => ({ ...current, [process.id]: { busy: true } }));\n try {\n await rpc.call(processesContracts.stop, { runId, processId: process.id }, { signal: controller.signal });\n } catch (cause) {\n if (!controller.signal.aborted) setStops((current) => ({ ...current, [process.id]: { error: cause instanceof Error ? cause.message : String(cause) } }));\n } finally { requests.current.delete(process.id); }\n };\n const renderProcess = (process: RunProcess, toolbar = false) => <ProcessPill key={process.id} process={process} state={stops[process.id]} writable={writable} toolbar={toolbar} onStop={() => { void stop(process); }} />;\n if (shown.length === 0 && state.error === undefined && !allOpen) return null;\n return <>\n <div aria-label=\"Processes and ports of the run\" className=\"flex min-w-0 flex-none items-stretch self-stretch\" ref={rootRef} onFocusCapture={rememberFocus}>\n {shown.map((process) => renderProcess(process, true))}\n {(processes.length > 1 || allOpen) && <ToolbarItem as=\"button\" className=\"md:data-[hidden=false]:hidden\" data-hidden={hidden > 0 || allOpen} type=\"button\" onClick={() => setAllOpen(true)} title=\"Show all processes of the run\">\n <span className=\"max-md:hidden\">{hidden > 0 ? `+${hidden} more` : \"Processes\"}</span><span className=\"hidden max-md:inline\">All {processes.length}</span>\n </ToolbarItem>}\n {state.error !== undefined && <ToolbarItem className=\"w-42 text-destructive\" role=\"status\" title={state.error}><ToolbarCopy><ToolbarLabel>Processes</ToolbarLabel><ToolbarText>Monitoring disrupted</ToolbarText></ToolbarCopy></ToolbarItem>}\n </div>\n {allOpen && <Dialog open onOpenChange={(open) => {\n if (open) return;\n setAllOpen(false);\n if (processes.length === 0) requestAnimationFrame(() => fallback.current?.focus({ preventScroll: true }));\n }}>\n <DialogContent scope=\"run\">\n <DialogHeader><DialogTitle>Processes and ports</DialogTitle></DialogHeader>\n <DialogBody className=\"flex flex-col gap-3 outline-none\" ref={dialogRef} tabIndex={-1} onFocusCapture={rememberFocus}>\n {processes.length > 0 ? processes.map((process) => renderProcess(process)) : <p role=\"status\">No active processes.</p>}\n {state.error !== undefined && <p className=\"text-destructive\" role=\"alert\">{state.error}</p>}\n </DialogBody>\n </DialogContent>\n </Dialog>}\n </>;\n}\n\nexport const processHeader = (): ComponentType<SessionHeaderContext> =>\n function ProcessHeader({ session }: SessionHeaderContext) {\n const access = useAccess();\n return access.can(\"runs.read\") && access.can(\"ragents.processes.read\")\n ? <ProcessHeaderContent key={session.session.id} runId={session.session.id} /> : null;\n };\n", "import {\n type WebPlugin,\n type WebPluginDescriptor,\n} from \"@ragents/web/PluginRegistry\";\nimport { PROCESSES_PLUGIN_ID } from \"../contract\";\nimport { processHeader } from \"./ProcessHeader\";\n\nconst configuredPlugin = (descriptor: WebPluginDescriptor): WebPlugin => ({\n ...descriptor,\n sessionHeaders: [{\n readRight: \"ragents.processes.read\",\n requiresWorkspace: true,\n id: \"ragents.processes.live\",\n order: 110,\n Header: processHeader(),\n }],\n});\n\nconst descriptor: WebPluginDescriptor = { id: PROCESSES_PLUGIN_ID };\n\nexport const webPlugin: WebPlugin = {\n ...descriptor,\n activate: () => configuredPlugin(descriptor),\n};\n"],
5
+ "mappings": "AAAO,IAAMA,EAAO,CAACC,EAAWC,IAAS,CACvC,IAAMC,EAAS,WAAW,uBAA0BF,CAAS,EAC7D,GAAIE,IAAW,OAAW,MAAM,IAAI,MAAM,6BAA6BF,CAAS,EAAE,EAClF,GAAI,EAAEC,KAAQC,GAAS,MAAM,IAAI,MAAM,6BAA6BD,CAAI,SAASD,CAAS,6CAA6C,EACvI,OAAOE,EAAOD,CAAI,CACpB,ECJA,IAAOE,EAAQC,EAAK,UAAW,MAAM,ECArC,IAAOC,EAAQC,EAAK,mCAAoC,eAAe,ECAvE,IAAOC,EAAQC,EAAK,mCAAoC,iBAAiB,ECAzE,IAAOC,EAAQC,EAAK,qCAAsC,UAAU,ECG7D,IAAMC,EAAsB,oBA6B7BC,EAAQC,EAAK,OAAO,CAAE,UAAW,EAAG,UAAW,GAAI,YAAa,QAAS,CAAC,EAEnEC,EAAqB,CAChC,SAAUC,EAAgB,CACxB,GAAI,6BACJ,YAAa,uGACb,OAAQ,CAAC,YAAa,wBAAwB,EAC9C,MAAOF,EAAK,OAAO,CAAE,MAAAD,CAAM,EAAG,CAAE,qBAAsB,EAAM,CAAC,EAC7D,OAAQI,EAA6B,oBAAoB,CAC3D,CAAC,EACD,KAAMD,EAAgB,CACpB,GAAI,yBACJ,YAAa,4EACb,OAAQ,CAAC,YAAa,aAAc,cAAc,EAClD,MAAOF,EAAK,OAAO,CACjB,MAAAD,EACA,UAAWC,EAAK,OAAO,CAAE,QAAS,6BAA8B,YAAa,8BAA+B,CAAC,CAC/G,EAAG,CAAE,qBAAsB,EAAM,CAAC,EAClC,OAAQA,EAAK,KAAK,CACpB,CAAC,EACD,KAAMI,EAAc,CAClB,GAAI,oBACJ,YAAa,8FACb,OAAQ,CAAC,YAAa,wBAAwB,EAC9C,OAAQJ,EAAK,OAAO,CAAE,MAAAD,CAAM,EAAG,CAAE,qBAAsB,EAAM,CAAC,EAC9D,QAASI,EAA4B,mBAAmB,CAC1D,CAAC,CACH,EC3DA,IAAOE,EAAQC,EAAK,QAAS,WAAW,ECAxC,IAAOC,EAAQC,EAAK,QAAS,iBAAiB,ECA9C,IAAOC,EAAQC,EAAK,QAAS,QAAQ,ECArC,IAAOC,EAAQC,EAAK,QAAS,UAAU,ECAvC,IAAOC,EAAQC,EAAK,6BAA8B,WAAW,ECA7D,IAAOC,EAAQC,EAAK,kBAAmB,QAAQ,ECA/C,IAAOC,EAAQC,EAAK,kBAAmB,YAAY,ECAnD,IAAOC,EAAQC,EAAK,kBAAmB,eAAe,ECAtD,IAAOC,EAAQC,EAAK,kBAAmB,cAAc,ECArD,IAAOC,EAAQC,EAAK,kBAAmB,aAAa,ECApD,IAAOC,EAAQC,EAAK,kBAAmB,YAAY,ECAnD,IAAOC,EAAQC,EAAK,kBAAmB,IAAI,ECA3C,IAAOC,EAAQC,EAAK,uBAAwB,aAAa,ECAzD,IAAOC,EAAQC,EAAK,uBAAwB,aAAa,ECAzD,IAAOC,EAAQC,EAAK,uBAAwB,cAAc,ECA1D,IAAOC,EAAQC,EAAK,uBAAwB,aAAa,ECAzD,IAAOC,EAAQC,EAAK,mBAAoB,KAAK,ECA7C,IAAOC,EAAQC,EAAK,0BAA2B,UAAU,ECElD,IAAMC,EAAoB,EAE3BC,GAAU,CAAC,YAAa,YAAY,EAEpCC,GAAYC,GAAmC,CACnD,GAAI,CAACC,EAASD,CAAK,GAAK,OAAOA,EAAM,MAAS,UAAY,OAAOA,EAAM,SAAY,SACjF,MAAM,IAAI,MAAM,sDAAsD,EAExE,MAAO,CAAE,KAAMA,EAAM,KAAM,QAASA,EAAM,OAAQ,CACpD,EAEME,GAAeF,GAA+B,CAClD,GAAI,CAACC,EAASD,CAAK,GAAK,OAAOA,EAAM,IAAO,UAAY,CAACA,EAAM,IAAM,OAAOA,EAAM,KAAQ,UAAY,OAAOA,EAAM,OAAU,UACxH,OAAOA,EAAM,SAAY,UAAY,OAAOA,EAAM,WAAc,UAChE,CAACF,GAAQ,SAASE,EAAM,MAA8B,GAAK,CAAC,MAAM,QAAQA,EAAM,KAAK,EACxF,MAAM,IAAI,MAAM,yDAAyD,EAE3E,MAAO,CACL,GAAIA,EAAM,GACV,IAAKA,EAAM,IACX,MAAOA,EAAM,MACb,QAASA,EAAM,QACf,OAAQA,EAAM,OACd,MAAOA,EAAM,MAAM,IAAID,EAAQ,EAC/B,UAAWC,EAAM,SACnB,CACF,EAEMG,GAAgBH,GAAuC,CAC3D,GAAI,CAACC,EAASD,CAAK,GAAK,OAAOA,EAAM,OAAU,UAAY,OAAOA,EAAM,YAAe,UAClF,CAAC,MAAM,QAAQA,EAAM,SAAS,EACjC,MAAM,IAAI,MAAM,+CAA+C,EAEjE,MAAO,CAAE,MAAOA,EAAM,MAAO,WAAYA,EAAM,WAAY,UAAWA,EAAM,UAAU,IAAIE,EAAW,CAAE,CACzG,EAEaE,EAAeJ,GAAsC,CAChE,GAAI,CAACC,EAASD,CAAK,EAAG,MAAM,IAAI,MAAM,8CAA8C,EACpF,GAAIA,EAAM,OAAS,SAAW,OAAOA,EAAM,OAAU,SAAU,MAAO,CAAE,KAAM,QAAS,MAAOA,EAAM,KAAM,EAC1G,GAAIA,EAAM,OAAS,WAAY,MAAO,CAAE,KAAM,WAAY,SAAUG,GAAaH,EAAM,QAAQ,CAAE,EACjG,MAAM,IAAI,MAAM,oDAAoD,CACtE,EAEaK,GAAa,CAACC,EAAkBC,IAC3C,UAAUD,EAAS,SAAS,GAAG,EAAI,IAAIA,CAAQ,IAAMA,CAAQ,IAAIC,CAAI,IAE1DC,EAAaC,GAAgCA,EAAQ,MAAM,OAAS,EAAI,UAAY,UAE3FC,GAAcC,GAClBA,IAAW,aAAe,kCAAoC,sBAE1DC,GAAYC,GAAwB,CACxC,IAAMC,EAAS,IAAI,KAAKD,CAAG,EAC3B,OAAO,OAAO,MAAMC,EAAO,QAAQ,CAAC,EAAID,EAAMC,EAAO,mBAAmB,OAAO,CACjF,EAEaC,EAAWN,GAAgC,CACtD,IAAMO,EAAQP,EAAQ,MAAM,OAAS,EACjC;AAAA,eAAkBA,EAAQ,MAAM,IAAKF,GAAS,GAAGA,EAAK,OAAO,IAAIA,EAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,GACxF,GACJ,MAAO,GAAGE,EAAQ,OAAO;AAAA,MAASA,EAAQ,GAAG,KAAKC,GAAWD,EAAQ,MAAM,CAAC,oBAAoBG,GAASH,EAAQ,SAAS,CAAC,GAAGO,CAAK,EACrI,EAOaC,GAAoBC,IAAwD,CACvF,MAAOA,EAAU,MAAM,EAAGrB,CAAiB,EAC3C,OAAQ,KAAK,IAAI,EAAGqB,EAAU,OAASrB,CAAiB,CAC1D,GCzEA,IAAOsB,EAAQC,EAAK,oBAAqB,UAAU,ECAnD,IAAOC,EAAQC,EAAK,oBAAqB,KAAK,ECA9C,IAAOC,EAAQC,EAAK,oBAAqB,MAAM,ECa/C,IAAMC,GAA0B,CAAE,SAAU,OAAW,MAAO,MAAU,EAElEC,GAAY,oOACZC,GAAY,8JACZC,GAAY,sDAEZC,GAAmBC,GAAqC,CAC5D,GAAM,CAACC,EAAOC,CAAQ,EAAIC,EAA4BR,EAAI,EAC1D,OAAAS,EAAU,KACRF,EAASP,EAAI,EACNU,EAAI,UAAUC,EAAmB,KAAM,CAAE,MAAAN,CAAM,EAAIO,GAAS,CACjE,GAAI,CACF,IAAMC,EAAUC,EAAYF,CAAI,EAChC,GAAIC,EAAQ,OAAS,YAAcA,EAAQ,SAAS,QAAUR,EAAO,MAAM,IAAI,MAAM,6CAA6C,EAClIE,EAAUQ,GAAYF,EAAQ,OAAS,WACnC,CAAE,SAAUA,EAAQ,SAAU,MAAO,MAAU,EAC/C,CAAE,SAAUE,EAAQ,SAAU,MAAOF,EAAQ,KAAM,CAAC,CAC1D,OAASG,EAAQ,CACfT,EAAUQ,IAAa,CAAE,GAAGA,EAAS,MAAOC,aAAkB,MAAQA,EAAO,QAAU,OAAOA,CAAM,CAAE,EAAE,CAC1G,CACF,EAAIH,GAAYN,EAAUQ,IAAa,CAAE,GAAGA,EAAS,MAAOF,CAAQ,EAAE,CAAC,GACtE,CAACR,CAAK,CAAC,EACHC,CACT,EAEA,SAASW,IAAc,CACrB,OAAOC,EAAC,OAAI,cAAW,GAAC,KAAK,OAAO,OAAO,KAAK,OAAO,eAAe,cAAc,QAAQ,eAAe,QAAQ,YAAY,MAAM,QAAQ,YAAY,MAAM,KAC7J,UAAAC,EAAC,QAAK,OAAO,KAAK,GAAG,IAAI,MAAM,KAAK,EAAE,IAAI,EAAE,IAAI,EAChDA,EAAC,QAAK,EAAE,uBAAuB,GACjC,CACF,CAIA,SAASC,GAAY,CAAE,QAAAC,EAAS,MAAAf,EAAO,SAAAgB,EAAU,OAAAC,EAAQ,QAAAC,EAAU,EAAM,EAAyG,CAChL,IAAMC,EAAON,EAACO,EAAA,CAAW,KAAMpB,GAAO,OAAS,GAAM,UAAWH,GAAW,SAAU,CAACmB,GAAYhB,GAAO,KACvG,MAAOA,GAAO,KAAO,YAAYe,EAAQ,KAAK,GAAK,QAAQA,EAAQ,KAAK,GACxE,QAASE,EAAQ,KAAK,UACtB,MAAQD,EAA2DhB,GAAO,KAAO,eAAiB,QAAQe,EAAQ,KAAK,GAApG,8CAAwG,EACvHM,EAAQN,EAAQ,MAAM,IAAKO,GAASV,EAAC,KAAE,UAAWhB,GAAW,KAAM2B,GAAW,OAAO,SAAS,SAAUD,EAAK,IAAI,EAChF,IAAI,aAAa,OAAO,SAAS,MAAO,QAAQA,EAAK,OAAO,IAAIA,EAAK,IAAI,gBAAiB,cAC7HA,EAAK,OADF,GAAGA,EAAK,OAAO,IAAIA,EAAK,IAAI,EAEnC,CAAI,EACJ,OAAOV,EAAC,OAAI,UAAWY,EAAG,wBAAyBN,EAAU,iDAAmD,QAAQ,EAAG,kBAAiBH,EAAQ,GACjJ,UAAAG,EACGN,EAACa,EAAA,CAAY,UAAU,yEAAyE,cAAaV,EAAQ,OAAQ,MAAOW,EAAQX,CAAO,EACnJ,UAAAF,EAACF,GAAA,EAAY,EACbC,EAACe,EAAA,CAAY,UAAU,iBACrB,UAAAd,EAACe,EAAA,CAAc,SAAAC,EAAUd,CAAO,EAAE,EAClCF,EAACiB,EAAA,CAAa,SAAAf,EAAQ,MAAM,GAC9B,EACCM,EACAF,GACH,EACEP,EAAC,QAAK,UAAWY,EAAG7B,GAAW,QAAQ,EAAG,cAAaoB,EAAQ,OAAQ,MAAOW,EAAQX,CAAO,EAC7F,UAAAF,EAACF,GAAA,EAAY,EACbE,EAAC,MAAG,UAAU,6EAA8E,SAAAgB,EAAUd,CAAO,EAAE,EAC/GF,EAAC,QAAK,UAAU,+DAAgE,SAAAE,EAAQ,MAAM,EAC7FM,EACAF,GACH,EACDnB,GAAO,OAASa,EAAC,QAAK,UAAWW,EAAG,kCAAmCN,EAAU,2DAA6D,0BAA0B,EACvK,KAAK,QAAQ,MAAOlB,EAAM,MAAQ,SAAAA,EAAM,MAAM,GAClD,CACF,CAEA,SAAS+B,GAAqB,CAAE,MAAAhC,CAAM,EAAsB,CAC1D,IAAMiC,EAASC,EAAU,EACnBjB,EAAWgB,EAAO,IAAI,YAAY,GAAKA,EAAO,IAAI,cAAc,EAChEhC,EAAQF,GAAgBC,CAAK,EAC7B,CAACmC,EAAOC,CAAQ,EAAIjC,EAAoC,CAAC,CAAC,EAC1D,CAACkC,EAASC,CAAU,EAAInC,EAAS,EAAK,EACtCoC,EAAWC,EAAO,IAAI,GAA8B,EACpDC,EAAUD,EAAuB,IAAI,EACrCE,EAAYF,EAAuB,IAAI,EACvCG,EAAUH,EAAoB,IAAI,EAClCI,EAAWJ,EAAoB,IAAI,EACnCK,EAAY5C,EAAM,UAAU,WAAa,CAAC,EAC1C,CAAE,MAAA6C,EAAO,OAAAC,CAAO,EAAIC,GAAiBH,CAAS,EACpDzC,EAAU,IAAM,CACd,IAAM6C,EAASV,EAAS,QACxB,MAAO,IAAM,CAAE,QAAWW,KAAcD,EAAO,OAAO,EAAGC,EAAW,MAAM,EAAGD,EAAO,MAAM,CAAG,CAC/F,EAAG,CAAC,CAAC,EACLE,EAAgB,IAAM,CACpB,GAAI,CAACR,EAAQ,SAAWA,EAAQ,QAAQ,aAAe,SAAS,gBAAkB,SAAS,KAAM,OACjG,IAAMS,GAAUf,EAAUK,EAAU,QAAUD,EAAQ,UAAU,cAA2B,gCAAgC,IACrHJ,EAAUK,EAAU,QAAU,OAASE,EAAS,QACtDD,EAAQ,QAAU,KAClBS,GAAQ,MAAM,CAAE,cAAe,EAAK,CAAC,CACvC,EAAG,CAACnD,EAAM,SAAUoC,CAAO,CAAC,EAC5B,IAAMgB,EAAiBC,GAAmC,CACxD,GAAI,EAAEA,EAAM,kBAAkB,aAAc,OAC5CX,EAAQ,QAAUW,EAAM,OACxB,IAAMC,EAASd,EAAQ,SAAS,QAAQ,QAAQ,EAChDG,EAAS,QAAU,CAAC,GAAIW,GAAQ,iBAA8B,gCAAgC,GAAK,CAAC,CAAE,EACnG,KAAMC,GAAY,CAACf,EAAQ,SAAS,SAASe,CAAO,CAAC,GAAK,IAC/D,EACMpC,GAAO,MAAOJ,GAAwB,CAC1C,GAAI,CAACC,GAAYsB,EAAS,QAAQ,IAAIvB,EAAQ,EAAE,GAAKmB,EAAMnB,EAAQ,EAAE,GAAG,KAAM,OAC9E,IAAMkC,EAAa,IAAI,gBACvBX,EAAS,QAAQ,IAAIvB,EAAQ,GAAIkC,CAAU,EAC3Cd,EAAU1B,IAAa,CAAE,GAAGA,EAAS,CAACM,EAAQ,EAAE,EAAG,CAAE,KAAM,EAAK,CAAE,EAAE,EACpE,GAAI,CACF,MAAMX,EAAI,KAAKC,EAAmB,KAAM,CAAE,MAAAN,EAAO,UAAWgB,EAAQ,EAAG,EAAG,CAAE,OAAQkC,EAAW,MAAO,CAAC,CACzG,OAASO,EAAO,CACTP,EAAW,OAAO,SAASd,EAAU1B,KAAa,CAAE,GAAGA,GAAS,CAACM,EAAQ,EAAE,EAAG,CAAE,MAAOyC,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAE,CAAE,EAAE,CACzJ,QAAE,CAAUlB,EAAS,QAAQ,OAAOvB,EAAQ,EAAE,CAAG,CACnD,EACM0C,EAAgB,CAAC1C,EAAqBG,EAAU,KAAUL,EAACC,GAAA,CAA6B,QAASC,EAAS,MAAOmB,EAAMnB,EAAQ,EAAE,EAAG,SAAUC,EAAU,QAASE,EAAS,OAAQ,IAAM,CAAOC,GAAKJ,CAAO,CAAG,GAAlIA,EAAQ,EAA6H,EACvN,OAAI8B,EAAM,SAAW,GAAK7C,EAAM,QAAU,QAAa,CAACoC,EAAgB,KACjExB,EAAA8C,EAAA,CACL,UAAA9C,EAAC,OAAI,aAAW,iCAAiC,UAAU,oDAAoD,IAAK4B,EAAS,eAAgBY,EAC1I,UAAAP,EAAM,IAAK9B,GAAY0C,EAAc1C,EAAS,EAAI,CAAC,GAClD6B,EAAU,OAAS,GAAKR,IAAYxB,EAACa,EAAA,CAAY,GAAG,SAAS,UAAU,gCAAgC,cAAaqB,EAAS,GAAKV,EAAS,KAAK,SAAS,QAAS,IAAMC,EAAW,EAAI,EAAG,MAAM,gCAChM,UAAAxB,EAAC,QAAK,UAAU,gBAAiB,SAAAiC,EAAS,EAAI,IAAIA,CAAM,QAAU,YAAY,EAAOlC,EAAC,QAAK,UAAU,uBAAuB,iBAAKgC,EAAU,QAAO,GACpJ,EACC5C,EAAM,QAAU,QAAaa,EAACY,EAAA,CAAY,UAAU,wBAAwB,KAAK,SAAS,MAAOzB,EAAM,MAAO,SAAAY,EAACe,EAAA,CAAY,UAAAd,EAACe,EAAA,CAAa,qBAAS,EAAef,EAACiB,EAAA,CAAY,gCAAoB,GAAc,EAAc,GACjO,EACCM,GAAWvB,EAAC8C,EAAA,CAAO,KAAI,GAAC,aAAeC,GAAS,CAC3CA,IACJvB,EAAW,EAAK,EACZO,EAAU,SAAW,GAAG,sBAAsB,IAAMD,EAAS,SAAS,MAAM,CAAE,cAAe,EAAK,CAAC,CAAC,EAC1G,EACE,SAAA/B,EAACiD,EAAA,CAAc,MAAM,MACnB,UAAAhD,EAACiD,EAAA,CAAa,SAAAjD,EAACkD,EAAA,CAAY,+BAAmB,EAAc,EAC5DnD,EAACoD,EAAA,CAAW,UAAU,mCAAmC,IAAKvB,EAAW,SAAU,GAAI,eAAgBW,EACpG,UAAAR,EAAU,OAAS,EAAIA,EAAU,IAAK7B,GAAY0C,EAAc1C,CAAO,CAAC,EAAIF,EAAC,KAAE,KAAK,SAAS,gCAAoB,EACjHb,EAAM,QAAU,QAAaa,EAAC,KAAE,UAAU,mBAAmB,KAAK,QAAS,SAAAb,EAAM,MAAM,GAC1F,GACF,EACF,GACF,CACF,CAEO,IAAMiE,GAAgB,IAC3B,SAAuB,CAAE,QAAAC,CAAQ,EAAyB,CACxD,IAAMlC,EAASC,EAAU,EACzB,OAAOD,EAAO,IAAI,WAAW,GAAKA,EAAO,IAAI,wBAAwB,EACjEnB,EAACkB,GAAA,CAA8C,MAAOmC,EAAQ,QAAQ,IAA3CA,EAAQ,QAAQ,EAA+B,EAAK,IACrF,EClJF,IAAMC,GAAoBC,IAAgD,CACxE,GAAGA,EACH,eAAgB,CAAC,CACf,UAAW,yBACX,kBAAmB,GACnB,GAAI,yBACJ,MAAO,IACP,OAAQC,GAAc,CACxB,CAAC,CACH,GAEMD,GAAkC,CAAE,GAAIE,CAAoB,EAErDC,GAAuB,CAClC,GAAGH,GACH,SAAU,IAAMD,GAAiBC,EAAU,CAC7C",
6
6
  "names": ["read", "specifier", "name", "module", "typebox_Type_default", "read", "contract_defineChannel_default", "read", "contract_defineOperation_default", "read", "contracts_openJson_default", "read", "PROCESSES_PLUGIN_ID", "runId", "typebox_Type_default", "processesContracts", "contract_defineOperation_default", "contracts_openJson_default", "contract_defineChannel_default", "react_useEffect_default", "read", "react_useLayoutEffect_default", "read", "react_useRef_default", "read", "react_useState_default", "read", "AccessContext_useAccess_default", "read", "ui_Dialog_default", "read", "ui_DialogBody_default", "read", "ui_DialogContent_default", "read", "ui_DialogHeader_default", "read", "ui_DialogTitle_default", "read", "ui_StopButton_default", "read", "ui_cn_default", "read", "Toolbar_ToolbarCopy_default", "read", "Toolbar_ToolbarItem_default", "read", "Toolbar_ToolbarLabel_default", "read", "Toolbar_ToolbarText_default", "read", "rpc_rpc_default", "read", "guards_isRecord_default", "read", "VISIBLE_PROCESSES", "ORIGINS", "portFrom", "value", "guards_isRecord_default", "processFrom", "snapshotFrom", "messageFrom", "serviceUrl", "hostname", "port", "kindLabel", "process", "originText", "origin", "timeText", "iso", "parsed", "titleOf", "ports", "visibleProcesses", "processes", "jsx_runtime_Fragment_default", "read", "jsx_runtime_jsx_default", "read", "jsx_runtime_jsxs_default", "read", "idle", "pillClass", "portClass", "stopClass", "useRunProcesses", "runId", "state", "setState", "react_useState_default", "react_useEffect_default", "rpc_rpc_default", "processesContracts", "data", "message", "messageFrom", "current", "caught", "IconProcess", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "ProcessPill", "process", "writable", "onStop", "toolbar", "stop", "ui_StopButton_default", "ports", "port", "serviceUrl", "ui_cn_default", "Toolbar_ToolbarItem_default", "titleOf", "Toolbar_ToolbarCopy_default", "Toolbar_ToolbarLabel_default", "kindLabel", "Toolbar_ToolbarText_default", "ProcessHeaderContent", "access", "AccessContext_useAccess_default", "stops", "setStops", "allOpen", "setAllOpen", "requests", "react_useRef_default", "rootRef", "dialogRef", "focused", "fallback", "processes", "shown", "hidden", "visibleProcesses", "active", "controller", "react_useLayoutEffect_default", "target", "rememberFocus", "event", "header", "element", "cause", "renderProcess", "jsx_runtime_Fragment_default", "ui_Dialog_default", "open", "ui_DialogContent_default", "ui_DialogHeader_default", "ui_DialogTitle_default", "ui_DialogBody_default", "processHeader", "session", "configuredPlugin", "descriptor", "processHeader", "PROCESSES_PLUGIN_ID", "webPlugin"]
7
7
  }
@@ -75,8 +75,8 @@
75
75
  ]
76
76
  }
77
77
  },
78
- "stand": "83bcb0d455b8559983cc7811b8c3ba4a9ec5d2d595c7489c322d8a7e193a2f0c",
79
- "sourceStand": "bb1f280263506223ef9c3415e7e0219c9c910fd88eccc4ce5aa6fa1c5ac27e93",
78
+ "stand": "7a3eb7a847ce6a4c8324b9c073c3c7a13c760088a194d419fe21342575c4208f",
79
+ "sourceStand": "f6bc4fd7b4196d8061829877877a88969097097d5e103e83129e5a6a98e238f7",
80
80
  "server": "server/index.js",
81
81
  "web": {
82
82
  "entry": "web/index.js",
@@ -78,24 +78,23 @@ var ragentsProductModelNames = () => [
78
78
 
79
79
  // server/runtime.ts
80
80
  var contract = [
81
- "Allgemeine Regeln:",
82
- "- Wo du Deutsch schreibst (Chat, Commit-Messages, Dokumente, Kommentare), gilt immer: echte Umlaute (\xE4/\xF6/\xFC/\xC4/\xD6/\xDC) und echtes \xDF, niemals ae/oe/ue/ss.",
83
- "- Nur Zeichen der deutschen Tastatur: als Strich immer der einfache Bindestrich -, keine Gedankenstriche, keine Ellipsen-Zeichen, keine typografischen Anf\xFChrungszeichen. ... statt Ellipse, -> statt Pfeil."
81
+ "General rules:",
82
+ "- Only characters of the German keyboard: as a dash always the simple hyphen -, no em or en dashes, no ellipsis characters, no typographic quotation marks. ... instead of an ellipsis, -> instead of an arrow."
84
83
  ].join("\n");
85
84
  var promptComposition = [
86
- "Run-Koordinator: Produktprompt und Aufbauanweisung, unabh\xE4ngig vom gew\xE4hlten Primary-Actor.",
87
- "Weitere Actors behalten ihren eigenen Actor-Prompt; die Primary-Auswahl bestimmt nur Ausgabe und Rollenvertrag.",
88
- "ActorInputs und aktueller Run-Zustand kommen getrennt als Turn-Kontext hinzu.",
89
- "Actors mit Arbeitsbereichswerkzeugen bekommen die Beschreibung des Arbeitsbereichs als letztes Kapitel; die Agentenlaufzeit erg\xE4nzt Skills und Hooks."
85
+ "Run coordinator: product prompt and setup instruction, independent of the chosen primary actor.",
86
+ "Other actors keep their own actor prompt; the primary choice only determines output and role contract.",
87
+ "ActorInputs and the current run state are added separately as turn context.",
88
+ "Actors with workspace tools get the workspace description as the last chapter; the agent runtime adds skills and hooks."
90
89
  ].join(" ");
91
90
  var ragentsProductRuntime = {
92
91
  coordinator: {
93
92
  handle: "coordinator",
94
- displayName: "Koordinator",
93
+ displayName: "Coordinator",
95
94
  profile: "coordinator",
96
- runTitle: "Neuer Run",
95
+ runTitle: "New run",
97
96
  ownerHandle: "user",
98
- ownerDisplayName: "Benutzer"
97
+ ownerDisplayName: "User"
99
98
  },
100
99
  roleFor: (view, actor) => view.primaryActorId === actor.id ? "primary" : "worker",
101
100
  contract: () => contract,
@@ -117,21 +116,21 @@ var productProfiles = () => {
117
116
  {
118
117
  ...base,
119
118
  name: "coordinator",
120
- description: "Nur f\xFCr den Koordinator selbst, nicht f\xFCr Agenten.",
119
+ description: "Only for the coordinator itself, not for agents.",
121
120
  model: coordinatorModel,
122
121
  thinking: ragentsProductConfig.coordinatorThinking()
123
122
  },
124
123
  {
125
124
  ...base,
126
125
  name: "relay",
127
- description: "F\xFCr Vermittlung mit wenigen Werkzeugen.",
126
+ description: "For relaying with few tools.",
128
127
  model: coordinatorModel,
129
128
  thinking: ragentsProductConfig.coordinatorThinking()
130
129
  },
131
130
  {
132
131
  ...base,
133
132
  name: "standard",
134
- description: "F\xFCr alle Agenten.",
133
+ description: "For all agents.",
135
134
  model,
136
135
  thinking: ragentsProductConfig.thinking()
137
136
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../plugins/ragents.product/server/index.ts", "../../../plugins/ragents.product/server/config.ts", "../../../plugins/ragents.product/server/runtime.ts"],
4
- "sourcesContent": ["import {\n builtinProfiles,\n type AgentProfile,\n type CatalogModel,\n type RAgentsPlugin,\n} from \"@ragents/engine\";\nimport { modelLabel } from \"@ragents/host/plugin-support/model-aliases.js\";\nimport type { ModelChoice } from \"@ragents/host/plugin-support/model-choice.js\";\nimport { modelUpstreamsToken } from \"@ragents/host/plugin-support/model-upstreams.js\";\nimport { pluginAsset } from \"@ragents/host/plugin-support/plugin-folder.js\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { productStartOptions } from \"@ragents/host/plugin-support/product-start-options.js\";\nimport { ProductModelSettingsStore, productModelSettingsMethods } from \"@ragents/host/plugin-support/product-model-settings.js\";\nimport { handlebarsPrompt, systemPromptSelectionPrompt } from \"@ragents/host/plugin-support/prompt.js\";\nimport { productRuntimeToken } from \"@ragents/host/ragents/product-runtime.js\";\nimport { ragentsProductConfig, ragentsProductConfigDescriptors, ragentsProductModelNames } from \"./config.js\";\nimport { ragentsProductRuntime } from \"./runtime.js\";\n\nconst productProfiles = (): AgentProfile[] => {\n const base = {\n driver: \"agent\" as const,\n provider: ragentsProductConfig.provider,\n turnTimeoutMs: 3_600_000,\n isolateWorkspace: false,\n };\n const coordinatorModel = ragentsProductConfig.coordinatorModel();\n const model = ragentsProductConfig.model();\n return [\n {\n ...base,\n name: \"coordinator\",\n description: \"Nur f\u00FCr den Koordinator selbst, nicht f\u00FCr Agenten.\",\n model: coordinatorModel,\n thinking: ragentsProductConfig.coordinatorThinking(),\n },\n {\n ...base,\n name: \"relay\",\n description: \"F\u00FCr Vermittlung mit wenigen Werkzeugen.\",\n model: coordinatorModel,\n thinking: ragentsProductConfig.coordinatorThinking(),\n },\n {\n ...base,\n name: \"standard\",\n description: \"F\u00FCr alle Agenten.\",\n model,\n thinking: ragentsProductConfig.thinking(),\n },\n ...builtinProfiles.filter((profile) => profile.name === \"manual\"),\n ];\n};\n\nconst productModels = (): CatalogModel[] =>\n [...new Set([...ragentsProductModelNames(), ...ragentsProductConfig.modelChoice.options])].map((model) => ({\n driver: \"agent\" as const,\n provider: ragentsProductConfig.provider,\n model,\n label: modelLabel(ragentsProductConfig.provider, model),\n thinking: ragentsProductConfig.modelChoice.thinkingOptionsFor(model),\n }));\n\nconst ragentsProductPlugin: RAgentsPlugin = {\n manifest: { id: \"ragents.product\" },\n register: (host) => {\n host.provide(productRuntimeToken, ragentsProductRuntime);\n host.provide(modelUpstreamsToken, ragentsProductConfig.upstreams);\n host.config(...ragentsProductConfigDescriptors);\n void ragentsProductConfig.modelChoice.options;\n // Die Modellvorgaben pr\u00FCfen gegen den Katalog; mit Relay liegt der erst nach dem Abruf beim Start vor.\n let store: ProductModelSettingsStore | undefined;\n const settings = (): ProductModelSettingsStore =>\n store ??= new ProductModelSettingsStore(host.storage.root(\"model-settings.json\"), ragentsProductConfig.modelChoice, productProfiles());\n const modelChoice: ModelChoice = {\n provider: ragentsProductConfig.modelChoice.provider,\n get options() { return settings().modelChoice.options; },\n get selectable() { return settings().modelChoice.selectable; },\n get defaultModel() { return settings().modelChoice.defaultModel; },\n thinkingOptionsFor: (model) => settings().modelChoice.thinkingOptionsFor(model),\n };\n host.lifecycle({\n id: \"ragents.product.models\",\n initialize: async () => {\n await ragentsProductConfig.relay?.load();\n settings();\n },\n });\n host.methods(...productModelSettingsMethods(host.manifest.id, { get: () => settings().get(), save: (value) => settings().save(value) }));\n host.clientConfig({ chatSteps: ragentsProductConfig.chatDisplayPolicy });\n host.startOptions(...productStartOptions({\n modelChoice,\n coordinatorThinking: () => settings().coordinatorThinking(),\n systemPrompts: ragentsProductConfig.systemPrompts,\n }));\n host.skills({\n id: \"ragents.product.external-skills\",\n paths: () => ragentsProductConfig.skills.paths,\n });\n host.profiles({\n id: \"ragents.product.profiles\",\n models: productModels,\n profiles: () => settings().profiles(),\n providers: async () => ragentsProductConfig.relay ? [await ragentsProductConfig.relay.registration()] : [],\n });\n host.startEntries(...ragentsProductConfig.skills.startEntries);\n host.prompts(\n handlebarsPrompt(\"ragents.product.preamble\", 0, ragentsProductConfig.systemPromptPath ?? pluginAsset(\"ragents.product\", \"preamble.hbs\")),\n systemPromptSelectionPrompt(\"ragents.product.selected-prompt\", 50, ragentsProductConfig.systemPrompts()),\n );\n },\n};\n\nexport const plugin: PluginModule = {\n requires: [\"ragents.orchestration\", \"ragents.workspace\"],\n create: () => ragentsProductPlugin,\n};\n", "import path from \"node:path\";\nimport type { ModelUpstream } from \"@ragents/host/plugin-support/model-upstreams.js\";\nimport { chatDisplayEnvDescriptors, chatDisplayPolicyFromEnvironment } from \"@ragents/host/plugin-support/chat-display-policy.js\";\nimport { builtinCatalog, modelChoiceEnvDescriptors, modelChoiceFromEnvironment } from \"@ragents/host/plugin-support/model-choice.js\";\nimport { declaredEnvironment } from \"@ragents/host/plugin-support/plugin-config.js\";\nimport { folderSystemPrompts, pluginFolder } from \"@ragents/host/plugin-support/plugin-folder.js\";\nimport { createRelayCatalog, RELAY_PROVIDER, type RelayCatalog } from \"@ragents/host/plugin-support/product-relay.js\";\nimport { roleThinkingLevel } from \"@ragents/host/plugin-support/thinking-level.js\";\nimport { skillEnvDescriptors, skillsFromEnvironment } from \"@ragents/host/plugin-support/skills.js\";\nimport {\n lazySystemPromptCatalog,\n systemPromptEnvDescriptors,\n} from \"@ragents/host/plugin-support/system-prompts.js\";\n\nexport const ragentsProductConfigDescriptors = [\n { key: \"AGENT_PROVIDER\", source: \"environment\" },\n { key: \"AGENT_MODEL\", source: \"environment\" },\n { key: \"AGENT_THINKING\", source: \"environment\" },\n { key: \"AGENT_COORDINATOR_MODEL\", source: \"environment\" },\n { key: \"AGENT_COORDINATOR_THINKING\", source: \"environment\" },\n { key: \"SYSTEM_PROMPT_PATH\", source: \"environment\" },\n { key: \"OPENROUTER_API_KEY\", source: \"environment\", secret: true },\n { key: \"RELAY_URL\", source: \"environment\" },\n { key: \"RELAY_TOKEN\", source: \"environment\", secret: true },\n ...chatDisplayEnvDescriptors,\n ...skillEnvDescriptors,\n ...modelChoiceEnvDescriptors,\n ...systemPromptEnvDescriptors,\n] as const;\n\nconst env = declaredEnvironment(ragentsProductConfigDescriptors);\n\nconst systemPromptPath = env.optional(\"SYSTEM_PROMPT_PATH\");\nconst configuredModel = () => env.required(\"AGENT_MODEL\");\nconst configuredCoordinatorModel = () => env.value(\"AGENT_COORDINATOR_MODEL\", \"\") || configuredModel();\nconst provider = env.value(\"AGENT_PROVIDER\", \"openrouter\");\n\n// Mit AGENT_PROVIDER \"relay\" kommen Katalog und Modellzugang von einem anderen RAgents-Server.\nconst relay: RelayCatalog | undefined = provider === RELAY_PROVIDER\n ? createRelayCatalog({ url: env.required(\"RELAY_URL\"), token: env.required(\"RELAY_TOKEN\") })\n : undefined;\n\nconst openrouterUpstream = (): ModelUpstream | undefined => {\n const apiKey = env.optional(\"OPENROUTER_API_KEY\");\n return apiKey ? { id: \"openrouter\", baseUrl: \"https://openrouter.ai/api/v1\", apiKey, models: builtinCatalog(\"openrouter\")() } : undefined;\n};\n\nexport const ragentsProductConfig = Object.freeze({\n provider,\n relay,\n upstreams: (): readonly ModelUpstream[] => [openrouterUpstream()].filter((upstream): upstream is ModelUpstream => upstream !== undefined),\n model: configuredModel,\n thinking: () => roleThinkingLevel(env.optional(\"AGENT_THINKING\"), \"AGENT_THINKING\", provider, configuredModel()),\n coordinatorModel: configuredCoordinatorModel,\n coordinatorThinking: () => roleThinkingLevel(env.optional(\"AGENT_COORDINATOR_THINKING\"), \"AGENT_COORDINATOR_THINKING\", provider, configuredCoordinatorModel()),\n systemPromptPath: systemPromptPath ? path.resolve(systemPromptPath) : undefined,\n chatDisplayPolicy: chatDisplayPolicyFromEnvironment(env, { selectable: true }),\n skills: skillsFromEnvironment(env, \"ragents.file\"),\n modelChoice: modelChoiceFromEnvironment(env, {\n provider,\n selectable: true,\n defaultModel: configuredCoordinatorModel,\n fallback: () => ragentsProductModelNames(),\n ...(relay ? { catalog: relay.models } : {}),\n }),\n systemPrompts: lazySystemPromptCatalog(env, () => folderSystemPrompts(pluginFolder(\"ragents.product\"))),\n});\n\nexport const ragentsProductModelNames = (): string[] => [\n ragentsProductConfig.model(),\n ragentsProductConfig.coordinatorModel(),\n];\n", "import type { ProductRuntimePolicy } from \"@ragents/host/ragents/product-runtime.js\";\nimport { ragentsProductConfig } from \"./config.js\";\n\nconst contract = [\n \"Allgemeine Regeln:\",\n \"- Wo du Deutsch schreibst (Chat, Commit-Messages, Dokumente, Kommentare), gilt immer: echte Umlaute (\u00E4/\u00F6/\u00FC/\u00C4/\u00D6/\u00DC) und echtes \u00DF, niemals ae/oe/ue/ss.\",\n \"- Nur Zeichen der deutschen Tastatur: als Strich immer der einfache Bindestrich -, keine Gedankenstriche, keine Ellipsen-Zeichen, keine typografischen Anf\u00FChrungszeichen. ... statt Ellipse, -> statt Pfeil.\",\n].join(\"\\n\");\n\nconst promptComposition = [\n \"Run-Koordinator: Produktprompt und Aufbauanweisung, unabh\u00E4ngig vom gew\u00E4hlten Primary-Actor.\",\n \"Weitere Actors behalten ihren eigenen Actor-Prompt; die Primary-Auswahl bestimmt nur Ausgabe und Rollenvertrag.\",\n \"ActorInputs und aktueller Run-Zustand kommen getrennt als Turn-Kontext hinzu.\",\n \"Actors mit Arbeitsbereichswerkzeugen bekommen die Beschreibung des Arbeitsbereichs als letztes Kapitel; die Agentenlaufzeit erg\u00E4nzt Skills und Hooks.\",\n].join(\" \");\n\nexport const ragentsProductRuntime = {\n coordinator: {\n handle: \"coordinator\",\n displayName: \"Koordinator\",\n profile: \"coordinator\",\n runTitle: \"Neuer Run\",\n ownerHandle: \"user\",\n ownerDisplayName: \"Benutzer\",\n },\n roleFor: (view, actor) => view.primaryActorId === actor.id ? \"primary\" : \"worker\",\n contract: () => contract,\n promptComposition,\n systemPrompts: ragentsProductConfig.systemPrompts,\n} satisfies ProductRuntimePolicy;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n builtinProfiles,\n type AgentProfile,\n type CatalogModel,\n type RAgentsPlugin,\n} from \"@ragents/engine\";\nimport { modelLabel } from \"@ragents/host/plugin-support/model-aliases.js\";\nimport type { ModelChoice } from \"@ragents/host/plugin-support/model-choice.js\";\nimport { modelUpstreamsToken } from \"@ragents/host/plugin-support/model-upstreams.js\";\nimport { pluginAsset } from \"@ragents/host/plugin-support/plugin-folder.js\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { productStartOptions } from \"@ragents/host/plugin-support/product-start-options.js\";\nimport { ProductModelSettingsStore, productModelSettingsMethods } from \"@ragents/host/plugin-support/product-model-settings.js\";\nimport { handlebarsPrompt, systemPromptSelectionPrompt } from \"@ragents/host/plugin-support/prompt.js\";\nimport { productRuntimeToken } from \"@ragents/host/ragents/product-runtime.js\";\nimport { ragentsProductConfig, ragentsProductConfigDescriptors, ragentsProductModelNames } from \"./config.js\";\nimport { ragentsProductRuntime } from \"./runtime.js\";\n\nconst productProfiles = (): AgentProfile[] => {\n const base = {\n driver: \"agent\" as const,\n provider: ragentsProductConfig.provider,\n turnTimeoutMs: 3_600_000,\n isolateWorkspace: false,\n };\n const coordinatorModel = ragentsProductConfig.coordinatorModel();\n const model = ragentsProductConfig.model();\n return [\n {\n ...base,\n name: \"coordinator\",\n description: \"Only for the coordinator itself, not for agents.\",\n model: coordinatorModel,\n thinking: ragentsProductConfig.coordinatorThinking(),\n },\n {\n ...base,\n name: \"relay\",\n description: \"For relaying with few tools.\",\n model: coordinatorModel,\n thinking: ragentsProductConfig.coordinatorThinking(),\n },\n {\n ...base,\n name: \"standard\",\n description: \"For all agents.\",\n model,\n thinking: ragentsProductConfig.thinking(),\n },\n ...builtinProfiles.filter((profile) => profile.name === \"manual\"),\n ];\n};\n\nconst productModels = (): CatalogModel[] =>\n [...new Set([...ragentsProductModelNames(), ...ragentsProductConfig.modelChoice.options])].map((model) => ({\n driver: \"agent\" as const,\n provider: ragentsProductConfig.provider,\n model,\n label: modelLabel(ragentsProductConfig.provider, model),\n thinking: ragentsProductConfig.modelChoice.thinkingOptionsFor(model),\n }));\n\nconst ragentsProductPlugin: RAgentsPlugin = {\n manifest: { id: \"ragents.product\" },\n register: (host) => {\n host.provide(productRuntimeToken, ragentsProductRuntime);\n host.provide(modelUpstreamsToken, ragentsProductConfig.upstreams);\n host.config(...ragentsProductConfigDescriptors);\n void ragentsProductConfig.modelChoice.options;\n // The model defaults are checked against the catalog; with a relay it is only available after the fetch on start.\n let store: ProductModelSettingsStore | undefined;\n const settings = (): ProductModelSettingsStore =>\n store ??= new ProductModelSettingsStore(host.storage.root(\"model-settings.json\"), ragentsProductConfig.modelChoice, productProfiles());\n const modelChoice: ModelChoice = {\n provider: ragentsProductConfig.modelChoice.provider,\n get options() { return settings().modelChoice.options; },\n get selectable() { return settings().modelChoice.selectable; },\n get defaultModel() { return settings().modelChoice.defaultModel; },\n thinkingOptionsFor: (model) => settings().modelChoice.thinkingOptionsFor(model),\n };\n host.lifecycle({\n id: \"ragents.product.models\",\n initialize: async () => {\n await ragentsProductConfig.relay?.load();\n settings();\n },\n });\n host.methods(...productModelSettingsMethods(host.manifest.id, { get: () => settings().get(), save: (value) => settings().save(value) }));\n host.clientConfig({ chatSteps: ragentsProductConfig.chatDisplayPolicy });\n host.startOptions(...productStartOptions({\n modelChoice,\n coordinatorThinking: () => settings().coordinatorThinking(),\n systemPrompts: ragentsProductConfig.systemPrompts,\n }));\n host.skills({\n id: \"ragents.product.external-skills\",\n paths: () => ragentsProductConfig.skills.paths,\n });\n host.profiles({\n id: \"ragents.product.profiles\",\n models: productModels,\n profiles: () => settings().profiles(),\n providers: async () => ragentsProductConfig.relay ? [await ragentsProductConfig.relay.registration()] : [],\n });\n host.startEntries(...ragentsProductConfig.skills.startEntries);\n host.prompts(\n handlebarsPrompt(\"ragents.product.preamble\", 0, ragentsProductConfig.systemPromptPath ?? pluginAsset(\"ragents.product\", \"preamble.hbs\")),\n systemPromptSelectionPrompt(\"ragents.product.selected-prompt\", 50, ragentsProductConfig.systemPrompts()),\n );\n },\n};\n\nexport const plugin: PluginModule = {\n requires: [\"ragents.orchestration\", \"ragents.workspace\"],\n create: () => ragentsProductPlugin,\n};\n", "import path from \"node:path\";\nimport type { ModelUpstream } from \"@ragents/host/plugin-support/model-upstreams.js\";\nimport { chatDisplayEnvDescriptors, chatDisplayPolicyFromEnvironment } from \"@ragents/host/plugin-support/chat-display-policy.js\";\nimport { builtinCatalog, modelChoiceEnvDescriptors, modelChoiceFromEnvironment } from \"@ragents/host/plugin-support/model-choice.js\";\nimport { declaredEnvironment } from \"@ragents/host/plugin-support/plugin-config.js\";\nimport { folderSystemPrompts, pluginFolder } from \"@ragents/host/plugin-support/plugin-folder.js\";\nimport { createRelayCatalog, RELAY_PROVIDER, type RelayCatalog } from \"@ragents/host/plugin-support/product-relay.js\";\nimport { roleThinkingLevel } from \"@ragents/host/plugin-support/thinking-level.js\";\nimport { skillEnvDescriptors, skillsFromEnvironment } from \"@ragents/host/plugin-support/skills.js\";\nimport {\n lazySystemPromptCatalog,\n systemPromptEnvDescriptors,\n} from \"@ragents/host/plugin-support/system-prompts.js\";\n\nexport const ragentsProductConfigDescriptors = [\n { key: \"AGENT_PROVIDER\", source: \"environment\" },\n { key: \"AGENT_MODEL\", source: \"environment\" },\n { key: \"AGENT_THINKING\", source: \"environment\" },\n { key: \"AGENT_COORDINATOR_MODEL\", source: \"environment\" },\n { key: \"AGENT_COORDINATOR_THINKING\", source: \"environment\" },\n { key: \"SYSTEM_PROMPT_PATH\", source: \"environment\" },\n { key: \"OPENROUTER_API_KEY\", source: \"environment\", secret: true },\n { key: \"RELAY_URL\", source: \"environment\" },\n { key: \"RELAY_TOKEN\", source: \"environment\", secret: true },\n ...chatDisplayEnvDescriptors,\n ...skillEnvDescriptors,\n ...modelChoiceEnvDescriptors,\n ...systemPromptEnvDescriptors,\n] as const;\n\nconst env = declaredEnvironment(ragentsProductConfigDescriptors);\n\nconst systemPromptPath = env.optional(\"SYSTEM_PROMPT_PATH\");\nconst configuredModel = () => env.required(\"AGENT_MODEL\");\nconst configuredCoordinatorModel = () => env.value(\"AGENT_COORDINATOR_MODEL\", \"\") || configuredModel();\nconst provider = env.value(\"AGENT_PROVIDER\", \"openrouter\");\n\n// With AGENT_PROVIDER \"relay\", catalog and model access come from another RAgents server.\nconst relay: RelayCatalog | undefined = provider === RELAY_PROVIDER\n ? createRelayCatalog({ url: env.required(\"RELAY_URL\"), token: env.required(\"RELAY_TOKEN\") })\n : undefined;\n\nconst openrouterUpstream = (): ModelUpstream | undefined => {\n const apiKey = env.optional(\"OPENROUTER_API_KEY\");\n return apiKey ? { id: \"openrouter\", baseUrl: \"https://openrouter.ai/api/v1\", apiKey, models: builtinCatalog(\"openrouter\")() } : undefined;\n};\n\nexport const ragentsProductConfig = Object.freeze({\n provider,\n relay,\n upstreams: (): readonly ModelUpstream[] => [openrouterUpstream()].filter((upstream): upstream is ModelUpstream => upstream !== undefined),\n model: configuredModel,\n thinking: () => roleThinkingLevel(env.optional(\"AGENT_THINKING\"), \"AGENT_THINKING\", provider, configuredModel()),\n coordinatorModel: configuredCoordinatorModel,\n coordinatorThinking: () => roleThinkingLevel(env.optional(\"AGENT_COORDINATOR_THINKING\"), \"AGENT_COORDINATOR_THINKING\", provider, configuredCoordinatorModel()),\n systemPromptPath: systemPromptPath ? path.resolve(systemPromptPath) : undefined,\n chatDisplayPolicy: chatDisplayPolicyFromEnvironment(env, { selectable: true }),\n skills: skillsFromEnvironment(env, \"ragents.file\"),\n modelChoice: modelChoiceFromEnvironment(env, {\n provider,\n selectable: true,\n defaultModel: configuredCoordinatorModel,\n fallback: () => ragentsProductModelNames(),\n ...(relay ? { catalog: relay.models } : {}),\n }),\n systemPrompts: lazySystemPromptCatalog(env, () => folderSystemPrompts(pluginFolder(\"ragents.product\"))),\n});\n\nexport const ragentsProductModelNames = (): string[] => [\n ragentsProductConfig.model(),\n ragentsProductConfig.coordinatorModel(),\n];\n", "import type { ProductRuntimePolicy } from \"@ragents/host/ragents/product-runtime.js\";\nimport { ragentsProductConfig } from \"./config.js\";\n\nconst contract = [\n \"General rules:\",\n \"- Only characters of the German keyboard: as a dash always the simple hyphen -, no em or en dashes, no ellipsis characters, no typographic quotation marks. ... instead of an ellipsis, -> instead of an arrow.\",\n].join(\"\\n\");\n\nconst promptComposition = [\n \"Run coordinator: product prompt and setup instruction, independent of the chosen primary actor.\",\n \"Other actors keep their own actor prompt; the primary choice only determines output and role contract.\",\n \"ActorInputs and the current run state are added separately as turn context.\",\n \"Actors with workspace tools get the workspace description as the last chapter; the agent runtime adds skills and hooks.\",\n].join(\" \");\n\nexport const ragentsProductRuntime = {\n coordinator: {\n handle: \"coordinator\",\n displayName: \"Coordinator\",\n profile: \"coordinator\",\n runTitle: \"New run\",\n ownerHandle: \"user\",\n ownerDisplayName: \"User\",\n },\n roleFor: (view, actor) => view.primaryActorId === actor.id ? \"primary\" : \"worker\",\n contract: () => contract,\n promptComposition,\n systemPrompts: ragentsProductConfig.systemPrompts,\n} satisfies ProductRuntimePolicy;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- ["activate","basePlugin","brand","category","chatDisplayPolicy","const","descriptor","export","from","id","import","label","model-settings","models","order","pluginId","product","productStartOptions","read","readRight","settings","startOptions","title","type","und","webPlugin"]
1
+ ["activate","agents","and","basePlugin","brand","category","chatDisplayPolicy","const","descriptor","export","from","id","import","label","model-settings","models","order","pluginId","product","productStartOptions","read","readRight","runs","settings","startOptions","title","type","webPlugin"]
@@ -1,2 +1,2 @@
1
- var t=(e,r)=>{let o=globalThis.__ragentsHostModules?.[e];if(o===void 0)throw new Error(`Der Host stellt ${e} nicht bereit`);if(!(r in o))throw new Error(`Der Host stellt ${r} aus ${e} nicht bereit; das Bundle ist gegen einen neueren Host gebaut`);return o[r]};var s=t("@ragents/web/PluginRegistry","chatDisplayPolicyFrom");var a=t("@ragents/web/product/ProductModelSettings","ProductModelSettings");var i=t("@ragents/web/product/start-options","productStartOptions");var d=t("react/jsx-runtime","jsx");var u=()=>d(a,{pluginId:"ragents.product"}),n=e=>({...e,brand:{title:"RAgents"},startOptions:i,settings:[{id:"ragents.product.model-settings",label:"Neue Runs und Agenten",category:"models",order:20,readRight:"settings.read",Settings:u}]}),l={id:"ragents.product"},O={...n(l),activate:e=>({...n(l),chatDisplayPolicy:s(l.id,e)})};export{O as webPlugin};
1
+ var t=(e,r)=>{let o=globalThis.__ragentsHostModules?.[e];if(o===void 0)throw new Error(`The host does not provide ${e}`);if(!(r in o))throw new Error(`The host does not provide ${r} from ${e}; the bundle was built against a newer host`);return o[r]};var s=t("@ragents/web/PluginRegistry","chatDisplayPolicyFrom");var a=t("@ragents/web/product/ProductModelSettings","ProductModelSettings");var d=t("@ragents/web/product/start-options","productStartOptions");var i=t("react/jsx-runtime","jsx");var p=()=>i(a,{pluginId:"ragents.product"}),n=e=>({...e,brand:{title:"RAgents"},startOptions:d,settings:[{id:"ragents.product.model-settings",label:"New runs and agents",category:"models",order:20,readRight:"settings.read",Settings:p}]}),l={id:"ragents.product"},T={...n(l),activate:e=>({...n(l),chatDisplayPolicy:s(l.id,e)})};export{T as webPlugin};
2
2
  //# sourceMappingURL=/plugins/ragents.product/web/index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["ragents-host-read:read", "ragents-host-value:@ragents/web/PluginRegistry#chatDisplayPolicyFrom", "ragents-host-value:@ragents/web/product/ProductModelSettings#ProductModelSettings", "ragents-host-value:@ragents/web/product/start-options#productStartOptions", "ragents-host-value:react/jsx-runtime#jsx", "../../../plugins/ragents.product/web/index.tsx"],
4
- "sourcesContent": ["export const read = (specifier, name) => {\n const module = globalThis[\"__ragentsHostModules\"]?.[specifier];\n if (module === undefined) throw new Error(`Der Host stellt ${specifier} nicht bereit`);\n if (!(name in module)) throw new Error(`Der Host stellt ${name} aus ${specifier} nicht bereit; das Bundle ist gegen einen neueren Host gebaut`);\n return module[name];\n};", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"chatDisplayPolicyFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/product/ProductModelSettings\", \"ProductModelSettings\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/product/start-options\", \"productStartOptions\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import {\n chatDisplayPolicyFrom,\n type WebPlugin,\n type WebPluginDescriptor,\n} from \"@ragents/web/PluginRegistry\";\nimport { ProductModelSettings } from \"@ragents/web/product/ProductModelSettings\";\nimport { productStartOptions } from \"@ragents/web/product/start-options\";\n\nconst ModelSettings = () => <ProductModelSettings pluginId=\"ragents.product\" />;\n\nconst basePlugin = (descriptor: WebPluginDescriptor): WebPlugin => ({\n ...descriptor,\n brand: {\n title: \"RAgents\",\n },\n startOptions: productStartOptions,\n settings: [{ id: \"ragents.product.model-settings\", label: \"Neue Runs und Agenten\", category: \"models\",\n order: 20, readRight: \"settings.read\", Settings: ModelSettings }],\n});\n\nconst descriptor: WebPluginDescriptor = { id: \"ragents.product\" };\n\nexport const webPlugin: WebPlugin = {\n ...basePlugin(descriptor),\n activate: (config) => ({\n ...basePlugin(descriptor),\n chatDisplayPolicy: chatDisplayPolicyFrom(descriptor.id, config),\n }),\n};\n"],
5
- "mappings": "AAAO,IAAMA,EAAO,CAACC,EAAWC,IAAS,CACvC,IAAMC,EAAS,WAAW,uBAA0BF,CAAS,EAC7D,GAAIE,IAAW,OAAW,MAAM,IAAI,MAAM,mBAAmBF,CAAS,eAAe,EACrF,GAAI,EAAEC,KAAQC,GAAS,MAAM,IAAI,MAAM,mBAAmBD,CAAI,QAAQD,CAAS,+DAA+D,EAC9I,OAAOE,EAAOD,CAAI,CACpB,ECJA,IAAOE,EAAQC,EAAK,8BAA+B,uBAAuB,ECA1E,IAAOC,EAAQC,EAAK,4CAA6C,sBAAsB,ECAvF,IAAOC,EAAQC,EAAK,qCAAsC,qBAAqB,ECA/E,IAAOC,EAAQC,EAAK,oBAAqB,KAAK,ECO9C,IAAMC,EAAgB,IAAMC,EAACC,EAAA,CAAqB,SAAS,kBAAkB,EAEvEC,EAAcC,IAAgD,CAClE,GAAGA,EACH,MAAO,CACL,MAAO,SACT,EACA,aAAcC,EACd,SAAU,CAAC,CAAE,GAAI,iCAAkC,MAAO,wBAAyB,SAAU,SAC3F,MAAO,GAAI,UAAW,gBAAiB,SAAUL,CAAc,CAAC,CACpE,GAEMI,EAAkC,CAAE,GAAI,iBAAkB,EAEnDE,EAAuB,CAClC,GAAGH,EAAWC,CAAU,EACxB,SAAWG,IAAY,CACrB,GAAGJ,EAAWC,CAAU,EACxB,kBAAmBI,EAAsBJ,EAAW,GAAIG,CAAM,CAChE,EACF",
4
+ "sourcesContent": ["export const read = (specifier, name) => {\n const module = globalThis[\"__ragentsHostModules\"]?.[specifier];\n if (module === undefined) throw new Error(`The host does not provide ${specifier}`);\n if (!(name in module)) throw new Error(`The host does not provide ${name} from ${specifier}; the bundle was built against a newer host`);\n return module[name];\n};", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"chatDisplayPolicyFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/product/ProductModelSettings\", \"ProductModelSettings\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/product/start-options\", \"productStartOptions\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import {\n chatDisplayPolicyFrom,\n type WebPlugin,\n type WebPluginDescriptor,\n} from \"@ragents/web/PluginRegistry\";\nimport { ProductModelSettings } from \"@ragents/web/product/ProductModelSettings\";\nimport { productStartOptions } from \"@ragents/web/product/start-options\";\n\nconst ModelSettings = () => <ProductModelSettings pluginId=\"ragents.product\" />;\n\nconst basePlugin = (descriptor: WebPluginDescriptor): WebPlugin => ({\n ...descriptor,\n brand: {\n title: \"RAgents\",\n },\n startOptions: productStartOptions,\n settings: [{ id: \"ragents.product.model-settings\", label: \"New runs and agents\", category: \"models\",\n order: 20, readRight: \"settings.read\", Settings: ModelSettings }],\n});\n\nconst descriptor: WebPluginDescriptor = { id: \"ragents.product\" };\n\nexport const webPlugin: WebPlugin = {\n ...basePlugin(descriptor),\n activate: (config) => ({\n ...basePlugin(descriptor),\n chatDisplayPolicy: chatDisplayPolicyFrom(descriptor.id, config),\n }),\n};\n"],
5
+ "mappings": "AAAO,IAAMA,EAAO,CAACC,EAAWC,IAAS,CACvC,IAAMC,EAAS,WAAW,uBAA0BF,CAAS,EAC7D,GAAIE,IAAW,OAAW,MAAM,IAAI,MAAM,6BAA6BF,CAAS,EAAE,EAClF,GAAI,EAAEC,KAAQC,GAAS,MAAM,IAAI,MAAM,6BAA6BD,CAAI,SAASD,CAAS,6CAA6C,EACvI,OAAOE,EAAOD,CAAI,CACpB,ECJA,IAAOE,EAAQC,EAAK,8BAA+B,uBAAuB,ECA1E,IAAOC,EAAQC,EAAK,4CAA6C,sBAAsB,ECAvF,IAAOC,EAAQC,EAAK,qCAAsC,qBAAqB,ECA/E,IAAOC,EAAQC,EAAK,oBAAqB,KAAK,ECO9C,IAAMC,EAAgB,IAAMC,EAACC,EAAA,CAAqB,SAAS,kBAAkB,EAEvEC,EAAcC,IAAgD,CAClE,GAAGA,EACH,MAAO,CACL,MAAO,SACT,EACA,aAAcC,EACd,SAAU,CAAC,CAAE,GAAI,iCAAkC,MAAO,sBAAuB,SAAU,SACzF,MAAO,GAAI,UAAW,gBAAiB,SAAUL,CAAc,CAAC,CACpE,GAEMI,EAAkC,CAAE,GAAI,iBAAkB,EAEnDE,EAAuB,CAClC,GAAGH,EAAWC,CAAU,EACxB,SAAWG,IAAY,CACrB,GAAGJ,EAAWC,CAAU,EACxB,kBAAmBI,EAAsBJ,EAAW,GAAIG,CAAM,CAChE,EACF",
6
6
  "names": ["read", "specifier", "name", "module", "PluginRegistry_chatDisplayPolicyFrom_default", "read", "ProductModelSettings_ProductModelSettings_default", "read", "start_options_productStartOptions_default", "read", "jsx_runtime_jsx_default", "read", "ModelSettings", "jsx_runtime_jsx_default", "ProductModelSettings_ProductModelSettings_default", "basePlugin", "descriptor", "start_options_productStartOptions_default", "webPlugin", "config", "PluginRegistry_chatDisplayPolicyFrom_default"]
7
7
  }