@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
@@ -33,7 +33,7 @@ export const labelOf = (command: string): string => {
33
33
 
34
34
  export interface ObservationInput {
35
35
  runId: string;
36
- /** Der Prozess dieses Executors; seine direkten Kinder sind laufende Werkzeugaufrufe. */
36
+ /** The process of this executor; its direct children are running tool calls. */
37
37
  executorPid: number;
38
38
  records: readonly ProcessRecord[];
39
39
  markerOf: (record: ProcessRecord) => string | undefined;
@@ -49,7 +49,7 @@ const byPort = (left: WorkspaceProcessPort, right: WorkspaceProcessPort): number
49
49
  const byAppearance = (left: WorkspaceProcess, right: WorkspaceProcess): number =>
50
50
  left.seenSince.localeCompare(right.seenSince) || left.pid - right.pid;
51
51
 
52
- /** Prozesse des Runs: Hintergrundprozesse immer, Kinder eines laufenden Werkzeugaufrufs nur mit offenem Port. */
52
+ /** Processes of the run: background processes always, children of a running tool call only with an open port. */
53
53
  export const runProcessesFrom = (input: ObservationInput): WorkspaceProcess[] => {
54
54
  const toolCallGroups = new Set(
55
55
  input.records.filter((record) => record.ppid === input.executorPid).map((record) => record.pgid),
@@ -4,7 +4,7 @@ import { processIdOf, type ProcessRecord, type ProcessTable } from "./process-ta
4
4
 
5
5
  export interface ProcessTerminationOptions {
6
6
  table: ProcessTable;
7
- /** Der Prozess dieses Executors; er und seine Vorfahren sind geschützt. */
7
+ /** The process of this executor; it and its ancestors are protected. */
8
8
  executorPid: number;
9
9
  executorUid: number | undefined;
10
10
  termGraceMs?: number;
@@ -42,14 +42,14 @@ export class RunProcessTerminator {
42
42
  this.#pollIntervalMs = options.pollIntervalMs ?? 100;
43
43
  this.#sendSignal = options.sendSignal ?? ((pid, signal) => { process.kill(pid, signal); });
44
44
  for (const duration of [this.#termGraceMs, this.#killGraceMs, this.#timeoutMs, this.#pollIntervalMs]) {
45
- if (!Number.isSafeInteger(duration) || duration < 1) throw new Error("Prozess-Stopp-Zeitgrenzen müssen positive ganze Zahlen sein");
45
+ if (!Number.isSafeInteger(duration) || duration < 1) throw new Error("Process stop timeouts must be positive integers");
46
46
  }
47
47
  }
48
48
 
49
49
  async stop(runId: string, processId: string, context: ProcessTerminationContext = {}): Promise<void> {
50
50
  const pid = Number(processId.split("-")[0]);
51
51
  if (!/^[1-9]\d*-[a-f0-9]{64}$/.test(processId) || !Number.isSafeInteger(pid) || pid > 2_147_483_647)
52
- throw new WorkspaceOperationError("invalid-process", "Ungültige Prozessreferenz", 400);
52
+ throw new WorkspaceOperationError("invalid-process", "Invalid process reference", 400);
53
53
  await this.#stop(runId, processId, context);
54
54
  }
55
55
 
@@ -58,13 +58,13 @@ export class RunProcessTerminator {
58
58
  }
59
59
 
60
60
  async #stop(runId: string, processId: string | undefined, context: ProcessTerminationContext): Promise<void> {
61
- if (runMarkerOf(runId) !== runId) throw new WorkspaceOperationError("invalid-run", "Ungültige Laufkennung", 400);
61
+ if (runMarkerOf(runId) !== runId) throw new WorkspaceOperationError("invalid-run", "Invalid run id", 400);
62
62
  const deadline = Date.now() + this.#timeoutMs;
63
63
  const attempts = new Map<string, Attempt>();
64
64
  const failures = new Map<string, unknown>();
65
65
  const assertClean = () => {
66
66
  if (failures.size === 1) throw [...failures.values()][0];
67
- if (failures.size > 1) throw new AggregateError([...failures.values()], `Prozess-Stopp ist für ${failures.size} Prozesse fehlgeschlagen`);
67
+ if (failures.size > 1) throw new AggregateError([...failures.values()], `Process stop failed for ${failures.size} processes`);
68
68
  };
69
69
  let first = true;
70
70
  let emptyScans = 0;
@@ -76,8 +76,8 @@ export class RunProcessTerminator {
76
76
  const markers = await this.#bounded(this.#options.table.runMarkers(readable.map((record) => record.pid)), deadline);
77
77
  if (first && processId !== undefined && selected.length > 0) {
78
78
  const record = selected[0];
79
- if (processIdOf(record) !== processId) throw new WorkspaceOperationError("stale-process", "Die Prozess-ID wurde inzwischen neu vergeben. Bitte die Prozessliste aktualisieren.", 409);
80
- if (markers.get(record.pid) !== runId) throw new WorkspaceOperationError("process-run-mismatch", "Der Prozess gehört nicht zu diesem Run", 403);
79
+ if (processIdOf(record) !== processId) throw new WorkspaceOperationError("stale-process", "The process ID has been reassigned in the meantime. Please refresh the process list.", 409);
80
+ if (markers.get(record.pid) !== runId) throw new WorkspaceOperationError("process-run-mismatch", "The process does not belong to this run", 403);
81
81
  }
82
82
  first = false;
83
83
  const targets = readable.filter((record) => markers.get(record.pid) === runId
@@ -100,7 +100,7 @@ export class RunProcessTerminator {
100
100
  } else if (attempt.killAt === undefined && Date.now() - attempt.termAt >= this.#termGraceMs) {
101
101
  if (await this.#signal(record, runId, "SIGKILL", context, deadline)) attempt.killAt = Date.now();
102
102
  } else if (attempt.killAt !== undefined && Date.now() - attempt.killAt >= this.#killGraceMs) {
103
- throw new Error(`Prozess ${record.pid} von Run ${runId} ist nach SIGKILL noch aktiv`);
103
+ throw new Error(`Process ${record.pid} of run ${runId} is still active after SIGKILL`);
104
104
  }
105
105
  } catch (error) {
106
106
  this.#assertActive(context, deadline);
@@ -125,19 +125,19 @@ export class RunProcessTerminator {
125
125
  protectedPids.add(parent);
126
126
  parent = records.find((candidate) => candidate.pid === parent)?.ppid;
127
127
  }
128
- if (protectedPids.has(record.pid)) throw new WorkspaceOperationError("protected-process", `Prozess ${record.pid} gehört zum geschützten Prozessbaum des Executors`, 403);
128
+ if (protectedPids.has(record.pid)) throw new WorkspaceOperationError("protected-process", `Process ${record.pid} belongs to the protected process tree of the executor`, 403);
129
129
  }
130
130
 
131
131
  #assertActive(context: ProcessTerminationContext, deadline: number): void {
132
132
  context.signal?.throwIfAborted();
133
- if (Date.now() >= deadline) throw new Error(`Prozess-Stopp hat die Zeitgrenze von ${this.#timeoutMs} ms überschritten`);
133
+ if (Date.now() >= deadline) throw new Error(`Process stop exceeded the timeout of ${this.#timeoutMs} ms`);
134
134
  }
135
135
 
136
136
  async #bounded<T>(operation: Promise<T>, deadline: number): Promise<T> {
137
137
  let timer: ReturnType<typeof setTimeout> | undefined;
138
138
  try {
139
139
  return await Promise.race([operation, new Promise<never>((_, reject) => {
140
- timer = setTimeout(() => reject(new Error("Die Prozesstabelle antwortet nicht innerhalb der Stopp-Zeitgrenze")), Math.max(1, deadline - Date.now()));
140
+ timer = setTimeout(() => reject(new Error("The process table does not answer within the stop timeout")), Math.max(1, deadline - Date.now()));
141
141
  })]);
142
142
  } finally {
143
143
  if (timer) clearTimeout(timer);
@@ -149,7 +149,7 @@ export class RunProcessTerminator {
149
149
  const records = await this.#bounded(this.#options.table.list(), deadline);
150
150
  const current = records.find((record) => record.pid === expected.pid);
151
151
  if (!current || current.startKey !== expected.startKey || current.uid !== expected.uid) return false;
152
- if (markers.get(current.pid) !== runId) throw new WorkspaceOperationError("process-run-mismatch", `Prozess ${current.pid} gehört nicht mehr zu diesem Run`, 403);
152
+ if (markers.get(current.pid) !== runId) throw new WorkspaceOperationError("process-run-mismatch", `Process ${current.pid} no longer belongs to this run`, 403);
153
153
  this.#assertUnprotected(current, records);
154
154
  this.#assertActive(context, deadline);
155
155
  try {
@@ -157,7 +157,7 @@ export class RunProcessTerminator {
157
157
  return true;
158
158
  } catch (error) {
159
159
  if (gone(error)) return false;
160
- throw new Error(`${signal} für Prozess ${current.pid} ist fehlgeschlagen: ${error instanceof Error ? error.message : String(error)}`);
160
+ throw new Error(`${signal} for process ${current.pid} failed: ${error instanceof Error ? error.message : String(error)}`);
161
161
  }
162
162
  }
163
163
  }
@@ -8,15 +8,15 @@ export const RUN_FOLDER_OPERATIONS = {
8
8
  } as const;
9
9
 
10
10
  export interface RunFolderCreated {
11
- /** Ob der Ordner eben entstanden ist; ein schon vorhandener bleibt, wie er ist. */
11
+ /** Whether the folder was just created; an existing one stays as it is. */
12
12
  created: boolean;
13
13
  }
14
14
 
15
- /** Der neue Ordner je Run auf dieser Maschine; nur ein Executor, der einen Ordner für Runs kennt, legt ihn an, und nur diesen einen je Run. */
15
+ /** The new folder per run on this machine; only an executor that knows a folder for runs creates it, and only this one per run. */
16
16
  export const runFolderModule = (folderOf: ((runId: string) => string) | undefined): WorkspaceModuleFactory => () => {
17
17
  const folder = (runId: string): string => {
18
18
  if (!folderOf) {
19
- throw new WorkspaceOperationError("run-folder-unavailable", "Dieser Executor legt keine Ordner je Run an; auf dem Server tut das der Host", 409);
19
+ throw new WorkspaceOperationError("run-folder-unavailable", "This executor creates no folders per run; on the server the host does that", 409);
20
20
  }
21
21
  return folderOf(runId);
22
22
  };
@@ -46,16 +46,16 @@ export const safeProcessEnvironment = (source: NodeJS.ProcessEnv): NodeJS.Proces
46
46
  return environment;
47
47
  };
48
48
 
49
- /** Die Variablen des umgebenden Editors; ein Kindprozess, der sie erbt, hängt sich an VS Code oder Electron. */
49
+ /** The variables of the surrounding editor; a child process that inherits them attaches itself to VS Code or Electron. */
50
50
  const isEditorVariable = (name: string): boolean => name.startsWith("VSCODE_") || name.startsWith("ELECTRON_");
51
51
 
52
- /** Was eine nicht interaktive Bash von sich aus einliest; über sie käme eine Startdatei des Benutzers in jeden Befehl. */
52
+ /** What a non-interactive bash reads in by itself; through it a startup file of the user would get into every command. */
53
53
  const BASH_STARTUP_VARIABLES: ReadonlySet<string> = new Set(["BASH_ENV", "ENV"]);
54
54
 
55
- /** Die ganze Umgebung eines Prozesses ohne die Variablen des umgebenden Editors. */
55
+ /** The whole environment of a process without the variables of the surrounding editor. */
56
56
  export const editorFreeEnvironment = (source: NodeJS.ProcessEnv): Record<string, string> => Object.fromEntries(Object.entries(source)
57
57
  .filter((entry): entry is [string, string] => typeof entry[1] === "string" && !isEditorVariable(entry[0])));
58
58
 
59
- /** Die geerbte Umgebung für Prozesse auf dem eigenen Rechner des Benutzers: alles außer Editor-Variablen und den Startdateien der Bash. */
59
+ /** The inherited environment for processes on the user's own machine: everything except editor variables and the startup files of the bash. */
60
60
  export const inheritedProcessEnvironment = (source: NodeJS.ProcessEnv): Record<string, string> => Object.fromEntries(
61
61
  Object.entries(editorFreeEnvironment(source)).filter(([name]) => !BASH_STARTUP_VARIABLES.has(name)));
@@ -1,5 +1,5 @@
1
1
  import { spawn } from "node:child_process";
2
- import { createHash } from "node:crypto";
2
+ import { createHash, randomUUID } from "node:crypto";
3
3
  import { readFile, stat } from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import {
@@ -12,7 +12,7 @@ import {
12
12
  import { bashLaunch } from "./bash-launch.js";
13
13
  import type { WorkspaceProcessContext } from "./context.js";
14
14
  import { WorkspaceOperationError } from "./errors.js";
15
- import { processGroupExists, stopProcessTree } from "./managed-process.js";
15
+ import { MSYS_CALL_ENV, processGroupExists, stopMsysCall, stopProcessTree } from "./managed-process.js";
16
16
  import type { WorkspaceModuleFactory, WorkspaceOperation } from "./module.js";
17
17
  import { sandboxedLaunch } from "./process-sandbox.js";
18
18
  import { stopUidProcesses } from "./session-ident.js";
@@ -42,15 +42,15 @@ export interface SandboxTools {
42
42
 
43
43
  type ToolResult = { content?: Array<{ type: string; text?: string }>; details?: unknown };
44
44
 
45
- /** Der Stand einer Datei, den das Modell zuletzt gesehen hat; der Host führt ihn je Actor und gibt ihn mit, das Modell nennt ihn nie. */
45
+ /** The state of a file that the model saw last; the host keeps it per actor and passes it along, the model never names it. */
46
46
  export interface SeenFile {
47
47
  readonly file: string;
48
48
  readonly hash: string;
49
- /** Nur nach einem read: der gelesene Ausschnitt. */
49
+ /** Only after a read: the section that was read. */
50
50
  readonly read?: { readonly offset?: number; readonly limit?: number };
51
51
  }
52
52
 
53
- /** Die Eingabe der Dateiwerkzeuge: was das Modell übergibt, und nur bei dessen direktem Aufruf der Stand, den es gesehen hat (`null`: keiner). */
53
+ /** The input of the file tools: what the model passes, and only on its direct call the state it has seen (`null`: none). */
54
54
  type FileToolInput = {
55
55
  readonly path?: unknown;
56
56
  readonly offset?: number;
@@ -61,11 +61,11 @@ type FileToolInput = {
61
61
 
62
62
  type FileToolName = "read" | "edit" | "write";
63
63
 
64
- const unchangedNotice = "Unverändert seit dem letzten read in diesem Gespräch; der frühere Inhalt gilt weiter.";
64
+ const unchangedNotice = "Unchanged since the last read in this conversation; the earlier content still applies.";
65
65
 
66
66
  const sha256 = (content: Buffer | string): string => createHash("sha256").update(content).digest("hex");
67
67
 
68
- /** Der Inhalts-Hash einer Datei; eine fehlende Datei hat keinen. */
68
+ /** The content hash of a file; a missing file has none. */
69
69
  const currentHash = async (file: string): Promise<string | undefined> => {
70
70
  try {
71
71
  return sha256(await readFile(file));
@@ -77,11 +77,11 @@ const currentHash = async (file: string): Promise<string | undefined> => {
77
77
 
78
78
  const detailHash = (result: unknown, name: FileToolName): string => {
79
79
  const hash = (result as { details?: { contentHash?: unknown } }).details?.contentHash;
80
- if (typeof hash !== "string") throw new Error(`Das Werkzeug ${name} meldet keinen Inhalts-Hash`);
80
+ if (typeof hash !== "string") throw new Error(`The tool ${name} reports no content hash`);
81
81
  return hash;
82
82
  };
83
83
 
84
- /** Ein Ergebnis und ein Fehler nennen den Pfad so, wie das Modell ihn übergeben hat, nicht den aufgelösten. */
84
+ /** A result and an error name the path as the model passed it, not the resolved one. */
85
85
  const withShownPath = (result: unknown, resolved: string, shown: string): unknown => {
86
86
  const typed = result as ToolResult;
87
87
  if (resolved === shown || !Array.isArray(typed.content)) return result;
@@ -103,7 +103,7 @@ export const withAnnotation = (result: unknown, note: string | undefined): unkno
103
103
  return { ...typed, content: [...typed.content, { type: "text", text: note }] };
104
104
  };
105
105
 
106
- /** Löst `$RAGENTS_..._DIR` und `${...}` am Anfang eines Pfads gegen die Variablen des Kontexts auf. */
106
+ /** Resolves `$RAGENTS_..._DIR` and `${...}` at the start of a path against the variables of the context. */
107
107
  const expandPathVariables = (value: string, variables: Readonly<Record<string, string>>): string => {
108
108
  for (const [name, root] of Object.entries(variables)) {
109
109
  for (const prefix of [`$${name}`, `\${${name}}`]) {
@@ -125,10 +125,14 @@ export const createSandboxTools = async (
125
125
  let toolOperation: Promise<void> = Promise.resolve();
126
126
  let shuttingDown = false;
127
127
  const processGroups = new Set<number>();
128
+ const msysCalls = new Map<number, { readonly bash: string; readonly env: NodeJS.ProcessEnv; readonly marker: string }>();
128
129
 
129
130
  const killProcessGroup = async (pid: number): Promise<void> => {
130
131
  if (onWindows) {
131
132
  stopProcessTree(pid);
133
+ const call = msysCalls.get(pid);
134
+ msysCalls.delete(pid);
135
+ if (call) await stopMsysCall(call.bash, call.env, call.marker);
132
136
  processGroups.delete(pid);
133
137
  return;
134
138
  }
@@ -149,7 +153,7 @@ export const createSandboxTools = async (
149
153
  await killProcessGroup(pid);
150
154
  const deadline = Date.now() + 5_000;
151
155
  while (await processGroupExists(pid)) {
152
- if (Date.now() >= deadline) throw new Error(`Bash-Prozessgruppe ${pid} konnte nicht beendet werden`);
156
+ if (Date.now() >= deadline) throw new Error(`Bash process group ${pid} could not be ended`);
153
157
  await new Promise((resolve) => setTimeout(resolve, 25));
154
158
  }
155
159
  processGroups.delete(pid);
@@ -172,8 +176,8 @@ export const createSandboxTools = async (
172
176
  };
173
177
 
174
178
  const concurrent = (execute: ToolExecute): ToolExecute => (toolCallId, input, signal, onUpdate) => {
175
- if (shuttingDown) throw new Error("Die Werkzeuge werden killed");
176
- if (signal?.aborted) throw new Error("Abgebrochen");
179
+ if (shuttingDown) throw new Error("The tools are being killed");
180
+ if (signal?.aborted) throw new Error("Cancelled");
177
181
  const run = () => execute(toolCallId, input, signal, onUpdate);
178
182
  return initial.runOperation ? initial.runOperation(run) : run();
179
183
  };
@@ -188,7 +192,7 @@ export const createSandboxTools = async (
188
192
  };
189
193
  };
190
194
 
191
- /** Bei einem direkten Aufruf des Modells prüft ein Schreiben den gesehenen Stand und ein erneutes read eines unveränderten Ausschnitts antwortet knapp. */
195
+ /** On a direct call of the model a write checks the seen state, and a repeated read of an unchanged section answers briefly. */
192
196
  const checkedAgainstSeen = async (name: FileToolName, file: string, shown: string, input: FileToolInput, seen: SeenFile | null): Promise<ToolResult | undefined> => {
193
197
  if (name === "read") {
194
198
  const sameView = seen?.read !== undefined && seen.file === file && seen.read.offset === input.offset && seen.read.limit === input.limit;
@@ -196,10 +200,10 @@ export const createSandboxTools = async (
196
200
  }
197
201
  const current = await currentHash(file);
198
202
  if (current === undefined) return undefined;
199
- if (seen === null || seen.file !== file) throw new WorkspaceOperationError("workspace-file-unread", `${shown}: Datei zuerst mit read lesen.`, 409);
203
+ if (seen === null || seen.file !== file) throw new WorkspaceOperationError("workspace-file-unread", `${shown}: read the file with read first.`, 409);
200
204
  if (seen.hash !== current) {
201
205
  throw new WorkspaceOperationError("workspace-file-changed",
202
- `${shown}: Datei wurde seit dem Lesen geändert (vom Benutzer, einem Formatter oder einem anderen Actor); erneut lesen.`, 409);
206
+ `${shown}: the file was changed since it was read (by the user, a formatter or another actor); read it again.`, 409);
203
207
  }
204
208
  return undefined;
205
209
  };
@@ -241,44 +245,46 @@ export const createSandboxTools = async (
241
245
  return writing ? serial(checked) : concurrent(checked);
242
246
  };
243
247
 
244
- /** Der Ordner eines Bash-Aufrufs: relativ zum Arbeitsverzeichnis oder mit Alias, auf jedem Rechner gleich, darum nie absolut, und immer in einer Wurzel des Runs. */
248
+ /** The folder of a bash call: relative to the working directory or with an alias, the same on every machine, therefore never absolute, and always in a root of the run. */
245
249
  const inFolder = (execute: ToolExecute): ToolExecute => async (toolCallId, input, signal, onUpdate) => {
246
250
  const params = input as { cwd?: unknown } | undefined;
247
251
  if (params?.cwd === undefined) return execute(toolCallId, input, signal, onUpdate);
248
252
  const requested = params.cwd;
249
253
  if (typeof requested !== "string" || requested === "" || path.isAbsolute(requested)) {
250
254
  throw new WorkspaceOperationError("workspace-path-invalid",
251
- `cwd nennt einen Ordner relativ zum Arbeitsverzeichnis oder beginnt mit einem Alias wie @actors; ${JSON.stringify(requested)} ist das nicht`, 400);
255
+ `cwd names a folder relative to the working directory or starts with an alias like @actors; ${JSON.stringify(requested)} is neither`, 400);
252
256
  }
253
257
  const context = await contextFor();
254
258
  const directory = await allowedWorkspacePath(path.resolve(cwd, expandWorkspaceAlias(requested, context.workspaceAliases ?? {})),
255
259
  [context.root, ...context.additionalRoots ?? [], ...context.readOnlyRoots ?? []]);
256
260
  if (!(await stat(directory).catch(() => undefined))?.isDirectory()) {
257
- throw new WorkspaceOperationError("workspace-path-not-found", `Den Ordner ${requested} gibt es nicht`, 404);
261
+ throw new WorkspaceOperationError("workspace-path-not-found", `The folder ${requested} does not exist`, 404);
258
262
  }
259
263
  return execute(toolCallId, { ...params, cwd: directory }, signal, onUpdate);
260
264
  };
261
265
 
262
266
  const startBash: BashOperations["exec"] = async (command, commandCwd, options) => {
263
- if (shuttingDown) throw new Error("Die Werkzeuge werden killed");
267
+ if (shuttingDown) throw new Error("The tools are being killed");
264
268
  const context = await contextFor();
265
- if (shuttingDown) throw new Error("Die Werkzeuge werden killed");
269
+ if (shuttingDown) throw new Error("The tools are being killed");
266
270
  options.signal?.throwIfAborted();
267
271
  const bash = bashLaunch({ bash: context.bash, rg: context.rg }, command, context.env);
268
272
  const launch = await sandboxedLaunch(context, bash);
269
- if (shuttingDown) throw new Error("Die Werkzeuge werden killed");
273
+ if (shuttingDown) throw new Error("The tools are being killed");
270
274
  options.signal?.throwIfAborted();
275
+ const marker = onWindows ? randomUUID() : undefined;
271
276
  return new Promise((resolve, reject) => {
272
277
  const child = spawn(launch.command, [...launch.args], {
273
278
  cwd: commandCwd,
274
279
  detached: !onWindows,
275
280
  stdio: ["ignore", "pipe", "pipe"],
276
- env: bash.env,
281
+ env: marker === undefined ? bash.env : { ...bash.env, [MSYS_CALL_ENV]: marker },
277
282
  uid: context.uid,
278
283
  gid: context.gid,
279
284
  windowsHide: true,
280
285
  });
281
286
  if (child.pid) processGroups.add(child.pid);
287
+ if (child.pid && marker !== undefined && context.bash !== undefined) msysCalls.set(child.pid, { bash: context.bash, env: context.env, marker });
282
288
  child.stdout?.on("data", options.onData);
283
289
  child.stderr?.on("data", options.onData);
284
290
  let killed = false;
@@ -294,7 +300,7 @@ export const createSandboxTools = async (
294
300
  child.kill("SIGKILL");
295
301
  } catch (failure) {
296
302
  cleanup();
297
- reject(new AggregateError([error, failure], "Bash-Prozess konnte nicht beendet werden"));
303
+ reject(new AggregateError([error, failure], "Bash process could not be ended"));
298
304
  }
299
305
  });
300
306
  };
@@ -333,8 +339,8 @@ export const createSandboxTools = async (
333
339
 
334
340
  const bashOperations: BashOperations = {
335
341
  exec: (command, commandCwd, options) => {
336
- if (shuttingDown) throw new Error("Die Werkzeuge werden killed");
337
- if (options.signal?.aborted) throw new Error("Abgebrochen");
342
+ if (shuttingDown) throw new Error("The tools are being killed");
343
+ if (options.signal?.aborted) throw new Error("Cancelled");
338
344
  return startBash(command, commandCwd, options);
339
345
  },
340
346
  };
@@ -353,16 +359,16 @@ export const createSandboxTools = async (
353
359
  };
354
360
  };
355
361
 
356
- /** Die Operationen des Moduls heißen wie die Werkzeuge, die das Modell sieht. */
362
+ /** The operations of the module are named like the tools the model sees. */
357
363
  export const SANDBOX_TOOL_NAMES = ["read", "edit", "write", "bash"] as const;
358
364
 
359
- /** Eine ausdrücklich verlangte Zeitgrenze in Sekunden verlängert, wie lange ein entfernter Executor auf die Bash warten darf. */
365
+ /** An explicitly requested timeout in seconds extends how long a remote executor may wait for the bash. */
360
366
  const bashDuration = (input: unknown): { durationMs?: number } => {
361
367
  const seconds = typeof input === "object" && input !== null ? (input as { timeout?: unknown }).timeout : undefined;
362
368
  return typeof seconds === "number" && seconds > 0 ? { durationMs: seconds * 1000 } : {};
363
369
  };
364
370
 
365
- /** Die Dateiwerkzeuge sprechen die Wurzel ihres Pfads an, Bash die ihres Ordners und ohne Ordner keine bestimmte. */
371
+ /** The file tools address the root of their path, bash the root of its folder and without a folder no specific one. */
366
372
  const sandboxToolFootprints: Readonly<Record<(typeof SANDBOX_TOOL_NAMES)[number], (input: unknown) => OperationFootprint>> = {
367
373
  read: (input) => ({ roots: rootsOfFields(input, "path") }),
368
374
  edit: (input) => ({ roots: rootsOfFields(input, "path") }),
@@ -376,7 +382,7 @@ const textOf = (update: ToolUpdate): string =>
376
382
  .map((part) => part.text)
377
383
  .join("\n");
378
384
 
379
- /** Die vier Sandbox-Werkzeuge als Operationen; die Sandbox eines Runs entsteht beim ersten Aufruf, Bash meldet ihre Ausgabe als `{ text }`. */
385
+ /** The four sandbox tools as operations; the sandbox of a run is created on the first call, bash reports its output as `{ text }`. */
380
386
  export const sandboxToolsModule: WorkspaceModuleFactory = (host) => {
381
387
  const sandboxes = new Map<string, Promise<SandboxTools>>();
382
388
  const sandboxOf = (runId: string): Promise<SandboxTools> => {
@@ -401,7 +407,7 @@ export const sandboxToolsModule: WorkspaceModuleFactory = (host) => {
401
407
  const operation = (name: string): WorkspaceOperation => async ({ runId, input, toolCallId, signal, progress }) => {
402
408
  const { tools } = await sandboxOf(runId);
403
409
  const run = tools.get(name);
404
- if (!run) throw new Error(`Die Sandbox kennt das Werkzeug ${name} nicht`);
410
+ if (!run) throw new Error(`The sandbox does not know the tool ${name}`);
405
411
  return run(input, {
406
412
  toolCallId: toolCallId ?? name,
407
413
  ...(signal ? { signal } : {}),
@@ -20,7 +20,7 @@ const processes = async (uid: number): Promise<number[]> => {
20
20
  };
21
21
 
22
22
  export const stopUidProcesses = async (uid: number): Promise<void> => {
23
- for (let versuch = 0; versuch < 20; versuch++) {
23
+ for (let attempt = 0; attempt < 20; attempt++) {
24
24
  const pids = await processes(uid);
25
25
  if (pids.length === 0) return;
26
26
  for (const pid of pids) {
@@ -33,5 +33,5 @@ export const stopUidProcesses = async (uid: number): Promise<void> => {
33
33
  await new Promise((resolve) => setTimeout(resolve, 10));
34
34
  }
35
35
  const pids = await processes(uid);
36
- if (pids.length > 0) throw new Error(`Prozesse mit UID ${uid} konnten nicht beendet werden: ${pids.join(", ")}`);
36
+ if (pids.length > 0) throw new Error(`Processes with UID ${uid} could not be ended: ${pids.join(", ")}`);
37
37
  };
@@ -9,14 +9,14 @@ const searchTexts = {
9
9
  grep: "`rg` (ripgrep) is not available here. `grep -r` also walks dependency and build folders, so exclude them: `grep -r --exclude-dir=node_modules --exclude-dir=.git --exclude-dir=bin --exclude-dir=obj ...`.",
10
10
  };
11
11
 
12
- /** Was der Executor dem Werkzeug bash über die Plattform hinaus bietet. */
12
+ /** What the executor offers the bash tool beyond the platform. */
13
13
  export interface ShellTools {
14
14
  readonly ripgrep: boolean;
15
15
  }
16
16
 
17
17
  export const shellPlatformText = (platform: NodeJS.Platform, tools: ShellTools): string => {
18
18
  const text = platformTexts[platform];
19
- if (!text) throw new Error(`Für die Plattform ${platform} gibt es keine Shell-Beschreibung.`);
19
+ if (!text) throw new Error(`There is no shell description for the platform ${platform}.`);
20
20
  const search = tools.ripgrep ? searchTexts.ripgrep : searchTexts.grep;
21
21
  return `${text} ${search} A nonzero exit code, for example \`grep\` without a match, comes back as an ordinary result with the code at the end, not as a tool error; only start, timeout and abort problems are tool errors.`;
22
22
  };
@@ -1,7 +1,7 @@
1
1
  import { homedir } from "node:os";
2
2
  import path from "node:path";
3
3
 
4
- /** Unter Windows liegen die Daten in `%LOCALAPPDATA%\ragents`, sonst unter `~/.local/share/ragents`. */
4
+ /** On Windows the data lives in `%LOCALAPPDATA%\ragents`, otherwise under `~/.local/share/ragents`. */
5
5
  export const ragentsDataRoot = (
6
6
  home = homedir(),
7
7
  platform: NodeJS.Platform = process.platform,
@@ -9,17 +9,17 @@ export const ragentsDataRoot = (
9
9
  ): string => {
10
10
  if (platform !== "win32") return path.resolve(home, ".local/share/ragents");
11
11
  const local = environment.LOCALAPPDATA;
12
- if (!local) throw new Error("LOCALAPPDATA ist nicht gesetzt; unter Windows liegt der Datenordner in %LOCALAPPDATA%\\ragents.");
12
+ if (!local) throw new Error("LOCALAPPDATA is not set; on Windows the data folder is in %LOCALAPPDATA%\\ragents.");
13
13
  return path.join(local, "ragents");
14
14
  };
15
15
 
16
- /** Der Werkzeugordner eines Plugins: was seine Provisionierung auf diese Maschine legt. */
16
+ /** The tools folder of a plugin: what its provisioning puts on this machine. */
17
17
  export const pluginToolsDirectory = (dataDirectory: string, pluginId: string): string =>
18
18
  path.join(dataDirectory, "tools", pluginId);
19
19
 
20
- /** Ein Arbeitsplatz hat kein Profil; seine Werkzeuge liegen in einem eigenen Datenordner neben denen der Profile. */
20
+ /** A workspace has no profile; its tools live in a data folder of its own next to those of the profiles. */
21
21
  export const workspaceDataDirectory = (home = homedir()): string => path.join(ragentsDataRoot(home), "workspace");
22
22
 
23
- /** Der Datenordner dieses Prozesses: DATA_DIR wie beim Server, sonst der des Arbeitsplatzes ohne Profil. */
23
+ /** The data folder of this process: DATA_DIR as on the server, otherwise the one of the workspace without a profile. */
24
24
  export const hostDataDirectory = (environment: NodeJS.ProcessEnv = process.env): string =>
25
25
  path.resolve(environment.DATA_DIR ?? workspaceDataDirectory());
@@ -14,7 +14,7 @@ const kindLabels: Readonly<Record<ActivityEntry["kind"], string>> = {
14
14
  };
15
15
 
16
16
  const titleOf = (entry: ActivityEntry) =>
17
- entry.kind === "tool" ? `Werkzeug läuft: ${entry.label}` : `Turn läuft: ${entry.label}`;
17
+ entry.kind === "tool" ? `Tool running: ${entry.label}` : `Turn running: ${entry.label}`;
18
18
 
19
19
  export function ActivityHeader({ session }: SessionHeaderContext) {
20
20
  const state = useMemo(
@@ -34,7 +34,7 @@ export function ActivityHeader({ session }: SessionHeaderContext) {
34
34
  if (!active) return null;
35
35
 
36
36
  return (
37
- <div aria-label="Was gerade läuft" className="flex min-w-0 flex-none items-stretch self-stretch" role="status">
37
+ <div aria-label="What is running right now" className="flex min-w-0 flex-none items-stretch self-stretch" role="status">
38
38
  {state.entries.map((entry) => {
39
39
  const elapsed = elapsedLabel(entry.startedAt, now);
40
40
  return (
@@ -51,7 +51,7 @@ export function ActivityHeader({ session }: SessionHeaderContext) {
51
51
  );
52
52
  })}
53
53
  {state.hidden > 0 && (
54
- <ToolbarItem className="text-muted-foreground">+{state.hidden} weitere</ToolbarItem>
54
+ <ToolbarItem className="text-muted-foreground">+{state.hidden} more</ToolbarItem>
55
55
  )}
56
56
  </div>
57
57
  );
@@ -72,7 +72,7 @@ const turnFrom = (value: unknown): ActivityTurn[] => {
72
72
  }];
73
73
  };
74
74
 
75
- /** Liest Actors und Turns aus der Run-Ansicht; eine noch nicht geladene oder fremde Struktur ergibt nichts. */
75
+ /** Reads actors and turns from the run view; a structure that is not loaded yet or unknown yields nothing. */
76
76
  export const activitySourceFrom = (
77
77
  runView: unknown,
78
78
  ): ActivitySource => {
@@ -120,7 +120,7 @@ const runningTurns = (source: ActivitySource): ActivityEntry[] =>
120
120
  }];
121
121
  });
122
122
 
123
- /** Der Ist-Zustand: offene Werkzeugaufrufe zuerst, dann laufende Turns, jeweils das Älteste voran. */
123
+ /** The current state: open tool calls first, then running turns, oldest first in each group. */
124
124
  export const activeActivity = (source: ActivitySource): ActivityState => {
125
125
  const entries = [
126
126
  ...runningTools(source).sort(byStart),
@@ -0,0 +1,31 @@
1
+ import type { AccessProjectionContribution, JsonValue } from "@ragents/engine";
2
+ import { ACTOR_INVOCATIONS_STATE_ID, ACTOR_PROGRAMS_STATE_ID } from "@ragents/host/plugin-support/actor-programs/contract.js";
3
+
4
+ const record = (value: JsonValue | undefined): Record<string, JsonValue | undefined> | undefined =>
5
+ value !== null && typeof value === "object" && !Array.isArray(value) ? value : undefined;
6
+
7
+ /** Without runs.inspect, only the name, actor, and views of a program remain; sources, functions, and directories are missing. */
8
+ const visibleProgram = (state: JsonValue): JsonValue => {
9
+ const program = record(record(state)?.program);
10
+ if (!program) return state;
11
+ const views = Array.isArray(program.views) ? program.views.map((value) => {
12
+ const view = record(value);
13
+ return view ? { id: view.id, key: view.key, title: view.title, visible: view.visible, placements: view.placements } : value;
14
+ }) : [];
15
+ return {
16
+ version: 1,
17
+ program: {
18
+ name: program.name,
19
+ title: program.title,
20
+ actorId: program.actorId,
21
+ actorHandle: program.actorHandle,
22
+ revision: program.revision,
23
+ views,
24
+ },
25
+ };
26
+ };
27
+
28
+ export const actorProgramAccessProjections: readonly AccessProjectionContribution[] = [
29
+ { id: ACTOR_PROGRAMS_STATE_ID, state: (entry) => visibleProgram(entry.state), chatEvent: () => undefined },
30
+ { id: ACTOR_INVOCATIONS_STATE_ID, state: (entry) => ({ version: 1, revision: entry.updatedAt }), chatEvent: () => undefined },
31
+ ];
@@ -7,7 +7,7 @@ export const agentToolsFrom = (host: PluginHost) =>
7
7
  const view = runtime.view(runId);
8
8
  const actor = provisional ?? view.actors.find((candidate) => candidate.id === actorId);
9
9
  if (!actor || actor.kind === "human" || actor.lifecycle.kind === "stopped") {
10
- throw new Error(`${actorId} bezeichnet keinen aktiven Agenten in diesem Run.`);
10
+ throw new Error(`${actorId} does not denote an active agent in this run.`);
11
11
  }
12
12
  const registry = new ToolRegistry();
13
13
  host.tools.entries().forEach((contributor) => registry.register(contributor));
@@ -24,7 +24,7 @@ export const agentToolsFrom = (host: PluginHost) =>
24
24
  const availableNames = new Set(tools.map((tool) => tool.name));
25
25
  const unknown = actor.toolNames.filter((name) => !availableNames.has(name));
26
26
  if (unknown.length > 0) {
27
- throw new Error(`Actor ${actorId} verlangt unbekannte Werkzeuge: ${unknown.join(", ")}.`);
27
+ throw new Error(`Actor ${actorId} requires unknown tools: ${unknown.join(", ")}.`);
28
28
  }
29
29
  const selected = new Set(actor.toolNames);
30
30
  return tools.filter((tool) => selected.has(tool.name));
@@ -37,7 +37,7 @@ const selected = <T>(
37
37
  const byId = new Map(available.map((value) => [idOf(value), value]));
38
38
  return capabilityIds.map((id) => {
39
39
  const value = byId.get(id);
40
- if (!value) throw unavailable(id, [...byId.keys()].sort().join(", ") || "keine");
40
+ if (!value) throw unavailable(id, [...byId.keys()].sort().join(", ") || "none");
41
41
  return value;
42
42
  });
43
43
  };
@@ -51,7 +51,7 @@ export const operatorCapabilityBinding = (
51
51
  operations.filter((operation) => operation.operator !== "unavailable"),
52
52
  capabilityIds,
53
53
  (operation) => operation.id,
54
- (id, names) => new Error(`Capability ${id} ist für den Bediener nicht verfügbar. Verfügbar sind: ${names}.`),
54
+ (id, names) => new Error(`Capability ${id} is not available to the operator. Available: ${names}.`),
55
55
  );
56
56
  const descriptors = resolved.map(descriptorOf);
57
57
  return {
@@ -76,7 +76,7 @@ export const agentCapabilityBinding = (
76
76
  capabilityIds,
77
77
  (tool) => tool.name,
78
78
  (id, names) => new Error(
79
- `Capability ${id} ist für @${actor.handle} nicht verfügbar. Verfügbar sind: ${names}.`,
79
+ `Capability ${id} is not available to @${actor.handle}. Available: ${names}.`,
80
80
  ),
81
81
  );
82
82
  const descriptors = resolved.map((tool) => descriptorOf({ ...tool, id: tool.name }));