@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
@@ -27,31 +27,31 @@ type SkillEnvironment = DeclaredEnvironment<(typeof skillEnvDescriptors)[number]
27
27
  /** Reads and checks the SKILL.md of a skill folder; the one parser for templates and the skills of agents. */
28
28
  const readSkill = (directory: string): { skill: Skill; start: (idPrefix: string) => SkillStartEntry | undefined } => {
29
29
  const file = path.join(directory, "SKILL.md");
30
- if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`Dem Skill ${directory} fehlt die SKILL.md`);
30
+ if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`The skill ${directory} is missing its SKILL.md`);
31
31
  const raw = readFileSync(file, "utf8");
32
- if (!FRONT_MATTER.test(raw)) throw new Error(`${file}: es fehlt der ---Kopf mit name und description`);
32
+ if (!FRONT_MATTER.test(raw)) throw new Error(`${file}: the --- header with name and description is missing`);
33
33
  const { frontmatter, body } = parseFrontmatter(raw);
34
- if (!frontmatter || typeof frontmatter !== "object" || Array.isArray(frontmatter)) throw new Error(`${file}: Kopf muss ein Objekt sein`);
34
+ if (!frontmatter || typeof frontmatter !== "object" || Array.isArray(frontmatter)) throw new Error(`${file}: header must be an object`);
35
35
  const metadata = ["license", "compatibility", "metadata", "allowed-tools"];
36
36
  const fields = new Map(Object.entries(frontmatter).filter(([key]) => !metadata.includes(key)).map(([key, value]) => {
37
37
  const flagField = ["start", "disable-model-invocation", "user-invokable"].includes(key);
38
- if (flagField && typeof value !== "boolean") throw new Error(`${file}: ${key} muss true oder false sein`);
38
+ if (flagField && typeof value !== "boolean") throw new Error(`${file}: ${key} must be true or false`);
39
39
  if (value === null) return [key, ""];
40
40
  if (typeof value !== "string" && !(flagField && typeof value === "boolean") && !(key === "order" && typeof value === "number")) {
41
- throw new Error(`${file}: ${key} hat einen ungültigen Wert`);
41
+ throw new Error(`${file}: ${key} has an invalid value`);
42
42
  }
43
43
  return [key, String(value)];
44
44
  }));
45
45
  const allowed = ["name", "description", "start", "title", "category", "order", "tags", "guide", "prompt", "disable-model-invocation", "user-invokable"];
46
46
  const unknown = [...fields.keys()].filter((key) => !allowed.includes(key));
47
- if (unknown.length > 0) throw new Error(`${file}: unbekannte Kopfzeilen ${unknown.join(", ")}`);
47
+ if (unknown.length > 0) throw new Error(`${file}: unknown header lines ${unknown.join(", ")}`);
48
48
  const name = fields.get("name");
49
- if (!name) throw new Error(`${file}: name fehlt`);
50
- if (name.length > 64 || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name)) throw new Error(`${file}: name ist kein gültiger Skillname`);
51
- if (name !== path.basename(directory)) throw new Error(`${file}: name muss dem Skill-Ordner entsprechen`);
49
+ if (!name) throw new Error(`${file}: name is missing`);
50
+ if (name.length > 64 || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name)) throw new Error(`${file}: name is not a valid skill name`);
51
+ if (name !== path.basename(directory)) throw new Error(`${file}: name must match the skill folder`);
52
52
  const description = fields.get("description");
53
- if (!description) throw new Error(`${file}: description fehlt`);
54
- if (!body.trim()) throw new Error(`${file}: Skill-Anleitung ist leer`);
53
+ if (!description) throw new Error(`${file}: description is missing`);
54
+ if (!body.trim()) throw new Error(`${file}: skill instructions are empty`);
55
55
  const disableModelInvocation = flag(file, "disable-model-invocation", fields.get("disable-model-invocation"));
56
56
  flag(file, "user-invokable", fields.get("user-invokable"));
57
57
  const order = numberOf(file, "order", fields.get("order"));
@@ -61,13 +61,13 @@ const readSkill = (directory: string): { skill: Skill; start: (idPrefix: string)
61
61
  };
62
62
  if (!flag(file, "start", fields.get("start"))) return { skill, start: () => undefined };
63
63
  const title = fields.get("title");
64
- if (!title) throw new Error(`${file}: title fehlt`);
64
+ if (!title) throw new Error(`${file}: title is missing`);
65
65
  const category = fields.get("category");
66
- if (!category) throw new Error(`${file}: category fehlt`);
66
+ if (!category) throw new Error(`${file}: category is missing`);
67
67
  const prompt = fields.get("prompt") ?? body.trim();
68
- if (!prompt.trim()) throw new Error(`${file}: prompt ist leer`);
68
+ if (!prompt.trim()) throw new Error(`${file}: prompt is empty`);
69
69
  const guide = fields.get("guide");
70
- if (guide !== undefined && !guide) throw new Error(`${file}: guide ist leer`);
70
+ if (guide !== undefined && !guide) throw new Error(`${file}: guide is empty`);
71
71
  return {
72
72
  skill,
73
73
  start: (idPrefix) => ({
@@ -94,12 +94,12 @@ export const skillsFromDirectory = (directory: string, idPrefix: string): Folder
94
94
  try {
95
95
  entries = readdirSync(resolved, { withFileTypes: true });
96
96
  } catch (error) {
97
- throw new Error(`Das Skill-Verzeichnis ${resolved} ist nicht lesbar (${error instanceof Error ? error.message : String(error)})`);
97
+ throw new Error(`The skill directory ${resolved} is not readable (${error instanceof Error ? error.message : String(error)})`);
98
98
  }
99
99
  const stray = entries.filter((entry) => !entry.isDirectory()).map((entry) => entry.name);
100
- if (stray.length > 0) throw new Error(`${resolved} enthält Dateien statt Skill-Ordner: ${stray.join(", ")}`);
100
+ if (stray.length > 0) throw new Error(`${resolved} contains files instead of skill folders: ${stray.join(", ")}`);
101
101
  const paths = entries.map((entry) => path.join(resolved, entry.name)).sort();
102
- if (paths.length === 0) throw new Error(`${resolved} enthält keinen Skill-Ordner`);
102
+ if (paths.length === 0) throw new Error(`${resolved} contains no skill folder`);
103
103
  const startEntries = paths.flatMap((skillPath) => {
104
104
  const entry = readSkill(skillPath).start(idPrefix);
105
105
  return entry ? [entry] : [];
@@ -1,6 +1,6 @@
1
1
  export type StartEntryAction = "skill" | "script";
2
2
 
3
- /** Dieselbe JSON-Form wie im Kern; der Vertrag bleibt importfrei. */
3
+ /** The same JSON shape as in the core; the contract stays free of imports. */
4
4
  export type JsonValue = null | string | number | boolean | JsonValue[] | { [key: string]: JsonValue | undefined };
5
5
 
6
6
  export interface StartEntryBase {
@@ -11,7 +11,7 @@ export interface StartEntryBase {
11
11
  order?: number;
12
12
  guide?: string;
13
13
  tags?: readonly string[];
14
- /** Startoptionen, die die Vorlage festlegt: ein Run über sie läuft genau mit diesen Werten. */
14
+ /** Start options the template fixes: a run started from it runs with exactly these values. */
15
15
  fixedStartOptions?: Readonly<Record<string, JsonValue>>;
16
16
  }
17
17
 
@@ -31,22 +31,22 @@ const text = (value: unknown): value is string => typeof value === "string" && v
31
31
 
32
32
  const BASE_FIELDS = ["id", "owner", "title", "description", "order", "guide", "tags", "fixedStartOptions", "action"];
33
33
 
34
- const invalid = (detail: string): Error => new Error(`Die Plugin-Konfiguration enthält eine ungültige Vorlage: ${detail}`);
34
+ const invalid = (detail: string): Error => new Error(`The plugin configuration contains an invalid template: ${detail}`);
35
35
 
36
36
  export const startEntryFrom = (value: unknown): StartEntry => {
37
- if (!isRecord(value)) throw invalid("kein Objekt");
38
- if (!text(value.id)) throw invalid("id fehlt");
37
+ if (!isRecord(value)) throw invalid("not an object");
38
+ if (!text(value.id)) throw invalid("id is missing");
39
39
  const id = value.id;
40
- if (!text(value.owner) || !text(value.title) || !text(value.description)) throw invalid(`${id}: owner, title und description sind Pflicht`);
41
- if (value.order !== undefined && typeof value.order !== "number") throw invalid(`${id}: order ist keine Zahl`);
42
- if (value.guide !== undefined && !text(value.guide)) throw invalid(`${id}: guide ist leer`);
40
+ if (!text(value.owner) || !text(value.title) || !text(value.description)) throw invalid(`${id}: owner, title and description are required`);
41
+ if (value.order !== undefined && typeof value.order !== "number") throw invalid(`${id}: order is not a number`);
42
+ if (value.guide !== undefined && !text(value.guide)) throw invalid(`${id}: guide is empty`);
43
43
  if (value.tags !== undefined && (!Array.isArray(value.tags)
44
44
  || value.tags.some((tag) => !text(tag) || tag !== tag.trim())
45
45
  || new Set(value.tags).size !== value.tags.length)) {
46
- throw invalid(`${id}: tags müssen eindeutige, nicht leere Schlagworte sein`);
46
+ throw invalid(`${id}: tags must be unique, non-empty keywords`);
47
47
  }
48
48
  if (value.fixedStartOptions !== undefined && (!isRecord(value.fixedStartOptions) || Object.keys(value.fixedStartOptions).length === 0)) {
49
- throw invalid(`${id}: fixedStartOptions muss mindestens eine Startoption festlegen`);
49
+ throw invalid(`${id}: fixedStartOptions must fix at least one start option`);
50
50
  }
51
51
  const base: StartEntryBase = {
52
52
  id,
@@ -60,22 +60,22 @@ export const startEntryFrom = (value: unknown): StartEntry => {
60
60
  };
61
61
  const allowed = (extra: readonly string[]) => {
62
62
  const unknown = Object.keys(value).filter((field) => !BASE_FIELDS.includes(field) && !extra.includes(field));
63
- if (unknown.length > 0) throw invalid(`${id}: unbekannte Felder ${unknown.join(", ")}`);
63
+ if (unknown.length > 0) throw invalid(`${id}: unknown fields ${unknown.join(", ")}`);
64
64
  };
65
65
  switch (value.action) {
66
66
  case "skill": {
67
67
  allowed(["skill", "prompt", "category"]);
68
- if (!text(value.skill)) throw invalid(`${id}: skill fehlt`);
69
- if (!text(value.category) || !value.category.trim() || value.category !== value.category.trim()) throw invalid(`${id}: category muss ein einzelner nicht leerer Text sein`);
70
- if (!text(value.prompt) || !value.prompt.trim()) throw invalid(`${id}: prompt fehlt oder ist leer`);
68
+ if (!text(value.skill)) throw invalid(`${id}: skill is missing`);
69
+ if (!text(value.category) || !value.category.trim() || value.category !== value.category.trim()) throw invalid(`${id}: category must be a single non-empty text`);
70
+ if (!text(value.prompt) || !value.prompt.trim()) throw invalid(`${id}: prompt is missing or empty`);
71
71
  return { ...base, action: "skill", skill: value.skill, category: value.category, prompt: value.prompt };
72
72
  }
73
73
  case "script":
74
74
  allowed(["coordinator", "category"]);
75
- if (typeof value.coordinator !== "boolean") throw invalid(`${id}: coordinator muss true oder false sein`);
76
- if (value.category !== undefined && (!text(value.category) || value.category !== value.category.trim())) throw invalid(`${id}: category muss ein einzelner nicht leerer Text sein`);
75
+ if (typeof value.coordinator !== "boolean") throw invalid(`${id}: coordinator must be true or false`);
76
+ if (value.category !== undefined && (!text(value.category) || value.category !== value.category.trim())) throw invalid(`${id}: category must be a single non-empty text`);
77
77
  return { ...base, action: "script", coordinator: value.coordinator, ...(value.category !== undefined ? { category: value.category } : {}) };
78
78
  default:
79
- throw invalid(`${id}: unbekannte Aktion ${String(value.action)}; gültig sind skill und script`);
79
+ throw invalid(`${id}: unknown action ${String(value.action)}; valid are skill and script`);
80
80
  }
81
81
  };
@@ -9,7 +9,7 @@ export interface StartOptionState {
9
9
  presentation: unknown;
10
10
  selectable: boolean;
11
11
  locked: boolean;
12
- /** Ob jemand den Wert vor dem Start gewählt hat; eine Vorlage, die etwas anderes festlegt, lehnt den Start dann ab. */
12
+ /** Whether someone chose the value before the start; a template that sets something else then rejects the start. */
13
13
  chosen: boolean;
14
14
  }
15
15
 
@@ -35,13 +35,13 @@ const isChoiceOption = (value: unknown): value is ChoicePresentationOption =>
35
35
  && (value.hint === undefined || typeof value.hint === "string");
36
36
 
37
37
  export const choicePresentationFrom = (presentation: unknown, optionId: string): ChoicePresentation | undefined => {
38
- if (!isRecord(presentation)) throw new Error(`Die Startoption ${optionId} liefert keine Darstellung`);
38
+ if (!isRecord(presentation)) throw new Error(`The start option ${optionId} provides no presentation`);
39
39
  if (presentation.kind !== "choice") return undefined;
40
40
  if (typeof presentation.label !== "string" || !presentation.label) {
41
- throw new Error(`Die Auswahl-Darstellung der Startoption ${optionId} hat kein label`);
41
+ throw new Error(`The choice presentation of the start option ${optionId} has no label`);
42
42
  }
43
43
  if (!Array.isArray(presentation.options) || !presentation.options.every(isChoiceOption)) {
44
- throw new Error(`Die Auswahl-Darstellung der Startoption ${optionId} braucht options aus value und label`);
44
+ throw new Error(`The choice presentation of the start option ${optionId} needs options made of value and label`);
45
45
  }
46
46
  return { kind: "choice", label: presentation.label, options: presentation.options };
47
47
  };
@@ -55,7 +55,7 @@ export const startOptionStateFrom = (value: unknown): StartOptionState => {
55
55
  || typeof value.selectable !== "boolean"
56
56
  || typeof value.locked !== "boolean"
57
57
  || typeof value.chosen !== "boolean") {
58
- throw new Error("Die Startoption entspricht nicht dem erwarteten Format");
58
+ throw new Error("The start option does not match the expected format");
59
59
  }
60
60
  return {
61
61
  id: value.id,
@@ -38,7 +38,7 @@ const flag = (value: string | undefined, key: string): boolean => {
38
38
  if (value === undefined || value === "") return false;
39
39
  if (value === "1") return true;
40
40
  if (value === "0") return false;
41
- throw new Error(`${key} muss "0" oder "1" sein, nicht "${value}"`);
41
+ throw new Error(`${key} must be "0" or "1", not "${value}"`);
42
42
  };
43
43
 
44
44
  const labelOf = (text: string, id: string): string => {
@@ -52,7 +52,7 @@ export const systemPromptOptionsFromDirectory = (directory: string): readonly Sy
52
52
  entries = readdirSync(directory, { withFileTypes: true });
53
53
  } catch (error) {
54
54
  throw new Error(
55
- `Das Prompt-Verzeichnis ${directory} ist nicht lesbar (${error instanceof Error ? error.message : String(error)})`);
55
+ `The prompt directory ${directory} is not readable (${error instanceof Error ? error.message : String(error)})`);
56
56
  }
57
57
  const files = entries
58
58
  .filter((entry) => entry.isFile() && PROMPT_EXTENSIONS.includes(path.extname(entry.name)))
@@ -65,9 +65,9 @@ export const systemPromptOptionsFromDirectory = (directory: string): readonly Sy
65
65
  return { id, label: labelOf(text, id), file, text };
66
66
  });
67
67
  const duplicate = options.find((option, index) => options.findIndex((other) => other.id === option.id) !== index);
68
- if (duplicate) throw new Error(`Das Prompt-Verzeichnis ${directory} enthält die Kennung ${duplicate.id} mehrfach`);
68
+ if (duplicate) throw new Error(`The prompt directory ${directory} contains the identifier ${duplicate.id} more than once`);
69
69
  if (options.length === 0) {
70
- throw new Error(`Das Prompt-Verzeichnis ${directory} enthält keine ${PROMPT_EXTENSIONS.join("- oder ")}-Datei`);
70
+ throw new Error(`The prompt directory ${directory} contains no ${PROMPT_EXTENSIONS.join(" or ")} file`);
71
71
  }
72
72
  return options;
73
73
  };
@@ -94,28 +94,28 @@ export const systemPromptCatalogFromEnvironment = (
94
94
  ];
95
95
  const collision = options.find((option, index) => options.findIndex((other) => other.id === option.id) !== index);
96
96
  if (collision) {
97
- throw new Error(`Der Systemprompt ${collision.id} kommt aus dem Plugin-Ordner und aus SYSTEM_PROMPTS_DIR`);
97
+ throw new Error(`The system prompt ${collision.id} comes from the plugin folder and from SYSTEM_PROMPTS_DIR`);
98
98
  }
99
99
  if (options.length === 0) {
100
100
  return Object.freeze({ mode: "fixed" as const, options: [], defaultIds: [], shareDefault: false });
101
101
  }
102
102
  if (mode !== undefined && !SYSTEM_PROMPT_MODES.includes(mode as SystemPromptMode)) {
103
- throw new Error(`SYSTEM_PROMPT_MODE muss einer der Werte ${SYSTEM_PROMPT_MODES.join(", ")} sein, nicht "${mode}"`);
103
+ throw new Error(`SYSTEM_PROMPT_MODE must be one of ${SYSTEM_PROMPT_MODES.join(", ")}, not "${mode}"`);
104
104
  }
105
105
  const effectiveMode = (mode ?? "selectable") as SystemPromptMode;
106
106
  const wanted = (defaultId ?? "").split(",").map((entry) => entry.trim()).filter(Boolean);
107
107
  if (effectiveMode === "fixed" && wanted.length === 0) {
108
- throw new Error("SYSTEM_PROMPT_MODE ist fixed, SYSTEM_PROMPT_DEFAULT benennt dann die gültigen Prompts");
108
+ throw new Error("SYSTEM_PROMPT_MODE is fixed, so SYSTEM_PROMPT_DEFAULT names the valid prompts");
109
109
  }
110
110
  for (const id of wanted) {
111
111
  if (!options.some((option) => option.id === id)) {
112
112
  throw new Error(
113
- `SYSTEM_PROMPT_DEFAULT ${id} ist kein auswählbarer Systemprompt; `
114
- + `vorhanden sind ${options.map((option) => option.id).join(", ")}`);
113
+ `SYSTEM_PROMPT_DEFAULT ${id} is not a selectable system prompt; `
114
+ + `available are ${options.map((option) => option.id).join(", ")}`);
115
115
  }
116
116
  }
117
117
  const duplicate = wanted.find((id, index) => wanted.indexOf(id) !== index);
118
- if (duplicate) throw new Error(`SYSTEM_PROMPT_DEFAULT nennt ${duplicate} mehrfach`);
118
+ if (duplicate) throw new Error(`SYSTEM_PROMPT_DEFAULT names ${duplicate} more than once`);
119
119
  return Object.freeze({
120
120
  mode: effectiveMode,
121
121
  options,
@@ -132,7 +132,7 @@ export const selectedSystemPrompts = (
132
132
  const wanted = catalog.mode === "fixed" ? catalog.defaultIds : selection ?? catalog.defaultIds;
133
133
  return wanted.map((id) => {
134
134
  const option = catalog.options.find((entry) => entry.id === id);
135
- if (!option) throw new Error(`Der Systemprompt ${id} ist nicht mehr konfiguriert`);
135
+ if (!option) throw new Error(`The system prompt ${id} is no longer configured`);
136
136
  return option;
137
137
  });
138
138
  };
@@ -3,11 +3,11 @@ import { modelDefaultThinking } from "./model-aliases.js";
3
3
 
4
4
  export const checkedThinkingLevel = (value: string, label: string): ThinkingLevel => {
5
5
  if (!isThinkingLevel(value)) {
6
- throw new Error(`${label} hat die unbekannte Denktiefe "${value}"; erlaubt sind ${thinkingLevels.join(", ")}.`);
6
+ throw new Error(`${label} has the unknown thinking level "${value}"; allowed are ${thinkingLevels.join(", ")}.`);
7
7
  }
8
8
  return value;
9
9
  };
10
10
 
11
- /** Die Denktiefe einer Rolle: ihr Schlüssel, sonst die Denktiefe, die der Alias ihres Modells mitbringt, sonst high. */
11
+ /** The thinking level of a role: its key, otherwise the thinking level the alias of its model brings along, otherwise high. */
12
12
  export const roleThinkingLevel = (configured: string | undefined, label: string, provider: string, model: string): ThinkingLevel =>
13
13
  checkedThinkingLevel(configured || modelDefaultThinking(provider, model) || "high", label);
@@ -5,10 +5,10 @@ import {
5
5
 
6
6
  export const alwaysAvailable = defineToolAvailability({
7
7
  availability: "always",
8
- availabilityDetail: "In jedem Modell-Turn verfügbar.",
8
+ availabilityDetail: "Available in every model turn.",
9
9
  }, () => true);
10
10
 
11
11
  export const facesOperator: ToolAvailability = defineToolAvailability({
12
12
  availability: "always",
13
- availabilityDetail: "In jedem Turn verfügbar; die Frage geht immer an den Benutzer des Runs.",
13
+ availabilityDetail: "Available in every turn; the question always goes to the user of the run.",
14
14
  }, () => true);
@@ -8,7 +8,7 @@ export interface WorkspaceIdentity {
8
8
  storageRoot?: string;
9
9
  }
10
10
 
11
- /** Was während des Abgleichs verschwindet, etwa ein umbenanntes Paket aus dem Staging, braucht keine Rechte mehr. */
11
+ /** Whatever vanishes during the sync, such as a renamed package from staging, no longer needs rights. */
12
12
  const unlessVanished = (error: NodeJS.ErrnoException): undefined => {
13
13
  if (error.code === "ENOENT") return undefined;
14
14
  throw error;
@@ -17,11 +17,11 @@ const unlessVanished = (error: NodeJS.ErrnoException): undefined => {
17
17
  export const syncWorkspaceOwnership = async (directory: string, identity: WorkspaceIdentity): Promise<void> => {
18
18
  if (identity.uid === undefined && identity.gid === undefined) return;
19
19
  if (identity.uid === undefined || identity.gid === undefined || !identity.storageRoot) {
20
- throw new Error("Für private Arbeitsdateien fehlen UID, GID oder die Run-Speichergrenze.");
20
+ throw new Error("Private working files are missing a UID, GID or the run storage boundary.");
21
21
  }
22
- if ((await lstat(directory)).isSymbolicLink()) throw new Error("Das private Arbeitsverzeichnis darf kein Symlink sein.");
22
+ if ((await lstat(directory)).isSymbolicLink()) throw new Error("The private working directory must not be a symlink.");
23
23
  const [root, target] = await Promise.all([realpath(identity.storageRoot), realpath(directory)]);
24
- if (!containsWorkspacePath(root, target) || target === root) throw new Error("Das private Arbeitsverzeichnis liegt außerhalb seiner Run-Speichergrenze.");
24
+ if (!containsWorkspacePath(root, target) || target === root) throw new Error("The private working directory lies outside its run storage boundary.");
25
25
  const { uid, gid } = identity;
26
26
  const visit = async (file: string): Promise<void> => {
27
27
  const info = await lstat(file).catch(unlessVanished);
@@ -34,7 +34,7 @@ export const syncWorkspaceOwnership = async (directory: string, identity: Worksp
34
34
  await visit(target);
35
35
  for (let ancestor = path.dirname(target); containsWorkspacePath(root, ancestor); ancestor = path.dirname(ancestor)) {
36
36
  const info = await lstat(ancestor);
37
- if (!info.isDirectory()) throw new Error("Ein Vorfahr des Arbeitsverzeichnisses ist kein Verzeichnis.");
37
+ if (!info.isDirectory()) throw new Error("An ancestor of the working directory is not a directory.");
38
38
  const mode = (info.mode & 0o7777) | 0o111;
39
39
  if ((info.mode & 0o7777) !== mode) await chmod(ancestor, mode);
40
40
  if (ancestor === root) break;
@@ -48,23 +48,23 @@ export interface RegisteredWorkspaceRoot {
48
48
  ownershipDirectoryFor?: (runId: string) => string | Promise<string>;
49
49
  }
50
50
 
51
- /** Eine Wurzel des Servers, wie ein Prompt sie nennt: ihr Alias, ob Werkzeuge darin schreiben dürfen, und die Variable, die sie in einer Bash auf dem Server nennt. */
51
+ /** A root of the server as a prompt names it: its alias, whether tools may write in it, and the variable that names it in a bash on the server. */
52
52
  export interface ServerRootDescription {
53
53
  readonly alias: string;
54
54
  readonly writable: boolean;
55
55
  readonly environmentVariable?: string;
56
56
  }
57
57
 
58
- /** Der einzige Zugang der Plugins zum Arbeitsbereich eines Runs: eine Operation läuft beim Executor der Maschine, der die angesprochene Wurzel gehört. */
58
+ /** The plugins' only access to a run's workspace: an operation runs at the executor of the machine that owns the addressed root. */
59
59
  export interface SandboxServices {
60
60
  execute: (runId: string, operation: string, input: unknown, options?: WorkspaceExecuteOptions) => Promise<unknown>;
61
- /** Der Kontext für Arbeit, die auf dem Server läuft (TypeScript-Plattform, Actor-Programme); nie der Ordner eines Arbeitsplatzes. */
61
+ /** The context for work that runs on the server (TypeScript platform, actor programs); never the folder of a workstation. */
62
62
  serverProcessContextFor: (runId: string) => Promise<WorkspaceProcessContext>;
63
63
  registerWorkspaceRoot: (root: RegisteredWorkspaceRoot) => void;
64
64
  shutdown: (runId: string) => Promise<void>;
65
65
  }
66
66
 
67
- /** Ein fachlicher Fehler des Executors sieht beim Aufrufer aus wie jeder andere Fehler des Servers. */
67
+ /** A domain error of the executor looks to the caller like any other error of the server. */
68
68
  export const withDomainCause = (error: unknown): unknown =>
69
69
  error instanceof WorkspaceOperationError ? new DomainError(error.code, error.message, error.status) : error;
70
70
 
@@ -72,24 +72,24 @@ export const sandboxServicesToken = serviceToken<SandboxServices>("ragents.works
72
72
 
73
73
  export interface WorkspaceSandboxHostOptions {
74
74
  contributorName: string;
75
- /** Was die Plugins des Profils zum Executor dieses Servers beitragen; jeder Arbeitsplatz der Runs trägt dieselben Beiträge. */
75
+ /** What the profile's plugins contribute to this server's executor; every workstation of the runs carries the same contributions. */
76
76
  contributions: readonly WorkspaceExecutorParts[];
77
77
  workspaceFor: (runId: string) => Promise<SessionWorkspace>;
78
78
  identFor: (runId: string) => Promise<SessionIdent | undefined>;
79
79
  skillPaths: () => Promise<readonly string[]>;
80
80
  homeFor: (runId: string) => Promise<SandboxHomeEnvironment>;
81
81
  storageRootFor?: (runId: string) => string;
82
- /** Der Executor eines Runs, der nicht auf dem Server arbeitet; ohne Antwort führt der Executor des Servers aus. */
82
+ /** The executor of a run that does not work on the server; without an answer the server's executor executes. */
83
83
  executorFor?: (runId: string) => Promise<WorkspaceExecutor | undefined>;
84
- /** Der eigene Ordner eines solchen Runs auf dem Server, für Arbeit, die dort läuft. */
84
+ /** The own folder of such a run on the server, for work that runs there. */
85
85
  serverDirectoryFor?: (runId: string) => Promise<string>;
86
- /** Die Prozess-Sandbox, in der jeder Prozess des Executors dieses Servers startet; ohne sie laufen Prozesse ohne. */
86
+ /** The process sandbox in which every process of this server's executor starts; without it processes run without one. */
87
87
  processSandbox?: RunProcessSandboxes;
88
- /** Die Bash des Executors dieses Servers; unter Windows Pflicht, sonst ohne Angabe die des Systems. */
88
+ /** The bash of this server's executor; required on Windows, otherwise the system's when not set. */
89
89
  bash?: string;
90
- /** Das rg des Executors dieses Servers; ohne Angabe gilt eines im PATH. */
90
+ /** The rg of this server's executor; when not set, one on the PATH applies. */
91
91
  rg?: string;
92
- /** Die Zeitgrenze von bash in Sekunden für Aufrufe ohne eigene, auf jeder Maschine der Runs; ohne Angabe die des Werkzeugs. */
92
+ /** The bash time limit in seconds for calls without their own, on every machine of the runs; when not set, the tool's. */
93
93
  bashTimeoutSeconds?: number;
94
94
  }
95
95
 
@@ -102,7 +102,7 @@ const sandboxDescriptions: Readonly<Record<string, string>> = {
102
102
 
103
103
  const describeSandboxTool = (definition: AgentToolDefinition): AgentToolDefinition => {
104
104
  const description = sandboxDescriptions[definition.name];
105
- if (!description) throw new Error(`Das Sandbox-Werkzeug ${definition.name} hat keine Kurzbeschreibung`);
105
+ if (!description) throw new Error(`The sandbox tool ${definition.name} has no short description`);
106
106
  return { ...definition, description, longDescription: definition.description, nativeTool: true };
107
107
  };
108
108
 
@@ -119,39 +119,39 @@ interface StableRunParts {
119
119
  ident?: SessionIdent;
120
120
  home: SandboxHomeEnvironment;
121
121
  readOnlyRoots: readonly ResolvedWorkspaceRoot[];
122
- /** Der eigene Temp-Ordner des Runs in der Sandbox. */
122
+ /** The run's own temp folder in the sandbox. */
123
123
  temporary?: string;
124
124
  }
125
125
 
126
126
  const mixedRoots = (aliases: readonly string[]): DomainError => new DomainError(
127
127
  "workspace-roots-mixed",
128
- `Der Aufruf nennt ${aliases.join(", ")} auf dem Server und zugleich einen Pfad im Arbeitsbereich auf dem Arbeitsplatz; `
129
- + "ein Aufruf erreicht nur einen Rechner. Teile ihn in einen Aufruf je Rechner.",
128
+ `The call names ${aliases.join(", ")} on the server and at the same time a path in the workspace on the workstation; `
129
+ + "a call reaches only one machine. Split it into one call per machine.",
130
130
  400,
131
131
  );
132
132
 
133
- /** Die Ordner, die ein Arbeitsbereich der Prozess-Sandbox zusätzlich öffnet, getrennt nach Zugriff; ein relativer Pfad hätte auf dem Server keinen Ort. */
133
+ /** The folders a workspace additionally opens to the process sandbox, separated by access; a relative path would have no location on the server. */
134
134
  const sandboxFoldersWith = (folders: readonly SandboxFolder[], access: SandboxFolder["access"]): string[] =>
135
135
  folders.filter((folder) => folder.access === access).map((folder) => {
136
- if (!path.isAbsolute(folder.directory)) throw new Error(`Der Ordner ${folder.directory} für die Prozess-Sandbox muss absolut sein`);
136
+ if (!path.isAbsolute(folder.directory)) throw new Error(`The folder ${folder.directory} for the process sandbox must be absolute`);
137
137
  return folder.directory;
138
138
  });
139
139
 
140
- /** Ein nur lesbarer Pfad, den es nicht gibt, ist keine Wurzel; ein fehlender Skill-Ordner darf keinen Run verhindern. */
140
+ /** A read-only path that does not exist is not a root; a missing skill folder must not prevent a run. */
141
141
  const existingRoots = async (roots: readonly ResolvedWorkspaceRoot[]): Promise<ResolvedWorkspaceRoot[]> => {
142
142
  const resolved = await Promise.all(roots.map((root) =>
143
143
  realpath(root.directory).then((directory) => ({ ...root, directory }), () => undefined)));
144
144
  return resolved.filter((root) => root !== undefined);
145
145
  };
146
146
 
147
- /** Der Executor des Servers mit den Wurzeln des Servers; eine Operation mit Alias läuft dort, jede andere beim Executor der Bindung des Runs. */
147
+ /** The server's executor with the server's roots; an operation with an alias runs there, every other one at the executor of the run's binding. */
148
148
  export class WorkspaceSandboxHost implements SandboxServices {
149
149
  readonly #options: WorkspaceSandboxHostOptions;
150
150
  readonly #definitions: readonly AgentToolDefinition[];
151
151
  readonly #workspaceRoots: RegisteredWorkspaceRoot[] = [];
152
152
  readonly #local: WorkspaceOperationExecutor;
153
153
  readonly #stable = new Map<string, Promise<StableRunParts>>();
154
- /** Je Run der Dateistand, den ein Modell zuletzt gesehen hat, nach Actor, Modellkontext und Pfad; nur im Speicher, ein Verlust verlangt höchstens ein neues read. */
154
+ /** Per run the file state a model saw last, by actor, model context and path; only in memory, a loss requires at most a new read. */
155
155
  readonly #seen = new Map<string, Map<string, SeenFile>>();
156
156
 
157
157
  constructor(options: WorkspaceSandboxHostOptions) {
@@ -165,14 +165,14 @@ export class WorkspaceSandboxHost implements SandboxServices {
165
165
 
166
166
  registerWorkspaceRoot(root: RegisteredWorkspaceRoot): void {
167
167
  if (!root.id.trim() || this.#workspaceRoots.some((entry) => entry.id === root.id)) {
168
- throw new Error(`Arbeitsverzeichnis ${root.id} ist leer oder bereits registriert`);
168
+ throw new Error(`Working directory ${root.id} is empty or already registered`);
169
169
  }
170
170
  if (root.alias && (!/^@[a-z][a-z0-9-]*$/.test(root.alias) || root.alias === SKILLS_ALIAS
171
171
  || this.#workspaceRoots.some((entry) => entry.alias === root.alias))) {
172
- throw new Error(`Arbeitsverzeichnis-Alias ${root.alias} ist ungültig, dem Host vorbehalten oder bereits registriert`);
172
+ throw new Error(`Working directory alias ${root.alias} is invalid, reserved for the host or already registered`);
173
173
  }
174
174
  if (root.environmentVariable && (!/^RAGENTS_[A-Z_]+_DIR$/.test(root.environmentVariable) || this.#workspaceRoots.some((entry) => entry.environmentVariable === root.environmentVariable))) {
175
- throw new Error(`Arbeitsverzeichnis-Variable ${root.environmentVariable} ist ungültig oder bereits registriert`);
175
+ throw new Error(`Working directory variable ${root.environmentVariable} is invalid or already registered`);
176
176
  }
177
177
  this.#workspaceRoots.push(root);
178
178
  }
@@ -181,7 +181,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
181
181
  const roots = await Promise.all(this.#workspaceRoots.map(async (entry) => {
182
182
  const directory = await entry.directoryFor(runId);
183
183
  if (directory === undefined) return undefined;
184
- if (!path.isAbsolute(directory)) throw new Error(`Arbeitsverzeichnis ${entry.id} muss absolut sein`);
184
+ if (!path.isAbsolute(directory)) throw new Error(`Working directory ${entry.id} must be absolute`);
185
185
  if (ident) await syncWorkspaceOwnership(await entry.ownershipDirectoryFor?.(runId) ?? directory, {
186
186
  ...ident, storageRoot: this.#options.storageRootFor?.(runId),
187
187
  });
@@ -190,7 +190,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
190
190
  return roots.filter((root) => root !== undefined);
191
191
  }
192
192
 
193
- /** Die Wurzeln des Servers mit Alias, die ein Run neben seinem Arbeitsbereich erreicht: die registrierten und die Skill-Ordner. */
193
+ /** The server's roots with an alias that a run reaches besides its workspace: the registered ones and the skill folders. */
194
194
  async serverRoots(): Promise<readonly ServerRootDescription[]> {
195
195
  const registered = this.#workspaceRoots.flatMap(({ alias, environmentVariable }) => alias === undefined ? [] : [{
196
196
  alias, writable: true, ...(environmentVariable === undefined ? {} : { environmentVariable }),
@@ -199,15 +199,15 @@ export class WorkspaceSandboxHost implements SandboxServices {
199
199
  return [...registered, ...skills];
200
200
  }
201
201
 
202
- /** Bei einem Run mit eigenem Executor ein Ordner des Runs auf dem Server, sonst derselbe Kontext wie für seine Werkzeuge. */
202
+ /** For a run with its own executor a folder of the run on the server, otherwise the same context as for its tools. */
203
203
  async serverProcessContextFor(runId: string): Promise<WorkspaceProcessContext> {
204
204
  if (!await this.#options.executorFor?.(runId)) return this.#contextFor(runId);
205
205
  const serverDirectoryFor = this.#options.serverDirectoryFor;
206
- if (!serverDirectoryFor) throw new Error(`Der Run ${runId} arbeitet nicht auf dem Server, und der Sandbox-Host kennt keinen Serverordner für ihn`);
206
+ if (!serverDirectoryFor) throw new Error(`The run ${runId} does not work on the server, and the sandbox host knows no server folder for it`);
207
207
  return this.#contextFor(runId, await serverDirectoryFor(runId));
208
208
  }
209
209
 
210
- /** Der Kontext des Executors dieses Servers; ohne eigenen Ordner der Arbeitsbereich selbst, der dafür auf dem Server liegen muss. */
210
+ /** The context of this server's executor; without its own folder the workspace itself, which must then lie on the server. */
211
211
  async #contextFor(runId: string, serverDirectory?: string): Promise<WorkspaceProcessContext> {
212
212
  const workspace = await this.#options.workspaceFor(runId);
213
213
  const { ident, home, readOnlyRoots, temporary } = await this.#stableParts(runId, workspace);
@@ -245,18 +245,18 @@ export class WorkspaceSandboxHost implements SandboxServices {
245
245
  });
246
246
  }
247
247
 
248
- /** Der Temp-Ordner eines Runs liegt in seiner Ablage, damit er mit dem Run verschwindet und kein anderer Run ihn sieht. */
248
+ /** A run's temp folder lies in its storage so that it vanishes with the run and no other run sees it. */
249
249
  async #temporaryFor(runId: string, ident: SessionIdent | undefined): Promise<string | undefined> {
250
250
  if (!this.#options.processSandbox) return undefined;
251
251
  const storageRoot = this.#options.storageRootFor?.(runId);
252
- if (!storageRoot) throw new Error(`Die Prozess-Sandbox braucht die Ablage des Runs ${runId} für seinen Temp-Ordner`);
252
+ if (!storageRoot) throw new Error(`The process sandbox needs the storage of the run ${runId} for its temp folder`);
253
253
  const directory = path.join(storageRoot, "tmp");
254
254
  await mkdir(directory, { recursive: true });
255
255
  if (ident) await syncWorkspaceOwnership(directory, { ...ident, storageRoot });
256
256
  return realpath(directory);
257
257
  }
258
258
 
259
- /** Kennung, Heimatordner und nur lesbare Wurzeln stehen je Run fest; nur sie werden gemerkt. */
259
+ /** Identity, home folder and read-only roots are fixed per run; only they are remembered. */
260
260
  #stableParts(runId: string, workspace: SessionWorkspace): Promise<StableRunParts> {
261
261
  const known = this.#stable.get(runId);
262
262
  if (known) return known;
@@ -301,7 +301,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
301
301
  };
302
302
  }
303
303
 
304
- /** Die Laufzeit, die eine Eingabe selbst verlangt, gilt, wenn der Aufrufer keine nennt; sie verlängert nur das Warten auf einen entfernten Executor. */
304
+ /** The duration an input asks for itself applies when the caller names none; it only extends the wait for a remote executor. */
305
305
  async execute(runId: string, operation: string, input: unknown, options: WorkspaceExecuteOptions = {}): Promise<unknown> {
306
306
  try {
307
307
  const { roots, durationMs } = this.#local.footprintOf(operation, input);
@@ -313,7 +313,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
313
313
  }
314
314
  }
315
315
 
316
- /** Auch ein Run mit eigenem Executor hat auf dem Server markierte Prozesse der TypeScript-Plattform; beide Executoren räumen ab. */
316
+ /** A run with its own executor also has marked TypeScript platform processes on the server; both executors clean up. */
317
317
  async shutdown(runId: string): Promise<void> {
318
318
  this.#stable.delete(runId);
319
319
  this.#seen.delete(runId);
@@ -329,7 +329,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
329
329
  return this.#local.shutdown();
330
330
  }
331
331
 
332
- /** Aliasse nennen Wurzeln des Servers, jeder andere Pfad die Wurzel des Runs auf der Maschine seiner Bindung; ohne Alias entscheidet die Bindung. */
332
+ /** Aliases name roots of the server, every other path the run's root on the machine of its binding; without an alias the binding decides. */
333
333
  async #executorFor(runId: string, { aliases, runRoot }: AddressedRoots): Promise<WorkspaceExecutor> {
334
334
  const bound = await this.#options.executorFor?.(runId);
335
335
  if (!bound || aliases.length === 0) return bound ?? this.#local;
@@ -342,7 +342,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
342
342
  const described = describeSandboxTool(definition);
343
343
  const proxy = {
344
344
  ...described,
345
- // Die Vorgaben des Schemas, etwa die Zeitgrenze von bash, setzt der Server ein; so gilt auf jeder Maschine, was das Modell im Schema sieht.
345
+ // The server fills in the schema defaults, such as the bash time limit; so what the model sees in the schema applies on every machine.
346
346
  execute: (toolCallId: string, params: unknown, signal: AbortSignal | undefined) =>
347
347
  this.execute(context.runId, described.name, Value.Default(described.parameters, structuredClone(params)), {
348
348
  toolCallId,
@@ -356,7 +356,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
356
356
  }));
357
357
  }
358
358
 
359
- /** Ein direkter Aufruf des Modells gibt den Stand mit, den es von der Datei gesehen hat, und merkt sich den neuen; ein Aufruf aus TypeScript arbeitet ohne. */
359
+ /** A direct call of the model passes the state it has seen of the file and remembers the new one; a call from TypeScript works without it. */
360
360
  async #fileToolCall(runId: string, name: string, scope: ToolScope, toolCallId: string, input: { path: string }): Promise<string> {
361
361
  const options = { toolCallId, ...(scope.signal ? { signal: scope.signal } : {}) };
362
362
  if (scope.modelContext === undefined) return textOf(await this.execute(runId, name, input, options) as ToolOutput);
@@ -364,7 +364,7 @@ export class WorkspaceSandboxHost implements SandboxServices {
364
364
  const key = [scope.caller.actorId, scope.modelContext, path.posix.normalize(input.path)].join("\0");
365
365
  const result = await this.execute(runId, name, { ...input, seen: known.get(key) ?? null }, options) as ToolOutput & { details?: { seen?: SeenFile } };
366
366
  const seen = result.details?.seen;
367
- if (!seen) throw new Error(`Der Executor meldet nach ${name} keinen Dateistand; Server und Arbeitsplatz brauchen denselben Executor-Stand`);
367
+ if (!seen) throw new Error(`The executor reports no file state after ${name}; server and workstation need the same executor version`);
368
368
  this.#seen.set(runId, known.set(key, seen));
369
369
  return textOf(result);
370
370
  }