@schlenkr/ragents 0.1.10 → 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 (743) hide show
  1. package/apps/server/package.json +1 -1
  2. package/apps/server/src/access-projection.ts +4 -4
  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 +29 -29
  6. package/apps/server/src/api/core-methods.ts +17 -17
  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 +6 -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 +39 -39
  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 +61 -56
  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 +23 -23
  83. package/apps/server/src/ragents/global-chat.ts +8 -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 +48 -48
  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-BO4wLQtE.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 +53 -54
  110. package/apps/web/dist/help/guide-clients.md +50 -51
  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 +196 -144
  124. package/apps/web/dist/help/mini-app.css +6 -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 +23 -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 +26 -26
  182. package/apps/web/src/panel/connection-state.ts +9 -9
  183. package/apps/web/src/panel/contract.ts +28 -28
  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 +225 -225
  227. package/bundles/ragents.actor-programs/server/index.js.map +2 -2
  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 -2
  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-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
  240. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
  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 +2 -2
  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 +2 -2
  305. package/bundles/ragents.overseer/ragents-bundle.json +2 -2
  306. package/bundles/ragents.overseer/server/index.js +98 -98
  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 +81 -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/index.d.ts +1 -1
  417. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  418. package/packages/agent/src/core/compaction/utils.ts +1 -1
  419. package/packages/agent/src/core/model-runtime.ts +45 -5
  420. package/packages/agent/src/index.ts +1 -1
  421. package/packages/agent/src/loop/agent-loop.ts +2 -2
  422. package/packages/ai/dist/models.d.ts +1 -0
  423. package/packages/ai/dist/models.generated.d.ts +4544 -983
  424. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  425. package/packages/ai/src/api/ai-sdk.ts +33 -7
  426. package/packages/ai/src/api-registry.ts +1 -1
  427. package/packages/ai/src/index.ts +2 -2
  428. package/packages/ai/src/models.generated.ts +1 -1
  429. package/packages/ai/src/models.ts +1 -1
  430. package/packages/ai/src/providers/openrouter.models.ts +3723 -550
  431. package/packages/ragents/src/access.ts +12 -12
  432. package/packages/ragents/src/agents/actor-input.ts +33 -33
  433. package/packages/ragents/src/agents/catalog.ts +1 -1
  434. package/packages/ragents/src/agents/delivery.ts +17 -17
  435. package/packages/ragents/src/agents/plugins.ts +1 -1
  436. package/packages/ragents/src/agents/scheduler.ts +7 -7
  437. package/packages/ragents/src/agents/schemas.ts +1 -1
  438. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  439. package/packages/ragents/src/agents/tools.ts +20 -20
  440. package/packages/ragents/src/agents/toolset.ts +5 -5
  441. package/packages/ragents/src/agents/workspaces.ts +1 -1
  442. package/packages/ragents/src/domain/events.ts +1 -1
  443. package/packages/ragents/src/domain/model.ts +5 -5
  444. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  445. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  446. package/packages/ragents/src/drivers/agent.ts +2 -2
  447. package/packages/ragents/src/drivers/attachments.ts +4 -4
  448. package/packages/ragents/src/http/contracts.ts +14 -14
  449. package/packages/ragents/src/http/methods.ts +6 -6
  450. package/packages/ragents/src/plugin-host.ts +119 -119
  451. package/packages/ragents/src/plugin-types.ts +16 -16
  452. package/packages/ragents/src/rpc/contract.ts +5 -5
  453. package/packages/ragents/src/rpc/contribution.ts +2 -2
  454. package/packages/ragents/src/rpc/peer.ts +11 -11
  455. package/packages/ragents/src/rpc/protocol.ts +2 -2
  456. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  457. package/packages/ragents/src/runtime/journal.ts +10 -10
  458. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  459. package/packages/ragents/src/runtime/stop.ts +2 -2
  460. package/packages/ragents/src/script/mediators.ts +35 -35
  461. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  462. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  463. package/packages/ragents/src/typescript/compiler.ts +7 -7
  464. package/packages/ragents/src/typescript/snippet.ts +5 -5
  465. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  466. package/packages/workspace-executor/src/commands.ts +18 -18
  467. package/packages/workspace-executor/src/context.ts +15 -15
  468. package/packages/workspace-executor/src/contributions.ts +35 -35
  469. package/packages/workspace-executor/src/errors.ts +1 -1
  470. package/packages/workspace-executor/src/executor.ts +15 -15
  471. package/packages/workspace-executor/src/files.ts +30 -30
  472. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  473. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  474. package/packages/workspace-executor/src/language-server/host.ts +35 -35
  475. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  476. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  477. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  478. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  479. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
  480. package/packages/workspace-executor/src/managed-process.ts +12 -12
  481. package/packages/workspace-executor/src/module.ts +8 -8
  482. package/packages/workspace-executor/src/modules.ts +3 -3
  483. package/packages/workspace-executor/src/paths.ts +11 -11
  484. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  485. package/packages/workspace-executor/src/processes/module.ts +3 -3
  486. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  487. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  488. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  489. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  490. package/packages/workspace-executor/src/run-folders.ts +3 -3
  491. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  492. package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
  493. package/packages/workspace-executor/src/session-ident.ts +2 -2
  494. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  495. package/packages/workspace-executor/src/tools.ts +5 -5
  496. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  497. package/plugins/ragents.activity/web/activity.ts +2 -2
  498. package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
  499. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  500. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  501. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  502. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  503. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  504. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  505. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  506. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  507. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  508. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  509. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  510. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  511. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  512. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  513. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  514. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  515. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  516. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  517. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  518. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  519. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  520. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  521. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  522. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  523. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  524. package/plugins/ragents.ask/ask-payload.ts +1 -1
  525. package/plugins/ragents.ask/contract.ts +5 -5
  526. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  527. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  528. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  529. package/plugins/ragents.ask/server/contract.ts +5 -5
  530. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  531. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  532. package/plugins/ragents.ask/web/index.tsx +2 -2
  533. package/plugins/ragents.browser/executor/contract.ts +6 -6
  534. package/plugins/ragents.browser/executor/index.ts +1 -1
  535. package/plugins/ragents.browser/executor/module.ts +6 -6
  536. package/plugins/ragents.browser/executor/pages.ts +32 -32
  537. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  538. package/plugins/ragents.browser/provision.ts +7 -7
  539. package/plugins/ragents.browser/server/browser.ts +14 -14
  540. package/plugins/ragents.browser/server/contract.ts +1 -1
  541. package/plugins/ragents.browser/server/index.ts +1 -1
  542. package/plugins/ragents.browser/server/tools.ts +14 -14
  543. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  544. package/plugins/ragents.documents/contract.ts +2 -2
  545. package/plugins/ragents.documents/prompt.hbs +1 -1
  546. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  547. package/plugins/ragents.documents/server/files-route.ts +6 -6
  548. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  549. package/plugins/ragents.documents/server/store.ts +1 -1
  550. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  551. package/plugins/ragents.documents/web/index.tsx +11 -11
  552. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  553. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  554. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  555. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  556. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  557. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  558. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  559. package/plugins/ragents.model-relay/server/config.ts +6 -2
  560. package/plugins/ragents.model-relay/server/index.ts +2 -2
  561. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  562. package/plugins/ragents.orchestration/contract.ts +8 -8
  563. package/plugins/ragents.orchestration/server/index.ts +4 -4
  564. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  565. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  566. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  567. package/plugins/ragents.orchestration/web/ActorChat.tsx +2 -2
  568. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
  569. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  570. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  571. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  572. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  573. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  574. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  575. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  576. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  577. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  578. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  579. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  580. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  581. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  582. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  583. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  584. package/plugins/ragents.orchestration/web/format.ts +1 -1
  585. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  586. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  587. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  588. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
  589. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  590. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  591. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  592. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  593. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  594. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  595. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
  596. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  597. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  598. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  599. package/plugins/ragents.overseer/contract.ts +20 -20
  600. package/plugins/ragents.overseer/server/api.ts +6 -6
  601. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  602. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  603. package/plugins/ragents.overseer/server/index.ts +24 -24
  604. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  605. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  606. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  607. package/plugins/ragents.overseer/server/settings.ts +6 -6
  608. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  609. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  610. package/plugins/ragents.overseer/web/index.tsx +20 -20
  611. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  612. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  613. package/plugins/ragents.processes/contract.ts +5 -5
  614. package/plugins/ragents.processes/server/methods.ts +4 -4
  615. package/plugins/ragents.processes/server/observer.ts +8 -8
  616. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  617. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  618. package/plugins/ragents.processes/web/processes.ts +10 -10
  619. package/plugins/ragents.product/server/config.ts +1 -1
  620. package/plugins/ragents.product/server/index.ts +4 -4
  621. package/plugins/ragents.product/server/runtime.ts +9 -10
  622. package/plugins/ragents.product/web/index.tsx +1 -1
  623. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  624. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  625. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  626. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  627. package/plugins/ragents.reference/examples.ts +27 -27
  628. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  629. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  630. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  631. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  632. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  636. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  637. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  638. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  639. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  640. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  641. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  642. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  643. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  644. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  645. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  648. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  649. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  650. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  651. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  652. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  653. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  654. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  655. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  656. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  657. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  661. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  662. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  663. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  664. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  665. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  666. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  667. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  668. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  669. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  670. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  671. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  672. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  693. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  694. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  695. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  696. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  697. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  698. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  699. package/plugins/ragents.watch/server/condition.ts +4 -4
  700. package/plugins/ragents.watch/server/functions.ts +27 -27
  701. package/plugins/ragents.watch/server/observation.ts +2 -2
  702. package/plugins/ragents.watch/server/service.ts +14 -14
  703. package/plugins/ragents.workspace/client/transport.ts +1 -1
  704. package/plugins/ragents.workspace/client/workspace-client.ts +54 -54
  705. package/plugins/ragents.workspace/contract.ts +46 -46
  706. package/plugins/ragents.workspace/server/binding.ts +20 -20
  707. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  708. package/plugins/ragents.workspace/server/clients.ts +42 -42
  709. package/plugins/ragents.workspace/server/config.ts +7 -7
  710. package/plugins/ragents.workspace/server/index.ts +3 -3
  711. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  712. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  713. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  714. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  715. package/plugins/ragents.workspace/web/index.tsx +1 -1
  716. package/ragents.config.core.ts +1 -1
  717. package/ragents.config.developer.ts +3 -3
  718. package/ragents.config.showcase.ts +2 -2
  719. package/scripts/agent/agent-cli.ts +96 -96
  720. package/scripts/agent/journal.ts +5 -5
  721. package/scripts/agent/turn-control.ts +4 -4
  722. package/scripts/package/build-package.ts +29 -29
  723. package/scripts/package/host-links.mjs +3 -3
  724. package/scripts/package/publish-package.ts +29 -29
  725. package/scripts/package/ragents.mjs +19 -19
  726. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  727. package/scripts/plugin/plugin-cli.ts +14 -14
  728. package/scripts/provision/run-provision.ts +14 -15
  729. package/scripts/remote/connect.ts +46 -46
  730. package/scripts/remote/start.ts +18 -18
  731. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  732. package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
  733. package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
  734. package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
  735. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  736. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  737. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  738. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  739. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  740. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  741. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  742. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  743. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -6,16 +6,16 @@ import type { DeclaredEnvironment } from "./plugin-config.js";
6
6
 
7
7
  export type ModelCatalogSource = () => readonly Model<Api>[];
8
8
 
9
- /** Der eingebaute Katalog eines Anbieters; ein Plugin kann einen eigenen Katalog liefern, etwa den eines Relays. */
9
+ /** The built-in catalog of a provider; a plugin can supply its own catalog, such as that of a relay. */
10
10
  export const builtinCatalog = (provider: string): ModelCatalogSource => () => getBuiltinModels(provider as BuiltinProvider);
11
11
 
12
- /** Der Katalog, den die Modelllaufzeit für einen Anbieter kennt: die Aliasse des Profils oder den eingebauten. */
12
+ /** The catalog the model runtime knows for a provider: the profile's aliases or the built-in one. */
13
13
  const providerCatalog = (provider: string): ModelCatalogSource =>
14
14
  provider === ALIAS_PROVIDER ? () => aliasCatalog() : builtinCatalog(provider);
15
15
 
16
16
  export const modelThinkingOptions = (provider: string, model: string, catalog: ModelCatalogSource = providerCatalog(provider)): readonly ThinkingLevel[] => {
17
17
  const metadata = catalog().find((entry) => entry.id === model);
18
- if (!metadata) throw new Error(`Das Modell ${provider}/${model} fehlt im Modellkatalog`);
18
+ if (!metadata) throw new Error(`The model ${provider}/${model} is missing from the model catalog`);
19
19
  return getSupportedThinkingLevels(metadata);
20
20
  };
21
21
 
@@ -25,7 +25,7 @@ export interface ModelChoice {
25
25
  readonly provider: string;
26
26
  readonly selectable: boolean;
27
27
  thinkingOptionsFor(model: string | null): readonly ThinkingLevel[];
28
- /** Die Denktiefe, die ein Modell mitbringt, wenn es gewählt wird; ohne Angabe gilt die des Koordinators. */
28
+ /** The thinking level a model brings along when it is chosen; without one the coordinator's applies. */
29
29
  defaultThinkingFor?(model: string): ThinkingLevel | undefined;
30
30
  }
31
31
 
@@ -50,7 +50,7 @@ export const modelChoiceFromEnvironment = (
50
50
  const catalog = defaults.catalog ?? providerCatalog(defaults.provider);
51
51
  const raw = env.optional("MODEL_SELECTABLE");
52
52
  if (raw !== undefined && raw !== "" && raw !== "0" && raw !== "1") {
53
- throw new Error(`MODEL_SELECTABLE muss "0" oder "1" sein, nicht "${raw}"`);
53
+ throw new Error(`MODEL_SELECTABLE must be "0" or "1", not "${raw}"`);
54
54
  }
55
55
  const released = raw === undefined || raw === "" ? defaults.selectable : raw === "1";
56
56
  let resolvedOptions: readonly string[] | undefined;
@@ -58,8 +58,8 @@ export const modelChoiceFromEnvironment = (
58
58
  if (resolvedOptions) return resolvedOptions;
59
59
  const configured = env.list("AGENT_MODELS");
60
60
  const duplicate = configured.find((model, index) => configured.indexOf(model) !== index);
61
- if (duplicate) throw new Error(`AGENT_MODELS nennt ${duplicate} mehrfach`);
62
- // Ohne AGENT_MODELS gelten alle Aliasse oder die Modelle des Profils, und Agent und Koordinator dürfen dasselbe haben.
61
+ if (duplicate) throw new Error(`AGENT_MODELS names ${duplicate} more than once`);
62
+ // Without AGENT_MODELS all aliases or the profile's models apply, and agent and coordinator may share the same one.
63
63
  const fallback = defaults.provider === ALIAS_PROVIDER ? catalog().map((model) => model.id) : defaults.fallback();
64
64
  const list = configured.length > 0 ? configured : [...new Set(fallback)];
65
65
  resolvedOptions = Object.freeze([...list]);
@@ -70,7 +70,7 @@ export const modelChoiceFromEnvironment = (
70
70
  if (resolvedDefault) return resolvedDefault;
71
71
  const configured = defaults.defaultModel();
72
72
  if (!options().includes(configured))
73
- throw new Error(`Das Koordinator-Modell ${configured} steht nicht in AGENT_MODELS`);
73
+ throw new Error(`The coordinator model ${configured} is not in AGENT_MODELS`);
74
74
  resolvedDefault = configured;
75
75
  return resolvedDefault;
76
76
  };
@@ -80,18 +80,18 @@ export const modelChoiceFromEnvironment = (
80
80
  const map = new Map<string, readonly ThinkingLevel[]>();
81
81
  for (const entry of env.list("AGENT_MODEL_REASONING")) {
82
82
  const separator = entry.indexOf(":");
83
- if (separator < 0) throw new Error(`AGENT_MODEL_REASONING: "${entry}" hat kein "<modell>: <stufen>"-Format`);
83
+ if (separator < 0) throw new Error(`AGENT_MODEL_REASONING: "${entry}" does not have the "<model>: <levels>" format`);
84
84
  const model = entry.slice(0, separator).trim();
85
85
  const levels = entry.slice(separator + 1).trim().split(/[\s,]+/).filter(Boolean);
86
- if (!options().includes(model)) throw new Error(`AGENT_MODEL_REASONING nennt ${model}, das nicht in AGENT_MODELS steht`);
87
- if (map.has(model)) throw new Error(`AGENT_MODEL_REASONING nennt ${model} mehrfach`);
88
- if (levels.length === 0) throw new Error(`AGENT_MODEL_REASONING: ${model} nennt keine Stufe`);
86
+ if (!options().includes(model)) throw new Error(`AGENT_MODEL_REASONING names ${model}, which is not in AGENT_MODELS`);
87
+ if (map.has(model)) throw new Error(`AGENT_MODEL_REASONING names ${model} more than once`);
88
+ if (levels.length === 0) throw new Error(`AGENT_MODEL_REASONING: ${model} names no level`);
89
89
  const invalid = levels.find((level) => !isThinkingLevel(level));
90
- if (invalid) throw new Error(`AGENT_MODEL_REASONING: ${invalid} ist keine Stufe (gültig: ${thinkingLevels.join(", ")})`);
90
+ if (invalid) throw new Error(`AGENT_MODEL_REASONING: ${invalid} is not a level (valid: ${thinkingLevels.join(", ")})`);
91
91
  const supported = modelThinkingOptions(defaults.provider, model, catalog);
92
92
  const unsupported = levels.find((level) => !supported.includes(level as ThinkingLevel));
93
- if (unsupported) throw new Error(`AGENT_MODEL_REASONING: ${unsupported} ist für ${defaults.provider}/${model} nicht verfügbar (gültig: ${supported.join(", ")})`);
94
- if (new Set(levels).size !== levels.length) throw new Error(`AGENT_MODEL_REASONING: ${model} nennt eine Stufe mehrfach`);
93
+ if (unsupported) throw new Error(`AGENT_MODEL_REASONING: ${unsupported} is not available for ${defaults.provider}/${model} (valid: ${supported.join(", ")})`);
94
+ if (new Set(levels).size !== levels.length) throw new Error(`AGENT_MODEL_REASONING: ${model} names a level more than once`);
95
95
  map.set(model, Object.freeze(levels as ThinkingLevel[]));
96
96
  }
97
97
  reasoning = map;
@@ -1,6 +1,8 @@
1
- import { createModels, getSupportedThinkingLevels, type Api, type Model } from "@ragents/ai";
1
+ import type { ModelRuntime } from "@ragents/agent";
2
+ import { createModels, getSupportedThinkingLevels, type Api, type AssistantMessage, type Context, type Model, type SimpleStreamOptions } from "@ragents/ai";
2
3
  import { openrouterProvider } from "@ragents/ai/providers/openrouter";
3
- import type { ThinkingLevel } from "@ragents/engine";
4
+ import { serviceToken, type ServiceToken, type ThinkingLevel } from "@ragents/engine";
5
+ import { ALIAS_PROVIDER, aliasCatalog, configuredModelAliases } from "./model-aliases.js";
4
6
 
5
7
  /** One question to a model, without history and without tools. */
6
8
  export interface TextCompletionRequest {
@@ -25,6 +27,30 @@ export interface CompletionModel {
25
27
  readonly complete: (request: TextCompletionRequest) => Promise<TextCompletion>;
26
28
  }
27
29
 
30
+ type Completer = (model: Model<Api>, context: Context, options: SimpleStreamOptions) => Promise<AssistantMessage>;
31
+
32
+ const completionModel = (id: string, model: Model<Api>, levels: Model<Api>, completeSimple: Completer): CompletionModel => ({
33
+ id,
34
+ thinkingLevels: getSupportedThinkingLevels(levels),
35
+ complete: async (request) => {
36
+ const response = await completeSimple(model, {
37
+ systemPrompt: request.systemPrompt,
38
+ messages: [{ role: "user", content: request.text, timestamp: Date.now() }],
39
+ }, {
40
+ // An omitted effort is the off setting of the model; OpenRouter gets it explicitly.
41
+ reasoning: request.thinking === "off" ? undefined : request.thinking,
42
+ temperature: request.temperature,
43
+ maxTokens: request.maxTokens,
44
+ maxRetries: 0,
45
+ timeoutMs: request.timeoutMs,
46
+ signal: request.signal,
47
+ });
48
+ if (response.stopReason !== "stop") return { kind: "unfinished" };
49
+ if (response.content.some((part) => part.type !== "text" && part.type !== "thinking")) return { kind: "not-text" };
50
+ return { kind: "text", text: response.content.flatMap((part) => part.type === "text" ? [part.text] : []).join("") };
51
+ },
52
+ });
53
+
28
54
  /** An OpenRouter model of the built-in catalog that answers over the fastest provider and never retries; the key comes from OPENROUTER_API_KEY. */
29
55
  export const openRouterCompletionModel = (id: string): CompletionModel | undefined => {
30
56
  const models = createModels();
@@ -34,25 +60,20 @@ export const openRouterCompletionModel = (id: string): CompletionModel | undefin
34
60
  const model: Model<Api> = { ...selected, compat: { ...selected.compat,
35
61
  openRouterRouting: { ...selected.compat?.openRouterRouting, sort: "latency" },
36
62
  } };
37
- return {
38
- id,
39
- thinkingLevels: getSupportedThinkingLevels(selected),
40
- complete: async (request) => {
41
- const response = await models.completeSimple(model, {
42
- systemPrompt: request.systemPrompt,
43
- messages: [{ role: "user", content: request.text, timestamp: Date.now() }],
44
- }, {
45
- // An omitted effort is the off setting of the model; OpenRouter gets it explicitly.
46
- reasoning: request.thinking === "off" ? undefined : request.thinking,
47
- temperature: request.temperature,
48
- maxTokens: request.maxTokens,
49
- maxRetries: 0,
50
- timeoutMs: request.timeoutMs,
51
- signal: request.signal,
52
- });
53
- if (response.stopReason !== "stop") return { kind: "unfinished" };
54
- if (response.content.some((part) => part.type !== "text" && part.type !== "thinking")) return { kind: "not-text" };
55
- return { kind: "text", text: response.content.flatMap((part) => part.type === "text" ? [part.text] : []).join("") };
56
- },
57
- };
63
+ return completionModel(id, model, selected, (target, context, options) => models.completeSimple(target, context, options));
58
64
  };
65
+
66
+ /** A profile alias (MODEL_ALIASES) over the server's model runtime, with the levels the alias offers; none for an unknown alias. */
67
+ export const aliasCompletionModel = (runtime: () => Promise<ModelRuntime>, alias: string): CompletionModel | undefined => {
68
+ if (!configuredModelAliases().some((entry) => entry.alias === alias)) return undefined;
69
+ const offered = aliasCatalog().find((model) => model.id === alias)!;
70
+ return completionModel(alias, offered, offered, async (_model, context, options) => {
71
+ const models = await runtime();
72
+ const model = models.getModel(ALIAS_PROVIDER, alias);
73
+ if (!model) throw new Error(`The model runtime offers no alias ${alias}`);
74
+ return models.completeSimple(model, context, options);
75
+ });
76
+ };
77
+
78
+ /** Resolves a profile alias to a completion model over the server's model runtime; plugins take it with host.service(...) and call it at any time. */
79
+ export const aliasCompletionModelToken: ServiceToken<(alias: string) => CompletionModel | undefined> = serviceToken("host.alias-completion-model");
@@ -0,0 +1,170 @@
1
+ import { EXTENDED_THINKING_LEVELS, type Api, type InputModality, type Model } from "@ragents/ai";
2
+ import { builtinProviders } from "@ragents/ai/providers/all";
3
+ import type { ModelProviderRegistration } from "@ragents/engine";
4
+ import { isEnvironmentReference } from "../config-definition.js";
5
+ import { MissingEnvironmentError } from "../missing-environment.js";
6
+ import type { ModelUpstream } from "./model-upstreams.js";
7
+ import { declaredEnvironment } from "./plugin-config.js";
8
+ import { RELAY_PROVIDER } from "./product-relay.js";
9
+
10
+ export const modelProviderEnvDescriptors = [
11
+ { key: "MODEL_PROVIDERS", source: "environment" },
12
+ ] as const;
13
+
14
+ const PROVIDER_ID = /^[a-z0-9][a-z0-9._-]{0,63}$/;
15
+ const ENVIRONMENT_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
16
+ const PROVIDER_KEYS: readonly string[] = ["id", "baseUrl", "apiKey", "compat", "models"];
17
+ const COMPAT_KEYS: readonly string[] = ["thinkingFormat", "requiresReasoningContentOnAssistantMessages"];
18
+ const THINKING_FORMATS: readonly string[] = ["qwen-chat-template"];
19
+ const MODEL_KEYS: readonly string[] = ["id", "contextWindow", "maxTokens", "reasoning", "input", "thinkingLevelMap"];
20
+ const INPUTS: readonly InputModality[] = ["text", "image", "video", "file", "audio"];
21
+
22
+ type Entry = Record<string, unknown>;
23
+
24
+ const objectAt = (value: unknown, location: string, expected: string): Entry => {
25
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`${location} must be an object with ${expected}`);
26
+ return value as Entry;
27
+ };
28
+
29
+ const onlyKeys = (entry: Entry, allowed: readonly string[], location: string): void => {
30
+ const unknown = Object.keys(entry).find((key) => !allowed.includes(key));
31
+ if (unknown) throw new Error(`${location}.${unknown} is not supported; allowed are ${allowed.join(", ")}`);
32
+ };
33
+
34
+ const positiveInteger = (value: unknown, location: string): number => {
35
+ if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) throw new Error(`${location} must be a positive integer`);
36
+ return value;
37
+ };
38
+
39
+ const baseUrlOf = (value: unknown, location: string): string => {
40
+ const text = typeof value === "string" ? value : "";
41
+ const url = URL.canParse(text) ? new URL(text) : undefined;
42
+ if (!url || (url.protocol !== "http:" && url.protocol !== "https:") || text.endsWith("/")) {
43
+ throw new Error(`${location}.baseUrl needs an http or https address without a trailing slash, such as http://localhost:8000/v1`);
44
+ }
45
+ return text;
46
+ };
47
+
48
+ const apiKeyOf = (value: unknown, location: string, environment: Readonly<Record<string, string | undefined>>): string => {
49
+ if (!isEnvironmentReference(value) || typeof value.name !== "string" || !ENVIRONMENT_NAME.test(value.name)) {
50
+ throw new Error(`${location}.apiKey must be env("NAME"); a key never appears in plain text in the configuration`);
51
+ }
52
+ const key = environment[value.name];
53
+ if (!key) {
54
+ throw new MissingEnvironmentError({ variable: value.name, section: "host", key: "MODEL_PROVIDERS" },
55
+ `${location}.apiKey refers with env("${value.name}") to an environment variable that is not set in this shell`);
56
+ }
57
+ return key;
58
+ };
59
+
60
+ const compatOf = (value: unknown, location: string): Model<Api>["compat"] => {
61
+ if (value === undefined) return undefined;
62
+ const entry = objectAt(value, `${location}.compat`, COMPAT_KEYS.join(" and/or "));
63
+ onlyKeys(entry, COMPAT_KEYS, `${location}.compat`);
64
+ if (entry.thinkingFormat !== undefined && !THINKING_FORMATS.includes(entry.thinkingFormat as string)) {
65
+ throw new Error(`${location}.compat.thinkingFormat "${String(entry.thinkingFormat)}" is not supported; supported are ${THINKING_FORMATS.join(", ")}`);
66
+ }
67
+ const reasoningContent = entry.requiresReasoningContentOnAssistantMessages;
68
+ if (reasoningContent !== undefined && typeof reasoningContent !== "boolean") {
69
+ throw new Error(`${location}.compat.requiresReasoningContentOnAssistantMessages must be true or false`);
70
+ }
71
+ return entry as Model<Api>["compat"];
72
+ };
73
+
74
+ const thinkingLevelMapOf = (value: unknown, reasoning: boolean, location: string): Model<Api>["thinkingLevelMap"] => {
75
+ if (value === undefined) return undefined;
76
+ if (!reasoning) throw new Error(`${location}.thinkingLevelMap needs reasoning: true`);
77
+ const entry = objectAt(value, `${location}.thinkingLevelMap`, "thinking levels as keys");
78
+ for (const [level, sent] of Object.entries(entry)) {
79
+ if (!EXTENDED_THINKING_LEVELS.includes(level as never)) throw new Error(`${location}.thinkingLevelMap.${level} is not a thinking level`);
80
+ if (sent !== null && (typeof sent !== "string" || !sent)) {
81
+ throw new Error(`${location}.thinkingLevelMap.${level} must be the value to send or null for a level the model does not offer`);
82
+ }
83
+ }
84
+ return entry as Model<Api>["thinkingLevelMap"];
85
+ };
86
+
87
+ const modelOf = (value: unknown, index: number, provider: { id: string; baseUrl: string; compat: Model<Api>["compat"] }, location: string): Model<Api> => {
88
+ const at = `${location}.models[${index}]`;
89
+ const entry = objectAt(value, at, "id, contextWindow, maxTokens, reasoning, input and optionally thinkingLevelMap");
90
+ onlyKeys(entry, MODEL_KEYS, at);
91
+ if (typeof entry.id !== "string" || !entry.id.trim()) throw new Error(`${at}.id must name the model as the server knows it`);
92
+ const contextWindow = positiveInteger(entry.contextWindow, `${at}.contextWindow`);
93
+ const maxTokens = positiveInteger(entry.maxTokens, `${at}.maxTokens`);
94
+ if (maxTokens > contextWindow) throw new Error(`${at}.maxTokens (${maxTokens}) exceeds the contextWindow (${contextWindow})`);
95
+ if (typeof entry.reasoning !== "boolean") throw new Error(`${at}.reasoning must be true or false`);
96
+ const input = entry.input;
97
+ if (!Array.isArray(input) || !input.includes("text") || input.some((kind) => !INPUTS.includes(kind as InputModality))) {
98
+ throw new Error(`${at}.input needs "text" and optionally ${INPUTS.filter((kind) => kind !== "text").join(", ")}`);
99
+ }
100
+ const thinkingLevelMap = thinkingLevelMapOf(entry.thinkingLevelMap, entry.reasoning, at);
101
+ return {
102
+ id: entry.id,
103
+ name: entry.id,
104
+ api: "openai-completions",
105
+ provider: provider.id,
106
+ baseUrl: provider.baseUrl,
107
+ reasoning: entry.reasoning,
108
+ input: [...new Set(input as InputModality[])],
109
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
110
+ contextWindow,
111
+ maxTokens,
112
+ ...(thinkingLevelMap ? { thinkingLevelMap } : {}),
113
+ ...(provider.compat ? { compat: provider.compat } : {}),
114
+ };
115
+ };
116
+
117
+ const providerOf = (value: unknown, index: number, reserved: ReadonlySet<string>, environment: Readonly<Record<string, string | undefined>>): ModelUpstream => {
118
+ const location = `MODEL_PROVIDERS[${index}]`;
119
+ const entry = objectAt(value, location, "id, baseUrl, apiKey, models and optionally compat");
120
+ onlyKeys(entry, PROVIDER_KEYS, location);
121
+ if (typeof entry.id !== "string" || !PROVIDER_ID.test(entry.id)) {
122
+ throw new Error(`${location}.id needs 1 to 64 lowercase letters, digits, dots, underscores or hyphens`);
123
+ }
124
+ if (reserved.has(entry.id)) throw new Error(`${location}.id ${entry.id} is already a provider of the host`);
125
+ const at = `${location} (${entry.id})`;
126
+ const baseUrl = baseUrlOf(entry.baseUrl, at);
127
+ const apiKey = apiKeyOf(entry.apiKey, at, environment);
128
+ const compat = compatOf(entry.compat, at);
129
+ if (!Array.isArray(entry.models) || entry.models.length === 0) throw new Error(`${at}.models needs at least one model`);
130
+ const models = entry.models.map((model, modelIndex) => modelOf(model, modelIndex, { id: entry.id as string, baseUrl, compat }, at));
131
+ const duplicate = models.find((model, modelIndex) => models.findIndex((other) => other.id === model.id) !== modelIndex);
132
+ if (duplicate) throw new Error(`${at}.models names the model ${duplicate.id} more than once`);
133
+ return { id: entry.id, baseUrl, apiKey, models };
134
+ };
135
+
136
+ /** MODEL_PROVIDERS: a list of OpenAI-compatible servers { id, baseUrl, apiKey: env("NAME"), compat?, models }, for instance self-hosted ones. */
137
+ export const parseModelProviders = (entries: unknown, environment: Readonly<Record<string, string | undefined>> = process.env): readonly ModelUpstream[] => {
138
+ if (!Array.isArray(entries)) throw new Error("MODEL_PROVIDERS must be a list of providers");
139
+ const reserved = new Set([...builtinProviders().map((provider) => provider.id), RELAY_PROVIDER]);
140
+ const providers = entries.map((entry, index) => providerOf(entry, index, reserved, environment));
141
+ const duplicate = providers.find((entry, index) => providers.findIndex((other) => other.id === entry.id) !== index);
142
+ if (duplicate) throw new Error(`MODEL_PROVIDERS names the provider ${duplicate.id} more than once`);
143
+ return providers;
144
+ };
145
+
146
+ const env = declaredEnvironment(modelProviderEnvDescriptors);
147
+
148
+ /** The profile's providers; the environment holds MODEL_PROVIDERS as JSON of the list from the profile file, each key as its env reference. */
149
+ export const configuredModelProviders = (): readonly ModelUpstream[] => {
150
+ const value = env.optional("MODEL_PROVIDERS");
151
+ if (value === undefined || value === "") return [];
152
+ let parsed: unknown;
153
+ try {
154
+ parsed = JSON.parse(value);
155
+ } catch {
156
+ throw new Error("MODEL_PROVIDERS is no JSON list of providers");
157
+ }
158
+ return parseModelProviders(parsed);
159
+ };
160
+
161
+ /** The registration in the model runtime: every model over the OpenAI-compatible transport with the provider's address and key. */
162
+ export const modelProviderRegistration = (provider: ModelUpstream): ModelProviderRegistration => ({
163
+ id: provider.id,
164
+ config: {
165
+ baseUrl: provider.baseUrl,
166
+ apiKey: provider.apiKey,
167
+ api: "openai-completions",
168
+ models: provider.models.map((model) => ({ ...model })),
169
+ },
170
+ });
@@ -1,7 +1,7 @@
1
1
  import type { Api, Model } from "@ragents/ai";
2
2
  import { serviceToken, type ServiceToken } from "@ragents/engine";
3
3
 
4
- /** Ein Modellanbieter, den dieser Server mit eigenem Schlüssel erreicht; das Relay reicht Aufrufe dorthin durch. */
4
+ /** A model provider this server reaches with its own key; the relay passes calls through to it. */
5
5
  export interface ModelUpstream {
6
6
  readonly id: string;
7
7
  readonly baseUrl: string;
@@ -5,7 +5,7 @@ import type { NativeTypeScriptRequest } from "../../../../packages/ragents/src/t
5
5
  import { assertJsonValue, type JsonValue } from "../../../../packages/ragents/src/domain/json.ts";
6
6
 
7
7
  const send = (message: unknown): void => {
8
- if (!process.send || !process.connected) throw new Error("Die Run-Verbindung ist geschlossen.");
8
+ if (!process.send || !process.connected) throw new Error("The run connection is closed.");
9
9
  process.send(message as Parameters<NonNullable<typeof process.send>>[0]);
10
10
  };
11
11
  const errors = (error: unknown): string => error instanceof Error ? error.message : String(error);
@@ -32,12 +32,12 @@ process.on("message", (raw: unknown) => {
32
32
  return;
33
33
  }
34
34
  if (message.kind === "cancel") {
35
- active?.abort(new Error("Der Run-Aufruf wurde abgebrochen."));
35
+ active?.abort(new Error("The run call was cancelled."));
36
36
  return;
37
37
  }
38
38
  if (message.kind !== "execute") return;
39
39
  if (!loaded || active) {
40
- send({ kind: "failed", error: "Der Backendprozess ist nicht bereit." });
40
+ send({ kind: "failed", error: "The backend process is not ready." });
41
41
  return;
42
42
  }
43
43
  const request = message.request!;
@@ -68,7 +68,7 @@ process.on("message", (raw: unknown) => {
68
68
  capabilities,
69
69
  }) : undefined;
70
70
  const handle = loaded![request.program.exportName ?? "handle"];
71
- if (typeof handle !== "function") throw new Error(`Backend-Export ${request.program.exportName ?? "handle"} ist keine Funktion.`);
71
+ if (typeof handle !== "function") throw new Error(`Backend export ${request.program.exportName ?? "handle"} is not a function.`);
72
72
  const result: unknown = await handle(request.input, { ...context, actor: request.context.actor, ...(std ? { std } : {}) });
73
73
  controller.signal.throwIfAborted();
74
74
  if (result !== undefined) assertJsonValue(result, "TypeScript result");
@@ -10,7 +10,7 @@ import { syncWorkspaceOwnership } from "./workspace-ownership.js";
10
10
 
11
11
  interface ExecutorOptions {
12
12
  directoryFor(runId: string): string;
13
- /** Die Node-Ausführung läuft immer auf dem Server, auch bei einem Arbeitsbereich auf einem Arbeitsplatz. */
13
+ /** Node execution always runs on the server, even for a workspace on a workstation. */
14
14
  serverProcessContextFor(runId: string): Promise<WorkspaceProcessContext>;
15
15
  }
16
16
  interface Backend {
@@ -51,7 +51,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
51
51
 
52
52
  async execute(request: NativeTypeScriptRequest, binding: NativeTypeScriptBinding): Promise<NativeTypeScriptResult> {
53
53
  binding.signal?.throwIfAborted();
54
- if (this.#closed || this.#stopping.has(request.context.runId)) throw new Error("Die Node-Ausführung wird beendet.");
54
+ if (this.#closed || this.#stopping.has(request.context.runId)) throw new Error("Node execution is shutting down.");
55
55
  const instanceId = request.instanceId ?? `invocation-${randomUUID()}`;
56
56
  const key = `${request.context.runId}\0${instanceId}`;
57
57
  const fingerprint = createHash("sha256").update(JSON.stringify({ entry: request.program.entry, files: request.program.files })).digest("hex");
@@ -65,7 +65,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
65
65
  }
66
66
  slot.controller.signal.throwIfAborted();
67
67
  const backend = await slot.pending;
68
- if (backend.fingerprint !== fingerprint) throw new Error("Die Backend-Revision muss vor dem Codewechsel beendet werden.");
68
+ if (backend.fingerprint !== fingerprint) throw new Error("The backend revision must be stopped before the code changes.");
69
69
  const operation = backend.queue.then(() => this.#invoke(backend, request, binding));
70
70
  backend.queue = operation.then(() => undefined, () => undefined);
71
71
  try { return await operation; }
@@ -82,13 +82,13 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
82
82
  await mkdir(directory, { recursive: true });
83
83
  for (const file of request.program.files) {
84
84
  const target = path.resolve(directory, file.fileName);
85
- if (!target.startsWith(`${directory}${path.sep}`)) throw new Error("Backend-Datei liegt außerhalb des Builds.");
85
+ if (!target.startsWith(`${directory}${path.sep}`)) throw new Error("Backend file lies outside the build.");
86
86
  await mkdir(path.dirname(target), { recursive: true });
87
87
  await writeFile(target, file.text);
88
88
  }
89
89
  const entry = path.resolve(directory, request.program.entry);
90
90
  if (!entry.startsWith(`${directory}${path.sep}`) || !request.program.files.some((file) => path.resolve(directory, file.fileName) === entry))
91
- throw new Error("Der gebaute Backend-Einstieg fehlt.");
91
+ throw new Error("The built backend entry is missing.");
92
92
  await writeFile(path.join(directory, "package.json"), JSON.stringify({ type: "module" }));
93
93
  await writeFile(path.join(directory, "__runner.mjs"), await runner());
94
94
  const toolkit = fileURLToPath(new URL("../../../../node_modules", import.meta.url));
@@ -143,7 +143,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
143
143
  },
144
144
  onError: fail,
145
145
  onExit: (code) => {
146
- const error = new Error(`Backendprozess beendet (Code ${code}).${stderr.trim() ? `\n${stderr.trim()}` : ""}`);
146
+ const error = new Error(`Backend process exited (code ${code}).${stderr.trim() ? `\n${stderr.trim()}` : ""}`);
147
147
  controller.abort(error);
148
148
  backend.reject(error);
149
149
  void backend.service.finished.then(() => backend.queue).finally(() => {
@@ -153,15 +153,15 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
153
153
  }).catch(() => undefined);
154
154
  },
155
155
  });
156
- const timeout = setTimeout(() => rejectReady(new Error("Das Backend wurde nicht innerhalb von 15 Sekunden bereit.")), 15_000);
157
- const abort = () => rejectReady(errorOf(signal?.reason ?? "Der Backendstart wurde abgebrochen."));
156
+ const timeout = setTimeout(() => rejectReady(new Error("The backend did not become ready within 15 seconds.")), 15_000);
157
+ const abort = () => rejectReady(errorOf(signal?.reason ?? "The backend start was cancelled."));
158
158
  signal?.addEventListener("abort", abort, { once: true });
159
159
  try {
160
160
  signal?.throwIfAborted();
161
161
  await backend.service.send({ kind: "load", entry });
162
162
  await ready;
163
163
  signal.throwIfAborted();
164
- if (this.#closed || this.#stopping.has(backend.runId)) throw new Error("Der Run wurde beim Backendstart gestoppt.");
164
+ if (this.#closed || this.#stopping.has(backend.runId)) throw new Error("The run was stopped during the backend start.");
165
165
  return backend;
166
166
  } catch (error) {
167
167
  backend.service.kill("SIGKILL");
@@ -180,7 +180,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
180
180
  const abort = (): void => {
181
181
  void backend.service.send({ kind: "cancel" }).catch(() => undefined);
182
182
  force = setTimeout(() => backend.service.kill("SIGKILL"), 200);
183
- rejectInvocation(errorOf(signal.reason ?? "Der Aufruf wurde abgebrochen."));
183
+ rejectInvocation(errorOf(signal.reason ?? "The call was cancelled."));
184
184
  };
185
185
  const operation = new Promise<NativeTypeScriptResult>((resolve, reject) => {
186
186
  rejectInvocation = reject;
@@ -195,7 +195,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
195
195
  const operation = (async () => {
196
196
  try {
197
197
  signal.throwIfAborted();
198
- if (!capabilities.has(message.name!)) throw new Error(`Capability ${message.name} ist nicht freigegeben.`);
198
+ if (!capabilities.has(message.name!)) throw new Error(`Capability ${message.name} is not granted.`);
199
199
  const value = await binding.call(message.name!, message.input!);
200
200
  await backend.service.send({ kind: "reply", callId: message.callId, value });
201
201
  } catch (error) {
@@ -234,7 +234,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
234
234
  const slot = this.#backends.get(key);
235
235
  if (!slot) return Promise.resolve();
236
236
  if (slot.stopping) return slot.stopping;
237
- slot.controller.abort(new Error("Die Node-Instanz wird beendet."));
237
+ slot.controller.abort(new Error("The Node instance is shutting down."));
238
238
  slot.stopping = (async () => {
239
239
  const backend = await slot.pending.catch(() => undefined);
240
240
  if (!backend) return;
@@ -21,7 +21,7 @@ export const declaredEnvironment = <const T extends readonly PluginConfigDescrip
21
21
  descriptors.filter((descriptor) => descriptor.source === "environment").map((descriptor) => descriptor.key),
22
22
  );
23
23
  const read = (key: string): string | undefined => {
24
- if (!declared.has(key)) throw new Error(`Umgebungsvariable ${key} ist für dieses Plugin nicht deklariert`);
24
+ if (!declared.has(key)) throw new Error(`Environment variable ${key} is not declared for this plugin`);
25
25
  return process.env[key];
26
26
  };
27
27
  return {
@@ -30,7 +30,7 @@ export const declaredEnvironment = <const T extends readonly PluginConfigDescrip
30
30
  optional: (key) => read(key),
31
31
  required: (key) => {
32
32
  const value = read(key);
33
- if (!value) throw new Error(`Umgebungsvariable ${key} fehlt`);
33
+ if (!value) throw new Error(`Environment variable ${key} is missing`);
34
34
  return value;
35
35
  },
36
36
  list: (key) => {
@@ -41,7 +41,7 @@ export const declaredEnvironment = <const T extends readonly PluginConfigDescrip
41
41
  flag: (key) => read(key) === "1",
42
42
  positiveNumber: (key, fallback) => {
43
43
  const value = Number(read(key) ?? fallback);
44
- if (!Number.isFinite(value) || value <= 0) throw new Error(`${key} muss eine positive Zahl sein`);
44
+ if (!Number.isFinite(value) || value <= 0) throw new Error(`${key} must be a positive number`);
45
45
  return value;
46
46
  },
47
47
  };
@@ -20,7 +20,7 @@ const assetFolder = (folder: string, name: string): string | undefined => {
20
20
  const directory = path.join(folder, name);
21
21
  const stats = statSync(directory, { throwIfNoEntry: false });
22
22
  if (!stats) return undefined;
23
- if (!stats.isDirectory()) throw new Error(`${directory} muss ein Verzeichnis sein`);
23
+ if (!stats.isDirectory()) throw new Error(`${directory} must be a directory`);
24
24
  return directory;
25
25
  };
26
26
 
@@ -74,7 +74,7 @@ export const withFolderAssets = (plugin: RAgentsPlugin): RAgentsPlugin => ({
74
74
  if (skillPaths.length === 0) return;
75
75
  host.skills({
76
76
  id: `${plugin.manifest.id}.folder-skills`,
77
- // Ein ausdrücklich angemeldeter Pfad gehört in jedem Run dem ausdrücklichen Beitrag, auch wo der ihn für diesen Run weglässt.
77
+ // An explicitly registered path belongs to the explicit contribution in every run, even where it omits the path for this run.
78
78
  paths: async (context) => {
79
79
  const explicit = await Promise.all(explicitSkills.flatMap((skill) => [skill.paths(undefined), skill.paths(context)]));
80
80
  const taken = new Set(explicit.flat());
@@ -25,13 +25,13 @@ const folders = new Map<string, string>();
25
25
 
26
26
  export const registerPluginFolder = (id: string, folder: string): void => {
27
27
  const known = folders.get(id);
28
- if (known && known !== folder) throw new Error(`Das Plugin ${id} liegt bereits unter ${known}, nicht unter ${folder}`);
28
+ if (known && known !== folder) throw new Error(`The plugin ${id} already lives under ${known}, not under ${folder}`);
29
29
  folders.set(id, folder);
30
30
  };
31
31
 
32
32
  export const pluginFolder = (pluginId: string): string => {
33
33
  const folder = folders.get(pluginId) ?? path.join(pluginsRoot, pluginId);
34
34
  const stats = statSync(folder, { throwIfNoEntry: false });
35
- if (!stats?.isDirectory()) throw new Error(`Das Plugin ${pluginId} hat keinen Ordner ${folder}`);
35
+ if (!stats?.isDirectory()) throw new Error(`The plugin ${pluginId} has no folder ${folder}`);
36
36
  return folder;
37
37
  };