@schlenkr/ragents 0.1.9 → 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 (749) hide show
  1. package/apps/server/package.json +1 -1
  2. package/apps/server/src/access-projection.ts +9 -39
  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 +32 -29
  6. package/apps/server/src/api/core-methods.ts +21 -19
  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 +8 -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 +48 -47
  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 +63 -58
  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 +25 -24
  83. package/apps/server/src/ragents/global-chat.ts +14 -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 +51 -49
  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-xXXhTDbh.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 +64 -55
  110. package/apps/web/dist/help/guide-clients.md +62 -52
  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 +1997 -942
  124. package/apps/web/dist/help/mini-app.css +30 -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 +26 -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 +29 -26
  182. package/apps/web/src/panel/connection-state.ts +9 -9
  183. package/apps/web/src/panel/contract.ts +34 -27
  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 +256 -228
  227. package/bundles/ragents.actor-programs/server/index.js.map +4 -4
  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 -4
  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-V7W3QDVS.js → chunk-IQBHK7MV.js} +2 -2
  240. package/bundles/ragents.ask/web/chunks/{chunk-V7W3QDVS.js.map → chunk-IQBHK7MV.js.map} +4 -4
  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 +4 -4
  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 +3 -3
  305. package/bundles/ragents.overseer/ragents-bundle.json +2 -2
  306. package/bundles/ragents.overseer/server/index.js +99 -99
  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 +83 -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/core/tools/bash.d.ts +1 -1
  417. package/packages/agent/dist/index.d.ts +1 -1
  418. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  419. package/packages/agent/src/core/compaction/utils.ts +1 -1
  420. package/packages/agent/src/core/model-runtime.ts +45 -5
  421. package/packages/agent/src/core/tools/bash.ts +1 -1
  422. package/packages/agent/src/index.ts +1 -1
  423. package/packages/agent/src/loop/agent-loop.ts +2 -2
  424. package/packages/ai/dist/models.d.ts +1 -0
  425. package/packages/ai/dist/models.generated.d.ts +4544 -983
  426. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  427. package/packages/ai/src/api/ai-sdk.ts +33 -7
  428. package/packages/ai/src/api-registry.ts +1 -1
  429. package/packages/ai/src/index.ts +2 -2
  430. package/packages/ai/src/models.generated.ts +1 -1
  431. package/packages/ai/src/models.ts +1 -1
  432. package/packages/ai/src/providers/openrouter.models.ts +3723 -550
  433. package/packages/ragents/src/access.ts +12 -12
  434. package/packages/ragents/src/agents/actor-input.ts +33 -33
  435. package/packages/ragents/src/agents/catalog.ts +1 -1
  436. package/packages/ragents/src/agents/delivery.ts +17 -17
  437. package/packages/ragents/src/agents/plugins.ts +1 -1
  438. package/packages/ragents/src/agents/scheduler.ts +7 -7
  439. package/packages/ragents/src/agents/schemas.ts +1 -1
  440. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  441. package/packages/ragents/src/agents/tools.ts +20 -20
  442. package/packages/ragents/src/agents/toolset.ts +5 -5
  443. package/packages/ragents/src/agents/workspaces.ts +1 -1
  444. package/packages/ragents/src/domain/events.ts +1 -1
  445. package/packages/ragents/src/domain/model.ts +5 -5
  446. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  447. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  448. package/packages/ragents/src/drivers/agent.ts +2 -2
  449. package/packages/ragents/src/drivers/attachments.ts +4 -4
  450. package/packages/ragents/src/http/contracts.ts +14 -14
  451. package/packages/ragents/src/http/methods.ts +6 -6
  452. package/packages/ragents/src/index.ts +1 -0
  453. package/packages/ragents/src/plugin-host.ts +162 -116
  454. package/packages/ragents/src/plugin-types.ts +29 -10
  455. package/packages/ragents/src/rpc/contract.ts +5 -5
  456. package/packages/ragents/src/rpc/contribution.ts +2 -2
  457. package/packages/ragents/src/rpc/peer.ts +11 -11
  458. package/packages/ragents/src/rpc/protocol.ts +2 -2
  459. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  460. package/packages/ragents/src/runtime/journal.ts +10 -10
  461. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  462. package/packages/ragents/src/runtime/stop.ts +2 -2
  463. package/packages/ragents/src/script/mediators.ts +35 -35
  464. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  465. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  466. package/packages/ragents/src/typescript/compiler.ts +7 -7
  467. package/packages/ragents/src/typescript/snippet.ts +5 -5
  468. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  469. package/packages/workspace-executor/src/commands.ts +18 -18
  470. package/packages/workspace-executor/src/context.ts +15 -15
  471. package/packages/workspace-executor/src/contributions.ts +35 -35
  472. package/packages/workspace-executor/src/errors.ts +1 -1
  473. package/packages/workspace-executor/src/executor.ts +15 -15
  474. package/packages/workspace-executor/src/files.ts +30 -30
  475. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  476. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  477. package/packages/workspace-executor/src/language-server/host.ts +35 -35
  478. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  479. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  480. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  481. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  482. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
  483. package/packages/workspace-executor/src/managed-process.ts +35 -7
  484. package/packages/workspace-executor/src/module.ts +8 -8
  485. package/packages/workspace-executor/src/modules.ts +3 -3
  486. package/packages/workspace-executor/src/paths.ts +11 -11
  487. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  488. package/packages/workspace-executor/src/processes/module.ts +3 -3
  489. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  490. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  491. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  492. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  493. package/packages/workspace-executor/src/run-folders.ts +3 -3
  494. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  495. package/packages/workspace-executor/src/sandbox-tools.ts +37 -31
  496. package/packages/workspace-executor/src/session-ident.ts +2 -2
  497. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  498. package/packages/workspace-executor/src/tools.ts +5 -5
  499. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  500. package/plugins/ragents.activity/web/activity.ts +2 -2
  501. package/plugins/ragents.actor-programs/server/access-projections.ts +31 -0
  502. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  503. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  504. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  505. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  506. package/plugins/ragents.actor-programs/server/index.ts +2 -0
  507. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  508. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  509. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  510. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  511. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  512. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  513. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  514. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  515. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  516. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  517. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  518. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  519. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  520. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  521. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  522. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  523. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  524. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  525. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  526. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  527. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  528. package/plugins/ragents.ask/ask-payload.ts +1 -1
  529. package/plugins/ragents.ask/contract.ts +5 -5
  530. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  531. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  532. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  533. package/plugins/ragents.ask/server/contract.ts +5 -5
  534. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  535. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  536. package/plugins/ragents.ask/web/index.tsx +2 -8
  537. package/plugins/ragents.browser/executor/contract.ts +6 -6
  538. package/plugins/ragents.browser/executor/index.ts +1 -1
  539. package/plugins/ragents.browser/executor/module.ts +6 -6
  540. package/plugins/ragents.browser/executor/pages.ts +32 -32
  541. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  542. package/plugins/ragents.browser/provision.ts +7 -7
  543. package/plugins/ragents.browser/server/browser.ts +14 -14
  544. package/plugins/ragents.browser/server/contract.ts +1 -1
  545. package/plugins/ragents.browser/server/index.ts +1 -1
  546. package/plugins/ragents.browser/server/tools.ts +14 -14
  547. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  548. package/plugins/ragents.documents/contract.ts +2 -2
  549. package/plugins/ragents.documents/prompt.hbs +1 -1
  550. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  551. package/plugins/ragents.documents/server/files-route.ts +6 -6
  552. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  553. package/plugins/ragents.documents/server/store.ts +1 -1
  554. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  555. package/plugins/ragents.documents/web/index.tsx +11 -11
  556. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  557. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  558. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  559. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  560. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  561. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  562. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  563. package/plugins/ragents.model-relay/server/config.ts +6 -2
  564. package/plugins/ragents.model-relay/server/index.ts +2 -2
  565. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  566. package/plugins/ragents.orchestration/contract.ts +8 -8
  567. package/plugins/ragents.orchestration/server/index.ts +4 -4
  568. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  569. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  570. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  571. package/plugins/ragents.orchestration/web/ActorChat.tsx +2 -2
  572. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
  573. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  574. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  575. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  576. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  577. package/plugins/ragents.orchestration/web/ActorTile.tsx +1 -1
  578. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  579. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  580. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  581. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  582. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  583. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  584. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  585. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  586. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  587. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  588. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  589. package/plugins/ragents.orchestration/web/format.ts +1 -1
  590. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  591. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  592. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  593. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +29 -28
  594. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  595. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  596. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  597. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  598. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  599. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  600. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +10 -10
  601. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  602. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  603. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  604. package/plugins/ragents.overseer/contract.ts +20 -20
  605. package/plugins/ragents.overseer/server/api.ts +8 -8
  606. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  607. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  608. package/plugins/ragents.overseer/server/index.ts +24 -24
  609. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  610. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  611. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  612. package/plugins/ragents.overseer/server/settings.ts +6 -6
  613. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  614. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  615. package/plugins/ragents.overseer/web/index.tsx +20 -20
  616. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  617. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  618. package/plugins/ragents.processes/contract.ts +5 -5
  619. package/plugins/ragents.processes/server/methods.ts +4 -4
  620. package/plugins/ragents.processes/server/observer.ts +8 -8
  621. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  622. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  623. package/plugins/ragents.processes/web/processes.ts +10 -10
  624. package/plugins/ragents.product/server/config.ts +1 -1
  625. package/plugins/ragents.product/server/index.ts +4 -4
  626. package/plugins/ragents.product/server/runtime.ts +9 -10
  627. package/plugins/ragents.product/web/index.tsx +1 -1
  628. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  629. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  630. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  631. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  632. package/plugins/ragents.reference/examples.ts +27 -27
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  636. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  637. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  638. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  639. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  640. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  641. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  642. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  643. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  644. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  645. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  648. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  649. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  650. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  651. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  652. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  653. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  654. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  655. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  656. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  657. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  661. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  662. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  663. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  664. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  665. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  666. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  667. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  668. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  669. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  670. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  671. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  672. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  693. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  694. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  695. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  696. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  697. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  698. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  699. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  700. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  701. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  702. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  703. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  704. package/plugins/ragents.watch/server/condition.ts +4 -4
  705. package/plugins/ragents.watch/server/functions.ts +27 -27
  706. package/plugins/ragents.watch/server/observation.ts +2 -2
  707. package/plugins/ragents.watch/server/service.ts +14 -14
  708. package/plugins/ragents.workspace/client/transport.ts +1 -1
  709. package/plugins/ragents.workspace/client/workspace-client.ts +62 -49
  710. package/plugins/ragents.workspace/contract.ts +46 -46
  711. package/plugins/ragents.workspace/server/binding.ts +20 -20
  712. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  713. package/plugins/ragents.workspace/server/clients.ts +42 -42
  714. package/plugins/ragents.workspace/server/config.ts +8 -5
  715. package/plugins/ragents.workspace/server/index.ts +5 -4
  716. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  717. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  718. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  719. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  720. package/plugins/ragents.workspace/web/index.tsx +1 -1
  721. package/ragents.config.core.ts +1 -1
  722. package/ragents.config.developer.ts +3 -3
  723. package/ragents.config.showcase.ts +2 -2
  724. package/scripts/agent/agent-cli.ts +96 -96
  725. package/scripts/agent/journal.ts +5 -5
  726. package/scripts/agent/turn-control.ts +4 -4
  727. package/scripts/package/build-package.ts +29 -29
  728. package/scripts/package/host-links.mjs +3 -3
  729. package/scripts/package/publish-package.ts +29 -29
  730. package/scripts/package/ragents.mjs +19 -19
  731. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  732. package/scripts/plugin/plugin-cli.ts +14 -14
  733. package/scripts/provision/run-provision.ts +14 -15
  734. package/scripts/remote/connect.ts +46 -46
  735. package/scripts/remote/start.ts +18 -18
  736. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  737. package/apps/web/dist/assets/main-C7JeZFjs.js +0 -6
  738. package/apps/web/dist/assets/mermaid-HWGCJPDP-DfsU5ofC.js +0 -478
  739. package/apps/web/dist/assets/runPanel-ZT6TPDLM.js +0 -21
  740. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  741. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  742. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  743. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  744. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  745. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  746. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  747. package/plugins/ragents.ask/web/QuestionSection.tsx +0 -48
  748. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  749. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -19,7 +19,7 @@
19
19
  "@ragents/engine": "workspace:*",
20
20
  "@ragents/workspace-executor": "workspace:*",
21
21
  "handlebars": "^4.7.9",
22
- "quassel": "^0.2.2",
22
+ "quassel": "^0.4.0",
23
23
  "tsx": "^4.20.0",
24
24
  "typebox": "^1.3.13",
25
25
  "vscode-jsonrpc": "^9.0.2"
@@ -1,37 +1,9 @@
1
- import { emptyUsage, type AccessContext, type JsonValue, type PluginState, type RunView } from "@ragents/engine";
1
+ import { emptyUsage, type AccessContext, type AccessProjectionRegistry, type RunView } from "@ragents/engine";
2
2
  import type { ChatEvent, Message } from "quassel/events";
3
3
  import type { ActorConversations } from "./ragents/actor-chat-history.js";
4
4
 
5
- const record = (value: JsonValue | undefined): Record<string, JsonValue | undefined> | undefined =>
6
- value !== null && typeof value === "object" && !Array.isArray(value) ? value : undefined;
7
-
8
- const hiddenStates = new Set(["ragents.system-prompt", "ragents.model", "ragents.start-options"]);
9
-
10
- const visibleState = (entry: PluginState): PluginState | undefined => {
11
- if (hiddenStates.has(entry.pluginId)) return undefined;
12
- if (entry.pluginId === "ragents.actor-programs.invocations") return { ...entry, state: { version: 1, revision: entry.updatedAt } };
13
- if (entry.pluginId !== "ragents.actor-programs") return entry;
14
- const state = record(entry.state);
15
- const program = state?.program ? record(state.program) : undefined;
16
- if (!program) return entry;
17
- const views = Array.isArray(program.views) ? program.views.map((value) => {
18
- const view = record(value);
19
- return view ? { id: view.id, key: view.key, title: view.title, visible: view.visible, placements: view.placements } : value;
20
- }) : [];
21
- return { ...entry, state: {
22
- version: 1,
23
- program: {
24
- name: program.name,
25
- title: program.title,
26
- actorId: program.actorId,
27
- actorHandle: program.actorHandle,
28
- revision: program.revision,
29
- views,
30
- },
31
- } };
32
- };
33
-
34
- export const accessibleRunView = (view: RunView, access: AccessContext): RunView => access.can("runs.inspect") ? view : {
5
+ /** Each plugin shows its own plugin states and plugin events through its access projection (docs/spec/plugins.md, registrations of the PluginHost). */
6
+ export const accessibleRunView = (view: RunView, access: AccessContext, projections: AccessProjectionRegistry): RunView => access.can("runs.inspect") ? view : {
35
7
  ...view,
36
8
  actors: view.actors.map((actor) => actor.kind === "human" ? { ...actor, grants: [] } : {
37
9
  ...actor,
@@ -50,29 +22,27 @@ export const accessibleRunView = (view: RunView, access: AccessContext): RunView
50
22
  inputs: view.inputs.map((input) => ({ ...input, content: input.enqueuedBy === view.ownerId && input.presentation !== "background" ? input.content : "",
51
23
  lifecycle: input.lifecycle.kind === "discarded" ? { ...input.lifecycle, reason: "Verworfen" } : input.lifecycle,
52
24
  })),
53
- turns: view.turns.map((turn) => ({ ...turn, usage: emptyUsage(), toolCalls: [], reason: turn.reason ? "Die Verarbeitung wurde beendet." : null })),
25
+ turns: view.turns.map((turn) => ({ ...turn, usage: emptyUsage(), toolCalls: [], reason: turn.reason ? "Processing was stopped." : null })),
54
26
  subscriptions: [],
55
27
  pluginStates: view.pluginStates.flatMap((entry) => {
56
- const state = visibleState(entry);
28
+ const state = projections.state(entry, access);
57
29
  return state ? [state] : [];
58
30
  }),
59
31
  };
60
32
 
61
- export const accessibleChatEvent = (event: ChatEvent, access: AccessContext): ChatEvent | undefined => {
33
+ export const accessibleChatEvent = (event: ChatEvent, access: AccessContext, projections: AccessProjectionRegistry): ChatEvent | undefined => {
62
34
  if (access.can("runs.inspect")) return event;
63
35
  if (event.kind === "status" && event.startup?.status === "failed") return {
64
36
  ...event,
65
- startup: { status: "failed", message: "Der Start konnte nicht abgeschlossen werden. Bitte wende Dich an den zuständigen Betreuer." },
37
+ startup: { status: "failed", message: "The start could not be completed. Please contact the person responsible." },
66
38
  };
67
39
  const trace = access.can("runs.trace");
68
40
  if (event.kind === "thinking") return trace ? event : { kind: "thinking", delta: "", at: event.at };
69
41
  if (event.kind === "tool") return trace ? event : { kind: "tool", id: event.id, name: "", arguments: "", at: event.at };
70
42
  if (event.kind === "tool-result") return trace ? event : { kind: "tool-result", id: event.id, result: "", isError: event.isError };
71
- if (event.kind === "system") return { ...event, text: "Hinweis zur Verarbeitung. Bei Fragen wende Dich an den zuständigen Agenten." };
43
+ if (event.kind === "system") return { ...event, text: "Processing notice. If you have questions, contact the responsible agent." };
72
44
  if (event.kind !== "plugin") return event;
73
- if (hiddenStates.has(event.pluginId)) return undefined;
74
- if (event.pluginId === "ragents.actor-programs" || event.pluginId === "ragents.actor-programs.invocations") return undefined;
75
- return event;
45
+ return projections.chatEvent(event.pluginId, event, access);
76
46
  };
77
47
 
78
48
  const visibleMessage = (message: Message, actorId: string, trace: boolean): Message[] => {
@@ -1,7 +1,7 @@
1
1
  import { randomBytes, timingSafeEqual } from "node:crypto";
2
2
  import type { IncomingMessage } from "node:http";
3
3
 
4
- /** Je Koordinator ein Token für seine Werkzeuge; er handelt als dessen Benutzer, null ist der eine Zugang ohne Anmeldung. */
4
+ /** One token per coordinator for its tools; it acts as that coordinator's user, null is the one access without sign-in. */
5
5
  const coordinatorTokens = new Map<string | null, string>();
6
6
 
7
7
  export const coordinatorAccessToken = (userId: string | null): string => {
@@ -13,11 +13,11 @@ export const coordinatorAccessToken = (userId: string | null): string => {
13
13
  };
14
14
 
15
15
  export const profileAccessCookieName = (productId: string | undefined, profile: string | undefined): string => {
16
- if (!productId || !profile) throw new Error("Die Benutzeranmeldung benötigt PRODUCT_ID und PRODUCT_PROFILE");
16
+ if (!productId || !profile) throw new Error("User sign-in requires PRODUCT_ID and PRODUCT_PROFILE");
17
17
  return `${productId}-${profile}-user`;
18
18
  };
19
19
 
20
- /** Der Benutzer, für den ein Koordinator lokal die Nachrichtenschicht aufruft; sonst undefined. */
20
+ /** The user for whom a coordinator calls the message layer locally; otherwise undefined. */
21
21
  export const coordinatorRequestUser = (request: IncomingMessage, url: URL): { userId: string | null } | undefined => {
22
22
  const address = request.socket.remoteAddress;
23
23
  if (address !== "127.0.0.1" && address !== "::1" && address !== "::ffff:127.0.0.1") return undefined;
@@ -44,20 +44,20 @@ export const isSameOriginRequest = (request: IncomingMessage): boolean => {
44
44
  };
45
45
 
46
46
  export const createAccessSessionManager = (options: AccessSessionOptions) => {
47
- if (!/^[A-Za-z0-9_-]+$/.test(options.cookieName)) throw new Error("Ungültiger Name für das Anmeldungscookie");
48
- if (options.users?.length === 0) throw new Error("Eine aktivierte Anmeldung braucht mindestens einen Benutzer");
49
- if (options.users && options.anonymousUser) throw new Error("Benutzeranmeldung und anonymer Zugang schließen einander aus");
47
+ if (!/^[A-Za-z0-9_-]+$/.test(options.cookieName)) throw new Error("Invalid name for the sign-in cookie");
48
+ if (options.users?.length === 0) throw new Error("Enabled sign-in needs at least one user");
49
+ if (options.users && options.anonymousUser) throw new Error("User sign-in and anonymous access exclude each other");
50
50
  const enabled = options.users !== undefined;
51
51
  const now = options.now ?? Date.now;
52
52
  const sessionTtlMs = options.sessionTtlMs ?? 12 * 60 * 60 * 1000;
53
53
  if (!Number.isSafeInteger(sessionTtlMs) || sessionTtlMs < 1 || sessionTtlMs > 2_147_483_647) {
54
- throw new Error("Ungültige Gültigkeitsdauer für Anmeldungen");
54
+ throw new Error("Invalid validity period for sign-ins");
55
55
  }
56
56
  const passwords = new Map<string, PasswordRecord>();
57
- // Persönliche Token liegen nur als SHA-256 im Speicher; der Vergleich läuft zeitkonstant über alle Einträge.
57
+ // Personal tokens are kept in memory only as SHA-256; the comparison runs in constant time over all entries.
58
58
  const personalTokens: Array<{ digest: Buffer; user: AccessUser }> = [];
59
59
  for (const entry of options.users ?? []) {
60
- if (passwords.has(entry.id)) throw new Error(`Doppelter Benutzer: ${entry.id}`);
60
+ if (passwords.has(entry.id)) throw new Error(`Duplicate user: ${entry.id}`);
61
61
  const salt = randomBytes(16);
62
62
  const user = Object.freeze({ id: entry.id, label: entry.label, rights: Object.freeze([...entry.rights]),
63
63
  ...(entry.startEntries ? { startEntries: Object.freeze([...entry.startEntries]) } : {}),
@@ -65,14 +65,14 @@ export const createAccessSessionManager = (options: AccessSessionOptions) => {
65
65
  passwords.set(entry.id, { user, salt, hash: scryptSync(entry.password, salt, 32) });
66
66
  if (entry.token === undefined) continue;
67
67
  const digest = digestOf(entry.token);
68
- if (personalTokens.some((known) => timingSafeEqual(known.digest, digest))) throw new Error(`Der Token von Benutzer ${entry.id} gehört bereits einem anderen Benutzer`);
68
+ if (personalTokens.some((known) => timingSafeEqual(known.digest, digest))) throw new Error(`The token of user ${entry.id} already belongs to another user`);
69
69
  personalTokens.push({ digest, user });
70
70
  }
71
71
  const dummySalt = randomBytes(16);
72
72
  const dummyHash = randomBytes(32);
73
73
  const sessions = new Map<string, LoginSession>();
74
74
  const wellFormed = (token: string | undefined): string | undefined => token !== undefined && /^[A-Za-z0-9_-]{43}$/.test(token) ? token : undefined;
75
- // Clients ohne Cookie (VS-Code-Erweiterung, ihre iframes) senden den Token als Bearer; GET-Abrufe ohne Header (Ereignisstrom, Frames) als Abfrageparameter.
75
+ // Clients without a cookie (VS Code extension, its iframes) send the token as bearer; GET requests without headers (event stream, frames) as a query parameter.
76
76
  const tokenFor = (request: IncomingMessage): string | undefined => {
77
77
  const authorization = request.headers.authorization;
78
78
  if (authorization !== undefined) return wellFormed(/^Bearer (.+)$/.exec(authorization)?.[1]);
@@ -83,7 +83,7 @@ export const createAccessSessionManager = (options: AccessSessionOptions) => {
83
83
  if (matches.length !== 1) return undefined;
84
84
  return wellFormed(matches[0]!.slice(options.cookieName.length + 1));
85
85
  };
86
- // Ein persönlicher Token gilt nur als Bearer oder, bei GET, als Abfrageparameter; nie als Cookie.
86
+ // A personal token is only valid as bearer or, for GET, as a query parameter; never as a cookie.
87
87
  const offeredToken = (request: IncomingMessage): string | undefined => {
88
88
  const authorization = request.headers.authorization;
89
89
  if (authorization !== undefined) return /^Bearer (.+)$/.exec(authorization)?.[1];
@@ -127,7 +127,7 @@ export const createAccessSessionManager = (options: AccessSessionOptions) => {
127
127
  const expected = url.pathname === "/api/access" ? "GET" : "POST";
128
128
  if (request.method !== expected) {
129
129
  response.setHeader("Allow", expected);
130
- writeJson(response, 405, { error: "Methode nicht erlaubt" });
130
+ writeJson(response, 405, { error: "Method not allowed" });
131
131
  return true;
132
132
  }
133
133
  if (expected === "GET") {
@@ -135,11 +135,11 @@ export const createAccessSessionManager = (options: AccessSessionOptions) => {
135
135
  return true;
136
136
  }
137
137
  if (!isSameOriginRequest(request)) {
138
- writeJson(response, 403, { error: "Anmeldung und Abmeldung sind nur von derselben Website möglich" });
138
+ writeJson(response, 403, { error: "Sign-in and sign-out are only possible from the same website" });
139
139
  return true;
140
140
  }
141
141
  if (!enabled) {
142
- writeJson(response, 409, { error: "Die Anmeldung ist in diesem Profil ausgeschaltet" });
142
+ writeJson(response, 409, { error: "Sign-in is turned off in this profile" });
143
143
  return true;
144
144
  }
145
145
  if (url.pathname === "/api/access/logout") {
@@ -150,25 +150,25 @@ export const createAccessSessionManager = (options: AccessSessionOptions) => {
150
150
  return true;
151
151
  }
152
152
  if (request.headers["content-type"]?.split(";")[0]?.trim() !== "application/json") {
153
- writeJson(response, 415, { error: "Die Anmeldung benötigt application/json" });
153
+ writeJson(response, 415, { error: "Sign-in requires application/json" });
154
154
  return true;
155
155
  }
156
156
  try {
157
157
  const credentials = await readJsonBody(request, (body) => {
158
- if (!body || typeof body !== "object" || Array.isArray(body)) throw new Error("Benutzerkennung und Passwort fehlen");
158
+ if (!body || typeof body !== "object" || Array.isArray(body)) throw new Error("User id and password are missing");
159
159
  const value = body as Record<string, unknown>;
160
160
  if (Object.keys(value).some((key) => key !== "id" && key !== "password")
161
161
  || typeof value.id !== "string" || !value.id || value.id.length > 64
162
162
  || typeof value.password !== "string" || !value.password || value.password.length > 2048) {
163
- throw new Error("Benutzerkennung und Passwort sind ungültig");
163
+ throw new Error("User id and password are invalid");
164
164
  }
165
165
  return { id: value.id, password: value.password };
166
- }, "Die Anmeldung enthält kein gültiges JSON", 4096);
166
+ }, "The sign-in does not contain valid JSON", 4096);
167
167
  const record = passwords.get(credentials.id);
168
168
  const hash = await derivePassword(credentials.password, record?.salt ?? dummySalt);
169
169
  const matches = timingSafeEqual(hash, record?.hash ?? dummyHash);
170
170
  if (!record || !matches) {
171
- writeJson(response, 401, { error: "Benutzerkennung oder Passwort stimmen nicht" });
171
+ writeJson(response, 401, { error: "User id or password is incorrect" });
172
172
  return true;
173
173
  }
174
174
  const previous = tokenFor(request);
@@ -182,7 +182,7 @@ export const createAccessSessionManager = (options: AccessSessionOptions) => {
182
182
  } catch (error) {
183
183
  if (!request.aborted && !response.destroyed) {
184
184
  writeJson(response, error instanceof PayloadTooLargeError ? 413 : 400, {
185
- error: error instanceof PayloadTooLargeError ? "Die Anmeldedaten sind zu groß" : "Die Anmeldedaten sind ungültig",
185
+ error: error instanceof PayloadTooLargeError ? "The sign-in data is too large" : "The sign-in data is invalid",
186
186
  });
187
187
  }
188
188
  }
@@ -200,7 +200,7 @@ export const createAccessSessionManager = (options: AccessSessionOptions) => {
200
200
  response.once("close", release);
201
201
  response.once("finish", release);
202
202
  };
203
- /** Der Zugang, mit dem die Werkzeuge des Koordinators eines Benutzers handeln: dessen aktueller Stand, null ist der eine Zugang ohne Anmeldung. */
203
+ /** The access with which the tools of a user's coordinator act: that user's current state, null is the one access without sign-in. */
204
204
  const coordinatorSnapshot = (userId: string | null): AccessSnapshot => userId === null
205
205
  ? { enabled, user: enabled ? null : options.anonymousUser ?? null }
206
206
  : { enabled: true, user: passwords.get(userId)?.user ?? null };
@@ -14,29 +14,32 @@ import type { TitleModelSettings } from "../title-settings-contract.js";
14
14
 
15
15
  export { runContracts };
16
16
 
17
- const runId = Type.String({ minLength: 1, maxLength: 64, description: "Kennung des Runs" });
17
+ const runId = Type.String({ minLength: 1, maxLength: 64, description: "Id of the run" });
18
18
 
19
19
  const attachment = Type.Object({
20
20
  name: Type.String({ minLength: 1 }),
21
21
  mediaType: Type.String({ minLength: 1 }),
22
- data: Type.String({ description: "Inhalt als Base64" }),
22
+ data: Type.String({ description: "Content as Base64" }),
23
23
  }, { additionalProperties: false });
24
24
 
25
25
  const sessionInfo = openJson<SessionInfo>("SessionInfo");
26
26
 
27
- /** Rechte je Run prüft der Host dynamisch; Verträge ohne `rights` nennen ihre Regel in der Beschreibung. */
27
+ /** The host checks per-run rights dynamically; contracts without `rights` state their rule in the description. */
28
+ /** What a UI gets from the server at startup: the plugins' profile and the server's RAgents version, against which it checks its own. */
29
+ export type HostBootstrap = PublicPluginProfile & { readonly version: string };
30
+
28
31
  export const coreContracts = {
29
32
  runs: {
30
33
  list: defineOperation({
31
34
  id: "ragents.runs.list",
32
- description: "Alle Runs des Profils mit Titel, Zeiten und Metadaten. Recht: runs.read.",
35
+ description: "All runs of the profile with title, times and metadata. Right: runs.read.",
33
36
  rights: ["runs.read"],
34
37
  input: Type.Object({}, { additionalProperties: false }),
35
38
  result: Type.Array(sessionInfo),
36
39
  }),
37
40
  delete: defineOperation({
38
41
  id: "ragents.runs.delete",
39
- description: "Einen Run mit seinen Daten löschen. Rechte: runs.read und runs.delete.",
42
+ description: "Delete a run with its data. Rights: runs.read and runs.delete.",
40
43
  rights: ["runs.read", "runs.delete"],
41
44
  input: Type.Object({ runId }, { additionalProperties: false }),
42
45
  result: Type.Null(),
@@ -45,43 +48,43 @@ export const coreContracts = {
45
48
  chat: {
46
49
  send: defineOperation({
47
50
  id: "ragents.chat.send",
48
- description: "Eine Nachricht an den Koordinator des Runs; startet einen neuen Run oder funkt in einen laufenden. Mit entry startet sie den Run über diese Skill-Vorlage und deren festgelegte Startoptionen. Rechte: runs.read und runs.write, für einen neuen Run runs.create; beim globalen Chat dessen Rechte.",
51
+ description: "A message to the run's coordinator; starts a new run or cuts into a running one. With entry, it starts the run through this skill template and the start options it fixes. Rights: runs.read and runs.write, for a new run runs.create; for the global chat its rights.",
49
52
  input: Type.Object({
50
53
  runId,
51
54
  text: Type.Optional(Type.String()),
52
55
  attachments: Type.Optional(Type.Array(attachment)),
53
56
  userLocation: Type.Optional(openJson<ChatUserLocation>("ChatUserLocation")),
54
- entry: Type.Optional(Type.String({ minLength: 1, description: "Kennung der Skill-Vorlage, über die diese Nachricht den Run startet" })),
57
+ entry: Type.Optional(Type.String({ minLength: 1, description: "Id of the skill template through which this message starts the run" })),
55
58
  }, { additionalProperties: false }),
56
59
  result: Type.Null(),
57
60
  }),
58
61
  sendToActor: defineOperation({
59
62
  id: "ragents.chat.sendToActor",
60
- description: "Eine Nachricht an einen bestimmten LLM-Actor des Runs. Rechte wie ragents.chat.send.",
63
+ description: "A message to a specific LLM actor of the run. Rights as for ragents.chat.send.",
61
64
  input: Type.Object({ runId, actorId: Type.String({ minLength: 1 }), text: Type.Optional(Type.String()), attachments: Type.Optional(Type.Array(attachment)) }, { additionalProperties: false }),
62
65
  result: Type.Null(),
63
66
  }),
64
67
  start: defineOperation({
65
68
  id: "ragents.chat.start",
66
- description: "Einen Run über eine Script-Vorlage starten, ohne Nachricht; die Startoptionen, die die Vorlage festlegt, gelten. Rechte: runs.read, runs.write und die Freigabe der Vorlage.",
69
+ description: "Start a run through a script template, without a message; the start options the template fixes apply. Rights: runs.read, runs.write and the template's release.",
67
70
  input: Type.Object({ runId, entry: Type.String({ minLength: 1 }), input: Type.Optional(Type.Any()) }, { additionalProperties: false }),
68
71
  result: Type.Null(),
69
72
  }),
70
73
  stop: defineOperation({
71
74
  id: "ragents.chat.stop",
72
- description: "Not-Aus für den ganzen Run: bricht alle Turns und einen laufenden Start ab und stoppt alle Actors. Einen einzelnen Turn unterbricht ragents.runs.interruptTurn. Rechte: runs.read und runs.write.",
75
+ description: "Emergency stop for the whole run: aborts all turns and a running start and stops all actors. ragents.runs.interruptTurn interrupts a single turn. Rights: runs.read and runs.write.",
73
76
  input: Type.Object({ runId }, { additionalProperties: false }),
74
77
  result: Type.Null(),
75
78
  }),
76
79
  capabilities: defineOperation({
77
80
  id: "ragents.chat.capabilities",
78
- description: "Welche Anhänge das Modell eines Actors annimmt; der Modellname erscheint nur mit runs.inspect. Recht: runs.read.",
81
+ description: "Which attachments an actor's model accepts; the model name appears only with runs.inspect. Right: runs.read.",
79
82
  input: Type.Object({ runId, actor: Type.Optional(Type.String({ minLength: 1 })) }, { additionalProperties: false }),
80
83
  result: openJson<ChatAttachmentCapabilities>("ChatAttachmentCapabilities"),
81
84
  }),
82
85
  actorHistory: defineOperation({
83
86
  id: "ragents.chat.actorHistory",
84
- description: "Die Gesprächsverläufe aller Actors des Runs, ohne runs.inspect ohne Werkzeugdetails. Recht: runs.read.",
87
+ description: "The conversation histories of all actors of the run, without runs.inspect without tool details. Right: runs.read.",
85
88
  input: Type.Object({ runId }, { additionalProperties: false }),
86
89
  result: openJson<ActorConversations>("ActorConversations"),
87
90
  }),
@@ -89,14 +92,14 @@ export const coreContracts = {
89
92
  startOptions: {
90
93
  list: defineOperation({
91
94
  id: "ragents.startOptions.list",
92
- description: "Die Startoptionen eines Runs mit Wert und Darstellung, nur die, deren eigene Rechte der Aufrufer hat; die Modellwahl etwa verlangt runs.inspect. Nach dem Start ist jede außer den änderbaren gesperrt. Rechte: runs.read, runs.create.",
95
+ description: "The start options of a run with value and presentation, only those whose own rights the caller has; the model choice, for example, requires runs.inspect. After the start, all except the changeable ones are locked. Rights: runs.read, runs.create.",
93
96
  rights: ["runs.read", "runs.create"],
94
97
  input: Type.Object({ runId }, { additionalProperties: false }),
95
98
  result: Type.Array(openJson<StartOptionState>("StartOptionState")),
96
99
  }),
97
100
  select: defineOperation({
98
101
  id: "ragents.startOptions.select",
99
- description: "Eine Startoption vor dem Start wählen, eine änderbare wie die Modellwahl auch danach mit Wirkung ab dem nächsten Turn; fehlt ein Recht der Option selbst, scheitert die Wahl mit access-denied. Rechte: runs.read, runs.write, runs.create.",
102
+ description: "Choose a start option before the start, a changeable one such as the model choice also afterwards, taking effect from the next turn; if a right of the option itself is missing, the choice fails with access-denied. Rights: runs.read, runs.write, runs.create.",
100
103
  rights: ["runs.read", "runs.write", "runs.create"],
101
104
  input: Type.Object({ runId, optionId: Type.String({ minLength: 1, maxLength: 128 }), value: Type.Any() }, { additionalProperties: false }),
102
105
  result: openJson<StartOptionState>("StartOptionState"),
@@ -105,25 +108,25 @@ export const coreContracts = {
105
108
  transfer: {
106
109
  export: defineOperation({
107
110
  id: "ragents.runs.export",
108
- description: "Einen gestoppten Run als Archiv holen: Journal, Payloads, Modellkontexte und seine Plugin-Ablagen. Rechte: runs.read und runs.inspect.",
111
+ description: "Fetch a stopped run as an archive: journal, payloads, model contexts and its plugin stores. Rights: runs.read and runs.inspect.",
109
112
  rights: ["runs.read", "runs.inspect"],
110
113
  input: Type.Object({ runId }, { additionalProperties: false }),
111
114
  result: openJson<RunTransferExport>("RunTransferExport"),
112
115
  }),
113
116
  import: defineOperation({
114
117
  id: "ragents.runs.import",
115
- description: "Ein Run-Archiv annehmen, sein Journal wiedergeben und den Run gestoppt öffnen. Rechte: runs.read, runs.write und runs.create.",
118
+ description: "Accept a run archive, replay its journal and open the run stopped. Rights: runs.read, runs.write and runs.create.",
116
119
  rights: ["runs.read", "runs.write", "runs.create"],
117
120
  input: Type.Object({
118
- archive: Type.String({ minLength: 1, description: "Das tar.gz des Exports als Base64" }),
119
- workspacePath: Type.Optional(Type.String({ minLength: 1, description: "Ersatzordner auf diesem Server für einen Run mit Bindung path" })),
121
+ archive: Type.String({ minLength: 1, description: "The export's tar.gz as Base64" }),
122
+ workspacePath: Type.Optional(Type.String({ minLength: 1, description: "Replacement folder on this server for a run with binding path" })),
120
123
  }, { additionalProperties: false }),
121
124
  result: openJson<RunTransferImport>("RunTransferImport"),
122
125
  }),
123
126
  },
124
127
  prepare: defineOperation({
125
128
  id: "ragents.runs.prepare",
126
- description: "Den Auftrag eines neuen Runs im Gespräch mit einer eigenen Koordinator-Instanz ausarbeiten. Rechte: runs.read, runs.write, runs.create.",
129
+ description: "Work out the task of a new run in a conversation with a separate coordinator instance. Rights: runs.read, runs.write, runs.create.",
127
130
  rights: ["runs.read", "runs.write", "runs.create"],
128
131
  input: Type.Intersect([Type.Object({ runId }), openJson<RunPreparationRequest>("RunPreparationRequest")]),
129
132
  result: openJson<RunPreparationResponse>("RunPreparationResponse"),
@@ -131,28 +134,28 @@ export const coreContracts = {
131
134
  settings: {
132
135
  read: defineOperation({
133
136
  id: "ragents.settings.read",
134
- description: "Modelle, Plugins, Werkzeuge, Skills und Laufzeitinformationen des Profils. Recht: settings.read; nur lokal oder mit Zugang.",
137
+ description: "Models, plugins, tools, skills and runtime information of the profile. Right: settings.read; only locally or with access.",
135
138
  rights: ["settings.read"],
136
139
  input: Type.Object({}, { additionalProperties: false }),
137
140
  result: openJson<SettingsResponse>("SettingsResponse"),
138
141
  }),
139
142
  skill: defineOperation({
140
143
  id: "ragents.settings.skill",
141
- description: "Die Dateien eines registrierten Skills lesen; null, wenn er nicht registriert ist. Recht: settings.read.",
144
+ description: "Read the files of a registered skill; null if it is not registered. Right: settings.read.",
142
145
  rights: ["settings.read"],
143
146
  input: Type.Object({ id: Type.String({ minLength: 1 }) }, { additionalProperties: false }),
144
147
  result: Type.Union([openJson<SettingsSkillDetail>("SettingsSkillDetail"), Type.Null()]),
145
148
  }),
146
149
  titlesRead: defineOperation({
147
150
  id: "ragents.settings.titles.read",
148
- description: "Das Modell für automatische Überschriften und die Auswahl lesen. Recht: settings.read.",
151
+ description: "Read the model for automatic titles and the choices. Right: settings.read.",
149
152
  rights: ["settings.read"],
150
153
  input: Type.Object({}, { additionalProperties: false }),
151
154
  result: openJson<TitleModelSettings>("TitleModelSettings"),
152
155
  }),
153
156
  titlesSave: defineOperation({
154
157
  id: "ragents.settings.titles.save",
155
- description: "Das Modell für automatische Überschriften setzen oder die Erzeugung ausschalten. Recht: settings.write.",
158
+ description: "Set the model for automatic titles or turn their generation off. Right: settings.write.",
156
159
  rights: ["settings.write"],
157
160
  input: Type.Object({ value: Type.Any() }, { additionalProperties: false }),
158
161
  result: openJson<TitleModelSettings>("TitleModelSettings"),
@@ -161,15 +164,15 @@ export const coreContracts = {
161
164
  plugins: {
162
165
  bootstrap: defineOperation({
163
166
  id: "ragents.plugins.bootstrap",
164
- description: "Produkt, aktive Plugins mit Web-Konfiguration und freigegebene Vorlagen für die Oberfläche.",
167
+ description: "Product, active plugins with web configuration, released templates and the server's RAgents version for the UI.",
165
168
  input: Type.Object({}, { additionalProperties: false }),
166
- result: openJson<PublicPluginProfile>("PublicPluginProfile"),
169
+ result: openJson<HostBootstrap>("HostBootstrap"),
167
170
  }),
168
171
  },
169
172
  external: {
170
173
  set: defineOperation({
171
174
  id: "ragents.external.set",
172
- description: "Den Zugang von außen ein- oder ausschalten; nur vom eigenen Rechner. Recht: settings.write.",
175
+ description: "Turn external access on or off; only from the local machine. Right: settings.write.",
173
176
  rights: ["settings.write"],
174
177
  input: Type.Object({ state: Type.Union([Type.Literal("on"), Type.Literal("off")]) }, { additionalProperties: false }),
175
178
  result: Type.Object({ external: Type.Boolean() }),
@@ -178,20 +181,20 @@ export const coreContracts = {
178
181
  channels: {
179
182
  runs: defineChannel({
180
183
  id: "ragents.runs",
181
- description: "Meldet jede Änderung der Run-Liste. Recht: runs.read.",
184
+ description: "Reports every change of the run list. Right: runs.read.",
182
185
  rights: ["runs.read"],
183
186
  params: Type.Object({}, { additionalProperties: false }),
184
187
  message: Type.Object({ type: Type.Literal("changed") }),
185
188
  }),
186
189
  run: defineChannel({
187
190
  id: "ragents.run",
188
- description: "Meldet jedes neue Journalereignis eines Runs; erst ready, dann run. Rechte wie das Lesen des Runs.",
191
+ description: "Reports every new journal event of a run; first ready, then run. Rights as for reading the run.",
189
192
  params: Type.Object({ runId }, { additionalProperties: false }),
190
193
  message: Type.Object({ kind: Type.Union([Type.Literal("ready"), Type.Literal("run")]) }),
191
194
  }),
192
195
  chat: defineChannel({
193
196
  id: "ragents.chat",
194
- description: "Der Chatverlauf des Koordinators: erst der gespeicherte Verlauf, dann live. Rechte wie das Lesen des Runs.",
197
+ description: "The coordinator's chat history: first the stored history, then live. Rights as for reading the run.",
195
198
  params: Type.Object({ runId }, { additionalProperties: false }),
196
199
  message: openJson<ChatEvent>("ChatEvent"),
197
200
  }),
@@ -25,12 +25,14 @@ export interface CoreMethodSources {
25
25
  saveTitleModelSettings: (value: unknown) => Promise<TitleModelSettings>;
26
26
  };
27
27
  plugins: PluginHost;
28
+ /** The RAgents version of this server; a UI with a different version shows the difference. */
29
+ version: string;
28
30
  global: GlobalRunPolicy | undefined;
29
- /** Der Benutzer eines Runs: null ohne Eigentümer, undefined für eine Kennung ohne Run. */
31
+ /** The user of a run: null without an owner, undefined for an id without a run. */
30
32
  runOwner: (runId: string) => string | null | undefined;
31
- /** Ob nur der Eigentümer den Run bedient. */
33
+ /** Whether only the owner operates the run. */
32
34
  runOwnerOnly: (runId: string) => boolean;
33
- /** Einstellungen sind ohne Anmeldung und Zugangstoken nur vom eigenen Rechner lesbar. */
35
+ /** Without sign-in and access token, settings are readable only from the local machine. */
34
36
  settingsGuarded: () => boolean;
35
37
  external: { open: () => boolean; set: (value: boolean) => Promise<void> };
36
38
  }
@@ -39,7 +41,7 @@ const userOf = (access: AccessContext): ChatUser | undefined => access.user ? {
39
41
 
40
42
  const userIdOf = (access: AccessContext): string | null => access.user?.id ?? null;
41
43
 
42
- /** Der Oberflächenkontext nennt den beim Absenden geöffneten Run; auch er ist ein Zugriff auf diesen Run. */
44
+ /** The UI context names the run open when sending; it too is an access to that run. */
43
45
  const locatedRun = (userLocation: unknown): string | undefined => {
44
46
  const named = typeof userLocation === "object" && userLocation !== null && "runId" in userLocation
45
47
  ? (userLocation as { runId: unknown }).runId : undefined;
@@ -50,7 +52,7 @@ const messageOf = (text: string | undefined, attachments: unknown) => {
50
52
  try {
51
53
  const trimmed = text?.trim() ?? "";
52
54
  const parsed = parseChatAttachments(attachments);
53
- if (!trimmed && parsed.length === 0) throw new Error("Text oder Anhänge fehlen");
55
+ if (!trimmed && parsed.length === 0) throw new Error("Text or attachments are missing");
54
56
  return { text: trimmed, attachments: parsed };
55
57
  } catch (error) {
56
58
  throw new DomainError("invalid-message", error instanceof Error ? error.message : String(error), 400);
@@ -59,15 +61,15 @@ const messageOf = (text: string | undefined, attachments: unknown) => {
59
61
 
60
62
  const TECHNICAL_ATTACHMENT_ERRORS = ["attachment-model-unsupported", "attachment-tools-required", "attachments-unsupported"];
61
63
 
62
- /** Ohne runs.inspect bekommt der Benutzer bei technischen Fehlern nur den allgemeinen Hinweis, wie bisher. */
64
+ /** Without runs.inspect, the user gets only the general notice on technical errors, as before. */
63
65
  const guardedForUser = async <T>(access: AccessContext, work: () => Promise<T>): Promise<T> => {
64
66
  try {
65
67
  return await work();
66
68
  } catch (error) {
67
69
  if (access.can("runs.inspect")) throw error;
68
70
  const technical = error instanceof DomainError && TECHNICAL_ATTACHMENT_ERRORS.includes(error.code);
69
- if (technical) throw new DomainError(error.code, "Dieser Agent kann die angehängte Datei nicht verarbeiten.", error.status);
70
- if (!(error instanceof DomainError) || error.status >= 500) throw new DomainError("request-failed", "Die Anfrage konnte nicht verarbeitet werden.", 500);
71
+ if (technical) throw new DomainError(error.code, "This agent cannot process the attached file.", error.status);
72
+ if (!(error instanceof DomainError) || error.status >= 500) throw new DomainError("request-failed", "The request could not be processed.", 500);
71
73
  throw error;
72
74
  }
73
75
  };
@@ -80,10 +82,10 @@ export const coreMethods = (sources: CoreMethodSources): MethodContribution[] =>
80
82
  return sessions.get(runId);
81
83
  };
82
84
  const assertMaySend = (access: AccessContext, runId: string) => {
83
- if (!access.can("runs.create") && !sessions.hasRun?.(runId) && !global?.isCoordinator(runId)) throw new DomainError("access-denied", "Freie Runs sind für diesen Zugang nicht freigegeben.", 403);
85
+ if (!access.can("runs.create") && !sessions.hasRun?.(runId) && !global?.isCoordinator(runId)) throw new DomainError("access-denied", "Free runs are not enabled for this access.", 403);
84
86
  };
85
87
  const assertSettingsReachable = (local: boolean) => {
86
- if (!local && sources.settingsGuarded()) throw new DomainError("settings-local-only", "Einstellungen sind nur lokal oder mit Zugangstoken verfügbar", 403);
88
+ if (!local && sources.settingsGuarded()) throw new DomainError("settings-local-only", "Settings are only available locally or with an access token", 403);
87
89
  };
88
90
  return [
89
91
  implement(coreContracts.runs.list, (_input, { access }) => sessions.list(runListScope(access, policy))),
@@ -100,14 +102,14 @@ export const coreMethods = (sources: CoreMethodSources): MethodContribution[] =>
100
102
  implement(coreContracts.chat.sendToActor, async ({ runId, actorId, text, attachments }, { access }) => {
101
103
  assertMaySend(access, runId);
102
104
  const current = await session(access, runId, "write");
103
- if (!current.sendToActor) throw new DomainError("actor-send-unavailable", "Actor-Nachrichten sind nicht verfügbar", 404);
105
+ if (!current.sendToActor) throw new DomainError("actor-send-unavailable", "Actor messages are not available", 404);
104
106
  const message = messageOf(text, attachments);
105
107
  await guardedForUser(access, () => current.sendToActor!(actorId, message.text, message.attachments, userOf(access)));
106
108
  return null;
107
109
  }),
108
110
  implement(coreContracts.chat.start, async ({ runId, entry, input }, { access }) => {
109
111
  const trimmed = entry.trim();
110
- if (!canStartEntry(access, trimmed)) throw new DomainError("access-denied", "Dieses Setup ist für diesen Zugang nicht freigegeben.", 403);
112
+ if (!canStartEntry(access, trimmed)) throw new DomainError("access-denied", "This setup is not enabled for this access.", 403);
111
113
  const current = await session(access, runId, "write");
112
114
  current.start(trimmed, input === undefined ? null : input, userOf(access));
113
115
  return null;
@@ -119,13 +121,13 @@ export const coreMethods = (sources: CoreMethodSources): MethodContribution[] =>
119
121
  }),
120
122
  implement(coreContracts.chat.capabilities, async ({ runId, actor }, { access }) => {
121
123
  const current = await session(access, runId, "read");
122
- if (!current.capabilities) throw new DomainError("capabilities-unavailable", "Modellfähigkeiten sind nicht verfügbar", 404);
124
+ if (!current.capabilities) throw new DomainError("capabilities-unavailable", "Model capabilities are not available", 404);
123
125
  const capabilities = await current.capabilities(actor ?? "primary", userIdOf(access));
124
126
  return access.can("runs.inspect") ? capabilities : { ...capabilities, model: "" };
125
127
  }),
126
128
  implement(coreContracts.chat.actorHistory, async ({ runId }, { access }) => {
127
129
  const current = await session(access, runId, "read");
128
- if (!current.actorConversations) throw new DomainError("actor-history-unavailable", "Actor-Verläufe sind nicht verfügbar", 404);
130
+ if (!current.actorConversations) throw new DomainError("actor-history-unavailable", "Actor histories are not available", 404);
129
131
  return accessibleActorConversations(current.actorConversations(), access);
130
132
  }),
131
133
  implement(coreContracts.startOptions.list, ({ runId }, { access }) =>
@@ -139,23 +141,23 @@ export const coreMethods = (sources: CoreMethodSources): MethodContribution[] =>
139
141
  implement(coreContracts.transfer.export, ({ runId }) => sessions.exportRun(runId)),
140
142
  implement(coreContracts.transfer.import, ({ archive, workspacePath }) => {
141
143
  const decoded = Buffer.from(archive, "base64");
142
- if (decoded.length === 0) throw new DomainError("run-transfer-invalid", "Das Archiv ist leer.", 400);
144
+ if (decoded.length === 0) throw new DomainError("run-transfer-invalid", "The archive is empty.", 400);
143
145
  return sessions.importRun(decoded, workspacePath);
144
146
  }),
145
147
  implement(coreContracts.settings.read, (_input, { local }) => { assertSettingsReachable(local); return sessions.settings(); }),
146
148
  implement(coreContracts.settings.skill, ({ id }, { local }) => { assertSettingsReachable(local); return sessions.skill(id); }),
147
149
  implement(coreContracts.settings.titlesRead, (_input, { local }) => { assertSettingsReachable(local); return sessions.titleModelSettings(); }),
148
150
  implement(coreContracts.settings.titlesSave, ({ value }, { local }) => { assertSettingsReachable(local); return sessions.saveTitleModelSettings(value); }),
149
- implement(coreContracts.plugins.bootstrap, (_input, { access }) => sources.plugins.publicProfile(access)),
151
+ implement(coreContracts.plugins.bootstrap, (_input, { access }) => ({ ...sources.plugins.publicProfile(access), version: sources.version })),
150
152
  implement(coreContracts.external.set, async ({ state }, { local }) => {
151
- if (!local) throw new DomainError("local-only", "Nur lokal schaltbar", 403);
153
+ if (!local) throw new DomainError("local-only", "Can only be switched locally", 403);
152
154
  await sources.external.set(state === "on");
153
155
  return { external: sources.external.open() };
154
156
  }),
155
157
  ];
156
158
  };
157
159
 
158
- export const coreChannels = (sources: Pick<CoreMethodSources, "sessions" | "global" | "runOwner" | "runOwnerOnly">): ChannelContribution[] => {
160
+ export const coreChannels = (sources: Pick<CoreMethodSources, "sessions" | "plugins" | "global" | "runOwner" | "runOwnerOnly">): ChannelContribution[] => {
159
161
  const { sessions, global } = sources;
160
162
  const policy: RunAccessPolicy = { global, ownerOf: sources.runOwner, ownerOnly: sources.runOwnerOnly };
161
163
  return [
@@ -174,7 +176,7 @@ export const coreChannels = (sources: Pick<CoreMethodSources, "sessions" | "glob
174
176
  assertRunRights(access, runId, "read", policy);
175
177
  const current = await sessions.get(runId);
176
178
  return current.subscribe((event) => {
177
- const visible = accessibleChatEvent(event, access);
179
+ const visible = accessibleChatEvent(event, access, sources.plugins.accessProjections);
178
180
  if (visible) emit(visible);
179
181
  });
180
182
  }),