@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
@@ -14,7 +14,7 @@ var agentToolsFrom = (host) => async (runId, actorId, provisional) => {
14
14
  const view = runtime.view(runId);
15
15
  const actor = provisional ?? view.actors.find((candidate) => candidate.id === actorId);
16
16
  if (!actor || actor.kind === "human" || actor.lifecycle.kind === "stopped") {
17
- throw new Error(`${actorId} bezeichnet keinen aktiven Agenten in diesem Run.`);
17
+ throw new Error(`${actorId} does not denote an active agent in this run.`);
18
18
  }
19
19
  const registry = new ToolRegistry();
20
20
  host.tools.entries().forEach((contributor) => registry.register(contributor));
@@ -31,7 +31,7 @@ var agentToolsFrom = (host) => async (runId, actorId, provisional) => {
31
31
  const availableNames = new Set(tools.map((tool) => tool.name));
32
32
  const unknown = actor.toolNames.filter((name2) => !availableNames.has(name2));
33
33
  if (unknown.length > 0) {
34
- throw new Error(`Actor ${actorId} verlangt unbekannte Werkzeuge: ${unknown.join(", ")}.`);
34
+ throw new Error(`Actor ${actorId} requires unknown tools: ${unknown.join(", ")}.`);
35
35
  }
36
36
  const selected2 = new Set(actor.toolNames);
37
37
  return tools.filter((tool) => selected2.has(tool.name));
@@ -51,7 +51,7 @@ var guarded = (code, status, work) => {
51
51
  };
52
52
  var checkedInput = (input) => {
53
53
  if (Buffer.byteLength(JSON.stringify(input ?? null), "utf8") > MAX_INPUT_BYTES)
54
- throw new DomainError("input-too-large", `Die Aktionseingabe ist gr\xF6\xDFer als ${MAX_INPUT_BYTES} Byte.`, 413);
54
+ throw new DomainError("input-too-large", `The action input is larger than ${MAX_INPUT_BYTES} bytes.`, 413);
55
55
  return input;
56
56
  };
57
57
  var createActorProgramMethods = (options) => {
@@ -112,7 +112,7 @@ var escapeForwarder = `
112
112
  });`;
113
113
  var themeReceiver = `
114
114
  const applyHostTheme = (theme) => {
115
- if (theme !== "light" && theme !== "dark") throw new Error("Das Host-Theme muss light oder dark sein.");
115
+ if (theme !== "light" && theme !== "dark") throw new Error("The host theme must be light or dark.");
116
116
  document.documentElement.dataset.theme = theme;
117
117
  };`;
118
118
  var frameContentSecurityPolicy = (nonce) => `sandbox allow-scripts allow-forms allow-downloads; default-src 'none'; script-src 'nonce-${nonce}'; style-src 'nonce-${nonce}'; img-src 'self' data: blob:; font-src data:; connect-src 'none'; media-src 'self' data: blob:; object-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'self' https://*.vscode-cdn.net vscode-file: vscode-webview:`;
@@ -156,7 +156,7 @@ globalThis.__ragentsAppContext = (() => {
156
156
  if (!waiter || !terminal.has(message.invocation.status)) return;
157
157
  pending.delete(id);
158
158
  if (message.invocation.status === "succeeded") waiter.resolve(message.invocation.result);
159
- else waiter.reject(new Error(message.invocation.error || "Die App-Aktion wurde nicht abgeschlossen."));
159
+ else waiter.reject(new Error(message.invocation.error || "The app action was not completed."));
160
160
  };
161
161
  port.onmessage = ({ data }) => {
162
162
  if (data?.version !== 1) return;
@@ -218,7 +218,7 @@ globalThis.__ragentsAppContext = (() => {
218
218
  );
219
219
  }
220
220
  return Object.freeze({
221
- get actor() { if (!currentApp) throw new Error("Die Actor-Ansicht ist noch nicht bereit."); return Object.freeze({id:currentApp.actorId,handle:currentApp.actorHandle}); },
221
+ get actor() { if (!currentApp) throw new Error("The actor view is not ready yet."); return Object.freeze({id:currentApp.actorId,handle:currentApp.actorHandle}); },
222
222
  ready: ready.then(() => undefined),
223
223
  run: Object.freeze({ id: "current" }),
224
224
  principal: Object.freeze({ id: "operator", kind: "operator" }),
@@ -264,7 +264,7 @@ globalThis.__ragentsAppContext = (() => {
264
264
  call: async (actionId, input = {}) => {
265
265
  await ready;
266
266
  if (!(currentApp?.actions ?? []).some((action) => action.id === actionId)) {
267
- throw new Error("Die angeforderte App-Aktion ist nicht installiert.");
267
+ throw new Error("The requested app action is not installed.");
268
268
  }
269
269
  return send({
270
270
  type: "ragents.app.invoke",
@@ -280,7 +280,7 @@ globalThis.__ragentsAppContext = (() => {
280
280
  </script>`;
281
281
  var frameHtml = (frame, nonce) => {
282
282
  const head = /<head(?:\s[^>]*)?>/i;
283
- if (!head.test(frame.html)) throw new Error("Die installierte App besitzt keinen g\xFCltigen head.");
283
+ if (!head.test(frame.html)) throw new Error("The installed app has no valid head.");
284
284
  const client = `<script nonce="${nonce}" type="module">await globalThis.__ragentsAppContext.ready;${escapedScript(frame.clientJavaScript)}</script>`;
285
285
  return frame.html.replace(head, (value) => `${value}${typedBridgeSdk(nonce, `${browserRuntimeStyles}
286
286
  ${frame.styles}`)}${client}`);
@@ -292,7 +292,7 @@ var createMiniAppFrameRoutes = (options) => [
292
292
  matches: (request, url) => request.method === "GET" && framePattern.test(url.pathname),
293
293
  handle: async ({ request, response, url }) => {
294
294
  const match = url.pathname.match(framePattern);
295
- if (!match) throw new Error("Ung\xFCltige App-Route.");
295
+ if (!match) throw new Error("Invalid app route.");
296
296
  const [, runId, appId] = match;
297
297
  await guardedJsonRoute({
298
298
  request,
@@ -339,12 +339,12 @@ var jsonValue = (value, label) => {
339
339
  assertJsonValue(value, label);
340
340
  const text = JSON.stringify(value);
341
341
  if (Buffer.byteLength(text, "utf8") > MAX_JSON_BYTES)
342
- throw new Error(`${label} ist gr\xF6\xDFer als ${MAX_JSON_BYTES} Byte.`);
342
+ throw new Error(`${label} is larger than ${MAX_JSON_BYTES} bytes.`);
343
343
  const pending = [{ value, depth: 0 }];
344
344
  while (pending.length > 0) {
345
345
  const current = pending.pop();
346
346
  if (current.depth > MAX_JSON_DEPTH)
347
- throw new Error(`${label} ist tiefer als ${MAX_JSON_DEPTH} Ebenen verschachtelt.`);
347
+ throw new Error(`${label} is nested deeper than ${MAX_JSON_DEPTH} levels.`);
348
348
  if (Array.isArray(current.value)) {
349
349
  current.value.forEach((entry) => pending.push({ value: entry, depth: current.depth + 1 }));
350
350
  continue;
@@ -352,7 +352,7 @@ var jsonValue = (value, label) => {
352
352
  if (current.value && typeof current.value === "object") {
353
353
  Object.entries(current.value).forEach(([key, entry]) => {
354
354
  if (key.length > MAX_JSON_KEY_LENGTH)
355
- throw new Error(`${label} enth\xE4lt einen Schl\xFCssel mit mehr als ${MAX_JSON_KEY_LENGTH} Zeichen.`);
355
+ throw new Error(`${label} contains a key with more than ${MAX_JSON_KEY_LENGTH} characters.`);
356
356
  pending.push({ value: entry, depth: current.depth + 1 });
357
357
  });
358
358
  }
@@ -376,7 +376,7 @@ var selected = (available2, capabilityIds, idOf, unavailable) => {
376
376
  const byId = new Map(available2.map((value) => [idOf(value), value]));
377
377
  return capabilityIds.map((id) => {
378
378
  const value = byId.get(id);
379
- if (!value) throw unavailable(id, [...byId.keys()].sort().join(", ") || "keine");
379
+ if (!value) throw unavailable(id, [...byId.keys()].sort().join(", ") || "none");
380
380
  return value;
381
381
  });
382
382
  };
@@ -385,7 +385,7 @@ var operatorCapabilityBinding = (actorId, operations, capabilityIds) => {
385
385
  operations.filter((operation) => operation.operator !== "unavailable"),
386
386
  capabilityIds,
387
387
  (operation) => operation.id,
388
- (id, names) => new Error(`Capability ${id} ist f\xFCr den Bediener nicht verf\xFCgbar. Verf\xFCgbar sind: ${names}.`)
388
+ (id, names) => new Error(`Capability ${id} is not available to the operator. Available: ${names}.`)
389
389
  );
390
390
  const descriptors = resolved.map(descriptorOf);
391
391
  return {
@@ -404,7 +404,7 @@ var agentCapabilityBinding = (actor, tools, capabilityIds, blockedNames) => {
404
404
  capabilityIds,
405
405
  (tool) => tool.name,
406
406
  (id, names) => new Error(
407
- `Capability ${id} ist f\xFCr @${actor.handle} nicht verf\xFCgbar. Verf\xFCgbar sind: ${names}.`
407
+ `Capability ${id} is not available to @${actor.handle}. Available: ${names}.`
408
408
  )
409
409
  );
410
410
  const descriptors = resolved.map((tool) => descriptorOf({ ...tool, id: tool.name }));
@@ -428,11 +428,11 @@ import { runManagedProcess, sandboxedLaunch } from "@ragents/workspace-executor"
428
428
  // server/controls-template.ts
429
429
  var controlsTemplate = {
430
430
  id: "controls",
431
- title: "UI-Controls ausprobieren",
432
- description: "Lokale Demo mit Formular, Tabelle, Dateien, Aufgaben, Ablaufdiagramm, SVG-Verbindungen, Nachrichten, Dokument und Diff ohne Funktionsaufrufe.",
431
+ title: "Try UI controls",
432
+ description: "Local demo with form, table, files, tasks, flow diagram, SVG connections, messages, document, and diff without function calls.",
433
433
  ragents: {
434
- title: "UI-Controls ausprobieren",
435
- description: "Eine lokale Demo der vorhandenen Mini-App-Controls. Werte und Dateien bleiben in dieser Ansicht.",
434
+ title: "Try UI controls",
435
+ description: "A local demo of the available mini-app controls. Values and files stay in this view.",
436
436
  views: [{ id: "main", client: "src/client.tsx" }]
437
437
  },
438
438
  files: {
@@ -443,67 +443,67 @@ import * as UI from "@ragents/client/ui";
443
443
  type FormValues = Parameters<typeof UI.Form>[0]["values"];
444
444
  type Row = { id: string; name: string; count: number };
445
445
  const rows: Row[] = [
446
- { id: "analysis", name: "Analyse", count: 12 },
446
+ { id: "analysis", name: "Analysis", count: 12 },
447
447
  { id: "review", name: "Review", count: 4 },
448
- { id: "notes", name: "Dokumentation", count: 8 },
448
+ { id: "notes", name: "Documentation", count: 8 },
449
449
  ];
450
450
 
451
451
  const App = () => {
452
- const [values, setValues] = React.useState<FormValues>({ title: "Ergebnisse pr\xFCfen", notes: "", count: 3, mode: "review", approved: false });
452
+ const [values, setValues] = React.useState<FormValues>({ title: "Review results", notes: "", count: 3, mode: "review", approved: false });
453
453
  const [selected, setSelected] = React.useState<string[]>([]);
454
454
  const [files, setFiles] = React.useState<File[]>([]);
455
- const [result, setResult] = React.useState("Noch keine Formularwerte \xFCbernommen.");
455
+ const [result, setResult] = React.useState("No form values applied yet.");
456
456
  const [messages, setMessages] = React.useState<Parameters<typeof UI.MessageList>[0]["messages"]>([
457
- { key: "editorial", sender: "Redaktion", text: "Der Hinweis soll **kurz und verst\xE4ndlich** bleiben." },
458
- { key: "review", sender: "Textpr\xFCfung", text: "\xD6ffnungszeiten und Reparaturhinweis bleiben erhalten." },
457
+ { key: "editorial", sender: "Editorial", text: "The notice should stay **short and clear**." },
458
+ { key: "review", sender: "Text review", text: "Opening hours and the repair notice are kept." },
459
459
  ]);
460
460
  const [done, setDone] = React.useState(false);
461
- return <UI.AppLayout title="UI-Controls ausprobieren" description="Lokale Demo: keine Agenten, Uploads oder Serveraktionen. Werte und Dateiauswahl bleiben nur in dieser Ansicht und werden beim Neuladen zur\xFCckgesetzt.">
461
+ return <UI.AppLayout title="Try UI controls" description="Local demo: no agents, uploads, or server actions. Values and file selection stay only in this view and are reset on reload.">
462
462
  <UI.Stack gap="large">
463
- <UI.Form title="Formular" fields={[
464
- { id: "title", label: "Auftrag", type: "text", placeholder: "Was soll bearbeitet werden?", required: true },
465
- { id: "notes", label: "Hinweise", type: "textarea", rows: 3, placeholder: "Was soll bei der Bearbeitung ber\xFCcksichtigt werden?", hint: "Mehrzeiliger Text bleibt im Formular ausgerichtet." },
466
- { id: "count", label: "Anzahl", type: "number", placeholder: "Anzahl der Ergebnisse", hint: "1 bis 10 Ergebnisse.", required: true, min: 1, max: 10 },
467
- { id: "mode", label: "Modus", type: "select", options: [{ value: "review", label: "Pr\xFCfen" }, { value: "draft", label: "Entwerfen" }] },
468
- { id: "approved", label: "Auswahl best\xE4tigt", type: "checkbox", required: true },
469
- ]} values={values} onChange={setValues} onSubmit={async (next) => { setResult(JSON.stringify(next, null, 2)); }} submitLabel="Werte lokal anzeigen" />
463
+ <UI.Form title="Form" fields={[
464
+ { id: "title", label: "Task", type: "text", placeholder: "What should be worked on?", required: true },
465
+ { id: "notes", label: "Notes", type: "textarea", rows: 3, placeholder: "What should be taken into account while working on it?", hint: "Multi-line text stays aligned in the form." },
466
+ { id: "count", label: "Count", type: "number", placeholder: "Number of results", hint: "1 to 10 results.", required: true, min: 1, max: 10 },
467
+ { id: "mode", label: "Mode", type: "select", options: [{ value: "review", label: "Review" }, { value: "draft", label: "Draft" }] },
468
+ { id: "approved", label: "Selection confirmed", type: "checkbox", required: true },
469
+ ]} values={values} onChange={setValues} onSubmit={async (next) => { setResult(JSON.stringify(next, null, 2)); }} submitLabel="Show values locally" />
470
470
  <UI.Stack gap="small">
471
- <UI.DataTable<Row> title="Datentabelle" rows={rows} rowKey={(row) => row.id} filterable
471
+ <UI.DataTable<Row> title="Data table" rows={rows} rowKey={(row) => row.id} filterable
472
472
  selectedKeys={selected} onSelectionChange={setSelected}
473
- columns={[{ id: "name", label: "Arbeit", value: (row) => row.name, sortable: true }, { id: "count", label: "Ergebnisse", value: (row) => row.count, sortable: true }]}
474
- actions={[{ id: "select", label: "Ausw\xE4hlen", onClick: (row) => { setSelected([row.id]); } }]} />
475
- <p aria-live="polite">{selected.length} Zeilen ausgew\xE4hlt</p>
473
+ columns={[{ id: "name", label: "Work", value: (row) => row.name, sortable: true }, { id: "count", label: "Results", value: (row) => row.count, sortable: true }]}
474
+ actions={[{ id: "select", label: "Select", onClick: (row) => { setSelected([row.id]); } }]} />
475
+ <p aria-live="polite">{selected.length} rows selected</p>
476
476
  </UI.Stack>
477
- <UI.FilePicker label="Lokale Dateiauswahl" files={files} onChange={setFiles} maxFiles={5} maxBytes={10 * 1024 * 1024} />
477
+ <UI.FilePicker label="Local file selection" files={files} onChange={setFiles} maxFiles={5} maxBytes={10 * 1024 * 1024} />
478
478
  <UI.Stack gap="small">
479
- <UI.TaskProgress title="Beispielaufgaben" tasks={[
480
- { id: "read", label: "Unterlagen lesen", status: "done" },
481
- { id: "review", label: "Ergebnisse pr\xFCfen", status: done ? "done" : "pending", description: "Lokaler Beispielstatus, kein laufender Actor." },
479
+ <UI.TaskProgress title="Example tasks" tasks={[
480
+ { id: "read", label: "Read documents", status: "done" },
481
+ { id: "review", label: "Review results", status: done ? "done" : "pending", description: "Local example status, no running actor." },
482
482
  ]} />
483
- <UI.Stack direction="row"><UI.Button onClick={() => setDone((current) => !current)}>Beispielstatus umschalten</UI.Button></UI.Stack>
483
+ <UI.Stack direction="row"><UI.Button onClick={() => setDone((current) => !current)}>Toggle example status</UI.Button></UI.Stack>
484
484
  </UI.Stack>
485
485
  <UI.Stack gap="small">
486
- <h2>Ablaufdiagramm</h2>
487
- <p>Das Diagramm erh\xE4lt seinen Zustand aus denselben Daten wie die Aufgabenliste.</p>
488
- <UI.FlowDiagram label={done ? "Eingang, Pr\xFCfung fertig, Ergebnis bereit" : "Eingang, Pr\xFCfung l\xE4uft, Ergebnis ausstehend"}
486
+ <h2>Flow diagram</h2>
487
+ <p>The diagram gets its state from the same data as the task list.</p>
488
+ <UI.FlowDiagram label={done ? "Intake, review done, result ready" : "Intake, review running, result pending"}
489
489
  nodes={[
490
- { id: "input", label: "Eingang", detail: "Unterlagen liegen vor", status: "done", kind: "service" },
491
- { id: "check", label: "Pr\xFCfung", detail: done ? "Pr\xFCfung abgeschlossen" : "Unterlagen werden gepr\xFCft", status: done ? "done" : "active", kind: "agent" },
492
- { id: "result", label: "Ergebnis", detail: done ? "Ergebnis bereit" : "Wartet auf die Pr\xFCfung", status: done ? "done" : "pending", kind: "actor" },
490
+ { id: "input", label: "Intake", detail: "Documents are available", status: "done", kind: "service" },
491
+ { id: "check", label: "Review", detail: done ? "Review completed" : "Documents are being reviewed", status: done ? "done" : "active", kind: "agent" },
492
+ { id: "result", label: "Result", detail: done ? "Result ready" : "Waiting for the review", status: done ? "done" : "pending", kind: "actor" },
493
493
  ]}
494
494
  edges={[{ source: "input", target: "check" }, { source: "check", target: "result" }]} />
495
495
  </UI.Stack>
496
496
  <UI.Stack gap="small">
497
- <h2>SVG-Verbindungen</h2>
498
- <p>SvgEdge zeichnet die Kanten. Knoten, Beschriftungen und Positionen stehen im Code dieser Ansicht.</p>
499
- <svg viewBox="0 0 360 160" role="img" aria-label={done ? "Eingang fertig, Pr\xFCfung abgeschlossen, Ergebnis bereit" : "Eingang fertig, Pr\xFCfung l\xE4uft, Ergebnis offen"}
497
+ <h2>SVG connections</h2>
498
+ <p>SvgEdge draws the edges. Nodes, labels, and positions are in the code of this view.</p>
499
+ <svg viewBox="0 0 360 160" role="img" aria-label={done ? "Intake done, review completed, result ready" : "Intake done, review running, result open"}
500
500
  className="block h-auto w-full text-[13px]">
501
501
  <UI.SvgEdge d="M112 42 L144 42" tone={done ? "success" : "warning"} active={!done} />
502
502
  <UI.SvgEdge d="M252 42 C320 42 320 118 252 118" arrow={done ? "end" : "none"} tone={done ? "success" : "neutral"} lineStyle={done ? "solid" : "dashed"} />
503
503
  <UI.SvgEdge d="M144 118 C64 118 64 96 64 72" arrow="both" tone="accent" />
504
- {[{ x: 8, y: 12, label: "Eingang", status: "Fertig" },
505
- { x: 148, y: 12, label: "Pr\xFCfung", status: done ? "Fertig" : "L\xE4uft" },
506
- { x: 148, y: 88, label: "Ergebnis", status: done ? "Bereit" : "Offen" }].map((node) => <g key={node.label}>
504
+ {[{ x: 8, y: 12, label: "Intake", status: "Done" },
505
+ { x: 148, y: 12, label: "Review", status: done ? "Done" : "Running" },
506
+ { x: 148, y: 88, label: "Result", status: done ? "Ready" : "Open" }].map((node) => <g key={node.label}>
507
507
  <rect x={node.x} y={node.y} width="104" height="56" rx="8" className="fill-background stroke-border-strong" />
508
508
  <text x={node.x + 52} y={node.y + 23} textAnchor="middle" className="fill-foreground font-semibold">{node.label}</text>
509
509
  <text x={node.x + 52} y={node.y + 42} textAnchor="middle" className="fill-muted-foreground text-[11px]">{node.status}</text>
@@ -511,20 +511,20 @@ const App = () => {
511
511
  </svg>
512
512
  </UI.Stack>
513
513
  <UI.Stack gap="small">
514
- <UI.MessageList messages={messages} label="Lokale Redaktionsnotizen" />
514
+ <UI.MessageList messages={messages} label="Local editorial notes" />
515
515
  <UI.Stack direction="row"><UI.Button onClick={() => setMessages((current) => [...current, {
516
- key: "note-" + current.length, sender: current.length % 2 ? "Textpr\xFCfung" : "Redaktion",
517
- text: "Lokale Beispielnotiz " + (current.length - 1) + ": Diese Nachricht wurde gerade erg\xE4nzt.",
518
- }])}>Lokale Nachricht erg\xE4nzen</UI.Button></UI.Stack>
516
+ key: "note-" + current.length, sender: current.length % 2 ? "Text review" : "Editorial",
517
+ text: "Local example note " + (current.length - 1) + ": This message was just added.",
518
+ }])}>Add local message</UI.Button></UI.Stack>
519
519
  </UI.Stack>
520
- <UI.DocumentViewer title="Lokales Formularergebnis" format="text" content={result} />
521
- <UI.DiffViewer title="Beispiel\xE4nderung" patch={"--- a/result.txt\\n+++ b/result.txt\\n@@ -1 +1 @@\\n-Status: offen\\n+Status: gepr\xFCft"} />
520
+ <UI.DocumentViewer title="Local form result" format="text" content={result} />
521
+ <UI.DiffViewer title="Example change" patch={"--- a/result.txt\\n+++ b/result.txt\\n@@ -1 +1 @@\\n-Status: open\\n+Status: reviewed"} />
522
522
  </UI.Stack>
523
523
  </UI.AppLayout>;
524
524
  };
525
525
 
526
526
  const root = document.getElementById("root");
527
- if (!root) throw new Error("Das Wurzelelement #root fehlt.");
527
+ if (!root) throw new Error("The #root element is missing.");
528
528
  createRoot(root).render(<App />);
529
529
  `
530
530
  }
@@ -533,11 +533,11 @@ createRoot(root).render(<App />);
533
533
  // server/templates.ts
534
534
  var blank = {
535
535
  id: "blank",
536
- title: "Leere Mini-App",
537
- description: "Eine reine React-View am vorhandenen Actor ohne zus\xE4tzliche Serverfunktion.",
536
+ title: "Blank mini-app",
537
+ description: "A pure React view on the existing actor without an additional server function.",
538
538
  ragents: {
539
- title: "Meine View",
540
- description: "Eine kleine Bedienoberfl\xE4che des vorhandenen Actors.",
539
+ title: "My view",
540
+ description: "A small interface of the existing actor.",
541
541
  views: [{ id: "main", client: "src/client.tsx" }]
542
542
  },
543
543
  files: {
@@ -545,24 +545,24 @@ var blank = {
545
545
  import * as UI from "@ragents/client/ui";
546
546
 
547
547
  const App = () => (
548
- <UI.AppLayout title="Meine View">
549
- <UI.Stack><p>Bereit f\xFCr deine Inhalte.</p></UI.Stack>
548
+ <UI.AppLayout title="My view">
549
+ <UI.Stack><p>Ready for your content.</p></UI.Stack>
550
550
  </UI.AppLayout>
551
551
  );
552
552
 
553
553
  const root = document.getElementById("root");
554
- if (!root) throw new Error("Das Wurzelelement #root fehlt.");
554
+ if (!root) throw new Error("The #root element is missing.");
555
555
  createRoot(root).render(<App />);
556
556
  `
557
557
  }
558
558
  };
559
559
  var chat = {
560
560
  id: "chat",
561
- title: "Actor-Chat",
562
- description: "Wiederverwendbarer Chat mit Verlauf und optionaler Eingabe an den Actor dieser View.",
561
+ title: "Actor chat",
562
+ description: "Reusable chat with history and optional input to the actor of this view.",
563
563
  ragents: {
564
- title: "Actor-Chat",
565
- description: "Zeigt das Gespr\xE4ch mit einem Actor und sendet ihm Benutzereingaben.",
564
+ title: "Actor chat",
565
+ description: "Shows the conversation with an actor and sends it user input.",
566
566
  views: [{ id: "main", client: "src/client.tsx" }]
567
567
  },
568
568
  files: {
@@ -571,22 +571,22 @@ import * as UI from "@ragents/client/ui";
571
571
  import { context } from "@ragents/client";
572
572
 
573
573
  const App = () => (
574
- <UI.Chat actor={"@" + context.actor.handle} className="h-full" showInput placeholder="Nachricht an den Actor" />
574
+ <UI.Chat actor={"@" + context.actor.handle} className="h-full" showInput placeholder="Message to the actor" />
575
575
  );
576
576
 
577
577
  const root = document.getElementById("root");
578
- if (!root) throw new Error("Das Wurzelelement #root fehlt.");
578
+ if (!root) throw new Error("The #root element is missing.");
579
579
  createRoot(root).render(<App />);
580
580
  `
581
581
  }
582
582
  };
583
583
  var textAnalysis = {
584
584
  id: "text-analysis",
585
- title: "Textanalyse",
586
- description: "Ein TypeScript-Actor analysiert Texte mit eigener Funktion, Zustand und React-View.",
585
+ title: "Text analysis",
586
+ description: "A TypeScript actor analyzes texts with its own function, state, and React view.",
587
587
  ragents: {
588
- title: "Textanalyse",
589
- description: "Z\xE4hlt Zeichen, W\xF6rter und Zeilen und merkt sich die Zahl der Analysen.",
588
+ title: "Text analysis",
589
+ description: "Counts characters, words, and lines and remembers the number of analyses.",
590
590
  backend: "src/server.ts",
591
591
  views: [{ id: "main", client: "src/client.tsx" }]
592
592
  },
@@ -601,23 +601,23 @@ type FormValues = Parameters<typeof UI.Form>[0]["values"];
601
601
  const App = () => {
602
602
  const state = useAppState();
603
603
  const [values, setValues] = React.useState<FormValues>({ text: "" });
604
- const [result, setResult] = React.useState("Bereit");
604
+ const [result, setResult] = React.useState("Ready");
605
605
 
606
606
  const analyse = async (next: FormValues): Promise<void> => {
607
607
  const answer = await context.capabilities.call("analyse", { text: String(next.text ?? "") });
608
608
  setResult([
609
- \`Zeichen: \${answer.characters}\`,
610
- \`W\xF6rter: \${answer.words}\`,
611
- \`Zeilen: \${answer.lines}\`,
609
+ \`Characters: \${answer.characters}\`,
610
+ \`Words: \${answer.words}\`,
611
+ \`Lines: \${answer.lines}\`,
612
612
  ].join("\\n"));
613
613
  };
614
614
 
615
615
  return (
616
- <UI.AppLayout title="Textanalyse" description={<>Analysen: {state.analyses ?? 0}</>}>
616
+ <UI.AppLayout title="Text analysis" description={<>Analyses: {state.analyses ?? 0}</>}>
617
617
  <UI.Grid>
618
618
  <UI.Form fields={[
619
- { id: "text", label: "Text", type: "textarea", rows: 6, placeholder: "Text eingeben" },
620
- ]} values={values} onChange={setValues} onSubmit={analyse} submitLabel="Analysieren" />
619
+ { id: "text", label: "Text", type: "textarea", rows: 6, placeholder: "Enter text" },
620
+ ]} values={values} onChange={setValues} onSubmit={analyse} submitLabel="Analyze" />
621
621
  <UI.Stack><pre aria-live="polite" className="min-h-[90px] overflow-auto rounded-md border border-border bg-muted p-2.5 font-mono whitespace-pre-wrap">{result}</pre></UI.Stack>
622
622
  </UI.Grid>
623
623
  </UI.AppLayout>
@@ -625,7 +625,7 @@ const App = () => {
625
625
  };
626
626
 
627
627
  const root = document.getElementById("root");
628
- if (!root) throw new Error("Das Wurzelelement #root fehlt.");
628
+ if (!root) throw new Error("The #root element is missing.");
629
629
  createRoot(root).render(<App />);
630
630
  `,
631
631
  "src/contract.ts": `import { Type } from "typebox";
@@ -634,10 +634,10 @@ export const contract = {
634
634
  state: Type.Object({ analyses: Type.Optional(Type.Integer({"minimum": 0})) }, {"additionalProperties": false}),
635
635
  functions: {
636
636
  analyse: {
637
- label: "Text analysieren",
638
- description: "Z\xE4hlt W\xF6rter, Zeichen und Zeilen ohne externe Wirkung.",
637
+ label: "Analyze text",
638
+ description: "Counts words, characters, and lines without external effects.",
639
639
  tool: { name: "analyse_text" },
640
- input: Type.Object({ text: Type.String({"description": "Der zu analysierende Text."}) }, {"additionalProperties": false}),
640
+ input: Type.Object({ text: Type.String({"description": "The text to analyze."}) }, {"additionalProperties": false}),
641
641
  output: Type.Object({ text: Type.String(), characters: Type.Integer({"minimum": 0}), words: Type.Integer({"minimum": 0}), lines: Type.Integer({"minimum": 0}), analyses: Type.Integer({"minimum": 1}) }, {"additionalProperties": false}),
642
642
  capabilities: [],
643
643
  },
@@ -673,9 +673,9 @@ import { createTestContext } from "@ragents/server/testing";
673
673
  import { contract } from "../src/contract.ts";
674
674
  import program from "../src/server.ts";
675
675
 
676
- test("z\xE4hlt W\xF6rter, Zeilen und weitere Analysen", async () => {
676
+ test("counts words, lines, and further analyses", async () => {
677
677
  const context = createTestContext<Static<typeof contract.state>>({ state: {} });
678
- assert.deepEqual(await program.functions.analyse({"text": " Hallo Welt\\nNeue Zeile "}, context), {"text": "Hallo Welt\\nNeue Zeile", "characters": 21, "words": 4, "lines": 2, "analyses": 1});
678
+ assert.deepEqual(await program.functions.analyse({"text": " Hello world\\nNew line "}, context), {"text": "Hello world\\nNew line", "characters": 20, "words": 4, "lines": 2, "analyses": 1});
679
679
  assert.deepEqual(await program.functions.analyse({"text": ""}, context), {"text": "", "characters": 0, "words": 0, "lines": 0, "analyses": 2});
680
680
  assert.deepEqual(context.state.read(), {"analyses": 2});
681
681
  });
@@ -684,11 +684,11 @@ test("z\xE4hlt W\xF6rter, Zeilen und weitere Analysen", async () => {
684
684
  };
685
685
  var headlessCounter = {
686
686
  id: "headless-counter",
687
- title: "Z\xE4hler ohne Oberfl\xE4che",
688
- description: "Ein TypeScript-Actor z\xE4hlt Eingaben in seinem Zustand und bietet dieselbe Arbeit als Funktion an.",
687
+ title: "Counter without interface",
688
+ description: "A TypeScript actor counts inputs in its state and offers the same work as a function.",
689
689
  ragents: {
690
- title: "Z\xE4hler",
691
- description: "Sammelt eingehende Texte ohne Modellaufrufe oder Oberfl\xE4che.",
690
+ title: "Counter",
691
+ description: "Collects incoming texts without model calls or interface.",
692
692
  backend: "src/server.ts"
693
693
  },
694
694
  files: {
@@ -703,13 +703,13 @@ export const contract = {
703
703
  state,
704
704
  functions: {
705
705
  record: {
706
- label: "Text z\xE4hlen",
706
+ label: "Count text",
707
707
  input: Type.Object({ text: Type.String() }, { additionalProperties: false }),
708
708
  output: Type.Object({ count: Type.Integer(), texts: Type.Array(Type.String()) }, { additionalProperties: false }),
709
709
  tool: { name: "record_text" },
710
710
  },
711
711
  inspect: {
712
- label: "Z\xE4hler lesen",
712
+ label: "Read counter",
713
713
  input: Type.Object({}, { additionalProperties: false }),
714
714
  output: state,
715
715
  tool: { name: "read_counter" },
@@ -748,25 +748,25 @@ import { createTestContext } from "@ragents/server/testing";
748
748
  import { contract } from "../src/contract.ts";
749
749
  import program from "../src/server.ts";
750
750
 
751
- test("Eingaben und Funktionen teilen denselben Z\xE4hler", async () => {
751
+ test("inputs and functions share the same counter", async () => {
752
752
  const context = createTestContext<Static<typeof contract.state>>({ state: {} });
753
- for (const content of ["eins", "zwei", "drei"]) {
753
+ for (const content of ["one", "two", "three"]) {
754
754
  await program.onInput!({ id: content, content, artifactIds: [], sourceEventIds: [], subscriptionId: null, event: null }, context);
755
755
  }
756
- assert.deepEqual(await program.functions.inspect({}, context), { texts: ["eins", "zwei", "drei"], count: 3 });
757
- assert.deepEqual(await program.functions.record({ text: "vier" }, context), { texts: ["eins", "zwei", "drei", "vier"], count: 4 });
758
- assert.deepEqual(context.state.read(), { texts: ["eins", "zwei", "drei", "vier"], count: 4 });
756
+ assert.deepEqual(await program.functions.inspect({}, context), { texts: ["one", "two", "three"], count: 3 });
757
+ assert.deepEqual(await program.functions.record({ text: "four" }, context), { texts: ["one", "two", "three", "four"], count: 4 });
758
+ assert.deepEqual(context.state.read(), { texts: ["one", "two", "three", "four"], count: 4 });
759
759
  });
760
760
  `
761
761
  }
762
762
  };
763
763
  var sharedList = {
764
764
  id: "shared-list",
765
- title: "Gemeinsame Liste eines Actors",
766
- description: "Ein Actor besitzt eine Funktion und eine React-View f\xFCr denselben Listenstand.",
765
+ title: "Shared list of an actor",
766
+ description: "An actor owns a function and a React view for the same list state.",
767
767
  ragents: {
768
- title: "Gemeinsame Liste",
769
- description: "Sammelt Texte aus der App und aus einem Agenten-Werkzeug in einer gemeinsamen Liste.",
768
+ title: "Shared list",
769
+ description: "Collects texts from the app and from an agent tool in a shared list.",
770
770
  backend: "src/server.ts",
771
771
  views: [{ id: "main", client: "src/client.tsx" }]
772
772
  },
@@ -781,21 +781,21 @@ type FormValues = Parameters<typeof UI.Form>[0]["values"];
781
781
  const App = () => {
782
782
  const state = useAppState();
783
783
  const [values, setValues] = React.useState<FormValues>({ text: "" });
784
- const [status, setStatus] = React.useState("Bereit");
784
+ const [status, setStatus] = React.useState("Ready");
785
785
  const entries = state.entries ?? [];
786
786
 
787
787
  const append = async (next: FormValues): Promise<void> => {
788
788
  const answer = await context.capabilities.call("append", { text: String(next.text ?? "") });
789
789
  setValues({ text: "" });
790
- setStatus(\`Hinzugef\xFCgt: \${answer.text}\`);
790
+ setStatus(\`Added: \${answer.text}\`);
791
791
  };
792
792
 
793
793
  return (
794
- <UI.AppLayout title="Gemeinsame Liste" description={<>{entries.length} {entries.length === 1 ? "Eintrag" : "Eintr\xE4ge"}</>}>
794
+ <UI.AppLayout title="Shared list" description={<>{entries.length} {entries.length === 1 ? "item" : "items"}</>}>
795
795
  <UI.Grid>
796
796
  <UI.Form fields={[
797
- { id: "text", label: "Neuer Eintrag", type: "textarea", placeholder: "Text eingeben" },
798
- ]} values={values} onChange={setValues} onSubmit={append} submitLabel="Hinzuf\xFCgen" />
797
+ { id: "text", label: "New item", type: "textarea", placeholder: "Enter text" },
798
+ ]} values={values} onChange={setValues} onSubmit={append} submitLabel="Add" />
799
799
  <UI.Stack>
800
800
  <p className="text-muted-foreground" role="status">{status}</p>
801
801
  <ul className="border-t border-border">
@@ -808,7 +808,7 @@ const App = () => {
808
808
  };
809
809
 
810
810
  const root = document.getElementById("root");
811
- if (!root) throw new Error("Das Wurzelelement #root fehlt.");
811
+ if (!root) throw new Error("The #root element is missing.");
812
812
  createRoot(root).render(<App />);
813
813
  `,
814
814
  "src/contract.ts": `import { Type } from "typebox";
@@ -817,9 +817,9 @@ export const contract = {
817
817
  state: Type.Object({ entries: Type.Optional(Type.Array(Type.String())) }, {"additionalProperties": false}),
818
818
  functions: {
819
819
  append: {
820
- label: "Eintrag hinzuf\xFCgen",
821
- description: "H\xE4ngt den eingegebenen Text an die gemeinsame Liste an.",
822
- input: Type.Object({ text: Type.String({"description": "Der Text f\xFCr den neuen Listeneintrag."}) }, {"additionalProperties": false}),
820
+ label: "Add entry",
821
+ description: "Appends the entered text to the shared list.",
822
+ input: Type.Object({ text: Type.String({"description": "The text for the new list entry."}) }, {"additionalProperties": false}),
823
823
  output: Type.Object({ text: Type.String(), entries: Type.Array(Type.String()) }, {"additionalProperties": false}),
824
824
  capabilities: [],
825
825
  tool: { name: "append_to_list", card: true },
@@ -849,11 +849,11 @@ import { createTestContext } from "@ragents/server/testing";
849
849
  import { contract } from "../src/contract.ts";
850
850
  import program from "../src/server.ts";
851
851
 
852
- test("erg\xE4nzt Eintr\xE4ge ohne vorhandene Eintr\xE4ge zu verlieren", async () => {
852
+ test("adds entries without losing existing entries", async () => {
853
853
  const context = createTestContext<Static<typeof contract.state>>({ state: {} });
854
- assert.deepEqual(await program.functions.append({"text": " Erster Eintrag "}, context), {"text": "Erster Eintrag", "entries": ["Erster Eintrag"]});
855
- assert.deepEqual(await program.functions.append({"text": "Zweiter Eintrag"}, context), {"text": "Zweiter Eintrag", "entries": ["Erster Eintrag", "Zweiter Eintrag"]});
856
- assert.deepEqual(context.state.read(), {"entries": ["Erster Eintrag", "Zweiter Eintrag"]});
854
+ assert.deepEqual(await program.functions.append({"text": " First entry "}, context), {"text": "First entry", "entries": ["First entry"]});
855
+ assert.deepEqual(await program.functions.append({"text": "Second entry"}, context), {"text": "Second entry", "entries": ["First entry", "Second entry"]});
856
+ assert.deepEqual(context.state.read(), {"entries": ["First entry", "Second entry"]});
857
857
  });
858
858
  `
859
859
  }
@@ -866,7 +866,7 @@ var templateFiles = (template, name2) => ({
866
866
  });
867
867
  var templateById = (id) => {
868
868
  const template = runModuleTemplates.find((candidate) => candidate.id === id);
869
- if (!template) throw new Error(`Unbekannte Actor-Programm-Vorlage ${id}. G\xFCltig: ${runModuleTemplates.map((entry) => entry.id).join(", ")}.`);
869
+ if (!template) throw new Error(`Unknown actor program template ${id}. Valid: ${runModuleTemplates.map((entry) => entry.id).join(", ")}.`);
870
870
  return template;
871
871
  };
872
872
 
@@ -934,7 +934,7 @@ var createTestReport = async (directory) => {
934
934
  const describe = (failure) => {
935
935
  const fileOutput = failure.message === "test failed" && failure.file !== null ? stderrByFile.get(failure.file) ?? stderrByFile.get(relative(failure.file)) : void 0;
936
936
  const message = fileOutput ? errorLines(fileOutput).join("; ") : failure.generated ? failure.message.split("\n")[0].replace(/:$/, "") : failure.message.trim().slice(0, 500);
937
- const values = failure.expected === void 0 || failure.expected === failure.actual ? "" : ` - erwartet ${failure.expected}, tats\xE4chlich ${failure.actual}`;
937
+ const values = failure.expected === void 0 || failure.expected === failure.actual ? "" : ` - expected ${failure.expected}, actual ${failure.actual}`;
938
938
  return `- ${failure.name} (${placeOf(failure)}): ${relative(message)}${relative(values)}`;
939
939
  };
940
940
  return {
@@ -946,10 +946,10 @@ var createTestReport = async (directory) => {
946
946
  report: (name2, outcome) => {
947
947
  record2(pending);
948
948
  pending = "";
949
- const summary = outcome.timedOut ? `Tests f\xFCr ${name2} nach Zeit\xFCberschreitung abgebrochen: ${passed} bestanden, ${failed2} fehlgeschlagen.` : `Tests f\xFCr ${name2} fehlgeschlagen: ${passed} bestanden, ${failed2} fehlgeschlagen.`;
949
+ const summary = outcome.timedOut ? `Tests for ${name2} canceled after a timeout: ${passed} passed, ${failed2} failed.` : `Tests for ${name2} failed: ${passed} passed, ${failed2} failed.`;
950
950
  const details = failures.map(describe);
951
- const more = failed2 > failures.length ? [`... und ${failed2 - failures.length} weitere`] : [];
952
- const withoutResult = failed2 === 0 ? [`Der Testlauf endete${outcome.code === null ? "" : ` mit Code ${outcome.code}`} ohne fehlgeschlagenen Test:`, ...errorLines([...unparsed, ...outcome.stderr.split("\n")]).map(relative)] : [];
951
+ const more = failed2 > failures.length ? [`... and ${failed2 - failures.length} more`] : [];
952
+ const withoutResult = failed2 === 0 ? [`The test run ended${outcome.code === null ? "" : ` with code ${outcome.code}`} without a failed test:`, ...errorLines([...unparsed, ...outcome.stderr.split("\n")]).map(relative)] : [];
953
953
  return [summary, ...details, ...more, ...withoutResult].join("\n");
954
954
  }
955
955
  };
@@ -969,16 +969,16 @@ var checkFailure = (title, lines, fallback) => {
969
969
  const shown = all.slice(0, maxShownComplaints).map((line) => line.length > maxComplaintLength ? `${line.slice(0, maxComplaintLength - 3)}...` : line);
970
970
  const omitted = all.length - shown.length;
971
971
  return Object.assign(new Error([
972
- `${title}: ${all.length} Fehler.`,
972
+ `${title}: ${all.length} errors.`,
973
973
  ...shown,
974
- ...omitted > 0 ? [`... und ${omitted} weitere; alle mit actor_program_diagnostics.`] : []
974
+ ...omitted > 0 ? [`... and ${omitted} more; all with actor_program_diagnostics.`] : []
975
975
  ].join("\n")), { lines: all });
976
976
  };
977
977
  var actorDescriptionOf = (text) => {
978
978
  const line = (text ?? "").replace(/\s+/g, " ").trim();
979
979
  return line.length <= actorDescriptionMaxLength ? line || void 0 : `${line.slice(0, actorDescriptionMaxLength - 3).trimEnd()}...`;
980
980
  };
981
- var exposed = defineToolAvailability({ availability: "conditional", availabilityDetail: "Ver\xF6ffentlichte Funktion eines aktiven Actors im Run." }, () => true);
981
+ var exposed = defineToolAvailability({ availability: "conditional", availabilityDetail: "Published function of an active actor in the run." }, () => true);
982
982
  var objectSchema = { type: "object", additionalProperties: true };
983
983
  var checked = (schema, value, label) => {
984
984
  const result = jsonValue(value, label);
@@ -988,17 +988,17 @@ var checked = (schema, value, label) => {
988
988
  };
989
989
  var safePath = (name2) => {
990
990
  if (!name2 || path.isAbsolute(name2) || name2.includes("\\") || name2.includes("\0") || name2.split("/").some((part) => !part || part === "." || part === ".."))
991
- throw new Error(`Ung\xFCltiger Paketpfad ${name2}.`);
991
+ throw new Error(`Invalid package path ${name2}.`);
992
992
  return name2;
993
993
  };
994
994
  var inside = async (directory, relative) => {
995
995
  const root = await realpath2(directory);
996
996
  const file = await realpath2(path.join(root, safePath(relative)));
997
997
  if (!file.startsWith(`${root}${path.sep}`))
998
- throw new Error(`Paketpfad ${relative} liegt au\xDFerhalb des Pakets.`);
998
+ throw new Error(`Package path ${relative} is outside the package.`);
999
999
  const stat = await lstat(file);
1000
1000
  if (!stat.isFile() || stat.size > 2e6)
1001
- throw new Error(`Ung\xFCltige oder zu gro\xDFe Paketdatei ${relative}.`);
1001
+ throw new Error(`Invalid or too large package file ${relative}.`);
1002
1002
  return readFile(file, "utf8");
1003
1003
  };
1004
1004
  var occupied = (file) => {
@@ -1011,7 +1011,7 @@ var occupied = (file) => {
1011
1011
  throw error;
1012
1012
  }
1013
1013
  };
1014
- var packageExists = (name2) => new Error(`Das Paket ${name2} existiert bereits.`);
1014
+ var packageExists = (name2) => new Error(`The package ${name2} already exists.`);
1015
1015
  var commitPackage = (staged, directory, name2) => {
1016
1016
  if (occupied(directory))
1017
1017
  throw packageExists(name2);
@@ -1067,16 +1067,16 @@ var ActorProgramRuntime = class {
1067
1067
  actor(runId, actorId) {
1068
1068
  const actor = this.view(runId).actors.find((candidate) => candidate.id === actorId);
1069
1069
  if (!actor || actor.kind === "human" || actor.lifecycle.kind === "stopped")
1070
- throw new Error("Der Actor ist nicht aktiv.");
1070
+ throw new Error("The actor is not active.");
1071
1071
  if (this.#removing.has(`${runId}\0${actorId}`))
1072
- throw new Error("Das Actor-Paket wird entfernt.");
1072
+ throw new Error("The actor package is being removed.");
1073
1073
  return actor;
1074
1074
  }
1075
1075
  resolveActor(runId, callerId, reference) {
1076
1076
  const actors = this.view(runId).actors;
1077
1077
  const found = reference === "self" ? actors.find((candidate) => candidate.id === callerId) : actorByHandle(actors, reference);
1078
1078
  if (!found)
1079
- throw new Error(`Actor ${reference} ist unbekannt.`);
1079
+ throw new Error(`Actor ${reference} is unknown.`);
1080
1080
  return this.actor(runId, found.id);
1081
1081
  }
1082
1082
  data(runId, actorId) {
@@ -1086,7 +1086,7 @@ var ActorProgramRuntime = class {
1086
1086
  return { version: 1, revision, values: entry?.state ?? {} };
1087
1087
  }
1088
1088
  #writeProgram(context, runId, actorId, program) {
1089
- this.runtime().replacePluginState(this.operatorContext(runId), runId, { pluginId: ACTOR_PROGRAMS_STATE_ID, scope: { kind: "actor", actorId }, state: jsonValue({ version: 1, program }, "Actor-Programm") });
1089
+ this.runtime().replacePluginState(this.operatorContext(runId), runId, { pluginId: ACTOR_PROGRAMS_STATE_ID, scope: { kind: "actor", actorId }, state: jsonValue({ version: 1, program }, "Actor program") });
1090
1090
  }
1091
1091
  #script(runId) {
1092
1092
  return this.view(runId).pluginStates.find((entry) => entry.pluginId === ACTOR_SCRIPT_STATE_ID && entry.scope.kind === "run")?.state;
@@ -1095,7 +1095,7 @@ var ActorProgramRuntime = class {
1095
1095
  for (const source of files) {
1096
1096
  const file = path.join(directory, safePath(source.path));
1097
1097
  if (source.path.split("/").includes("node_modules"))
1098
- throw new Error("Paketquellen d\xFCrfen keine Abh\xE4ngigkeiten \xFCberschreiben.");
1098
+ throw new Error("Package sources must not overwrite dependencies.");
1099
1099
  await mkdir(path.dirname(file), { recursive: true });
1100
1100
  await writeFile(file, source.content, { flag: "wx" });
1101
1101
  }
@@ -1113,14 +1113,14 @@ var ActorProgramRuntime = class {
1113
1113
  try {
1114
1114
  await this.#activate(this.operatorContext(runId, "refresh"), runId, program.name, false, signal);
1115
1115
  } catch (error) {
1116
- throw new Error(`Der Capability-Vertrag von ${program.name} hat sich ge\xE4ndert und die Neuaktivierung scheiterte: ${errorText(error)}`);
1116
+ throw new Error(`The capability contract of ${program.name} has changed and the reactivation failed: ${errorText(error)}`);
1117
1117
  }
1118
1118
  }
1119
1119
  async #bound(runId, actorId, revision, signal, contractOf, descriptorsFor) {
1120
1120
  const current = () => {
1121
1121
  const program2 = this.programs(runId).find((entry) => entry.actorId === actorId);
1122
1122
  if (!program2)
1123
- throw new Error("Der Actor besitzt kein aktives Programm.");
1123
+ throw new Error("The actor has no active program.");
1124
1124
  return program2;
1125
1125
  };
1126
1126
  const bind = (program2) => {
@@ -1130,14 +1130,14 @@ var ActorProgramRuntime = class {
1130
1130
  };
1131
1131
  const program = current();
1132
1132
  if (revision !== void 0 && program.revision !== revision)
1133
- throw new Error("Das Actor-Paket wurde ersetzt.");
1133
+ throw new Error("The actor package was replaced.");
1134
1134
  const bound = bind(program);
1135
1135
  if (!bound.drifted)
1136
1136
  return bound;
1137
1137
  await this.#refresh(runId, program, signal);
1138
1138
  const refreshed = bind(current());
1139
1139
  if (refreshed.drifted)
1140
- throw new Error(`Der Capability-Vertrag von ${program.name} weicht auch nach der Neuaktivierung ab.`);
1140
+ throw new Error(`The capability contract of ${program.name} still differs after the reactivation.`);
1141
1141
  return refreshed;
1142
1142
  }
1143
1143
  async workspaceDirectory(runId) {
@@ -1153,7 +1153,7 @@ var ActorProgramRuntime = class {
1153
1153
  const directory = path.join(actors, name2);
1154
1154
  const key = `${runId}\0${name2}`;
1155
1155
  if (this.#creating.has(key))
1156
- throw new Error(`Das Paket ${name2} wird gerade angelegt.`);
1156
+ throw new Error(`The package ${name2} is being created.`);
1157
1157
  if (occupied(directory))
1158
1158
  throw packageExists(name2);
1159
1159
  this.#creating.add(key);
@@ -1204,16 +1204,16 @@ var ActorProgramRuntime = class {
1204
1204
  this.#assertName(name2);
1205
1205
  const directory = path.join(await this.workspaceDirectory(runId), name2);
1206
1206
  if ((await lstat(directory)).isSymbolicLink())
1207
- throw new Error("Actor-Pakete d\xFCrfen keine Symlinks sein.");
1207
+ throw new Error("Actor packages must not be symlinks.");
1208
1208
  await prepareAppProject(directory);
1209
1209
  const pkg = await readAppPackage(directory);
1210
1210
  const previous = this.programs(runId).find((program) => program.name === name2);
1211
1211
  const owner = reference ? this.resolveActor(runId, callerId, reference) : previous ? this.actor(runId, previous.actorId) : !pkg.backend ? this.actor(runId, callerId) : void 0;
1212
1212
  if (previous && owner?.id !== previous.actorId)
1213
- throw new Error("Ein aktiviertes Paket kann nicht zu einem anderen Actor wechseln.");
1213
+ throw new Error("An activated package cannot move to another actor.");
1214
1214
  const caller = this.view(runId).actors.find((candidate) => candidate.id === callerId);
1215
1215
  if (!caller)
1216
- throw new Error("Aufrufender Actor fehlt.");
1216
+ throw new Error("Calling actor is missing.");
1217
1217
  const provisional = owner ?? {
1218
1218
  id: "pending",
1219
1219
  handle: name2,
@@ -1237,23 +1237,23 @@ var ActorProgramRuntime = class {
1237
1237
  const backend = pkg.backend ? await compileAppBackend({ directory, backend: pkg.backend, runId, executor: this.runtime().nativeTypeScriptExecutor, signal }) : void 0;
1238
1238
  const contract = backend?.contract ?? { state: objectSchema, functions: {} };
1239
1239
  if (contract.input && owner?.kind === "agent")
1240
- throw new Error("Ein LLM-Actor verarbeitet Eingaben mit seinem Agententreiber; onInput ist nur f\xFCr TypeScript-Actors erlaubt.");
1240
+ throw new Error("An LLM actor processes inputs with its agent driver; onInput is only allowed for TypeScript actors.");
1241
1241
  if (contract.state.type !== "object")
1242
- throw new Error("Actor-Zustand muss ein Object-Schema sein.");
1242
+ throw new Error("Actor state must be an object schema.");
1243
1243
  const state = owner ? this.data(runId, owner.id).values : {};
1244
- checked(contract.state, state, "Actor-Zustand");
1244
+ checked(contract.state, state, "Actor state");
1245
1245
  const actorId = owner?.id ?? "pending";
1246
1246
  const actorHandle = owner?.handle ?? name2;
1247
1247
  const functions = Object.entries(contract.functions).map(([id, fn]) => {
1248
1248
  if (!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(id))
1249
- throw new Error(`Ung\xFCltiger Funktionsname ${id}.`);
1249
+ throw new Error(`Invalid function name ${id}.`);
1250
1250
  if (fn.tool && !/^[a-z][a-z0-9_]{0,63}$/.test(fn.tool.name))
1251
- throw new Error(`Ung\xFCltiger Werkzeugname ${fn.tool.name}.`);
1251
+ throw new Error(`Invalid tool name ${fn.tool.name}.`);
1252
1252
  const capabilities = fn.capabilities ?? [];
1253
1253
  const selected2 = capabilities.map((name3) => {
1254
1254
  const entry = available2.find((item) => item.id === name3);
1255
1255
  if (!entry)
1256
- throw new Error(`Capability ${name3} ist nicht verf\xFCgbar.`);
1256
+ throw new Error(`Capability ${name3} is not available.`);
1257
1257
  return entry;
1258
1258
  });
1259
1259
  return {
@@ -1272,27 +1272,27 @@ var ActorProgramRuntime = class {
1272
1272
  const inputDescriptors = inputCapabilities.map((id) => {
1273
1273
  const found = available2.find((entry) => entry.id === id);
1274
1274
  if (!found)
1275
- throw new Error(`Eingabe-Capability ${id} ist nicht verf\xFCgbar.`);
1275
+ throw new Error(`Input capability ${id} is not available.`);
1276
1276
  return found;
1277
1277
  });
1278
1278
  await installClientSdk(directory, { stateSchema: contract.state, actions: functions.map((fn) => ({ id: fn.id, inputSchema: fn.inputSchema, resultSchema: fn.resultSchema })) });
1279
1279
  const hasServerFiles = pkg.backend || (await projectSourceFiles(directory)).some((file) => /^tests\/.*\.tsx?$/.test(file.path));
1280
1280
  const serverErrors = hasServerFiles ? typecheckServerProject(directory, pkg.backend) : [];
1281
1281
  if (serverErrors.length)
1282
- throw checkFailure(`Typpr\xFCfung von ${name2}`, serverErrors, `Die Typpr\xFCfung von ${name2} schlug ohne Meldung fehl.`);
1282
+ throw checkFailure(`Typecheck of ${name2}`, serverErrors, `The typecheck of ${name2} failed without a message.`);
1283
1283
  const clients = [];
1284
1284
  const views = [];
1285
1285
  for (const view of pkg.views ?? []) {
1286
1286
  const client = await compileClientProject({ directory, entryPoint: view.client, stateSchema: contract.state, actions: functions.map((fn) => ({ id: fn.id, inputSchema: fn.inputSchema, resultSchema: fn.resultSchema })) });
1287
1287
  if (!client.valid)
1288
1288
  throw checkFailure(
1289
- `Client-Build von ${view.client}`,
1289
+ `Client build of ${view.client}`,
1290
1290
  client.diagnostics.filter((item) => item.category === "error").map((item) => `${item.fileName ?? view.client}${item.start ? `:${item.start.line}:${item.start.column}` : ""} ${item.message.replace(/\s*\n\s*/g, " ")}`),
1291
- `Der Client-Build von ${view.client} schlug ohne Meldung fehl.`
1291
+ `The client build of ${view.client} failed without a message.`
1292
1292
  );
1293
1293
  const styles = view.styles ? await inside(directory, view.styles) : "";
1294
1294
  if (/@import\b|url\s*\(\s*["']?\s*(?:https?:|\/\/)/i.test(styles))
1295
- throw new Error("Ansichts-CSS darf keine externen Ressourcen laden.");
1295
+ throw new Error("View CSS must not load external resources.");
1296
1296
  const clientFile = `view-${view.id}.mjs`;
1297
1297
  clients.push({ file: clientFile, javaScript: client.javaScript });
1298
1298
  views.push({
@@ -1335,7 +1335,7 @@ var ActorProgramRuntime = class {
1335
1335
  async #activate(context, runId, name2, idle, signal, reference) {
1336
1336
  const key = `${runId}\0${name2}`;
1337
1337
  if (this.#installing.has(key))
1338
- throw new Error(`Paket ${name2} wird bereits aktiviert.`);
1338
+ throw new Error(`Package ${name2} is already being activated.`);
1339
1339
  const epoch = this.invocationPermit(runId);
1340
1340
  this.#installing.add(key);
1341
1341
  const original = this.programs(runId).find((item) => item.name === name2);
@@ -1369,23 +1369,23 @@ var ActorProgramRuntime = class {
1369
1369
  throw new Error(report.report(name2, { code: result.code, timedOut: result.timedOut, stderr }));
1370
1370
  }
1371
1371
  if (canonicalHash(compiled.files) !== canonicalHash(await projectSourceFiles(compiled.directory)))
1372
- throw new Error("Paketdateien wurden w\xE4hrend der Pr\xFCfung ge\xE4ndert; erneut aktivieren.");
1372
+ throw new Error("Package files were changed during the check; activate again.");
1373
1373
  if (epoch !== this.invocationPermit(runId))
1374
- throw new Error("Der Run wurde w\xE4hrend der Aktivierung gestoppt.");
1374
+ throw new Error("The run was stopped during the activation.");
1375
1375
  if (this.programs(runId).find((item) => item.name === name2)?.revision !== original?.revision)
1376
- throw new Error("Das Paket wurde zwischenzeitlich ge\xE4ndert.");
1376
+ throw new Error("The package was changed in the meantime.");
1377
1377
  if (idle)
1378
1378
  this.#assertIdle(runId, definition.actorId);
1379
1379
  const names = /* @__PURE__ */ new Set([...agentTools.map((tool) => tool.name), ...this.#options.reservedToolNames(), ...this.programs(runId).filter((program) => program.name !== name2).flatMap((program) => program.functions.flatMap((fn) => fn.tool ? [fn.tool.name] : []))]);
1380
1380
  for (const fn of definition.functions)
1381
1381
  if (fn.tool) {
1382
1382
  if (names.has(fn.tool.name))
1383
- throw new Error(`Werkzeugname ${fn.tool.name} ist bereits vergeben.`);
1383
+ throw new Error(`Tool name ${fn.tool.name} is already taken.`);
1384
1384
  names.add(fn.tool.name);
1385
1385
  }
1386
1386
  const occupied2 = this.programs(runId).find((program) => program.actorId === definition.actorId && program.name !== name2);
1387
1387
  if (occupied2)
1388
- throw new Error(`Actor @${definition.actorHandle} besitzt bereits das Paket ${occupied2.name}. Erg\xE4nze darin Funktionen oder Ansichten.`);
1388
+ throw new Error(`Actor @${definition.actorHandle} already owns the package ${occupied2.name}. Add functions or views there.`);
1389
1389
  await mkdir(definition.directory, { recursive: true });
1390
1390
  for (const source of compiled.files) {
1391
1391
  const file = path.join(definition.directory, safePath(source.path));
@@ -1402,34 +1402,34 @@ var ActorProgramRuntime = class {
1402
1402
  await syncWorkspaceOwnership(definition.directory, await this.#options.serverProcessContextFor(runId));
1403
1403
  signal?.throwIfAborted();
1404
1404
  if (epoch !== this.invocationPermit(runId))
1405
- throw new Error("Der Run wurde w\xE4hrend der Aktivierung gestoppt.");
1405
+ throw new Error("The run was stopped during the activation.");
1406
1406
  if (this.programs(runId).find((item) => item.name === name2)?.revision !== original?.revision)
1407
- throw new Error("Das Paket wurde zwischenzeitlich ge\xE4ndert.");
1407
+ throw new Error("The package was changed in the meantime.");
1408
1408
  if (!compiled.createActor) {
1409
1409
  this.actor(runId, definition.actorId);
1410
1410
  if (idle)
1411
1411
  this.#assertIdle(runId, definition.actorId);
1412
- checked(definition.stateSchema, this.data(runId, definition.actorId).values, "Actor-Zustand");
1412
+ checked(definition.stateSchema, this.data(runId, definition.actorId).values, "Actor state");
1413
1413
  if (this.programs(runId).some((item) => item.actorId === definition.actorId && item.name !== name2))
1414
- throw new Error("Der Actor besitzt inzwischen ein anderes Paket.");
1414
+ throw new Error("The actor now owns another package.");
1415
1415
  }
1416
1416
  const currentNames = /* @__PURE__ */ new Set([...agentTools.map((tool) => tool.name), ...this.#options.reservedToolNames(), ...this.programs(runId).filter((program) => program.name !== name2).flatMap((program) => program.functions.flatMap((fn) => fn.tool ? [fn.tool.name] : []))]);
1417
1417
  for (const fn of definition.functions)
1418
1418
  if (fn.tool) {
1419
1419
  if (currentNames.has(fn.tool.name))
1420
- throw new Error(`Werkzeugname ${fn.tool.name} ist inzwischen vergeben.`);
1420
+ throw new Error(`Tool name ${fn.tool.name} has been taken in the meantime.`);
1421
1421
  currentNames.add(fn.tool.name);
1422
1422
  }
1423
- jsonValue({ version: 1, program: definition }, "Actor-Programm");
1423
+ jsonValue({ version: 1, program: definition }, "Actor program");
1424
1424
  if (compiled.createActor) {
1425
1425
  const actors = this.view(runId).actors;
1426
1426
  const caller = actors.find((actor2) => actor2.id === context.actorId);
1427
1427
  const holder = actors.find((actor2) => actor2.handle === name2);
1428
1428
  if (holder?.kind === "script" && holder.lifecycle.kind === "stopped") {
1429
- checked(definition.stateSchema, this.data(runId, holder.id).values, "Actor-Zustand");
1430
- this.runtime().restartActor(context, runId, holder.id, "Actor-Paket erneut aktiviert");
1429
+ checked(definition.stateSchema, this.data(runId, holder.id).values, "Actor state");
1430
+ this.runtime().restartActor(context, runId, holder.id, "Actor package activated again");
1431
1431
  } else if (holder)
1432
- throw new Error(`Handle @${name2} geh\xF6rt bereits dem ${holder.kind !== "human" && holder.lifecycle.kind === "stopped" ? "gestoppten" : "aktiven"} Actor ${holder.displayName}; nur ein gestoppter TypeScript-Actor wird beim Aktivieren neu gestartet. W\xE4hle einen anderen Paketnamen.`);
1432
+ throw new Error(`Handle @${name2} already belongs to the ${holder.kind !== "human" && holder.lifecycle.kind === "stopped" ? "stopped" : "active"} actor ${holder.displayName}; only a stopped TypeScript actor is restarted on activation. Choose another package name.`);
1433
1433
  else
1434
1434
  this.runtime().createScriptActor(context, runId, { handle: name2, displayName: definition.title, description: actorDescriptionOf(definition.description), grants: caller.grants.filter((grant) => grant.delegable), toolNames: null });
1435
1435
  const actor = this.resolveActor(runId, context.actorId, `@${name2}`);
@@ -1461,7 +1461,7 @@ var ActorProgramRuntime = class {
1461
1461
  const program = this.#program(runId, name2);
1462
1462
  this.#assertIdle(runId, program.actorId);
1463
1463
  if (this.#installing.has(`${runId}\0${name2}`))
1464
- throw new Error("Das Paket wird gerade aktiviert.");
1464
+ throw new Error("The package is being activated.");
1465
1465
  const actor = this.actor(runId, program.actorId);
1466
1466
  const key = `${runId}\0${program.actorId}`;
1467
1467
  this.#removing.add(key);
@@ -1469,7 +1469,7 @@ var ActorProgramRuntime = class {
1469
1469
  await this.stopActor(runId, program.actorId);
1470
1470
  this.#writeProgram(context, runId, program.actorId, null);
1471
1471
  if (actor.kind === "script")
1472
- this.runtime().stopActor(context, runId, program.actorId, "Actor-Paket entfernt");
1472
+ this.runtime().stopActor(context, runId, program.actorId, "Actor package removed");
1473
1473
  await rm(program.directory, { recursive: true, force: true });
1474
1474
  } finally {
1475
1475
  this.#removing.delete(key);
@@ -1523,9 +1523,9 @@ var ActorProgramRuntime = class {
1523
1523
  const program = this.#program(runId, viewId);
1524
1524
  const view = program.views.find((item) => item.id === viewId);
1525
1525
  if (!view || program.revision !== revision)
1526
- throw new Error("Die Ansicht wurde ersetzt oder entfernt.");
1526
+ throw new Error("The view was replaced or removed.");
1527
1527
  if (!program.stylesFile)
1528
- throw new Error("Das Programm stammt aus einer \xE4lteren Aktivierung ohne Stylesheet-Datei. Bitte erneut aktivieren.");
1528
+ throw new Error("The program comes from an older activation without a stylesheet file. Please activate again.");
1529
1529
  const frameStyles = readFileSync(path.join(program.directory, program.stylesFile), "utf8");
1530
1530
  return { ...view, styles: `${frameStyles}
1531
1531
  ${view.styles}`, platformVersion: 2, clientJavaScript: readFileSync(path.join(program.directory, view.clientFile), "utf8") };
@@ -1552,7 +1552,7 @@ ${view.styles}`, platformVersion: 2, clientJavaScript: readFileSync(path.join(pr
1552
1552
  const operation = previous.then(() => {
1553
1553
  signal.throwIfAborted();
1554
1554
  if (permit !== this.invocationPermit(runId))
1555
- throw new Error("Der Run wurde vor dem Funktionsstart gestoppt.");
1555
+ throw new Error("The run was stopped before the function started.");
1556
1556
  this.actor(runId, actorId);
1557
1557
  return execute();
1558
1558
  });
@@ -1567,10 +1567,10 @@ ${view.styles}`, platformVersion: 2, clientJavaScript: readFileSync(path.join(pr
1567
1567
  }
1568
1568
  async #backend(runId, program, input, binding, descriptors, signal) {
1569
1569
  if (!program.backendFile)
1570
- throw new Error("Der Actor besitzt kein TypeScript-Backend.");
1570
+ throw new Error("The actor has no TypeScript backend.");
1571
1571
  const current = this.#program(runId, program.name);
1572
1572
  if (current.revision !== program.revision)
1573
- throw new Error("Das Actor-Paket wurde ersetzt.");
1573
+ throw new Error("The actor package was replaced.");
1574
1574
  const logs = [];
1575
1575
  let calls = 0;
1576
1576
  const initial = this.data(runId, program.actorId);
@@ -1588,39 +1588,39 @@ ${view.styles}`, platformVersion: 2, clientJavaScript: readFileSync(path.join(pr
1588
1588
  }, call: async (name2, value) => {
1589
1589
  const capability = descriptors.find((entry) => entry.id === name2);
1590
1590
  if (!capability)
1591
- throw new Error(`Capability ${name2} ist nicht deklariert.`);
1591
+ throw new Error(`Capability ${name2} is not declared.`);
1592
1592
  if (++calls > 64)
1593
- throw new Error("Ein Aufruf darf h\xF6chstens 64 Capabilities ausf\xFChren.");
1593
+ throw new Error("A call may run at most 64 capabilities.");
1594
1594
  if (program.functions.some((fn) => fn.tool?.name === name2))
1595
- throw new Error("Eine Actor-Funktion darf sich nicht \xFCber ein Werkzeug selbst aufrufen; verwende eine gemeinsame TypeScript-Funktion.");
1596
- checked(capability.schema, value, `Eingabe ${name2}`);
1595
+ throw new Error("An actor function must not call itself through a tool; use a shared TypeScript function.");
1596
+ checked(capability.schema, value, `Input ${name2}`);
1597
1597
  const output = await binding.call(name2, value, calls);
1598
- return checked(capability.resultSchema, output, `Ergebnis ${name2}`);
1598
+ return checked(capability.resultSchema, output, `Result ${name2}`);
1599
1599
  } });
1600
1600
  signal.throwIfAborted();
1601
1601
  this.actor(runId, program.actorId);
1602
- const state = checked(program.stateSchema, result.state, "Actor-Zustand");
1602
+ const state = checked(program.stateSchema, result.state, "Actor state");
1603
1603
  return { result: result.result, logs, state, initial };
1604
1604
  }
1605
1605
  #commitState(runId, actorId, state, initial) {
1606
1606
  if (canonicalHash(state) === canonicalHash(initial.values))
1607
1607
  return;
1608
1608
  if (this.data(runId, actorId).revision !== initial.revision)
1609
- throw new Error("Der Actor-Zustand wurde w\xE4hrend des Aufrufs ge\xE4ndert. Erneut aufrufen.");
1609
+ throw new Error("The actor state was changed during the call. Call again.");
1610
1610
  this.runtime().replaceActorState(this.operatorContext(runId), runId, actorId, state);
1611
1611
  }
1612
1612
  #executeFunction(runId, bound, declared, input, binding, signal) {
1613
1613
  const functionOf = (program) => {
1614
1614
  const fn = program.functions.find((entry) => entry.id === declared.id);
1615
1615
  if (!fn)
1616
- throw new Error("Die Funktion ist nicht deklariert.");
1616
+ throw new Error("The function is not declared.");
1617
1617
  return fn;
1618
1618
  };
1619
1619
  return this.#serial(runId, bound.actorId, signal, async () => {
1620
1620
  const { program, contract: fn, descriptors } = await this.#bound(runId, bound.actorId, bound.revision, signal, functionOf, binding.descriptorsFor);
1621
- const value = checked(fn.inputSchema, input, `Eingabe ${fn.id}`);
1621
+ const value = checked(fn.inputSchema, input, `Input ${fn.id}`);
1622
1622
  const result = await this.#backend(runId, program, { kind: "function", functionId: fn.id, input: value }, binding, descriptors, signal);
1623
- const output = checked(fn.resultSchema, result.result, `Ergebnis ${fn.id}`);
1623
+ const output = checked(fn.resultSchema, result.result, `Result ${fn.id}`);
1624
1624
  this.#commitState(runId, program.actorId, result.state, result.initial);
1625
1625
  binding.output?.push(...result.logs);
1626
1626
  return output;
@@ -1631,7 +1631,7 @@ ${view.styles}`, platformVersion: 2, clientJavaScript: readFileSync(path.join(pr
1631
1631
  try {
1632
1632
  const inputOf = (program) => {
1633
1633
  if (!program.input)
1634
- throw new Error("Dieser TypeScript-Actor besitzt keinen onInput-Handler.");
1634
+ throw new Error("This TypeScript actor has no onInput handler.");
1635
1635
  return program.input;
1636
1636
  };
1637
1637
  const descriptorsFor = (capabilityIds) => agentCapabilityBinding(this.actor(request.runId, request.agentId), request.tools, capabilityIds, /* @__PURE__ */ new Set()).descriptors;
@@ -1650,44 +1650,44 @@ ${view.styles}`, platformVersion: 2, clientJavaScript: readFileSync(path.join(pr
1650
1650
  }
1651
1651
  invocationPermit(runId) {
1652
1652
  if (this.#shuttingDown || this.#stopping.has(runId))
1653
- throw new Error("Der Run wird gestoppt.");
1653
+ throw new Error("The run is being stopped.");
1654
1654
  return this.#epochs.get(runId) ?? 0;
1655
1655
  }
1656
1656
  startInvocation(runId, viewId, revision, functionId, requestId, input, permit = this.invocationPermit(runId)) {
1657
1657
  const program = this.#program(runId, viewId);
1658
1658
  if (!program.views.some((view) => view.id === viewId))
1659
- throw new Error("Die Ansicht ist unbekannt.");
1659
+ throw new Error("The view is unknown.");
1660
1660
  return this.#start(runId, program, viewId, revision, functionId, requestId, input, permit);
1661
1661
  }
1662
1662
  startFunctionInvocation(runId, actorHandle, revision, functionId, requestId, input, permit = this.invocationPermit(runId)) {
1663
1663
  const program = this.programs(runId).find((entry) => entry.actorHandle === handleKey(actorHandle));
1664
1664
  if (!program)
1665
- throw new Error("Der Actor ver\xF6ffentlicht kein Programm.");
1665
+ throw new Error("The actor publishes no program.");
1666
1666
  return this.#start(runId, program, program.name, revision, functionId, requestId, input, permit);
1667
1667
  }
1668
1668
  #start(runId, program, viewId, revision, functionId, requestId, input, permit) {
1669
1669
  this.#knownRuns.add(runId);
1670
1670
  if (permit !== this.invocationPermit(runId))
1671
- throw new Error("Der Run wurde inzwischen gestoppt.");
1671
+ throw new Error("The run has been stopped in the meantime.");
1672
1672
  if (program.revision !== revision)
1673
- throw new Error("Das Actor-Paket wurde ersetzt. Ansicht aktualisieren.");
1673
+ throw new Error("The actor package was replaced. Refresh the view.");
1674
1674
  const fn = program.functions.find((entry) => entry.id === functionId);
1675
1675
  if (!fn)
1676
- throw new Error("Die Funktion ist nicht deklariert.");
1676
+ throw new Error("The function is not declared.");
1677
1677
  const state = this.#invocations(runId);
1678
1678
  const prior = state.invocations.find((entry) => entry.requestId === requestId);
1679
1679
  if (prior) {
1680
1680
  if (prior.actorId !== program.actorId || prior.actionId !== functionId || prior.revision !== revision || canonicalHash(prior.input) !== canonicalHash(input))
1681
- throw new Error("Die Request-ID wurde bereits f\xFCr einen anderen Aufruf verwendet.");
1681
+ throw new Error("The request ID was already used for another call.");
1682
1682
  return prior;
1683
1683
  }
1684
1684
  if (!requestId || requestId.length > 200 || state.requestIds.includes(requestId))
1685
- throw new Error("Ung\xFCltige oder bereits verarbeitete Request-ID.");
1685
+ throw new Error("Invalid or already processed request ID.");
1686
1686
  if (state.requestIds.length >= 1e4)
1687
- throw new Error("Der Run hat seine Aufrufgrenze erreicht.");
1687
+ throw new Error("The run has reached its call limit.");
1688
1688
  if ([...this.#active.values()].filter((entry) => entry.runId === runId).length >= 8)
1689
- throw new Error("Es laufen bereits acht Actor-Funktionen.");
1690
- checked(fn.inputSchema, input, "Funktionseingabe");
1689
+ throw new Error("Eight actor functions are already running.");
1690
+ checked(fn.inputSchema, input, "Function input");
1691
1691
  const invocation = { id: randomUUID(), requestId, actorId: program.actorId, actorHandle: program.actorHandle, appId: viewId, revision, actionId: functionId, input, output: [], createdAt: (/* @__PURE__ */ new Date()).toISOString(), status: "queued" };
1692
1692
  this.#replaceInvocation(runId, invocation, true);
1693
1693
  const controller = new AbortController();
@@ -1696,15 +1696,15 @@ ${view.styles}`, platformVersion: 2, clientJavaScript: readFileSync(path.join(pr
1696
1696
  this.#replaceInvocation(runId, started);
1697
1697
  try {
1698
1698
  if (fn.confirmation && !await this.#confirm(runId, invocation, fn.confirmation, controller.signal))
1699
- throw new Error("Die Funktion wurde nicht best\xE4tigt.");
1699
+ throw new Error("The function was not confirmed.");
1700
1700
  const descriptorsFor = (capabilityIds) => operatorCapabilityBinding(this.ownerId(runId), this.#options.operations.list(), capabilityIds).descriptors;
1701
1701
  const output = [];
1702
1702
  const result = await this.#executeFunction(runId, program, fn, input, { output, id: invocation.id, kind: "app-action", principal: { id: this.ownerId(runId), kind: "operator" }, descriptorsFor, call: async (name2, value, index) => {
1703
1703
  const operation = this.#options.operations.operation(name2);
1704
1704
  const id = `${invocation.id}:capability:${index}`;
1705
- const confirmation = operation.operator === "confirm" ? await this.#confirm(runId, invocation, `${operation.label} ausf\xFChren?`, controller.signal, value) : true;
1705
+ const confirmation = operation.operator === "confirm" ? await this.#confirm(runId, invocation, `Run ${operation.label}?`, controller.signal, value) : true;
1706
1706
  if (!confirmation)
1707
- throw new Error("Die Aktion wurde nicht best\xE4tigt.");
1707
+ throw new Error("The action was not confirmed.");
1708
1708
  return this.#options.operations.invoke(name2, { runId, invocationId: id, principal: { kind: "operator", actorId: this.ownerId(runId) }, signal: controller.signal, ...operation.operator === "confirm" ? { operatorConfirmation: { operationId: name2, invocationId: id, inputHash: canonicalHash(value) } } : {} }, value);
1709
1709
  } }, controller.signal);
1710
1710
  this.#replaceInvocation(runId, { ...started, status: "succeeded", result, output, finishedAt: (/* @__PURE__ */ new Date()).toISOString() });
@@ -1718,7 +1718,7 @@ ${view.styles}`, platformVersion: 2, clientJavaScript: readFileSync(path.join(pr
1718
1718
  invocation(runId, reference, id) {
1719
1719
  const invocation = this.#invocations(runId).invocations.find((entry) => entry.id === id && (entry.appId === reference || entry.actorHandle === reference));
1720
1720
  if (!invocation)
1721
- throw new Error("Der Funktionsaufruf ist unbekannt.");
1721
+ throw new Error("The function call is unknown.");
1722
1722
  return invocation;
1723
1723
  }
1724
1724
  #invocations(runId) {
@@ -1734,18 +1734,18 @@ ${view.styles}`, platformVersion: 2, clientJavaScript: readFileSync(path.join(pr
1734
1734
  finished.shift();
1735
1735
  state.invocations = [...active, ...finished];
1736
1736
  }
1737
- assertJsonValue2(state, "Actor-Aufrufe");
1737
+ assertJsonValue2(state, "Actor calls");
1738
1738
  this.runtime().replacePluginState(this.operatorContext(runId), runId, { pluginId: ACTOR_INVOCATIONS_STATE_ID, scope: { kind: "run" }, state });
1739
1739
  }
1740
1740
  async #confirm(runId, invocation, question, signal, input = invocation.input) {
1741
1741
  const answer = await this.#options.askService().ask({ runId, agentId: this.ownerId(runId), turnId: null, commandId: `actor-confirm:${randomUUID()}` }, { question: `${question}
1742
- Eingabe: ${JSON.stringify(input).slice(0, 500)}`, options: ["Ausf\xFChren", "Abbrechen"], multi: false, description: `Funktion ${invocation.actionId} von @${invocation.actorHandle}`, parameters: { source: ACTOR_PROGRAMS_STATE_ID, invocationId: invocation.id } }, signal);
1743
- return answer === "Ausf\xFChren";
1742
+ Input: ${JSON.stringify(input).slice(0, 500)}`, options: ["Run", "Cancel"], multi: false, description: `Function ${invocation.actionId} of @${invocation.actorHandle}`, parameters: { source: ACTOR_PROGRAMS_STATE_ID, invocationId: invocation.id } }, signal);
1743
+ return answer === "Run";
1744
1744
  }
1745
1745
  #program(runId, reference) {
1746
1746
  const program = this.programs(runId).find((entry) => entry.name === reference || entry.views.some((view) => view.id === reference));
1747
1747
  if (!program)
1748
- throw new Error(`Actor-Paket ${reference} ist nicht aktiv.`);
1748
+ throw new Error(`Actor package ${reference} is not active.`);
1749
1749
  return program;
1750
1750
  }
1751
1751
  #instance(program) {
@@ -1753,15 +1753,15 @@ Eingabe: ${JSON.stringify(input).slice(0, 500)}`, options: ["Ausf\xFChren", "Abb
1753
1753
  }
1754
1754
  #assertName(name2) {
1755
1755
  if (!NAME.test(name2))
1756
- throw new Error("Paketnamen beginnen mit einem Kleinbuchstaben und enthalten h\xF6chstens 64 Kleinbuchstaben, Ziffern oder Bindestriche.");
1756
+ throw new Error("Package names begin with a lowercase letter and contain at most 64 lowercase letters, digits, or hyphens.");
1757
1757
  }
1758
1758
  #assertIdle(runId, actorId) {
1759
1759
  if (this.#queues.has(`${runId}\0${actorId}`) || [...this.#active.values()].some((entry) => entry.runId === runId && entry.actorId === actorId))
1760
- throw new Error("Der Actor hat noch laufende Funktionen oder Eingaben.");
1760
+ throw new Error("The actor still has running functions or inputs.");
1761
1761
  }
1762
1762
  async stopActor(runId, actorId) {
1763
1763
  const active = [...this.#active.values()].filter((entry) => entry.runId === runId && entry.actorId === actorId);
1764
- active.forEach((entry) => entry.controller.abort(new Error("Actor gestoppt.")));
1764
+ active.forEach((entry) => entry.controller.abort(new Error("Actor stopped.")));
1765
1765
  const state = this.view(runId).pluginStates.find((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID && entry.scope.kind === "actor" && entry.scope.actorId === actorId)?.state;
1766
1766
  if (state?.program)
1767
1767
  await this.runtime().nativeTypeScriptExecutor.stopInstance(runId, this.#instance(state.program));
@@ -1772,7 +1772,7 @@ Eingabe: ${JSON.stringify(input).slice(0, 500)}`, options: ["Ausf\xFChren", "Abb
1772
1772
  this.#stopping.add(runId);
1773
1773
  try {
1774
1774
  const active = [...this.#active.values()].filter((entry) => entry.runId === runId);
1775
- active.forEach((entry) => entry.controller.abort(new Error("Run gestoppt.")));
1775
+ active.forEach((entry) => entry.controller.abort(new Error("Run stopped.")));
1776
1776
  await this.runtime().nativeTypeScriptExecutor.stopRun(runId);
1777
1777
  await Promise.allSettled([...active.map((entry) => entry.completed), ...[...this.#queues].filter(([key]) => key.startsWith(`${runId}\0`)).map(([, queue]) => queue)]);
1778
1778
  } finally {
@@ -1788,7 +1788,7 @@ Eingabe: ${JSON.stringify(input).slice(0, 500)}`, options: ["Ausf\xFChren", "Abb
1788
1788
  return;
1789
1789
  for (const invocation of this.#invocations(runId).invocations)
1790
1790
  if (invocation.status === "queued" || invocation.status === "running")
1791
- this.#replaceInvocation(runId, { ...invocation, status: "cancelled", error: "Der Server wurde w\xE4hrend des Aufrufs beendet.", finishedAt: (/* @__PURE__ */ new Date()).toISOString() });
1791
+ this.#replaceInvocation(runId, { ...invocation, status: "cancelled", error: "The server was stopped during the call.", finishedAt: (/* @__PURE__ */ new Date()).toISOString() });
1792
1792
  }
1793
1793
  async stopSession(runId, _signal) {
1794
1794
  await this.stopRun(runId);
@@ -1819,7 +1819,7 @@ var metadata = [
1819
1819
  { name: "actor_program_diagnostics", label: "Actor Program Diagnostics", description: "Read the last project diagnostics.", longDescription: "Changed errors are automatically supplied before the next model request." }
1820
1820
  ];
1821
1821
  var actorProgramManagementToolNames = metadata.map((entry) => entry.name);
1822
- var actorProgramToolsAvailable = defineToolAvailability2({ availability: "conditional", availabilityDetail: "F\xFCr ausf\xFChrbare Actors mit agent.spawn und plugin.state.write." }, (actor) => actor.kind !== "human" && holdsUsable(actor, "agent.spawn") && holdsUsable(actor, "plugin.state.write"));
1822
+ var actorProgramToolsAvailable = defineToolAvailability2({ availability: "conditional", availabilityDetail: "For executable actors with agent.spawn and plugin.state.write." }, (actor) => actor.kind !== "human" && holdsUsable(actor, "agent.spawn") && holdsUsable(actor, "plugin.state.write"));
1823
1823
  var name = Type.String({ pattern: "^[a-z][a-z0-9-]{0,63}$" });
1824
1824
  var managementTools = (runtime, diagnostics) => [
1825
1825
  defineRunFunction2({ ...metadata[0], schema: Type.Object({ name, template: Type.Union(runtime.templates().map((entry) => Type.Literal(entry.id, { description: entry.description }))) }, { additionalProperties: false }), resultSchema: Type.Object({ name: Type.String(), directory: Type.String(), files: Type.Array(Type.String()) }, { additionalProperties: false }), available: actorProgramToolsAvailable, executionMode: "sequential", run: (scope, _id, input) => runtime.scaffold(scope.caller.runId, input.name, input.template) }),
@@ -1863,17 +1863,17 @@ var actorProgramSummary = boundToTools(
1863
1863
  );
1864
1864
 
1865
1865
  // server/controls-tool.ts
1866
- var available = defineToolAvailability3({ availability: "always", availabilityDetail: "Typisierte UI-Referenz des installierten Actor-Programm-Plugins." }, () => true);
1866
+ var available = defineToolAvailability3({ availability: "always", availabilityDetail: "Typed UI reference of the installed actor program plugin." }, () => true);
1867
1867
  var metadata2 = {
1868
1868
  name: "actor_program_controls",
1869
- label: "Actor-Programm-Anleitung und Controls nachschlagen",
1869
+ label: "Look up actor program guide and controls",
1870
1870
  description: "Read Mini-App control contracts or the actor-program authoring guide.",
1871
1871
  longDescription: "With topic: guide, explain the TypeScript package workflow through actor_program_activate. Otherwise list control names, or select one component (for example Form) for only its TypeScript props and supporting types. Import controls from @ragents/client/ui and use these exact props."
1872
1872
  };
1873
1873
  var describeClientControls = (component) => {
1874
1874
  const components = readClientUiComponentNames();
1875
1875
  if (component === void 0) return { components };
1876
- if (!components.includes(component)) throw new Error(`Unbekanntes Control ${component}. G\xFCltig: ${components.join(", ")}`);
1876
+ if (!components.includes(component)) throw new Error(`Unknown control ${component}. Valid: ${components.join(", ")}`);
1877
1877
  return { files: readClientUiComponentContracts(component) };
1878
1878
  };
1879
1879
  var createControlsToolContributor = () => ({
@@ -1893,7 +1893,7 @@ var createControlsToolContributor = () => ({
1893
1893
  ]),
1894
1894
  run: async (_scope, _call, input) => {
1895
1895
  if (input.topic === "guide") {
1896
- if (input.component !== void 0) throw new Error("component ist nur bei topic: controls oder ohne topic erlaubt; f\xFCr topic: guide lasse component weg.");
1896
+ if (input.component !== void 0) throw new Error("component is only allowed with topic: controls or without topic; for topic: guide, omit component.");
1897
1897
  return { guide: await actorProgramGuide.render({}) };
1898
1898
  }
1899
1899
  return describeClientControls(input.component);
@@ -1919,7 +1919,7 @@ var errorLines2 = (error) => {
1919
1919
  const complete = error instanceof Error ? error.lines : void 0;
1920
1920
  if (Array.isArray(complete) && complete.every((line) => typeof line === "string")) return [...new Set(complete)];
1921
1921
  const lines = messageOf(error).split("\n").map((line) => line.trim()).filter(Boolean);
1922
- const issues = lines.filter((line) => !/^(Build failed with \d+ errors?:|.*(?:Typprüfung|Typecheck|Diagnostik).*:)$/i.test(line));
1922
+ const issues = lines.filter((line) => !/^(Build failed with \d+ errors?:|.*(?:Typecheck|Diagnostics).*:)$/i.test(line));
1923
1923
  return [...new Set(issues.length ? issues : lines)];
1924
1924
  };
1925
1925
  var allErrors = (snapshot) => Object.entries(snapshot.programs).sort(([left], [right]) => left.localeCompare(right)).flatMap(([programName, program]) => program.errors.map((error) => `${programName}: ${error}`));
@@ -1955,7 +1955,7 @@ var createProjectDiagnostics = (options) => {
1955
1955
  let fingerprint;
1956
1956
  let errors = [];
1957
1957
  try {
1958
- if (entry.isSymbolicLink()) throw new Error("Actor-Projekte d\xFCrfen keine Symlinks sein.");
1958
+ if (entry.isSymbolicLink()) throw new Error("Actor projects must not be symlinks.");
1959
1959
  fingerprint = fingerprintOf(await projectSourceFiles2(path2.join(directory, entry.name)));
1960
1960
  } catch (error) {
1961
1961
  errors = errorLines2(error);
@@ -1993,13 +1993,13 @@ var createProjectDiagnostics = (options) => {
1993
1993
  const after = new Set(allErrors(next));
1994
1994
  const added = [...after].filter((error) => !before.has(error));
1995
1995
  const resolved = [...before].filter((error) => !after.has(error));
1996
- const changes = [...added.map((error) => `Neu: ${error}`), ...resolved.map((error) => `Behoben: ${error}`)];
1996
+ const changes = [...added.map((error) => `New: ${error}`), ...resolved.map((error) => `Fixed: ${error}`)];
1997
1997
  const lines = changes.slice(0, maxDeltaLines).map((line) => line.length > maxLineLength ? `${line.slice(0, maxLineLength - 3)}...` : line);
1998
1998
  const omitted = changes.length - lines.length;
1999
1999
  return [
2000
- `Actor-Programm-Projektpr\xFCfung (TypeScript und Build): ${after.size} Fehler in ${Object.keys(next.programs).length} Projekten; ${added.length} neu, ${resolved.length} behoben.`,
2000
+ `Actor program project check (TypeScript and build): ${after.size} errors in ${Object.keys(next.programs).length} projects; ${added.length} new, ${resolved.length} fixed.`,
2001
2001
  ...lines,
2002
- ...omitted > 0 ? [`${omitted} weitere \xC4nderungen. Vollst\xE4ndiger letzter Stand: actor_program_diagnostics.`] : []
2002
+ ...omitted > 0 ? [`${omitted} more changes. Complete last state: actor_program_diagnostics.`] : []
2003
2003
  ].join("\n");
2004
2004
  }
2005
2005
  };
@@ -2007,10 +2007,10 @@ var createProjectDiagnostics = (options) => {
2007
2007
  contribution,
2008
2008
  latest(runId, actorId, programName) {
2009
2009
  const snapshot = snapshots.get(runId)?.get(actorId);
2010
- if (!snapshot) return "Noch kein Actor-Programm-Projektstand f\xFCr diesen Agenten gepr\xFCft.";
2010
+ if (!snapshot) return "No actor program project state checked for this agent yet.";
2011
2011
  const programs = Object.entries(snapshot.programs).filter(([id]) => programName === void 0 || id === programName);
2012
- if (programs.length === 0) return programName ? `Kein gepr\xFCfter Projektstand f\xFCr ${programName}.` : "Keine Actor-Programm-Projekte vorhanden.";
2013
- return programs.sort(([left], [right]) => left.localeCompare(right)).map(([id, program]) => [`${id}: ${program.errors.length} Fehler`, ...program.errors].join("\n")).join("\n\n");
2012
+ if (programs.length === 0) return programName ? `No checked project state for ${programName}.` : "No actor program projects exist.";
2013
+ return programs.sort(([left], [right]) => left.localeCompare(right)).map(([id, program]) => [`${id}: ${program.errors.length} errors`, ...program.errors].join("\n")).join("\n\n");
2014
2014
  },
2015
2015
  forget(runId) {
2016
2016
  snapshots.delete(runId);