@schlenkr/ragents 0.1.10 → 0.1.12

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 (748) hide show
  1. package/README.md +1 -1
  2. package/apps/server/package.json +1 -1
  3. package/apps/server/src/access-projection.ts +6 -6
  4. package/apps/server/src/access-service.ts +3 -3
  5. package/apps/server/src/access-session.ts +19 -19
  6. package/apps/server/src/api/contracts.ts +29 -29
  7. package/apps/server/src/api/core-methods.ts +17 -17
  8. package/apps/server/src/api/delivery.ts +2 -2
  9. package/apps/server/src/api/reference.ts +27 -27
  10. package/apps/server/src/api/rights.ts +18 -18
  11. package/apps/server/src/chat-handler.ts +5 -5
  12. package/apps/server/src/config-definition.ts +37 -10
  13. package/apps/server/src/config-file.ts +49 -49
  14. package/apps/server/src/config.ts +2 -0
  15. package/apps/server/src/data-directory.ts +2 -2
  16. package/apps/server/src/external-access.ts +1 -1
  17. package/apps/server/src/folder-install.ts +1 -1
  18. package/apps/server/src/help-files.ts +1 -1
  19. package/apps/server/src/host-api.json +6 -1
  20. package/apps/server/src/host-api.ts +3 -2
  21. package/apps/server/src/host-record.ts +3 -3
  22. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  23. package/apps/server/src/host-version.ts +17 -17
  24. package/apps/server/src/host-web.ts +5 -5
  25. package/apps/server/src/main.ts +6 -6
  26. package/apps/server/src/missing-environment.ts +6 -6
  27. package/apps/server/src/parent-watch.ts +4 -4
  28. package/apps/server/src/plugin-build/build.ts +38 -38
  29. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  30. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  31. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  32. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  33. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  34. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  35. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  36. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  37. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  38. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  39. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  40. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  41. package/apps/server/src/plugin-support/http.ts +2 -2
  42. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  43. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  44. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  45. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  46. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  47. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  48. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  49. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  50. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  51. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  52. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  53. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  54. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  55. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  56. package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
  57. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  58. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  59. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  60. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  61. package/apps/server/src/plugin-support/prompt.ts +1 -1
  62. package/apps/server/src/plugin-support/provision.ts +8 -8
  63. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  64. package/apps/server/src/plugin-support/skills.ts +18 -18
  65. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  66. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  67. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  68. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  69. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  70. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  71. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  72. package/apps/server/src/plugin-support/zip.ts +7 -7
  73. package/apps/server/src/profile/bundle-manifest.ts +27 -27
  74. package/apps/server/src/profile/compose.ts +12 -7
  75. package/apps/server/src/profile/plugin-discovery.ts +14 -14
  76. package/apps/server/src/profile/provisioning.ts +5 -5
  77. package/apps/server/src/profile-target.ts +10 -10
  78. package/apps/server/src/protocol.ts +2 -2
  79. package/apps/server/src/provider.ts +62 -57
  80. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  81. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  82. package/apps/server/src/ragents/coordinator.ts +2 -2
  83. package/apps/server/src/ragents/engine.ts +23 -23
  84. package/apps/server/src/ragents/global-chat.ts +8 -8
  85. package/apps/server/src/ragents/host-services.ts +6 -3
  86. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  87. package/apps/server/src/ragents/run-owner.ts +2 -2
  88. package/apps/server/src/ragents/session.ts +49 -49
  89. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  90. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  91. package/apps/server/src/rpc/dispatcher.ts +19 -19
  92. package/apps/server/src/rpc/http-transport.ts +11 -11
  93. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  94. package/apps/server/src/run-preparation-input.ts +5 -5
  95. package/apps/server/src/run-preparation.ts +24 -24
  96. package/apps/server/src/run-transfer.ts +39 -39
  97. package/apps/server/src/server.ts +48 -48
  98. package/apps/server/src/settings.ts +1 -1
  99. package/apps/server/src/startup.ts +3 -3
  100. package/apps/server/src/title-compactor.ts +9 -9
  101. package/apps/server/src/title-settings.ts +3 -3
  102. package/apps/server/src/web-bundles.ts +2 -2
  103. package/apps/server/src/web-stylesheet.ts +2 -2
  104. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-CpPi6QLr.js} +1 -1
  105. package/apps/web/dist/assets/main-DJmCHGzM.js +11 -0
  106. package/apps/web/dist/assets/mermaid-HWGCJPDP-q-mf1kLN.js +608 -0
  107. package/apps/web/dist/assets/runPanel-nk_aMxSn.js +21 -0
  108. package/apps/web/dist/help/guide-access.html +5 -5
  109. package/apps/web/dist/help/guide-access.md +2 -2
  110. package/apps/web/dist/help/guide-clients.html +53 -54
  111. package/apps/web/dist/help/guide-clients.md +50 -51
  112. package/apps/web/dist/help/guide-distributed.html +12 -7
  113. package/apps/web/dist/help/guide-distributed.md +9 -4
  114. package/apps/web/dist/help/guide-functions.html +3 -3
  115. package/apps/web/dist/help/guide-getting-started.html +24 -15
  116. package/apps/web/dist/help/guide-getting-started.md +22 -12
  117. package/apps/web/dist/help/guide-ideas.html +3 -3
  118. package/apps/web/dist/help/guide-plugins.html +5 -4
  119. package/apps/web/dist/help/guide-plugins.md +2 -1
  120. package/apps/web/dist/help/guide-programs.html +3 -3
  121. package/apps/web/dist/help/guide-runtime.html +6 -6
  122. package/apps/web/dist/help/guide-runtime.md +3 -3
  123. package/apps/web/dist/help/guide.html +3 -3
  124. package/apps/web/dist/help/index.html +196 -144
  125. package/apps/web/dist/help/mini-app.css +6 -0
  126. package/apps/web/dist/help/mini-app.js +14 -14
  127. package/apps/web/dist/host-web.json +91 -91
  128. package/apps/web/dist/index.html +3 -3
  129. package/apps/web/dist/run-panel.html +3 -3
  130. package/apps/web/package.json +1 -1
  131. package/apps/web/src/AccessContext.tsx +15 -15
  132. package/apps/web/src/App.tsx +13 -13
  133. package/apps/web/src/DiffCode.tsx +2 -2
  134. package/apps/web/src/HelpDialog.tsx +3 -3
  135. package/apps/web/src/Overview.tsx +13 -13
  136. package/apps/web/src/PluginActivation.ts +1 -1
  137. package/apps/web/src/PluginChat.tsx +15 -15
  138. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  139. package/apps/web/src/PluginRegistry.tsx +44 -44
  140. package/apps/web/src/RunPreparationChat.tsx +11 -11
  141. package/apps/web/src/RunStore.ts +1 -1
  142. package/apps/web/src/SessionList.tsx +14 -14
  143. package/apps/web/src/SettingsModal.tsx +112 -112
  144. package/apps/web/src/StartOptions.tsx +11 -11
  145. package/apps/web/src/StartSelection.tsx +11 -11
  146. package/apps/web/src/StartTiles.tsx +8 -8
  147. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  148. package/apps/web/src/ThemeSettings.tsx +8 -8
  149. package/apps/web/src/TitleModelSettings.tsx +13 -13
  150. package/apps/web/src/WorkspacePanel.tsx +9 -9
  151. package/apps/web/src/access-session.ts +4 -4
  152. package/apps/web/src/access-token.ts +5 -5
  153. package/apps/web/src/actor-conversation.ts +3 -3
  154. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  155. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  156. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  157. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  158. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  159. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  160. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  161. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  162. package/apps/web/src/api.ts +7 -7
  163. package/apps/web/src/chat/QuasselHost.tsx +1 -1
  164. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  165. package/apps/web/src/chat/chat-target.ts +3 -3
  166. package/apps/web/src/chat/requests.ts +2 -2
  167. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  168. package/apps/web/src/chat-view-settings.tsx +5 -6
  169. package/apps/web/src/diff-view.css +1 -1
  170. package/apps/web/src/highlighting.css +1 -1
  171. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  172. package/apps/web/src/lib/labels.ts +6 -6
  173. package/apps/web/src/main.tsx +4 -4
  174. package/apps/web/src/offered-machines.ts +2 -2
  175. package/apps/web/src/page-opener.tsx +1 -1
  176. package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
  177. package/apps/web/src/panel/LoginForm.tsx +6 -6
  178. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  179. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  180. package/apps/web/src/panel/PanelPage.tsx +1 -1
  181. package/apps/web/src/panel/RunLine.tsx +4 -4
  182. package/apps/web/src/panel/RunsPage.tsx +15 -15
  183. package/apps/web/src/panel/StartPage.tsx +26 -26
  184. package/apps/web/src/panel/connection-state.ts +9 -9
  185. package/apps/web/src/panel/contract.ts +28 -28
  186. package/apps/web/src/panel.tsx +1 -1
  187. package/apps/web/src/plugin-bootstrap.ts +5 -5
  188. package/apps/web/src/product/ModelControl.tsx +3 -3
  189. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  190. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  191. package/apps/web/src/product/model-settings.ts +2 -2
  192. package/apps/web/src/rpc/client.ts +16 -16
  193. package/apps/web/src/rpc.ts +1 -1
  194. package/apps/web/src/run-overview.ts +1 -1
  195. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  196. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  197. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  198. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  199. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  200. package/apps/web/src/run-panel/clipboard.ts +3 -3
  201. package/apps/web/src/run-panel/host-contract.ts +5 -5
  202. package/apps/web/src/run-panel/host.ts +15 -15
  203. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  204. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  205. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  206. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  207. package/apps/web/src/run-panel.tsx +4 -4
  208. package/apps/web/src/run-preparation.ts +2 -2
  209. package/apps/web/src/run-view.ts +3 -3
  210. package/apps/web/src/settings-contributions.ts +32 -32
  211. package/apps/web/src/theme.ts +9 -9
  212. package/apps/web/src/title-model-settings.ts +6 -6
  213. package/apps/web/src/ui/ListDetail.tsx +9 -9
  214. package/apps/web/src/ui/dialog.tsx +2 -2
  215. package/apps/web/src/ui/modal-controller.ts +3 -3
  216. package/apps/web/src/ui/modal.tsx +2 -2
  217. package/apps/web/src/ui/popover.tsx +1 -1
  218. package/apps/web/src/ui/relative-time.ts +8 -8
  219. package/apps/web/src/ui/startup-notice.tsx +2 -2
  220. package/apps/web/src/ui/state-icon.tsx +1 -1
  221. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  222. package/apps/web/src/ui/stop-button.tsx +2 -2
  223. package/bundles/ragents.activity/ragents-bundle.json +3 -3
  224. package/bundles/ragents.activity/web/classes.json +1 -1
  225. package/bundles/ragents.activity/web/index.js +1 -1
  226. package/bundles/ragents.activity/web/index.js.map +2 -2
  227. package/bundles/ragents.actor-programs/ragents-bundle.json +3 -3
  228. package/bundles/ragents.actor-programs/server/index.js +225 -225
  229. package/bundles/ragents.actor-programs/server/index.js.map +2 -2
  230. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  231. package/bundles/ragents.actor-programs/web/index.js +1 -1
  232. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  233. package/bundles/ragents.ask/ragents-bundle.json +3 -3
  234. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  235. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  236. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  237. package/bundles/ragents.ask/server/index.js +23 -23
  238. package/bundles/ragents.ask/server/index.js.map +2 -2
  239. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  240. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  241. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
  242. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
  243. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  245. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  246. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  247. package/bundles/ragents.ask/web/classes.json +1 -1
  248. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  249. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  250. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  251. package/bundles/ragents.ask/web/index.js +1 -1
  252. package/bundles/ragents.ask/web/index.js.map +2 -2
  253. package/bundles/ragents.browser/executor/index.mjs +35 -35
  254. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  255. package/bundles/ragents.browser/ragents-bundle.json +3 -3
  256. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  257. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  258. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  259. package/bundles/ragents.browser/server/index.js +31 -31
  260. package/bundles/ragents.browser/server/index.js.map +2 -2
  261. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  262. package/bundles/ragents.documents/prompt.hbs +1 -1
  263. package/bundles/ragents.documents/ragents-bundle.json +3 -3
  264. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  265. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  266. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  267. package/bundles/ragents.documents/server/index.js +26 -26
  268. package/bundles/ragents.documents/server/index.js.map +2 -2
  269. package/bundles/ragents.documents/web/classes.json +1 -1
  270. package/bundles/ragents.documents/web/index.js +1 -1
  271. package/bundles/ragents.documents/web/index.js.map +3 -3
  272. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  273. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  274. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +3 -3
  275. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  276. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  277. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  278. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  280. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  281. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +3 -3
  282. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  283. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  284. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  285. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  286. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  287. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  288. package/bundles/ragents.lsp-typescript/ragents-bundle.json +3 -3
  289. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  290. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  291. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  292. package/bundles/ragents.model-relay/ragents-bundle.json +8 -4
  293. package/bundles/ragents.model-relay/server/index.js +25 -21
  294. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  295. package/bundles/ragents.orchestration/ragents-bundle.json +3 -3
  296. package/bundles/ragents.orchestration/server/index.js +28 -28
  297. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  300. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  301. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  302. package/bundles/ragents.orchestration/web/classes.json +1 -1
  303. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  304. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  305. package/bundles/ragents.orchestration/web/index.js +8 -8
  306. package/bundles/ragents.orchestration/web/index.js.map +2 -2
  307. package/bundles/ragents.overseer/ragents-bundle.json +3 -3
  308. package/bundles/ragents.overseer/server/index.js +98 -98
  309. package/bundles/ragents.overseer/server/index.js.map +2 -2
  310. package/bundles/ragents.overseer/web/classes.json +1 -1
  311. package/bundles/ragents.overseer/web/index.js +1 -1
  312. package/bundles/ragents.overseer/web/index.js.map +2 -2
  313. package/bundles/ragents.processes/ragents-bundle.json +3 -3
  314. package/bundles/ragents.processes/server/index.js +11 -11
  315. package/bundles/ragents.processes/server/index.js.map +2 -2
  316. package/bundles/ragents.processes/web/classes.json +1 -1
  317. package/bundles/ragents.processes/web/index.js +3 -3
  318. package/bundles/ragents.processes/web/index.js.map +2 -2
  319. package/bundles/ragents.product/ragents-bundle.json +3 -3
  320. package/bundles/ragents.product/server/index.js +12 -13
  321. package/bundles/ragents.product/server/index.js.map +2 -2
  322. package/bundles/ragents.product/web/classes.json +1 -1
  323. package/bundles/ragents.product/web/index.js +1 -1
  324. package/bundles/ragents.product/web/index.js.map +2 -2
  325. package/bundles/ragents.profile-distribution/ragents-bundle.json +3 -3
  326. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  327. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  328. package/bundles/ragents.reference/ragents-bundle.json +3 -3
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  335. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  336. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  340. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  341. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  347. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  348. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  349. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  350. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  352. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  353. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  360. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  361. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  362. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  363. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  365. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  366. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  367. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  368. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  392. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  393. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  394. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  395. package/bundles/ragents.reference/web/classes.json +1 -1
  396. package/bundles/ragents.reference/web/index.js +1 -1
  397. package/bundles/ragents.reference/web/index.js.map +2 -2
  398. package/bundles/ragents.todo/ragents-bundle.json +3 -3
  399. package/bundles/ragents.todo/server/index.js +5 -8
  400. package/bundles/ragents.todo/server/index.js.map +2 -2
  401. package/bundles/ragents.todo/web/classes.json +1 -1
  402. package/bundles/ragents.todo/web/index.js +1 -1
  403. package/bundles/ragents.todo/web/index.js.map +2 -2
  404. package/bundles/ragents.transcript/ragents-bundle.json +3 -3
  405. package/bundles/ragents.transcript/server/index.js +11 -11
  406. package/bundles/ragents.transcript/server/index.js.map +2 -2
  407. package/bundles/ragents.watch/ragents-bundle.json +3 -3
  408. package/bundles/ragents.watch/server/index.js +48 -48
  409. package/bundles/ragents.watch/server/index.js.map +2 -2
  410. package/bundles/ragents.workspace/ragents-bundle.json +3 -3
  411. package/bundles/ragents.workspace/server/index.js +83 -83
  412. package/bundles/ragents.workspace/server/index.js.map +2 -2
  413. package/bundles/ragents.workspace/web/classes.json +1 -1
  414. package/bundles/ragents.workspace/web/index.js +1 -1
  415. package/bundles/ragents.workspace/web/index.js.map +2 -2
  416. package/package.json +4 -4
  417. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  418. package/packages/agent/dist/index.d.ts +1 -1
  419. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  420. package/packages/agent/src/core/compaction/utils.ts +1 -1
  421. package/packages/agent/src/core/model-runtime.ts +45 -5
  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 +3725 -552
  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/plugin-host.ts +119 -119
  453. package/packages/ragents/src/plugin-types.ts +16 -16
  454. package/packages/ragents/src/rpc/contract.ts +5 -5
  455. package/packages/ragents/src/rpc/contribution.ts +2 -2
  456. package/packages/ragents/src/rpc/peer.ts +11 -11
  457. package/packages/ragents/src/rpc/protocol.ts +2 -2
  458. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  459. package/packages/ragents/src/runtime/journal-storage.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 +44 -44
  472. package/packages/workspace-executor/src/errors.ts +1 -1
  473. package/packages/workspace-executor/src/executor.ts +16 -16
  474. package/packages/workspace-executor/src/files.ts +31 -31
  475. package/packages/workspace-executor/src/index.ts +1 -1
  476. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  477. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  478. package/packages/workspace-executor/src/language-server/host.ts +36 -36
  479. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  480. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  481. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  482. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  483. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +3 -3
  484. package/packages/workspace-executor/src/managed-process.ts +12 -12
  485. package/packages/workspace-executor/src/module.ts +8 -8
  486. package/packages/workspace-executor/src/modules.ts +3 -3
  487. package/packages/workspace-executor/src/paths.ts +11 -11
  488. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  489. package/packages/workspace-executor/src/processes/module.ts +3 -3
  490. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  491. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  492. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  493. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  494. package/packages/workspace-executor/src/run-folders.ts +3 -3
  495. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  496. package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
  497. package/packages/workspace-executor/src/session-ident.ts +2 -2
  498. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  499. package/packages/workspace-executor/src/tools.ts +5 -5
  500. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  501. package/plugins/ragents.activity/web/activity.ts +2 -2
  502. package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
  503. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  504. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  505. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  506. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  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 -2
  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 +3 -3
  572. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -5
  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/Center.tsx +5 -5
  578. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  579. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  580. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  581. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  582. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  583. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  584. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  585. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  586. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  587. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  588. package/plugins/ragents.orchestration/web/format.ts +1 -1
  589. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  590. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  591. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  592. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
  593. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  594. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  595. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  596. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  597. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  598. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  599. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
  600. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  601. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  602. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  603. package/plugins/ragents.overseer/contract.ts +20 -20
  604. package/plugins/ragents.overseer/server/api.ts +6 -6
  605. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  606. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  607. package/plugins/ragents.overseer/server/index.ts +24 -24
  608. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  609. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  610. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  611. package/plugins/ragents.overseer/server/settings.ts +6 -6
  612. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  613. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  614. package/plugins/ragents.overseer/web/index.tsx +20 -20
  615. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  616. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  617. package/plugins/ragents.processes/contract.ts +5 -5
  618. package/plugins/ragents.processes/server/methods.ts +4 -4
  619. package/plugins/ragents.processes/server/observer.ts +8 -8
  620. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  621. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  622. package/plugins/ragents.processes/web/processes.ts +10 -10
  623. package/plugins/ragents.product/server/config.ts +1 -1
  624. package/plugins/ragents.product/server/index.ts +4 -4
  625. package/plugins/ragents.product/server/runtime.ts +9 -10
  626. package/plugins/ragents.product/web/index.tsx +1 -1
  627. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  628. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  629. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  630. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  631. package/plugins/ragents.reference/examples.ts +27 -27
  632. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  636. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  637. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  638. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  639. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  640. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  641. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  642. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  643. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  644. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  645. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  648. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  649. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  650. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  651. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  652. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  653. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  654. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  655. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  656. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  657. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  661. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  662. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  663. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  664. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  665. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  666. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  667. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  668. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  669. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  670. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  671. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  672. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  693. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  694. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  695. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  696. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  697. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  698. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  699. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  700. package/plugins/ragents.todo/contract.ts +0 -3
  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 +63 -63
  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 +50 -50
  714. package/plugins/ragents.workspace/server/config.ts +7 -7
  715. package/plugins/ragents.workspace/server/index.ts +3 -3
  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 +31 -31
  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 +49 -49
  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-DnnqWHkH.js +0 -11
  738. package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
  739. package/apps/web/dist/assets/runPanel-DPm7s3KM.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/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  748. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -15,7 +15,7 @@ import { defaultDataDirectory } from "./data-directory.js";
15
15
  import { MissingEnvironmentError } from "./missing-environment.js";
16
16
  import { isPluginPath, pluginFolderFor } from "./plugin-support/plugins-root.js";
17
17
 
18
- // Der Befund über eine fehlende Umgebungsvariable gehört zum Laden der Konfiguration; main.ts holt ihn darum von hier.
18
+ // The finding about a missing environment variable belongs to loading the configuration; that is why main.ts gets it from here.
19
19
  export { missingEnvironmentOf, reportMissingEnvironment } from "./missing-environment.js";
20
20
 
21
21
  const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../..");
@@ -55,33 +55,33 @@ const resolveUserToken = (
55
55
  ): string | undefined => {
56
56
  if (raw === undefined) return undefined;
57
57
  if (!isEnvironmentReference(raw) || typeof raw.name !== "string" || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(raw.name)) {
58
- throw new Error(`${location}.token braucht env("ENV_NAME"); ein Token steht nie im Klartext in der Profildatei`);
58
+ throw new Error(`${location}.token needs env("ENV_NAME"); a token never appears in plain text in the profile file`);
59
59
  }
60
- // Ein Benutzer meldet sich weiter mit seinem Passwort an; ohne gesetzte Variable hat er nur keinen persönlichen Token.
60
+ // A user still signs in with their password; without the variable set they just have no personal token.
61
61
  const token = environment[raw.name];
62
62
  if (!token) return undefined;
63
- // $ und ! sind tabu, weil der Verbraucher den Token als API-Schlüssel mit Vorlagen- und Befehlssyntax auswertet.
63
+ // $ and ! are off limits because the consumer evaluates the token as an API key with template and command syntax.
64
64
  if (token.length < MIN_TOKEN_LENGTH || token.length > MAX_TOKEN_LENGTH || !/^[\x21-\x7e]+$/.test(token) || /[$!]/.test(token)) {
65
- throw new Error(`${location}.token (${raw.name}) braucht ${MIN_TOKEN_LENGTH} bis ${MAX_TOKEN_LENGTH} druckbare ASCII-Zeichen ohne Leerzeichen, $ und !`);
65
+ throw new Error(`${location}.token (${raw.name}) needs ${MIN_TOKEN_LENGTH} to ${MAX_TOKEN_LENGTH} printable ASCII characters without spaces, $ and !`);
66
66
  }
67
67
  return token;
68
68
  };
69
69
 
70
70
  const resolveIdentity = (location: string, entry: Record<string, unknown>): AccessUser => {
71
71
  if (typeof entry.id !== "string" || !/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(entry.id)) {
72
- throw new Error(`${location}.id braucht 1 bis 64 Zeichen: Buchstaben, Ziffern, Punkt, Unterstrich oder Bindestrich`);
72
+ throw new Error(`${location}.id needs 1 to 64 characters: letters, digits, period, underscore or hyphen`);
73
73
  }
74
74
  if (entry.label !== undefined && (typeof entry.label !== "string" || !entry.label.trim() || entry.label.length > 120)) {
75
- throw new Error(`${location}.label braucht 1 bis 120 Zeichen`);
75
+ throw new Error(`${location}.label needs 1 to 120 characters`);
76
76
  }
77
77
  if (!Array.isArray(entry.rights) || !entry.rights.every(isAccessRight)) {
78
- throw new Error(`${location}.rights braucht gültige Rechte als Strings oder "*" für alle Rechte`);
78
+ throw new Error(`${location}.rights needs valid rights as strings or "*" for all rights`);
79
79
  }
80
- if (new Set(entry.rights).size !== entry.rights.length) throw new Error(`${location}.rights enthält doppelte Rechte`);
80
+ if (new Set(entry.rights).size !== entry.rights.length) throw new Error(`${location}.rights contains duplicate rights`);
81
81
  if (entry.startEntries !== undefined && (!Array.isArray(entry.startEntries)
82
82
  || !entry.startEntries.every((id) => typeof id === "string" && START_ENTRY_ID.test(id))
83
83
  || new Set(entry.startEntries).size !== entry.startEntries.length)) {
84
- throw new Error(`${location}.startEntries braucht eindeutige Vorlagenkennungen als Strings`);
84
+ throw new Error(`${location}.startEntries needs unique template ids as strings`);
85
85
  }
86
86
  return Object.freeze({
87
87
  id: entry.id,
@@ -94,19 +94,19 @@ const resolveIdentity = (location: string, entry: Record<string, unknown>): Acce
94
94
  export const resolveAnonymousUser = (source: string, raw: unknown): AccessUser | undefined => {
95
95
  if (raw === undefined) return undefined;
96
96
  const location = `${source}: anonymousUser`;
97
- if (!raw || typeof raw !== "object" || Array.isArray(raw)) throw new Error(`${location} ist kein Benutzer`);
97
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) throw new Error(`${location} is not a user`);
98
98
  const entry = raw as Record<string, unknown>;
99
99
  if (Object.keys(entry).some((key) => !["id", "label", "rights", "startEntries"].includes(key))) {
100
- throw new Error(`${location} erlaubt nur id, label, rights und startEntries`);
100
+ throw new Error(`${location} allows only id, label, rights and startEntries`);
101
101
  }
102
102
  return resolveIdentity(location, entry);
103
103
  };
104
104
 
105
- /** Die Vorlage, die ein neuer Run ohne Auswahl nimmt; ob sie registriert ist, prüft der PluginHost beim Start. */
105
+ /** The template a new run takes without a choice; whether it is registered is checked by the PluginHost at startup. */
106
106
  export const resolveDefaultStartEntry = (source: string, raw: unknown): string | undefined => {
107
107
  if (raw === undefined) return undefined;
108
108
  if (typeof raw !== "string" || !START_ENTRY_ID.test(raw)) {
109
- throw new Error(`${source}: defaultStartEntry braucht eine Vorlagenkennung als String, etwa "acme.tasks.setup"`);
109
+ throw new Error(`${source}: defaultStartEntry needs a template id as a string, such as "acme.tasks.setup"`);
110
110
  }
111
111
  return raw;
112
112
  };
@@ -118,30 +118,30 @@ export const resolveProfileUsers = (
118
118
  ): readonly ResolvedProfileUser[] | undefined => {
119
119
  if (raw === undefined) return undefined;
120
120
  if (!Array.isArray(raw) || raw.length === 0) {
121
- throw new Error(`${source}: users muss eine nicht leere Liste sein; ohne users ist die Anmeldung ausgeschaltet`);
121
+ throw new Error(`${source}: users must be a non-empty list; without users, sign-in is turned off`);
122
122
  }
123
123
  const ids = new Set<string>();
124
124
  const tokens = new Map<string, string>();
125
125
  return raw.map((value: unknown, index: number) => {
126
126
  const location = `${source}: users[${index}]`;
127
- if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`${location} ist kein Benutzer`);
127
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`${location} is not a user`);
128
128
  const entry = value as Record<string, unknown>;
129
129
  if (Object.keys(entry).some((key) => !["id", "label", "password", "token", "rights", "startEntries"].includes(key))) {
130
- throw new Error(`${location} erlaubt nur id, label, password, token, rights und startEntries`);
130
+ throw new Error(`${location} allows only id, label, password, token, rights and startEntries`);
131
131
  }
132
132
  const user = resolveIdentity(location, entry);
133
- if (ids.has(user.id)) throw new Error(`${location}.id ist doppelt: ${user.id}`);
133
+ if (ids.has(user.id)) throw new Error(`${location}.id is a duplicate: ${user.id}`);
134
134
  ids.add(user.id);
135
135
  if (typeof entry.password !== "string" && (!isEnvironmentReference(entry.password)
136
136
  || typeof entry.password.name !== "string" || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(entry.password.name))) {
137
- throw new Error(`${location}.password braucht einen Text oder env("ENV_NAME")`);
137
+ throw new Error(`${location}.password needs a text or env("ENV_NAME")`);
138
138
  }
139
139
  const password = typeof entry.password === "string" ? entry.password : environment[entry.password.name];
140
- if (!password || password.length > 2048) throw new Error(`${location}.password fehlt, ist leer oder länger als 2048 Zeichen`);
140
+ if (!password || password.length > 2048) throw new Error(`${location}.password is missing, empty or longer than 2048 characters`);
141
141
  const token = resolveUserToken(location, entry.token, environment);
142
142
  if (token !== undefined) {
143
143
  const other = tokens.get(token);
144
- if (other) throw new Error(`${location}.token ist derselbe wie bei Benutzer ${other}; jeder Token gehört genau einem Benutzer`);
144
+ if (other) throw new Error(`${location}.token is the same as for user ${other}; every token belongs to exactly one user`);
145
145
  tokens.set(token, user.id);
146
146
  }
147
147
  return Object.freeze({ ...user, password, ...(token !== undefined ? { token } : {}) });
@@ -152,7 +152,7 @@ export const listFromEnvironmentValue = (value: string): readonly string[] | und
152
152
  if (!value.startsWith("[")) return undefined;
153
153
  const parsed = JSON.parse(value) as unknown;
154
154
  if (!Array.isArray(parsed) || parsed.some((entry) => typeof entry !== "string")) {
155
- throw new Error(`Der Wert ${value} sieht aus wie eine Liste, ist aber keine Liste von Strings`);
155
+ throw new Error(`The value ${value} looks like a list, but is not a list of strings`);
156
156
  }
157
157
  return parsed as string[];
158
158
  };
@@ -164,16 +164,16 @@ const materialize = (value: Exclude<ConfigValue, EnvironmentReference | Provisio
164
164
  return JSON.stringify(value);
165
165
  };
166
166
 
167
- /** Der Datenordner des Hosts, in dessen tools/ die Provisionierung ihre Werkzeuge legt. */
167
+ /** The host's data folder, in whose tools/ the provisioning puts its tools. */
168
168
  const dataDirectoryOf = (source: string, raw: RAgentsConfig): string => {
169
169
  const configured = raw.host?.DATA_DIR;
170
170
  if (isEnvironmentReference(configured) && process.env[configured.name] === undefined) {
171
171
  throw new MissingEnvironmentError({ variable: configured.name, section: "host", key: "DATA_DIR" },
172
- `${source}: host.DATA_DIR verweist auf die nicht gesetzte Umgebungsvariable ${configured.name}`);
172
+ `${source}: host.DATA_DIR refers to the unset environment variable ${configured.name}`);
173
173
  }
174
174
  const fromFile = isEnvironmentReference(configured) ? process.env[configured.name] : typeof configured === "string" ? configured : undefined;
175
175
  const profile = process.env.PRODUCT_PROFILE;
176
- if (!profile) throw new Error(`${source}: ohne PRODUCT_PROFILE gibt es keinen Datenordner und damit keinen Werkzeugordner`);
176
+ if (!profile) throw new Error(`${source}: without PRODUCT_PROFILE there is no data folder and therefore no tool folder`);
177
177
  return path.resolve(process.env.DATA_DIR ?? fromFile ?? defaultDataDirectory(profile));
178
178
  };
179
179
 
@@ -187,21 +187,21 @@ const entryFor = (source: string, section: string, key: string, value: ConfigVal
187
187
  const resolved = process.env[value.name];
188
188
  if (resolved === undefined) {
189
189
  throw new MissingEnvironmentError({ variable: value.name, section, key },
190
- `${source}: ${section}.${key} verweist mit env("${value.name}") auf eine Umgebungsvariable, `
191
- + `die in dieser Shell nicht gesetzt ist. Setze sie vor dem Start (export ${value.name}=...) oder `
192
- + "hinterlege sie in der Startdatei Deiner Shell; Secrets stehen nie in der Konfigurationsdatei.");
190
+ `${source}: ${section}.${key} refers with env("${value.name}") to an environment variable `
191
+ + `that is not set in this shell. Set it before starting (export ${value.name}=...) or `
192
+ + "put it in your shell's startup file; secrets never appear in the configuration file.");
193
193
  }
194
194
  return { section, key, value: resolved, viaReference: true, overriddenByEnvironment };
195
195
  }
196
196
  if (typeof value === "string" && ENVIRONMENT_PLACEHOLDER.test(value)) {
197
197
  throw new Error(
198
- `${source}: ${section}.${key} steht als Text "${value}" in der Konfiguration; `
199
- + `eine Referenz auf die Umgebung wird als env("...") geschrieben`);
198
+ `${source}: ${section}.${key} appears as the text "${value}" in the configuration; `
199
+ + `a reference to the environment is written as env("...")`);
200
200
  }
201
201
  if (SECRET_KEY_PATTERN.test(key)) {
202
202
  throw new Error(
203
- `${source}: ${section}.${key} ist ein Secret und darf nicht im Klartext in der Konfiguration stehen; `
204
- + `per Umgebungsvariable setzen oder als env("ENV_NAME") referenzieren`);
203
+ `${source}: ${section}.${key} is a secret and must not appear in plain text in the configuration; `
204
+ + `set it through an environment variable or reference it as env("ENV_NAME")`);
205
205
  }
206
206
  return { section, key, value: materialize(value), viaReference: false, overriddenByEnvironment };
207
207
  };
@@ -221,7 +221,7 @@ const parseEntries = (source: string, raw: RAgentsConfig): readonly ConfigFileEn
221
221
  const existing = byKey.get(entry.key);
222
222
  if (existing && existing.value !== entry.value) {
223
223
  throw new Error(
224
- `${source}: ${entry.key} steht in ${existing.section} und ${entry.section} mit unterschiedlichen Werten`);
224
+ `${source}: ${entry.key} appears in ${existing.section} and ${entry.section} with different values`);
225
225
  }
226
226
  byKey.set(entry.key, entry);
227
227
  }
@@ -236,14 +236,14 @@ export const profileFileName = (profile: string): string => `ragents.config.${pr
236
236
  export const profileFilePath = (root: string, environment: Readonly<Record<string, string | undefined>> = process.env): string | undefined => {
237
237
  const profile = environment.PRODUCT_PROFILE;
238
238
  if (!profile) return undefined;
239
- if (!PROFILE_NAME.test(profile)) throw new Error(`PRODUCT_PROFILE ist kein gültiger Profilname: ${profile}`);
239
+ if (!PROFILE_NAME.test(profile)) throw new Error(`PRODUCT_PROFILE is not a valid profile name: ${profile}`);
240
240
  const file = environment.PRODUCT_PROFILE_FILE;
241
241
  if (!file) return path.join(root, profileFileName(profile));
242
242
  const source = path.resolve(file);
243
243
  if (path.basename(source) !== profileFileName(profile)) {
244
- throw new Error(`PRODUCT_PROFILE_FILE ${source} passt nicht zum Profil ${profile}; erwartet wird ${profileFileName(profile)}`);
244
+ throw new Error(`PRODUCT_PROFILE_FILE ${source} does not match the profile ${profile}; expected is ${profileFileName(profile)}`);
245
245
  }
246
- if (!statSync(source, { throwIfNoEntry: false })?.isFile()) throw new Error(`Die Profildatei ${source} fehlt`);
246
+ if (!statSync(source, { throwIfNoEntry: false })?.isFile()) throw new Error(`The profile file ${source} is missing`);
247
247
  return source;
248
248
  };
249
249
 
@@ -260,12 +260,12 @@ const readProfileConfiguration = async (root: string): Promise<LoadedConfigFile
260
260
  const module = await import(pathToFileURL(source).href) as Record<string, unknown>;
261
261
  const loadedConfig = module.config;
262
262
  if (typeof loadedConfig !== "object" || loadedConfig === null) {
263
- throw new Error(`${source} exportiert keine Konstante config mit den Konfigurationssektionen`);
263
+ throw new Error(`${source} does not export a constant config with the configuration sections`);
264
264
  }
265
265
  const raw = withPluginPaths(source, loadedConfig as RAgentsConfig);
266
266
  const users = resolveProfileUsers(source, module.users);
267
267
  const anonymousUser = resolveAnonymousUser(source, module.anonymousUser);
268
- if (users && anonymousUser) throw new Error(`${source}: users und anonymousUser schließen einander aus`);
268
+ if (users && anonymousUser) throw new Error(`${source}: users and anonymousUser exclude each other`);
269
269
  const defaultStartEntry = resolveDefaultStartEntry(source, module.defaultStartEntry);
270
270
  return { path: source, entries: parseEntries(source, raw), users, anonymousUser, defaultStartEntry };
271
271
  };
@@ -274,7 +274,7 @@ let loadedConfigFile: LoadedConfigFile | undefined;
274
274
  let loadCompleted = false;
275
275
 
276
276
  export const loadConfigFile = async (root = rootDir): Promise<void> => {
277
- if (loadCompleted) throw new Error("Die Konfiguration wurde bereits geladen");
277
+ if (loadCompleted) throw new Error("The configuration has already been loaded");
278
278
  loadedConfigFile = await readProfileConfiguration(root);
279
279
  loadCompleted = true;
280
280
  if (!loadedConfigFile) return;
@@ -285,8 +285,8 @@ export const loadConfigFile = async (root = rootDir): Promise<void> => {
285
285
  applied++;
286
286
  }
287
287
  const overridden = loadedConfigFile.entries.length - applied;
288
- console.log(`Konfiguration ${loadedConfigFile.path} geladen `
289
- + `(${applied} Werte übernommen, ${overridden} durch Umgebung überstimmt)`);
288
+ console.log(`Configuration ${loadedConfigFile.path} loaded `
289
+ + `(${applied} values applied, ${overridden} overridden by the environment)`);
290
290
  };
291
291
 
292
292
  export const configFilePath = (): string | null => loadedConfigFile?.path ?? null;
@@ -306,7 +306,7 @@ export interface ConfigFileValidationContext {
306
306
  }
307
307
 
308
308
  export const validateConfigFileSections = (context: ConfigFileValidationContext): void => {
309
- if (!loadCompleted) throw new Error("Die Konfiguration muss vor ihrer Prüfung geladen werden");
309
+ if (!loadCompleted) throw new Error("The configuration must be loaded before it is checked");
310
310
  if (!loadedConfigFile) return;
311
311
  const source = loadedConfigFile.path;
312
312
  const known = new Set(context.knownPluginIds);
@@ -315,21 +315,21 @@ export const validateConfigFileSections = (context: ConfigFileValidationContext)
315
315
  for (const section of new Set(loadedConfigFile.entries.map((entry) => entry.section))) {
316
316
  if (section === "host") continue;
317
317
  if (!known.has(section)) {
318
- throw new Error(`${source}: unbekannte Sektion ${section}; bekannt sind host, ${[...known].join(", ")}`);
318
+ throw new Error(`${source}: unknown section ${section}; known are host, ${[...known].join(", ")}`);
319
319
  }
320
320
  if (!active.has(section)) {
321
- console.log(`Konfiguration: Sektion ${section} gehört zu einem inaktiven Plugin und wird ignoriert`);
321
+ console.log(`Configuration: section ${section} belongs to an inactive plugin and is ignored`);
322
322
  }
323
323
  }
324
324
  for (const entry of loadedConfigFile.entries) {
325
325
  if (secret.has(entry.key) && !entry.viaReference) {
326
326
  throw new Error(
327
- `${source}: ${entry.section}.${entry.key} ist als Secret deklariert und darf nicht im Klartext `
328
- + `in der Konfiguration stehen; per Umgebungsvariable setzen oder als env("ENV_NAME") referenzieren`);
327
+ `${source}: ${entry.section}.${entry.key} is declared as a secret and must not appear in plain text `
328
+ + `in the configuration; set it through an environment variable or reference it as env("ENV_NAME")`);
329
329
  }
330
330
  if (entry.section === "host") {
331
331
  if (!context.hostKeys.includes(entry.key)) {
332
- throw new Error(`${source}: host.${entry.key} ist kein Host-Schlüssel; erlaubt sind ${context.hostKeys.join(", ")}`);
332
+ throw new Error(`${source}: host.${entry.key} is not a host key; allowed are ${context.hostKeys.join(", ")}`);
333
333
  }
334
334
  continue;
335
335
  }
@@ -337,8 +337,8 @@ export const validateConfigFileSections = (context: ConfigFileValidationContext)
337
337
  const declared = context.declaredKeysFor(entry.section);
338
338
  if (!declared.includes(entry.key)) {
339
339
  throw new Error(
340
- `${source}: ${entry.section}.${entry.key} ist für dieses Plugin nicht deklariert; `
341
- + (declared.length > 0 ? `deklariert sind ${declared.join(", ")}` : "das Plugin deklariert keine Schlüssel"));
340
+ `${source}: ${entry.section}.${entry.key} is not declared for this plugin; `
341
+ + (declared.length > 0 ? `declared are ${declared.join(", ")}` : "the plugin declares no keys"));
342
342
  }
343
343
  }
344
344
  };
@@ -1,6 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { fileURLToPath } from "node:url";
3
3
  import { modelAliasEnvDescriptors } from "./plugin-support/model-aliases.js";
4
+ import { modelProviderEnvDescriptors } from "./plugin-support/model-providers.js";
4
5
  import { declaredEnvironment } from "./plugin-support/plugin-config.js";
5
6
  import { defaultDataDirectory } from "./data-directory.js";
6
7
  import { hostWebDirectory } from "./host-web.js";
@@ -13,6 +14,7 @@ export const hostConfigDescriptors = [
13
14
  { key: "AGENT_THINKING", source: "environment" },
14
15
  { key: "COMPACTION_PROVIDER", source: "environment" },
15
16
  { key: "COMPACTION_MODEL", source: "environment" },
17
+ ...modelProviderEnvDescriptors,
16
18
  ...modelAliasEnvDescriptors,
17
19
  { key: "PRODUCT_PROFILE", source: "environment" },
18
20
  { key: "PLUGINS", source: "environment" },
@@ -6,7 +6,7 @@ import { ragentsDataRoot } from "@ragents/workspace-executor/src/tools.ts";
6
6
  export { ragentsDataRoot };
7
7
 
8
8
  export function defaultDataDirectory(profile: string, home = homedir()): string {
9
- if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(profile)) throw new Error("PRODUCT_PROFILE muss ein einfacher Profilname sein.");
9
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(profile)) throw new Error("PRODUCT_PROFILE must be a simple profile name.");
10
10
  return path.join(ragentsDataRoot(home), profile);
11
11
  }
12
12
 
@@ -35,7 +35,7 @@ export async function assertDataDirectoryIsolated(directory: string): Promise<vo
35
35
  if (error.code === "ENOENT") return undefined;
36
36
  throw error;
37
37
  });
38
- if (entry) throw new Error(`DATA_DIR liegt innerhalb eines Projekts (${filename}). Wähle einen externen Datenordner, zum Beispiel ~/.local/share/ragents/<profil>.`);
38
+ if (entry) throw new Error(`DATA_DIR is inside a project (${filename}). Choose an external data folder, for example ~/.local/share/ragents/<profile>.`);
39
39
  }
40
40
  if (path.dirname(current) === current) return;
41
41
  }
@@ -35,6 +35,6 @@ export const setExternalAccess = async (value: boolean): Promise<void> => {
35
35
  export const externalGate = (req: IncomingMessage, res: ServerResponse): boolean => {
36
36
  if (open || isLocalRequest(req)) return false;
37
37
  res.writeHead(503, { "Content-Type": "text/plain; charset=utf-8" });
38
- res.end("Der Zugang von außen ist ausgeschaltet.\n");
38
+ res.end("External access is turned off.\n");
39
39
  return true;
40
40
  };
@@ -46,7 +46,7 @@ export const acquireLock = async (file: string): Promise<() => Promise<void>> =>
46
46
  continue;
47
47
  }
48
48
  if (Date.now() - started > LOCK_TIMEOUT_MS) {
49
- throw new Error(`${file} ist seit ${Math.round(LOCK_TIMEOUT_MS / 60_000)} Minuten von Prozess ${owner || "?"} belegt; läuft dort noch ein Bau?`);
49
+ throw new Error(`${file} has been held by process ${owner || "?"} for ${Math.round(LOCK_TIMEOUT_MS / 60_000)} minutes; is a build still running there?`);
50
50
  }
51
51
  await new Promise((resolve) => setTimeout(resolve, LOCK_POLL_MS));
52
52
  }
@@ -37,7 +37,7 @@ export async function readHelpResponse(url: URL, webDistDir: string, method = "G
37
37
  const notFound = (): HelpResponse => ({
38
38
  status: 404,
39
39
  headers: { "Content-Type": "text/plain; charset=utf-8" },
40
- body: method === "HEAD" ? undefined : "Nicht gefunden",
40
+ body: method === "HEAD" ? undefined : "Not found",
41
41
  });
42
42
  let requested: string;
43
43
  try {
@@ -141,7 +141,8 @@
141
141
  ],
142
142
  "@ragents/host/plugin-support/model-aliases": [
143
143
  "configuredModelAliases",
144
- "modelLabel"
144
+ "modelLabel",
145
+ "validatedAliasModel"
145
146
  ],
146
147
  "@ragents/host/plugin-support/model-choice": [
147
148
  "builtinCatalog",
@@ -150,8 +151,12 @@
150
151
  "modelThinkingOptions"
151
152
  ],
152
153
  "@ragents/host/plugin-support/model-completion": [
154
+ "aliasCompletionModelToken",
153
155
  "openRouterCompletionModel"
154
156
  ],
157
+ "@ragents/host/plugin-support/model-providers": [
158
+ "configuredModelProviders"
159
+ ],
155
160
  "@ragents/host/plugin-support/model-upstreams": [
156
161
  "modelUpstreamsToken"
157
162
  ],
@@ -58,11 +58,12 @@ export const hostApi: { readonly server: HostApiModules; readonly web: HostApiMo
58
58
  "PayloadTooLargeError", "guardedJsonRoute", "readBody", "readJsonBody", "withAbort", "writeJson",
59
59
  ],
60
60
  "@ragents/host/plugin-support/language-server/plugin": ["createLanguageServerPlugin"],
61
- "@ragents/host/plugin-support/model-aliases": ["configuredModelAliases", "modelLabel"],
61
+ "@ragents/host/plugin-support/model-aliases": ["configuredModelAliases", "modelLabel", "validatedAliasModel"],
62
62
  "@ragents/host/plugin-support/model-choice": [
63
63
  "builtinCatalog", "modelChoiceEnvDescriptors", "modelChoiceFromEnvironment", "modelThinkingOptions",
64
64
  ],
65
- "@ragents/host/plugin-support/model-completion": ["openRouterCompletionModel"],
65
+ "@ragents/host/plugin-support/model-completion": ["aliasCompletionModelToken", "openRouterCompletionModel"],
66
+ "@ragents/host/plugin-support/model-providers": ["configuredModelProviders"],
66
67
  "@ragents/host/plugin-support/model-upstreams": ["modelUpstreamsToken"],
67
68
  "@ragents/host/plugin-support/plugin-config": ["declaredEnvironment"],
68
69
  "@ragents/host/plugin-support/plugin-folder": ["folderSystemPrompts", "pluginAsset", "pluginFolder"],
@@ -9,15 +9,15 @@ export interface HostRecord {
9
9
  readonly startedAt: string;
10
10
  }
11
11
 
12
- /** Der gemerkte Host eines Profils; ragents run und ragents start schreiben dieselbe Datei, stop --host liest sie. */
12
+ /** The remembered host of a profile; ragents run and ragents start write the same file, stop --host reads it. */
13
13
  export const hostRecordFile = (dataDirectory: string): string => path.join(dataDirectory, "host.json");
14
14
 
15
15
  export const readHostRecord = (dataDirectory: string): HostRecord | undefined => {
16
16
  const file = hostRecordFile(dataDirectory);
17
17
  if (!statSync(file, { throwIfNoEntry: false })?.isFile()) return undefined;
18
18
  const parsed = JSON.parse(readFileSync(file, "utf8")) as Partial<HostRecord>;
19
- // Eine PID unter 1 wäre für process.kill die ganze Prozessgruppe; sie darf nie aus dieser Datei kommen.
20
- if (typeof parsed.url !== "string" || !Number.isInteger(parsed.pid) || (parsed.pid ?? 0) < 1) throw new Error(`${file} nennt keine Adresse oder keine PID des Hosts`);
19
+ // A PID below 1 would mean the whole process group to process.kill; it must never come from this file.
20
+ if (typeof parsed.url !== "string" || !Number.isInteger(parsed.pid) || (parsed.pid ?? 0) < 1) throw new Error(`${file} names no address or no PID of the host`);
21
21
  return parsed as HostRecord;
22
22
  };
23
23
 
@@ -43,14 +43,14 @@ const resolveFromBundle = async (bundle, specifier, context, next) => {
43
43
  if (cross) {
44
44
  const [, owner, name] = cross;
45
45
  const folder = bundles.get(owner);
46
- if (!folder) throw new Error(`Das Bundle ${bundle} importiert ${specifier}, aber ${owner} steht nicht in der Pluginliste`);
46
+ if (!folder) throw new Error(`The bundle ${bundle} imports ${specifier}, but ${owner} is not in the plugin list`);
47
47
  const url = new URL(`server/exports/${name.replace(/\.js$/, "")}.js`, folder).href;
48
- if (!existsSync(fileURLToPath(url))) throw new Error(`Das Bundle ${bundle} importiert ${specifier}, das Bundle ${owner} exportiert ${name} aber nicht für den Server; beide Bundles aus ihren Quellen neu bauen`);
48
+ if (!existsSync(fileURLToPath(url))) throw new Error(`The bundle ${bundle} imports ${specifier}, but the bundle ${owner} does not export ${name} for the server; rebuild both bundles from their sources`);
49
49
  return { url, shortCircuit: true };
50
50
  }
51
51
  const listed = specifier.replace(/\.(js|ts|tsx)$/, "");
52
52
  if (listed === "@ragents/workflow") return { url: workflowEntry, shortCircuit: true };
53
- if (!serverModules.has(listed)) throw new Error(`Das Bundle ${bundle} importiert ${specifier}, das der Host nicht bereitstellt; das Bundle gegen diesen Host neu bauen`);
53
+ if (!serverModules.has(listed)) throw new Error(`The bundle ${bundle} imports ${specifier}, which the host does not provide; rebuild the bundle against this host`);
54
54
  return next(specifier, { ...context, parentURL: serverEntry });
55
55
  };
56
56
 
@@ -58,7 +58,7 @@ const resolveFromBundle = async (bundle, specifier, context, next) => {
58
58
  export const load = async (url, context, next) =>
59
59
  bundleOf(url) !== undefined && url.endsWith(".js") ? next(url, { ...context, format: "module" }) : next(url, context);
60
60
 
61
- // Reines JavaScript, weil Node diese Datei im Loader-Thread lädt und dort unter node_modules keine Typen entfernt.
61
+ // Plain JavaScript, because Node loads this file in the loader thread and strips no types under node_modules there.
62
62
  /** Bundles resolve strictly; other code outside the repository resolves bare imports through the host, so it needs no own node_modules. */
63
63
  export const resolve = async (specifier, context, next) => {
64
64
  const bundle = bundleOf(context.parentURL);
@@ -8,12 +8,12 @@ export const hostRoot = (): string => path.resolve(path.dirname(fileURLToPath(im
8
8
  /** The value names of the host API and its number, relative to the host root; generated by pnpm update:host-api. */
9
9
  export const HOST_API_RECORD_FILE = "apps/server/src/host-api.json";
10
10
 
11
- /** Die Nummer der Host-API eines Hosts an beliebiger Stelle; so prüft auch die Erweiterung einen Host, der nicht sie selbst ist. */
11
+ /** The host API number of a host anywhere; this way the extension also checks a host that is not itself. */
12
12
  export const readHostApiVersion = (root: string = hostRoot()): number => {
13
13
  const file = path.join(root, HOST_API_RECORD_FILE);
14
- if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`Die Host-API ist unbekannt: ${file} fehlt`);
14
+ if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`The host API is unknown: ${file} is missing`);
15
15
  const version = (JSON.parse(readFileSync(file, "utf8")) as { version?: unknown }).version;
16
- if (typeof version !== "number" || !Number.isInteger(version) || version < 1) throw new Error(`${file}: version ist keine Nummer der Host-API`);
16
+ if (typeof version !== "number" || !Number.isInteger(version) || version < 1) throw new Error(`${file}: version is not a host API number`);
17
17
  return version;
18
18
  };
19
19
 
@@ -26,7 +26,7 @@ export interface HostApiRecord {
26
26
 
27
27
  export const readHostApiRecord = (root = hostRoot()): HostApiRecord => {
28
28
  const file = path.join(root, HOST_API_RECORD_FILE);
29
- if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`${file} fehlt; mit pnpm update:host-api erzeugen`);
29
+ if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`${file} is missing; generate it with pnpm update:host-api`);
30
30
  return JSON.parse(readFileSync(file, "utf8")) as HostApiRecord;
31
31
  };
32
32
 
@@ -34,12 +34,12 @@ export const readHostApiRecord = (root = hostRoot()): HostApiRecord => {
34
34
  export const checkedHostApiRecord = (root = hostRoot()): HostApiRecord => {
35
35
  const record = readHostApiRecord(root);
36
36
  if (record.version !== HOST_API_VERSION) {
37
- throw new Error(`host-api.json beschreibt Host-API ${record.version}, der Host bietet ${HOST_API_VERSION}; pnpm update:host-api`);
37
+ throw new Error(`host-api.json describes host API ${record.version}, the host offers ${HOST_API_VERSION}; pnpm update:host-api`);
38
38
  }
39
39
  for (const half of ["server", "web"] as const) {
40
40
  const listed = [...hostApiModules(half)].sort().join("\n");
41
41
  if (Object.keys(record[half]).sort().join("\n") !== listed) {
42
- throw new Error(`host-api.json nennt für die ${half}-Hälfte andere Module als apps/server/src/host-api.ts; pnpm update:host-api`);
42
+ throw new Error(`host-api.json names different modules for the ${half} half than apps/server/src/host-api.ts; pnpm update:host-api`);
43
43
  }
44
44
  }
45
45
  return record;
@@ -51,7 +51,7 @@ export interface HostPackage {
51
51
  readonly hostVersion: string;
52
52
  }
53
53
 
54
- /** Das npm-Paket @schlenkr/ragents trägt den Commit, aus dem es gebaut wurde; ein Checkout hat diese Datei nicht. */
54
+ /** The npm package @schlenkr/ragents carries the commit it was built from; a checkout does not have this file. */
55
55
  export const readHostPackage = (root: string = hostRoot()): HostPackage | undefined => {
56
56
  const file = path.join(root, "package.json");
57
57
  if (!statSync(file, { throwIfNoEntry: false })?.isFile()) return undefined;
@@ -59,19 +59,19 @@ export const readHostPackage = (root: string = hostRoot()): HostPackage | undefi
59
59
  const hostVersion = parsed.ragents?.hostVersion;
60
60
  if (hostVersion === undefined) return undefined;
61
61
  if (typeof hostVersion !== "string" || !/^[0-9a-f]{40}$/.test(hostVersion)) {
62
- throw new Error(`${file}: ragents.hostVersion muss ein vollständiger Git-Commit sein, nicht ${JSON.stringify(hostVersion)}`);
62
+ throw new Error(`${file}: ragents.hostVersion must be a full Git commit, not ${JSON.stringify(hostVersion)}`);
63
63
  }
64
- if (typeof parsed.name !== "string" || typeof parsed.version !== "string") throw new Error(`${file}: name und version fehlen`);
64
+ if (typeof parsed.name !== "string" || typeof parsed.version !== "string") throw new Error(`${file}: name and version are missing`);
65
65
  return { name: parsed.name, version: parsed.version, hostVersion };
66
66
  };
67
67
 
68
- /** Die Fassung des npm-Pakets: im Paket seine eigene, im Checkout die der Wurzel; eine Quelle für beide. */
68
+ /** The version of the npm package: in the package its own, in the checkout that of the root; one source for both. */
69
69
  export const readPackageVersion = (root: string = hostRoot()): string => {
70
70
  const file = path.join(root, "package.json");
71
- if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`Die Paketfassung ist unbekannt: ${file} fehlt`);
71
+ if (!statSync(file, { throwIfNoEntry: false })?.isFile()) throw new Error(`The package version is unknown: ${file} is missing`);
72
72
  const version = (JSON.parse(readFileSync(file, "utf8")) as { version?: unknown }).version;
73
73
  if (typeof version !== "string" || !/^\d+\.\d+\.\d+/.test(version)) {
74
- throw new Error(`${file}: version ist die Fassung des Pakets und muss x.y.z sein, nicht ${JSON.stringify(version)}`);
74
+ throw new Error(`${file}: version is the package version and must be x.y.z, not ${JSON.stringify(version)}`);
75
75
  }
76
76
  return version;
77
77
  };
@@ -79,10 +79,10 @@ export const readPackageVersion = (root: string = hostRoot()): string => {
79
79
  const gitDirectoryOf = (root: string): string => {
80
80
  const entry = path.join(root, ".git");
81
81
  const stats = statSync(entry, { throwIfNoEntry: false });
82
- if (!stats) throw new Error(`Die Host-Version ist unbekannt: ${entry} fehlt; der Host braucht einen Git-Checkout oder das Paket @schlenkr/ragents`);
82
+ if (!stats) throw new Error(`The host version is unknown: ${entry} is missing; the host needs a Git checkout or the package @schlenkr/ragents`);
83
83
  if (stats.isDirectory()) return entry;
84
84
  const pointer = /^gitdir:\s*(.+)\s*$/.exec(readFileSync(entry, "utf8"));
85
- if (!pointer) throw new Error(`Die Host-Version ist unbekannt: ${entry} nennt kein gitdir`);
85
+ if (!pointer) throw new Error(`The host version is unknown: ${entry} names no gitdir`);
86
86
  return path.resolve(root, pointer[1]!.trim());
87
87
  };
88
88
 
@@ -96,7 +96,7 @@ const refFrom = (gitDirectory: string, ref: string): string | undefined => {
96
96
  return line?.split(" ")[0];
97
97
  };
98
98
 
99
- /** Der Commit des laufenden Hosts: aus dem Paket @schlenkr/ragents, sonst aus dem Git-Checkout mit Worktrees und gepackten Refs. */
99
+ /** The commit of the running host: from the package @schlenkr/ragents, otherwise from the Git checkout with worktrees and packed refs. */
100
100
  export const readHostVersion = (root: string = hostRoot()): string => {
101
101
  const packaged = readHostPackage(root);
102
102
  if (packaged) return packaged.hostVersion;
@@ -105,11 +105,11 @@ export const readHostVersion = (root: string = hostRoot()): string => {
105
105
  const ref = /^ref:\s*(.+)$/.exec(head)?.[1]?.trim();
106
106
  if (!ref) {
107
107
  if (/^[0-9a-f]{40}$/.test(head)) return head;
108
- throw new Error(`Die Host-Version ist unbekannt: HEAD in ${gitDirectory} ist weder Ref noch Commit`);
108
+ throw new Error(`The host version is unknown: HEAD in ${gitDirectory} is neither a ref nor a commit`);
109
109
  }
110
110
  const commonDirectory = statSync(path.join(gitDirectory, "commondir"), { throwIfNoEntry: false })?.isFile()
111
111
  ? path.resolve(gitDirectory, readFileSync(path.join(gitDirectory, "commondir"), "utf8").trim()) : undefined;
112
112
  const commit = refFrom(gitDirectory, ref) ?? (commonDirectory ? refFrom(commonDirectory, ref) : undefined);
113
- if (!commit || !/^[0-9a-f]{40}$/.test(commit)) throw new Error(`Die Host-Version ist unbekannt: ${ref} in ${gitDirectory} zeigt auf keinen Commit`);
113
+ if (!commit || !/^[0-9a-f]{40}$/.test(commit)) throw new Error(`The host version is unknown: ${ref} in ${gitDirectory} points to no commit`);
114
114
  return commit;
115
115
  };
@@ -40,7 +40,7 @@ const readRecord = (file: string): HostWebRecord | undefined => {
40
40
  const inputs = raw.inputs;
41
41
  if (typeof inputs !== "object" || inputs === null || Array.isArray(inputs)
42
42
  || Object.values(inputs).some((hash) => typeof hash !== "string")) {
43
- throw new Error(`${file} hat nicht die erwartete Form`);
43
+ throw new Error(`${file} does not have the expected shape`);
44
44
  }
45
45
  return { inputs: inputs as Record<string, string> };
46
46
  };
@@ -48,12 +48,12 @@ const readRecord = (file: string): HostWebRecord | undefined => {
48
48
  /** Why a built web cannot be served as it is; with sources, a checkout also compares it with the files it was built from. */
49
49
  export const hostWebProblem = (directory: string, root: string, sources: boolean): string | undefined => {
50
50
  const missing = HOST_WEB_PAGES.filter((page) => !isFile(path.join(directory, page)));
51
- if (missing.length > 0) return `Das Web des Hosts fehlt unter ${directory} (${missing.join(", ")})`;
51
+ if (missing.length > 0) return `The host's web is missing under ${directory} (${missing.join(", ")})`;
52
52
  if (!sources) return undefined;
53
53
  const record = readRecord(path.join(directory, HOST_WEB_RECORD));
54
- if (!record) return `Das Web des Hosts unter ${directory} hat keinen Quellstand (${HOST_WEB_RECORD})`;
54
+ if (!record) return `The host's web under ${directory} has no source record (${HOST_WEB_RECORD})`;
55
55
  const changed = changedInputs(record, root);
56
56
  if (changed.length === 0) return undefined;
57
- const shown = changed.slice(0, 5).join(", ") + (changed.length > 5 ? ` und ${changed.length - 5} weitere` : "");
58
- return `Das Web des Hosts unter ${directory} passt nicht mehr zu seinen Quellen (geändert: ${shown})`;
57
+ const shown = changed.slice(0, 5).join(", ") + (changed.length > 5 ? ` and ${changed.length - 5} more` : "");
58
+ return `The host's web under ${directory} no longer matches its sources (changed: ${shown})`;
59
59
  };