@schlenkr/ragents 0.1.9 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (749) hide show
  1. package/apps/server/package.json +1 -1
  2. package/apps/server/src/access-projection.ts +9 -39
  3. package/apps/server/src/access-service.ts +3 -3
  4. package/apps/server/src/access-session.ts +19 -19
  5. package/apps/server/src/api/contracts.ts +32 -29
  6. package/apps/server/src/api/core-methods.ts +21 -19
  7. package/apps/server/src/api/delivery.ts +2 -2
  8. package/apps/server/src/api/reference.ts +27 -27
  9. package/apps/server/src/api/rights.ts +18 -18
  10. package/apps/server/src/chat-handler.ts +5 -5
  11. package/apps/server/src/config-definition.ts +37 -10
  12. package/apps/server/src/config-file.ts +49 -49
  13. package/apps/server/src/config.ts +2 -0
  14. package/apps/server/src/data-directory.ts +2 -2
  15. package/apps/server/src/external-access.ts +1 -1
  16. package/apps/server/src/folder-install.ts +1 -1
  17. package/apps/server/src/help-files.ts +1 -1
  18. package/apps/server/src/host-api.json +8 -1
  19. package/apps/server/src/host-api.ts +3 -2
  20. package/apps/server/src/host-record.ts +3 -3
  21. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  22. package/apps/server/src/host-version.ts +17 -17
  23. package/apps/server/src/host-web.ts +5 -5
  24. package/apps/server/src/main.ts +6 -6
  25. package/apps/server/src/missing-environment.ts +6 -6
  26. package/apps/server/src/parent-watch.ts +4 -4
  27. package/apps/server/src/plugin-build/build.ts +31 -31
  28. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  29. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  30. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  31. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  32. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  33. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  34. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  35. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  36. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  37. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  38. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  39. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  40. package/apps/server/src/plugin-support/http.ts +2 -2
  41. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  42. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  43. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  44. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  45. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  46. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  47. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  48. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  49. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  50. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  51. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  52. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  53. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  54. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  55. package/apps/server/src/plugin-support/process-sandbox.ts +48 -47
  56. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  57. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  58. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  59. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  60. package/apps/server/src/plugin-support/prompt.ts +1 -1
  61. package/apps/server/src/plugin-support/provision.ts +8 -8
  62. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  63. package/apps/server/src/plugin-support/skills.ts +18 -18
  64. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  65. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  66. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  67. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  68. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  69. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  70. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  71. package/apps/server/src/plugin-support/zip.ts +7 -7
  72. package/apps/server/src/profile/bundle-manifest.ts +17 -17
  73. package/apps/server/src/profile/compose.ts +12 -7
  74. package/apps/server/src/profile/plugin-discovery.ts +12 -12
  75. package/apps/server/src/profile/provisioning.ts +5 -5
  76. package/apps/server/src/profile-target.ts +10 -10
  77. package/apps/server/src/protocol.ts +2 -2
  78. package/apps/server/src/provider.ts +63 -58
  79. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  80. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  81. package/apps/server/src/ragents/coordinator.ts +2 -2
  82. package/apps/server/src/ragents/engine.ts +25 -24
  83. package/apps/server/src/ragents/global-chat.ts +14 -8
  84. package/apps/server/src/ragents/host-services.ts +6 -3
  85. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  86. package/apps/server/src/ragents/run-owner.ts +2 -2
  87. package/apps/server/src/ragents/session.ts +49 -49
  88. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  89. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  90. package/apps/server/src/rpc/dispatcher.ts +19 -19
  91. package/apps/server/src/rpc/http-transport.ts +11 -11
  92. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  93. package/apps/server/src/run-preparation-input.ts +5 -5
  94. package/apps/server/src/run-preparation.ts +24 -24
  95. package/apps/server/src/run-transfer.ts +39 -39
  96. package/apps/server/src/server.ts +51 -49
  97. package/apps/server/src/settings.ts +1 -1
  98. package/apps/server/src/startup.ts +3 -3
  99. package/apps/server/src/title-compactor.ts +9 -9
  100. package/apps/server/src/title-settings.ts +3 -3
  101. package/apps/server/src/web-bundles.ts +2 -2
  102. package/apps/server/src/web-stylesheet.ts +2 -2
  103. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-xXXhTDbh.js → highlighted-body-KPVGNVTW-BfNSGxjB.js} +1 -1
  104. package/apps/web/dist/assets/main-D6bsKcIK.js +11 -0
  105. package/apps/web/dist/assets/mermaid-HWGCJPDP-DROEqEeg.js +608 -0
  106. package/apps/web/dist/assets/runPanel-Dumuuqry.js +21 -0
  107. package/apps/web/dist/help/guide-access.html +5 -5
  108. package/apps/web/dist/help/guide-access.md +2 -2
  109. package/apps/web/dist/help/guide-clients.html +64 -55
  110. package/apps/web/dist/help/guide-clients.md +62 -52
  111. package/apps/web/dist/help/guide-distributed.html +12 -7
  112. package/apps/web/dist/help/guide-distributed.md +9 -4
  113. package/apps/web/dist/help/guide-functions.html +3 -3
  114. package/apps/web/dist/help/guide-getting-started.html +24 -15
  115. package/apps/web/dist/help/guide-getting-started.md +22 -12
  116. package/apps/web/dist/help/guide-ideas.html +3 -3
  117. package/apps/web/dist/help/guide-plugins.html +5 -4
  118. package/apps/web/dist/help/guide-plugins.md +2 -1
  119. package/apps/web/dist/help/guide-programs.html +3 -3
  120. package/apps/web/dist/help/guide-runtime.html +6 -6
  121. package/apps/web/dist/help/guide-runtime.md +3 -3
  122. package/apps/web/dist/help/guide.html +3 -3
  123. package/apps/web/dist/help/index.html +1997 -942
  124. package/apps/web/dist/help/mini-app.css +30 -0
  125. package/apps/web/dist/help/mini-app.js +14 -14
  126. package/apps/web/dist/host-web.json +90 -90
  127. package/apps/web/dist/index.html +3 -3
  128. package/apps/web/dist/run-panel.html +3 -3
  129. package/apps/web/package.json +1 -1
  130. package/apps/web/src/AccessContext.tsx +15 -15
  131. package/apps/web/src/App.tsx +13 -13
  132. package/apps/web/src/DiffCode.tsx +2 -2
  133. package/apps/web/src/HelpDialog.tsx +3 -3
  134. package/apps/web/src/Overview.tsx +13 -13
  135. package/apps/web/src/PluginActivation.ts +1 -1
  136. package/apps/web/src/PluginChat.tsx +15 -15
  137. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  138. package/apps/web/src/PluginRegistry.tsx +44 -44
  139. package/apps/web/src/RunPreparationChat.tsx +11 -11
  140. package/apps/web/src/RunStore.ts +1 -1
  141. package/apps/web/src/SessionList.tsx +14 -14
  142. package/apps/web/src/SettingsModal.tsx +112 -112
  143. package/apps/web/src/StartOptions.tsx +11 -11
  144. package/apps/web/src/StartSelection.tsx +11 -11
  145. package/apps/web/src/StartTiles.tsx +8 -8
  146. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  147. package/apps/web/src/ThemeSettings.tsx +8 -8
  148. package/apps/web/src/TitleModelSettings.tsx +13 -13
  149. package/apps/web/src/WorkspacePanel.tsx +9 -9
  150. package/apps/web/src/access-session.ts +4 -4
  151. package/apps/web/src/access-token.ts +5 -5
  152. package/apps/web/src/actor-conversation.ts +3 -3
  153. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  154. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  155. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  156. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  157. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  158. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  159. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  160. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  161. package/apps/web/src/api.ts +7 -7
  162. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  163. package/apps/web/src/chat/chat-target.ts +3 -3
  164. package/apps/web/src/chat/requests.ts +2 -2
  165. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  166. package/apps/web/src/chat-view-settings.tsx +5 -6
  167. package/apps/web/src/diff-view.css +1 -1
  168. package/apps/web/src/highlighting.css +1 -1
  169. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  170. package/apps/web/src/lib/labels.ts +6 -6
  171. package/apps/web/src/main.tsx +4 -4
  172. package/apps/web/src/offered-machines.ts +2 -2
  173. package/apps/web/src/page-opener.tsx +1 -1
  174. package/apps/web/src/panel/ConnectionsPage.tsx +26 -23
  175. package/apps/web/src/panel/LoginForm.tsx +6 -6
  176. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  177. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  178. package/apps/web/src/panel/PanelPage.tsx +1 -1
  179. package/apps/web/src/panel/RunLine.tsx +4 -4
  180. package/apps/web/src/panel/RunsPage.tsx +15 -15
  181. package/apps/web/src/panel/StartPage.tsx +29 -26
  182. package/apps/web/src/panel/connection-state.ts +9 -9
  183. package/apps/web/src/panel/contract.ts +34 -27
  184. package/apps/web/src/panel.tsx +1 -1
  185. package/apps/web/src/plugin-bootstrap.ts +5 -5
  186. package/apps/web/src/product/ModelControl.tsx +3 -3
  187. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  188. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  189. package/apps/web/src/product/model-settings.ts +2 -2
  190. package/apps/web/src/rpc/client.ts +16 -16
  191. package/apps/web/src/rpc.ts +1 -1
  192. package/apps/web/src/run-overview.ts +1 -1
  193. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  194. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  195. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  196. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  197. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  198. package/apps/web/src/run-panel/clipboard.ts +3 -3
  199. package/apps/web/src/run-panel/host-contract.ts +5 -5
  200. package/apps/web/src/run-panel/host.ts +15 -15
  201. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  202. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  203. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  204. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  205. package/apps/web/src/run-panel.tsx +4 -4
  206. package/apps/web/src/run-preparation.ts +2 -2
  207. package/apps/web/src/run-view.ts +3 -3
  208. package/apps/web/src/settings-contributions.ts +32 -32
  209. package/apps/web/src/theme.ts +9 -9
  210. package/apps/web/src/title-model-settings.ts +6 -6
  211. package/apps/web/src/ui/ListDetail.tsx +9 -9
  212. package/apps/web/src/ui/dialog.tsx +2 -2
  213. package/apps/web/src/ui/modal-controller.ts +3 -3
  214. package/apps/web/src/ui/modal.tsx +2 -2
  215. package/apps/web/src/ui/popover.tsx +1 -1
  216. package/apps/web/src/ui/relative-time.ts +8 -8
  217. package/apps/web/src/ui/startup-notice.tsx +2 -2
  218. package/apps/web/src/ui/state-icon.tsx +1 -1
  219. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  220. package/apps/web/src/ui/stop-button.tsx +2 -2
  221. package/bundles/ragents.activity/ragents-bundle.json +2 -2
  222. package/bundles/ragents.activity/web/classes.json +1 -1
  223. package/bundles/ragents.activity/web/index.js +1 -1
  224. package/bundles/ragents.activity/web/index.js.map +2 -2
  225. package/bundles/ragents.actor-programs/ragents-bundle.json +2 -2
  226. package/bundles/ragents.actor-programs/server/index.js +256 -228
  227. package/bundles/ragents.actor-programs/server/index.js.map +4 -4
  228. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  229. package/bundles/ragents.actor-programs/web/index.js +1 -1
  230. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  231. package/bundles/ragents.ask/ragents-bundle.json +2 -4
  232. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  233. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  234. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  235. package/bundles/ragents.ask/server/index.js +23 -23
  236. package/bundles/ragents.ask/server/index.js.map +2 -2
  237. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  238. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  239. package/bundles/ragents.ask/web/chunks/{chunk-V7W3QDVS.js → chunk-IQBHK7MV.js} +2 -2
  240. package/bundles/ragents.ask/web/chunks/{chunk-V7W3QDVS.js.map → chunk-IQBHK7MV.js.map} +4 -4
  241. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  242. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  243. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  245. package/bundles/ragents.ask/web/classes.json +1 -1
  246. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  247. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  248. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  249. package/bundles/ragents.ask/web/index.js +1 -1
  250. package/bundles/ragents.ask/web/index.js.map +4 -4
  251. package/bundles/ragents.browser/executor/index.mjs +35 -35
  252. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  253. package/bundles/ragents.browser/ragents-bundle.json +2 -2
  254. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  255. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  256. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  257. package/bundles/ragents.browser/server/index.js +31 -31
  258. package/bundles/ragents.browser/server/index.js.map +2 -2
  259. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  260. package/bundles/ragents.documents/prompt.hbs +1 -1
  261. package/bundles/ragents.documents/ragents-bundle.json +2 -2
  262. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  263. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  264. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  265. package/bundles/ragents.documents/server/index.js +26 -26
  266. package/bundles/ragents.documents/server/index.js.map +2 -2
  267. package/bundles/ragents.documents/web/classes.json +1 -1
  268. package/bundles/ragents.documents/web/index.js +1 -1
  269. package/bundles/ragents.documents/web/index.js.map +3 -3
  270. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  271. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  272. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +2 -2
  273. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  274. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  275. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  276. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  277. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  278. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +2 -2
  280. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  281. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  282. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  283. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  284. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  285. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  286. package/bundles/ragents.lsp-typescript/ragents-bundle.json +2 -2
  287. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  288. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  289. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  290. package/bundles/ragents.model-relay/ragents-bundle.json +7 -3
  291. package/bundles/ragents.model-relay/server/index.js +25 -21
  292. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  293. package/bundles/ragents.orchestration/ragents-bundle.json +2 -2
  294. package/bundles/ragents.orchestration/server/index.js +28 -28
  295. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  296. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  297. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  300. package/bundles/ragents.orchestration/web/classes.json +1 -1
  301. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  302. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  303. package/bundles/ragents.orchestration/web/index.js +8 -8
  304. package/bundles/ragents.orchestration/web/index.js.map +3 -3
  305. package/bundles/ragents.overseer/ragents-bundle.json +2 -2
  306. package/bundles/ragents.overseer/server/index.js +99 -99
  307. package/bundles/ragents.overseer/server/index.js.map +2 -2
  308. package/bundles/ragents.overseer/web/classes.json +1 -1
  309. package/bundles/ragents.overseer/web/index.js +1 -1
  310. package/bundles/ragents.overseer/web/index.js.map +2 -2
  311. package/bundles/ragents.processes/ragents-bundle.json +2 -2
  312. package/bundles/ragents.processes/server/index.js +11 -11
  313. package/bundles/ragents.processes/server/index.js.map +2 -2
  314. package/bundles/ragents.processes/web/classes.json +1 -1
  315. package/bundles/ragents.processes/web/index.js +3 -3
  316. package/bundles/ragents.processes/web/index.js.map +2 -2
  317. package/bundles/ragents.product/ragents-bundle.json +2 -2
  318. package/bundles/ragents.product/server/index.js +12 -13
  319. package/bundles/ragents.product/server/index.js.map +2 -2
  320. package/bundles/ragents.product/web/classes.json +1 -1
  321. package/bundles/ragents.product/web/index.js +1 -1
  322. package/bundles/ragents.product/web/index.js.map +2 -2
  323. package/bundles/ragents.profile-distribution/ragents-bundle.json +2 -2
  324. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  325. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  326. package/bundles/ragents.reference/ragents-bundle.json +2 -2
  327. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  328. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  335. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  336. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  340. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  341. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  347. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  348. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  349. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  350. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  352. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  353. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  360. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  361. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  362. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  363. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  365. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  366. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  367. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  368. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  392. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  393. package/bundles/ragents.reference/web/classes.json +1 -1
  394. package/bundles/ragents.reference/web/index.js +1 -1
  395. package/bundles/ragents.reference/web/index.js.map +2 -2
  396. package/bundles/ragents.todo/ragents-bundle.json +2 -2
  397. package/bundles/ragents.todo/server/index.js +5 -5
  398. package/bundles/ragents.todo/server/index.js.map +2 -2
  399. package/bundles/ragents.todo/web/classes.json +1 -1
  400. package/bundles/ragents.todo/web/index.js +1 -1
  401. package/bundles/ragents.todo/web/index.js.map +2 -2
  402. package/bundles/ragents.transcript/ragents-bundle.json +2 -2
  403. package/bundles/ragents.transcript/server/index.js +11 -11
  404. package/bundles/ragents.transcript/server/index.js.map +2 -2
  405. package/bundles/ragents.watch/ragents-bundle.json +2 -2
  406. package/bundles/ragents.watch/server/index.js +48 -48
  407. package/bundles/ragents.watch/server/index.js.map +2 -2
  408. package/bundles/ragents.workspace/ragents-bundle.json +2 -2
  409. package/bundles/ragents.workspace/server/index.js +83 -81
  410. package/bundles/ragents.workspace/server/index.js.map +2 -2
  411. package/bundles/ragents.workspace/web/classes.json +1 -1
  412. package/bundles/ragents.workspace/web/index.js +1 -1
  413. package/bundles/ragents.workspace/web/index.js.map +2 -2
  414. package/package.json +4 -4
  415. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  416. package/packages/agent/dist/core/tools/bash.d.ts +1 -1
  417. package/packages/agent/dist/index.d.ts +1 -1
  418. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  419. package/packages/agent/src/core/compaction/utils.ts +1 -1
  420. package/packages/agent/src/core/model-runtime.ts +45 -5
  421. package/packages/agent/src/core/tools/bash.ts +1 -1
  422. package/packages/agent/src/index.ts +1 -1
  423. package/packages/agent/src/loop/agent-loop.ts +2 -2
  424. package/packages/ai/dist/models.d.ts +1 -0
  425. package/packages/ai/dist/models.generated.d.ts +4544 -983
  426. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  427. package/packages/ai/src/api/ai-sdk.ts +33 -7
  428. package/packages/ai/src/api-registry.ts +1 -1
  429. package/packages/ai/src/index.ts +2 -2
  430. package/packages/ai/src/models.generated.ts +1 -1
  431. package/packages/ai/src/models.ts +1 -1
  432. package/packages/ai/src/providers/openrouter.models.ts +3723 -550
  433. package/packages/ragents/src/access.ts +12 -12
  434. package/packages/ragents/src/agents/actor-input.ts +33 -33
  435. package/packages/ragents/src/agents/catalog.ts +1 -1
  436. package/packages/ragents/src/agents/delivery.ts +17 -17
  437. package/packages/ragents/src/agents/plugins.ts +1 -1
  438. package/packages/ragents/src/agents/scheduler.ts +7 -7
  439. package/packages/ragents/src/agents/schemas.ts +1 -1
  440. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  441. package/packages/ragents/src/agents/tools.ts +20 -20
  442. package/packages/ragents/src/agents/toolset.ts +5 -5
  443. package/packages/ragents/src/agents/workspaces.ts +1 -1
  444. package/packages/ragents/src/domain/events.ts +1 -1
  445. package/packages/ragents/src/domain/model.ts +5 -5
  446. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  447. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  448. package/packages/ragents/src/drivers/agent.ts +2 -2
  449. package/packages/ragents/src/drivers/attachments.ts +4 -4
  450. package/packages/ragents/src/http/contracts.ts +14 -14
  451. package/packages/ragents/src/http/methods.ts +6 -6
  452. package/packages/ragents/src/index.ts +1 -0
  453. package/packages/ragents/src/plugin-host.ts +162 -116
  454. package/packages/ragents/src/plugin-types.ts +29 -10
  455. package/packages/ragents/src/rpc/contract.ts +5 -5
  456. package/packages/ragents/src/rpc/contribution.ts +2 -2
  457. package/packages/ragents/src/rpc/peer.ts +11 -11
  458. package/packages/ragents/src/rpc/protocol.ts +2 -2
  459. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  460. package/packages/ragents/src/runtime/journal.ts +10 -10
  461. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  462. package/packages/ragents/src/runtime/stop.ts +2 -2
  463. package/packages/ragents/src/script/mediators.ts +35 -35
  464. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  465. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  466. package/packages/ragents/src/typescript/compiler.ts +7 -7
  467. package/packages/ragents/src/typescript/snippet.ts +5 -5
  468. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  469. package/packages/workspace-executor/src/commands.ts +18 -18
  470. package/packages/workspace-executor/src/context.ts +15 -15
  471. package/packages/workspace-executor/src/contributions.ts +35 -35
  472. package/packages/workspace-executor/src/errors.ts +1 -1
  473. package/packages/workspace-executor/src/executor.ts +15 -15
  474. package/packages/workspace-executor/src/files.ts +30 -30
  475. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  476. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  477. package/packages/workspace-executor/src/language-server/host.ts +35 -35
  478. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  479. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  480. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  481. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  482. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
  483. package/packages/workspace-executor/src/managed-process.ts +35 -7
  484. package/packages/workspace-executor/src/module.ts +8 -8
  485. package/packages/workspace-executor/src/modules.ts +3 -3
  486. package/packages/workspace-executor/src/paths.ts +11 -11
  487. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  488. package/packages/workspace-executor/src/processes/module.ts +3 -3
  489. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  490. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  491. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  492. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  493. package/packages/workspace-executor/src/run-folders.ts +3 -3
  494. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  495. package/packages/workspace-executor/src/sandbox-tools.ts +37 -31
  496. package/packages/workspace-executor/src/session-ident.ts +2 -2
  497. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  498. package/packages/workspace-executor/src/tools.ts +5 -5
  499. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  500. package/plugins/ragents.activity/web/activity.ts +2 -2
  501. package/plugins/ragents.actor-programs/server/access-projections.ts +31 -0
  502. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  503. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  504. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  505. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  506. package/plugins/ragents.actor-programs/server/index.ts +2 -0
  507. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  508. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  509. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  510. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  511. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  512. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  513. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  514. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  515. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  516. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  517. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  518. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  519. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  520. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  521. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  522. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  523. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  524. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  525. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  526. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  527. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  528. package/plugins/ragents.ask/ask-payload.ts +1 -1
  529. package/plugins/ragents.ask/contract.ts +5 -5
  530. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  531. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  532. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  533. package/plugins/ragents.ask/server/contract.ts +5 -5
  534. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  535. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  536. package/plugins/ragents.ask/web/index.tsx +2 -8
  537. package/plugins/ragents.browser/executor/contract.ts +6 -6
  538. package/plugins/ragents.browser/executor/index.ts +1 -1
  539. package/plugins/ragents.browser/executor/module.ts +6 -6
  540. package/plugins/ragents.browser/executor/pages.ts +32 -32
  541. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  542. package/plugins/ragents.browser/provision.ts +7 -7
  543. package/plugins/ragents.browser/server/browser.ts +14 -14
  544. package/plugins/ragents.browser/server/contract.ts +1 -1
  545. package/plugins/ragents.browser/server/index.ts +1 -1
  546. package/plugins/ragents.browser/server/tools.ts +14 -14
  547. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  548. package/plugins/ragents.documents/contract.ts +2 -2
  549. package/plugins/ragents.documents/prompt.hbs +1 -1
  550. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  551. package/plugins/ragents.documents/server/files-route.ts +6 -6
  552. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  553. package/plugins/ragents.documents/server/store.ts +1 -1
  554. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  555. package/plugins/ragents.documents/web/index.tsx +11 -11
  556. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  557. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  558. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  559. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  560. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  561. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  562. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  563. package/plugins/ragents.model-relay/server/config.ts +6 -2
  564. package/plugins/ragents.model-relay/server/index.ts +2 -2
  565. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  566. package/plugins/ragents.orchestration/contract.ts +8 -8
  567. package/plugins/ragents.orchestration/server/index.ts +4 -4
  568. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  569. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  570. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  571. package/plugins/ragents.orchestration/web/ActorChat.tsx +2 -2
  572. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
  573. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  574. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  575. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  576. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  577. package/plugins/ragents.orchestration/web/ActorTile.tsx +1 -1
  578. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  579. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  580. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  581. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  582. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  583. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  584. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  585. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  586. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  587. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  588. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  589. package/plugins/ragents.orchestration/web/format.ts +1 -1
  590. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  591. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  592. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  593. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +29 -28
  594. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  595. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  596. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  597. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  598. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  599. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  600. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +10 -10
  601. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  602. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  603. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  604. package/plugins/ragents.overseer/contract.ts +20 -20
  605. package/plugins/ragents.overseer/server/api.ts +8 -8
  606. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  607. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  608. package/plugins/ragents.overseer/server/index.ts +24 -24
  609. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  610. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  611. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  612. package/plugins/ragents.overseer/server/settings.ts +6 -6
  613. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  614. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  615. package/plugins/ragents.overseer/web/index.tsx +20 -20
  616. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  617. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  618. package/plugins/ragents.processes/contract.ts +5 -5
  619. package/plugins/ragents.processes/server/methods.ts +4 -4
  620. package/plugins/ragents.processes/server/observer.ts +8 -8
  621. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  622. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  623. package/plugins/ragents.processes/web/processes.ts +10 -10
  624. package/plugins/ragents.product/server/config.ts +1 -1
  625. package/plugins/ragents.product/server/index.ts +4 -4
  626. package/plugins/ragents.product/server/runtime.ts +9 -10
  627. package/plugins/ragents.product/web/index.tsx +1 -1
  628. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  629. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  630. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  631. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  632. package/plugins/ragents.reference/examples.ts +27 -27
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  636. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  637. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  638. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  639. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  640. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  641. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  642. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  643. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  644. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  645. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  648. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  649. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  650. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  651. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  652. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  653. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  654. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  655. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  656. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  657. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  661. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  662. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  663. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  664. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  665. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  666. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  667. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  668. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  669. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  670. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  671. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  672. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  693. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  694. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  695. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  696. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  697. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  698. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  699. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  700. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  701. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  702. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  703. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  704. package/plugins/ragents.watch/server/condition.ts +4 -4
  705. package/plugins/ragents.watch/server/functions.ts +27 -27
  706. package/plugins/ragents.watch/server/observation.ts +2 -2
  707. package/plugins/ragents.watch/server/service.ts +14 -14
  708. package/plugins/ragents.workspace/client/transport.ts +1 -1
  709. package/plugins/ragents.workspace/client/workspace-client.ts +62 -49
  710. package/plugins/ragents.workspace/contract.ts +46 -46
  711. package/plugins/ragents.workspace/server/binding.ts +20 -20
  712. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  713. package/plugins/ragents.workspace/server/clients.ts +42 -42
  714. package/plugins/ragents.workspace/server/config.ts +8 -5
  715. package/plugins/ragents.workspace/server/index.ts +5 -4
  716. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  717. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  718. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  719. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  720. package/plugins/ragents.workspace/web/index.tsx +1 -1
  721. package/ragents.config.core.ts +1 -1
  722. package/ragents.config.developer.ts +3 -3
  723. package/ragents.config.showcase.ts +2 -2
  724. package/scripts/agent/agent-cli.ts +96 -96
  725. package/scripts/agent/journal.ts +5 -5
  726. package/scripts/agent/turn-control.ts +4 -4
  727. package/scripts/package/build-package.ts +29 -29
  728. package/scripts/package/host-links.mjs +3 -3
  729. package/scripts/package/publish-package.ts +29 -29
  730. package/scripts/package/ragents.mjs +19 -19
  731. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  732. package/scripts/plugin/plugin-cli.ts +14 -14
  733. package/scripts/provision/run-provision.ts +14 -15
  734. package/scripts/remote/connect.ts +46 -46
  735. package/scripts/remote/start.ts +18 -18
  736. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  737. package/apps/web/dist/assets/main-C7JeZFjs.js +0 -6
  738. package/apps/web/dist/assets/mermaid-HWGCJPDP-DfsU5ofC.js +0 -478
  739. package/apps/web/dist/assets/runPanel-ZT6TPDLM.js +0 -21
  740. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  741. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  742. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  743. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  744. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  745. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  746. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  747. package/plugins/ragents.ask/web/QuestionSection.tsx +0 -48
  748. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  749. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -6,7 +6,7 @@ import { SandboxManager, type SandboxRuntimeConfig } from "@anthropic-ai/sandbox
6
6
  import { containsWorkspacePath, type ProcessLaunch, type ProcessSandbox } from "@ragents/workspace-executor";
7
7
  import { hostRoot } from "../host-version.js";
8
8
 
9
- /** Paketquellen und Git-Hosting, die Builds im Arbeitsbereich brauchen; der eigene Server kommt immer dazu. */
9
+ /** Package sources and git hosting that builds in the workspace need; the own server is always added. */
10
10
  export const PROCESS_SANDBOX_DEFAULT_NETWORK: readonly string[] = [
11
11
  "registry.npmjs.org",
12
12
  "api.nuget.org",
@@ -16,25 +16,27 @@ export const PROCESS_SANDBOX_DEFAULT_NETWORK: readonly string[] = [
16
16
  "*.githubusercontent.com",
17
17
  ];
18
18
 
19
- /** Die Ordner eines Runs, aus denen seine Regeln entstehen; alles andere unter den geschützten Wurzeln bleibt ihm verborgen. */
19
+ /** The folders of a run from which its rules are made; everything else under the protected roots stays hidden from it. */
20
20
  export interface RunSandboxFolders {
21
21
  readonly writable: readonly string[];
22
22
  readonly readable: readonly string[];
23
- /** Der eigene Temp-Ordner des Runs; er ist beschreibbar und steht in TMPDIR. */
23
+ /** The run's own temp folder; it is writable and set in TMPDIR. */
24
24
  readonly temporary: string;
25
25
  }
26
26
 
27
- /** Was der Sandbox-Host je Run von der Prozess-Sandbox braucht. */
27
+ /** What the sandbox host needs from the process sandbox per run. */
28
28
  export interface RunProcessSandboxes {
29
29
  readonly forRun: (folders: RunSandboxFolders) => ProcessSandbox;
30
30
  }
31
31
 
32
32
  export interface ServerProcessSandboxOptions {
33
- /** Erlaubte Ziele im Netz, Domains wie in der Profildatei; alles andere scheitert am Proxy. */
33
+ /** Allowed network targets, domains as in the profile file; everything else fails at the proxy. */
34
34
  readonly network: readonly string[];
35
- /** Die Adresse dieses Servers, etwa http://127.0.0.1:4710; ohne HTTP keine. */
35
+ /** The address of this server, such as http://127.0.0.1:4710; none without HTTP. */
36
36
  readonly serverAddress: string | undefined;
37
37
  readonly dataDirectory: string;
38
+ /** How the operator turns the sandbox off, as written in the profile file; every message that prevents the start names it. */
39
+ readonly disableSetting: string;
38
40
  readonly hostRoot?: string;
39
41
  readonly platform?: NodeJS.Platform;
40
42
  readonly environment?: NodeJS.ProcessEnv;
@@ -46,7 +48,7 @@ const shellWord = (value: string): string => `'${value.replaceAll("'", "'\\''")}
46
48
 
47
49
  const shellCommand = (words: readonly string[]): string => words.map(shellWord).join(" ");
48
50
 
49
- /** Die Umgebung innerhalb der Sandbox: eigener Temp-Ordner, und jeder Netzaufruf geht über den Proxy, auch der zum eigenen Server. */
51
+ /** The environment inside the sandbox: its own temp folder, and every network call goes through the proxy, including the one to the own server. */
50
52
  const insideEnvironment = (temporary: string, searchPath: string, platform: NodeJS.Platform): readonly string[] => [
51
53
  `PATH=${searchPath}`,
52
54
  `TMPDIR=${temporary}`,
@@ -55,13 +57,13 @@ const insideEnvironment = (temporary: string, searchPath: string, platform: Node
55
57
  "NO_PROXY=",
56
58
  "no_proxy=",
57
59
  "NODE_USE_ENV_PROXY=1",
58
- // .NET verbindet sich sonst über IPv4-gemappte IPv6-Adressen mit dem Proxy, die die Sandbox von macOS nicht als localhost erkennt.
60
+ // Otherwise .NET connects to the proxy over IPv4-mapped IPv6 addresses, which the macOS sandbox does not recognize as localhost.
59
61
  "DOTNET_SYSTEM_NET_DISABLEIPV6=1",
60
- // Build-Knoten und Compiler-Server von .NET überleben den Befehl und nähmen sonst Builds anderer Runs in ihrer eigenen Sandbox an.
62
+ // .NET build nodes and compiler servers outlive the command and would otherwise accept builds of other runs in their own sandbox.
61
63
  "MSBUILDDISABLENODEREUSE=1",
62
64
  "DOTNET_CLI_USE_MSBUILD_SERVER=0",
63
65
  "UseSharedCompilation=false",
64
- // Die Werkzeug-Shims von macOS (git, clang) legen ihren Cache sonst im gesperrten Temp des Servers an.
66
+ // Otherwise the macOS tool shims (git, clang) create their cache in the server's blocked temp.
65
67
  ...platform === "darwin" ? [`xcrun_db=${path.join(temporary, "xcrun_db")}`] : [],
66
68
  ];
67
69
 
@@ -74,7 +76,7 @@ const serverTarget = (address: string | undefined): readonly string[] => {
74
76
  const homeRoots = (platform: NodeJS.Platform): readonly string[] =>
75
77
  platform === "darwin" ? ["/Users"] : ["/home", "/root"];
76
78
 
77
- /** Der echte Pfad, auch für einen Ordner, den es noch nicht gibt: sein nächster vorhandener Vorfahr wird aufgelöst. */
79
+ /** The real path, even for a folder that does not exist yet: its nearest existing ancestor is resolved. */
78
80
  const realOrGiven = (entry: string): string => {
79
81
  try {
80
82
  return realpathSync(entry);
@@ -84,17 +86,17 @@ const realOrGiven = (entry: string): string => {
84
86
  }
85
87
  };
86
88
 
87
- /** Ein Eintrag ist oft ein Symlink (fnm, Homebrew, /tmp unter macOS); die Sandbox prüft das Ziel. */
89
+ /** An entry is often a symlink (fnm, Homebrew, /tmp on macOS); the sandbox checks the target. */
88
90
  const resolvedTarget = (entry: string): readonly string[] => {
89
91
  const target = realOrGiven(entry);
90
92
  return target === entry ? [] : [target];
91
93
  };
92
94
 
93
- /** Unter Linux sind alle Unix-Sockets erlaubt; die Sockets, die aus der Sandbox hinausführen, bleiben deshalb unsichtbar. */
95
+ /** On Linux all Unix sockets are allowed; the sockets that lead out of the sandbox therefore stay invisible. */
94
96
  const hostSockets = (platform: NodeJS.Platform): readonly string[] =>
95
97
  platform === "linux" ? ["/var/run/docker.sock", "/run/docker.sock"].filter((socket) => existsSync(socket)) : [];
96
98
 
97
- /** Wo Geheimnisse und fremde Runs liegen können: Home-Ordner, Temp und der Datenordner des Servers. */
99
+ /** Where secrets and other runs can live: home folders, temp and the server's data folder. */
98
100
  const protectedRoots = (options: ServerProcessSandboxOptions, platform: NodeJS.Platform): readonly string[] => [
99
101
  os.homedir(),
100
102
  ...homeRoots(platform),
@@ -104,16 +106,16 @@ const protectedRoots = (options: ServerProcessSandboxOptions, platform: NodeJS.P
104
106
  ...hostSockets(platform),
105
107
  ].map(realOrGiven);
106
108
 
107
- /** Was sich alle Runs teilen müssen: unter macOS legen .NET seine benannten Mutexe und MSBuild die Sockets seiner Build-Knoten fest unter /tmp an; unter Linux ist /tmp je Befehl ein eigener leerer Ordner. */
109
+ /** What all runs must share: on macOS .NET creates its named mutexes and MSBuild the sockets of its build nodes at fixed places under /tmp; on Linux /tmp is a separate empty folder per command. */
108
110
  const sharedWritable = (platform: NodeJS.Platform): readonly string[] => platform === "darwin"
109
111
  ? [".dotnet", `.dotnet-uid${os.userInfo().uid}`, "MSBuild*"].map((name) => path.join(realOrGiven("/tmp"), name))
110
112
  : [];
111
113
 
112
- /** Wo Prozesse der Sandbox Unix-Sockets anlegen und erreichen: im Datenordner (Temp der Runs) und unter macOS in /tmp für die Build-Knoten von MSBuild. */
114
+ /** Where sandbox processes create and reach Unix sockets: in the data folder (temp of the runs) and on macOS in /tmp for the MSBuild build nodes. */
113
115
  const socketRoots = (dataDirectory: string, platform: NodeJS.Platform): readonly string[] =>
114
116
  [dataDirectory, ...platform === "darwin" ? ["/tmp"] : []].map(realOrGiven);
115
117
 
116
- /** Die Sandbox liest einen Symlink in einem gesperrten Ordner nicht (etwa fnm unter ~/.local/state); PATH nennt deshalb die Ziele. */
118
+ /** The sandbox does not read a symlink in a blocked folder (such as fnm under ~/.local/state); PATH therefore names the targets. */
117
119
  const resolvedSearchPath = (environment: NodeJS.ProcessEnv): string =>
118
120
  [...new Set((environment.PATH ?? "").split(path.delimiter).filter((entry) => entry !== "").map(realOrGiven))].join(path.delimiter);
119
121
 
@@ -127,14 +129,14 @@ const entriesOf = (directory: string): readonly string[] => {
127
129
  }
128
130
  };
129
131
 
130
- /** Ein freigegebener Ordner, der einen gesperrten enthält, wird in seine übrigen Einträge zerlegt; sonst hebelte er die Sperre aus oder die Sperre die Freigaben darin. */
132
+ /** An allowed folder that contains a blocked one is split into its remaining entries; otherwise it would override the block, or the block the allowances inside it. */
131
133
  const besideProtected = (entry: string, hidden: readonly string[]): readonly string[] => {
132
134
  if (hidden.some((root) => isInside(root, entry))) return [];
133
135
  if (!hidden.some((root) => isInside(entry, root))) return [entry];
134
136
  return entriesOf(entry).flatMap((child) => besideProtected(child, hidden));
135
137
  };
136
138
 
137
- /** Bubblewrap bindet lesbare Ordner nach den beschreibbaren ein; ein lesbarer Vorfahr überdeckte einen beschreibbaren Ordner darin schreibgeschützt und wird deshalb in seine übrigen Einträge zerlegt. */
139
+ /** Bubblewrap binds readable folders after the writable ones; a readable ancestor would cover a writable folder inside it as read-only and is therefore split into its remaining entries. */
138
140
  const readableBeside = (entry: string, writable: readonly string[]): readonly string[] => {
139
141
  const inside = writable.filter((candidate) => isInside(entry, candidate));
140
142
  if (inside.length === 0) return [entry];
@@ -142,7 +144,7 @@ const readableBeside = (entry: string, writable: readonly string[]): readonly st
142
144
  return entriesOf(entry).flatMap((child) => readableBeside(child, inside));
143
145
  };
144
146
 
145
- /** Toolchains unter einem geschützten Ordner (etwa Node aus fnm oder dotnet-Werkzeuge im Home) bleiben lesbar, nie aber ein Vorfahr des Datenordners. */
147
+ /** Toolchains under a protected folder (such as Node from fnm or dotnet tools in the home folder) stay readable, but never an ancestor of the data folder. */
146
148
  const toolchainDirectories = (options: ServerProcessSandboxOptions, protectedPaths: readonly string[]): readonly string[] => {
147
149
  const environment = options.environment ?? process.env;
148
150
  const entries = [
@@ -158,13 +160,13 @@ const toolchainDirectories = (options: ServerProcessSandboxOptions, protectedPat
158
160
  return [...new Set(safe)];
159
161
  };
160
162
 
161
- /** Was ein Server der Sandbox für alle seine Runs freigibt: Netzziele und die Ordner, in denen Unix-Sockets liegen dürfen. */
163
+ /** What a server grants the sandbox for all its runs: network targets and the folders in which Unix sockets may live. */
162
164
  interface SandboxGrant {
163
165
  readonly network: readonly string[];
164
166
  readonly unixSockets: readonly string[];
165
167
  }
166
168
 
167
- /** Die Bibliothek hat genau einen Zustand je Prozess; mehrere Hosts in einem Prozess teilen ihn, ihre Netzfreigaben werden vereinigt. */
169
+ /** The library has exactly one state per process; several hosts in one process share it, and their network grants are merged. */
168
170
  class SharedSandboxRuntime {
169
171
  readonly #holders = new Map<object, SandboxGrant>();
170
172
  #started: Promise<void> | undefined;
@@ -176,11 +178,11 @@ class SharedSandboxRuntime {
176
178
  allowedDomains: [...new Set(grants.flatMap((grant) => grant.network))],
177
179
  deniedDomains: [],
178
180
  allowUnixSockets: [...new Set(grants.flatMap((grant) => grant.unixSockets))],
179
- // Linux kann Unix-Sockets nur ganz oder gar nicht sperren; die Build-Werkzeuge (MSBuild-Knoten) brauchen sie.
181
+ // Linux can block Unix sockets only all or nothing; the build tools (MSBuild nodes) need them.
180
182
  ...process.platform === "linux" ? { allowAllUnixSockets: true } : {},
181
183
  },
182
184
  filesystem: { denyRead: [], allowWrite: [], denyWrite: [], allowGitConfig: true },
183
- // Unter macOS prüfen .NET und Go Zertifikate über trustd; ohne diesen Dienst scheitert jedes TLS.
185
+ // On macOS .NET and Go check certificates via trustd; without this service every TLS connection fails.
184
186
  ...process.platform === "darwin" ? { enableWeakerNetworkIsolation: true } : {},
185
187
  };
186
188
  }
@@ -213,43 +215,42 @@ class SharedSandboxRuntime {
213
215
 
214
216
  const sharedRuntime = new SharedSandboxRuntime();
215
217
 
216
- const unsupported = (platform: NodeJS.Platform): Error => new Error(platform === "win32"
217
- ? "Die Prozess-Sandbox gibt es auf einem Windows-Server nicht: dort lassen sich die Ordnerregeln je Run nicht setzen. "
218
- + "Wer den Server trotzdem unter Windows betreibt, schaltet sie in der Profildatei ausdrücklich ab: "
219
- + "PROCESS_SANDBOX: \"off\" in der Sektion ragents.workspace."
220
- : `Die Prozess-Sandbox kennt die Plattform ${platform} nicht; unterstützt sind macOS und Linux. `
221
- + "PROCESS_SANDBOX: \"off\" in der Sektion ragents.workspace schaltet sie ausdrücklich ab.");
218
+ const unsupported = (platform: NodeJS.Platform, disableSetting: string): Error => new Error(platform === "win32"
219
+ ? "The process sandbox does not exist on a Windows server: the folder rules per run cannot be set there. "
220
+ + `Whoever runs the server on Windows anyway turns it off explicitly in the profile file: ${disableSetting}.`
221
+ : `The process sandbox does not know the platform ${platform}; macOS and Linux are supported. `
222
+ + `${disableSetting} turns it off explicitly.`);
222
223
 
223
- const missingDependencies = (errors: readonly string[]): Error => new Error(
224
- `Die Prozess-Sandbox kann nicht starten: ${errors.join("; ")}. `
225
- + "Unter Linux braucht sie bubblewrap, socat und ripgrep (Debian/Ubuntu: apt-get install bubblewrap socat ripgrep). "
226
- + "PROCESS_SANDBOX: \"off\" in der Sektion ragents.workspace schaltet sie ausdrücklich ab.");
224
+ const missingDependencies = (errors: readonly string[], disableSetting: string): Error => new Error(
225
+ `The process sandbox cannot start: ${errors.join("; ")}. `
226
+ + "On Linux it needs bubblewrap, socat and ripgrep (Debian/Ubuntu: apt-get install bubblewrap socat ripgrep). "
227
+ + `${disableSetting} turns it off explicitly.`);
227
228
 
228
- const failedSelfTest = (detail: string): Error => new Error(
229
- `Die Prozess-Sandbox lässt sich auf diesem Rechner nicht starten: ${detail.trim() || "ohne Ausgabe"}. `
230
- + "Unter Linux braucht bubblewrap Benutzer-Namensräume; in einem Container muss das Profil des Containers sie erlauben. "
231
- + "PROCESS_SANDBOX: \"off\" in der Sektion ragents.workspace schaltet sie ausdrücklich ab.");
229
+ const failedSelfTest = (detail: string, disableSetting: string): Error => new Error(
230
+ `The process sandbox cannot be started on this machine: ${detail.trim() || "no output"}. `
231
+ + "On Linux bubblewrap needs user namespaces; in a container the container's profile must allow them. "
232
+ + `${disableSetting} turns it off explicitly.`);
232
233
 
233
- const runSelfTest = (launch: ProcessLaunch, environment: NodeJS.ProcessEnv): Promise<void> => new Promise((resolve, reject) => {
234
+ const runSelfTest = (launch: ProcessLaunch, environment: NodeJS.ProcessEnv, disableSetting: string): Promise<void> => new Promise((resolve, reject) => {
234
235
  const child = spawn(launch.command, [...launch.args], { stdio: ["ignore", "ignore", "pipe"], env: environment });
235
236
  let stderr = "";
236
237
  const timer = setTimeout(() => {
237
238
  child.kill("SIGKILL");
238
- reject(failedSelfTest(`keine Antwort nach ${SELF_TEST_TIMEOUT_MS / 1000} Sekunden`));
239
+ reject(failedSelfTest(`no response after ${SELF_TEST_TIMEOUT_MS / 1000} seconds`, disableSetting));
239
240
  }, SELF_TEST_TIMEOUT_MS);
240
241
  child.stderr.on("data", (chunk: Buffer) => { stderr = (stderr + chunk.toString("utf8")).slice(-2_000); });
241
242
  child.once("error", (error) => {
242
243
  clearTimeout(timer);
243
- reject(failedSelfTest(error.message));
244
+ reject(failedSelfTest(error.message, disableSetting));
244
245
  });
245
246
  child.once("close", (code) => {
246
247
  clearTimeout(timer);
247
248
  if (code === 0) resolve();
248
- else reject(failedSelfTest(`Code ${code ?? "Signal"}: ${stderr}`));
249
+ else reject(failedSelfTest(`code ${code ?? "signal"}: ${stderr}`, disableSetting));
249
250
  });
250
251
  });
251
252
 
252
- /** Die Prozess-Sandbox des Servers: jeder Prozess eines Runs, den der Executor des Servers startet, läuft mit den Ordnern und Netzzielen seines Runs. */
253
+ /** The server's process sandbox: every process of a run that the server's executor starts runs with the folders and network targets of its run. */
253
254
  export class ServerProcessSandbox implements RunProcessSandboxes {
254
255
  readonly #options: ServerProcessSandboxOptions;
255
256
  readonly #platform: NodeJS.Platform;
@@ -260,23 +261,23 @@ export class ServerProcessSandbox implements RunProcessSandboxes {
260
261
  constructor(options: ServerProcessSandboxOptions) {
261
262
  this.#options = options;
262
263
  this.#platform = options.platform ?? process.platform;
263
- if (this.#platform !== "darwin" && this.#platform !== "linux") throw unsupported(this.#platform);
264
+ if (this.#platform !== "darwin" && this.#platform !== "linux") throw unsupported(this.#platform, options.disableSetting);
264
265
  this.#protected = protectedRoots(options, this.#platform);
265
266
  this.#readable = [options.hostRoot ?? hostRoot(), ...toolchainDirectories(options, this.#protected)];
266
267
  this.#searchPath = resolvedSearchPath(options.environment ?? process.env);
267
268
  }
268
269
 
269
- /** Prüft die Voraussetzungen, startet den Netz-Proxy und startet einmal einen Prozess in der Sandbox; jedes Scheitern ist ein Startfehler. */
270
+ /** Checks the prerequisites, starts the network proxy and starts one process in the sandbox once; every failure is a start error. */
270
271
  async start(): Promise<void> {
271
272
  const { errors } = SandboxManager.checkDependencies();
272
- if (errors.length > 0) throw missingDependencies(errors);
273
+ if (errors.length > 0) throw missingDependencies(errors, this.#options.disableSetting);
273
274
  await sharedRuntime.acquire(this, {
274
275
  network: [...this.#options.network, ...serverTarget(this.#options.serverAddress)],
275
276
  unixSockets: socketRoots(this.#options.dataDirectory, this.#platform),
276
277
  });
277
278
  try {
278
279
  const probe = this.forRun({ writable: [], readable: [], temporary: path.join(this.#options.dataDirectory, "sandbox-self-test") });
279
- await runSelfTest(await probe.wrap({ command: "true", args: [] }), this.#options.environment ?? process.env);
280
+ await runSelfTest(await probe.wrap({ command: "true", args: [] }), this.#options.environment ?? process.env, this.#options.disableSetting);
280
281
  } catch (error) {
281
282
  await sharedRuntime.release(this);
282
283
  throw error;
@@ -14,18 +14,18 @@ export interface ProductModelSettings {
14
14
 
15
15
  const settings = openJson<ProductModelSettings>("ProductModelSettings");
16
16
 
17
- /** Je Produktplugin ein Paar: die Modellvorgaben lesen und speichern. */
17
+ /** One pair per product plugin: read and save the model defaults. */
18
18
  export const productModelSettingsContracts = (pluginId: string) => ({
19
19
  read: defineOperation({
20
20
  id: `${pluginId}.modelSettings.read`,
21
- description: "Die Modellvorgaben der Rollen mit dem verfügbaren Modellkatalog. Recht: settings.read.",
21
+ description: "The model defaults of the roles with the available model catalog. Right: settings.read.",
22
22
  rights: ["settings.read"],
23
23
  input: Type.Object({}, { additionalProperties: false }),
24
24
  result: settings,
25
25
  }),
26
26
  save: defineOperation({
27
27
  id: `${pluginId}.modelSettings.save`,
28
- description: "Die Modellvorgaben der Rollen speichern. Rechte: settings.read und settings.write.",
28
+ description: "Save the model defaults of the roles. Rights: settings.read and settings.write.",
29
29
  rights: ["settings.read", "settings.write"],
30
30
  input: Type.Object({ value: openJson<ProductModelDraft>("ProductModelDraft") }, { additionalProperties: false }),
31
31
  result: settings,
@@ -11,8 +11,8 @@ type AgentModelProfile = Extract<AgentProfile, { driver: "agent" }>;
11
11
  const invalid = (message: string): DomainError => new DomainError("product-model-invalid", message, 400);
12
12
 
13
13
  const objectOf = (value: unknown, fields: readonly string[]): Record<string, unknown> => {
14
- if (!value || typeof value !== "object" || Array.isArray(value)) throw invalid(`${fields.join(", ")} sind erforderlich.`);
15
- if (Object.keys(value).some((key) => !fields.includes(key))) throw invalid(`Erlaubt sind nur ${fields.join(", ")}.`);
14
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw invalid(`${fields.join(", ")} are required.`);
15
+ if (Object.keys(value).some((key) => !fields.includes(key))) throw invalid(`Only ${fields.join(", ")} are allowed.`);
16
16
  return value as Record<string, unknown>;
17
17
  };
18
18
 
@@ -53,7 +53,7 @@ export class ProductModelSettingsStore {
53
53
  const selected = this.#selection(profile.name);
54
54
  return {
55
55
  ...profile, ...selected,
56
- description: `${selected.model} mit Denktiefe ${selected.thinking}. ${profile.description}`,
56
+ description: `${selected.model} with thinking level ${selected.thinking}. ${profile.description}`,
57
57
  };
58
58
  });
59
59
 
@@ -87,25 +87,25 @@ export class ProductModelSettingsStore {
87
87
 
88
88
  #selection(name: string): ProductModelDraft["profiles"][number] {
89
89
  const selected = this.#current.profiles.find((profile) => profile.name === name);
90
- if (!selected) throw invalid(`Die Rolle ${name} hat keine Modellvorgabe.`);
90
+ if (!selected) throw invalid(`The role ${name} has no model default.`);
91
91
  return selected;
92
92
  }
93
93
 
94
94
  #validate(value: unknown): ProductModelDraft {
95
95
  const { profiles } = objectOf(value, ["profiles"]);
96
96
  const expected = this.#agentProfiles();
97
- if (!Array.isArray(profiles) || profiles.length !== expected.length) throw invalid(`Vollständig erforderlich sind die Rollen: ${expected.map((profile) => profile.name).join(", ")}.`);
97
+ if (!Array.isArray(profiles) || profiles.length !== expected.length) throw invalid(`All of these roles are required: ${expected.map((profile) => profile.name).join(", ")}.`);
98
98
  const seen = new Set<string>();
99
99
  const validated = profiles.map((item: unknown) => {
100
100
  const entry = objectOf(item, ["name", "model", "thinking"]);
101
101
  const profile = expected.find((candidate) => candidate.name === entry.name);
102
- if (!profile) throw invalid(`Unbekannte Rolle ${String(entry.name)}.`);
103
- if (seen.has(profile.name)) throw invalid(`Die Rolle ${profile.name} steht doppelt.`);
102
+ if (!profile) throw invalid(`Unknown role ${String(entry.name)}.`);
103
+ if (seen.has(profile.name)) throw invalid(`The role ${profile.name} is listed twice.`);
104
104
  seen.add(profile.name);
105
- if (profile.provider !== this.#choice.provider) throw invalid(`Die Rolle ${profile.name} verwendet einen anderen Provider.`);
106
- if (typeof entry.model !== "string" || !this.#choice.options.includes(entry.model)) throw invalid(`Das Modell ${String(entry.model)} steht nicht zur Wahl.`);
105
+ if (profile.provider !== this.#choice.provider) throw invalid(`The role ${profile.name} uses a different provider.`);
106
+ if (typeof entry.model !== "string" || !this.#choice.options.includes(entry.model)) throw invalid(`The model ${String(entry.model)} is not available for selection.`);
107
107
  const allowed = this.#choice.thinkingOptionsFor(entry.model);
108
- if (!isThinkingLevel(entry.thinking) || !allowed.includes(entry.thinking)) throw invalid(`Die Denktiefe ${String(entry.thinking)} ist für ${entry.model} nicht verfügbar (gültig: ${allowed.join(", ")}).`);
108
+ if (!isThinkingLevel(entry.thinking) || !allowed.includes(entry.thinking)) throw invalid(`The thinking level ${String(entry.thinking)} is not available for ${entry.model} (valid: ${allowed.join(", ")}).`);
109
109
  return { name: profile.name, model: entry.model, thinking: entry.thinking };
110
110
  });
111
111
  return { profiles: expected.map((profile) => validated.find((entry) => entry.name === profile.name)!) };
@@ -10,7 +10,7 @@ export interface RelayConnection {
10
10
  readonly token: string;
11
11
  }
12
12
 
13
- /** Was das Relay je Alias über das dahinterliegende Modell verrät, samt den Kompaktierungswerten des Alias; der echte Name bleibt beim Server. */
13
+ /** What the relay reveals per alias about the model behind it, including the alias's compaction values; the real name stays with the server. */
14
14
  export interface RelayCatalogEntry {
15
15
  readonly id: string;
16
16
  readonly object: "model";
@@ -46,8 +46,8 @@ const isEntry = (value: unknown): value is RelayCatalogEntry => {
46
46
  export const relayBaseUrl = (url: string): string => {
47
47
  let parsed: URL;
48
48
  try { parsed = new URL(url); }
49
- catch { throw new Error(`RELAY_URL ist keine gültige Adresse: ${url}`); }
50
- if (parsed.protocol !== "http:" && parsed.protocol !== "https:") throw new Error(`RELAY_URL braucht http oder https: ${url}`);
49
+ catch { throw new Error(`RELAY_URL is not a valid address: ${url}`); }
50
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") throw new Error(`RELAY_URL needs http or https: ${url}`);
51
51
  return `${parsed.origin}${parsed.pathname.replace(/\/+$/, "")}${RELAY_API_PATH}`;
52
52
  };
53
53
 
@@ -67,7 +67,7 @@ const modelOf = (entry: RelayCatalogEntry, baseUrl: string): Model<"openai-compl
67
67
  ...(entry.catalog.compat ? { compat: entry.catalog.compat as Model<"openai-completions">["compat"] } : {}),
68
68
  });
69
69
 
70
- /** Holt den Aliaskatalog des Relays genau einmal; ohne erreichbares Relay ist der Start ein Fehler mit Adresse und Ursache. */
70
+ /** Fetches the relay's alias catalog exactly once; without a reachable relay the start is an error with address and cause. */
71
71
  export const createRelayCatalog = (connection: RelayConnection, fetchImpl: typeof fetch = fetch): RelayCatalog => {
72
72
  const baseUrl = relayBaseUrl(connection.url);
73
73
  let loading: Promise<readonly Model<Api>[]> | undefined;
@@ -78,14 +78,14 @@ export const createRelayCatalog = (connection: RelayConnection, fetchImpl: typeo
78
78
  try {
79
79
  response = await fetchImpl(address, { headers: { authorization: `Bearer ${connection.token}` }, signal: AbortSignal.timeout(15_000) });
80
80
  } catch (error) {
81
- throw new Error(`Das Modell-Relay ${address} ist nicht erreichbar: ${error instanceof Error ? error.message : String(error)}`);
81
+ throw new Error(`The model relay ${address} is unreachable: ${error instanceof Error ? error.message : String(error)}`);
82
82
  }
83
83
  if (!response.ok) {
84
- throw new Error(`Das Modell-Relay ${address} lehnt den Katalogabruf ab: ${response.status} ${(await response.text()).slice(0, 200)}`);
84
+ throw new Error(`The model relay ${address} rejects the catalog request: ${response.status} ${(await response.text()).slice(0, 200)}`);
85
85
  }
86
86
  const body = await response.json() as { data?: unknown };
87
- if (!Array.isArray(body.data) || !body.data.every(isEntry)) throw new Error(`Das Modell-Relay ${address} liefert keinen gültigen Aliaskatalog`);
88
- if (body.data.length === 0) throw new Error(`Das Modell-Relay ${address} bietet keine Modelle an`);
87
+ if (!Array.isArray(body.data) || !body.data.every(isEntry)) throw new Error(`The model relay ${address} does not return a valid alias catalog`);
88
+ if (body.data.length === 0) throw new Error(`The model relay ${address} offers no models`);
89
89
  for (const entry of body.data) {
90
90
  const problem = compactionProblem(entry.catalog.compaction, entry.catalog);
91
91
  if (problem) throw new Error(`The model relay ${address} offers ${entry.id} without valid compaction values: ${problem}`);
@@ -98,7 +98,7 @@ export const createRelayCatalog = (connection: RelayConnection, fetchImpl: typeo
98
98
  baseUrl,
99
99
  load,
100
100
  models: () => {
101
- if (!loaded) throw new Error(`Der Modellkatalog des Relays ${baseUrl} ist noch nicht geladen`);
101
+ if (!loaded) throw new Error(`The model catalog of the relay ${baseUrl} is not loaded yet`);
102
102
  return loaded;
103
103
  },
104
104
  registration: async () => ({
@@ -28,14 +28,14 @@ const systemPromptSchema = Type.Object({
28
28
  export const modelStartOption = (choice: ModelChoice, preferredThinking: ThinkingLevel | (() => ThinkingLevel)): StartOptionContribution => {
29
29
  const resolved = (model: string, wanted: string | undefined): ModelStartOptionValue => {
30
30
  if (!choice.options.includes(model)) {
31
- throw new DomainError("model-unknown", `Das Modell ${model} steht nicht zur Wahl.`, 404);
31
+ throw new DomainError("model-unknown", `The model ${model} is not available for selection.`, 404);
32
32
  }
33
33
  const allowed = choice.thinkingOptionsFor(model);
34
34
  if (wanted !== undefined) {
35
35
  if (!isThinkingLevel(wanted) || !allowed.includes(wanted)) {
36
36
  throw new DomainError(
37
37
  "thinking-unknown",
38
- `Das Reasoning ${wanted} steht für dieses Modell nicht zur Wahl (gültig: ${allowed.join(", ")}).`,
38
+ `The reasoning ${wanted} is not available for this model (valid: ${allowed.join(", ")}).`,
39
39
  400,
40
40
  );
41
41
  }
@@ -80,11 +80,11 @@ export const systemPromptStartOption = (catalog: () => SystemPromptCatalog): Sta
80
80
  const current = catalog();
81
81
  for (const promptId of promptIds) {
82
82
  if (!current.options.some((option) => option.id === promptId)) {
83
- throw new DomainError("prompt-unknown", `Der Systemprompt ${promptId} ist nicht konfiguriert.`, 404);
83
+ throw new DomainError("prompt-unknown", `The system prompt ${promptId} is not configured.`, 404);
84
84
  }
85
85
  }
86
86
  const duplicate = promptIds.find((id, index) => promptIds.indexOf(id) !== index);
87
- if (duplicate) throw new DomainError("prompt-duplicate", `Der Systemprompt ${duplicate} steht doppelt.`, 400);
87
+ if (duplicate) throw new DomainError("prompt-duplicate", `The system prompt ${duplicate} is listed twice.`, 400);
88
88
  return { promptIds: [...promptIds], shareWithAgents };
89
89
  },
90
90
  describe: () => {
@@ -29,7 +29,7 @@ export const boundToTools = (
29
29
  ...toolNames: readonly string[]
30
30
  ): PromptContribution => {
31
31
  if (toolNames.length === 0) {
32
- throw new Error(`Der Prompt-Beitrag ${contribution.id} nennt kein Werkzeug, an das er gebunden ist`);
32
+ throw new Error(`The prompt contribution ${contribution.id} names no tool it is bound to`);
33
33
  }
34
34
  return { ...contribution, delivery: contribution.delivery ?? "on-demand", requiresTools: toolNames };
35
35
  };
@@ -11,7 +11,7 @@ export type ProvisionState =
11
11
  | { readonly kind: "ready" }
12
12
  | { readonly kind: "gap"; readonly name: string; readonly instruction: string; readonly installable: boolean };
13
13
 
14
- /** Was ein Plugin in `provision.ts` exportiert: der Werkzeugordner ist sein einziger Ablageort. */
14
+ /** What a plugin exports in `provision.ts`: the tool folder is its only storage location. */
15
15
  export interface PluginProvision {
16
16
  readonly check: (target: string) => Promise<ProvisionState>;
17
17
  readonly apply: (target: string, log: (line: string) => void) => Promise<void>;
@@ -36,11 +36,11 @@ export type ArchiveDownload = (url: string) => Promise<Buffer>;
36
36
 
37
37
  export const downloadArchive: ArchiveDownload = async (url) => {
38
38
  const response = await fetch(url);
39
- if (!response.ok) throw new Error(`${url} kommt nicht an: ${response.status} ${response.statusText}`);
39
+ if (!response.ok) throw new Error(`${url} does not arrive: ${response.status} ${response.statusText}`);
40
40
  return Buffer.from(await response.arrayBuffer());
41
41
  };
42
42
 
43
- /** Legt die Einträge unterhalb von `prefix` als frischen Ordner `directory` im Werkzeugordner ab. */
43
+ /** Stores the entries below `prefix` as a fresh folder `directory` in the tool folder. */
44
44
  export const unpackArchive = async (
45
45
  archive: Buffer,
46
46
  prefix: string,
@@ -48,13 +48,13 @@ export const unpackArchive = async (
48
48
  directory: string,
49
49
  ): Promise<number> => {
50
50
  const entries = readZipEntries(archive, (name) => name.startsWith(prefix));
51
- if (entries.length === 0) throw new Error(`Das Archiv enthält keine Einträge unter ${prefix}`);
51
+ if (entries.length === 0) throw new Error(`The archive contains no entries under ${prefix}`);
52
52
  const destination = path.join(target, directory);
53
53
  await rm(destination, { recursive: true, force: true });
54
54
  for (const entry of entries) {
55
55
  const relative = entry.name.slice(prefix.length).split("/");
56
56
  if (relative.some((segment) => segment === "" || segment === "." || segment === "..")) {
57
- throw new Error(`Der Archiveintrag ${entry.name} verlässt den Werkzeugordner`);
57
+ throw new Error(`The archive entry ${entry.name} leaves the tool folder`);
58
58
  }
59
59
  const file = path.join(destination, ...relative);
60
60
  await mkdir(path.dirname(file), { recursive: true });
@@ -79,7 +79,7 @@ export const writeProvisionStamp = async (target: string, version: string): Prom
79
79
 
80
80
  const run = promisify(execFile);
81
81
 
82
- /** Die Hauptversionen der installierten .NET-Laufzeiten, oder undefined, wenn es kein dotnet gibt. */
82
+ /** The major versions of the installed .NET runtimes, or undefined when there is no dotnet. */
83
83
  export const dotnetRuntimeMajors = async (): Promise<readonly number[] | undefined> => {
84
84
  const output = await run("dotnet", ["--list-runtimes"], { maxBuffer: 4 * 1024 * 1024 }).catch(() => undefined);
85
85
  if (!output) return undefined;
@@ -87,5 +87,5 @@ export const dotnetRuntimeMajors = async (): Promise<readonly number[] | undefin
87
87
  return [...new Set(majors)].sort((left, right) => left - right);
88
88
  };
89
89
 
90
- export const DOTNET_INSTRUCTION = "dotnet fehlt auf diesem Rechner; das .NET-SDK von https://dotnet.microsoft.com/download "
91
- + "installieren und dafür sorgen, dass dotnet im PATH steht";
90
+ export const DOTNET_INSTRUCTION = "dotnet is missing on this machine; install the .NET SDK from https://dotnet.microsoft.com/download "
91
+ + "and make sure dotnet is on the PATH";
@@ -10,18 +10,18 @@ const RUN_FIELDS = ["title", "description", "order", "guide", "tags", "coordinat
10
10
 
11
11
  const requiredFile = (directory: string, name: string): string => {
12
12
  const file = path.join(directory, name);
13
- if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`Dem Run-Script ${directory} fehlt die Datei ${name}`);
13
+ if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`The run script ${directory} is missing the file ${name}`);
14
14
  return file;
15
15
  };
16
16
 
17
- /** Die Kopfzeile fixed-start-options ist ein JSON-Objekt in einer Zeile: Startoption-Id auf festen Wert. */
17
+ /** The header line fixed-start-options is a JSON object on one line: start option id to fixed value. */
18
18
  const fixedStartOptionsOf = (file: string, value: string | undefined): Readonly<Record<string, JsonValue>> | undefined => {
19
19
  if (value === undefined) return undefined;
20
20
  let parsed: unknown;
21
21
  try { parsed = JSON.parse(value); }
22
- catch (error) { throw new Error(`${file}: fixed-start-options ist kein JSON (${error instanceof Error ? error.message : String(error)})`); }
22
+ catch (error) { throw new Error(`${file}: fixed-start-options is not JSON (${error instanceof Error ? error.message : String(error)})`); }
23
23
  if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
24
- throw new Error(`${file}: fixed-start-options muss ein JSON-Objekt aus Startoption-Id und Wert sein`);
24
+ throw new Error(`${file}: fixed-start-options must be a JSON object of start option id and value`);
25
25
  }
26
26
  return parsed as Record<string, JsonValue>;
27
27
  };
@@ -34,7 +34,7 @@ const packageFiles = (directory: string, relative = ""): ActorProgramFile[] =>
34
34
  if (!relative && ["actors", "RUN.md"].includes(entry.name)) return [];
35
35
  const filePath = path.posix.join(relative, entry.name);
36
36
  if (entry.isDirectory()) return packageFiles(directory, filePath);
37
- if (!entry.isFile()) throw new Error(`${directory}: ${filePath} ist keine reguläre Paketdatei`);
37
+ if (!entry.isFile()) throw new Error(`${directory}: ${filePath} is not a regular package file`);
38
38
  return [{path: filePath, content: readFileSync(path.join(directory, filePath), "utf8")}];
39
39
  });
40
40
 
@@ -45,29 +45,29 @@ const filesOf = (directory: string): ActorProgramFile[] => {
45
45
 
46
46
  const runScriptFrom = (directory: string, name: string, id: string): ScriptStartEntry => {
47
47
  if (!PACKAGE_NAME.test(name))
48
- throw new Error(`${directory}: der Ordnername ${name} ist kein Handle (Kleinbuchstaben, Ziffern, Bindestrich)`);
48
+ throw new Error(`${directory}: the folder name ${name} is not a handle (lowercase letters, digits, hyphen)`);
49
49
  const runFile = requiredFile(directory, "RUN.md");
50
- const {fields} = frontMatterOf(runFile, readFileSync(runFile, "utf8"), "title und description");
50
+ const {fields} = frontMatterOf(runFile, readFileSync(runFile, "utf8"), "title and description");
51
51
  const unknown = [...fields.keys()].filter((key) => !RUN_FIELDS.includes(key));
52
- if (unknown.length > 0) throw new Error(`${runFile}: unbekannte Kopfzeilen ${unknown.join(", ")}`);
52
+ if (unknown.length > 0) throw new Error(`${runFile}: unknown header lines ${unknown.join(", ")}`);
53
53
  const title = fields.get("title");
54
54
  const description = fields.get("description");
55
- if (!title) throw new Error(`${runFile}: title fehlt`);
56
- if (!description) throw new Error(`${runFile}: description fehlt`);
55
+ if (!title) throw new Error(`${runFile}: title is missing`);
56
+ if (!description) throw new Error(`${runFile}: description is missing`);
57
57
  const order = numberOf(runFile, "order", fields.get("order"));
58
58
  const guide = fields.get("guide");
59
59
  const tags = tagsOf(runFile, fields.get("tags"));
60
60
  const category = fields.get("category");
61
- if (category !== undefined && !category.trim()) throw new Error(`${runFile}: category ist leer`);
61
+ if (category !== undefined && !category.trim()) throw new Error(`${runFile}: category is empty`);
62
62
  const fixedStartOptions = fixedStartOptionsOf(runFile, fields.get("fixed-start-options"));
63
63
  const programsDirectory = path.join(directory, "actors");
64
64
  const programsStats = statSync(programsDirectory, {throwIfNoEntry: false});
65
- if (programsStats && !programsStats.isDirectory()) throw new Error(`${programsDirectory} muss ein Verzeichnis sein`);
65
+ if (programsStats && !programsStats.isDirectory()) throw new Error(`${programsDirectory} must be a directory`);
66
66
  const programs = programsStats ? readdirSync(programsDirectory, {withFileTypes: true})
67
67
  .sort((left, right) => left.name.localeCompare(right.name))
68
68
  .map((entry) => {
69
69
  if (!entry.isDirectory() || !PACKAGE_NAME.test(entry.name))
70
- throw new Error(`${programsDirectory}: ${entry.name} ist kein Actor-Programm-Ordner`);
70
+ throw new Error(`${programsDirectory}: ${entry.name} is not an actor program folder`);
71
71
  return {name: entry.name, files: filesOf(path.join(programsDirectory, entry.name))};
72
72
  }) : [];
73
73
  return {
@@ -90,16 +90,16 @@ export const runScriptsFromDirectory = (directory: string, idPrefix: string): re
90
90
  const resolved = path.resolve(directory);
91
91
  let entries;
92
92
  try { entries = readdirSync(resolved, {withFileTypes: true}); }
93
- catch (error) { throw new Error(`Das Run-Script-Verzeichnis ${resolved} ist nicht lesbar (${error instanceof Error ? error.message : String(error)})`); }
93
+ catch (error) { throw new Error(`The run script directory ${resolved} is not readable (${error instanceof Error ? error.message : String(error)})`); }
94
94
  const packages = entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort();
95
95
  const stray = entries.filter((entry) => !entry.isDirectory()).map((entry) => entry.name);
96
- if (stray.length > 0) throw new Error(`${resolved} enthält Dateien statt Run-Script-Ordner: ${stray.join(", ")}`);
97
- if (packages.length === 0) throw new Error(`${resolved} enthält keinen Run-Script-Ordner`);
96
+ if (stray.length > 0) throw new Error(`${resolved} contains files instead of run script folders: ${stray.join(", ")}`);
97
+ if (packages.length === 0) throw new Error(`${resolved} contains no run script folder`);
98
98
  return packages.map((name) => runScriptFrom(path.join(resolved, name), name, `${idPrefix}.${name}`));
99
99
  };
100
100
 
101
101
  export const runScriptFromDirectory = (directory: string): ScriptStartEntry => {
102
- if (!path.isAbsolute(directory)) throw new Error("Das Run-Script-Paket braucht einen absoluten Serverdateipfad");
102
+ if (!path.isAbsolute(directory)) throw new Error("The run script package needs an absolute server file path");
103
103
  const resolved = path.resolve(directory);
104
104
  return runScriptFrom(resolved, path.basename(resolved), `local.${path.basename(resolved)}`);
105
105
  };