@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
@@ -18,7 +18,7 @@ export const FILE_OPERATIONS = {
18
18
  attach: "files.attach",
19
19
  } as const;
20
20
 
21
- /** Der Unterordner der Wurzel, in dem angehängte Dateien eines Runs liegen. */
21
+ /** The subfolder of the root in which attached files of a run are stored. */
22
22
  export const ATTACHMENT_DIRECTORY = "attachments";
23
23
 
24
24
  export interface FileEntry {
@@ -29,7 +29,7 @@ export interface FileEntry {
29
29
  }
30
30
 
31
31
  export interface FileListing {
32
- /** Der echte Pfad der Wurzel auf dieser Maschine. */
32
+ /** The real path of the root on this machine. */
33
33
  location: string;
34
34
  path: string;
35
35
  entries: FileEntry[];
@@ -40,7 +40,7 @@ export type FileText =
40
40
  | { path: string; size: number; previewable: true; content: string }
41
41
  | { path: string; size: number; previewable: false; reason: string };
42
42
 
43
- /** Erst `ready`, sobald die Beobachtung steht, danach je entprellter Änderung `changed`. */
43
+ /** First `ready` once the watch is in place, then `changed` per debounced change. */
44
44
  export type FileWatchProgress = { kind: "ready" } | { kind: "changed" };
45
45
 
46
46
  export interface FileWatchListener {
@@ -57,11 +57,11 @@ const missing = (error: unknown): boolean => {
57
57
  return code === "ENOENT" || code === "ENOTDIR";
58
58
  };
59
59
 
60
- /** Ein Pfad unterhalb einer Wurzel: relativ, mit `/` getrennt und ohne `..`; `.` und leere Abschnitte fallen weg. */
60
+ /** A path below a root: relative, separated by `/` and without `..`; `.` and empty segments are dropped. */
61
61
  export const relativeWorkspacePath = (value: string): string => {
62
62
  const segments = value.split("/").filter((segment) => segment !== "" && segment !== ".");
63
63
  if (value.includes("\0") || value.includes("\\") || path.isAbsolute(value) || segments.includes("..")) {
64
- throw invalid(`Ungültiger Pfad: ${value}`);
64
+ throw invalid(`Invalid path: ${value}`);
65
65
  }
66
66
  return segments.join("/");
67
67
  };
@@ -70,25 +70,25 @@ const realRoot = async (root: string): Promise<string> => {
70
70
  try {
71
71
  return await realpath(root);
72
72
  } catch (error) {
73
- if (missing(error)) throw notFound(`Den Ordner ${root} gibt es nicht`);
73
+ if (missing(error)) throw notFound(`The folder ${root} does not exist`);
74
74
  throw error;
75
75
  }
76
76
  };
77
77
 
78
- /** Löst einen geprüften relativen Pfad auf; ein Symlink darf nicht aus der Wurzel führen. */
78
+ /** Resolves a checked relative path; a symlink must not lead out of the root. */
79
79
  const inside = async (base: string, relative: string): Promise<string> => {
80
80
  let real: string;
81
81
  try {
82
82
  real = await realpath(relative ? path.join(base, ...relative.split("/")) : base);
83
83
  } catch (error) {
84
- if (missing(error)) throw notFound(`Nicht gefunden: ${relative || "."}`);
84
+ if (missing(error)) throw notFound(`Not found: ${relative || "."}`);
85
85
  throw error;
86
86
  }
87
- if (!containsWorkspacePath(base, real)) throw invalid(`Pfad außerhalb des Arbeitsverzeichnisses: ${relative}`);
87
+ if (!containsWorkspacePath(base, real)) throw invalid(`Path outside the working directory: ${relative}`);
88
88
  return real;
89
89
  };
90
90
 
91
- /** Ein Eintrag, der zwischen Auflisten und Abfragen verschwindet, gehört nicht mehr zum Ordner. */
91
+ /** An entry that disappears between listing and querying no longer belongs to the folder. */
92
92
  const entryOf = async (directory: string, name: string, isDirectory: boolean): Promise<FileEntry | undefined> => {
93
93
  try {
94
94
  const info = await lstat(path.join(directory, name));
@@ -105,15 +105,15 @@ const byKindThenName = (left: FileEntry, right: FileEntry): number =>
105
105
 
106
106
  const directoryIn = async (base: string, checked: string): Promise<string> => {
107
107
  const directory = await inside(base, checked);
108
- if (!(await lstat(directory)).isDirectory()) throw invalid(`Kein Verzeichnis: ${checked || "."}`);
108
+ if (!(await lstat(directory)).isDirectory()) throw invalid(`Not a directory: ${checked || "."}`);
109
109
  return directory;
110
110
  };
111
111
 
112
- /** Der echte Pfad eines Ordners unterhalb der Wurzel, geprüft wie jeder Pfad dieses Moduls. */
112
+ /** The real path of a folder below the root, checked like every path of this module. */
113
113
  export const workspaceDirectory = async (root: string, relative: string): Promise<string> =>
114
114
  directoryIn(await realRoot(root), relativeWorkspacePath(relative));
115
115
 
116
- /** Listet einen Ordner unterhalb der Wurzel: Ordner zuerst, dann alphabetisch, höchstens `FILE_LIST_LIMIT` Einträge. */
116
+ /** Lists a folder below the root: folders first, then alphabetically, at most `FILE_LIST_LIMIT` entries. */
117
117
  export const listDirectory = async (root: string, relative: string): Promise<FileListing> => {
118
118
  const checked = relativeWorkspacePath(relative);
119
119
  const base = await realRoot(root);
@@ -130,26 +130,26 @@ export const listDirectory = async (root: string, relative: string): Promise<Fil
130
130
  };
131
131
  };
132
132
 
133
- /** Liest eine Textdatei unterhalb der Wurzel; eine zu große oder binäre Datei nennt statt des Inhalts den Grund. */
133
+ /** Reads a text file below the root; a file that is too large or binary names the reason instead of the content. */
134
134
  export const readTextFile = async (root: string, relative: string): Promise<FileText> => {
135
135
  const checked = relativeWorkspacePath(relative);
136
136
  const file = await inside(await realRoot(root), checked);
137
137
  const info = await lstat(file);
138
- if (!info.isFile()) throw invalid(`Keine Datei: ${checked || "."}`);
138
+ if (!info.isFile()) throw invalid(`Not a file: ${checked || "."}`);
139
139
  const described = { path: checked, size: info.size };
140
140
  if (info.size > FILE_READ_LIMIT) {
141
- return { ...described, previewable: false, reason: `Die Datei ist größer als ${FILE_READ_LIMIT / 1024} KB und wird nicht gelesen` };
141
+ return { ...described, previewable: false, reason: `The file is larger than ${FILE_READ_LIMIT / 1024} KB and is not read` };
142
142
  }
143
143
  const content = await readFile(file);
144
- if (content.includes(0)) return { ...described, previewable: false, reason: "Die Datei ist binär" };
144
+ if (content.includes(0)) return { ...described, previewable: false, reason: "The file is binary" };
145
145
  return { ...described, previewable: true, content: content.toString("utf8") };
146
146
  };
147
147
 
148
- /** Legt eine angehängte Datei unter einem freien Namen in `attachments` unterhalb der Wurzel ab, nie über eine vorhandene. */
148
+ /** Stores an attached file under a free name in `attachments` below the root, never over an existing one. */
149
149
  export const storeAttachment = async (root: string, original: string, content: Uint8Array): Promise<string> => {
150
150
  const directory = path.join(await realRoot(root), ATTACHMENT_DIRECTORY);
151
151
  await mkdir(directory, { recursive: true, mode: 0o755 });
152
- if (!(await lstat(directory)).isDirectory()) throw invalid("Das Anhangsverzeichnis ist kein normales Verzeichnis.");
152
+ if (!(await lstat(directory)).isDirectory()) throw invalid("The attachments directory is not a regular directory.");
153
153
  const name = path.basename(original).replace(/[^a-zA-Z0-9._-]/g, "_") || "attachment";
154
154
  for (let index = 1; index <= 10000; index += 1) {
155
155
  const candidate = index === 1 ? name : `${index}-${name}`;
@@ -160,10 +160,10 @@ export const storeAttachment = async (root: string, original: string, content: U
160
160
  if ((error as NodeJS.ErrnoException).code !== "EEXIST") throw error;
161
161
  }
162
162
  }
163
- throw invalid("Im Anhangsverzeichnis sind zu viele gleichnamige Dateien.");
163
+ throw invalid("The attachments directory has too many files with the same name.");
164
164
  };
165
165
 
166
- /** Beobachtet einen Ordner rekursiv und meldet Änderungen entprellt; der Rückgabewert beendet die Beobachtung. */
166
+ /** Watches a folder recursively and reports changes debounced; the return value ends the watch. */
167
167
  export const watchDirectory = async (root: string, listener: FileWatchListener): Promise<() => void> => {
168
168
  const directory = await realRoot(root);
169
169
  let debounce: NodeJS.Timeout | undefined;
@@ -183,17 +183,17 @@ export const watchDirectory = async (root: string, listener: FileWatchListener):
183
183
 
184
184
  const pathOf = (input: unknown): string => {
185
185
  const value = (input as { path?: unknown } | null)?.path;
186
- if (typeof value !== "string") throw invalid("Die Eingabe braucht einen Pfad als Text");
186
+ if (typeof value !== "string") throw invalid("The input needs a path as text");
187
187
  return value;
188
188
  };
189
189
 
190
- /** Mit Alias spricht die Eingabe dessen Wurzel an, sonst die des Runs. */
190
+ /** With an alias the input addresses its root, otherwise the one of the run. */
191
191
  const aliasFootprint = (input: unknown): OperationFootprint => {
192
192
  const alias = (input as { alias?: unknown } | null)?.alias;
193
193
  return { roots: typeof alias === "string" ? { aliases: [aliasOf(alias) ?? alias], runRoot: false } : { aliases: [], runRoot: true } };
194
194
  };
195
195
 
196
- /** Beobachtet bis zum Abbruch; eine gescheiterte Beobachtung beendet die Operation mit ihrer Ursache. */
196
+ /** Watches until aborted; a failed watch ends the operation with its cause. */
197
197
  const watchUntilAborted = (root: string, signal: AbortSignal, progress: (value: FileWatchProgress) => void): Promise<null> =>
198
198
  new Promise((resolve, reject) => {
199
199
  let close: (() => void) | undefined;
@@ -219,16 +219,16 @@ const watchUntilAborted = (root: string, signal: AbortSignal, progress: (value:
219
219
  }, finish);
220
220
  });
221
221
 
222
- /** Dateien des Runs auf dieser Maschine: auflisten, Text lesen, beobachten und Anhänge ablegen, relativ zur Wurzel des Runs oder eines Alias. */
222
+ /** Files of the run on this machine: list, read text, watch and store attachments, relative to the root of the run or of an alias. */
223
223
  export const fileModule: WorkspaceModuleFactory = (host) => {
224
- /** Die offenen Beobachtungen je Run; Stopp und Shutdown beenden sie, auch wenn ihr Aufrufer nie abbricht. */
224
+ /** The open watches per run; stop and shutdown end them, even if their caller never aborts. */
225
225
  const watches = new Map<string, Set<AbortController>>();
226
226
  let closed = false;
227
227
  const endWatches = (runId: string): void => {
228
228
  for (const controller of watches.get(runId) ?? []) controller.abort();
229
229
  watches.delete(runId);
230
230
  };
231
- /** Alias und Pfad bilden zusammen einen Ort; unter einem gemeinsamen Alias wie `@skills` nennt der Pfad zuerst den Ordner der Wurzel. */
231
+ /** Alias and path together form a location; under a shared alias like `@skills` the path names the folder of the root first. */
232
232
  const locate = async (runId: string, input: unknown): Promise<{ root: string; path: string }> => {
233
233
  const context = await host.contextFor(runId);
234
234
  const alias = (input as { alias?: unknown } | null)?.alias;
@@ -246,7 +246,7 @@ export const fileModule: WorkspaceModuleFactory = (host) => {
246
246
  };
247
247
  const attach: WorkspaceOperation = async ({ runId, input }) => {
248
248
  const { name, content } = (input ?? {}) as { name?: unknown; content?: unknown };
249
- if (typeof name !== "string" || typeof content !== "string") throw invalid("Ein Anhang braucht name und content (Base64) als Text");
249
+ if (typeof name !== "string" || typeof content !== "string") throw invalid("An attachment needs name and content (Base64) as text");
250
250
  return { name: await storeAttachment((await host.contextFor(runId)).root, name, Buffer.from(content, "base64")) };
251
251
  };
252
252
  const read: WorkspaceOperation = async ({ runId, input }) => {
@@ -254,8 +254,8 @@ export const fileModule: WorkspaceModuleFactory = (host) => {
254
254
  return readTextFile(root, requested);
255
255
  };
256
256
  const watchFiles: WorkspaceOperation = async ({ runId, signal, progress }) => {
257
- if (!signal || !progress) throw new Error(`${FILE_OPERATIONS.watch} läuft bis zum Abbruch und braucht Abbruchsignal und Fortschritt`);
258
- if (closed) throw new Error("Das Dateimodul ist beendet und beobachtet nichts mehr");
257
+ if (!signal || !progress) throw new Error(`${FILE_OPERATIONS.watch} runs until aborted and needs an abort signal and progress`);
258
+ if (closed) throw new Error("The file module has ended and watches nothing anymore");
259
259
  const own = new AbortController();
260
260
  const running = watches.get(runId) ?? new Set<AbortController>();
261
261
  watches.set(runId, running.add(own));
@@ -27,7 +27,7 @@ export interface LanguageServerSnapshot {
27
27
  }
28
28
 
29
29
  export interface LanguageServerSolution {
30
- /** Relativ zur Wurzel des Arbeitsbereichs, mit Schrägstrichen. */
30
+ /** Relative to the root of the workspace, with forward slashes. */
31
31
  path: string;
32
32
  root: string;
33
33
  state: LanguageServerState | null;
@@ -36,6 +36,6 @@ export interface LanguageServerSolution {
36
36
  export interface LanguageServerSolutions {
37
37
  source: "git" | "directory";
38
38
  solutions: readonly LanguageServerSolution[];
39
- /** Ob im Run schon eine Instanz dieser Sprache offen ist oder gerade geöffnet wird. */
39
+ /** Whether an instance of this language is already open or being opened in the run. */
40
40
  opened: boolean;
41
41
  }
@@ -51,12 +51,12 @@ export const formatDiagnostics = (
51
51
  const warnings = diagnostics.filter((diagnostic) => severityOf(diagnostic) === WARNING);
52
52
  const warningNote = warnings.length === 0
53
53
  ? ""
54
- : `, ${warnings.length} ${warnings.length === 1 ? "Warnung" : "Warnungen"}`;
54
+ : `, ${warnings.length} ${warnings.length === 1 ? "warning" : "warnings"}`;
55
55
  const heading = errors.length === 0
56
- ? `Diagnostik (${label}) ${relativePath}: keine Fehler${warningNote}`
57
- : `Diagnostik (${label}) ${relativePath}: ${errors.length} Fehler${warningNote}`;
56
+ ? `Diagnostics (${label}) ${relativePath}: no errors${warningNote}`
57
+ : `Diagnostics (${label}) ${relativePath}: ${errors.length} ${errors.length === 1 ? "error" : "errors"}${warningNote}`;
58
58
  const listed = [...errors, ...(includeWarnings ? warnings : [])].sort(byPlace);
59
59
  const lines = listed.slice(0, MAX_LINES).map((diagnostic) => lineOf(relativePath, diagnostic));
60
- if (listed.length > MAX_LINES) lines.push(`... und ${listed.length - MAX_LINES} weitere`);
60
+ if (listed.length > MAX_LINES) lines.push(`... and ${listed.length - MAX_LINES} more`);
61
61
  return [heading, ...lines].join("\n");
62
62
  };
@@ -19,7 +19,7 @@ export interface LanguageServerAdapter {
19
19
  label: string;
20
20
  languages: Readonly<Record<string, string>>;
21
21
  rootDescription: string;
22
- /** Die Endungen der Solutions, die `<id>_solutions` im Arbeitsbereich sucht; ohne sie gibt es weder Suche noch Umschalten. */
22
+ /** The extensions of the solutions that `<id>_solutions` searches for in the workspace; without them there is neither search nor switching. */
23
23
  solutionExtensions?: readonly string[];
24
24
  resolveRoot: (workspaceRoot: string, root: string) => Promise<string>;
25
25
  rootDirectory: (root: string) => string;
@@ -27,7 +27,7 @@ export interface LanguageServerAdapter {
27
27
  open: (session: LanguageServerSession, root: string, timeoutMs: number) => Promise<string>;
28
28
  }
29
29
 
30
- /** Was der Server über einen Sprachserver wissen muss, um Werkzeuge und Reiter zu beschreiben; gestartet wird er nur im Executor. */
30
+ /** What the server must know about a language server to describe tools and tabs; it is only started in the executor. */
31
31
  export type LanguageServerDescription = Pick<LanguageServerAdapter, "id" | "label" | "languages" | "rootDescription" | "solutionExtensions">;
32
32
 
33
33
  export interface LanguageServerHostOptions {
@@ -64,7 +64,7 @@ const keyOf = (runId: string, root: string): string => `${runId}\n${root}`;
64
64
 
65
65
  const runOf = (key: string): string => key.slice(0, key.indexOf("\n"));
66
66
 
67
- const instanceCount = (count: number): string => `${count} offene Instanz${count === 1 ? "" : "en"}`;
67
+ const instanceCount = (count: number): string => `${count} open instance${count === 1 ? "" : "s"}`;
68
68
 
69
69
  const git = async (
70
70
  context: WorkspaceProcessContext,
@@ -73,13 +73,13 @@ const git = async (
73
73
  args: readonly string[],
74
74
  ): Promise<string> => {
75
75
  const result = await runGit(context, directory, args).catch((error: unknown) => {
76
- throw new Error(`Ohne paths braucht ${tool} ein Git-Arbeitsverzeichnis: ${messageOf(error)}`);
76
+ throw new Error(`Without paths ${tool} needs a Git working directory: ${messageOf(error)}`);
77
77
  });
78
- if (result.code !== 0) throw new Error(`Ohne paths braucht ${tool} ein Git-Arbeitsverzeichnis (git ${args[0]}: Code ${result.code})`);
78
+ if (result.code !== 0) throw new Error(`Without paths ${tool} needs a Git working directory (git ${args[0]}: code ${result.code})`);
79
79
  return result.output;
80
80
  };
81
81
 
82
- /** Git nennt seine Pfade relativ zur Repo-Wurzel; `-- .` grenzt sie auf die Wurzel der Instanz ein. */
82
+ /** Git names its paths relative to the repo root; `-- .` narrows them to the root of the instance. */
83
83
  export const changedWorkspaceFiles = async (
84
84
  context: WorkspaceProcessContext,
85
85
  directory: string,
@@ -130,11 +130,11 @@ export class LanguageServerHost {
130
130
  return this.adapter.languages[path.extname(filePath).toLowerCase()] !== undefined;
131
131
  }
132
132
 
133
- /** Mit `ifNoneOpen` prüft und belegt der Aufruf den Run ohne Unterbrechung: läuft schon ein Öffnen oder ist eine Instanz da, lädt er nichts. */
133
+ /** With `ifNoneOpen` the call checks and claims the run without interruption: if an open is already running or an instance exists, it loads nothing. */
134
134
  async open(runId: string, root: string, ifNoneOpen = false): Promise<string> {
135
135
  const lifetime = this.#lifetime(runId);
136
136
  if (ifNoneOpen && !this.#idle(runId)) {
137
- return `${this.adapter.label} lädt ${root} nicht: in diesem Run ist schon eine Instanz offen oder im Aufbau`;
137
+ return `${this.adapter.label} does not load ${root}: an instance is already open or starting in this run`;
138
138
  }
139
139
  this.#requests.set(runId, (this.#requests.get(runId) ?? 0) + 1);
140
140
  try {
@@ -148,7 +148,7 @@ export class LanguageServerHost {
148
148
 
149
149
  async solutions(runId: string): Promise<LanguageServerSolutions> {
150
150
  const extensions = this.adapter.solutionExtensions;
151
- if (!extensions) throw new Error(`${this.adapter.label} sucht keine Solutions`);
151
+ if (!extensions) throw new Error(`${this.adapter.label} does not search for solutions`);
152
152
  if (this.#closed) throw this.#stopped();
153
153
  const found = await workspaceSolutions(await this.#contextFor(runId), extensions);
154
154
  return {
@@ -158,7 +158,7 @@ export class LanguageServerHost {
158
158
  };
159
159
  }
160
160
 
161
- /** Lädt die Wurzel und beendet jede andere Instanz des Runs; wartet nicht auf das Laden, `null` beendet alle. */
161
+ /** Loads the root and ends every other instance of the run; does not wait for the loading, `null` ends all. */
162
162
  async switchTo(runId: string, root: string | null): Promise<string> {
163
163
  if (root === null) return this.close(runId);
164
164
  const lifetime = this.#lifetime(runId);
@@ -168,10 +168,10 @@ export class LanguageServerHost {
168
168
  this.#assertLifetime(runId, lifetime);
169
169
  const current = this.#current(runId, absoluteRoot);
170
170
  const kept = current !== undefined && current.state !== "failed";
171
- // Ein Fehlschlag steht mit seiner Ursache im Stand der Instanz.
171
+ // A failure is recorded with its cause in the state of the instance.
172
172
  if (!kept) void this.#start(runId, context, absoluteRoot).catch(() => undefined);
173
- const closed = others.length === 0 ? "" : `; ${others.length === 1 ? "eine andere Instanz" : `${others.length} andere Instanzen`} beendet`;
174
- return `${this.adapter.label} ${kept ? "behält" : "lädt"} ${absoluteRoot}${closed}`;
173
+ const closed = others.length === 0 ? "" : `; ${others.length === 1 ? "one other instance" : `${others.length} other instances`} ended`;
174
+ return `${this.adapter.label} ${kept ? "keeps" : "loads"} ${absoluteRoot}${closed}`;
175
175
  }
176
176
 
177
177
  async #open(runId: string, lifetime: object, root: string): Promise<string> {
@@ -184,26 +184,26 @@ export class LanguageServerHost {
184
184
  });
185
185
  this.#assertCurrent(current);
186
186
  this.#touch(runId, absoluteRoot);
187
- return this.#openMessage(runId, `${this.adapter.label} ist für ${absoluteRoot} bereits geöffnet: ${server.summary}`);
187
+ return this.#openMessage(runId, `${this.adapter.label} is already open for ${absoluteRoot}: ${server.summary}`);
188
188
  }
189
189
  const server = await this.#start(runId, context, absoluteRoot);
190
190
  this.#assertLifetime(runId, lifetime);
191
191
  if (this.#servers.get(keyOf(runId, absoluteRoot))?.server !== server) throw this.#stopped();
192
- return this.#openMessage(runId, `${server.summary} (Wurzel ${absoluteRoot})`);
192
+ return this.#openMessage(runId, `${server.summary} (root ${absoluteRoot})`);
193
193
  }
194
194
 
195
195
  async close(runId: string, root?: string): Promise<string> {
196
196
  if (root === undefined) {
197
197
  const roots = this.#openRoots(runId);
198
- if (roots.length === 0) return `${this.adapter.label} ist in diesem Run nicht geöffnet`;
198
+ if (roots.length === 0) return `${this.adapter.label} is not open in this run`;
199
199
  await Promise.all(roots.map((entry) => this.#closeInstance(runId, entry)));
200
- const closed = roots.length === 1 ? "eine Instanz" : `${roots.length} Instanzen`;
201
- return `${this.adapter.label}: ${closed} beendet; keine offene Instanz mehr in diesem Run`;
200
+ const closed = roots.length === 1 ? "one instance" : `${roots.length} instances`;
201
+ return `${this.adapter.label}: ${closed} ended; no open instance left in this run`;
202
202
  }
203
203
  const context = await this.#contextFor(runId);
204
204
  const chosen = await this.#known(runId, context, root);
205
205
  await this.#closeInstance(runId, chosen);
206
- return `${this.adapter.label} für ${chosen} beendet; ${instanceCount(this.#openRoots(runId).length)} in diesem Run`;
206
+ return `${this.adapter.label} for ${chosen} ended; ${instanceCount(this.#openRoots(runId).length)} in this run`;
207
207
  }
208
208
 
209
209
  async snapshot(runId: string): Promise<LanguageServerSnapshot> {
@@ -225,14 +225,14 @@ export class LanguageServerHost {
225
225
  const context = await this.#contextFor(runId);
226
226
  this.#assertLifetime(runId, lifetime);
227
227
  const roots = root === undefined ? this.#openRoots(runId) : [await this.#known(runId, context, root)];
228
- if (roots.length === 0) throw new Error(`Kein ${this.adapter.label}-Server geöffnet; zuerst ${this.adapter.id}_open aufrufen`);
228
+ if (roots.length === 0) throw new Error(`No ${this.adapter.label} server open; call ${this.adapter.id}_open first`);
229
229
  if (paths !== undefined && paths.length > 0) return (await this.#requested(runId, context, roots, paths, includeWarnings)).join("\n\n");
230
230
  const failed = root === undefined ? roots.filter((entry) => this.#current(runId, entry)?.state === "failed") : [];
231
231
  const failures = failed.map((entry) =>
232
- `${this.adapter.label} für ${entry} nicht geöffnet: ${this.#current(runId, entry)!.summary}; ${this.adapter.id}_open öffnet die Wurzel erneut`);
232
+ `${this.adapter.label} not open for ${entry}: ${this.#current(runId, entry)!.summary}; ${this.adapter.id}_open opens the root again`);
233
233
  if (failed.length === roots.length) throw new Error(failures.join("\n"));
234
234
  const results = await this.#changed(runId, context, roots.filter((entry) => !failed.includes(entry)), includeWarnings);
235
- const text = results.length === 0 ? `Keine geänderten ${this.adapter.label}-Dateien in den geöffneten Wurzeln` : results.join("\n\n");
235
+ const text = results.length === 0 ? `No changed ${this.adapter.label} files in the open roots` : results.join("\n\n");
236
236
  return [text, ...failures].join("\n\n");
237
237
  }
238
238
 
@@ -248,7 +248,7 @@ export class LanguageServerHost {
248
248
  const server = await this.#ensure(runId, context, chosen);
249
249
  return await this.#format(context, server, file, false);
250
250
  } catch (error) {
251
- return `Diagnostik (${this.adapter.label}) fehlgeschlagen: ${messageOf(error)}`;
251
+ return `Diagnostics (${this.adapter.label}) failed: ${messageOf(error)}`;
252
252
  }
253
253
  }
254
254
 
@@ -276,7 +276,7 @@ export class LanguageServerHost {
276
276
  const failures = results
277
277
  .filter((result): result is PromiseRejectedResult => result.status === "rejected")
278
278
  .map((result) => result.reason);
279
- if (failures.length > 0) throw new AggregateError(failures, `${this.adapter.label}-Shutdown fehlgeschlagen`);
279
+ if (failures.length > 0) throw new AggregateError(failures, `${this.adapter.label} shutdown failed`);
280
280
  }
281
281
 
282
282
  async #prepare(
@@ -320,7 +320,7 @@ export class LanguageServerHost {
320
320
  }
321
321
 
322
322
  #openMessage(runId: string, text: string): string {
323
- return `${text}; ${instanceCount(this.#openRoots(runId).length)} von ${this.adapter.label} in diesem Run`;
323
+ return `${text}; ${instanceCount(this.#openRoots(runId).length)} of ${this.adapter.label} in this run`;
324
324
  }
325
325
 
326
326
  async #instanceSnapshot(runId: string, root: string): Promise<LanguageServerInstanceSnapshot | undefined> {
@@ -385,11 +385,11 @@ export class LanguageServerHost {
385
385
  for (const requested of paths) {
386
386
  const file = await allowedWorkspacePath(path.resolve(context.root, expandWorkspaceAlias(requested, context.workspaceAliases ?? {})), [context.root, ...context.additionalRoots ?? []]);
387
387
  if (!this.handles(file)) {
388
- throw new Error(`${path.relative(context.root, file)} hat keine ${this.adapter.label}-Endung (${Object.keys(this.adapter.languages).join(", ")})`);
388
+ throw new Error(`${path.relative(context.root, file)} has no ${this.adapter.label} extension (${Object.keys(this.adapter.languages).join(", ")})`);
389
389
  }
390
390
  const chosen = this.#match(roots, file);
391
391
  if (!chosen) {
392
- throw new Error(`${path.relative(context.root, file)} liegt in keiner geöffneten ${this.adapter.label}-Wurzel; offen: ${roots.join(", ")}`);
392
+ throw new Error(`${path.relative(context.root, file)} is in no open ${this.adapter.label} root; open: ${roots.join(", ")}`);
393
393
  }
394
394
  results.push(await this.#format(context, await this.#ensure(runId, context, chosen), file, includeWarnings));
395
395
  }
@@ -404,11 +404,11 @@ export class LanguageServerHost {
404
404
 
405
405
  async #known(runId: string, context: WorkspaceProcessContext, root: string): Promise<string> {
406
406
  const roots = this.#openRoots(runId);
407
- if (roots.length === 0) throw new Error(`Kein ${this.adapter.label}-Server geöffnet; zuerst ${this.adapter.id}_open aufrufen`);
407
+ if (roots.length === 0) throw new Error(`No ${this.adapter.label} server open; call ${this.adapter.id}_open first`);
408
408
  const lexical = path.resolve(context.root, expandWorkspaceAlias(root, context.workspaceAliases ?? {}));
409
409
  const requested = await resolvedWorkspacePath(lexical);
410
410
  const found = roots.find((open) => open === requested || open === lexical);
411
- if (!found) throw new Error(`Für ${root} ist kein ${this.adapter.label}-Server geöffnet; offen: ${roots.join(", ")}`);
411
+ if (!found) throw new Error(`No ${this.adapter.label} server is open for ${root}; open: ${roots.join(", ")}`);
412
412
  return found;
413
413
  }
414
414
 
@@ -465,7 +465,7 @@ export class LanguageServerHost {
465
465
  const current = this.#servers.get(key);
466
466
  if (current?.server?.session.exited) {
467
467
  this.#servers.delete(key);
468
- void this.#dispose(current).catch((error) => console.error(`${this.adapter.label}: Bereinigung fehlgeschlagen: ${messageOf(error)}`));
468
+ void this.#dispose(current).catch((error) => console.error(`${this.adapter.label}: cleanup failed: ${messageOf(error)}`));
469
469
  return undefined;
470
470
  }
471
471
  return current;
@@ -488,7 +488,7 @@ export class LanguageServerHost {
488
488
  const previous = this.#servers.get(key);
489
489
  const closing = previous ? this.#dispose(previous) : undefined;
490
490
  const entry: ServerEntry = {
491
- runId, root, state: "opening", summary: `${this.adapter.label} lädt ${root}`, controller: new AbortController(),
491
+ runId, root, state: "opening", summary: `${this.adapter.label} loads ${root}`, controller: new AbortController(),
492
492
  };
493
493
  this.#servers.set(key, entry);
494
494
  this.#remember(runId, root);
@@ -513,13 +513,13 @@ export class LanguageServerHost {
513
513
  summary = await withTimeout(
514
514
  Promise.race([this.adapter.open(session, root, this.#openTimeoutMs), cancelled]),
515
515
  this.#openTimeoutMs,
516
- () => new Error(`${this.adapter.label}: ${root} nicht innerhalb von ${Math.round(this.#openTimeoutMs / 1000)} s geladen`),
516
+ () => new Error(`${this.adapter.label}: ${root} not loaded within ${Math.round(this.#openTimeoutMs / 1000)} s`),
517
517
  );
518
518
  } finally {
519
519
  entry.controller.signal.removeEventListener("abort", aborted);
520
520
  }
521
521
  this.#assertCurrent(entry);
522
- if (session.exited) throw new Error(`${this.adapter.label} wurde während des Ladens beendet`);
522
+ if (session.exited) throw new Error(`${this.adapter.label} ended while loading`);
523
523
  const server = { root, session, summary };
524
524
  entry.server = server;
525
525
  entry.state = "ready";
@@ -585,7 +585,7 @@ export class LanguageServerHost {
585
585
  }
586
586
 
587
587
  #stopped(): Error {
588
- return new Error(`${this.adapter.label}-Start wurde beendet`);
588
+ return new Error(`${this.adapter.label} start was ended`);
589
589
  }
590
590
 
591
591
  #touch(runId: string, root: string): void {
@@ -597,7 +597,7 @@ export class LanguageServerHost {
597
597
  const timer = setTimeout(() => {
598
598
  this.#idleTimers.delete(key);
599
599
  if (this.#servers.get(key) !== entry) return;
600
- void this.#close(key).catch((error) => console.error(`${this.adapter.label}: Beenden nach Leerlauf fehlgeschlagen: ${messageOf(error)}`));
600
+ void this.#close(key).catch((error) => console.error(`${this.adapter.label}: ending after idle time failed: ${messageOf(error)}`));
601
601
  }, this.#idleMs);
602
602
  timer.unref();
603
603
  this.#idleTimers.set(key, timer);
@@ -45,13 +45,13 @@ export class JsonRpcConnection {
45
45
  this.#connection.onNotification("$/progress", (params) => options.onNotification("$/progress", params));
46
46
  this.#connection.onNotification("$/logTrace", (params) => options.onNotification("$/logTrace", params));
47
47
  this.#connection.onError(([error]) => this.#fail(error));
48
- this.#connection.onClose(() => this.#fail(new Error("Verbindung geschlossen")));
48
+ this.#connection.onClose(() => this.#fail(new Error("Connection closed")));
49
49
  this.#connection.listen();
50
50
  }
51
51
 
52
52
  async request(method: string, params: unknown, signal?: AbortSignal): Promise<unknown> {
53
53
  if (this.#closed) throw this.#closed;
54
- const abortError = () => signal?.reason instanceof Error ? signal.reason : new Error(`${method} wurde abgebrochen`);
54
+ const abortError = () => signal?.reason instanceof Error ? signal.reason : new Error(`${method} was cancelled`);
55
55
  if (signal?.aborted) throw abortError();
56
56
  const parameters = params === null || params === undefined ? [] : [params];
57
57
  const cancellation = new CancellationTokenSource();
@@ -68,7 +68,7 @@ export class JsonRpcConnection {
68
68
  else if (error instanceof ResponseError) {
69
69
  reject(new ResponseError(
70
70
  error.code,
71
- `${this.#options.label}: ${method} fehlgeschlagen: ${error.message}`,
71
+ `${this.#options.label}: ${method} failed: ${error.message}`,
72
72
  error.data,
73
73
  ));
74
74
  } else reject(error);
@@ -96,7 +96,7 @@ export class JsonRpcConnection {
96
96
 
97
97
  #fail(error: Error): void {
98
98
  if (this.#closed) return;
99
- const failure = new Error(`${this.#options.label}: JSON-RPC-Verbindung fehlgeschlagen: ${error.message}`, { cause: error });
99
+ const failure = new Error(`${this.#options.label}: JSON-RPC connection failed: ${error.message}`, { cause: error });
100
100
  this.close(failure);
101
101
  this.#options.onError(failure);
102
102
  }
@@ -28,13 +28,13 @@ const invalid = (operation: string, message: string): WorkspaceOperationError =>
28
28
 
29
29
  const fieldsOf = (operation: string, input: unknown): Readonly<Record<string, unknown>> => {
30
30
  const fields = input ?? {};
31
- if (typeof fields !== "object" || Array.isArray(fields)) throw invalid(operation, "Die Eingabe muss ein Objekt sein");
31
+ if (typeof fields !== "object" || Array.isArray(fields)) throw invalid(operation, "The input must be an object");
32
32
  return fields as Readonly<Record<string, unknown>>;
33
33
  };
34
34
 
35
35
  const optionalRoot = (operation: string, value: unknown): string | undefined => {
36
36
  if (value === undefined) return undefined;
37
- if (typeof value !== "string") throw invalid(operation, "root muss ein Text sein");
37
+ if (typeof value !== "string") throw invalid(operation, "root must be a text");
38
38
  return value;
39
39
  };
40
40
 
@@ -44,7 +44,7 @@ const solutionOperationsOf = (server: LanguageServerHost): Array<readonly [strin
44
44
  [languageServerSolutionsOperation(server.adapter.id), ({ runId }) => server.solutions(runId)],
45
45
  [change, ({ runId, input }) => {
46
46
  const { root } = fieldsOf(change, input);
47
- if (root !== null && typeof root !== "string") throw invalid(change, "root muss ein Text oder null sein");
47
+ if (root !== null && typeof root !== "string") throw invalid(change, "root must be a text or null");
48
48
  return server.switchTo(runId, root);
49
49
  }],
50
50
  ];
@@ -59,15 +59,15 @@ const operationsOf = (server: LanguageServerHost): Array<readonly [string, Works
59
59
  [open, ({ runId, input }) => {
60
60
  const { root, ifNoneOpen } = fieldsOf(open, input);
61
61
  const checked = optionalRoot(open, root);
62
- if (checked === undefined) throw invalid(open, "root fehlt");
63
- if (ifNoneOpen !== undefined && typeof ifNoneOpen !== "boolean") throw invalid(open, "ifNoneOpen muss true oder false sein");
62
+ if (checked === undefined) throw invalid(open, "root is missing");
63
+ if (ifNoneOpen !== undefined && typeof ifNoneOpen !== "boolean") throw invalid(open, "ifNoneOpen must be true or false");
64
64
  return server.open(runId, checked, ifNoneOpen ?? false);
65
65
  }],
66
66
  [close, ({ runId, input }) => server.close(runId, optionalRoot(close, fieldsOf(close, input).root))],
67
67
  [diagnostics, ({ runId, input }) => {
68
68
  const { paths, warnings, root } = fieldsOf(diagnostics, input);
69
- if (paths !== undefined && (!Array.isArray(paths) || !paths.every((entry) => typeof entry === "string"))) throw invalid(diagnostics, "paths muss eine Liste von Texten sein");
70
- if (warnings !== undefined && typeof warnings !== "boolean") throw invalid(diagnostics, "warnings muss true oder false sein");
69
+ if (paths !== undefined && (!Array.isArray(paths) || !paths.every((entry) => typeof entry === "string"))) throw invalid(diagnostics, "paths must be a list of texts");
70
+ if (warnings !== undefined && typeof warnings !== "boolean") throw invalid(diagnostics, "warnings must be true or false");
71
71
  return server.diagnostics(runId, paths as readonly string[] | undefined, warnings ?? false, optionalRoot(diagnostics, root));
72
72
  }],
73
73
  [languageServerSnapshotOperation(id), ({ runId }) => server.snapshot(runId)],
@@ -75,7 +75,7 @@ const operationsOf = (server: LanguageServerHost): Array<readonly [string, Works
75
75
  ];
76
76
  };
77
77
 
78
- /** Öffnen und Schließen sprechen die Wurzel ihrer Instanz an, die Diagnostik dazu die ihrer Dateien; ohne Wurzel und Dateien keine bestimmte. */
78
+ /** Open and close address the root of their instance, diagnostics also the roots of its files; without root and files no specific one. */
79
79
  const footprintsOf = (server: LanguageServerHost): Array<readonly [string, (input: unknown) => OperationFootprint]> => {
80
80
  const { id } = server.adapter;
81
81
  return [
@@ -85,13 +85,13 @@ const footprintsOf = (server: LanguageServerHost): Array<readonly [string, (inpu
85
85
  ];
86
86
  };
87
87
 
88
- /** Die Sprachserver dieser Maschine: je Adapter Öffnen, Diagnostik, Schließen und Stand, mit Solutions auch Suche und Umschalten, dazu die Diagnostik geschriebener Dateien. */
88
+ /** The language servers of this machine: per adapter open, diagnostics, close and state, with solutions also search and switching, plus the diagnostics of written files. */
89
89
  export const languageServerModule = (
90
90
  adapters: readonly LanguageServerAdapter[],
91
91
  options: LanguageServerHostOptions = {},
92
92
  ): WorkspaceModuleFactory => {
93
93
  const duplicate = adapters.find((adapter, index) => adapters.findIndex((other) => other.id === adapter.id) !== index);
94
- if (duplicate) throw new Error(`Der Sprachserver ${duplicate.id} kommt im Executor zweimal vor; seine Operationen gehören genau einem Beitrag`);
94
+ if (duplicate) throw new Error(`The language server ${duplicate.id} occurs twice in the executor; its operations belong to exactly one contribution`);
95
95
  return (host) => languageServersOn(host, adapters, options);
96
96
  };
97
97
 
@@ -107,7 +107,7 @@ const languageServersOn = (
107
107
  annotate: async (runId, absolutePath) => {
108
108
  const notes = await Promise.all(servers.map((server) =>
109
109
  server.annotate(runId, absolutePath).catch((error: unknown) =>
110
- `Diagnostik (${server.adapter.label}) fehlgeschlagen: ${messageOf(error)}`)));
110
+ `Diagnostics (${server.adapter.label}) failed: ${messageOf(error)}`)));
111
111
  const text = notes.filter((note): note is string => Boolean(note)).join("\n");
112
112
  return text || undefined;
113
113
  },
@@ -9,16 +9,16 @@ export const resolveRootFile = async (
9
9
  ): Promise<string> => {
10
10
  const absolute = await allowedWorkspacePath(path.resolve(workspaceRoot, requested), [workspaceRoot]);
11
11
  if (!extensions.includes(path.extname(absolute).toLowerCase())) {
12
- throw new Error(`${requested} hat keine der Endungen ${extensions.join(", ")}`);
12
+ throw new Error(`${requested} has none of the extensions ${extensions.join(", ")}`);
13
13
  }
14
14
  const info = await stat(absolute).catch(() => undefined);
15
- if (!info?.isFile()) throw new Error(`${requested} gibt es im Arbeitsverzeichnis nicht`);
15
+ if (!info?.isFile()) throw new Error(`${requested} does not exist in the working directory`);
16
16
  return absolute;
17
17
  };
18
18
 
19
19
  export const resolveRootDirectory = async (workspaceRoot: string, requested: string): Promise<string> => {
20
20
  const absolute = await allowedWorkspacePath(path.resolve(workspaceRoot, requested), [workspaceRoot]);
21
21
  const info = await stat(absolute).catch(() => undefined);
22
- if (!info?.isDirectory()) throw new Error(`${requested} ist kein Verzeichnis im Arbeitsverzeichnis`);
22
+ if (!info?.isDirectory()) throw new Error(`${requested} is not a directory in the working directory`);
23
23
  return absolute;
24
24
  };