@schlenkr/ragents 0.1.5 → 0.1.7

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 (1049) hide show
  1. package/README.md +18 -11
  2. package/apps/server/package.json +8 -6
  3. package/apps/server/src/access-projection.ts +3 -3
  4. package/apps/server/src/access-service.ts +19 -8
  5. package/apps/server/src/access-session.ts +6 -2
  6. package/apps/server/src/api/contracts.ts +19 -18
  7. package/apps/server/src/api/core-methods.ts +45 -26
  8. package/apps/server/src/api/delivery.ts +4 -4
  9. package/apps/server/src/api/reference.ts +1 -1
  10. package/apps/server/src/api/rights.ts +86 -7
  11. package/apps/server/src/chat-context.ts +1 -1
  12. package/apps/server/src/chat-handler.ts +16 -7
  13. package/apps/server/src/config-file.ts +25 -6
  14. package/apps/server/src/config.ts +10 -4
  15. package/apps/server/src/data-directory.ts +1 -1
  16. package/apps/server/src/folder-install.ts +115 -0
  17. package/apps/server/src/host-api.json +1257 -0
  18. package/apps/server/src/host-api.ts +190 -0
  19. package/apps/server/src/host-resolution-hooks.mjs +50 -1
  20. package/apps/server/src/host-resolution.ts +26 -1
  21. package/apps/server/src/host-version.ts +41 -0
  22. package/apps/server/src/host-web.ts +59 -0
  23. package/apps/server/src/layout.ts +0 -15
  24. package/apps/server/src/main.ts +3 -2
  25. package/apps/server/src/missing-environment.ts +47 -0
  26. package/apps/server/src/parent-watch.ts +37 -0
  27. package/apps/server/src/plugin-build/build.ts +650 -0
  28. package/apps/server/src/plugin-build/host-api-names.ts +185 -0
  29. package/apps/server/src/plugin-build/plugin-description.ts +118 -0
  30. package/apps/server/src/plugin-build/typecheck.ts +66 -0
  31. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/app-project.ts +16 -15
  32. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/client-compiler.ts +4 -4
  33. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/client-contracts.ts +4 -4
  34. package/apps/server/src/plugin-support/actor-programs/client-runtime.ts +27 -0
  35. package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/contract.ts +3 -3
  36. package/apps/server/src/plugin-support/actor-programs/service.ts +1 -1
  37. package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/tailwind.ts +2 -3
  38. package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/workflow/index.ts +48 -48
  39. package/apps/server/src/plugin-support/agent-tool.ts +12 -8
  40. package/apps/server/src/plugin-support/http.ts +1 -1
  41. package/apps/server/src/plugin-support/language-server/contract.ts +37 -6
  42. package/apps/server/src/plugin-support/language-server/plugin.ts +18 -8
  43. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +32 -7
  44. package/apps/server/src/plugin-support/language-server/tools.ts +59 -15
  45. package/apps/server/src/plugin-support/model-aliases.ts +77 -0
  46. package/apps/server/src/plugin-support/model-choice.ts +17 -7
  47. package/apps/server/src/plugin-support/model-completion.ts +58 -0
  48. package/apps/server/src/plugin-support/model-upstreams.ts +2 -2
  49. package/apps/server/src/plugin-support/native-typescript-executor.ts +10 -7
  50. package/apps/server/src/plugin-support/plugin-config.ts +1 -1
  51. package/apps/server/src/plugin-support/plugin-folder.ts +4 -1
  52. package/apps/server/src/plugin-support/plugin-module.ts +1 -1
  53. package/apps/server/src/plugin-support/plugins-root.ts +6 -10
  54. package/apps/server/src/plugin-support/process-sandbox.ts +312 -0
  55. package/apps/server/src/plugin-support/product-model-settings-contract.ts +14 -5
  56. package/apps/server/src/plugin-support/product-model-settings.ts +10 -9
  57. package/{plugins/ragents.product/server/relay.ts → apps/server/src/plugin-support/product-relay.ts} +2 -2
  58. package/apps/server/src/plugin-support/product-start-options.ts +8 -3
  59. package/apps/server/src/plugin-support/prompt.ts +1 -1
  60. package/apps/server/src/plugin-support/provision.ts +6 -0
  61. package/apps/server/src/plugin-support/run-scripts.ts +16 -2
  62. package/apps/server/src/plugin-support/skills.ts +32 -16
  63. package/apps/server/src/plugin-support/start-entries-contract.ts +12 -3
  64. package/apps/server/src/plugin-support/start-options-contract.ts +5 -1
  65. package/apps/server/src/plugin-support/thinking-level.ts +6 -1
  66. package/apps/server/src/plugin-support/tool-availability.ts +1 -7
  67. package/apps/server/src/plugin-support/workspace-ownership.ts +12 -6
  68. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +184 -37
  69. package/apps/server/src/profile/bundle-manifest.ts +183 -0
  70. package/apps/server/src/profile/compose.ts +19 -10
  71. package/apps/server/src/profile/plugin-discovery.ts +98 -46
  72. package/apps/server/src/profile/provisioning.ts +30 -26
  73. package/apps/server/src/profile-target.ts +3 -0
  74. package/apps/server/src/provider.ts +212 -106
  75. package/apps/server/src/ragents/actor-chat-history.ts +24 -22
  76. package/apps/server/src/ragents/chat-projection.ts +25 -14
  77. package/apps/server/src/ragents/chat-text-positions.ts +4 -4
  78. package/apps/server/src/ragents/coordinator.ts +27 -1
  79. package/apps/server/src/ragents/document-store.ts +1 -1
  80. package/apps/server/src/ragents/engine.ts +68 -43
  81. package/apps/server/src/ragents/global-chat.ts +26 -13
  82. package/apps/server/src/ragents/host-services.ts +15 -6
  83. package/apps/server/src/ragents/journal-chat-events.ts +33 -15
  84. package/apps/server/src/ragents/product-runtime.ts +1 -1
  85. package/apps/server/src/ragents/run-owner.ts +18 -0
  86. package/apps/server/src/ragents/runtime-bridge.ts +1 -1
  87. package/apps/server/src/ragents/session.ts +184 -85
  88. package/apps/server/src/ragents/start-option-state.ts +1 -1
  89. package/apps/server/src/ragents/typescript-tools.ts +35 -27
  90. package/apps/server/src/ragents/workspace-runtime.ts +74 -8
  91. package/apps/server/src/rpc/dispatcher.ts +17 -8
  92. package/apps/server/src/rpc/http-transport.ts +1 -3
  93. package/apps/server/src/rpc/stdio-transport.ts +1 -1
  94. package/apps/server/src/run-preparation-contract.ts +1 -1
  95. package/apps/server/src/run-preparation-input.ts +1 -1
  96. package/apps/server/src/run-preparation.ts +18 -29
  97. package/apps/server/src/run-transfer.ts +66 -5
  98. package/apps/server/src/server.ts +112 -33
  99. package/apps/server/src/settings.ts +9 -12
  100. package/apps/server/src/title-compactor.ts +5 -8
  101. package/apps/server/src/title-settings.ts +3 -3
  102. package/apps/server/src/web-bundles.ts +79 -0
  103. package/apps/server/src/web-stylesheet.ts +85 -0
  104. package/apps/server/tsconfig.json +4 -4
  105. package/apps/server/tsconfig.plugin.json +58 -0
  106. package/apps/web/dist/assets/highlighted-body-KPVGNVTW-CFhTJEmH.js +1 -0
  107. package/apps/web/dist/assets/main-DlzW4t4c.js +6 -0
  108. package/apps/web/dist/assets/mermaid-HWGCJPDP-BPn4aV2r.css +1 -0
  109. package/apps/web/dist/assets/mermaid-HWGCJPDP-kxkB991i.js +478 -0
  110. package/apps/web/dist/assets/runPanel-BJEFQ__w.js +21 -0
  111. package/apps/web/dist/help/guide-access.html +199 -0
  112. package/apps/web/dist/help/guide-access.md +84 -0
  113. package/apps/web/dist/help/guide-clients.html +430 -0
  114. package/apps/web/dist/help/guide-clients.md +346 -0
  115. package/apps/web/dist/help/guide-distributed.html +325 -0
  116. package/apps/web/dist/help/guide-distributed.md +230 -0
  117. package/apps/web/dist/help/guide-functions.html +231 -0
  118. package/apps/web/dist/help/guide-functions.md +127 -0
  119. package/apps/web/dist/help/guide-getting-started.html +230 -0
  120. package/apps/web/dist/help/guide-getting-started.md +123 -0
  121. package/apps/web/dist/help/guide-ideas.html +183 -0
  122. package/apps/web/dist/help/guide-ideas.md +71 -0
  123. package/apps/web/dist/help/guide-plugins.html +450 -0
  124. package/apps/web/dist/help/guide-plugins.md +341 -0
  125. package/apps/web/dist/help/guide-programs.html +359 -0
  126. package/apps/web/dist/help/guide-programs.md +271 -0
  127. package/apps/web/dist/help/guide-runtime.html +344 -0
  128. package/apps/web/dist/help/guide-runtime.md +232 -0
  129. package/apps/web/dist/help/guide.html +133 -0
  130. package/apps/web/dist/help/guide.md +13 -0
  131. package/apps/web/dist/help/homepage-bullets.js +12 -0
  132. package/apps/web/dist/help/homepage-distributed.js +261 -0
  133. package/apps/web/dist/help/homepage-plugins.js +30 -0
  134. package/apps/web/dist/help/homepage-scenes.js +368 -0
  135. package/apps/web/dist/help/homepage-stickers.js +69 -0
  136. package/apps/web/dist/help/homepage-story-nav.js +11 -0
  137. package/apps/web/dist/help/homepage-subnav.js +61 -0
  138. package/apps/web/dist/help/homepage.css +833 -0
  139. package/apps/web/dist/help/index.html +1167 -0
  140. package/apps/web/dist/help/mini-app.css +7076 -0
  141. package/apps/web/dist/help/mini-app.html +15 -0
  142. package/apps/web/dist/help/mini-app.js +131 -0
  143. package/apps/web/dist/help/screenshots/release-checklist-vscode.png +0 -0
  144. package/apps/web/dist/help/screenshots/release-checklist-web.png +0 -0
  145. package/apps/web/dist/help/scroll-vendor.js +73 -0
  146. package/apps/web/dist/help/site.css +63 -0
  147. package/apps/web/dist/help/site.js +103 -0
  148. package/apps/web/dist/host-web.json +143 -0
  149. package/apps/web/dist/index.html +15 -0
  150. package/apps/web/dist/run-panel.html +15 -0
  151. package/apps/web/package.json +2 -2
  152. package/apps/web/src/App.tsx +8 -6
  153. package/apps/web/src/Overview.tsx +5 -5
  154. package/apps/web/src/PluginActivation.ts +25 -5
  155. package/apps/web/src/PluginChat.tsx +163 -129
  156. package/apps/web/src/PluginFailureNotice.tsx +15 -0
  157. package/apps/web/src/PluginRegistry.tsx +106 -68
  158. package/apps/web/src/RunPreparationChat.tsx +40 -28
  159. package/apps/web/src/RunStore.ts +2 -2
  160. package/apps/web/src/SessionList.tsx +16 -8
  161. package/apps/web/src/SettingsModal.tsx +37 -37
  162. package/apps/web/src/StartOptions.tsx +81 -26
  163. package/apps/web/src/StartSelection.tsx +111 -0
  164. package/apps/web/src/StartTiles.tsx +73 -0
  165. package/apps/web/src/{CanvasShortcuts.tsx → SurfaceShortcuts.tsx} +2 -2
  166. package/apps/web/src/ThemeSettings.tsx +1 -1
  167. package/apps/web/src/WorkspacePanel.tsx +4 -4
  168. package/apps/web/src/access-session.ts +4 -1
  169. package/{plugins/ragents.orchestration/web → apps/web/src}/actor-conversation.ts +3 -3
  170. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/DataTable.tsx +9 -9
  171. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FilePicker.tsx +4 -4
  172. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FlowDiagram.tsx +16 -14
  173. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FlowDiagramRenderer.tsx +3 -3
  174. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Form.tsx +12 -12
  175. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Layout.tsx +1 -1
  176. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/MessageList.tsx +5 -5
  177. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Viewers.tsx +8 -7
  178. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/WorkflowDiagram.tsx +1 -1
  179. package/apps/web/src/actor-programs/client-ui/chat-contracts.d.ts +64 -0
  180. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/contracts.d.ts +2 -2
  181. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/file-selection.ts +5 -5
  182. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/index.tsx +22 -16
  183. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/layout-contracts.d.ts +1 -1
  184. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/message-list-contracts.d.ts +2 -2
  185. package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/workflow-diagram-contracts.d.ts +1 -1
  186. package/apps/web/src/api.ts +45 -22
  187. package/apps/web/src/chat/QuasselHost.tsx +12 -0
  188. package/apps/web/src/chat/StoppedActorNotice.tsx +39 -0
  189. package/apps/web/src/chat/chat-target.ts +14 -5
  190. package/apps/web/src/chat/requests.ts +13 -5
  191. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  192. package/apps/web/src/chat/useChat.ts +8 -7
  193. package/apps/web/src/chat/user-location.ts +1 -1
  194. package/apps/web/src/chat-view-settings.tsx +49 -0
  195. package/apps/web/src/host-modules.ts +90 -0
  196. package/apps/web/src/language-server/api.ts +24 -0
  197. package/{plugins/ragents.lsp-roslyn/web → apps/web/src/language-server}/language-server-plugin.tsx +133 -6
  198. package/apps/web/src/main.tsx +4 -2
  199. package/apps/web/src/offered-machines.ts +11 -0
  200. package/apps/web/src/panel/ConnectionsPage.tsx +117 -0
  201. package/apps/web/src/panel/LoginForm.tsx +9 -9
  202. package/apps/web/src/panel/PanelDialogs.tsx +44 -27
  203. package/apps/web/src/panel/PanelHeader.tsx +11 -0
  204. package/apps/web/src/panel/PanelPage.tsx +8 -5
  205. package/apps/web/src/panel/RunLine.tsx +50 -0
  206. package/apps/web/src/panel/RunsPage.tsx +84 -0
  207. package/apps/web/src/panel/StartPage.tsx +163 -0
  208. package/apps/web/src/panel/connection-state.ts +40 -0
  209. package/apps/web/src/panel/contract.ts +66 -21
  210. package/apps/web/src/panel/page-props.ts +6 -0
  211. package/apps/web/src/plugin-bootstrap.ts +60 -31
  212. package/{plugins/ragents.product/web → apps/web/src/product}/ModelControl.tsx +3 -3
  213. package/{plugins/ragents.product/web → apps/web/src/product}/ProductModelSettings.tsx +7 -7
  214. package/{plugins/ragents.product/web → apps/web/src/product}/SystemPromptControl.tsx +3 -3
  215. package/{plugins/ragents.product/web → apps/web/src/product}/model-settings.ts +3 -3
  216. package/{plugins/ragents.product/web → apps/web/src/product}/start-options.tsx +2 -2
  217. package/apps/web/src/rpc/client.ts +28 -6
  218. package/apps/web/src/run-panel/RunPanelApp.tsx +334 -0
  219. package/apps/web/src/{column/ColumnRunHeader.tsx → run-panel/RunPanelHeader.tsx} +2 -2
  220. package/apps/web/src/{column/ColumnMenu.tsx → run-panel/RunPanelMenu.tsx} +4 -4
  221. package/apps/web/src/run-panel/RunPanelRail.tsx +38 -0
  222. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +55 -0
  223. package/apps/web/src/{column → run-panel}/clipboard.ts +21 -10
  224. package/apps/web/src/run-panel/host-contract.ts +123 -0
  225. package/apps/web/src/{column → run-panel}/host.ts +31 -23
  226. package/apps/web/src/run-panel/input-bridge.ts +75 -0
  227. package/apps/web/src/run-panel/keyboard.ts +53 -0
  228. package/apps/web/src/run-panel/run-panel-location.ts +35 -0
  229. package/apps/web/src/{column → run-panel}/use-session-list.ts +3 -3
  230. package/apps/web/src/run-panel/workspace-state.ts +43 -0
  231. package/apps/web/src/{column.tsx → run-panel.tsx} +20 -13
  232. package/apps/web/src/run-preparation.ts +1 -1
  233. package/{plugins/ragents.orchestration/web → apps/web/src}/run-view.ts +25 -7
  234. package/apps/web/src/settings-contributions.ts +16 -18
  235. package/apps/web/src/title-model-settings.ts +1 -1
  236. package/apps/web/src/toolLine.ts +1 -1
  237. package/apps/web/src/ui/ListDetail.tsx +1 -1
  238. package/apps/web/src/ui/dialog.tsx +5 -5
  239. package/apps/web/src/ui/frame.css +1 -0
  240. package/apps/web/src/ui/index.ts +5 -0
  241. package/apps/web/src/ui/popover.tsx +2 -2
  242. package/apps/web/src/ui/quassel.css +41 -0
  243. package/apps/web/src/ui/relative-time.ts +36 -0
  244. package/apps/web/src/ui/startup-notice.tsx +22 -0
  245. package/apps/web/src/ui/state-icon.tsx +60 -0
  246. package/apps/web/src/ui/state-vocabulary.ts +31 -0
  247. package/apps/web/src/ui/stop-button.tsx +22 -0
  248. package/apps/web/src/ui/tailwind.css +2 -3
  249. package/apps/web/src/ui/theme.css +19 -19
  250. package/apps/web/tsconfig.json +4 -5
  251. package/apps/web/tsconfig.plugin.json +44 -0
  252. package/bundles/ragents.activity/ragents-bundle.json +38 -0
  253. package/bundles/ragents.activity/server/index.js +14 -0
  254. package/bundles/ragents.activity/server/index.js.map +7 -0
  255. package/bundles/ragents.activity/web/classes.json +1 -0
  256. package/bundles/ragents.activity/web/index.js +2 -0
  257. package/bundles/ragents.activity/web/index.js.map +7 -0
  258. package/bundles/ragents.actor-programs/prompt.hbs +80 -0
  259. package/bundles/ragents.actor-programs/ragents-bundle.json +214 -0
  260. package/bundles/ragents.actor-programs/server/index.js +2071 -0
  261. package/bundles/ragents.actor-programs/server/index.js.map +7 -0
  262. package/bundles/ragents.actor-programs/summary.hbs +17 -0
  263. package/bundles/ragents.actor-programs/web/classes.json +1 -0
  264. package/bundles/ragents.actor-programs/web/index.js +27 -0
  265. package/bundles/ragents.actor-programs/web/index.js.map +7 -0
  266. package/bundles/ragents.ask/ask.hbs +4 -0
  267. package/bundles/ragents.ask/ragents-bundle.json +97 -0
  268. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js +13 -0
  269. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +7 -0
  270. package/bundles/ragents.ask/server/exports/server/contract.js +11 -0
  271. package/bundles/ragents.ask/server/exports/server/contract.js.map +7 -0
  272. package/bundles/ragents.ask/server/index.js +279 -0
  273. package/bundles/ragents.ask/server/index.js.map +7 -0
  274. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +2 -0
  275. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +7 -0
  276. package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js +2 -0
  277. package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js.map +7 -0
  278. package/bundles/ragents.ask/web/chunks/chunk-V7W3QDVS.js +25 -0
  279. package/bundles/ragents.ask/web/chunks/chunk-V7W3QDVS.js.map +7 -0
  280. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +2 -0
  281. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +7 -0
  282. package/bundles/ragents.ask/web/classes.json +1 -0
  283. package/bundles/ragents.ask/web/exports/ask-payload.js +2 -0
  284. package/bundles/ragents.ask/web/exports/ask-payload.js.map +7 -0
  285. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +2 -0
  286. package/bundles/ragents.ask/web/exports/web/QuestionCard.js.map +7 -0
  287. package/bundles/ragents.ask/web/exports/web/api.js +2 -0
  288. package/bundles/ragents.ask/web/exports/web/api.js.map +7 -0
  289. package/bundles/ragents.ask/web/index.js +2 -0
  290. package/bundles/ragents.ask/web/index.js.map +7 -0
  291. package/bundles/ragents.browser/ragents-bundle.json +53 -0
  292. package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js +11 -0
  293. package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js.map +7 -0
  294. package/bundles/ragents.browser/server/exports/server/contract.js +9 -0
  295. package/bundles/ragents.browser/server/exports/server/contract.js.map +7 -0
  296. package/bundles/ragents.browser/server/index.js +479 -0
  297. package/bundles/ragents.browser/server/index.js.map +7 -0
  298. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +38 -0
  299. package/bundles/ragents.documents/prompt.hbs +18 -0
  300. package/bundles/ragents.documents/ragents-bundle.json +120 -0
  301. package/bundles/ragents.documents/server/chunks/chunk-QIECRZ7C.js +37 -0
  302. package/bundles/ragents.documents/server/chunks/chunk-QIECRZ7C.js.map +7 -0
  303. package/bundles/ragents.documents/server/exports/contract.js +11 -0
  304. package/bundles/ragents.documents/server/exports/contract.js.map +7 -0
  305. package/bundles/ragents.documents/server/index.js +290 -0
  306. package/bundles/ragents.documents/server/index.js.map +7 -0
  307. package/bundles/ragents.documents/web/classes.json +1 -0
  308. package/bundles/ragents.documents/web/index.js +26 -0
  309. package/bundles/ragents.documents/web/index.js.map +7 -0
  310. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +49 -0
  311. package/bundles/ragents.lsp-fsharp/server/index.js +82 -0
  312. package/bundles/ragents.lsp-fsharp/server/index.js.map +7 -0
  313. package/bundles/ragents.lsp-fsharp/web/classes.json +1 -0
  314. package/bundles/ragents.lsp-fsharp/web/index.js +2 -0
  315. package/bundles/ragents.lsp-fsharp/web/index.js.map +7 -0
  316. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +61 -0
  317. package/bundles/ragents.lsp-roslyn/server/index.js +208 -0
  318. package/bundles/ragents.lsp-roslyn/server/index.js.map +7 -0
  319. package/bundles/ragents.lsp-roslyn/web/classes.json +1 -0
  320. package/bundles/ragents.lsp-roslyn/web/index.js +2 -0
  321. package/bundles/ragents.lsp-roslyn/web/index.js.map +7 -0
  322. package/bundles/ragents.lsp-typescript/ragents-bundle.json +36 -0
  323. package/bundles/ragents.lsp-typescript/server/index.js +13 -0
  324. package/bundles/ragents.lsp-typescript/server/index.js.map +7 -0
  325. package/bundles/ragents.lsp-typescript/web/classes.json +1 -0
  326. package/bundles/ragents.lsp-typescript/web/index.js +2 -0
  327. package/bundles/ragents.lsp-typescript/web/index.js.map +7 -0
  328. package/bundles/ragents.model-relay/ragents-bundle.json +33 -0
  329. package/bundles/ragents.model-relay/server/index.js +230 -0
  330. package/bundles/ragents.model-relay/server/index.js.map +7 -0
  331. package/bundles/ragents.orchestration/orchestration.hbs +106 -0
  332. package/bundles/ragents.orchestration/ragents-bundle.json +194 -0
  333. package/bundles/ragents.orchestration/server/index.js +277 -0
  334. package/bundles/ragents.orchestration/server/index.js.map +7 -0
  335. package/bundles/ragents.orchestration/web/chunks/chunk-ODMMQGX2.js +2 -0
  336. package/bundles/ragents.orchestration/web/chunks/chunk-ODMMQGX2.js.map +7 -0
  337. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +2 -0
  338. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js.map +7 -0
  339. package/bundles/ragents.orchestration/web/chunks/chunk-OSKPH6SZ.js +2 -0
  340. package/bundles/ragents.orchestration/web/chunks/chunk-OSKPH6SZ.js.map +7 -0
  341. package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js +2 -0
  342. package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js.map +7 -0
  343. package/bundles/ragents.orchestration/web/classes.json +1 -0
  344. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +2 -0
  345. package/bundles/ragents.orchestration/web/exports/web/program-slot.js.map +7 -0
  346. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +2 -0
  347. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js.map +7 -0
  348. package/bundles/ragents.orchestration/web/exports/web/tile-docking.js +2 -0
  349. package/bundles/ragents.orchestration/web/exports/web/tile-docking.js.map +7 -0
  350. package/bundles/ragents.orchestration/web/index.js +51 -0
  351. package/bundles/ragents.orchestration/web/index.js.map +7 -0
  352. package/bundles/ragents.overseer/ragents-bundle.json +144 -0
  353. package/bundles/ragents.overseer/server/index.js +652 -0
  354. package/bundles/ragents.overseer/server/index.js.map +7 -0
  355. package/bundles/ragents.overseer/web/classes.json +1 -0
  356. package/bundles/ragents.overseer/web/index.js +25 -0
  357. package/bundles/ragents.overseer/web/index.js.map +7 -0
  358. package/bundles/ragents.processes/ragents-bundle.json +93 -0
  359. package/bundles/ragents.processes/server/index.js +204 -0
  360. package/bundles/ragents.processes/server/index.js.map +7 -0
  361. package/bundles/ragents.processes/web/classes.json +1 -0
  362. package/bundles/ragents.processes/web/index.js +4 -0
  363. package/bundles/ragents.processes/web/index.js.map +7 -0
  364. package/bundles/ragents.product/preamble.hbs +9 -0
  365. package/bundles/ragents.product/ragents-bundle.json +93 -0
  366. package/bundles/ragents.product/server/index.js +208 -0
  367. package/bundles/ragents.product/server/index.js.map +7 -0
  368. package/bundles/ragents.product/web/classes.json +1 -0
  369. package/bundles/ragents.product/web/index.js +2 -0
  370. package/bundles/ragents.product/web/index.js.map +7 -0
  371. package/bundles/ragents.profile-distribution/ragents-bundle.json +64 -0
  372. package/bundles/ragents.profile-distribution/server/index.js +241 -0
  373. package/bundles/ragents.profile-distribution/server/index.js.map +7 -0
  374. package/bundles/ragents.reference/ragents-bundle.json +39 -0
  375. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +27 -0
  376. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +10 -0
  377. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +80 -0
  378. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +82 -0
  379. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +154 -0
  380. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +9 -0
  381. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +32 -0
  382. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +59 -0
  383. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +13 -0
  384. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +9 -0
  385. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +81 -0
  386. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +26 -0
  387. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +34 -0
  388. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +24 -0
  389. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +10 -0
  390. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -0
  391. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +5 -0
  392. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -0
  393. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +27 -0
  394. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +137 -0
  395. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/state.ts +38 -0
  396. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +42 -0
  397. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +38 -0
  398. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +218 -0
  399. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +12 -0
  400. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +9 -0
  401. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +60 -0
  402. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +26 -0
  403. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +24 -0
  404. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +18 -0
  405. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +16 -0
  406. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +39 -0
  407. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +15 -0
  408. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/server.ts +14 -0
  409. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +13 -0
  410. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +9 -0
  411. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +65 -0
  412. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +26 -0
  413. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +42 -0
  414. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +25 -0
  415. package/bundles/ragents.reference/run-scripts/word-game/package.json +11 -0
  416. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +27 -0
  417. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +23 -0
  418. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +105 -0
  419. package/bundles/ragents.reference/run-scripts/word-game/src/state.ts +22 -0
  420. package/bundles/ragents.reference/run-scripts/word-game/src/view.tsx +54 -0
  421. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +252 -0
  422. package/bundles/ragents.reference/server/index.js +16 -0
  423. package/bundles/ragents.reference/server/index.js.map +7 -0
  424. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +12 -0
  425. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +12 -0
  426. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +12 -0
  427. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +12 -0
  428. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +12 -0
  429. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +12 -0
  430. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +12 -0
  431. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +12 -0
  432. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +12 -0
  433. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +12 -0
  434. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +12 -0
  435. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +12 -0
  436. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +12 -0
  437. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +12 -0
  438. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +12 -0
  439. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +12 -0
  440. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +12 -0
  441. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +12 -0
  442. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +12 -0
  443. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +12 -0
  444. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +12 -0
  445. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +12 -0
  446. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +12 -0
  447. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +12 -0
  448. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +12 -0
  449. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +33 -0
  450. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +33 -0
  451. package/bundles/ragents.reference/web/classes.json +1 -0
  452. package/bundles/ragents.reference/web/index.js +2 -0
  453. package/bundles/ragents.reference/web/index.js.map +7 -0
  454. package/bundles/ragents.todo/ragents-bundle.json +48 -0
  455. package/bundles/ragents.todo/server/index.js +108 -0
  456. package/bundles/ragents.todo/server/index.js.map +7 -0
  457. package/bundles/ragents.todo/web/classes.json +1 -0
  458. package/bundles/ragents.todo/web/index.js +2 -0
  459. package/bundles/ragents.todo/web/index.js.map +7 -0
  460. package/bundles/ragents.transcript/ragents-bundle.json +34 -0
  461. package/bundles/ragents.transcript/server/index.js +102 -0
  462. package/bundles/ragents.transcript/server/index.js.map +7 -0
  463. package/bundles/ragents.watch/ragents-bundle.json +39 -0
  464. package/bundles/ragents.watch/server/chunks/chunk-FHAM6OML.js +11 -0
  465. package/bundles/ragents.watch/server/chunks/chunk-FHAM6OML.js.map +7 -0
  466. package/bundles/ragents.watch/server/chunks/chunk-RPBX3J4P.js +10 -0
  467. package/bundles/ragents.watch/server/chunks/chunk-RPBX3J4P.js.map +7 -0
  468. package/bundles/ragents.watch/server/exports/contract.js +9 -0
  469. package/bundles/ragents.watch/server/exports/contract.js.map +7 -0
  470. package/bundles/ragents.watch/server/exports/server/contract.js +9 -0
  471. package/bundles/ragents.watch/server/exports/server/contract.js.map +7 -0
  472. package/bundles/ragents.watch/server/index.js +482 -0
  473. package/bundles/ragents.watch/server/index.js.map +7 -0
  474. package/bundles/ragents.workspace/prompt.hbs +7 -0
  475. package/bundles/ragents.workspace/ragents-bundle.json +148 -0
  476. package/bundles/ragents.workspace/server/index.js +1049 -0
  477. package/bundles/ragents.workspace/server/index.js.map +7 -0
  478. package/bundles/ragents.workspace/web/classes.json +1 -0
  479. package/bundles/ragents.workspace/web/index.js +39 -0
  480. package/bundles/ragents.workspace/web/index.js.map +7 -0
  481. package/package.json +4 -15
  482. package/packages/agent/dist/core/agent-settings.d.ts +27 -0
  483. package/packages/agent/dist/core/compaction/compaction.d.ts +82 -0
  484. package/packages/agent/dist/core/compaction/index.d.ts +6 -0
  485. package/packages/agent/dist/core/compaction/utils.d.ts +39 -0
  486. package/packages/agent/dist/core/context-log.d.ts +25 -0
  487. package/packages/agent/dist/core/messages.d.ts +30 -0
  488. package/packages/agent/dist/core/model-runtime.d.ts +32 -0
  489. package/packages/agent/dist/core/provider-composer.d.ts +25 -0
  490. package/packages/agent/dist/core/skills.d.ts +20 -0
  491. package/packages/agent/dist/core/tool-definition.d.ts +17 -0
  492. package/packages/agent/dist/core/tools/bash.d.ts +58 -0
  493. package/packages/agent/dist/core/tools/edit-diff.d.ts +98 -0
  494. package/packages/agent/dist/core/tools/edit.d.ts +41 -0
  495. package/packages/agent/dist/core/tools/file-mutation-queue.d.ts +6 -0
  496. package/packages/agent/dist/core/tools/index.d.ts +5 -0
  497. package/packages/agent/dist/core/tools/output-accumulator.d.ts +58 -0
  498. package/packages/agent/dist/core/tools/path-utils.d.ts +8 -0
  499. package/packages/agent/dist/core/tools/read.d.ts +33 -0
  500. package/packages/agent/dist/core/tools/truncate.d.ts +61 -0
  501. package/packages/agent/dist/core/tools/write.d.ts +23 -0
  502. package/packages/agent/dist/index.d.ts +12 -0
  503. package/packages/agent/dist/loop/agent-loop.d.ts +13 -0
  504. package/packages/agent/dist/loop/agent.d.ts +99 -0
  505. package/packages/agent/dist/loop/index.d.ts +5 -0
  506. package/packages/agent/dist/loop/types.d.ts +333 -0
  507. package/packages/agent/dist/loop/uuid.d.ts +2 -0
  508. package/packages/agent/dist/utils/child-process.d.ts +17 -0
  509. package/packages/agent/dist/utils/exif-orientation.d.ts +5 -0
  510. package/packages/agent/dist/utils/frontmatter.d.ts +8 -0
  511. package/packages/agent/dist/utils/image-convert.d.ts +2 -0
  512. package/packages/agent/dist/utils/image-process.d.ts +18 -0
  513. package/packages/agent/dist/utils/image-resize-core.d.ts +30 -0
  514. package/packages/agent/dist/utils/image-resize-worker.d.ts +2 -0
  515. package/packages/agent/dist/utils/image-resize.d.ts +16 -0
  516. package/packages/agent/dist/utils/mime.d.ts +3 -0
  517. package/packages/agent/dist/utils/paths.d.ts +15 -0
  518. package/packages/agent/dist/utils/photon.d.ts +21 -0
  519. package/packages/agent/dist/utils/shell.d.ts +17 -0
  520. package/packages/agent/dist/utils/sleep.d.ts +5 -0
  521. package/packages/agent/package.json +3 -32
  522. package/packages/agent/src/core/agent-settings.ts +20 -0
  523. package/packages/agent/src/core/compaction/compaction.ts +53 -208
  524. package/packages/agent/src/core/compaction/index.ts +0 -1
  525. package/packages/agent/src/core/compaction/utils.ts +2 -2
  526. package/packages/agent/src/core/context-log.ts +49 -0
  527. package/packages/agent/src/core/messages.ts +9 -119
  528. package/packages/agent/src/core/model-runtime.ts +109 -467
  529. package/packages/agent/src/core/provider-composer.ts +21 -451
  530. package/packages/agent/src/core/skills.ts +8 -440
  531. package/packages/agent/src/core/tool-definition.ts +29 -0
  532. package/packages/agent/src/core/tools/bash.ts +22 -41
  533. package/packages/agent/src/core/tools/edit-diff.ts +0 -60
  534. package/packages/agent/src/core/tools/edit.ts +4 -29
  535. package/packages/agent/src/core/tools/index.ts +4 -130
  536. package/packages/agent/src/core/tools/output-accumulator.ts +33 -5
  537. package/packages/agent/src/core/tools/path-utils.ts +2 -49
  538. package/packages/agent/src/core/tools/read.ts +6 -29
  539. package/packages/agent/src/core/tools/truncate.ts +0 -15
  540. package/packages/agent/src/core/tools/write.ts +2 -13
  541. package/packages/agent/src/index.ts +23 -270
  542. package/packages/{agent-core/src → agent/src/loop}/agent-loop.ts +128 -275
  543. package/packages/{agent-core/src → agent/src/loop}/agent.ts +20 -166
  544. package/packages/{agent-core/src → agent/src/loop}/types.ts +6 -105
  545. package/packages/agent/src/utils/child-process.ts +0 -13
  546. package/packages/agent/src/utils/image-convert.ts +0 -25
  547. package/packages/agent/src/utils/paths.ts +1 -71
  548. package/packages/agent/src/utils/shell.ts +13 -156
  549. package/packages/ai/dist/api/ai-sdk-messages.d.ts +9 -0
  550. package/packages/ai/dist/api/ai-sdk-transport.d.ts +13 -0
  551. package/packages/ai/dist/api/ai-sdk.d.ts +15 -0
  552. package/packages/ai/dist/api/ai-sdk.lazy.d.ts +3 -0
  553. package/packages/ai/dist/api/lazy.d.ts +15 -0
  554. package/packages/ai/dist/api/simple-options.d.ts +4 -0
  555. package/packages/ai/dist/api/transform-messages.d.ts +8 -0
  556. package/packages/ai/dist/api-registry.d.ts +25 -0
  557. package/packages/ai/dist/auth/context.d.ts +4 -0
  558. package/packages/ai/dist/auth/helpers.d.ts +4 -0
  559. package/packages/ai/dist/auth/resolve.d.ts +19 -0
  560. package/packages/ai/dist/auth/types.d.ts +51 -0
  561. package/packages/ai/dist/env-api-keys.d.ts +8 -0
  562. package/packages/ai/dist/index.d.ts +19 -0
  563. package/packages/ai/dist/models.d.ts +71 -0
  564. package/packages/ai/dist/models.generated.d.ts +8021 -0
  565. package/packages/ai/dist/providers/all.d.ts +15 -0
  566. package/packages/ai/dist/providers/faux.d.ts +97 -0
  567. package/packages/ai/dist/providers/openrouter.d.ts +3 -0
  568. package/packages/ai/dist/providers/openrouter.models.d.ts +8019 -0
  569. package/packages/ai/dist/types.d.ts +543 -0
  570. package/packages/ai/dist/utils/diagnostics.d.ts +13 -0
  571. package/packages/ai/dist/utils/error-body.d.ts +25 -0
  572. package/packages/ai/dist/utils/estimate.d.ts +17 -0
  573. package/packages/ai/dist/utils/event-stream.d.ts +21 -0
  574. package/packages/ai/dist/utils/headers.d.ts +2 -0
  575. package/packages/ai/dist/utils/json-parse.d.ts +16 -0
  576. package/packages/ai/dist/utils/overflow.d.ts +54 -0
  577. package/packages/ai/dist/utils/provider-env.d.ts +7 -0
  578. package/packages/ai/dist/utils/retry.d.ts +12 -0
  579. package/packages/ai/dist/utils/sanitize-unicode.d.ts +22 -0
  580. package/packages/ai/dist/utils/typebox-helpers.d.ts +17 -0
  581. package/packages/ai/dist/utils/validation.d.ts +10 -0
  582. package/packages/ai/package.json +2 -6
  583. package/packages/ai/src/api/ai-sdk-messages.ts +15 -10
  584. package/packages/ai/src/api/ai-sdk-transport.ts +2 -2
  585. package/packages/ai/src/api/ai-sdk.ts +11 -0
  586. package/packages/ai/src/api/simple-options.ts +0 -34
  587. package/packages/ai/src/api/transform-messages.ts +1 -1
  588. package/packages/ai/src/api-registry.ts +1 -12
  589. package/packages/ai/src/auth/context.ts +1 -30
  590. package/packages/ai/src/auth/helpers.ts +3 -34
  591. package/packages/ai/src/auth/resolve.ts +10 -108
  592. package/packages/ai/src/auth/types.ts +9 -176
  593. package/packages/ai/src/index.ts +1 -13
  594. package/packages/ai/src/models.ts +41 -407
  595. package/packages/ai/src/providers/all.ts +3 -31
  596. package/packages/ai/src/providers/openrouter.models.ts +14 -0
  597. package/packages/ai/src/types.ts +2 -104
  598. package/packages/ai/src/utils/diagnostics.ts +0 -32
  599. package/packages/ai/src/utils/headers.ts +0 -11
  600. package/packages/ai/src/utils/overflow.ts +0 -7
  601. package/packages/ai/src/utils/retry.ts +14 -0
  602. package/packages/ai/src/utils/validation.ts +0 -15
  603. package/packages/ragents/package.json +3 -6
  604. package/packages/ragents/src/access.ts +2 -1
  605. package/packages/ragents/src/agents/actor-input.ts +29 -18
  606. package/packages/ragents/src/agents/catalog.ts +3 -3
  607. package/packages/ragents/src/agents/model-context.ts +360 -0
  608. package/packages/ragents/src/agents/plugins.ts +0 -4
  609. package/packages/ragents/src/agents/scheduler.ts +233 -83
  610. package/packages/ragents/src/agents/schemas.ts +1 -36
  611. package/packages/ragents/src/agents/tool-orientation.ts +1 -1
  612. package/packages/ragents/src/agents/tools.ts +74 -75
  613. package/packages/ragents/src/agents/toolset.ts +51 -24
  614. package/packages/ragents/src/agents/turn.ts +2 -14
  615. package/packages/ragents/src/agents/workspaces.ts +12 -0
  616. package/packages/ragents/src/domain/actor-reference.ts +22 -0
  617. package/packages/ragents/src/domain/driver.ts +0 -9
  618. package/packages/ragents/src/domain/event-semantics.ts +111 -72
  619. package/packages/ragents/src/domain/event-validation.ts +188 -21
  620. package/packages/ragents/src/domain/events.ts +91 -7
  621. package/packages/ragents/src/domain/json.ts +2 -0
  622. package/packages/ragents/src/domain/model.ts +42 -18
  623. package/packages/ragents/src/domain/projection.ts +52 -15
  624. package/packages/ragents/src/domain/schema-errors.ts +3 -3
  625. package/packages/ragents/src/domain/tool-result-text.ts +9 -0
  626. package/packages/ragents/src/drivers/agent-hooks.ts +27 -0
  627. package/packages/ragents/src/drivers/agent-runtime.ts +137 -1020
  628. package/packages/ragents/src/drivers/agent-turn.ts +735 -0
  629. package/packages/ragents/src/drivers/agent.ts +13 -26
  630. package/packages/ragents/src/drivers/attachments.ts +4 -24
  631. package/packages/ragents/src/drivers/skill-preload.ts +56 -78
  632. package/packages/ragents/src/drivers/types.ts +39 -6
  633. package/packages/ragents/src/http/contracts.ts +16 -3
  634. package/packages/ragents/src/http/methods.ts +32 -33
  635. package/packages/ragents/src/index.ts +12 -21
  636. package/packages/ragents/src/plugin-host.ts +150 -105
  637. package/packages/ragents/src/plugin-types.ts +86 -23
  638. package/packages/ragents/src/rpc/peer.ts +6 -0
  639. package/packages/ragents/src/runtime/decisions/actions.ts +40 -37
  640. package/packages/ragents/src/runtime/decisions/actors.ts +100 -51
  641. package/packages/ragents/src/runtime/decisions/artifacts.ts +2 -2
  642. package/packages/ragents/src/runtime/decisions/inputs.ts +3 -3
  643. package/packages/ragents/src/runtime/decisions/subscriptions.ts +9 -7
  644. package/packages/ragents/src/runtime/decisions/turns.ts +101 -9
  645. package/packages/ragents/src/runtime/guards.ts +12 -21
  646. package/packages/ragents/src/runtime/journal-storage.ts +8 -3
  647. package/packages/ragents/src/runtime/journal.ts +36 -1
  648. package/packages/ragents/src/runtime/orchestration.ts +167 -19
  649. package/packages/ragents/src/runtime/serial-queue.ts +24 -0
  650. package/packages/ragents/src/runtime/stop.ts +19 -44
  651. package/packages/ragents/src/script/mediators.ts +4 -5
  652. package/packages/ragents/src/typescript/index.ts +2 -0
  653. package/packages/ragents/src/typescript/run-context.ts +10 -8
  654. package/packages/ragents/src/typescript/snippet.ts +7 -6
  655. package/packages/workspace-executor/package.json +2 -2
  656. package/packages/workspace-executor/src/bash-launch.ts +45 -0
  657. package/packages/workspace-executor/src/browser/contract.ts +71 -0
  658. package/packages/workspace-executor/src/browser/module.ts +74 -0
  659. package/packages/workspace-executor/src/browser/pages.ts +298 -0
  660. package/packages/workspace-executor/src/browser/playwright.ts +52 -0
  661. package/packages/workspace-executor/src/commands.ts +170 -0
  662. package/packages/workspace-executor/src/context.ts +34 -6
  663. package/packages/workspace-executor/src/errors.ts +12 -0
  664. package/packages/workspace-executor/src/executor.ts +62 -104
  665. package/packages/workspace-executor/src/files.ts +287 -0
  666. package/packages/workspace-executor/src/index.ts +82 -18
  667. package/packages/workspace-executor/src/language-server/adapters/roslyn.ts +1 -0
  668. package/packages/workspace-executor/src/language-server/contract.ts +14 -0
  669. package/packages/workspace-executor/src/language-server/host.ts +82 -26
  670. package/packages/workspace-executor/src/language-server/module.ts +107 -0
  671. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +90 -0
  672. package/packages/workspace-executor/src/managed-process.ts +1 -1
  673. package/packages/workspace-executor/src/module.ts +35 -0
  674. package/packages/workspace-executor/src/modules.ts +25 -0
  675. package/packages/workspace-executor/src/paths.ts +57 -5
  676. package/packages/workspace-executor/src/process-sandbox.ts +16 -0
  677. package/packages/workspace-executor/src/processes/module.ts +48 -0
  678. package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/process-table.ts +80 -57
  679. package/packages/workspace-executor/src/processes/scanner.ts +106 -0
  680. package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/snapshot.ts +23 -11
  681. package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/terminator.ts +19 -20
  682. package/packages/workspace-executor/src/run-folders.ts +33 -0
  683. package/packages/workspace-executor/src/safe-environment.ts +14 -0
  684. package/packages/workspace-executor/src/sandbox-tools.ts +212 -43
  685. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  686. package/plugins/package.json +1 -1
  687. package/plugins/ragents.activity/ragents-plugin.json +3 -0
  688. package/plugins/ragents.activity/server/index.ts +2 -2
  689. package/plugins/ragents.activity/web/ActivityHeader.tsx +2 -2
  690. package/plugins/ragents.activity/web/activity.ts +1 -1
  691. package/plugins/ragents.activity/web/index.tsx +1 -1
  692. package/plugins/ragents.actor-programs/prompt.hbs +8 -7
  693. package/plugins/ragents.actor-programs/ragents-plugin.json +3 -0
  694. package/plugins/ragents.actor-programs/server/agent-tools.ts +3 -3
  695. package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/capability-resolver.ts +1 -16
  696. package/plugins/ragents.actor-programs/server/controls-template.ts +5 -18
  697. package/plugins/ragents.actor-programs/server/controls-tool.ts +8 -11
  698. package/plugins/ragents.actor-programs/server/index.ts +10 -10
  699. package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/limits.ts +4 -4
  700. package/plugins/ragents.actor-programs/server/methods.ts +2 -2
  701. package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/operations.ts +2 -4
  702. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +65 -70
  703. package/plugins/ragents.actor-programs/server/prompts.ts +4 -4
  704. package/plugins/ragents.actor-programs/server/routes.ts +14 -8
  705. package/plugins/ragents.actor-programs/server/runtime.ts +132 -55
  706. package/plugins/ragents.actor-programs/server/templates.ts +35 -80
  707. package/plugins/ragents.actor-programs/server/test-report.ts +106 -0
  708. package/plugins/ragents.actor-programs/server/tool-contributor.ts +4 -4
  709. package/plugins/ragents.actor-programs/summary.hbs +1 -1
  710. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +15 -10
  711. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +47 -30
  712. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +15 -17
  713. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +3 -3
  714. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +3 -3
  715. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +12 -3
  716. package/plugins/ragents.actor-programs/web/api.ts +5 -5
  717. package/plugins/ragents.actor-programs/web/bridge.ts +2 -3
  718. package/plugins/ragents.actor-programs/web/chat-state.ts +9 -8
  719. package/plugins/ragents.actor-programs/web/index.tsx +7 -17
  720. package/plugins/ragents.actor-programs/web/program-state.ts +3 -3
  721. package/plugins/ragents.actor-programs/web/state-revision.ts +2 -2
  722. package/plugins/ragents.ask/ask-payload.ts +25 -0
  723. package/plugins/ragents.ask/contract.ts +2 -2
  724. package/plugins/ragents.ask/ragents-plugin.json +7 -0
  725. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  726. package/plugins/ragents.ask/server/ask-service.ts +43 -19
  727. package/plugins/ragents.ask/server/ask-tool.ts +2 -2
  728. package/plugins/ragents.ask/server/contract.ts +9 -1
  729. package/plugins/ragents.ask/server/index.ts +8 -10
  730. package/plugins/ragents.ask/server/tool-contributor.ts +3 -3
  731. package/plugins/ragents.ask/web/AskActionView.tsx +36 -0
  732. package/{apps/web/src/chat → plugins/ragents.ask/web}/QuestionCard.tsx +7 -5
  733. package/plugins/ragents.ask/web/QuestionSection.tsx +22 -21
  734. package/plugins/ragents.ask/web/api.ts +1 -1
  735. package/plugins/ragents.ask/web/index.tsx +11 -8
  736. package/plugins/ragents.browser/provision.ts +9 -8
  737. package/plugins/ragents.browser/ragents-plugin.json +6 -0
  738. package/plugins/ragents.browser/server/browser.ts +165 -286
  739. package/plugins/ragents.browser/server/contract.ts +8 -19
  740. package/plugins/ragents.browser/server/index.ts +8 -7
  741. package/plugins/ragents.browser/server/tools.ts +29 -37
  742. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +3 -1
  743. package/plugins/ragents.documents/contract.ts +4 -2
  744. package/plugins/ragents.documents/ragents-plugin.json +6 -0
  745. package/plugins/ragents.documents/server/config.ts +1 -1
  746. package/plugins/ragents.documents/server/document-write-tool.ts +2 -2
  747. package/plugins/ragents.documents/server/files-route.ts +2 -3
  748. package/plugins/ragents.documents/server/index.ts +10 -11
  749. package/plugins/ragents.documents/server/show-document-tool.ts +2 -2
  750. package/plugins/ragents.documents/server/store.ts +3 -3
  751. package/plugins/ragents.documents/server/tool-contributor.ts +3 -3
  752. package/plugins/ragents.documents/web/DocumentViewer.tsx +5 -6
  753. package/plugins/ragents.documents/web/api.ts +1 -1
  754. package/plugins/ragents.documents/web/index.tsx +4 -4
  755. package/plugins/ragents.lsp-fsharp/provision.ts +2 -2
  756. package/plugins/ragents.lsp-fsharp/ragents-plugin.json +3 -0
  757. package/plugins/ragents.lsp-fsharp/server/index.ts +3 -3
  758. package/plugins/ragents.lsp-fsharp/web/index.tsx +1 -1
  759. package/plugins/ragents.lsp-roslyn/provision.ts +2 -2
  760. package/plugins/ragents.lsp-roslyn/ragents-plugin.json +3 -0
  761. package/plugins/ragents.lsp-roslyn/server/index.ts +47 -8
  762. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +145 -0
  763. package/plugins/ragents.lsp-roslyn/web/index.tsx +1 -1
  764. package/plugins/ragents.lsp-typescript/ragents-plugin.json +3 -0
  765. package/plugins/ragents.lsp-typescript/server/index.ts +3 -3
  766. package/plugins/ragents.lsp-typescript/web/index.tsx +1 -1
  767. package/plugins/ragents.model-relay/ragents-plugin.json +3 -0
  768. package/plugins/ragents.model-relay/server/config.ts +5 -31
  769. package/plugins/ragents.model-relay/server/index.ts +5 -6
  770. package/plugins/ragents.model-relay/server/relay.ts +8 -9
  771. package/plugins/ragents.orchestration/contract.ts +13 -14
  772. package/plugins/ragents.orchestration/orchestration.hbs +4 -3
  773. package/plugins/ragents.orchestration/ragents-plugin.json +6 -0
  774. package/plugins/ragents.orchestration/server/index.ts +13 -16
  775. package/plugins/ragents.orchestration/server/run-stop-tool.ts +4 -4
  776. package/plugins/ragents.orchestration/server/{canvas-tool.ts → surface-tool.ts} +42 -43
  777. package/plugins/ragents.orchestration/surface.hbs +34 -0
  778. package/plugins/ragents.orchestration/tiled-layout.ts +16 -16
  779. package/plugins/ragents.orchestration/web/ActorChat.tsx +16 -14
  780. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +23 -26
  781. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +5 -6
  782. package/plugins/ragents.orchestration/web/ActorPopout.tsx +7 -5
  783. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +16 -16
  784. package/plugins/ragents.orchestration/web/{ActorCanvasControls.tsx → ActorSurfaceControls.tsx} +23 -28
  785. package/plugins/ragents.orchestration/web/ActorTile.tsx +2 -2
  786. package/plugins/ragents.orchestration/web/Center.tsx +47 -55
  787. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +4 -4
  788. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +7 -7
  789. package/plugins/ragents.orchestration/web/FlowInspector.tsx +24 -42
  790. package/plugins/ragents.orchestration/web/JournalStatus.tsx +8 -8
  791. package/plugins/ragents.orchestration/web/MaterialBody.tsx +5 -5
  792. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  793. package/plugins/ragents.orchestration/web/SurfaceStartup.tsx +8 -0
  794. package/plugins/ragents.orchestration/web/{CanvasTiles.tsx → SurfaceTiles.tsx} +18 -18
  795. package/plugins/ragents.orchestration/web/{TiledCanvas.tsx → TiledSurface.tsx} +22 -22
  796. package/plugins/ragents.orchestration/web/actor-header-settings.ts +2 -2
  797. package/plugins/ragents.orchestration/web/api.ts +4 -10
  798. package/plugins/ragents.orchestration/web/constants.ts +0 -1
  799. package/plugins/ragents.orchestration/web/executions.ts +3 -3
  800. package/plugins/ragents.orchestration/web/index.tsx +19 -124
  801. package/plugins/ragents.orchestration/web/program-slot.ts +14 -0
  802. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +95 -0
  803. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +109 -0
  804. package/plugins/ragents.orchestration/web/{column/RunColumn.tsx → run-panel/RunPanel.tsx} +211 -83
  805. package/plugins/ragents.orchestration/web/{column/ColumnSettings.tsx → run-panel/RunPanelSettings.tsx} +13 -13
  806. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +165 -0
  807. package/plugins/ragents.orchestration/web/{column/column-actors.ts → run-panel/run-panel-actors.ts} +14 -13
  808. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +47 -0
  809. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +30 -0
  810. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +71 -0
  811. package/plugins/ragents.orchestration/web/{column → run-panel}/sheet-status.ts +4 -4
  812. package/plugins/ragents.orchestration/web/{canvas-stage.ts → surface-entities.ts} +2 -2
  813. package/plugins/ragents.orchestration/web/{canvas-startup.ts → surface-startup.ts} +7 -10
  814. package/plugins/ragents.orchestration/web/surface-view-settings.ts +42 -0
  815. package/plugins/ragents.orchestration/web/tile-docking.ts +14 -14
  816. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +26 -26
  817. package/plugins/ragents.overseer/contract.ts +20 -14
  818. package/plugins/ragents.overseer/ragents-plugin.json +3 -0
  819. package/plugins/ragents.overseer/server/api.ts +34 -23
  820. package/plugins/ragents.overseer/server/coordinator-prompt.ts +3 -3
  821. package/plugins/ragents.overseer/server/coordinator.ts +19 -0
  822. package/plugins/ragents.overseer/server/index.ts +39 -27
  823. package/plugins/ragents.overseer/server/orientation.ts +4 -5
  824. package/plugins/ragents.overseer/server/quick-answer.ts +5 -4
  825. package/plugins/ragents.overseer/server/reset-method.ts +4 -3
  826. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  827. package/plugins/ragents.overseer/server/settings-method.ts +1 -1
  828. package/plugins/ragents.overseer/server/settings.ts +6 -6
  829. package/plugins/ragents.overseer/server/user-location.ts +20 -19
  830. package/plugins/ragents.overseer/web/ModelSettings.tsx +4 -4
  831. package/plugins/ragents.overseer/web/chat-display.ts +1 -1
  832. package/plugins/ragents.overseer/web/index.tsx +51 -26
  833. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  834. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  835. package/plugins/ragents.processes/contract.ts +5 -5
  836. package/plugins/ragents.processes/ragents-plugin.json +3 -0
  837. package/plugins/ragents.processes/server/index.ts +13 -19
  838. package/plugins/ragents.processes/server/methods.ts +18 -20
  839. package/plugins/ragents.processes/server/observer.ts +64 -104
  840. package/plugins/ragents.processes/server/run-processes.ts +24 -0
  841. package/plugins/ragents.processes/web/ProcessHeader.tsx +13 -16
  842. package/plugins/ragents.processes/web/index.tsx +2 -1
  843. package/plugins/ragents.processes/web/processes.ts +1 -1
  844. package/plugins/ragents.product/ragents-plugin.json +3 -0
  845. package/plugins/ragents.product/server/config.ts +12 -13
  846. package/plugins/ragents.product/server/index.ts +15 -16
  847. package/plugins/ragents.product/server/runtime.ts +2 -2
  848. package/plugins/ragents.product/web/index.tsx +3 -3
  849. package/plugins/ragents.profile-distribution/contract.ts +6 -9
  850. package/plugins/ragents.profile-distribution/ragents-plugin.json +3 -0
  851. package/plugins/ragents.profile-distribution/server/archive.ts +26 -51
  852. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  853. package/plugins/ragents.profile-distribution/server/index.ts +9 -16
  854. package/plugins/ragents.reference/examples.ts +1 -1
  855. package/plugins/ragents.reference/ragents-plugin.json +3 -0
  856. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +2 -2
  857. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +1 -1
  858. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +1 -1
  859. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +4 -4
  860. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +1 -1
  861. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +1 -1
  862. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  863. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +2 -2
  864. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +1 -1
  865. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +1 -1
  866. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/state.ts +2 -2
  867. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +11 -11
  868. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +15 -15
  869. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +4 -9
  870. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +1 -1
  871. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  872. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +2 -2
  873. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +6 -6
  874. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +3 -3
  875. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  876. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +1 -1
  877. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  878. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +1 -2
  879. package/plugins/ragents.reference/run-scripts/word-game/src/state.ts +6 -6
  880. package/plugins/ragents.reference/run-scripts/word-game/src/view.tsx +14 -14
  881. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +7 -8
  882. package/plugins/ragents.reference/server/index.ts +2 -2
  883. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +1 -1
  884. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +1 -1
  885. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +1 -1
  886. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +1 -1
  887. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +2 -2
  888. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +2 -2
  889. package/plugins/ragents.reference/walkthroughs.ts +19 -19
  890. package/plugins/ragents.reference/web/StartGuides.tsx +2 -2
  891. package/plugins/ragents.reference/web/index.tsx +1 -1
  892. package/plugins/ragents.todo/ragents-plugin.json +3 -0
  893. package/plugins/ragents.todo/server/index.ts +2 -2
  894. package/plugins/ragents.todo/server/todo-tool.ts +4 -5
  895. package/plugins/ragents.todo/server/tool-contributor.ts +2 -2
  896. package/plugins/ragents.todo/web/TodoSection.tsx +3 -3
  897. package/plugins/ragents.todo/web/index.ts +1 -1
  898. package/plugins/ragents.transcript/ragents-plugin.json +3 -0
  899. package/plugins/ragents.transcript/server/index.ts +4 -4
  900. package/plugins/ragents.transcript/server/transcript.ts +2 -3
  901. package/plugins/ragents.watch/ragents-plugin.json +6 -0
  902. package/plugins/ragents.watch/server/condition.ts +2 -2
  903. package/plugins/ragents.watch/server/contract.ts +1 -1
  904. package/plugins/ragents.watch/server/functions.ts +3 -3
  905. package/plugins/ragents.watch/server/index.ts +3 -3
  906. package/plugins/ragents.watch/server/observation.ts +6 -6
  907. package/plugins/ragents.watch/server/service.ts +5 -5
  908. package/plugins/ragents.workspace/client/workspace-client.ts +129 -58
  909. package/plugins/ragents.workspace/contract.ts +98 -35
  910. package/plugins/ragents.workspace/prompt.hbs +1 -8
  911. package/plugins/ragents.workspace/ragents-plugin.json +3 -0
  912. package/plugins/ragents.workspace/server/binding.ts +122 -39
  913. package/plugins/ragents.workspace/server/browse-route.ts +96 -103
  914. package/plugins/ragents.workspace/server/clients.ts +236 -68
  915. package/plugins/ragents.workspace/server/config.ts +30 -0
  916. package/plugins/ragents.workspace/server/index.ts +61 -26
  917. package/plugins/ragents.workspace/server/runtime.ts +271 -46
  918. package/{apps/server/src/plugin-support → plugins/ragents.workspace/server}/shell-platform.ts +3 -5
  919. package/{apps/server/src/plugin-support → plugins/ragents.workspace/server}/workspace-tool-naming.ts +7 -1
  920. package/plugins/ragents.workspace/web/FileBrowser.tsx +11 -8
  921. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +115 -61
  922. package/plugins/ragents.workspace/web/api.ts +1 -1
  923. package/plugins/ragents.workspace/web/index.tsx +1 -1
  924. package/ragents.config.core.ts +2 -7
  925. package/ragents.config.showcase.ts +2 -5
  926. package/scripts/agent/agent-cli.ts +265 -107
  927. package/scripts/agent/journal.ts +8 -4
  928. package/scripts/agent/turn-control.ts +19 -0
  929. package/scripts/package/build-package.ts +68 -13
  930. package/scripts/package/ragents.mjs +4 -2
  931. package/scripts/plugin/build-builtin-plugins.ts +52 -0
  932. package/scripts/plugin/plugin-cli.ts +99 -0
  933. package/scripts/provision/run-provision.ts +20 -18
  934. package/scripts/remote/connect.ts +75 -53
  935. package/scripts/remote/start.ts +2 -3
  936. package/scripts/workspace-client/run-workspace-client.ts +15 -9
  937. package/apps/server/agent-home/settings.json +0 -3
  938. package/apps/server/src/chat-attachments.ts +0 -52
  939. package/apps/server/src/chat-events.ts +0 -185
  940. package/apps/server/src/plugin-support/asset-path.ts +0 -4
  941. package/apps/server/src/profile/plugin-list.ts +0 -19
  942. package/apps/server/src/web-build.ts +0 -82
  943. package/apps/web/column.html +0 -12
  944. package/apps/web/index.html +0 -12
  945. package/apps/web/src/StartSurface.tsx +0 -161
  946. package/apps/web/src/chat/ChatInputToolbar.tsx +0 -488
  947. package/apps/web/src/chat/ChatMessages.tsx +0 -666
  948. package/apps/web/src/chat/ChatPanel.tsx +0 -61
  949. package/apps/web/src/chat/DetailModeSwitch.tsx +0 -58
  950. package/apps/web/src/chat/Markdown.tsx +0 -104
  951. package/apps/web/src/chat/StepPopover.tsx +0 -82
  952. package/apps/web/src/chat/WorkingScenes.tsx +0 -235
  953. package/apps/web/src/chat/attachments.ts +0 -53
  954. package/apps/web/src/chat/chat-scroll.ts +0 -41
  955. package/apps/web/src/chat/texts.ts +0 -61
  956. package/apps/web/src/chat/types.ts +0 -26
  957. package/apps/web/src/column/ColumnApp.tsx +0 -234
  958. package/apps/web/src/column/column-location.ts +0 -30
  959. package/apps/web/src/column/host-contract.ts +0 -93
  960. package/apps/web/src/panel/OverviewPage.tsx +0 -215
  961. package/apps/web/src/panel/SettingsPage.tsx +0 -98
  962. package/apps/web/src/panel/target-state.ts +0 -78
  963. package/apps/web/src/plugin-discovery.ts +0 -5
  964. package/apps/web/src/virtual-plugins.d.ts +0 -3
  965. package/apps/web/vite.config.ts +0 -140
  966. package/packages/agent/src/config.ts +0 -161
  967. package/packages/agent/src/core/agent-session-runtime.ts +0 -548
  968. package/packages/agent/src/core/agent-session-services.ts +0 -224
  969. package/packages/agent/src/core/agent-session.ts +0 -3357
  970. package/packages/agent/src/core/auth-guidance.ts +0 -18
  971. package/packages/agent/src/core/auth-storage.ts +0 -271
  972. package/packages/agent/src/core/bash-executor.ts +0 -156
  973. package/packages/agent/src/core/compaction/branch-summarization.ts +0 -372
  974. package/packages/agent/src/core/defaults.ts +0 -3
  975. package/packages/agent/src/core/diagnostics.ts +0 -15
  976. package/packages/agent/src/core/event-bus.ts +0 -33
  977. package/packages/agent/src/core/exec.ts +0 -107
  978. package/packages/agent/src/core/experimental.ts +0 -3
  979. package/packages/agent/src/core/extensions/index.ts +0 -149
  980. package/packages/agent/src/core/extensions/loader.ts +0 -709
  981. package/packages/agent/src/core/extensions/runner.ts +0 -1132
  982. package/packages/agent/src/core/extensions/types.ts +0 -1460
  983. package/packages/agent/src/core/extensions/wrapper.ts +0 -45
  984. package/packages/agent/src/core/footer-data-provider.ts +0 -388
  985. package/packages/agent/src/core/http-dispatcher.ts +0 -106
  986. package/packages/agent/src/core/index.ts +0 -78
  987. package/packages/agent/src/core/model-config.ts +0 -287
  988. package/packages/agent/src/core/model-registry.ts +0 -126
  989. package/packages/agent/src/core/model-resolver.ts +0 -675
  990. package/packages/agent/src/core/output-guard.ts +0 -108
  991. package/packages/agent/src/core/package-manager.ts +0 -2441
  992. package/packages/agent/src/core/prompt-templates.ts +0 -284
  993. package/packages/agent/src/core/resolve-config-value.ts +0 -287
  994. package/packages/agent/src/core/resource-loader.ts +0 -946
  995. package/packages/agent/src/core/runtime-credentials.ts +0 -48
  996. package/packages/agent/src/core/sdk.ts +0 -358
  997. package/packages/agent/src/core/session-cwd.ts +0 -59
  998. package/packages/agent/src/core/session-manager.ts +0 -1623
  999. package/packages/agent/src/core/settings-manager.ts +0 -1212
  1000. package/packages/agent/src/core/slash-commands.ts +0 -41
  1001. package/packages/agent/src/core/source-info.ts +0 -40
  1002. package/packages/agent/src/core/system-prompt.ts +0 -147
  1003. package/packages/agent/src/core/timings.ts +0 -50
  1004. package/packages/agent/src/core/tools/tool-definition-wrapper.ts +0 -45
  1005. package/packages/agent/src/core/trust-manager.ts +0 -244
  1006. package/packages/agent/src/utils/ansi.ts +0 -60
  1007. package/packages/agent/src/utils/fs-watch.ts +0 -30
  1008. package/packages/agent/src/utils/git.ts +0 -226
  1009. package/packages/agent/src/utils/json.ts +0 -6
  1010. package/packages/agent/src/utils/tools-manager.ts +0 -63
  1011. package/packages/agent-core/package.json +0 -32
  1012. package/packages/ai/src/api/openrouter-images.lazy.ts +0 -10
  1013. package/packages/ai/src/api/openrouter-images.ts +0 -98
  1014. package/packages/ai/src/auth/credential-store.ts +0 -51
  1015. package/packages/ai/src/compat/extension-oauth-types.ts +0 -45
  1016. package/packages/ai/src/image-models.generated.ts +0 -533
  1017. package/packages/ai/src/images-models.ts +0 -274
  1018. package/packages/ai/src/models-store.ts +0 -38
  1019. package/packages/ai/src/oauth.ts +0 -10
  1020. package/packages/ai/src/providers/openrouter-images.ts +0 -14
  1021. package/packages/ai/src/session-resources.ts +0 -24
  1022. package/packages/ai/src/utils/abort-signals.ts +0 -41
  1023. package/packages/ai/src/utils/deferred-tools.ts +0 -39
  1024. package/packages/ai/src/utils/hash.ts +0 -13
  1025. package/packages/ai/src/utils/node-http-proxy.ts +0 -112
  1026. package/plugins/ragents.actor-programs/server/client-runtime.ts +0 -16
  1027. package/plugins/ragents.ask/web/constants.ts +0 -1
  1028. package/plugins/ragents.lsp-roslyn/web/api.ts +0 -10
  1029. package/plugins/ragents.orchestration/web/CanvasStartup.tsx +0 -14
  1030. package/plugins/ragents.orchestration/web/canvas-view-settings.ts +0 -42
  1031. package/plugins/ragents.orchestration/web/column/AddresseeControl.tsx +0 -116
  1032. package/plugins/ragents.orchestration/web/column/column-settings.ts +0 -47
  1033. package/plugins/ragents.orchestration/web/column/column-state.ts +0 -68
  1034. package/plugins/ragents.orchestration/web/contract.ts +0 -25
  1035. package/plugins/ragents.product/model-settings-contract.ts +0 -10
  1036. package/plugins/ragents.profile-distribution/server/web.ts +0 -24
  1037. /package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/authoring-contracts.ts +0 -0
  1038. /package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/runtime-libraries.ts +0 -0
  1039. /package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/workflow/prompt-reader.ts +0 -0
  1040. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/file-contracts.d.ts +0 -0
  1041. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/flow-diagram-contracts.d.ts +0 -0
  1042. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/flow-diagram.css +0 -0
  1043. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/form-contracts.d.ts +0 -0
  1044. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/frame-layout.ts +0 -0
  1045. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/table-contracts.d.ts +0 -0
  1046. /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/viewer-contracts.d.ts +0 -0
  1047. /package/{plugins/ragents.orchestration/canvas.hbs → bundles/ragents.orchestration/surface.hbs} +0 -0
  1048. /package/packages/{agent-core/src → agent/src/loop}/index.ts +0 -0
  1049. /package/packages/{agent-core/src → agent/src/loop}/uuid.ts +0 -0
@@ -1,6 +1,7 @@
1
- import { getSupportedThinkingLevels, type Api, type Model } from "@aicontainer/ai";
2
- import { getBuiltinModels, type BuiltinProvider } from "@aicontainer/ai/providers/all";
3
- import { isThinkingLevel, thinkingLevels, type ThinkingLevel } from "@aicontainer/ragents";
1
+ import { getSupportedThinkingLevels, type Api, type Model } from "@ragents/ai";
2
+ import { getBuiltinModels, type BuiltinProvider } from "@ragents/ai/providers/all";
3
+ import { isThinkingLevel, thinkingLevels, type ThinkingLevel } from "@ragents/engine";
4
+ import { ALIAS_PROVIDER, aliasCatalog, modelDefaultThinking } from "./model-aliases.js";
4
5
  import type { DeclaredEnvironment } from "./plugin-config.js";
5
6
 
6
7
  export type ModelCatalogSource = () => readonly Model<Api>[];
@@ -8,7 +9,11 @@ export type ModelCatalogSource = () => readonly Model<Api>[];
8
9
  /** Der eingebaute Katalog eines Anbieters; ein Plugin kann einen eigenen Katalog liefern, etwa den eines Relays. */
9
10
  export const builtinCatalog = (provider: string): ModelCatalogSource => () => getBuiltinModels(provider as BuiltinProvider);
10
11
 
11
- export const modelThinkingOptions = (provider: string, model: string, catalog: ModelCatalogSource = builtinCatalog(provider)): readonly ThinkingLevel[] => {
12
+ /** Der Katalog, den die Modelllaufzeit für einen Anbieter kennt: die Aliasse des Profils oder den eingebauten. */
13
+ const providerCatalog = (provider: string): ModelCatalogSource =>
14
+ provider === ALIAS_PROVIDER ? () => aliasCatalog() : builtinCatalog(provider);
15
+
16
+ export const modelThinkingOptions = (provider: string, model: string, catalog: ModelCatalogSource = providerCatalog(provider)): readonly ThinkingLevel[] => {
12
17
  const metadata = catalog().find((entry) => entry.id === model);
13
18
  if (!metadata) throw new Error(`Das Modell ${provider}/${model} fehlt im Modellkatalog`);
14
19
  return getSupportedThinkingLevels(metadata);
@@ -20,6 +25,8 @@ export interface ModelChoice {
20
25
  readonly provider: string;
21
26
  readonly selectable: boolean;
22
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. */
29
+ defaultThinkingFor?(model: string): ThinkingLevel | undefined;
23
30
  }
24
31
 
25
32
  export const modelChoiceEnvDescriptors = [
@@ -40,7 +47,7 @@ export const modelChoiceFromEnvironment = (
40
47
  catalog?: ModelCatalogSource;
41
48
  },
42
49
  ): ModelChoice => {
43
- const catalog = defaults.catalog ?? builtinCatalog(defaults.provider);
50
+ const catalog = defaults.catalog ?? providerCatalog(defaults.provider);
44
51
  const raw = env.optional("MODEL_SELECTABLE");
45
52
  if (raw !== undefined && raw !== "" && raw !== "0" && raw !== "1") {
46
53
  throw new Error(`MODEL_SELECTABLE muss "0" oder "1" sein, nicht "${raw}"`);
@@ -50,9 +57,11 @@ export const modelChoiceFromEnvironment = (
50
57
  const options = (): readonly string[] => {
51
58
  if (resolvedOptions) return resolvedOptions;
52
59
  const configured = env.list("AGENT_MODELS");
53
- const list = configured.length > 0 ? configured : defaults.fallback();
54
- const duplicate = list.find((model, index) => list.indexOf(model) !== index);
60
+ const duplicate = configured.find((model, index) => configured.indexOf(model) !== index);
55
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.
63
+ const fallback = defaults.provider === ALIAS_PROVIDER ? catalog().map((model) => model.id) : defaults.fallback();
64
+ const list = configured.length > 0 ? configured : [...new Set(fallback)];
56
65
  resolvedOptions = Object.freeze([...list]);
57
66
  return resolvedOptions;
58
67
  };
@@ -105,5 +114,6 @@ export const modelChoiceFromEnvironment = (
105
114
  const selected = model ?? defaultModel();
106
115
  return reasoningMap().get(selected) ?? modelThinkingOptions(defaults.provider, selected, catalog);
107
116
  },
117
+ defaultThinkingFor: (model: string) => modelDefaultThinking(defaults.provider, model),
108
118
  });
109
119
  };
@@ -0,0 +1,58 @@
1
+ import { createModels, getSupportedThinkingLevels, type Api, type Model } from "@ragents/ai";
2
+ import { openrouterProvider } from "@ragents/ai/providers/openrouter";
3
+ import type { ThinkingLevel } from "@ragents/engine";
4
+
5
+ /** One question to a model, without history and without tools. */
6
+ export interface TextCompletionRequest {
7
+ readonly systemPrompt: string;
8
+ readonly text: string;
9
+ readonly thinking: ThinkingLevel;
10
+ readonly temperature: number;
11
+ readonly maxTokens: number;
12
+ readonly timeoutMs: number;
13
+ readonly signal: AbortSignal;
14
+ }
15
+
16
+ /** Text only when the model finished and answered with nothing but text; a cut, failed or aborted answer is unfinished. */
17
+ export type TextCompletion =
18
+ | { readonly kind: "text"; readonly text: string }
19
+ | { readonly kind: "unfinished" }
20
+ | { readonly kind: "not-text" };
21
+
22
+ export interface CompletionModel {
23
+ readonly id: string;
24
+ readonly thinkingLevels: readonly ThinkingLevel[];
25
+ readonly complete: (request: TextCompletionRequest) => Promise<TextCompletion>;
26
+ }
27
+
28
+ /** 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
+ export const openRouterCompletionModel = (id: string): CompletionModel | undefined => {
30
+ const models = createModels();
31
+ models.setProvider(openrouterProvider());
32
+ const selected = models.getModel("openrouter", id);
33
+ if (!selected) return undefined;
34
+ const model: Model<Api> = { ...selected, compat: { ...selected.compat,
35
+ openRouterRouting: { ...selected.compat?.openRouterRouting, sort: "latency" },
36
+ } };
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
+ };
58
+ };
@@ -1,5 +1,5 @@
1
- import type { Api, Model } from "@aicontainer/ai";
2
- import { serviceToken, type ServiceToken } from "@aicontainer/ragents";
1
+ import type { Api, Model } from "@ragents/ai";
2
+ import { serviceToken, type ServiceToken } from "@ragents/engine";
3
3
 
4
4
  /** Ein Modellanbieter, den dieser Server mit eigenem Schlüssel erreicht; das Relay reicht Aufrufe dorthin durch. */
5
5
  export interface ModelUpstream {
@@ -3,14 +3,15 @@ import { mkdir, realpath, symlink, writeFile } from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { build } from "esbuild";
6
- import type { NativeTypeScriptBinding, NativeTypeScriptExecutor, NativeTypeScriptRequest, NativeTypeScriptResult } from "@aicontainer/ragents";
7
- import type { JsonValue } from "@aicontainer/ragents";
8
- import { startManagedService, type ManagedService, type WorkspaceProcessContext } from "@aicontainer/workspace-executor";
6
+ import type { NativeTypeScriptBinding, NativeTypeScriptExecutor, NativeTypeScriptRequest, NativeTypeScriptResult } from "@ragents/engine";
7
+ import type { JsonValue } from "@ragents/engine";
8
+ import { sandboxedLaunch, startManagedService, type ManagedService, type WorkspaceProcessContext } from "@ragents/workspace-executor";
9
9
  import { syncWorkspaceOwnership } from "./workspace-ownership.js";
10
10
 
11
11
  interface ExecutorOptions {
12
12
  directoryFor(runId: string): string;
13
- processContextFor(runId: string): Promise<WorkspaceProcessContext>;
13
+ /** Die Node-Ausführung läuft immer auf dem Server, auch bei einem Arbeitsbereich auf einem Arbeitsplatz. */
14
+ serverProcessContextFor(runId: string): Promise<WorkspaceProcessContext>;
14
15
  }
15
16
  interface Backend {
16
17
  runId: string;
@@ -75,7 +76,7 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
75
76
 
76
77
  async #start(request: NativeTypeScriptRequest, instanceId: string, fingerprint: string, controller: AbortController, callerSignal?: AbortSignal): Promise<Backend> {
77
78
  const signal = callerSignal ? AbortSignal.any([controller.signal, callerSignal]) : controller.signal;
78
- const processContext = await this.#options.processContextFor(request.context.runId);
79
+ const processContext = await this.#options.serverProcessContextFor(request.context.runId);
79
80
  signal.throwIfAborted();
80
81
  const directory = path.join(this.#options.directoryFor(request.context.runId), createHash("sha256").update(instanceId).digest("hex"), fingerprint);
81
82
  await mkdir(directory, { recursive: true });
@@ -121,9 +122,11 @@ export class NodeTypeScriptExecutor implements NativeTypeScriptExecutor {
121
122
  backend.reject(error);
122
123
  backend.service.kill("SIGKILL");
123
124
  };
125
+ const launch = await sandboxedLaunch(processContext, { command: process.execPath, args: [path.join(directory, "__runner.mjs")] });
126
+ signal.throwIfAborted();
124
127
  backend.service = startManagedService({
125
- command: process.execPath,
126
- args: [path.join(directory, "__runner.mjs")],
128
+ command: launch.command,
129
+ args: [...launch.args],
127
130
  cwd: request.cwd ?? processContext.cwd,
128
131
  env: { ...processContext.env, RAGENTS_RUN_ID: request.context.runId },
129
132
  uid: processContext.uid, gid: processContext.gid,
@@ -1,4 +1,4 @@
1
- import type { PluginConfigDescriptor } from "@aicontainer/ragents";
1
+ import type { PluginConfigDescriptor } from "@ragents/engine";
2
2
  import { listFromEnvironmentValue } from "../config-file.js";
3
3
 
4
4
  export interface DeclaredEnvironment<Key extends string> {
@@ -5,7 +5,7 @@ import type {
5
5
  RAgentsPlugin,
6
6
  SkillContribution,
7
7
  StartEntryContribution,
8
- } from "@aicontainer/ragents";
8
+ } from "@ragents/engine";
9
9
  import { skillsFromDirectory, type FolderSkills } from "./skills.js";
10
10
  import { pluginFolder } from "./plugins-root.js";
11
11
  import { runScriptsFromDirectory, type ScriptStartEntry } from "./run-scripts.js";
@@ -13,6 +13,9 @@ import { systemPromptOptionsFromDirectory, type SystemPromptOption } from "./sys
13
13
 
14
14
  export { pluginFolder };
15
15
 
16
+ /** A file shipped in the plugin folder; code never locates it through its own module path. */
17
+ export const pluginAsset = (pluginId: string, name: string): string => path.join(pluginFolder(pluginId), name);
18
+
16
19
  const assetFolder = (folder: string, name: string): string | undefined => {
17
20
  const directory = path.join(folder, name);
18
21
  const stats = statSync(directory, { throwIfNoEntry: false });
@@ -1,4 +1,4 @@
1
- import type { PluginHost, RAgentsPlugin } from "@aicontainer/ragents";
1
+ import type { PluginHost, RAgentsPlugin } from "@ragents/engine";
2
2
 
3
3
  export interface PluginModule {
4
4
  readonly requires?: readonly string[];
@@ -3,15 +3,17 @@ import { homedir } from "node:os";
3
3
  import path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
 
6
- export const PLUGIN_SERVER_FOLDER = "server";
7
-
8
6
  export const pluginsRoot = path.resolve(
9
7
  path.dirname(fileURLToPath(import.meta.url)), "../../../../plugins");
10
8
 
9
+ /** The built-in plugins as bundles, built by pnpm build:plugins; an id in PLUGINS names a folder here. */
10
+ export const bundlesRoot = path.resolve(
11
+ path.dirname(fileURLToPath(import.meta.url)), "../../../../bundles");
12
+
11
13
  export const isPluginPath = (entry: string): boolean => /^(\.{1,2}\/|\/|~\/)/.test(entry);
12
14
 
13
- /** A profile names a plugin by id (a folder under plugins/) or by a path, relative to the profile file. */
14
- export const pluginFolderFor = (entry: string, base: string, root = pluginsRoot): string => {
15
+ /** A profile names a plugin by id (a folder under bundles/) or by a path, relative to the profile file. */
16
+ export const pluginFolderFor = (entry: string, base: string, root = bundlesRoot): string => {
15
17
  if (!isPluginPath(entry)) return path.join(root, entry);
16
18
  const expanded = entry.startsWith("~/") ? path.join(homedir(), entry.slice(2)) : entry;
17
19
  return path.resolve(base, expanded);
@@ -19,12 +21,6 @@ export const pluginFolderFor = (entry: string, base: string, root = pluginsRoot)
19
21
 
20
22
  export const pluginIdOf = (folder: string): string => path.basename(folder);
21
23
 
22
- export const WEB_ENTRY_FILES = ["web/index.ts", "web/index.tsx"] as const;
23
-
24
- export const webEntryOf = (folder: string): string | undefined =>
25
- WEB_ENTRY_FILES.map((name) => path.join(folder, name))
26
- .find((candidate) => statSync(candidate, { throwIfNoEntry: false })?.isFile() === true);
27
-
28
24
  const folders = new Map<string, string>();
29
25
 
30
26
  export const registerPluginFolder = (id: string, folder: string): void => {
@@ -0,0 +1,312 @@
1
+ import { spawn } from "node:child_process";
2
+ import { existsSync, readdirSync, realpathSync } from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { SandboxManager, type SandboxRuntimeConfig } from "@anthropic-ai/sandbox-runtime";
6
+ import { containsWorkspacePath, type ProcessLaunch, type ProcessSandbox } from "@ragents/workspace-executor";
7
+ import { hostRoot } from "../host-version.js";
8
+
9
+ /** Paketquellen und Git-Hosting, die Builds im Arbeitsbereich brauchen; der eigene Server kommt immer dazu. */
10
+ export const PROCESS_SANDBOX_DEFAULT_NETWORK: readonly string[] = [
11
+ "registry.npmjs.org",
12
+ "api.nuget.org",
13
+ "globalcdn.nuget.org",
14
+ "github.com",
15
+ "*.github.com",
16
+ "*.githubusercontent.com",
17
+ ];
18
+
19
+ /** Die Ordner eines Runs, aus denen seine Regeln entstehen; alles andere unter den geschützten Wurzeln bleibt ihm verborgen. */
20
+ export interface RunSandboxFolders {
21
+ readonly writable: readonly string[];
22
+ readonly readable: readonly string[];
23
+ /** Der eigene Temp-Ordner des Runs; er ist beschreibbar und steht in TMPDIR. */
24
+ readonly temporary: string;
25
+ }
26
+
27
+ /** Was der Sandbox-Host je Run von der Prozess-Sandbox braucht. */
28
+ export interface RunProcessSandboxes {
29
+ readonly forRun: (folders: RunSandboxFolders) => ProcessSandbox;
30
+ }
31
+
32
+ export interface ServerProcessSandboxOptions {
33
+ /** Erlaubte Ziele im Netz, Domains wie in der Profildatei; alles andere scheitert am Proxy. */
34
+ readonly network: readonly string[];
35
+ /** Die Adresse dieses Servers, etwa http://127.0.0.1:4710; ohne HTTP keine. */
36
+ readonly serverAddress: string | undefined;
37
+ readonly dataDirectory: string;
38
+ readonly hostRoot?: string;
39
+ readonly platform?: NodeJS.Platform;
40
+ readonly environment?: NodeJS.ProcessEnv;
41
+ }
42
+
43
+ const SELF_TEST_TIMEOUT_MS = 30_000;
44
+
45
+ const shellWord = (value: string): string => `'${value.replaceAll("'", "'\\''")}'`;
46
+
47
+ const shellCommand = (words: readonly string[]): string => words.map(shellWord).join(" ");
48
+
49
+ /** Die Umgebung innerhalb der Sandbox: eigener Temp-Ordner, und jeder Netzaufruf geht über den Proxy, auch der zum eigenen Server. */
50
+ const insideEnvironment = (temporary: string, searchPath: string, platform: NodeJS.Platform): readonly string[] => [
51
+ `PATH=${searchPath}`,
52
+ `TMPDIR=${temporary}`,
53
+ `TMP=${temporary}`,
54
+ `TEMP=${temporary}`,
55
+ "NO_PROXY=",
56
+ "no_proxy=",
57
+ "NODE_USE_ENV_PROXY=1",
58
+ // .NET verbindet sich sonst über IPv4-gemappte IPv6-Adressen mit dem Proxy, die die Sandbox von macOS nicht als localhost erkennt.
59
+ "DOTNET_SYSTEM_NET_DISABLEIPV6=1",
60
+ // Build-Knoten und Compiler-Server von .NET überleben den Befehl und nähmen sonst Builds anderer Runs in ihrer eigenen Sandbox an.
61
+ "MSBUILDDISABLENODEREUSE=1",
62
+ "DOTNET_CLI_USE_MSBUILD_SERVER=0",
63
+ "UseSharedCompilation=false",
64
+ // Die Werkzeug-Shims von macOS (git, clang) legen ihren Cache sonst im gesperrten Temp des Servers an.
65
+ ...platform === "darwin" ? [`xcrun_db=${path.join(temporary, "xcrun_db")}`] : [],
66
+ ];
67
+
68
+ const serverTarget = (address: string | undefined): readonly string[] => {
69
+ if (address === undefined) return [];
70
+ const url = new URL(address);
71
+ return [`${url.hostname}:${url.port}`];
72
+ };
73
+
74
+ const homeRoots = (platform: NodeJS.Platform): readonly string[] =>
75
+ platform === "darwin" ? ["/Users"] : ["/home", "/root"];
76
+
77
+ /** Der echte Pfad, auch für einen Ordner, den es noch nicht gibt: sein nächster vorhandener Vorfahr wird aufgelöst. */
78
+ const realOrGiven = (entry: string): string => {
79
+ try {
80
+ return realpathSync(entry);
81
+ } catch {
82
+ const parent = path.dirname(entry);
83
+ return parent === entry ? entry : path.join(realOrGiven(parent), path.basename(entry));
84
+ }
85
+ };
86
+
87
+ /** Ein Eintrag ist oft ein Symlink (fnm, Homebrew, /tmp unter macOS); die Sandbox prüft das Ziel. */
88
+ const resolvedTarget = (entry: string): readonly string[] => {
89
+ const target = realOrGiven(entry);
90
+ return target === entry ? [] : [target];
91
+ };
92
+
93
+ /** Unter Linux sind alle Unix-Sockets erlaubt; die Sockets, die aus der Sandbox hinausführen, bleiben deshalb unsichtbar. */
94
+ const hostSockets = (platform: NodeJS.Platform): readonly string[] =>
95
+ platform === "linux" ? ["/var/run/docker.sock", "/run/docker.sock"].filter((socket) => existsSync(socket)) : [];
96
+
97
+ /** Wo Geheimnisse und fremde Runs liegen können: Home-Ordner, Temp und der Datenordner des Servers. */
98
+ const protectedRoots = (options: ServerProcessSandboxOptions, platform: NodeJS.Platform): readonly string[] => [
99
+ os.homedir(),
100
+ ...homeRoots(platform),
101
+ os.tmpdir(),
102
+ "/tmp",
103
+ options.dataDirectory,
104
+ ...hostSockets(platform),
105
+ ].map(realOrGiven);
106
+
107
+ /** Was sich alle Runs teilen müssen: unter macOS legen .NET seine benannten Mutexe und MSBuild die Sockets seiner Build-Knoten fest unter /tmp an; unter Linux ist /tmp je Befehl ein eigener leerer Ordner. */
108
+ const sharedWritable = (platform: NodeJS.Platform): readonly string[] => platform === "darwin"
109
+ ? [".dotnet", `.dotnet-uid${os.userInfo().uid}`, "MSBuild*"].map((name) => path.join(realOrGiven("/tmp"), name))
110
+ : [];
111
+
112
+ /** Wo Prozesse der Sandbox Unix-Sockets anlegen und erreichen: im Datenordner (Temp der Runs) und unter macOS in /tmp für die Build-Knoten von MSBuild. */
113
+ const socketRoots = (dataDirectory: string, platform: NodeJS.Platform): readonly string[] =>
114
+ [dataDirectory, ...platform === "darwin" ? ["/tmp"] : []].map(realOrGiven);
115
+
116
+ /** Die Sandbox liest einen Symlink in einem gesperrten Ordner nicht (etwa fnm unter ~/.local/state); PATH nennt deshalb die Ziele. */
117
+ const resolvedSearchPath = (environment: NodeJS.ProcessEnv): string =>
118
+ [...new Set((environment.PATH ?? "").split(path.delimiter).filter((entry) => entry !== "").map(realOrGiven))].join(path.delimiter);
119
+
120
+ const isInside = (root: string, candidate: string): boolean => containsWorkspacePath(root, candidate);
121
+
122
+ const entriesOf = (directory: string): readonly string[] => {
123
+ try {
124
+ return readdirSync(directory).map((name) => path.join(directory, name));
125
+ } catch {
126
+ return [];
127
+ }
128
+ };
129
+
130
+ /** Ein freigegebener Ordner, der einen gesperrten enthält, wird in seine übrigen Einträge zerlegt; sonst hebelte er die Sperre aus oder die Sperre die Freigaben darin. */
131
+ const besideProtected = (entry: string, hidden: readonly string[]): readonly string[] => {
132
+ if (hidden.some((root) => isInside(root, entry))) return [];
133
+ if (!hidden.some((root) => isInside(entry, root))) return [entry];
134
+ return entriesOf(entry).flatMap((child) => besideProtected(child, hidden));
135
+ };
136
+
137
+ /** Bubblewrap bindet lesbare Ordner nach den beschreibbaren ein; ein lesbarer Vorfahr überdeckte einen beschreibbaren Ordner darin schreibgeschützt und wird deshalb in seine übrigen Einträge zerlegt. */
138
+ const readableBeside = (entry: string, writable: readonly string[]): readonly string[] => {
139
+ const inside = writable.filter((candidate) => isInside(entry, candidate));
140
+ if (inside.length === 0) return [entry];
141
+ if (inside.includes(entry)) return [];
142
+ return entriesOf(entry).flatMap((child) => readableBeside(child, inside));
143
+ };
144
+
145
+ /** Toolchains unter einem geschützten Ordner (etwa Node aus fnm oder dotnet-Werkzeuge im Home) bleiben lesbar, nie aber ein Vorfahr des Datenordners. */
146
+ const toolchainDirectories = (options: ServerProcessSandboxOptions, protectedPaths: readonly string[]): readonly string[] => {
147
+ const environment = options.environment ?? process.env;
148
+ const entries = [
149
+ ...(environment.PATH ?? "").split(path.delimiter),
150
+ environment.DOTNET_ROOT,
151
+ environment.PNPM_HOME,
152
+ path.dirname(path.dirname(process.execPath)),
153
+ ].filter((entry): entry is string => entry !== undefined && path.isAbsolute(entry));
154
+ const withTargets = entries.flatMap((entry) => [entry, ...resolvedTarget(entry)]);
155
+ const withPrefixes = withTargets.flatMap((entry) => path.basename(entry) === "bin" ? [entry, path.dirname(entry)] : [entry]);
156
+ const underProtected = withPrefixes.filter((entry) => protectedPaths.some((root) => isInside(root, entry)));
157
+ const safe = underProtected.filter((entry) => !protectedPaths.some((root) => isInside(entry, root)));
158
+ return [...new Set(safe)];
159
+ };
160
+
161
+ /** Was ein Server der Sandbox für alle seine Runs freigibt: Netzziele und die Ordner, in denen Unix-Sockets liegen dürfen. */
162
+ interface SandboxGrant {
163
+ readonly network: readonly string[];
164
+ readonly unixSockets: readonly string[];
165
+ }
166
+
167
+ /** Die Bibliothek hat genau einen Zustand je Prozess; mehrere Hosts in einem Prozess teilen ihn, ihre Netzfreigaben werden vereinigt. */
168
+ class SharedSandboxRuntime {
169
+ readonly #holders = new Map<object, SandboxGrant>();
170
+ #started: Promise<void> | undefined;
171
+
172
+ #config(): SandboxRuntimeConfig {
173
+ const grants = [...this.#holders.values()];
174
+ return {
175
+ network: {
176
+ allowedDomains: [...new Set(grants.flatMap((grant) => grant.network))],
177
+ deniedDomains: [],
178
+ allowUnixSockets: [...new Set(grants.flatMap((grant) => grant.unixSockets))],
179
+ // Linux kann Unix-Sockets nur ganz oder gar nicht sperren; die Build-Werkzeuge (MSBuild-Knoten) brauchen sie.
180
+ ...process.platform === "linux" ? { allowAllUnixSockets: true } : {},
181
+ },
182
+ filesystem: { denyRead: [], allowWrite: [], denyWrite: [], allowGitConfig: true },
183
+ // Unter macOS prüfen .NET und Go Zertifikate über trustd; ohne diesen Dienst scheitert jedes TLS.
184
+ ...process.platform === "darwin" ? { enableWeakerNetworkIsolation: true } : {},
185
+ };
186
+ }
187
+
188
+ async acquire(holder: object, grant: SandboxGrant): Promise<void> {
189
+ this.#holders.set(holder, grant);
190
+ if (!this.#started) {
191
+ this.#started = SandboxManager.initialize(this.#config());
192
+ await this.#started.catch((error: unknown) => {
193
+ this.#holders.delete(holder);
194
+ this.#started = undefined;
195
+ throw error;
196
+ });
197
+ return;
198
+ }
199
+ await this.#started;
200
+ SandboxManager.updateConfig(this.#config());
201
+ }
202
+
203
+ async release(holder: object): Promise<void> {
204
+ if (!this.#holders.delete(holder)) return;
205
+ if (this.#holders.size > 0) {
206
+ SandboxManager.updateConfig(this.#config());
207
+ return;
208
+ }
209
+ this.#started = undefined;
210
+ await SandboxManager.reset();
211
+ }
212
+ }
213
+
214
+ const sharedRuntime = new SharedSandboxRuntime();
215
+
216
+ const unsupported = (platform: NodeJS.Platform): Error => new Error(platform === "win32"
217
+ ? "Die Prozess-Sandbox gibt es auf einem Windows-Server nicht: dort lassen sich die Ordnerregeln je Run nicht setzen. "
218
+ + "Wer den Server trotzdem unter Windows betreibt, schaltet sie in der Profildatei ausdrücklich ab: "
219
+ + "PROCESS_SANDBOX: \"off\" in der Sektion ragents.workspace."
220
+ : `Die Prozess-Sandbox kennt die Plattform ${platform} nicht; unterstützt sind macOS und Linux. `
221
+ + "PROCESS_SANDBOX: \"off\" in der Sektion ragents.workspace schaltet sie ausdrücklich ab.");
222
+
223
+ const missingDependencies = (errors: readonly string[]): Error => new Error(
224
+ `Die Prozess-Sandbox kann nicht starten: ${errors.join("; ")}. `
225
+ + "Unter Linux braucht sie bubblewrap, socat und ripgrep (Debian/Ubuntu: apt-get install bubblewrap socat ripgrep). "
226
+ + "PROCESS_SANDBOX: \"off\" in der Sektion ragents.workspace schaltet sie ausdrücklich ab.");
227
+
228
+ const failedSelfTest = (detail: string): Error => new Error(
229
+ `Die Prozess-Sandbox lässt sich auf diesem Rechner nicht starten: ${detail.trim() || "ohne Ausgabe"}. `
230
+ + "Unter Linux braucht bubblewrap Benutzer-Namensräume; in einem Container muss das Profil des Containers sie erlauben. "
231
+ + "PROCESS_SANDBOX: \"off\" in der Sektion ragents.workspace schaltet sie ausdrücklich ab.");
232
+
233
+ const runSelfTest = (launch: ProcessLaunch, environment: NodeJS.ProcessEnv): Promise<void> => new Promise((resolve, reject) => {
234
+ const child = spawn(launch.command, [...launch.args], { stdio: ["ignore", "ignore", "pipe"], env: environment });
235
+ let stderr = "";
236
+ const timer = setTimeout(() => {
237
+ child.kill("SIGKILL");
238
+ reject(failedSelfTest(`keine Antwort nach ${SELF_TEST_TIMEOUT_MS / 1000} Sekunden`));
239
+ }, SELF_TEST_TIMEOUT_MS);
240
+ child.stderr.on("data", (chunk: Buffer) => { stderr = (stderr + chunk.toString("utf8")).slice(-2_000); });
241
+ child.once("error", (error) => {
242
+ clearTimeout(timer);
243
+ reject(failedSelfTest(error.message));
244
+ });
245
+ child.once("close", (code) => {
246
+ clearTimeout(timer);
247
+ if (code === 0) resolve();
248
+ else reject(failedSelfTest(`Code ${code ?? "Signal"}: ${stderr}`));
249
+ });
250
+ });
251
+
252
+ /** Die Prozess-Sandbox des Servers: jeder Prozess eines Runs, den der Executor des Servers startet, läuft mit den Ordnern und Netzzielen seines Runs. */
253
+ export class ServerProcessSandbox implements RunProcessSandboxes {
254
+ readonly #options: ServerProcessSandboxOptions;
255
+ readonly #platform: NodeJS.Platform;
256
+ readonly #protected: readonly string[];
257
+ readonly #readable: readonly string[];
258
+ readonly #searchPath: string;
259
+
260
+ constructor(options: ServerProcessSandboxOptions) {
261
+ this.#options = options;
262
+ this.#platform = options.platform ?? process.platform;
263
+ if (this.#platform !== "darwin" && this.#platform !== "linux") throw unsupported(this.#platform);
264
+ this.#protected = protectedRoots(options, this.#platform);
265
+ this.#readable = [options.hostRoot ?? hostRoot(), ...toolchainDirectories(options, this.#protected)];
266
+ this.#searchPath = resolvedSearchPath(options.environment ?? process.env);
267
+ }
268
+
269
+ /** Prüft die Voraussetzungen, startet den Netz-Proxy und startet einmal einen Prozess in der Sandbox; jedes Scheitern ist ein Startfehler. */
270
+ async start(): Promise<void> {
271
+ const { errors } = SandboxManager.checkDependencies();
272
+ if (errors.length > 0) throw missingDependencies(errors);
273
+ await sharedRuntime.acquire(this, {
274
+ network: [...this.#options.network, ...serverTarget(this.#options.serverAddress)],
275
+ unixSockets: socketRoots(this.#options.dataDirectory, this.#platform),
276
+ });
277
+ try {
278
+ const probe = this.forRun({ writable: [], readable: [], temporary: path.join(this.#options.dataDirectory, "sandbox-self-test") });
279
+ await runSelfTest(await probe.wrap({ command: "true", args: [] }), this.#options.environment ?? process.env);
280
+ } catch (error) {
281
+ await sharedRuntime.release(this);
282
+ throw error;
283
+ }
284
+ }
285
+
286
+ stop(): Promise<void> {
287
+ return sharedRuntime.release(this);
288
+ }
289
+
290
+ forRun(folders: RunSandboxFolders): ProcessSandbox {
291
+ const bridges = [SandboxManager.getLinuxHttpSocketPath(), SandboxManager.getLinuxSocksSocketPath()]
292
+ .filter((socket): socket is string => socket !== undefined);
293
+ const environment = insideEnvironment(folders.temporary, this.#searchPath, this.#platform);
294
+ const allowed = (entries: readonly string[]): readonly string[] => entries.map(realOrGiven)
295
+ .flatMap((entry) => besideProtected(entry, this.#protected.filter((root) => !isInside(root, entry))));
296
+ return {
297
+ wrap: async (launch) => {
298
+ const writable = allowed([...folders.writable, folders.temporary, ...sharedWritable(this.#platform)]);
299
+ const readable = allowed([...this.#readable, ...folders.readable]).flatMap((entry) => readableBeside(entry, writable));
300
+ const filesystem = {
301
+ denyRead: [...this.#protected],
302
+ allowRead: [...bridges, ...readable, ...writable],
303
+ allowWrite: [...writable],
304
+ denyWrite: [],
305
+ };
306
+ const inner = shellCommand(["env", ...environment, launch.command, ...launch.args]);
307
+ const wrapped = await SandboxManager.wrapWithSandbox(inner, undefined, { filesystem });
308
+ return { command: "/bin/sh", args: ["-c", wrapped] };
309
+ },
310
+ };
311
+ }
312
+ }
@@ -1,7 +1,16 @@
1
1
  import { Type } from "typebox";
2
- import { defineOperation } from "@aicontainer/ragents/src/rpc/contract";
3
- import { openJson } from "@aicontainer/ragents/src/http/contracts";
4
- import type { ProductModelDraft, ProductModelSettings } from "../../../../plugins/ragents.product/model-settings-contract.js";
2
+ import { defineOperation } from "@ragents/engine/src/rpc/contract";
3
+ import { openJson } from "@ragents/engine/src/http/contracts";
4
+ import type { ThinkingLevel } from "@ragents/engine/src/domain/driver";
5
+
6
+ export interface ProductModelDraft {
7
+ profiles: { name: string; model: string; thinking: ThinkingLevel }[];
8
+ }
9
+
10
+ export interface ProductModelSettings {
11
+ profiles: (ProductModelDraft["profiles"][number] & { description: string; provider: string })[];
12
+ models: { id: string; provider: string; label: string; thinking: readonly ThinkingLevel[] }[];
13
+ }
5
14
 
6
15
  const settings = openJson<ProductModelSettings>("ProductModelSettings");
7
16
 
@@ -9,14 +18,14 @@ const settings = openJson<ProductModelSettings>("ProductModelSettings");
9
18
  export const productModelSettingsContracts = (pluginId: string) => ({
10
19
  read: defineOperation({
11
20
  id: `${pluginId}.modelSettings.read`,
12
- description: "Die Modellvorgaben der Agentprofile mit dem verfügbaren Modellkatalog. Recht: settings.read.",
21
+ description: "Die Modellvorgaben der Rollen mit dem verfügbaren Modellkatalog. Recht: settings.read.",
13
22
  rights: ["settings.read"],
14
23
  input: Type.Object({}, { additionalProperties: false }),
15
24
  result: settings,
16
25
  }),
17
26
  save: defineOperation({
18
27
  id: `${pluginId}.modelSettings.save`,
19
- description: "Die Modellvorgaben der Agentprofile speichern. Rechte: settings.read und settings.write.",
28
+ description: "Die Modellvorgaben der Rollen speichern. Rechte: settings.read und settings.write.",
20
29
  rights: ["settings.read", "settings.write"],
21
30
  input: Type.Object({ value: openJson<ProductModelDraft>("ProductModelDraft") }, { additionalProperties: false }),
22
31
  result: settings,
@@ -1,10 +1,10 @@
1
1
  import { readFileSync, renameSync } from "node:fs";
2
2
  import { mkdir, writeFile } from "node:fs/promises";
3
3
  import path from "node:path";
4
- import { DomainError, implement, isThinkingLevel, type AgentProfile, type MethodContribution, type ThinkingLevel } from "@aicontainer/ragents";
5
- import type { ProductModelDraft, ProductModelSettings } from "../../../../plugins/ragents.product/model-settings-contract.js";
4
+ import { DomainError, implement, isThinkingLevel, type AgentProfile, type MethodContribution, type ThinkingLevel } from "@ragents/engine";
5
+ import { modelLabel } from "./model-aliases.js";
6
6
  import type { ModelChoice } from "./model-choice.js";
7
- import { productModelSettingsContracts } from "./product-model-settings-contract.js";
7
+ import { productModelSettingsContracts, type ProductModelDraft, type ProductModelSettings } from "./product-model-settings-contract.js";
8
8
 
9
9
  type AgentModelProfile = Extract<AgentProfile, { driver: "agent" }>;
10
10
 
@@ -42,6 +42,7 @@ export class ProductModelSettingsStore {
42
42
  get selectable() { return choice.selectable; },
43
43
  get defaultModel() { return store.#selection("coordinator").model; },
44
44
  thinkingOptionsFor: (model) => choice.thinkingOptionsFor(model ?? store.#selection("coordinator").model),
45
+ ...(choice.defaultThinkingFor ? { defaultThinkingFor: choice.defaultThinkingFor } : {}),
45
46
  };
46
47
  }
47
48
 
@@ -61,7 +62,7 @@ export class ProductModelSettingsStore {
61
62
  profiles: this.profiles().filter((profile): profile is AgentModelProfile => profile.driver === "agent")
62
63
  .map(({ name, description, provider, model, thinking }) => ({ name, description, provider, model, thinking: thinking! })),
63
64
  models: this.#choice.options.map((id) => ({
64
- id, provider: this.#choice.provider, label: `${this.#choice.provider}/${id}`,
65
+ id, provider: this.#choice.provider, label: modelLabel(this.#choice.provider, id),
65
66
  thinking: [...this.#choice.thinkingOptionsFor(id)],
66
67
  })),
67
68
  };
@@ -86,22 +87,22 @@ export class ProductModelSettingsStore {
86
87
 
87
88
  #selection(name: string): ProductModelDraft["profiles"][number] {
88
89
  const selected = this.#current.profiles.find((profile) => profile.name === name);
89
- if (!selected) throw invalid(`Das Agentprofil ${name} hat keine Modellvorgabe.`);
90
+ if (!selected) throw invalid(`Die Rolle ${name} hat keine Modellvorgabe.`);
90
91
  return selected;
91
92
  }
92
93
 
93
94
  #validate(value: unknown): ProductModelDraft {
94
95
  const { profiles } = objectOf(value, ["profiles"]);
95
96
  const expected = this.#agentProfiles();
96
- if (!Array.isArray(profiles) || profiles.length !== expected.length) throw invalid(`Vollständig erforderlich sind die Agentprofile: ${expected.map((profile) => profile.name).join(", ")}.`);
97
+ if (!Array.isArray(profiles) || profiles.length !== expected.length) throw invalid(`Vollständig erforderlich sind die Rollen: ${expected.map((profile) => profile.name).join(", ")}.`);
97
98
  const seen = new Set<string>();
98
99
  const validated = profiles.map((item: unknown) => {
99
100
  const entry = objectOf(item, ["name", "model", "thinking"]);
100
101
  const profile = expected.find((candidate) => candidate.name === entry.name);
101
- if (!profile) throw invalid(`Unbekanntes Agentprofil ${String(entry.name)}.`);
102
- if (seen.has(profile.name)) throw invalid(`Das Agentprofil ${profile.name} steht doppelt.`);
102
+ if (!profile) throw invalid(`Unbekannte Rolle ${String(entry.name)}.`);
103
+ if (seen.has(profile.name)) throw invalid(`Die Rolle ${profile.name} steht doppelt.`);
103
104
  seen.add(profile.name);
104
- if (profile.provider !== this.#choice.provider) throw invalid(`Das Agentprofil ${profile.name} verwendet einen anderen Provider.`);
105
+ if (profile.provider !== this.#choice.provider) throw invalid(`Die Rolle ${profile.name} verwendet einen anderen Provider.`);
105
106
  if (typeof entry.model !== "string" || !this.#choice.options.includes(entry.model)) throw invalid(`Das Modell ${String(entry.model)} steht nicht zur Wahl.`);
106
107
  const allowed = this.#choice.thinkingOptionsFor(entry.model);
107
108
  if (!isThinkingLevel(entry.thinking) || !allowed.includes(entry.thinking)) throw invalid(`Die Denktiefe ${String(entry.thinking)} ist für ${entry.model} nicht verfügbar (gültig: ${allowed.join(", ")}).`);