@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
@@ -4,12 +4,12 @@ import { configuredAnonymousUser, configuredUsers, loadConfigFile, missingEnviro
4
4
  const startupFailure = (error: unknown): never => {
5
5
  const message = error instanceof Error ? error.message : String(error);
6
6
  if (error instanceof Error && error.constructor !== Error && missingEnvironmentOf(error) === undefined) console.error(error.stack ?? message);
7
- console.error(`\nRAgents startet nicht: ${message}`);
7
+ console.error(`\nRAgents does not start: ${message}`);
8
8
  reportMissingEnvironment(error, (line) => console.error(line));
9
9
  process.exit(1);
10
10
  };
11
11
 
12
- /** Startmodi: --stdio (JSON-RPC über stdin und stdout, ohne --port kein HTTP), --port 0 (privater Port mit Ansage auf stdout), --port N. */
12
+ /** Start modes: --stdio (JSON-RPC over stdin and stdout, no HTTP without --port), --port 0 (private port announced on stdout), --port N. */
13
13
  const parseArguments = (argv: readonly string[]): { stdio: boolean; port: number | undefined } => {
14
14
  let stdio = false;
15
15
  let port: number | undefined;
@@ -18,12 +18,12 @@ const parseArguments = (argv: readonly string[]): { stdio: boolean; port: number
18
18
  if (argument === "--stdio") { stdio = true; continue; }
19
19
  if (argument === "--port") {
20
20
  const value = Number(argv[index + 1]);
21
- if (!Number.isInteger(value) || value < 0 || value > 65535) throw new Error(`--port braucht eine ganze Zahl von 0 bis 65535, nicht ${argv[index + 1]}`);
21
+ if (!Number.isInteger(value) || value < 0 || value > 65535) throw new Error(`--port needs an integer from 0 to 65535, not ${argv[index + 1]}`);
22
22
  port = value;
23
23
  index += 1;
24
24
  continue;
25
25
  }
26
- throw new Error(`Unbekanntes Argument: ${argument} (erlaubt: --stdio, --port <n>)`);
26
+ throw new Error(`Unknown argument: ${argument} (allowed: --stdio, --port <n>)`);
27
27
  }
28
28
  return { stdio, port };
29
29
  };
@@ -31,8 +31,8 @@ const parseArguments = (argv: readonly string[]): { stdio: boolean; port: number
31
31
  try {
32
32
  if (!process.env.PRODUCT_PROFILE) {
33
33
  throw new Error(
34
- "PRODUCT_PROFILE ist nicht gesetzt. scripts/start.sh <profil> setzt das Profil; "
35
- + "für pnpm start vorher export PRODUCT_PROFILE=<profil>.",
34
+ "PRODUCT_PROFILE is not set. scripts/start.sh <profile> sets the profile; "
35
+ + "for pnpm start, run export PRODUCT_PROFILE=<profile> first.",
36
36
  );
37
37
  }
38
38
  const arguments_ = parseArguments(process.argv.slice(2));
@@ -1,11 +1,11 @@
1
- /** Eine Konfiguration nennt env("NAME") für eine Umgebungsvariable, die der Prozess nicht hat; dazu, wofür sie gebraucht wird. */
1
+ /** A configuration names env("NAME") for an environment variable the process does not have; plus what it is needed for. */
2
2
  export interface MissingEnvironment {
3
3
  readonly variable: string;
4
4
  readonly section: string;
5
5
  readonly key: string;
6
6
  }
7
7
 
8
- /** Derselbe Fehler wie bisher, nur trägt er den Namen mit, statt ihn im Satz zu verstecken. */
8
+ /** The same error as before, except that it carries the name instead of hiding it in the sentence. */
9
9
  export class MissingEnvironmentError extends Error {
10
10
  constructor(readonly missing: MissingEnvironment, message: string) {
11
11
  super(message);
@@ -23,14 +23,14 @@ const asMissingEnvironment = (value: unknown): MissingEnvironment | undefined =>
23
23
  return { variable: missing.variable, section: missing.section, key: missing.key };
24
24
  };
25
25
 
26
- /** Der Befund an einem Fehler; geprüft wird sein Inhalt, nicht seine Klasse, denn er kommt auch aus einem anderen Modul. */
26
+ /** The finding on an error; its content is checked, not its class, because it also comes from another module. */
27
27
  export const missingEnvironmentOf = (error: unknown): MissingEnvironment | undefined =>
28
28
  asMissingEnvironment((error as { missing?: unknown } | null | undefined)?.missing);
29
29
 
30
- /** Die Zeile, mit der ein Kindprozess den Befund an den weitergibt, der ihn gestartet hat; sein Text bleibt daneben stehen. */
30
+ /** The line with which a child process passes the finding on to whoever started it; its text stays alongside. */
31
31
  export const missingEnvironmentNotice = (missing: MissingEnvironment): string => NOTICE + JSON.stringify(missing);
32
32
 
33
- /** Der Befund aus einer Ausgabezeile; alles andere ist keiner. */
33
+ /** The finding from an output line; anything else is none. */
34
34
  export const parseMissingEnvironmentNotice = (line: string): MissingEnvironment | undefined => {
35
35
  if (!line.startsWith(NOTICE)) return undefined;
36
36
  try {
@@ -40,7 +40,7 @@ export const parseMissingEnvironmentNotice = (line: string): MissingEnvironment
40
40
  }
41
41
  };
42
42
 
43
- /** Was ein Prozess zusätzlich ausgibt, wenn er an einer fehlenden Umgebungsvariablen scheitert. */
43
+ /** What a process additionally prints when it fails because of a missing environment variable. */
44
44
  export const reportMissingEnvironment = (error: unknown, write: (line: string) => void): void => {
45
45
  const missing = missingEnvironmentOf(error);
46
46
  if (missing) write(missingEnvironmentNotice(missing));
@@ -3,12 +3,12 @@ const CHECK_INTERVAL_MS = 5_000;
3
3
  export interface ParentWatch {
4
4
  readonly parentPid: string | undefined;
5
5
  readonly onGone: (pid: number) => void;
6
- /** Nur für Tests: die Lebendprüfung und der Takt des Wächters. */
6
+ /** Tests only: the liveness check and the watcher's interval. */
7
7
  readonly alive?: (pid: number) => boolean;
8
8
  readonly intervalMs?: number;
9
9
  }
10
10
 
11
- /** Lebt der Prozess noch? ESRCH heißt weg, EPERM heißt lebendig unter fremdem Besitzer. */
11
+ /** Is the process still alive? ESRCH means gone, EPERM means alive under another owner. */
12
12
  export const processAlive = (pid: number): boolean => {
13
13
  try {
14
14
  process.kill(pid, 0);
@@ -18,12 +18,12 @@ export const processAlive = (pid: number): boolean => {
18
18
  }
19
19
  };
20
20
 
21
- /** Beendet den Host, sobald der Prozess aus RAGENTS_PARENT_PID verschwindet; ohne die Variable gibt es keinen Wächter. */
21
+ /** Ends the host as soon as the process from RAGENTS_PARENT_PID disappears; without the variable there is no watcher. */
22
22
  export const watchParentProcess = (watch: ParentWatch): (() => void) | undefined => {
23
23
  const given = watch.parentPid;
24
24
  if (given === undefined) return undefined;
25
25
  if (!/^\d+$/.test(given) || !Number.isSafeInteger(Number(given)) || Number(given) <= 0) {
26
- throw new Error(`RAGENTS_PARENT_PID nennt die Prozesskennung des Aufrufers; ${JSON.stringify(given)} ist keine positive ganze Zahl.`);
26
+ throw new Error(`RAGENTS_PARENT_PID names the caller's process id; ${JSON.stringify(given)} is not a positive integer.`);
27
27
  }
28
28
  const pid = Number(given);
29
29
  const alive = watch.alive ?? processAlive;
@@ -86,8 +86,8 @@ const hostModuleShim = (specifier: string, names: readonly string[]): string =>
86
86
  const HOST_READ_SOURCE = [
87
87
  `export const read = (specifier, name) => {`,
88
88
  ` const module = globalThis[${JSON.stringify(HOST_MODULES_GLOBAL)}]?.[specifier];`,
89
- ` if (module === undefined) throw new Error(\`Der Host stellt \${specifier} nicht bereit\`);`,
90
- ` if (!(name in module)) throw new Error(\`Der Host stellt \${name} aus \${specifier} nicht bereit; das Bundle ist gegen einen neueren Host gebaut\`);`,
89
+ ` if (module === undefined) throw new Error(\`The host does not provide \${specifier}\`);`,
90
+ ` if (!(name in module)) throw new Error(\`The host does not provide \${name} from \${specifier}; the bundle was built against a newer host\`);`,
91
91
  ` return module[name];`,
92
92
  `};`,
93
93
  ].join("\n");
@@ -119,15 +119,15 @@ export const pluginCodeProblems = (file: string, text: string, id: string, asset
119
119
  };
120
120
  const visit = (node: ts.Node): void => {
121
121
  if (ts.isMetaProperty(node) && node.keywordToken === ts.SyntaxKind.ImportKeyword) {
122
- report(node, "import.meta ist im Bundle nicht erlaubt; Dateien des Plugins gehen über pluginAsset(id, name) oder pluginFolder(id)");
122
+ report(node, "import.meta is not allowed in a bundle; the plugin's files go through pluginAsset(id, name) or pluginFolder(id)");
123
123
  } else if (ts.isIdentifier(node) && ["__dirname", "__filename", "createRequire"].includes(node.text)) {
124
- report(node, `${node.text} ist im Bundle nicht erlaubt; Dateien des Plugins gehen über pluginAsset(id, name) oder pluginFolder(id)`);
124
+ report(node, `${node.text} is not allowed in a bundle; the plugin's files go through pluginAsset(id, name) or pluginFolder(id)`);
125
125
  } else if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "require" && node.name.text === "resolve") {
126
- report(node, "require.resolve ist im Bundle nicht erlaubt; Dateien des Plugins gehen über pluginAsset(id, name) oder pluginFolder(id)");
126
+ report(node, "require.resolve is not allowed in a bundle; the plugin's files go through pluginAsset(id, name) or pluginFolder(id)");
127
127
  } else if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "pluginAsset") {
128
128
  const [owner, name] = node.arguments;
129
129
  if (owner && name && ts.isStringLiteralLike(owner) && ts.isStringLiteralLike(name) && owner.text === id && !coveredByAssets(assets, name.text)) {
130
- report(name, `pluginAsset nennt ${name.text}, das nicht ins Bundle kommt; unter assets in ragents-plugin.json nennen`);
130
+ report(name, `pluginAsset names ${name.text}, which does not go into the bundle; name it under assets in ragents-plugin.json`);
131
131
  }
132
132
  }
133
133
  ts.forEachChild(node, visit);
@@ -153,10 +153,10 @@ const platformProblem = (packageRoot: string): string | undefined => {
153
153
  name?: string; os?: unknown; cpu?: unknown; optionalDependencies?: Record<string, string>;
154
154
  };
155
155
  const name = manifest.name ?? path.basename(packageRoot);
156
- if (manifest.os !== undefined || manifest.cpu !== undefined) return `Das Paket ${name} ist an Betriebssystem oder Prozessor gebunden (os/cpu in package.json)`;
156
+ if (manifest.os !== undefined || manifest.cpu !== undefined) return `The package ${name} is bound to an operating system or processor (os/cpu in package.json)`;
157
157
  const platformDependencies = Object.keys(manifest.optionalDependencies ?? {}).filter((dependency) => PLATFORM_PACKAGE.test(dependency));
158
158
  if (platformDependencies.length > 0) {
159
- return `Das Paket ${name} hat plattformabhängige optionale Abhängigkeiten (${platformDependencies.join(", ")}); Natives stellt der Host bereit oder die Provisionierung holt es`;
159
+ return `The package ${name} has platform-dependent optional dependencies (${platformDependencies.join(", ")}); native code is provided by the host or fetched by the provisioning`;
160
160
  }
161
161
  return undefined;
162
162
  };
@@ -188,8 +188,8 @@ const boundaryPlugin = (
188
188
 
189
189
  /** The executor contribution loads in every process without the host's loader, the VS Code extension included. */
190
190
  const outsideContribution = (specifier: string) => ({ errors: [{
191
- text: `${specifier}: der Executor-Beitrag lädt in jedem Node-Prozess ohne die Auflösung des Hosts; er importiert nur node:*, eigene Dateien, `
192
- + "gebündelte Bibliotheken und vom Host Typen (import type), alles andere bekommt er über die Maschine",
191
+ text: `${specifier}: the executor contribution loads in every Node process without the host's resolution; it imports only node:*, its own files, `
192
+ + "bundled libraries and types from the host (import type), everything else it gets through the machine",
193
193
  }] });
194
194
 
195
195
  const crossImport = (owner: string, name: string) => {
@@ -211,7 +211,7 @@ const boundaryPlugin = (
211
211
  }));
212
212
 
213
213
  build.onResolve({ filter: /\.node$/ }, (args) => ({
214
- errors: [{ text: `${args.path} ist eine plattformabhängige Binärdatei; Natives stellt der Host bereit oder die Provisionierung holt es nach <Datenordner>/tools/${id}/` }],
214
+ errors: [{ text: `${args.path} is a platform-dependent binary; native code is provided by the host or fetched by the provisioning into <data-folder>/tools/${id}/` }],
215
215
  }));
216
216
 
217
217
  build.onResolve({ filter: /.*/ }, async (args) => {
@@ -221,35 +221,35 @@ const boundaryPlugin = (
221
221
  if (specifier.startsWith("node:") || isBuiltin(specifier)) {
222
222
  return half === "server"
223
223
  ? { path: specifier, external: true }
224
- : { errors: [{ text: `${specifier} ist ein Node-Modul und gibt es im Browser nicht` }] };
224
+ : { errors: [{ text: `${specifier} is a Node module and does not exist in the browser` }] };
225
225
  }
226
226
  if (isBare(specifier)) {
227
227
  const cross = /^@ragents\/plugins\/([^/]+)\/(.+)$/.exec(specifier);
228
228
  if (cross) {
229
229
  const [, owner, rawName] = cross as unknown as [string, string, string];
230
230
  const name = normalizedSpecifier(rawName);
231
- if (owner === id) return { errors: [{ text: `${specifier} importiert das eigene Plugin über den Paketnamen; eigene Dateien relativ importieren` }] };
231
+ if (owner === id) return { errors: [{ text: `${specifier} imports the plugin itself through the package name; import own files relatively` }] };
232
232
  const other = environment.catalog(owner);
233
- if (!other) return { errors: [{ text: `Das Plugin ${owner} aus ${specifier} liegt weder neben ${id} noch im Host` }] };
233
+ if (!other) return { errors: [{ text: `The plugin ${owner} from ${specifier} is neither next to ${id} nor in the host` }] };
234
234
  if (!other.description.exports[half].includes(name)) {
235
- return { errors: [{ text: `${owner} exportiert ${name} für die ${half}-Hälfte nicht; der Export gehört in dessen ragents-plugin.json unter exports.${half}` }] };
235
+ return { errors: [{ text: `${owner} does not export ${name} for the ${half} half; the export belongs in its ragents-plugin.json under exports.${half}` }] };
236
236
  }
237
237
  return crossImport(owner, name);
238
238
  }
239
239
  if (selfContained && (providedByHost(half, specifier) || hostOnly(specifier))) return outsideContribution(specifier);
240
240
  if (providedByHost(half, specifier)) {
241
241
  if (args.kind === "dynamic-import" && (half === "web" || !isLibrary(half, specifier))) {
242
- return { errors: [{ text: `import() von ${specifier}: ein Modul des Hosts wird statisch importiert, damit der Bau jeden Namen gegen die Host-API prüft` }] };
242
+ return { errors: [{ text: `import() of ${specifier}: a host module is imported statically so that the build checks every name against the host API` }] };
243
243
  }
244
244
  if (args.kind === "require-call" && half === "server") {
245
- return { errors: [{ text: `require(${JSON.stringify(specifier)}): der Host liefert ${specifier} nur per import; im Bundle gäbe es sonst eine zweite Kopie oder keine` }] };
245
+ return { errors: [{ text: `require(${JSON.stringify(specifier)}): the host provides ${specifier} only through import; otherwise the bundle would get a second copy or none` }] };
246
246
  }
247
247
  return half === "server"
248
248
  ? { path: specifier, external: true }
249
249
  : { path: normalizedSpecifier(specifier), namespace: HOST_NAMESPACE, sideEffects: false };
250
250
  }
251
251
  if (hostOnly(specifier)) {
252
- return { errors: [{ text: `${specifier} steht nicht in der ${half}-Liste der Host-API (apps/server/src/host-api.ts); ein Plugin bezieht vom Host nur, was dort steht` }] };
252
+ return { errors: [{ text: `${specifier} is not in the ${half} list of the host API (apps/server/src/host-api.ts); a plugin gets from the host only what is listed there` }] };
253
253
  }
254
254
  return undefined;
255
255
  }
@@ -258,19 +258,19 @@ const boundaryPlugin = (
258
258
  if (resolved.errors.length > 0) return { errors: resolved.errors };
259
259
  const owner = owningPluginFolder(resolved.path);
260
260
  if (owner === source.folder) return { path: resolved.path, sideEffects: resolved.sideEffects };
261
- if (!owner) return { errors: [{ text: `${specifier} liegt außerhalb des Plugin-Ordners (${resolved.path}); ein Plugin importiert relativ nur eigene Dateien` }] };
261
+ if (!owner) return { errors: [{ text: `${specifier} is outside the plugin folder (${resolved.path}); a plugin imports only its own files relatively` }] };
262
262
  const other = readPluginSource(owner);
263
263
  const name = exportOfFile(other, half, resolved.path);
264
264
  if (!name) {
265
265
  const relative = path.relative(owner, resolved.path).split(path.sep).join("/").replace(/\.(ts|tsx)$/, "");
266
- return { errors: [{ text: `${other.description.id} exportiert ${relative} für die ${half}-Hälfte nicht; der Export gehört in dessen ragents-plugin.json unter exports.${half}` }] };
266
+ return { errors: [{ text: `${other.description.id} does not export ${relative} for the ${half} half; the export belongs in its ragents-plugin.json under exports.${half}` }] };
267
267
  }
268
268
  return crossImport(other.description.id, name);
269
269
  });
270
270
 
271
271
  build.onLoad({ filter: /.*/, namespace: HOST_NAMESPACE }, (args) => {
272
272
  const names = environment.record.web[args.path];
273
- if (!names) return { errors: [{ text: `host-api.json kennt ${args.path} nicht; pnpm update:host-api` }] };
273
+ if (!names) return { errors: [{ text: `host-api.json does not know ${args.path}; pnpm update:host-api` }] };
274
274
  return { contents: hostModuleShim(args.path, names), loader: "js" };
275
275
  });
276
276
  build.onLoad({ filter: /.*/, namespace: HOST_VALUE_NAMESPACE }, (args) => {
@@ -293,7 +293,7 @@ const boundaryPlugin = (
293
293
  const located = LIBRARY_LOCATIONS.filter(([pattern]) => pattern.test(text)).map(([, name]) => name);
294
294
  const errors = [
295
295
  ...(platform ? [{ text: platform }] : []),
296
- ...(located.length > 0 ? [{ text: `${path.relative(packageRoot, args.path)} in ${path.basename(packageRoot)} sucht Dateien über den eigenen Ort (${located.join(", ")}); im Bundle gibt es diesen Ort nicht` }] : []),
296
+ ...(located.length > 0 ? [{ text: `${path.relative(packageRoot, args.path)} in ${path.basename(packageRoot)} locates files through its own location (${located.join(", ")}); in the bundle this location does not exist` }] : []),
297
297
  ];
298
298
  return errors.length > 0 ? { errors } : { contents: text, loader };
299
299
  });
@@ -329,7 +329,7 @@ const serverHostImports = (file: string, text: string, record: HostApiRecord): S
329
329
  const problems: string[] = [];
330
330
  const take = (specifier: string, name: string, offered: readonly string[]): void => {
331
331
  if (offered.includes(name)) names.push([normalizedSpecifier(specifier), name]);
332
- else problems.push(`${file} importiert ${name} aus ${specifier}, das die Host-API nicht anbietet (host-api.json)`);
332
+ else problems.push(`${file} imports ${name} from ${specifier}, which the host API does not offer (host-api.json)`);
333
333
  };
334
334
  for (const statement of source.statements) {
335
335
  if (ts.isExportDeclaration(statement) && statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier)) {
@@ -338,7 +338,7 @@ const serverHostImports = (file: string, text: string, record: HostApiRecord): S
338
338
  if (!offered) continue;
339
339
  const clause = statement.exportClause;
340
340
  if (clause && ts.isNamedExports(clause)) for (const element of clause.elements) take(specifier, (element.propertyName ?? element.name).text, offered);
341
- else if (!isLibrary("server", specifier)) problems.push(`${file} reicht ${specifier} ganz weiter; aus einem Modul des Hosts nur einzelne Namen importieren`);
341
+ else if (!isLibrary("server", specifier)) problems.push(`${file} re-exports ${specifier} as a whole; import only individual names from a host module`);
342
342
  continue;
343
343
  }
344
344
  if (!ts.isImportDeclaration(statement)) continue;
@@ -352,7 +352,7 @@ const serverHostImports = (file: string, text: string, record: HostApiRecord): S
352
352
  for (const element of bindings.elements) take(specifier, (element.propertyName ?? element.name).text, offered);
353
353
  } else if (bindings && ts.isNamespaceImport(bindings) && !isLibrary("server", specifier)) {
354
354
  const reads = namespaceReads(source, bindings.name);
355
- if (reads.escapes) problems.push(`${file} benutzt den Namensraum ${bindings.name.text} aus ${specifier} als Ganzes; aus einem Modul des Hosts nur einzelne Namen lesen, damit der Bau sie prüft`);
355
+ if (reads.escapes) problems.push(`${file} uses the namespace ${bindings.name.text} from ${specifier} as a whole; read only individual names from a host module so that the build checks them`);
356
356
  for (const name of new Set(reads.names)) take(specifier, name, offered);
357
357
  }
358
358
  }
@@ -461,9 +461,9 @@ const tailwindCandidates = (source: PluginSource, metafile: Metafile): readonly
461
461
 
462
462
  const copyAsset = async (from: string, to: string, name: string): Promise<void> => {
463
463
  const stats = lstatSync(from);
464
- if (stats.isSymbolicLink()) throw new Error(`Das Asset ${name} enthält eine Verknüpfung (${from}); ein Bundle enthält nur Dateien`);
464
+ if (stats.isSymbolicLink()) throw new Error(`The asset ${name} contains a link (${from}); a bundle contains only files`);
465
465
  if (stats.isDirectory()) {
466
- if (path.basename(from) === "node_modules") throw new Error(`Das Asset ${name} enthält node_modules; ein Bundle bringt keine Abhängigkeiten mit`);
466
+ if (path.basename(from) === "node_modules") throw new Error(`The asset ${name} contains node_modules; a bundle brings no dependencies`);
467
467
  await mkdir(to, { recursive: true });
468
468
  for (const entry of readdirSync(from).sort()) {
469
469
  if (!SKIPPED_ASSET_FILES.has(entry)) await copyAsset(path.join(from, entry), path.join(to, entry), name);
@@ -497,7 +497,7 @@ const buildPlugin = async (folder: string, environment: BuildEnvironment, typeEr
497
497
  in: sourceFileOf(path.join(source.folder, name))!,
498
498
  out: `exports/${name}`,
499
499
  }));
500
- if (!serverEntry) return failed(["server/index.ts fehlt; jedes Plugin hat eine Server-Hälfte mit dem Modulvertrag"]);
500
+ if (!serverEntry) return failed(["server/index.ts is missing; every plugin has a server half with the module contract"]);
501
501
  const hasWeb = webEntry !== undefined || source.description.exports.web.length > 0;
502
502
  const results = await Promise.all([
503
503
  buildHalf(source, "server", [{ in: provision ? "ragents-entry:server" : serverEntry, out: "index" }, ...exportEntries("server")], environment, assets),
@@ -511,7 +511,7 @@ const buildPlugin = async (folder: string, environment: BuildEnvironment, typeEr
511
511
  const target = path.join(environment.out, id);
512
512
  const relativeOf = (file: OutputFile): string => path.relative(target, file.path).split(path.sep).join("/");
513
513
  const strayCss = files.map(relativeOf).filter((name) => name.endsWith(".css") && name !== "web/index.css");
514
- if (strayCss.length > 0) return failed(strayCss.map((name) => `${name}: CSS gibt es nur über den Web-Einstieg (web/index.css)`));
514
+ if (strayCss.length > 0) return failed(strayCss.map((name) => `${name}: CSS exists only through the web entry (web/index.css)`));
515
515
  const serverImports = files.filter((file) => relativeOf(file).startsWith("server/") && file.path.endsWith(".js"))
516
516
  .map((file) => serverHostImports(relativeOf(file), file.text, environment.record));
517
517
  const importProblems = serverImports.flatMap((imports) => imports.problems);
@@ -573,7 +573,7 @@ interface HostBuildContext {
573
573
  const hostContextFor = (folders: readonly string[], options: Pick<PluginBuildOptions, "out" | "root">): HostBuildContext => {
574
574
  const ids = folders.map((folder) => path.basename(path.resolve(folder)));
575
575
  const duplicate = ids.find((id, index) => ids.indexOf(id) !== index);
576
- if (duplicate) throw new Error(`Das Plugin ${duplicate} ist mehrfach genannt`);
576
+ if (duplicate) throw new Error(`The plugin ${duplicate} is named more than once`);
577
577
  const root = options.root ?? hostRoot();
578
578
  return { root, record: checkedHostApiRecord(root), out: path.resolve(options.out) };
579
579
  };
@@ -654,7 +654,7 @@ export const watchPlugins = async (
654
654
  running = current;
655
655
  pending.add(current);
656
656
  };
657
- // Beim Start nur Veraltetes, damit ein Server, der gerade mit diesen Bundles startet, keine getauschten Dateien sieht.
657
+ // At startup only outdated ones, so that a server that is just starting with these bundles sees no swapped files.
658
658
  run(true);
659
659
  watchers.push(watch(folder, { recursive: true }, (_event, name) => {
660
660
  const changed = name ? path.join(folder, name.toString()) : folder;
@@ -23,7 +23,7 @@ const parsedConfig = (file: string): ts.ParsedCommandLine => {
23
23
  throw new Error(ts.flattenDiagnosticMessageText(diagnostic.messageText, " "));
24
24
  },
25
25
  });
26
- if (!parsed) throw new Error(`${file} ist keine gültige tsconfig`);
26
+ if (!parsed) throw new Error(`${file} is not a valid tsconfig`);
27
27
  return parsed;
28
28
  };
29
29
 
@@ -40,7 +40,7 @@ export const typeViews = (half: HostApiHalf, root = hostRoot()): ReadonlyMap<str
40
40
  const importer = path.join(root, place.importer);
41
41
  const resolved = hostApiModules(half).map((specifier) => {
42
42
  const module = ts.resolveModuleName(specifier, importer, options, ts.sys).resolvedModule;
43
- if (!module) throw new Error(`${specifier} ist für die ${half}-Hälfte nicht auflösbar`);
43
+ if (!module) throw new Error(`${specifier} cannot be resolved for the ${half} half`);
44
44
  return { specifier, module };
45
45
  });
46
46
  const probe = path.join(path.dirname(importer), "__host-api-probe__.ts");
@@ -55,7 +55,7 @@ export const typeViews = (half: HostApiHalf, root = hostRoot()): ReadonlyMap<str
55
55
  const imports = program.getSourceFile(probe)!.statements.filter(ts.isImportDeclaration);
56
56
  return new Map(resolved.map(({ specifier, module }, index) => {
57
57
  const symbol = checker.getSymbolAtLocation(imports[index]!.moduleSpecifier);
58
- if (!symbol) throw new Error(`${specifier}: ${module.resolvedFileName} hat kein Modulsymbol`);
58
+ if (!symbol) throw new Error(`${specifier}: ${module.resolvedFileName} has no module symbol`);
59
59
  const values = checker.getExportsOfModule(symbol).filter((exported) => {
60
60
  const target = exported.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(exported) : exported;
61
61
  return (target.flags & ts.SymbolFlags.Value) !== 0;
@@ -120,7 +120,7 @@ const webRuntimeNames = async (specifiers: readonly string[], root: string): Pro
120
120
  const document = { createElement: () => ({}) };
121
121
  vm.runInNewContext(code, { module, exports: module.exports, console, setTimeout, clearTimeout, queueMicrotask, TextEncoder, TextDecoder, URL, document });
122
122
  const modules = module.exports.hostModules;
123
- if (!modules) throw new Error("Das Register der Web-Hälfte liefert keine Module");
123
+ if (!modules) throw new Error("The web half's register yields no modules");
124
124
  return Object.fromEntries(Object.entries(modules).map(([specifier, namespace]) => [specifier, Object.keys(namespace)]));
125
125
  };
126
126
 
@@ -129,12 +129,12 @@ const listedNames = (half: HostApiHalf, specifier: string, view: TypeView): read
129
129
  const listed = hostApi[half][specifier]!;
130
130
  const hostCode = specifier.startsWith("@ragents/");
131
131
  if (listed === LIBRARY) {
132
- if (hostCode) throw new Error(`${specifier} ist Code des Hosts, keine Bibliothek; host-api.ts nennt seine Namen einzeln`);
132
+ if (hostCode) throw new Error(`${specifier} is host code, not a library; host-api.ts names its names individually`);
133
133
  return LIBRARY;
134
134
  }
135
- if (!hostCode) throw new Error(`${specifier} ist eine Bibliothek; host-api.ts gibt sie ganz frei`);
135
+ if (!hostCode) throw new Error(`${specifier} is a library; host-api.ts releases it as a whole`);
136
136
  const missing = listed.filter((name) => !view.names.includes(name));
137
- if (missing.length > 0) throw new Error(`host-api.ts nennt für ${specifier} ${missing.join(", ")}, das Modul exportiert es nicht als Wert`);
137
+ if (missing.length > 0) throw new Error(`host-api.ts names ${missing.join(", ")} for ${specifier}, but the module does not export it as a value`);
138
138
  return [...listed].sort();
139
139
  };
140
140
 
@@ -25,7 +25,7 @@ const HALVES = new Set(["server", "web"]);
25
25
 
26
26
  const stringList = (value: unknown, where: string): readonly string[] => {
27
27
  if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string" || entry.length === 0)) {
28
- throw new Error(`${where} muss eine Liste von Pfaden sein`);
28
+ throw new Error(`${where} must be a list of paths`);
29
29
  }
30
30
  return value as readonly string[];
31
31
  };
@@ -33,7 +33,7 @@ const stringList = (value: unknown, where: string): readonly string[] => {
33
33
  /** A relative path inside the plugin folder, written with forward slashes and without leaving the folder. */
34
34
  const insidePath = (value: string, where: string): string => {
35
35
  if (path.isAbsolute(value) || value.includes("\\") || value.split("/").some((part) => part === ".." || part === "." || part === "")) {
36
- throw new Error(`${where}: ${value} ist kein relativer Pfad im Plugin-Ordner`);
36
+ throw new Error(`${where}: ${value} is not a relative path in the plugin folder`);
37
37
  }
38
38
  return value;
39
39
  };
@@ -46,42 +46,42 @@ export const sourceFileOf = (stem: string): string | undefined =>
46
46
  export const readPluginDescription = (folder: string): PluginDescription => {
47
47
  const file = path.join(folder, PLUGIN_DESCRIPTION_FILE);
48
48
  if (!existsSync(file)) {
49
- throw new Error(`${folder} hat keine ${PLUGIN_DESCRIPTION_FILE}; ein Plugin beschreibt sich dort mit { "id": "${path.basename(folder)}" }`);
49
+ throw new Error(`${folder} has no ${PLUGIN_DESCRIPTION_FILE}; a plugin describes itself there with { "id": "${path.basename(folder)}" }`);
50
50
  }
51
51
  const raw = JSON.parse(readFileSync(file, "utf8")) as unknown;
52
- if (typeof raw !== "object" || raw === null || Array.isArray(raw)) throw new Error(`${file} muss ein Objekt enthalten`);
52
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) throw new Error(`${file} must contain an object`);
53
53
  const record = raw as Record<string, unknown>;
54
54
  const unknown = Object.keys(record).filter((key) => !DESCRIPTION_KEYS.has(key));
55
- if (unknown.length > 0) throw new Error(`${file}: unbekannte Felder ${unknown.join(", ")}; erlaubt sind id, exports und assets`);
55
+ if (unknown.length > 0) throw new Error(`${file}: unknown fields ${unknown.join(", ")}; allowed are id, exports and assets`);
56
56
  const id = record.id;
57
- if (typeof id !== "string" || !ID_PATTERN.test(id)) throw new Error(`${file}: id muss eine Kennung wie acme.tickets sein`);
58
- if (id !== path.basename(folder)) throw new Error(`${file}: die Kennung ${id} weicht vom Ordnernamen ${path.basename(folder)} ab`);
57
+ if (typeof id !== "string" || !ID_PATTERN.test(id)) throw new Error(`${file}: id must be an id such as acme.tickets`);
58
+ if (id !== path.basename(folder)) throw new Error(`${file}: the id ${id} differs from the folder name ${path.basename(folder)}`);
59
59
  const exportsValue = record.exports ?? {};
60
60
  if (typeof exportsValue !== "object" || exportsValue === null || Array.isArray(exportsValue)) {
61
- throw new Error(`${file}: exports muss ein Objekt mit server und web sein`);
61
+ throw new Error(`${file}: exports must be an object with server and web`);
62
62
  }
63
63
  const halves = Object.keys(exportsValue).filter((half) => !HALVES.has(half));
64
- if (halves.length > 0) throw new Error(`${file}: exports kennt nur server und web, nicht ${halves.join(", ")}`);
64
+ if (halves.length > 0) throw new Error(`${file}: exports knows only server and web, not ${halves.join(", ")}`);
65
65
  const exportsOf = (half: HostApiHalf): readonly string[] => {
66
66
  const names = stringList((exportsValue as Record<string, unknown>)[half] ?? [], `${file}: exports.${half}`)
67
67
  .map((name) => insidePath(name, `${file}: exports.${half}`));
68
68
  for (const name of names) {
69
- if (/\.(js|ts|tsx|mjs)$/.test(name)) throw new Error(`${file}: der Export ${name} wird ohne Endung genannt`);
70
- if (!sourceFileOf(path.join(folder, name))) throw new Error(`${file}: der Export ${name} für ${half} hat keine Quelldatei`);
69
+ if (/\.(js|ts|tsx|mjs)$/.test(name)) throw new Error(`${file}: the export ${name} is named without an extension`);
70
+ if (!sourceFileOf(path.join(folder, name))) throw new Error(`${file}: the export ${name} for ${half} has no source file`);
71
71
  }
72
72
  return names;
73
73
  };
74
74
  const assets = stringList(record.assets ?? [], `${file}: assets`).map((name) => insidePath(name, `${file}: assets`));
75
75
  for (const name of assets) {
76
- if (RESERVED_ASSET_ROOTS.has(name.split("/")[0]!)) throw new Error(`${file}: das Asset ${name} liegt unter ${name.split("/")[0]}, das schreibt das Bauwerkzeug selbst`);
77
- if (!existsSync(path.join(folder, name))) throw new Error(`${file}: das Asset ${name} fehlt im Plugin-Ordner`);
76
+ if (RESERVED_ASSET_ROOTS.has(name.split("/")[0]!)) throw new Error(`${file}: the asset ${name} is under ${name.split("/")[0]}, which the build tool writes itself`);
77
+ if (!existsSync(path.join(folder, name))) throw new Error(`${file}: the asset ${name} is missing in the plugin folder`);
78
78
  }
79
79
  return { id, exports: { server: exportsOf("server"), web: exportsOf("web") }, assets };
80
80
  };
81
81
 
82
82
  export const readPluginSource = (folder: string): PluginSource => {
83
83
  const given = path.resolve(folder);
84
- if (!statSync(given, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`${given} ist kein Ordner`);
84
+ if (!statSync(given, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`${given} is not a folder`);
85
85
  const real = realpathSync.native(given);
86
86
  return { folder: real, description: readPluginDescription(real) };
87
87
  };
@@ -110,7 +110,7 @@ export const pluginCatalog = (folders: readonly string[], builtIn = pluginsRoot)
110
110
  if (known.has(id)) return known.get(id);
111
111
  const found = roots.map((root) => path.join(root, id)).filter((folder) => existsSync(path.join(folder, PLUGIN_DESCRIPTION_FILE)));
112
112
  const distinct = [...new Set(found.map((folder) => realpathSync.native(folder)))];
113
- if (distinct.length > 1) throw new Error(`Das Plugin ${id} gibt es mehrfach: ${distinct.join(", ")}`);
113
+ if (distinct.length > 1) throw new Error(`The plugin ${id} exists more than once: ${distinct.join(", ")}`);
114
114
  const source = distinct[0] ? readPluginSource(distinct[0]) : undefined;
115
115
  known.set(id, source);
116
116
  return source;
@@ -26,7 +26,7 @@ const configOptions = (file: string): ts.CompilerOptions => {
26
26
  throw new Error(ts.flattenDiagnosticMessageText(diagnostic.messageText, " "));
27
27
  },
28
28
  });
29
- if (!parsed) throw new Error(`${file} ist keine gültige tsconfig`);
29
+ if (!parsed) throw new Error(`${file} is not a valid tsconfig`);
30
30
  return parsed.options;
31
31
  };
32
32
 
@@ -26,7 +26,7 @@ const libraryDirectory = (name: string): string => {
26
26
  if (existsSync(file) && (JSON.parse(readFileSync(file, "utf8")) as { name?: string }).name === name) return directory;
27
27
  directory = path.dirname(directory);
28
28
  }
29
- throw new Error(`Das installierte Paket ${name} besitzt keine Paketmetadaten.`);
29
+ throw new Error(`The installed package ${name} has no package metadata.`);
30
30
  }
31
31
  };
32
32
  const json = (value: unknown): string => `${JSON.stringify(value, null, 2)}\n`;
@@ -34,7 +34,7 @@ const link = async (source: string, target: string): Promise<void> => {
34
34
  await mkdir(path.dirname(target), { recursive: true });
35
35
  await symlink(source, target).catch(async (error: NodeJS.ErrnoException) => {
36
36
  if (error.code !== "EEXIST") throw error;
37
- if (await realpath(target) !== await realpath(source)) throw new Error(`Die vorbereitete Bibliothek ${target} hat einen anderen Ursprung.`);
37
+ if (await realpath(target) !== await realpath(source)) throw new Error(`The prepared library ${target} has a different origin.`);
38
38
  });
39
39
  };
40
40
  export const prepareAppDependencies = async (directory: string): Promise<void> => {
@@ -96,15 +96,15 @@ export function createTestContextWithContracts(options, contracts) {
96
96
  const controller = new AbortController();
97
97
  const statePort = {read:()=>structuredClone(state),replace:value=>{state=structuredClone(value);}};
98
98
  const declared = new Map(contracts.map(contract=>[contract.id,contract]));
99
- for (const name of Object.keys(options.functions ?? {})) if (!declared.has(name)) throw new Error("Unbekannte Testfunktion "+name);
99
+ for (const name of Object.keys(options.functions ?? {})) if (!declared.has(name)) throw new Error("Unknown test function "+name);
100
100
  const capabilities = {descriptors:()=>contracts,call:async(name,input)=>{
101
101
  const contract=declared.get(name);
102
102
  const call=options.functions?.[name];
103
- if(!call)throw new Error("Im Test fehlt die Funktion "+name);
104
- if(!Value.Check(contract.schema,input))throw new Error("Testeingabe verletzt den Vertrag von "+name+": "+schemaComplaints(contract.schema,input));
103
+ if(!call)throw new Error("The test is missing the function "+name);
104
+ if(!Value.Check(contract.schema,input))throw new Error("Test input violates the contract of "+name+": "+schemaComplaints(contract.schema,input));
105
105
  const result=await call(input);
106
- assertJsonValue(result,"Testantwort von "+name);
107
- if(!Value.Check(contract.resultSchema,result))throw new Error("Testantwort verletzt den Vertrag von "+name+": "+schemaComplaints(contract.resultSchema,result,"result"));
106
+ assertJsonValue(result,"Test response of "+name);
107
+ if(!Value.Check(contract.resultSchema,result))throw new Error("Test response violates the contract of "+name+": "+schemaComplaints(contract.resultSchema,result,"result"));
108
108
  return result;
109
109
  }};
110
110
  return {...createRunContext({runId:"test",invocationId:"test",invocationKind:"tool",principal:{id:"test",kind:"service"},state:statePort,capabilities,log:()=>{},signal:controller.signal}),
@@ -163,7 +163,7 @@ const workflowSdkFiles = () => workflowSdk ??= (async () => {
163
163
  const diagnostics = ts.getPreEmitDiagnostics(program);
164
164
  if (diagnostics.length) throw new Error(diagnostics.map(diagnostic => ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")).join("\n"));
165
165
  const emitted = program.emit(undefined, (name, content) => { if (name.endsWith("index.d.ts")) declarations = content; if (name.endsWith("prompt-reader.d.ts")) promptDeclarations = content; });
166
- if (emitted.emitSkipped || !declarations) throw new Error("Workflow-SDK-Deklarationen konnten nicht erzeugt werden.");
166
+ if (emitted.emitSkipped || !declarations) throw new Error("Workflow SDK declarations could not be generated.");
167
167
  const runtime = await build({ entryPoints: [workflowSource], bundle: true, write: false, platform: "neutral", format: "esm", target: "es2022", logLevel: "silent" });
168
168
  const promptRuntime = await build({ entryPoints: [promptSource], bundle: true, write: false, platform: "node", format: "esm", target: "es2022", logLevel: "silent" });
169
169
  return { javaScript: runtime.outputFiles[0]!.text, declarations, promptReader: promptRuntime.outputFiles[0]!.text, promptDeclarations };
@@ -215,10 +215,10 @@ export const prepareAppProject = async (directory: string): Promise<void> => {
215
215
 
216
216
  export const readAppPackage = async (directory: string): Promise<AppPackage> => {
217
217
  const pkg = JSON.parse(await readFile(path.join(directory, "package.json"), "utf8")) as Record<string, unknown>;
218
- if (!Value.Check(appPackageSchema, pkg.ragents)) throw new Error(`package.json.ragents ist ungültig: ${schemaComplaints(appPackageSchema, pkg.ragents, "ragents")}`);
219
- if (!pkg.ragents.backend && !pkg.ragents.views?.length) throw new Error("Ein Actor-Paket braucht ein Backend oder mindestens eine Ansicht.");
218
+ if (!Value.Check(appPackageSchema, pkg.ragents)) throw new Error(`package.json.ragents is invalid: ${schemaComplaints(appPackageSchema, pkg.ragents, "ragents")}`);
219
+ if (!pkg.ragents.backend && !pkg.ragents.views?.length) throw new Error("An actor package needs a backend or at least one view.");
220
220
  const views = pkg.ragents.views ?? [];
221
- if (new Set(views.map((view) => view.id)).size !== views.length) throw new Error("Ansichtsnamen müssen eindeutig sein.");
221
+ if (new Set(views.map((view) => view.id)).size !== views.length) throw new Error("View names must be unique.");
222
222
  return pkg.ragents;
223
223
  };
224
224
 
@@ -228,7 +228,7 @@ export const projectSourceFiles = async (directory: string): Promise<{ path: str
228
228
  for (const entry of await readdir(path.join(directory, relative), { withFileTypes: true })) {
229
229
  if (["node_modules", ".build", "dist", ".git"].includes(entry.name)) continue;
230
230
  const name = path.join(relative, entry.name);
231
- if (entry.isSymbolicLink()) throw new Error(`App-Quelldateien dürfen keine Symlinks enthalten: ${name}`);
231
+ if (entry.isSymbolicLink()) throw new Error(`App source files must not contain symlinks: ${name}`);
232
232
  if (entry.isDirectory()) await walk(name);
233
233
  else if (entry.isFile()) files.push({ path: name, content: await readFile(path.join(directory, name), "utf8") });
234
234
  }
@@ -255,18 +255,18 @@ export const compileAppBackend = async (options: {
255
255
  }): Promise<{ contract: AppContract; javaScript: string; hash: string }> => {
256
256
  const signal = AbortSignal.any([...(options.signal ? [options.signal] : []), AbortSignal.timeout(15_000)]);
257
257
  const entry = path.resolve(options.directory, options.backend);
258
- if (!entry.startsWith(`${options.directory}${path.sep}`)) throw new Error("Der Backend-Einstieg liegt außerhalb der App.");
258
+ if (!entry.startsWith(`${options.directory}${path.sep}`)) throw new Error("The backend entry lies outside the app.");
259
259
  const result = await build({
260
260
  stdin: { contents: `import actor from ${JSON.stringify(`./${options.backend}`)};
261
261
  export const describe = () => {
262
- for (const name of Object.keys(actor.contract.functions ?? {})) if (typeof actor.functions?.[name] !== 'function') throw new Error('Fehlende Funktion ' + name);
263
- if (Boolean(actor.contract.input) !== (typeof actor.onInput === 'function')) throw new Error('input und onInput müssen gemeinsam vorhanden sein.');
262
+ for (const name of Object.keys(actor.contract.functions ?? {})) if (typeof actor.functions?.[name] !== 'function') throw new Error('Missing function ' + name);
263
+ if (Boolean(actor.contract.input) !== (typeof actor.onInput === 'function')) throw new Error('input and onInput must be present together.');
264
264
  return JSON.parse(JSON.stringify(actor.contract));
265
265
  };
266
266
  export const handle = (request, context) => {
267
- if (request.kind === 'input') { if (!actor.onInput) throw new Error('Dieser Actor verarbeitet keine Eingaben.'); return actor.onInput(request.input, context); }
267
+ if (request.kind === 'input') { if (!actor.onInput) throw new Error('This actor does not process input.'); return actor.onInput(request.input, context); }
268
268
  const handler = actor.functions[request.functionId];
269
- if (typeof handler !== 'function') throw new Error('Unbekannte Actor-Funktion ' + request.functionId);
269
+ if (typeof handler !== 'function') throw new Error('Unknown actor function ' + request.functionId);
270
270
  return handler(request.input, context);
271
271
  };`, resolveDir: options.directory, sourcefile: "actor-entry.ts", loader: "ts" },
272
272
  absWorkingDir: options.directory, platform: "node", format: "esm", target: "node22", bundle: true, packages: "external", write: false,
@@ -277,7 +277,7 @@ export const handle = (request, context) => {
277
277
  program: { entry: "server.mjs", files: [{ fileName: "server.mjs", text: javaScript }], exportName: "describe" },
278
278
  input: {}, state: {}, cwd: options.directory,
279
279
  context: { runId: options.runId, invocationId: "app-contract", invocationKind: "tool", principal: { id: "app-build", kind: "service" }, capabilities: [] },
280
- }, { signal, call: async () => { throw new Error("Beim Laden des App-Vertrags sind Run-Aufrufe nicht verfügbar."); }, log: () => undefined });
281
- if (!Value.Check(appContractSchema, described.result)) throw new Error(`Der Backend-Export braucht defineActor({state, functions, input?}, {functions, onInput?}) mit gültigen Aktionsverträgen: ${schemaComplaints(appContractSchema, described.result, "contract")}`);
280
+ }, { signal, call: async () => { throw new Error("Run calls are not available while loading the app contract."); }, log: () => undefined });
281
+ if (!Value.Check(appContractSchema, described.result)) throw new Error(`The backend export needs defineActor({state, functions, input?}, {functions, onInput?}) with valid action contracts: ${schemaComplaints(appContractSchema, described.result, "contract")}`);
282
282
  return { contract: described.result, javaScript, hash: canonicalHash({ javaScript }) };
283
283
  };