@schlenkr/ragents 0.1.10 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (743) hide show
  1. package/apps/server/package.json +1 -1
  2. package/apps/server/src/access-projection.ts +4 -4
  3. package/apps/server/src/access-service.ts +3 -3
  4. package/apps/server/src/access-session.ts +19 -19
  5. package/apps/server/src/api/contracts.ts +29 -29
  6. package/apps/server/src/api/core-methods.ts +17 -17
  7. package/apps/server/src/api/delivery.ts +2 -2
  8. package/apps/server/src/api/reference.ts +27 -27
  9. package/apps/server/src/api/rights.ts +18 -18
  10. package/apps/server/src/chat-handler.ts +5 -5
  11. package/apps/server/src/config-definition.ts +37 -10
  12. package/apps/server/src/config-file.ts +49 -49
  13. package/apps/server/src/config.ts +2 -0
  14. package/apps/server/src/data-directory.ts +2 -2
  15. package/apps/server/src/external-access.ts +1 -1
  16. package/apps/server/src/folder-install.ts +1 -1
  17. package/apps/server/src/help-files.ts +1 -1
  18. package/apps/server/src/host-api.json +6 -1
  19. package/apps/server/src/host-api.ts +3 -2
  20. package/apps/server/src/host-record.ts +3 -3
  21. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  22. package/apps/server/src/host-version.ts +17 -17
  23. package/apps/server/src/host-web.ts +5 -5
  24. package/apps/server/src/main.ts +6 -6
  25. package/apps/server/src/missing-environment.ts +6 -6
  26. package/apps/server/src/parent-watch.ts +4 -4
  27. package/apps/server/src/plugin-build/build.ts +31 -31
  28. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  29. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  30. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  31. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  32. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  33. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  34. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  35. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  36. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  37. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  38. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  39. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  40. package/apps/server/src/plugin-support/http.ts +2 -2
  41. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  42. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  43. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  44. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  45. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  46. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  47. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  48. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  49. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  50. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  51. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  52. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  53. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  54. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  55. package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
  56. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  57. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  58. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  59. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  60. package/apps/server/src/plugin-support/prompt.ts +1 -1
  61. package/apps/server/src/plugin-support/provision.ts +8 -8
  62. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  63. package/apps/server/src/plugin-support/skills.ts +18 -18
  64. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  65. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  66. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  67. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  68. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  69. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  70. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  71. package/apps/server/src/plugin-support/zip.ts +7 -7
  72. package/apps/server/src/profile/bundle-manifest.ts +17 -17
  73. package/apps/server/src/profile/compose.ts +12 -7
  74. package/apps/server/src/profile/plugin-discovery.ts +12 -12
  75. package/apps/server/src/profile/provisioning.ts +5 -5
  76. package/apps/server/src/profile-target.ts +10 -10
  77. package/apps/server/src/protocol.ts +2 -2
  78. package/apps/server/src/provider.ts +61 -56
  79. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  80. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  81. package/apps/server/src/ragents/coordinator.ts +2 -2
  82. package/apps/server/src/ragents/engine.ts +23 -23
  83. package/apps/server/src/ragents/global-chat.ts +8 -8
  84. package/apps/server/src/ragents/host-services.ts +6 -3
  85. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  86. package/apps/server/src/ragents/run-owner.ts +2 -2
  87. package/apps/server/src/ragents/session.ts +49 -49
  88. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  89. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  90. package/apps/server/src/rpc/dispatcher.ts +19 -19
  91. package/apps/server/src/rpc/http-transport.ts +11 -11
  92. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  93. package/apps/server/src/run-preparation-input.ts +5 -5
  94. package/apps/server/src/run-preparation.ts +24 -24
  95. package/apps/server/src/run-transfer.ts +39 -39
  96. package/apps/server/src/server.ts +48 -48
  97. package/apps/server/src/settings.ts +1 -1
  98. package/apps/server/src/startup.ts +3 -3
  99. package/apps/server/src/title-compactor.ts +9 -9
  100. package/apps/server/src/title-settings.ts +3 -3
  101. package/apps/server/src/web-bundles.ts +2 -2
  102. package/apps/server/src/web-stylesheet.ts +2 -2
  103. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-BfNSGxjB.js} +1 -1
  104. package/apps/web/dist/assets/main-D6bsKcIK.js +11 -0
  105. package/apps/web/dist/assets/mermaid-HWGCJPDP-DROEqEeg.js +608 -0
  106. package/apps/web/dist/assets/runPanel-Dumuuqry.js +21 -0
  107. package/apps/web/dist/help/guide-access.html +5 -5
  108. package/apps/web/dist/help/guide-access.md +2 -2
  109. package/apps/web/dist/help/guide-clients.html +53 -54
  110. package/apps/web/dist/help/guide-clients.md +50 -51
  111. package/apps/web/dist/help/guide-distributed.html +12 -7
  112. package/apps/web/dist/help/guide-distributed.md +9 -4
  113. package/apps/web/dist/help/guide-functions.html +3 -3
  114. package/apps/web/dist/help/guide-getting-started.html +24 -15
  115. package/apps/web/dist/help/guide-getting-started.md +22 -12
  116. package/apps/web/dist/help/guide-ideas.html +3 -3
  117. package/apps/web/dist/help/guide-plugins.html +5 -4
  118. package/apps/web/dist/help/guide-plugins.md +2 -1
  119. package/apps/web/dist/help/guide-programs.html +3 -3
  120. package/apps/web/dist/help/guide-runtime.html +6 -6
  121. package/apps/web/dist/help/guide-runtime.md +3 -3
  122. package/apps/web/dist/help/guide.html +3 -3
  123. package/apps/web/dist/help/index.html +196 -144
  124. package/apps/web/dist/help/mini-app.css +6 -0
  125. package/apps/web/dist/help/mini-app.js +14 -14
  126. package/apps/web/dist/host-web.json +90 -90
  127. package/apps/web/dist/index.html +3 -3
  128. package/apps/web/dist/run-panel.html +3 -3
  129. package/apps/web/package.json +1 -1
  130. package/apps/web/src/AccessContext.tsx +15 -15
  131. package/apps/web/src/App.tsx +13 -13
  132. package/apps/web/src/DiffCode.tsx +2 -2
  133. package/apps/web/src/HelpDialog.tsx +3 -3
  134. package/apps/web/src/Overview.tsx +13 -13
  135. package/apps/web/src/PluginActivation.ts +1 -1
  136. package/apps/web/src/PluginChat.tsx +15 -15
  137. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  138. package/apps/web/src/PluginRegistry.tsx +44 -44
  139. package/apps/web/src/RunPreparationChat.tsx +11 -11
  140. package/apps/web/src/RunStore.ts +1 -1
  141. package/apps/web/src/SessionList.tsx +14 -14
  142. package/apps/web/src/SettingsModal.tsx +112 -112
  143. package/apps/web/src/StartOptions.tsx +11 -11
  144. package/apps/web/src/StartSelection.tsx +11 -11
  145. package/apps/web/src/StartTiles.tsx +8 -8
  146. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  147. package/apps/web/src/ThemeSettings.tsx +8 -8
  148. package/apps/web/src/TitleModelSettings.tsx +13 -13
  149. package/apps/web/src/WorkspacePanel.tsx +9 -9
  150. package/apps/web/src/access-session.ts +4 -4
  151. package/apps/web/src/access-token.ts +5 -5
  152. package/apps/web/src/actor-conversation.ts +3 -3
  153. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  154. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  155. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  156. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  157. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  158. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  159. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  160. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  161. package/apps/web/src/api.ts +7 -7
  162. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  163. package/apps/web/src/chat/chat-target.ts +3 -3
  164. package/apps/web/src/chat/requests.ts +2 -2
  165. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  166. package/apps/web/src/chat-view-settings.tsx +5 -6
  167. package/apps/web/src/diff-view.css +1 -1
  168. package/apps/web/src/highlighting.css +1 -1
  169. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  170. package/apps/web/src/lib/labels.ts +6 -6
  171. package/apps/web/src/main.tsx +4 -4
  172. package/apps/web/src/offered-machines.ts +2 -2
  173. package/apps/web/src/page-opener.tsx +1 -1
  174. package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
  175. package/apps/web/src/panel/LoginForm.tsx +6 -6
  176. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  177. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  178. package/apps/web/src/panel/PanelPage.tsx +1 -1
  179. package/apps/web/src/panel/RunLine.tsx +4 -4
  180. package/apps/web/src/panel/RunsPage.tsx +15 -15
  181. package/apps/web/src/panel/StartPage.tsx +26 -26
  182. package/apps/web/src/panel/connection-state.ts +9 -9
  183. package/apps/web/src/panel/contract.ts +28 -28
  184. package/apps/web/src/panel.tsx +1 -1
  185. package/apps/web/src/plugin-bootstrap.ts +5 -5
  186. package/apps/web/src/product/ModelControl.tsx +3 -3
  187. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  188. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  189. package/apps/web/src/product/model-settings.ts +2 -2
  190. package/apps/web/src/rpc/client.ts +16 -16
  191. package/apps/web/src/rpc.ts +1 -1
  192. package/apps/web/src/run-overview.ts +1 -1
  193. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  194. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  195. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  196. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  197. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  198. package/apps/web/src/run-panel/clipboard.ts +3 -3
  199. package/apps/web/src/run-panel/host-contract.ts +5 -5
  200. package/apps/web/src/run-panel/host.ts +15 -15
  201. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  202. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  203. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  204. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  205. package/apps/web/src/run-panel.tsx +4 -4
  206. package/apps/web/src/run-preparation.ts +2 -2
  207. package/apps/web/src/run-view.ts +3 -3
  208. package/apps/web/src/settings-contributions.ts +32 -32
  209. package/apps/web/src/theme.ts +9 -9
  210. package/apps/web/src/title-model-settings.ts +6 -6
  211. package/apps/web/src/ui/ListDetail.tsx +9 -9
  212. package/apps/web/src/ui/dialog.tsx +2 -2
  213. package/apps/web/src/ui/modal-controller.ts +3 -3
  214. package/apps/web/src/ui/modal.tsx +2 -2
  215. package/apps/web/src/ui/popover.tsx +1 -1
  216. package/apps/web/src/ui/relative-time.ts +8 -8
  217. package/apps/web/src/ui/startup-notice.tsx +2 -2
  218. package/apps/web/src/ui/state-icon.tsx +1 -1
  219. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  220. package/apps/web/src/ui/stop-button.tsx +2 -2
  221. package/bundles/ragents.activity/ragents-bundle.json +2 -2
  222. package/bundles/ragents.activity/web/classes.json +1 -1
  223. package/bundles/ragents.activity/web/index.js +1 -1
  224. package/bundles/ragents.activity/web/index.js.map +2 -2
  225. package/bundles/ragents.actor-programs/ragents-bundle.json +2 -2
  226. package/bundles/ragents.actor-programs/server/index.js +225 -225
  227. package/bundles/ragents.actor-programs/server/index.js.map +2 -2
  228. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  229. package/bundles/ragents.actor-programs/web/index.js +1 -1
  230. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  231. package/bundles/ragents.ask/ragents-bundle.json +2 -2
  232. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  233. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  234. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  235. package/bundles/ragents.ask/server/index.js +23 -23
  236. package/bundles/ragents.ask/server/index.js.map +2 -2
  237. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  238. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  239. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
  240. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
  241. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  242. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  243. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  245. package/bundles/ragents.ask/web/classes.json +1 -1
  246. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  247. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  248. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  249. package/bundles/ragents.ask/web/index.js +1 -1
  250. package/bundles/ragents.ask/web/index.js.map +2 -2
  251. package/bundles/ragents.browser/executor/index.mjs +35 -35
  252. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  253. package/bundles/ragents.browser/ragents-bundle.json +2 -2
  254. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  255. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  256. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  257. package/bundles/ragents.browser/server/index.js +31 -31
  258. package/bundles/ragents.browser/server/index.js.map +2 -2
  259. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  260. package/bundles/ragents.documents/prompt.hbs +1 -1
  261. package/bundles/ragents.documents/ragents-bundle.json +2 -2
  262. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  263. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  264. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  265. package/bundles/ragents.documents/server/index.js +26 -26
  266. package/bundles/ragents.documents/server/index.js.map +2 -2
  267. package/bundles/ragents.documents/web/classes.json +1 -1
  268. package/bundles/ragents.documents/web/index.js +1 -1
  269. package/bundles/ragents.documents/web/index.js.map +3 -3
  270. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  271. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  272. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +2 -2
  273. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  274. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  275. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  276. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  277. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  278. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +2 -2
  280. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  281. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  282. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  283. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  284. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  285. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  286. package/bundles/ragents.lsp-typescript/ragents-bundle.json +2 -2
  287. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  288. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  289. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  290. package/bundles/ragents.model-relay/ragents-bundle.json +7 -3
  291. package/bundles/ragents.model-relay/server/index.js +25 -21
  292. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  293. package/bundles/ragents.orchestration/ragents-bundle.json +2 -2
  294. package/bundles/ragents.orchestration/server/index.js +28 -28
  295. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  296. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  297. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  300. package/bundles/ragents.orchestration/web/classes.json +1 -1
  301. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  302. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  303. package/bundles/ragents.orchestration/web/index.js +8 -8
  304. package/bundles/ragents.orchestration/web/index.js.map +2 -2
  305. package/bundles/ragents.overseer/ragents-bundle.json +2 -2
  306. package/bundles/ragents.overseer/server/index.js +98 -98
  307. package/bundles/ragents.overseer/server/index.js.map +2 -2
  308. package/bundles/ragents.overseer/web/classes.json +1 -1
  309. package/bundles/ragents.overseer/web/index.js +1 -1
  310. package/bundles/ragents.overseer/web/index.js.map +2 -2
  311. package/bundles/ragents.processes/ragents-bundle.json +2 -2
  312. package/bundles/ragents.processes/server/index.js +11 -11
  313. package/bundles/ragents.processes/server/index.js.map +2 -2
  314. package/bundles/ragents.processes/web/classes.json +1 -1
  315. package/bundles/ragents.processes/web/index.js +3 -3
  316. package/bundles/ragents.processes/web/index.js.map +2 -2
  317. package/bundles/ragents.product/ragents-bundle.json +2 -2
  318. package/bundles/ragents.product/server/index.js +12 -13
  319. package/bundles/ragents.product/server/index.js.map +2 -2
  320. package/bundles/ragents.product/web/classes.json +1 -1
  321. package/bundles/ragents.product/web/index.js +1 -1
  322. package/bundles/ragents.product/web/index.js.map +2 -2
  323. package/bundles/ragents.profile-distribution/ragents-bundle.json +2 -2
  324. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  325. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  326. package/bundles/ragents.reference/ragents-bundle.json +2 -2
  327. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  328. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  335. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  336. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  340. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  341. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  347. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  348. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  349. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  350. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  352. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  353. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  360. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  361. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  362. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  363. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  365. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  366. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  367. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  368. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  392. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  393. package/bundles/ragents.reference/web/classes.json +1 -1
  394. package/bundles/ragents.reference/web/index.js +1 -1
  395. package/bundles/ragents.reference/web/index.js.map +2 -2
  396. package/bundles/ragents.todo/ragents-bundle.json +2 -2
  397. package/bundles/ragents.todo/server/index.js +5 -5
  398. package/bundles/ragents.todo/server/index.js.map +2 -2
  399. package/bundles/ragents.todo/web/classes.json +1 -1
  400. package/bundles/ragents.todo/web/index.js +1 -1
  401. package/bundles/ragents.todo/web/index.js.map +2 -2
  402. package/bundles/ragents.transcript/ragents-bundle.json +2 -2
  403. package/bundles/ragents.transcript/server/index.js +11 -11
  404. package/bundles/ragents.transcript/server/index.js.map +2 -2
  405. package/bundles/ragents.watch/ragents-bundle.json +2 -2
  406. package/bundles/ragents.watch/server/index.js +48 -48
  407. package/bundles/ragents.watch/server/index.js.map +2 -2
  408. package/bundles/ragents.workspace/ragents-bundle.json +2 -2
  409. package/bundles/ragents.workspace/server/index.js +81 -81
  410. package/bundles/ragents.workspace/server/index.js.map +2 -2
  411. package/bundles/ragents.workspace/web/classes.json +1 -1
  412. package/bundles/ragents.workspace/web/index.js +1 -1
  413. package/bundles/ragents.workspace/web/index.js.map +2 -2
  414. package/package.json +4 -4
  415. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  416. package/packages/agent/dist/index.d.ts +1 -1
  417. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  418. package/packages/agent/src/core/compaction/utils.ts +1 -1
  419. package/packages/agent/src/core/model-runtime.ts +45 -5
  420. package/packages/agent/src/index.ts +1 -1
  421. package/packages/agent/src/loop/agent-loop.ts +2 -2
  422. package/packages/ai/dist/models.d.ts +1 -0
  423. package/packages/ai/dist/models.generated.d.ts +4544 -983
  424. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  425. package/packages/ai/src/api/ai-sdk.ts +33 -7
  426. package/packages/ai/src/api-registry.ts +1 -1
  427. package/packages/ai/src/index.ts +2 -2
  428. package/packages/ai/src/models.generated.ts +1 -1
  429. package/packages/ai/src/models.ts +1 -1
  430. package/packages/ai/src/providers/openrouter.models.ts +3723 -550
  431. package/packages/ragents/src/access.ts +12 -12
  432. package/packages/ragents/src/agents/actor-input.ts +33 -33
  433. package/packages/ragents/src/agents/catalog.ts +1 -1
  434. package/packages/ragents/src/agents/delivery.ts +17 -17
  435. package/packages/ragents/src/agents/plugins.ts +1 -1
  436. package/packages/ragents/src/agents/scheduler.ts +7 -7
  437. package/packages/ragents/src/agents/schemas.ts +1 -1
  438. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  439. package/packages/ragents/src/agents/tools.ts +20 -20
  440. package/packages/ragents/src/agents/toolset.ts +5 -5
  441. package/packages/ragents/src/agents/workspaces.ts +1 -1
  442. package/packages/ragents/src/domain/events.ts +1 -1
  443. package/packages/ragents/src/domain/model.ts +5 -5
  444. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  445. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  446. package/packages/ragents/src/drivers/agent.ts +2 -2
  447. package/packages/ragents/src/drivers/attachments.ts +4 -4
  448. package/packages/ragents/src/http/contracts.ts +14 -14
  449. package/packages/ragents/src/http/methods.ts +6 -6
  450. package/packages/ragents/src/plugin-host.ts +119 -119
  451. package/packages/ragents/src/plugin-types.ts +16 -16
  452. package/packages/ragents/src/rpc/contract.ts +5 -5
  453. package/packages/ragents/src/rpc/contribution.ts +2 -2
  454. package/packages/ragents/src/rpc/peer.ts +11 -11
  455. package/packages/ragents/src/rpc/protocol.ts +2 -2
  456. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  457. package/packages/ragents/src/runtime/journal.ts +10 -10
  458. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  459. package/packages/ragents/src/runtime/stop.ts +2 -2
  460. package/packages/ragents/src/script/mediators.ts +35 -35
  461. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  462. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  463. package/packages/ragents/src/typescript/compiler.ts +7 -7
  464. package/packages/ragents/src/typescript/snippet.ts +5 -5
  465. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  466. package/packages/workspace-executor/src/commands.ts +18 -18
  467. package/packages/workspace-executor/src/context.ts +15 -15
  468. package/packages/workspace-executor/src/contributions.ts +35 -35
  469. package/packages/workspace-executor/src/errors.ts +1 -1
  470. package/packages/workspace-executor/src/executor.ts +15 -15
  471. package/packages/workspace-executor/src/files.ts +30 -30
  472. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  473. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  474. package/packages/workspace-executor/src/language-server/host.ts +35 -35
  475. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  476. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  477. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  478. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  479. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
  480. package/packages/workspace-executor/src/managed-process.ts +12 -12
  481. package/packages/workspace-executor/src/module.ts +8 -8
  482. package/packages/workspace-executor/src/modules.ts +3 -3
  483. package/packages/workspace-executor/src/paths.ts +11 -11
  484. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  485. package/packages/workspace-executor/src/processes/module.ts +3 -3
  486. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  487. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  488. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  489. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  490. package/packages/workspace-executor/src/run-folders.ts +3 -3
  491. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  492. package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
  493. package/packages/workspace-executor/src/session-ident.ts +2 -2
  494. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  495. package/packages/workspace-executor/src/tools.ts +5 -5
  496. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  497. package/plugins/ragents.activity/web/activity.ts +2 -2
  498. package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
  499. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  500. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  501. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  502. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  503. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  504. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  505. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  506. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  507. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  508. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  509. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  510. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  511. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  512. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  513. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  514. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  515. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  516. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  517. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  518. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  519. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  520. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  521. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  522. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  523. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  524. package/plugins/ragents.ask/ask-payload.ts +1 -1
  525. package/plugins/ragents.ask/contract.ts +5 -5
  526. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  527. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  528. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  529. package/plugins/ragents.ask/server/contract.ts +5 -5
  530. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  531. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  532. package/plugins/ragents.ask/web/index.tsx +2 -2
  533. package/plugins/ragents.browser/executor/contract.ts +6 -6
  534. package/plugins/ragents.browser/executor/index.ts +1 -1
  535. package/plugins/ragents.browser/executor/module.ts +6 -6
  536. package/plugins/ragents.browser/executor/pages.ts +32 -32
  537. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  538. package/plugins/ragents.browser/provision.ts +7 -7
  539. package/plugins/ragents.browser/server/browser.ts +14 -14
  540. package/plugins/ragents.browser/server/contract.ts +1 -1
  541. package/plugins/ragents.browser/server/index.ts +1 -1
  542. package/plugins/ragents.browser/server/tools.ts +14 -14
  543. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  544. package/plugins/ragents.documents/contract.ts +2 -2
  545. package/plugins/ragents.documents/prompt.hbs +1 -1
  546. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  547. package/plugins/ragents.documents/server/files-route.ts +6 -6
  548. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  549. package/plugins/ragents.documents/server/store.ts +1 -1
  550. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  551. package/plugins/ragents.documents/web/index.tsx +11 -11
  552. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  553. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  554. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  555. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  556. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  557. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  558. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  559. package/plugins/ragents.model-relay/server/config.ts +6 -2
  560. package/plugins/ragents.model-relay/server/index.ts +2 -2
  561. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  562. package/plugins/ragents.orchestration/contract.ts +8 -8
  563. package/plugins/ragents.orchestration/server/index.ts +4 -4
  564. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  565. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  566. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  567. package/plugins/ragents.orchestration/web/ActorChat.tsx +2 -2
  568. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
  569. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  570. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  571. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  572. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  573. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  574. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  575. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  576. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  577. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  578. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  579. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  580. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  581. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  582. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  583. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  584. package/plugins/ragents.orchestration/web/format.ts +1 -1
  585. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  586. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  587. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  588. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
  589. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  590. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  591. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  592. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  593. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  594. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  595. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
  596. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  597. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  598. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  599. package/plugins/ragents.overseer/contract.ts +20 -20
  600. package/plugins/ragents.overseer/server/api.ts +6 -6
  601. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  602. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  603. package/plugins/ragents.overseer/server/index.ts +24 -24
  604. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  605. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  606. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  607. package/plugins/ragents.overseer/server/settings.ts +6 -6
  608. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  609. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  610. package/plugins/ragents.overseer/web/index.tsx +20 -20
  611. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  612. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  613. package/plugins/ragents.processes/contract.ts +5 -5
  614. package/plugins/ragents.processes/server/methods.ts +4 -4
  615. package/plugins/ragents.processes/server/observer.ts +8 -8
  616. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  617. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  618. package/plugins/ragents.processes/web/processes.ts +10 -10
  619. package/plugins/ragents.product/server/config.ts +1 -1
  620. package/plugins/ragents.product/server/index.ts +4 -4
  621. package/plugins/ragents.product/server/runtime.ts +9 -10
  622. package/plugins/ragents.product/web/index.tsx +1 -1
  623. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  624. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  625. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  626. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  627. package/plugins/ragents.reference/examples.ts +27 -27
  628. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  629. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  630. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  631. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  632. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  636. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  637. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  638. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  639. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  640. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  641. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  642. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  643. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  644. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  645. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  648. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  649. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  650. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  651. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  652. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  653. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  654. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  655. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  656. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  657. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  661. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  662. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  663. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  664. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  665. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  666. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  667. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  668. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  669. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  670. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  671. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  672. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  693. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  694. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  695. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  696. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  697. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  698. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  699. package/plugins/ragents.watch/server/condition.ts +4 -4
  700. package/plugins/ragents.watch/server/functions.ts +27 -27
  701. package/plugins/ragents.watch/server/observation.ts +2 -2
  702. package/plugins/ragents.watch/server/service.ts +14 -14
  703. package/plugins/ragents.workspace/client/transport.ts +1 -1
  704. package/plugins/ragents.workspace/client/workspace-client.ts +54 -54
  705. package/plugins/ragents.workspace/contract.ts +46 -46
  706. package/plugins/ragents.workspace/server/binding.ts +20 -20
  707. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  708. package/plugins/ragents.workspace/server/clients.ts +42 -42
  709. package/plugins/ragents.workspace/server/config.ts +7 -7
  710. package/plugins/ragents.workspace/server/index.ts +3 -3
  711. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  712. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  713. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  714. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  715. package/plugins/ragents.workspace/web/index.tsx +1 -1
  716. package/ragents.config.core.ts +1 -1
  717. package/ragents.config.developer.ts +3 -3
  718. package/ragents.config.showcase.ts +2 -2
  719. package/scripts/agent/agent-cli.ts +96 -96
  720. package/scripts/agent/journal.ts +5 -5
  721. package/scripts/agent/turn-control.ts +4 -4
  722. package/scripts/package/build-package.ts +29 -29
  723. package/scripts/package/host-links.mjs +3 -3
  724. package/scripts/package/publish-package.ts +29 -29
  725. package/scripts/package/ragents.mjs +19 -19
  726. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  727. package/scripts/plugin/plugin-cli.ts +14 -14
  728. package/scripts/provision/run-provision.ts +14 -15
  729. package/scripts/remote/connect.ts +46 -46
  730. package/scripts/remote/start.ts +18 -18
  731. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  732. package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
  733. package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
  734. package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
  735. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  736. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  737. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  738. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  739. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  740. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  741. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  742. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  743. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -79,7 +79,7 @@ class ContributionRegistry<T extends { id: string }> {
79
79
  for (const value of values) {
80
80
  const existing = this.#entries.find((entry) => entry.value.id === value.id);
81
81
  if (existing) {
82
- throw new Error(`${this.#kind} ${value.id} wird bereits von ${existing.owner} bereitgestellt`);
82
+ throw new Error(`${this.#kind} ${value.id} is already provided by ${existing.owner}`);
83
83
  }
84
84
  this.#entries.push({ owner, value });
85
85
  }
@@ -90,12 +90,12 @@ class ContributionRegistry<T extends { id: string }> {
90
90
  }
91
91
  }
92
92
 
93
- /** Die Laufbedingung je Plugin; ein Plugin ohne gilt in jedem Run. */
93
+ /** The run condition per plugin; a plugin without one applies in every run. */
94
94
  export class RunConditionRegistry {
95
95
  readonly #conditions = new Map<string, RunCondition>();
96
96
 
97
97
  register(owner: string, condition: RunCondition): void {
98
- if (this.#conditions.has(owner)) throw new Error(`Plugin ${owner} hat bereits eine Laufbedingung`);
98
+ if (this.#conditions.has(owner)) throw new Error(`Plugin ${owner} already has a run condition`);
99
99
  this.#conditions.set(owner, condition);
100
100
  }
101
101
 
@@ -109,7 +109,7 @@ export class RunConditionRegistry {
109
109
  }
110
110
 
111
111
  export class MethodContributionRegistry {
112
- readonly #methods = new ContributionRegistry<{ id: string; contribution: MethodContribution }>("Methode");
112
+ readonly #methods = new ContributionRegistry<{ id: string; contribution: MethodContribution }>("Method");
113
113
 
114
114
  register(owner: string, contributions: readonly MethodContribution[]): void {
115
115
  this.#methods.register(owner, contributions.map((contribution) => ({ id: contribution.contract.id, contribution })));
@@ -129,7 +129,7 @@ export class MethodContributionRegistry {
129
129
  }
130
130
 
131
131
  export class ChannelContributionRegistry {
132
- readonly #channels = new ContributionRegistry<{ id: string; contribution: ChannelContribution }>("Kanal");
132
+ readonly #channels = new ContributionRegistry<{ id: string; contribution: ChannelContribution }>("Channel");
133
133
 
134
134
  register(owner: string, contributions: readonly ChannelContribution[]): void {
135
135
  this.#channels.register(owner, contributions.map((contribution) => ({ id: contribution.contract.id, contribution })));
@@ -167,7 +167,7 @@ export class HttpContributionRegistry {
167
167
  const missing = rights.find((right) => !access.can(right));
168
168
  if (missing) {
169
169
  response.writeHead(403, { "Content-Type": "application/json", "Cache-Control": "no-store" });
170
- response.end(JSON.stringify({ error: `Das Recht ${missing} fehlt.`, code: "access-denied", right: missing }));
170
+ response.end(JSON.stringify({ error: `The right ${missing} is missing.`, code: "access-denied", right: missing }));
171
171
  return true;
172
172
  }
173
173
  await route.value.handle({ request, response, url, access });
@@ -180,13 +180,13 @@ export class OperationContributionRegistry {
180
180
 
181
181
  register(owner: string, operations: readonly OperationContribution[]): void {
182
182
  for (const operation of operations) {
183
- if (!OPERATION_ID.test(operation.id)) throw new Error(`Ungültige Operation-Id: ${operation.id}`);
184
- if (!operation.label.trim()) throw new Error(`Operation ${operation.id} hat kein Label`);
185
- if (!operation.description.trim()) throw new Error(`Operation ${operation.id} hat keine Beschreibung`);
183
+ if (!OPERATION_ID.test(operation.id)) throw new Error(`Invalid operation id: ${operation.id}`);
184
+ if (!operation.label.trim()) throw new Error(`Operation ${operation.id} has no label`);
185
+ if (!operation.description.trim()) throw new Error(`Operation ${operation.id} has no description`);
186
186
  if (operation.operator !== "direct" && operation.operator !== "confirm" && operation.operator !== "unavailable") {
187
- throw new Error(`Operation ${operation.id} hat eine ungültige Operator-Policy`);
187
+ throw new Error(`Operation ${operation.id} has an invalid operator policy`);
188
188
  }
189
- if (typeof operation.execute !== "function") throw new Error(`Operation ${operation.id} hat keine Ausführung`);
189
+ if (typeof operation.execute !== "function") throw new Error(`Operation ${operation.id} has no execute function`);
190
190
  }
191
191
  this.#operations.register(owner, operations);
192
192
  }
@@ -207,16 +207,16 @@ export class OperationContributionRegistry {
207
207
 
208
208
  async invoke(id: string, context: OperationContext, input: unknown): Promise<JsonValue> {
209
209
  const operation = this.#operations.entries().find(({ value }) => value.id === id)?.value;
210
- if (!operation) throw new Error(`Operation ${id} ist nicht registriert`);
210
+ if (!operation) throw new Error(`Operation ${id} is not registered`);
211
211
  assertJsonValue(input, `Operation ${id} input`);
212
212
 
213
213
  if (!Value.Check(operation.schema, input)) {
214
- throw new Error(`Ungültige Eingabe für Operation ${id}: ${schemaComplaints(operation.schema, input)}`);
214
+ throw new Error(`Invalid input for operation ${id}: ${schemaComplaints(operation.schema, input)}`);
215
215
  }
216
216
 
217
217
  if (context.principal.kind === "operator") {
218
218
  if (operation.operator === "unavailable") {
219
- throw new Error(`Operation ${id} ist für den Bediener nicht verfügbar`);
219
+ throw new Error(`Operation ${id} is not available to the operator`);
220
220
  }
221
221
  if (operation.operator === "confirm") {
222
222
  const confirmation = "operatorConfirmation" in context ? context.operatorConfirmation : undefined;
@@ -224,7 +224,7 @@ export class OperationContributionRegistry {
224
224
  || confirmation.operationId !== id
225
225
  || confirmation.invocationId !== context.invocationId
226
226
  || confirmation.inputHash !== canonicalHash(input)) {
227
- throw new Error(`Operation ${id} erfordert eine an diesen Aufruf gebundene Bestätigung`);
227
+ throw new Error(`Operation ${id} requires a confirmation bound to this call`);
228
228
  }
229
229
  }
230
230
  }
@@ -232,7 +232,7 @@ export class OperationContributionRegistry {
232
232
  context.signal.throwIfAborted();
233
233
  const result = await operation.execute(context, input);
234
234
  if (!Value.Check(operation.resultSchema, result)) {
235
- throw new Error(`Ungültiges Ergebnis von Operation ${id}: ${schemaComplaints(operation.resultSchema, result, "result")}`);
235
+ throw new Error(`Invalid result of operation ${id}: ${schemaComplaints(operation.resultSchema, result, "result")}`);
236
236
  }
237
237
  assertJsonValue(result, `Operation ${id} output`);
238
238
  return result;
@@ -240,7 +240,7 @@ export class OperationContributionRegistry {
240
240
  }
241
241
 
242
242
  export class AgentContributionRegistry {
243
- readonly #contributions = new ContributionRegistry<AgentContribution>("Agent-Beitrag");
243
+ readonly #contributions = new ContributionRegistry<AgentContribution>("Agent contribution");
244
244
  readonly #conditions: RunConditionRegistry;
245
245
 
246
246
  constructor(conditions = new RunConditionRegistry()) {
@@ -250,7 +250,7 @@ export class AgentContributionRegistry {
250
250
  register(owner: string, contributions: readonly AgentContribution[]): void {
251
251
  for (const contribution of contributions) {
252
252
  if (!contribution.beforeModelCall && !contribution.afterToolCall) {
253
- throw new Error(`Agent-Beitrag ${contribution.id} hat keinen Hook`);
253
+ throw new Error(`Agent contribution ${contribution.id} has no hook`);
254
254
  }
255
255
  }
256
256
  this.#contributions.register(owner, contributions);
@@ -285,7 +285,7 @@ export class ToolContributionRegistry {
285
285
  for (const contributor of contributors) {
286
286
  const existing = this.#contributors.find((entry) => entry.value.name === contributor.name);
287
287
  if (existing) {
288
- throw new Error(`Werkzeugbeitrag ${contributor.name} wird bereits von ${existing.owner} bereitgestellt`);
288
+ throw new Error(`Tool contribution ${contributor.name} is already provided by ${existing.owner}`);
289
289
  }
290
290
  this.#contributors.push({ owner, value: contributor });
291
291
  }
@@ -330,7 +330,7 @@ export class ToolContributionRegistry {
330
330
  }
331
331
 
332
332
  export class PromptContributionRegistry {
333
- readonly #prompts = new ContributionRegistry<PromptContribution>("Prompt-Beitrag");
333
+ readonly #prompts = new ContributionRegistry<PromptContribution>("Prompt contribution");
334
334
  readonly #conditions: RunConditionRegistry;
335
335
 
336
336
  constructor(conditions = new RunConditionRegistry()) {
@@ -371,7 +371,7 @@ export class PromptContributionRegistry {
371
371
  })));
372
372
  }
373
373
 
374
- /** Die Beiträge, die für diesen Run anders lauten als im Schnappschuss; ein leerer Text fehlt dort, alles andere bleibt der gerenderte Text. */
374
+ /** The contributions that read differently for this run than in the snapshot; an empty text is missing there, everything else stays the rendered text. */
375
375
  runOverrides(runId: string): ReadonlyMap<string, string> {
376
376
  return new Map([...this.#prompts.entries()].flatMap(({ owner, value }) => {
377
377
  if (!this.#conditions.applies(owner, runId)) return [[value.id, ""] as const];
@@ -386,7 +386,7 @@ export class PromptContributionRegistry {
386
386
  }
387
387
 
388
388
  export class SkillContributionRegistry {
389
- readonly #skills = new ContributionRegistry<SkillContribution>("Skill-Beitrag");
389
+ readonly #skills = new ContributionRegistry<SkillContribution>("Skill contribution");
390
390
  readonly #conditions: RunConditionRegistry;
391
391
 
392
392
  constructor(conditions = new RunConditionRegistry()) {
@@ -397,10 +397,10 @@ export class SkillContributionRegistry {
397
397
  for (const skill of skills) {
398
398
  const audiences = skill.audiences ?? [];
399
399
  if (new Set(audiences).size !== audiences.length) {
400
- throw new Error(`Skill-Beitrag ${skill.id} enthält eine Zielgruppe mehrfach`);
400
+ throw new Error(`Skill contribution ${skill.id} contains an audience more than once`);
401
401
  }
402
402
  if (audiences.some((audience) => audience !== "coordinator" && audience !== "agent")) {
403
- throw new Error(`Skill-Beitrag ${skill.id} enthält eine ungültige Zielgruppe`);
403
+ throw new Error(`Skill contribution ${skill.id} contains an invalid audience`);
404
404
  }
405
405
  }
406
406
  this.#skills.register(owner, skills);
@@ -410,19 +410,19 @@ export class SkillContributionRegistry {
410
410
  return this.resolve(undefined);
411
411
  }
412
412
 
413
- /** Ein Skillname bestimmt seinen Skill im ganzen Profil, auch über Zielgruppen hinweg; zwei Ordner gleichen Namens scheitern beim Start. */
413
+ /** A skill name determines its skill across the whole profile, across audiences too; two folders with the same name fail at startup. */
414
414
  async assertUniqueNames(): Promise<void> {
415
415
  const paths = await this.global();
416
416
  for (const name of new Set(paths.map(skillNameOf))) {
417
417
  const named = paths.filter((entry) => skillNameOf(entry) === name);
418
- if (named.length > 1) throw new Error(`Der Skillname ${name} ist im Profil mehrfach vergeben: ${named.join(", ")}`);
418
+ if (named.length > 1) throw new Error(`The skill name ${name} is used more than once in the profile: ${named.join(", ")}`);
419
419
  }
420
420
  }
421
421
 
422
422
  async resolve(context: AgentContributionContext | undefined): Promise<readonly string[]> {
423
423
  const paths = (await this.describe(context)).flatMap((entry) => entry.paths);
424
424
  const unique = new Set(paths);
425
- if (unique.size !== paths.length) throw new Error("Ein Agent-Skill-Pfad ist mehrfach registriert");
425
+ if (unique.size !== paths.length) throw new Error("An agent skill path is registered more than once");
426
426
  return [...unique];
427
427
  }
428
428
 
@@ -445,52 +445,52 @@ const SCRIPT_HANDLE = /^[a-z0-9][a-z0-9-]*$/;
445
445
 
446
446
  const requireText = (entry: { id: unknown }, value: unknown, field: string): void => {
447
447
  if (typeof value !== "string" || !value.trim()) {
448
- throw new Error(`Vorlage ${String(entry.id)} hat kein gültiges ${field}`);
448
+ throw new Error(`Template ${String(entry.id)} has no valid ${field}`);
449
449
  }
450
450
  };
451
451
 
452
452
  const assertKnownFields = (entry: { id: unknown }, value: object, fields: readonly string[], label: string): void => {
453
453
  const unknown = Object.keys(value).filter((field) => !fields.includes(field));
454
454
  if (unknown.length > 0) {
455
- throw new Error(`${label} ${String(entry.id)} enthält unbekannte Felder: ${unknown.join(", ")}`);
455
+ throw new Error(`${label} ${String(entry.id)} contains unknown fields: ${unknown.join(", ")}`);
456
456
  }
457
457
  };
458
458
 
459
459
  const validateProgramFiles = (entry: StartEntryContribution, files: unknown): void => {
460
460
  if (!Array.isArray(files) || files.length === 0)
461
- throw new Error(`Run-Script ${entry.id}: files braucht Paketdateien`);
461
+ throw new Error(`Run script ${entry.id}: files needs package files`);
462
462
  const names = new Set<string>();
463
463
  for (const file of files) {
464
464
  if (typeof file !== "object" || file === null || typeof file.path !== "string" || typeof file.content !== "string")
465
- throw new Error(`Run-Script ${entry.id}: jede Datei braucht path und content`);
466
- assertKnownFields(entry, file, ["path", "content"], "Paketdatei");
465
+ throw new Error(`Run script ${entry.id}: every file needs path and content`);
466
+ assertKnownFields(entry, file, ["path", "content"], "Package file");
467
467
  if (!file.path || file.path.includes("\\") || file.path.includes("\0") || path.posix.isAbsolute(file.path)
468
468
  || file.path.split("/").some((part: string) => !part || part === "." || part === ".."))
469
- throw new Error(`Run-Script ${entry.id}: ungültiger Paketpfad ${file.path}`);
470
- if (names.has(file.path)) throw new Error(`Run-Script ${entry.id}: Datei ${file.path} ist doppelt`);
469
+ throw new Error(`Run script ${entry.id}: invalid package path ${file.path}`);
470
+ if (names.has(file.path)) throw new Error(`Run script ${entry.id}: file ${file.path} is duplicated`);
471
471
  names.add(file.path);
472
472
  }
473
- if (!names.has("package.json")) throw new Error(`Run-Script ${entry.id}: package.json fehlt`);
473
+ if (!names.has("package.json")) throw new Error(`Run script ${entry.id}: package.json is missing`);
474
474
  };
475
475
 
476
476
  const validateScriptPackage = (entry: StartEntryContribution, script: unknown): void => {
477
477
  if (typeof script !== "object" || script === null)
478
- throw new Error(`Vorlage ${entry.id} hat kein Run-Script-Paket`);
479
- assertKnownFields(entry, script, ["handle", "coordinator", "files", "programs"], "Run-Script");
478
+ throw new Error(`Template ${entry.id} has no run script package`);
479
+ assertKnownFields(entry, script, ["handle", "coordinator", "files", "programs"], "Run script");
480
480
  const value = script as Record<string, unknown>;
481
481
  if (typeof value.handle !== "string" || !SCRIPT_HANDLE.test(value.handle))
482
- throw new Error(`Run-Script ${entry.id}: handle muss ein Handle wie gespraechsrunde sein (Kleinbuchstaben, Ziffern, Bindestrich)`);
482
+ throw new Error(`Run script ${entry.id}: handle must be a handle like roundtable (lowercase letters, digits, hyphen)`);
483
483
  if (typeof value.coordinator !== "boolean")
484
- throw new Error(`Run-Script ${entry.id}: coordinator muss true oder false sein`);
484
+ throw new Error(`Run script ${entry.id}: coordinator must be true or false`);
485
485
  validateProgramFiles(entry, value.files);
486
- if (!Array.isArray(value.programs)) throw new Error(`Run-Script ${entry.id}: programs muss eine Liste sein`);
486
+ if (!Array.isArray(value.programs)) throw new Error(`Run script ${entry.id}: programs must be a list`);
487
487
  const names = new Set<string>();
488
488
  for (const program of value.programs) {
489
489
  if (typeof program !== "object" || program === null || typeof program.name !== "string" || !SCRIPT_HANDLE.test(program.name))
490
- throw new Error(`Run-Script ${entry.id}: ungültiger Programmname`);
491
- assertKnownFields(entry, program, ["name", "files"], "Actor-Programm");
490
+ throw new Error(`Run script ${entry.id}: invalid program name`);
491
+ assertKnownFields(entry, program, ["name", "files"], "Actor program");
492
492
  if (program.name === value.handle || names.has(program.name))
493
- throw new Error(`Run-Script ${entry.id}: Programm ${program.name} ist doppelt`);
493
+ throw new Error(`Run script ${entry.id}: program ${program.name} is duplicated`);
494
494
  names.add(program.name);
495
495
  validateProgramFiles(entry, program.files);
496
496
  }
@@ -500,11 +500,11 @@ const validateFixedStartOptions = (entry: StartEntryContribution): void => {
500
500
  const fixed: unknown = entry.fixedStartOptions;
501
501
  if (fixed === undefined) return;
502
502
  if (typeof fixed !== "object" || fixed === null || Array.isArray(fixed) || Object.keys(fixed).length === 0) {
503
- throw new Error(`Vorlage ${entry.id}: fixedStartOptions muss mindestens eine Startoption auf einen Wert festlegen`);
503
+ throw new Error(`Template ${entry.id}: fixedStartOptions must fix at least one start option to a value`);
504
504
  }
505
505
  for (const [optionId, value] of Object.entries(fixed)) {
506
- if (!START_OPTION_ID.test(optionId)) throw new Error(`Vorlage ${entry.id} legt die ungültige Startoption-Id ${optionId} fest`);
507
- assertJsonValue(value, `Vorlage ${entry.id}: fixedStartOptions.${optionId}`);
506
+ if (!START_OPTION_ID.test(optionId)) throw new Error(`Template ${entry.id} fixes the invalid start option id ${optionId}`);
507
+ assertJsonValue(value, `Template ${entry.id}: fixedStartOptions.${optionId}`);
508
508
  }
509
509
  };
510
510
 
@@ -512,44 +512,44 @@ const validateStartEntry = (entry: StartEntryContribution): void => {
512
512
  const base = ["id", "title", "description", "order", "guide", "tags", "fixedStartOptions", "action"];
513
513
  for (const field of ["id", "title", "description"] as const) requireText(entry, entry[field], field);
514
514
  if (entry.order !== undefined && (typeof entry.order !== "number" || !Number.isFinite(entry.order))) {
515
- throw new Error(`Vorlage ${entry.id} hat keine gültige Ordnungszahl`);
515
+ throw new Error(`Template ${entry.id} has no valid order number`);
516
516
  }
517
517
  if (entry.guide !== undefined && (typeof entry.guide !== "string" || !GUIDE_ID.test(entry.guide))) {
518
- throw new Error(`Vorlage ${entry.id} nennt keine gültige Leitfaden-Kennung: ${String(entry.guide)}`);
518
+ throw new Error(`Template ${entry.id} names no valid guide id: ${String(entry.guide)}`);
519
519
  }
520
520
  if (entry.tags !== undefined && (!Array.isArray(entry.tags)
521
521
  || entry.tags.some((tag) => typeof tag !== "string" || !tag.trim() || tag !== tag.trim())
522
522
  || new Set(entry.tags).size !== entry.tags.length)) {
523
- throw new Error(`Vorlage ${entry.id}: tags müssen eindeutige, nicht leere Schlagworte sein`);
523
+ throw new Error(`Template ${entry.id}: tags must be unique, non-empty keywords`);
524
524
  }
525
525
  validateFixedStartOptions(entry);
526
526
  switch (entry.action) {
527
527
  case "skill":
528
- assertKnownFields(entry, entry, [...base, "skill", "prompt", "category"], "Vorlage");
528
+ assertKnownFields(entry, entry, [...base, "skill", "prompt", "category"], "Template");
529
529
  requireText(entry, entry.category, "category");
530
- if (entry.category !== entry.category.trim()) throw new Error(`Vorlage ${entry.id}: category muss ein einzelner nicht leerer Text sein`);
530
+ if (entry.category !== entry.category.trim()) throw new Error(`Template ${entry.id}: category must be a single non-empty text`);
531
531
  requireText(entry, entry.prompt, "prompt");
532
532
  requireText(entry, entry.skill, "skill");
533
533
  if (!SKILL_NAME.test(entry.skill)) {
534
- throw new Error(`Vorlage ${entry.id} nennt keinen gültigen Skill-Namen: ${entry.skill}`);
534
+ throw new Error(`Template ${entry.id} names no valid skill name: ${entry.skill}`);
535
535
  }
536
536
  return;
537
537
  case "script":
538
- assertKnownFields(entry, entry, [...base, "script", "category"], "Vorlage");
538
+ assertKnownFields(entry, entry, [...base, "script", "category"], "Template");
539
539
  if (entry.category !== undefined && (typeof entry.category !== "string" || !entry.category.trim() || entry.category !== entry.category.trim())) {
540
- throw new Error(`Vorlage ${entry.id}: category muss ein einzelner nicht leerer Text sein`);
540
+ throw new Error(`Template ${entry.id}: category must be a single non-empty text`);
541
541
  }
542
542
  validateScriptPackage(entry, entry.script);
543
543
  return;
544
544
  default:
545
545
  throw new Error(
546
- `Vorlage ${String((entry as { id: unknown }).id)} hat die unbekannte Aktion ${String((entry as { action: unknown }).action)}; `
547
- + "gültig sind skill und script",
546
+ `Template ${String((entry as { id: unknown }).id)} has the unknown action ${String((entry as { action: unknown }).action)}; `
547
+ + "valid are skill and script",
548
548
  );
549
549
  }
550
550
  };
551
551
 
552
- /** Der Name eines Skills ist der Name seines Ordners. */
552
+ /** The name of a skill is the name of its folder. */
553
553
  const skillNameOf = (directory: string): string => directory.split(/[\\/]/).filter(Boolean).at(-1) ?? "";
554
554
 
555
555
  const byOrderThenId = (left: { order?: number; id: string }, right: { order?: number; id: string }): number =>
@@ -557,7 +557,7 @@ const byOrderThenId = (left: { order?: number; id: string }, right: { order?: nu
557
557
 
558
558
  /** Skills with a start prompt and executable run scripts share one registry. */
559
559
  export class StartEntryContributionRegistry {
560
- readonly #entries = new ContributionRegistry<StartEntryContribution>("Vorlage");
560
+ readonly #entries = new ContributionRegistry<StartEntryContribution>("Template");
561
561
 
562
562
  register(owner: string, entries: readonly StartEntryContribution[]): void {
563
563
  for (const entry of entries) validateStartEntry(entry);
@@ -568,19 +568,19 @@ export class StartEntryContributionRegistry {
568
568
  const names = new Set(skills.flatMap((skill) => skill.paths.map(skillNameOf)));
569
569
  for (const { owner, value } of this.#entries.entries()) {
570
570
  if (value.action === "skill" && !names.has(value.skill)) {
571
- throw new Error(`Vorlage ${value.id} von ${owner} verweist auf den unbekannten Skill ${value.skill}`);
571
+ throw new Error(`Template ${value.id} of ${owner} refers to the unknown skill ${value.skill}`);
572
572
  }
573
573
  }
574
574
  }
575
575
 
576
- /** Jede festgelegte Startoption muss registriert sein und ihr Wert ihrem Schema genügen; ob er angenommen wird, entscheidet erst der Start. */
576
+ /** Every fixed start option must be registered and its value must satisfy its schema; whether it is accepted is decided only at start. */
577
577
  assertFixedStartOptionsKnown(startOptions: StartOptionContributionRegistry): void {
578
578
  for (const { owner, value } of this.#entries.entries()) {
579
579
  for (const [optionId, fixed] of Object.entries(value.fixedStartOptions ?? {})) {
580
580
  if (!startOptions.entry(optionId)) {
581
- throw new Error(`Vorlage ${value.id} von ${owner} legt die nicht registrierte Startoption ${optionId} fest`);
581
+ throw new Error(`Template ${value.id} of ${owner} fixes the unregistered start option ${optionId}`);
582
582
  }
583
- startOptions.assertValue(optionId, fixed, `festgelegter Wert der Vorlage ${value.id}`);
583
+ startOptions.assertValue(optionId, fixed, `fixed value of template ${value.id}`);
584
584
  }
585
585
  }
586
586
  }
@@ -609,7 +609,7 @@ export class StartEntryContributionRegistry {
609
609
  .sort(byOrderThenId);
610
610
  }
611
611
 
612
- /** Eine Vorlage, wie das Web sie sieht; undefined für eine unbekannte Kennung. */
612
+ /** A template as the web sees it; undefined for an unknown id. */
613
613
  entry(entryId: string): PublicStartEntry | undefined {
614
614
  return this.describe().find((candidate) => candidate.id === entryId);
615
615
  }
@@ -625,7 +625,7 @@ export class StartEntryContributionRegistry {
625
625
  }
626
626
 
627
627
  export class ProfileContributionRegistry {
628
- readonly #profiles = new ContributionRegistry<ProfileContribution>("Profil-Beitrag");
628
+ readonly #profiles = new ContributionRegistry<ProfileContribution>("Profile contribution");
629
629
 
630
630
  register(owner: string, contributions: readonly ProfileContribution[]): void {
631
631
  this.#profiles.register(owner, contributions);
@@ -634,27 +634,27 @@ export class ProfileContributionRegistry {
634
634
  models(): readonly CatalogModel[] {
635
635
  const models = this.#profiles.entries().flatMap(({ value }) => value.models());
636
636
  const keys = models.map((model) => `${model.driver}:${model.provider}:${model.model}`);
637
- if (new Set(keys).size !== keys.length) throw new Error("Ein Modell ist mehrfach registriert");
637
+ if (new Set(keys).size !== keys.length) throw new Error("A model is registered more than once");
638
638
  return models;
639
639
  }
640
640
 
641
641
  profiles(): readonly AgentProfile[] {
642
642
  const profiles = this.#profiles.entries().flatMap(({ value }) => value.profiles());
643
643
  const names = profiles.map((profile) => profile.name);
644
- if (new Set(names).size !== names.length) throw new Error("Ein Agentenprofil ist mehrfach registriert");
644
+ if (new Set(names).size !== names.length) throw new Error("An agent profile is registered more than once");
645
645
  return profiles;
646
646
  }
647
647
 
648
648
  async providers(): Promise<readonly ModelProviderRegistration[]> {
649
649
  const registrations = (await Promise.all(this.#profiles.entries().map(({ value }) => value.providers?.() ?? []))).flat();
650
650
  const ids = registrations.map((registration) => registration.id);
651
- if (new Set(ids).size !== ids.length) throw new Error("Ein Modellanbieter ist mehrfach registriert");
651
+ if (new Set(ids).size !== ids.length) throw new Error("A model provider is registered more than once");
652
652
  return registrations;
653
653
  }
654
654
  }
655
655
 
656
656
  export class ScriptContributionRegistry {
657
- readonly #script = new ContributionRegistry<ScriptContribution>("Logik-Beitrag");
657
+ readonly #script = new ContributionRegistry<ScriptContribution>("Logic contribution");
658
658
 
659
659
  register(owner: string, contributions: readonly ScriptContribution[]): void {
660
660
  this.#script.register(owner, contributions);
@@ -663,7 +663,7 @@ export class ScriptContributionRegistry {
663
663
  create(context: ScriptFactoryContext): ScriptRuntime | undefined {
664
664
  const entries = this.#script.entries();
665
665
  if (entries.length > 1) {
666
- throw new Error(`Die Engine verträgt höchstens einen Logik-Beitrag, registriert sind ${entries.length}`);
666
+ throw new Error(`The engine supports at most one logic contribution, ${entries.length} are registered`);
667
667
  }
668
668
  return entries[0]?.value.create(context);
669
669
  }
@@ -690,14 +690,14 @@ export interface PluginStopOperation {
690
690
  }
691
691
 
692
692
  export class LifecycleContributionRegistry {
693
- readonly #lifecycle = new ContributionRegistry<SessionLifecycleContribution>("Lifecycle-Beitrag");
693
+ readonly #lifecycle = new ContributionRegistry<SessionLifecycleContribution>("Lifecycle contribution");
694
694
  readonly #stopTimeoutMs: number;
695
695
  readonly #stopAttempts = new Map<string, SessionStopAttempt>();
696
696
 
697
697
  constructor(options: { stopTimeoutMs?: number } = {}) {
698
698
  const stopTimeoutMs = options.stopTimeoutMs ?? DEFAULT_PLUGIN_STOP_TIMEOUT_MS;
699
699
  if (!Number.isSafeInteger(stopTimeoutMs) || stopTimeoutMs < 1) {
700
- throw new Error("Die Plugin-Stopp-Zeitgrenze muss eine positive ganze Zahl sein");
700
+ throw new Error("The plugin stop timeout must be a positive integer");
701
701
  }
702
702
  this.#stopTimeoutMs = stopTimeoutMs;
703
703
  }
@@ -729,15 +729,15 @@ export class LifecycleContributionRegistry {
729
729
  #beginStopPhase(runId: string, phase: "stopSession" | "afterStopSession"): PluginStopOperation {
730
730
  const contributions = [...this.#lifecycle.entries()].reverse()
731
731
  .flatMap(({ value }) => value[phase] ? [this.#beginStopContribution(value, runId, phase)] : []);
732
- const bounded = this.#settleParallel("Plugin-Stopp", contributions.map(({ bounded: promise }) => promise));
733
- const settled = this.#settleParallel("Plugin-Stopp-Nachlauf", contributions.map(({ settled: promise }) => promise));
732
+ const bounded = this.#settleParallel("Plugin stop", contributions.map(({ bounded: promise }) => promise));
733
+ const settled = this.#settleParallel("Plugin stop follow-up", contributions.map(({ settled: promise }) => promise));
734
734
 
735
735
  return {
736
736
  bounded,
737
737
  settled,
738
738
  release: () => {
739
739
  if (contributions.some((contribution) => !contribution.isSettled())) {
740
- throw new Error(`Plugin-Stopp für ${runId} kann vor dem Ende aller Beiträge nicht freigegeben werden`);
740
+ throw new Error(`Plugin stop for ${runId} cannot be released before all contributions have ended`);
741
741
  }
742
742
  contributions.forEach((contribution) => contribution.release());
743
743
  },
@@ -758,14 +758,14 @@ export class LifecycleContributionRegistry {
758
758
  .filter(([key]) => key.startsWith(`${runId}\0`))
759
759
  .map(([, attempt]) => attempt.settled);
760
760
  await Promise.allSettled(pendingStops);
761
- await this.#settle("Plugin-Löschung", [...this.#lifecycle.entries()].reverse()
761
+ await this.#settle("Plugin deletion", [...this.#lifecycle.entries()].reverse()
762
762
  .map(({ value }) => () => value.deleteSession?.({ runId })));
763
763
  this.#releaseStopAttempts(runId);
764
764
  }
765
765
 
766
766
  shutdown(): Promise<void> {
767
767
  const pendingStops = [...new Set([...this.#stopAttempts.values()].map((attempt) => attempt.settled))];
768
- return this.#settle("Plugin-Shutdown", [
768
+ return this.#settle("Plugin shutdown", [
769
769
  ...[...this.#lifecycle.entries()].reverse().map(({ value }) => () => value.shutdown?.()),
770
770
  ...pendingStops.map((settled) => () => settled),
771
771
  ]);
@@ -776,7 +776,7 @@ export class LifecycleContributionRegistry {
776
776
  const failures = results
777
777
  .filter((result): result is PromiseRejectedResult => result.status === "rejected")
778
778
  .map((result) => result.reason);
779
- if (failures.length > 0) throw new AggregateError(failures, `${name} ist in ${failures.length} Plugin(s) fehlgeschlagen`);
779
+ if (failures.length > 0) throw new AggregateError(failures, `${name} failed in ${failures.length} plugin(s)`);
780
780
  }
781
781
 
782
782
  #beginStopContribution(
@@ -785,7 +785,7 @@ export class LifecycleContributionRegistry {
785
785
  phase: "stopSession" | "afterStopSession",
786
786
  ): ContributionStopOperation {
787
787
  const stopSession = contribution[phase];
788
- if (!stopSession) throw new Error(`Lifecycle-Beitrag ${contribution.id} hat keinen Stopp-Hook`);
788
+ if (!stopSession) throw new Error(`Lifecycle contribution ${contribution.id} has no stop hook`);
789
789
  const key = `${runId}\0${phase}\0${contribution.id}`;
790
790
  const existing = this.#stopAttempts.get(key);
791
791
  if (existing) {
@@ -812,7 +812,7 @@ export class LifecycleContributionRegistry {
812
812
  const deadline = new Promise<never>((_, reject) => {
813
813
  timeout = setTimeout(() => {
814
814
  const error = new Error(
815
- `Plugin-Stopp ${contribution.id} (${phase}) hat die Zeitgrenze von ${this.#stopTimeoutMs} ms überschritten`,
815
+ `Plugin stop ${contribution.id} (${phase}) exceeded the timeout of ${this.#stopTimeoutMs} ms`,
816
816
  );
817
817
  attempt.timeoutError = error;
818
818
  controller.abort(error);
@@ -862,27 +862,27 @@ export class LifecycleContributionRegistry {
862
862
  failures.push(error);
863
863
  }
864
864
  }
865
- if (failures.length > 0) throw new AggregateError(failures, `${name} ist in ${failures.length} Plugin(s) fehlgeschlagen`);
865
+ if (failures.length > 0) throw new AggregateError(failures, `${name} failed in ${failures.length} plugin(s)`);
866
866
  }
867
867
  }
868
868
 
869
- const WORKSPACE_NOT_ACCESSIBLE = "Der Arbeitsbereich dieses Runs ist für diesen Zugang nicht erreichbar.";
869
+ const WORKSPACE_NOT_ACCESSIBLE = "The workspace of this run is not reachable for this access.";
870
870
 
871
871
  export class SessionMetadataContributionRegistry {
872
- readonly #metadata = new ContributionRegistry<SessionMetadataContribution>("Run-Metadaten-Beitrag");
872
+ readonly #metadata = new ContributionRegistry<SessionMetadataContribution>("Run metadata contribution");
873
873
 
874
874
  register(owner: string, contributions: readonly SessionMetadataContribution[]): void {
875
875
  this.#metadata.register(owner, contributions);
876
876
  }
877
877
 
878
- /** Alle Beiträge zugleich; wer nicht innerhalb von `timeoutMs` antwortet oder scheitert, verliert nur seinen Wert und nennt den Grund. */
878
+ /** All contributions at once; whoever does not answer within `timeoutMs` or fails loses only its value and states the reason. */
879
879
  async describe(runId: string, workspaceAccessible: boolean, timeoutMs: number): Promise<SessionMetadata> {
880
880
  type Outcome = { readonly id: string; readonly value: unknown } | { readonly id: string; readonly reason: string };
881
881
  const outcomes = await Promise.all(this.#metadata.entries().map(async ({ value }): Promise<Outcome> => {
882
882
  if (value.requiresWorkspace === true && !workspaceAccessible) return { id: value.id, reason: WORKSPACE_NOT_ACCESSIBLE };
883
883
  let timer: ReturnType<typeof setTimeout> | undefined;
884
884
  const silent = new Promise<never>((_resolve, reject) => {
885
- timer = setTimeout(() => reject(new Error(`keine Antwort nach ${timeoutMs} ms`)), timeoutMs);
885
+ timer = setTimeout(() => reject(new Error(`no answer after ${timeoutMs} ms`)), timeoutMs);
886
886
  });
887
887
  try {
888
888
  return { id: value.id, value: await Promise.race([Promise.resolve().then(() => value.describe({ runId })), silent]) };
@@ -900,25 +900,25 @@ export class SessionMetadataContributionRegistry {
900
900
  }
901
901
 
902
902
  export class StartOptionContributionRegistry {
903
- readonly #options = new ContributionRegistry<StartOptionContribution>("Startoption");
903
+ readonly #options = new ContributionRegistry<StartOptionContribution>("Start option");
904
904
 
905
905
  register(owner: string, contributions: readonly StartOptionContribution[]): void {
906
906
  for (const contribution of contributions) {
907
- if (!START_OPTION_ID.test(contribution.id)) throw new Error(`Ungültige Startoption-Id: ${contribution.id}`);
907
+ if (!START_OPTION_ID.test(contribution.id)) throw new Error(`Invalid start option id: ${contribution.id}`);
908
908
  if (typeof contribution.schema !== "object" || contribution.schema === null) {
909
- throw new Error(`Startoption ${contribution.id} hat kein Schema`);
909
+ throw new Error(`Start option ${contribution.id} has no schema`);
910
910
  }
911
911
  for (const name of ["selectable", "defaultValue", "accept", "describe"] as const) {
912
- if (typeof contribution[name] !== "function") throw new Error(`Startoption ${contribution.id} hat kein ${name}`);
912
+ if (typeof contribution[name] !== "function") throw new Error(`Start option ${contribution.id} has no ${name}`);
913
913
  }
914
914
  if (contribution.ownerOnly !== undefined && typeof contribution.ownerOnly !== "function") {
915
- throw new Error(`Startoption ${contribution.id} hat ein ungültiges ownerOnly`);
915
+ throw new Error(`Start option ${contribution.id} has an invalid ownerOnly`);
916
916
  }
917
917
  if (contribution.rights !== undefined && (!Array.isArray(contribution.rights) || !contribution.rights.every(isAccessRight))) {
918
- throw new Error(`Startoption ${contribution.id} hat ungültige rights`);
918
+ throw new Error(`Start option ${contribution.id} has invalid rights`);
919
919
  }
920
920
  if (contribution.changeable !== undefined && typeof contribution.changeable !== "boolean") {
921
- throw new Error(`Startoption ${contribution.id} hat ein ungültiges changeable`);
921
+ throw new Error(`Start option ${contribution.id} has an invalid changeable`);
922
922
  }
923
923
  }
924
924
  this.#options.register(owner, contributions);
@@ -937,52 +937,52 @@ export class StartOptionContributionRegistry {
937
937
  return this.#options.entries().map(({ owner, value }) => ({ id: value.id, owner }));
938
938
  }
939
939
 
940
- /** Das erste Recht der Option, das dem Zugang fehlt; eine unbekannte Option verlangt keins. */
940
+ /** The first right of the option that the access lacks; an unknown option requires none. */
941
941
  missingRight(id: string, access: Pick<AccessContext, "can">): string | undefined {
942
942
  return this.entry(id)?.option.rights?.find((right) => !access.can(right));
943
943
  }
944
944
 
945
945
  assertRights(id: string, access: Pick<AccessContext, "can">): void {
946
946
  const missing = this.missingRight(id, access);
947
- if (missing) throw new DomainError("access-denied", `Das Recht ${missing} fehlt für die Startoption ${id}.`, 403);
947
+ if (missing) throw new DomainError("access-denied", `The right ${missing} is missing for the start option ${id}.`, 403);
948
948
  }
949
949
 
950
950
  defaultValue(id: string, context: StartOptionContext): JsonValue {
951
951
  const { option } = this.#require(id);
952
952
  const value = option.defaultValue(context);
953
- this.#check(option, value, "Standardwert");
953
+ this.#check(option, value, "default value");
954
954
  return value;
955
955
  }
956
956
 
957
957
  accept(id: string, value: unknown, context: StartOptionContext): JsonValue {
958
958
  const { option } = this.#require(id);
959
- assertJsonValue(value, `Startoption ${id} value`);
960
- this.#check(option, value, "Wert");
959
+ assertJsonValue(value, `Start option ${id} value`);
960
+ this.#check(option, value, "value");
961
961
  const accepted = option.accept(value, context);
962
- this.#check(option, accepted, "Ergebnis von accept");
962
+ this.#check(option, accepted, "result of accept");
963
963
  return accepted;
964
964
  }
965
965
 
966
- /** Prüft einen Wert gegen das Schema der Option, ohne ihn anzunehmen. */
966
+ /** Checks a value against the schema of the option without accepting it. */
967
967
  assertValue(id: string, value: unknown, label: string): void {
968
968
  this.#check(this.#require(id).option, value, label);
969
969
  }
970
970
 
971
971
  #require(id: string): RegisteredStartOption {
972
972
  const entry = this.entry(id);
973
- if (!entry) throw new Error(`Startoption ${id} ist nicht registriert`);
973
+ if (!entry) throw new Error(`Start option ${id} is not registered`);
974
974
  return entry;
975
975
  }
976
976
 
977
977
  #check(option: StartOptionContribution, value: unknown, label: string): void {
978
978
  if (Value.Check(option.schema, value)) return;
979
- throw new Error(`Ungültiger ${label} für Startoption ${option.id}: ${schemaComplaints(option.schema, value, "value")}`);
979
+ throw new Error(`Invalid ${label} for start option ${option.id}: ${schemaComplaints(option.schema, value, "value")}`);
980
980
  }
981
981
  }
982
982
 
983
- /** Was ein Zugang ohne runs.inspect von Plugin-Zuständen sieht: eine Startoption nur mit ihren Rechten, sonst die Projektion ihres Plugins, ohne sie alles. */
983
+ /** What an access without runs.inspect sees of plugin states: a start option only with its rights, otherwise the projection of its plugin, without one everything. */
984
984
  export class AccessProjectionRegistry {
985
- readonly #projections = new ContributionRegistry<AccessProjectionContribution>("Zugriffsprojektion");
985
+ readonly #projections = new ContributionRegistry<AccessProjectionContribution>("Access projection");
986
986
  readonly #startOptions: StartOptionContributionRegistry;
987
987
 
988
988
  constructor(startOptions = new StartOptionContributionRegistry()) {
@@ -992,7 +992,7 @@ export class AccessProjectionRegistry {
992
992
  register(owner: string, contributions: readonly AccessProjectionContribution[]): void {
993
993
  for (const contribution of contributions) {
994
994
  for (const name of ["state", "chatEvent"] as const) {
995
- if (typeof contribution[name] !== "function") throw new Error(`Zugriffsprojektion ${contribution.id} hat kein ${name}`);
995
+ if (typeof contribution[name] !== "function") throw new Error(`Access projection ${contribution.id} has no ${name}`);
996
996
  }
997
997
  }
998
998
  this.#projections.register(owner, contributions);
@@ -1032,10 +1032,10 @@ export class ConfigContributionRegistry {
1032
1032
  continue;
1033
1033
  }
1034
1034
  if (existing.value.source !== descriptor.source || Boolean(existing.value.secret) !== Boolean(descriptor.secret)) {
1035
- throw new Error(`Konfiguration ${descriptor.key} ist widersprüchlich deklariert`);
1035
+ throw new Error(`Configuration ${descriptor.key} is declared inconsistently`);
1036
1036
  }
1037
1037
  if (existing.owners.includes(owner)) {
1038
- throw new Error(`Konfiguration ${descriptor.key} ist in ${owner} mehrfach deklariert`);
1038
+ throw new Error(`Configuration ${descriptor.key} is declared more than once in ${owner}`);
1039
1039
  }
1040
1040
  existing.owners.push(owner);
1041
1041
  }
@@ -1066,7 +1066,7 @@ const joinSafe = (base: string, segments: readonly string[]): string => {
1066
1066
  for (const segment of segments) {
1067
1067
  if (!segment || segment === "." || segment === ".." || path.isAbsolute(segment)
1068
1068
  || segment.includes("/") || segment.includes("\\")) {
1069
- throw new Error(`Ungültiges Plugin-Speichersegment: ${segment}`);
1069
+ throw new Error(`Invalid plugin storage segment: ${segment}`);
1070
1070
  }
1071
1071
  }
1072
1072
  return path.join(base, ...segments);
@@ -1083,14 +1083,14 @@ export class StorageRegistry {
1083
1083
  }
1084
1084
 
1085
1085
  register(manifest: PluginManifest): PluginStorage {
1086
- if (this.#scopes.has(manifest.id)) throw new Error(`Speicher für ${manifest.id} ist bereits registriert`);
1086
+ if (this.#scopes.has(manifest.id)) throw new Error(`Storage for ${manifest.id} is already registered`);
1087
1087
  const pluginDirectory = path.join("plugins", manifest.id);
1088
1088
  const scope: PluginStorage = Object.freeze({
1089
1089
  sessionsRoot: path.join(this.#dataDirectory, "sessions"),
1090
1090
  modes: this.#modes,
1091
1091
  root: (...segments: string[]) => joinSafe(path.join(this.#dataDirectory, pluginDirectory), segments),
1092
1092
  session: (runId: string, ...segments: string[]) => {
1093
- if (!RUN_ID.test(runId)) throw new Error(`Ungültige Run-ID: ${runId}`);
1093
+ if (!RUN_ID.test(runId)) throw new Error(`Invalid run id: ${runId}`);
1094
1094
  return joinSafe(path.join(this.#dataDirectory, "sessions", runId, pluginDirectory), segments);
1095
1095
  },
1096
1096
  });
@@ -1100,7 +1100,7 @@ export class StorageRegistry {
1100
1100
 
1101
1101
  of(pluginId: string): PluginStorage {
1102
1102
  const scope = this.#scopes.get(pluginId);
1103
- if (!scope) throw new Error(`Speicher für ${pluginId} ist nicht registriert`);
1103
+ if (!scope) throw new Error(`Storage for ${pluginId} is not registered`);
1104
1104
  return scope;
1105
1105
  }
1106
1106
  }
@@ -1112,7 +1112,7 @@ class ClientConfigRegistry {
1112
1112
  const existing = this.#values.get(owner) ?? {};
1113
1113
  for (const key of Object.keys(values)) {
1114
1114
  if (Object.hasOwn(existing, key)) {
1115
- throw new Error(`Client-Konfiguration ${key} ist in ${owner} mehrfach gesetzt`);
1115
+ throw new Error(`Client configuration ${key} is set more than once in ${owner}`);
1116
1116
  }
1117
1117
  }
1118
1118
  this.#values.set(owner, { ...existing, ...values });
@@ -1128,13 +1128,13 @@ class ServiceRegistry {
1128
1128
 
1129
1129
  provide<T>(owner: string, token: ServiceToken<T>, service: T): void {
1130
1130
  const existing = this.#services.get(token.id);
1131
- if (existing) throw new Error(`Service ${token.id} wird bereits von ${existing.owner} bereitgestellt`);
1131
+ if (existing) throw new Error(`Service ${token.id} is already provided by ${existing.owner}`);
1132
1132
  this.#services.set(token.id, { owner, value: service });
1133
1133
  }
1134
1134
 
1135
1135
  require<T>(token: ServiceToken<T>): T {
1136
1136
  const entry = this.#services.get(token.id);
1137
- if (!entry) throw new Error(`Erforderlicher Plugin-Service ${token.id} ist nicht registriert`);
1137
+ if (!entry) throw new Error(`Required plugin service ${token.id} is not registered`);
1138
1138
  return entry.value as T;
1139
1139
  }
1140
1140
 
@@ -1190,11 +1190,11 @@ export class PluginHost {
1190
1190
  }
1191
1191
 
1192
1192
  register(plugin: RAgentsPlugin): this {
1193
- if (this.#sealed) throw new Error("Nach dem Start können keine Plugins mehr registriert werden");
1193
+ if (this.#sealed) throw new Error("No more plugins can be registered after startup");
1194
1194
  const { manifest } = plugin;
1195
- if (!PLUGIN_ID.test(manifest.id)) throw new Error(`Ungültige Plugin-Id: ${manifest.id}`);
1195
+ if (!PLUGIN_ID.test(manifest.id)) throw new Error(`Invalid plugin id: ${manifest.id}`);
1196
1196
  if (this.#manifests.some((entry) => entry.id === manifest.id)) {
1197
- throw new Error(`Plugin ${manifest.id} ist bereits registriert`);
1197
+ throw new Error(`Plugin ${manifest.id} is already registered`);
1198
1198
  }
1199
1199
  this.#manifests.push(manifest);
1200
1200
  const storage = this.storage.register(manifest);
@@ -1235,8 +1235,8 @@ export class PluginHost {
1235
1235
  for (const [index, manifest] of this.#manifests.entries()) {
1236
1236
  for (const dependency of manifest.requires ?? []) {
1237
1237
  const position = positions.get(dependency);
1238
- if (position === undefined) throw new Error(`Plugin ${manifest.id} benötigt das fehlende Plugin ${dependency}`);
1239
- if (position >= index) throw new Error(`Plugin ${dependency} muss vor ${manifest.id} registriert werden`);
1238
+ if (position === undefined) throw new Error(`Plugin ${manifest.id} requires the missing plugin ${dependency}`);
1239
+ if (position >= index) throw new Error(`Plugin ${dependency} must be registered before ${manifest.id}`);
1240
1240
  }
1241
1241
  }
1242
1242
  this.startEntries.assertFixedStartOptionsKnown(this.startOptions);
@@ -1244,8 +1244,8 @@ export class PluginHost {
1244
1244
  if (defaultStartEntry !== undefined) {
1245
1245
  const entries = this.startEntries.describe().map((entry) => entry.id);
1246
1246
  if (!entries.includes(defaultStartEntry)) {
1247
- throw new Error(`defaultStartEntry ${defaultStartEntry} ist keine registrierte Vorlage; `
1248
- + (entries.length > 0 ? `registriert sind ${entries.join(", ")}` : "kein Plugin dieses Profils registriert Vorlagen"));
1247
+ throw new Error(`defaultStartEntry ${defaultStartEntry} is not a registered template; `
1248
+ + (entries.length > 0 ? `registered are ${entries.join(", ")}` : "no plugin of this profile registers templates"));
1249
1249
  }
1250
1250
  }
1251
1251
  this.#sealed = true;