@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,33 +1,40 @@
1
- import { realpath } from "node:fs/promises";
1
+ import { mkdir, realpath } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import {
4
+ DomainError,
4
5
  serviceToken,
5
6
  type RunFunction,
6
7
  type PluginContext,
7
8
  type ToolContributor,
8
- } from "@aicontainer/ragents";
9
+ type ToolScope,
10
+ } from "@ragents/engine";
9
11
  import {
10
12
  createBashToolDefinition,
11
13
  createEditToolDefinition,
12
14
  createReadToolDefinition,
13
15
  createWriteToolDefinition,
14
- } from "@aicontainer/agent";
16
+ } from "@ragents/agent";
15
17
  import {
16
- SandboxWorkspaceExecutor,
18
+ WorkspaceOperationError,
19
+ WorkspaceOperationExecutor,
17
20
  resolvedWorkspacePath,
18
21
  sandboxRunEnvironment,
19
- workspaceLanguageServers,
22
+ workspaceExecutorModules,
20
23
  workspaceProcessContext,
24
+ type AddressedRoots,
21
25
  type ResolvedWorkspaceRoot,
22
26
  type SandboxHomeEnvironment,
27
+ type SeenFile,
23
28
  type SessionIdent,
24
29
  type WorkspaceExecuteOptions,
25
30
  type WorkspaceExecutor,
26
31
  type WorkspaceProcessContext,
27
- } from "@aicontainer/workspace-executor";
32
+ } from "@ragents/workspace-executor";
28
33
  import { hostRoot } from "../host-version.js";
29
- import type { SessionWorkspace } from "../ragents/workspace-runtime.js";
30
- import { agentToolFrom, toolDescriptorFrom, type AgentToolDefinition } from "./agent-tool.js";
34
+ import type { SandboxFolder, SessionWorkspace } from "../ragents/workspace-runtime.js";
35
+ import { agentToolFrom, textOf, toolDescriptorFrom, type AgentToolDefinition, type ToolOutput } from "./agent-tool.js";
36
+ import type { RunProcessSandboxes } from "./process-sandbox.js";
37
+ import { SKILLS_ALIAS, skillRootAlias } from "./skills.js";
31
38
  import { alwaysAvailable } from "./tool-availability.js";
32
39
  import { syncWorkspaceOwnership } from "./workspace-ownership.js";
33
40
 
@@ -39,13 +46,26 @@ export interface RegisteredWorkspaceRoot {
39
46
  ownershipDirectoryFor?: (runId: string) => string | Promise<string>;
40
47
  }
41
48
 
49
+ /** Eine Wurzel des Servers, wie ein Prompt sie nennt: ihr Alias, ob Werkzeuge darin schreiben dürfen, und die Variable, die sie in einer Bash auf dem Server nennt. */
50
+ export interface ServerRootDescription {
51
+ readonly alias: string;
52
+ readonly writable: boolean;
53
+ readonly environmentVariable?: string;
54
+ }
55
+
56
+ /** Der einzige Zugang der Plugins zum Arbeitsbereich eines Runs: eine Operation läuft beim Executor der Maschine, der die angesprochene Wurzel gehört. */
42
57
  export interface SandboxServices {
43
- processContextFor: (runId: string) => Promise<WorkspaceProcessContext>;
58
+ execute: (runId: string, operation: string, input: unknown, options?: WorkspaceExecuteOptions) => Promise<unknown>;
59
+ /** Der Kontext für Arbeit, die auf dem Server läuft (TypeScript-Plattform, Actor-Programme); nie der Ordner eines Arbeitsplatzes. */
60
+ serverProcessContextFor: (runId: string) => Promise<WorkspaceProcessContext>;
44
61
  registerWorkspaceRoot: (root: RegisteredWorkspaceRoot) => void;
45
- execute: (runId: string, tool: string, input: unknown, options?: WorkspaceExecuteOptions) => Promise<unknown>;
46
62
  shutdown: (runId: string) => Promise<void>;
47
63
  }
48
64
 
65
+ /** Ein fachlicher Fehler des Executors sieht beim Aufrufer aus wie jeder andere Fehler des Servers. */
66
+ export const withDomainCause = (error: unknown): unknown =>
67
+ error instanceof WorkspaceOperationError ? new DomainError(error.code, error.message, error.status) : error;
68
+
49
69
  export const sandboxServicesToken = serviceToken<SandboxServices>("ragents.workspace.sandbox-services");
50
70
 
51
71
  export interface WorkspaceSandboxHostOptions {
@@ -55,15 +75,21 @@ export interface WorkspaceSandboxHostOptions {
55
75
  skillPaths: () => Promise<readonly string[]>;
56
76
  homeFor: (runId: string) => Promise<SandboxHomeEnvironment>;
57
77
  storageRootFor?: (runId: string) => string;
58
- /** Der Executor des Runs; ohne Antwort führt der Executor des Servers aus. */
78
+ /** Der Executor eines Runs, der nicht auf dem Server arbeitet; ohne Antwort führt der Executor des Servers aus. */
59
79
  executorFor?: (runId: string) => Promise<WorkspaceExecutor | undefined>;
80
+ /** Der eigene Ordner eines solchen Runs auf dem Server, für Arbeit, die dort läuft. */
81
+ serverDirectoryFor?: (runId: string) => Promise<string>;
82
+ /** Die Prozess-Sandbox, in der jeder Prozess des Executors dieses Servers startet; ohne sie laufen Prozesse ohne. */
83
+ processSandbox?: RunProcessSandboxes;
84
+ /** Die Bash des Executors dieses Servers; unter Windows Pflicht, sonst ohne Angabe die des Systems. */
85
+ bash?: string;
60
86
  }
61
87
 
62
88
  const sandboxDescriptions: Readonly<Record<string, string>> = {
63
89
  read: "Read file contents or images within the run's allowed workspace roots.",
64
90
  edit: "Apply exact text replacements to existing files within the run's writable workspace roots.",
65
91
  write: "Create or overwrite files within the run's writable workspace roots.",
66
- bash: "Execute shell commands in the run's workspace with sandbox restrictions.",
92
+ bash: "Execute shell commands in the run's workspace, or with cwd in one of its roots, with sandbox restrictions.",
67
93
  };
68
94
 
69
95
  const describeSandboxTool = (definition: AgentToolDefinition): AgentToolDefinition => {
@@ -82,24 +108,51 @@ const sandboxDescriptorDefinitions = [
82
108
  const sandboxDescriptors = sandboxDescriptorDefinitions.map((definition) =>
83
109
  toolDescriptorFrom(describeSandboxTool(definition), alwaysAvailable));
84
110
 
111
+ const fileToolNames = new Set(["read", "edit", "write"]);
112
+
85
113
  interface StableRunParts {
86
114
  ident?: SessionIdent;
87
115
  home: SandboxHomeEnvironment;
88
116
  readOnlyRoots: readonly ResolvedWorkspaceRoot[];
117
+ /** Der eigene Temp-Ordner des Runs in der Sandbox. */
118
+ temporary?: string;
89
119
  }
90
120
 
91
- /** Der Executor des Servers, seine Wurzeln und die Weiterreichung der Arbeitsplatz-Werkzeuge an den Executor des Runs. */
121
+ const mixedRoots = (aliases: readonly string[]): DomainError => new DomainError(
122
+ "workspace-roots-mixed",
123
+ `Der Aufruf nennt ${aliases.join(", ")} auf dem Server und zugleich einen Pfad im Arbeitsbereich auf dem Arbeitsplatz; `
124
+ + "ein Aufruf erreicht nur einen Rechner. Teile ihn in einen Aufruf je Rechner.",
125
+ 400,
126
+ );
127
+
128
+ /** Die Ordner, die ein Arbeitsbereich der Prozess-Sandbox zusätzlich öffnet, getrennt nach Zugriff; ein relativer Pfad hätte auf dem Server keinen Ort. */
129
+ const sandboxFoldersWith = (folders: readonly SandboxFolder[], access: SandboxFolder["access"]): string[] =>
130
+ folders.filter((folder) => folder.access === access).map((folder) => {
131
+ if (!path.isAbsolute(folder.directory)) throw new Error(`Der Ordner ${folder.directory} für die Prozess-Sandbox muss absolut sein`);
132
+ return folder.directory;
133
+ });
134
+
135
+ /** Ein nur lesbarer Pfad, den es nicht gibt, ist keine Wurzel; ein fehlender Skill-Ordner darf keinen Run verhindern. */
136
+ const existingRoots = async (roots: readonly ResolvedWorkspaceRoot[]): Promise<ResolvedWorkspaceRoot[]> => {
137
+ const resolved = await Promise.all(roots.map((root) =>
138
+ realpath(root.directory).then((directory) => ({ ...root, directory }), () => undefined)));
139
+ return resolved.filter((root) => root !== undefined);
140
+ };
141
+
142
+ /** Der Executor des Servers mit den Wurzeln des Servers; eine Operation mit Alias läuft dort, jede andere beim Executor der Bindung des Runs. */
92
143
  export class WorkspaceSandboxHost implements SandboxServices {
93
144
  readonly #options: WorkspaceSandboxHostOptions;
94
145
  readonly #workspaceRoots: RegisteredWorkspaceRoot[] = [];
95
- readonly #local: SandboxWorkspaceExecutor;
146
+ readonly #local: WorkspaceOperationExecutor;
96
147
  readonly #stable = new Map<string, Promise<StableRunParts>>();
148
+ /** Je Run der Dateistand, den ein Modell zuletzt gesehen hat, nach Actor, Modellkontext und Pfad; nur im Speicher, ein Verlust verlangt höchstens ein neues read. */
149
+ readonly #seen = new Map<string, Map<string, SeenFile>>();
97
150
 
98
151
  constructor(options: WorkspaceSandboxHostOptions) {
99
152
  this.#options = options;
100
- this.#local = new SandboxWorkspaceExecutor({
101
- contextFor: (runId) => this.processContextFor(runId),
102
- languageServers: workspaceLanguageServers,
153
+ this.#local = new WorkspaceOperationExecutor({
154
+ contextFor: (runId) => this.serverProcessContextFor(runId),
155
+ modules: workspaceExecutorModules(),
103
156
  });
104
157
  }
105
158
 
@@ -107,8 +160,9 @@ export class WorkspaceSandboxHost implements SandboxServices {
107
160
  if (!root.id.trim() || this.#workspaceRoots.some((entry) => entry.id === root.id)) {
108
161
  throw new Error(`Arbeitsverzeichnis ${root.id} ist leer oder bereits registriert`);
109
162
  }
110
- if (root.alias && (!/^@[a-z][a-z0-9-]*$/.test(root.alias) || this.#workspaceRoots.some((entry) => entry.alias === root.alias))) {
111
- throw new Error(`Arbeitsverzeichnis-Alias ${root.alias} ist ungültig oder bereits registriert`);
163
+ if (root.alias && (!/^@[a-z][a-z0-9-]*$/.test(root.alias) || root.alias === SKILLS_ALIAS
164
+ || this.#workspaceRoots.some((entry) => entry.alias === root.alias))) {
165
+ throw new Error(`Arbeitsverzeichnis-Alias ${root.alias} ist ungültig, dem Host vorbehalten oder bereits registriert`);
112
166
  }
113
167
  if (root.environmentVariable && (!/^RAGENTS_[A-Z_]+_DIR$/.test(root.environmentVariable) || this.#workspaceRoots.some((entry) => entry.environmentVariable === root.environmentVariable))) {
114
168
  throw new Error(`Arbeitsverzeichnis-Variable ${root.environmentVariable} ist ungültig oder bereits registriert`);
@@ -129,24 +183,71 @@ export class WorkspaceSandboxHost implements SandboxServices {
129
183
  return roots.filter((root) => root !== undefined);
130
184
  }
131
185
 
132
- async processContextFor(runId: string): Promise<WorkspaceProcessContext> {
186
+ /** Die Wurzeln des Servers mit Alias, die ein Run neben seinem Arbeitsbereich erreicht: die registrierten und die Skill-Ordner. */
187
+ async serverRoots(): Promise<readonly ServerRootDescription[]> {
188
+ const registered = this.#workspaceRoots.flatMap(({ alias, environmentVariable }) => alias === undefined ? [] : [{
189
+ alias, writable: true, ...(environmentVariable === undefined ? {} : { environmentVariable }),
190
+ }]);
191
+ const skills = (await this.#options.skillPaths()).length > 0 ? [{ alias: SKILLS_ALIAS, writable: false }] : [];
192
+ return [...registered, ...skills];
193
+ }
194
+
195
+ /** Bei einem Run mit eigenem Executor ein Ordner des Runs auf dem Server, sonst derselbe Kontext wie für seine Werkzeuge. */
196
+ async serverProcessContextFor(runId: string): Promise<WorkspaceProcessContext> {
197
+ if (!await this.#options.executorFor?.(runId)) return this.#contextFor(runId);
198
+ const serverDirectoryFor = this.#options.serverDirectoryFor;
199
+ if (!serverDirectoryFor) throw new Error(`Der Run ${runId} arbeitet nicht auf dem Server, und der Sandbox-Host kennt keinen Serverordner für ihn`);
200
+ return this.#contextFor(runId, await serverDirectoryFor(runId));
201
+ }
202
+
203
+ /** Der Kontext des Executors dieses Servers; ohne eigenen Ordner der Arbeitsbereich selbst, der dafür auf dem Server liegen muss. */
204
+ async #contextFor(runId: string, serverDirectory?: string): Promise<WorkspaceProcessContext> {
133
205
  const workspace = await this.#options.workspaceFor(runId);
134
- const { ident, home, readOnlyRoots } = await this.#stableParts(runId, workspace);
206
+ const { ident, home, readOnlyRoots, temporary } = await this.#stableParts(runId, workspace);
207
+ const root = serverDirectory ?? await workspace.currentRoot();
208
+ const additionalRoots = await this.#additionalRoots(runId, ident);
209
+ const folders = workspace.sandboxFolders ?? [];
210
+ const sandbox = this.#options.processSandbox && temporary !== undefined
211
+ ? this.#options.processSandbox.forRun({
212
+ writable: [
213
+ root, ...additionalRoots.map((entry) => entry.directory), home.home, ...home.nugetPackages ? [home.nugetPackages] : [],
214
+ ...sandboxFoldersWith(folders, "write"),
215
+ ],
216
+ readable: [
217
+ ...readOnlyRoots.map((entry) => entry.directory), ...this.#options.storageRootFor ? [this.#options.storageRootFor(runId)] : [],
218
+ ...sandboxFoldersWith(folders, "read"),
219
+ ],
220
+ temporary,
221
+ })
222
+ : undefined;
135
223
  return workspaceProcessContext({
136
224
  runId,
137
- cwd: workspace.cwd,
138
- root: await workspace.currentRoot(),
225
+ cwd: serverDirectory ?? workspace.cwd,
226
+ root,
139
227
  home,
140
228
  logDirectory: home.home,
141
229
  hostRoot: hostRoot(),
142
230
  ...(ident ? { ident } : {}),
143
- additionalRoots: await this.#additionalRoots(runId, ident),
231
+ additionalRoots,
144
232
  readOnlyRoots,
145
233
  additions: sandboxRunEnvironment(runId, workspace),
146
234
  runOperation: workspace.runOperation,
235
+ ...(sandbox ? { sandbox } : {}),
236
+ ...(this.#options.bash === undefined ? {} : { bash: this.#options.bash }),
147
237
  });
148
238
  }
149
239
 
240
+ /** Der Temp-Ordner eines Runs liegt in seiner Ablage, damit er mit dem Run verschwindet und kein anderer Run ihn sieht. */
241
+ async #temporaryFor(runId: string, ident: SessionIdent | undefined): Promise<string | undefined> {
242
+ if (!this.#options.processSandbox) return undefined;
243
+ const storageRoot = this.#options.storageRootFor?.(runId);
244
+ if (!storageRoot) throw new Error(`Die Prozess-Sandbox braucht die Ablage des Runs ${runId} für seinen Temp-Ordner`);
245
+ const directory = path.join(storageRoot, "tmp");
246
+ await mkdir(directory, { recursive: true });
247
+ if (ident) await syncWorkspaceOwnership(directory, { ...ident, storageRoot });
248
+ return realpath(directory);
249
+ }
250
+
150
251
  /** Kennung, Heimatordner und nur lesbare Wurzeln stehen je Run fest; nur sie werden gemerkt. */
151
252
  #stableParts(runId: string, workspace: SessionWorkspace): Promise<StableRunParts> {
152
253
  const known = this.#stable.get(runId);
@@ -161,17 +262,27 @@ export class WorkspaceSandboxHost implements SandboxServices {
161
262
 
162
263
  async #resolveStableParts(runId: string, workspace: SessionWorkspace): Promise<StableRunParts> {
163
264
  if (workspace.hostSandbox) {
164
- const readOnlyRoots = await Promise.all(workspace.hostSandbox.readOnlyRoots.map(async (root) =>
165
- ({ ...root, directory: await realpath(root.directory) })));
166
- return { home: { home: workspace.hostSandbox.home }, readOnlyRoots };
265
+ const { home, ident } = workspace.hostSandbox;
266
+ const temporary = await this.#temporaryFor(runId, ident);
267
+ return {
268
+ ...(ident ? { ident } : {}),
269
+ home: { home },
270
+ readOnlyRoots: await existingRoots(workspace.hostSandbox.readOnlyRoots),
271
+ ...(temporary ? { temporary } : {}),
272
+ };
167
273
  }
168
274
  const [ident, home, skills] = await Promise.all([
169
275
  this.#options.identFor(runId),
170
276
  this.#options.homeFor(runId),
171
277
  this.#options.skillPaths(),
172
278
  ]);
173
- const resolved = await Promise.all(skills.map((directory) => realpath(directory).then((real) => ({ directory: real }), () => undefined)));
174
- return { ...(ident ? { ident } : {}), home, readOnlyRoots: resolved.filter((root) => root !== undefined) };
279
+ const temporary = await this.#temporaryFor(runId, ident);
280
+ return {
281
+ ...(ident ? { ident } : {}),
282
+ home,
283
+ readOnlyRoots: await existingRoots(skills.map((directory) => ({ directory, alias: skillRootAlias(path.basename(directory)) }))),
284
+ ...(temporary ? { temporary } : {}),
285
+ };
175
286
  }
176
287
 
177
288
  workspaceTools(): ToolContributor {
@@ -182,23 +293,40 @@ export class WorkspaceSandboxHost implements SandboxServices {
182
293
  };
183
294
  }
184
295
 
185
- execute(runId: string, tool: string, input: unknown, options: WorkspaceExecuteOptions = {}): Promise<unknown> {
186
- return this.#executorFor(runId).then((executor) => executor.execute(runId, tool, input, options));
296
+ /** Die Laufzeit, die eine Eingabe selbst verlangt, gilt, wenn der Aufrufer keine nennt; sie verlängert nur das Warten auf einen entfernten Executor. */
297
+ async execute(runId: string, operation: string, input: unknown, options: WorkspaceExecuteOptions = {}): Promise<unknown> {
298
+ try {
299
+ const { roots, durationMs } = this.#local.footprintOf(operation, input);
300
+ const executor = await this.#executorFor(runId, roots);
301
+ const timed = options.durationMs === undefined && durationMs !== undefined ? { ...options, durationMs } : options;
302
+ return await executor.execute(runId, operation, input, timed);
303
+ } catch (error) {
304
+ throw withDomainCause(error);
305
+ }
187
306
  }
188
307
 
189
- /** Ein Run mit Bindung `client` legt im Server nie eine Sandbox an; sein Executor allein hält, was zu beenden ist. */
308
+ /** Auch ein Run mit eigenem Executor hat auf dem Server markierte Prozesse der TypeScript-Plattform; beide Executoren räumen ab. */
190
309
  async shutdown(runId: string): Promise<void> {
191
310
  this.#stable.delete(runId);
192
- await (await this.#executorFor(runId)).stopRun(runId);
311
+ this.#seen.delete(runId);
312
+ const remote = await this.#options.executorFor?.(runId);
313
+ const results = await Promise.allSettled([this.#local.stopRun(runId), ...(remote ? [remote.stopRun(runId)] : [])]);
314
+ const failed = results.find((result): result is PromiseRejectedResult => result.status === "rejected");
315
+ if (failed) throw failed.reason;
193
316
  }
194
317
 
195
318
  shutdownAll(): Promise<void> {
196
319
  this.#stable.clear();
320
+ this.#seen.clear();
197
321
  return this.#local.shutdown();
198
322
  }
199
323
 
200
- async #executorFor(runId: string): Promise<WorkspaceExecutor> {
201
- return await this.#options.executorFor?.(runId) ?? this.#local;
324
+ /** Aliasse nennen Wurzeln des Servers, jeder andere Pfad die Wurzel des Runs auf der Maschine seiner Bindung; ohne Alias entscheidet die Bindung. */
325
+ async #executorFor(runId: string, { aliases, runRoot }: AddressedRoots): Promise<WorkspaceExecutor> {
326
+ const bound = await this.#options.executorFor?.(runId);
327
+ if (!bound || aliases.length === 0) return bound ?? this.#local;
328
+ if (runRoot) throw mixedRoots(aliases);
329
+ return this.#local;
202
330
  }
203
331
 
204
332
  #workspaceToolsFor(context: PluginContext): Promise<RunFunction[]> {
@@ -207,9 +335,28 @@ export class WorkspaceSandboxHost implements SandboxServices {
207
335
  const proxy = {
208
336
  ...described,
209
337
  execute: (toolCallId: string, params: unknown, signal: AbortSignal | undefined) =>
210
- this.execute(context.runId, described.name, params, { toolCallId, ...(signal ? { signal } : {}) }),
338
+ this.execute(context.runId, described.name, params, {
339
+ toolCallId,
340
+ ...(signal ? { signal } : {}),
341
+ }),
211
342
  } as AgentToolDefinition;
212
- return agentToolFrom(proxy, alwaysAvailable, described.name === "bash" ? "sequential" : "parallel");
343
+ const tool = agentToolFrom(proxy, alwaysAvailable, described.name === "bash" ? "sequential" : "parallel");
344
+ return fileToolNames.has(described.name)
345
+ ? { ...tool, run: (scope: ToolScope, toolCallId: string, input: never) => this.#fileToolCall(context.runId, described.name, scope, toolCallId, input) }
346
+ : tool;
213
347
  }));
214
348
  }
349
+
350
+ /** Ein direkter Aufruf des Modells gibt den Stand mit, den es von der Datei gesehen hat, und merkt sich den neuen; ein Aufruf aus TypeScript arbeitet ohne. */
351
+ async #fileToolCall(runId: string, name: string, scope: ToolScope, toolCallId: string, input: { path: string }): Promise<string> {
352
+ const options = { toolCallId, ...(scope.signal ? { signal: scope.signal } : {}) };
353
+ if (scope.modelContext === undefined) return textOf(await this.execute(runId, name, input, options) as ToolOutput);
354
+ const known = this.#seen.get(runId) ?? new Map<string, SeenFile>();
355
+ const key = [scope.caller.actorId, scope.modelContext, path.posix.normalize(input.path)].join("\0");
356
+ const result = await this.execute(runId, name, { ...input, seen: known.get(key) ?? null }, options) as ToolOutput & { details?: { seen?: SeenFile } };
357
+ const seen = result.details?.seen;
358
+ if (!seen) throw new Error(`Der Executor meldet nach ${name} keinen Dateistand; Server und Arbeitsplatz brauchen denselben Executor-Stand`);
359
+ this.#seen.set(runId, known.set(key, seen));
360
+ return textOf(result);
361
+ }
215
362
  }
@@ -0,0 +1,183 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, readdirSync, readFileSync, realpathSync, statSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { ragentsDataRoot } from "../data-directory.js";
5
+ import { filesBelow } from "../folder-install.js";
6
+ import { HOST_API_VERSION, type HostApiHalf } from "../host-api.js";
7
+ import { hostRoot, type HostApiRecord } from "../host-version.js";
8
+ import { isCheckout } from "../host-web.js";
9
+ import { bundlesRoot, pluginIdOf } from "../plugin-support/plugins-root.js";
10
+
11
+ export const BUNDLE_MANIFEST_FILE = "ragents-bundle.json";
12
+ export const BUNDLE_FORMAT = 3;
13
+
14
+ /** The value names a half imports from each module of the host API. */
15
+ export type HostNames = Readonly<Record<string, readonly string[]>>;
16
+
17
+ /** The one entry point of a bundle, written by the build tool and never by hand. */
18
+ export interface BundleManifest {
19
+ readonly format: typeof BUNDLE_FORMAT;
20
+ readonly id: string;
21
+ readonly api: number;
22
+ /** The names of the host API the bundle uses, per half; a host that lacks one refuses the bundle. */
23
+ readonly hostNames: Readonly<Record<HostApiHalf, HostNames>>;
24
+ /** A hash over every file of the bundle; copies and the build tool check it. */
25
+ readonly stand: string;
26
+ /** A hash over the source folder and the host inputs of the build; a checkout compares it with its built-in plugins. */
27
+ readonly sourceStand: string;
28
+ readonly server: string;
29
+ readonly web?: { readonly entry: string; readonly css?: string; readonly classes: string };
30
+ readonly exports: Readonly<Record<HostApiHalf, Readonly<Record<string, string>>>>;
31
+ readonly uses: readonly string[];
32
+ readonly assets: readonly string[];
33
+ }
34
+
35
+ const MANIFEST_KEYS = new Set(["format", "id", "api", "hostNames", "stand", "sourceStand", "server", "web", "exports", "uses", "assets"]);
36
+ const SOURCE_MARKERS = ["ragents-plugin.json", "server/index.ts", "server/index.tsx"];
37
+
38
+ const isRecord = (value: unknown): value is Record<string, unknown> =>
39
+ typeof value === "object" && value !== null && !Array.isArray(value);
40
+
41
+ const isStringList = (value: unknown): value is readonly string[] =>
42
+ Array.isArray(value) && value.every((entry) => typeof entry === "string");
43
+
44
+ const isPathRecord = (value: unknown): value is Readonly<Record<string, string>> =>
45
+ isRecord(value) && Object.values(value).every((entry) => typeof entry === "string");
46
+
47
+ const isHostNames = (value: unknown): boolean =>
48
+ isRecord(value) && [value.server, value.web].every((half) => isRecord(half) && Object.values(half).every(isStringList));
49
+
50
+ const isWeb = (value: unknown): boolean =>
51
+ value === undefined || (isRecord(value) && typeof value.entry === "string" && typeof value.classes === "string"
52
+ && (value.css === undefined || typeof value.css === "string"));
53
+
54
+ const realFolder = (folder: string): string | undefined =>
55
+ existsSync(folder) ? realpathSync.native(folder) : undefined;
56
+
57
+ /** A built-in bundle lies directly in the host's bundles folder; everything else comes from its author. */
58
+ export const isBuiltInBundle = (folder: string, bundles = bundlesRoot): boolean => {
59
+ const root = realFolder(bundles);
60
+ return root !== undefined && path.dirname(realFolder(folder) ?? path.resolve(folder)) === root;
61
+ };
62
+
63
+ /** A bundle that ragents connect fetched lies below the remote folder of the data root; the server holds its sources. */
64
+ export const isFetchedBundle = (folder: string, dataRoot = ragentsDataRoot()): boolean =>
65
+ path.resolve(folder).startsWith(path.join(dataRoot, "remote") + path.sep);
66
+
67
+ /** How the author, or for a fetched bundle its user, gets a bundle that fits this host again. */
68
+ export const rebuildHint = (folder: string): string => {
69
+ if (isBuiltInBundle(folder)) return "im Checkout mit pnpm build:plugins neu bauen";
70
+ if (isFetchedBundle(folder)) return "der Stand kommt von einem Server: mit ragents connect <server-url> neu holen, connect nennt die passende Host-Fassung";
71
+ return "mit ragents plugin build <quellordner> neu bauen";
72
+ };
73
+
74
+ const SKIPPED_SOURCE_ENTRIES = new Set(["node_modules", ".DS_Store"]);
75
+
76
+ const sourceFiles = (folder: string, skipped: ReadonlySet<string>, prefix = ""): readonly string[] =>
77
+ readdirSync(folder, { withFileTypes: true })
78
+ .filter((entry) => !SKIPPED_SOURCE_ENTRIES.has(entry.name) && !skipped.has(path.join(folder, entry.name)))
79
+ .sort((left, right) => left.name.localeCompare(right.name, "en"))
80
+ .flatMap((entry) => {
81
+ const relative = prefix ? `${prefix}/${entry.name}` : entry.name;
82
+ if (entry.isDirectory()) return sourceFiles(path.join(folder, entry.name), skipped, relative);
83
+ return entry.isFile() ? [relative] : [];
84
+ });
85
+
86
+ const fileDigest = (file: string): string => createHash("sha256").update(readFileSync(file)).digest("hex");
87
+
88
+ /** Host files that shape every bundle besides its sources: the build tool, the host API and the versions of the bundled libraries. */
89
+ const buildInputsOf = (root: string): readonly string[] => [
90
+ "apps/server/src/host-api.ts",
91
+ "apps/server/src/host-api.json",
92
+ "apps/server/src/plugin-build/build.ts",
93
+ "apps/server/src/plugin-build/plugin-description.ts",
94
+ isCheckout(root) ? "pnpm-lock.yaml" : "package.json",
95
+ ];
96
+
97
+ /** A hash over every file of a plugin source folder except dependencies and the given output folders, together with the build inputs of the host. */
98
+ export const sourceStandOf = (folder: string, skipped: readonly string[] = [], root = hostRoot()): string => {
99
+ const hash = createHash("sha256");
100
+ for (const relative of sourceFiles(folder, new Set(skipped))) hash.update(`${relative}\0${fileDigest(path.join(folder, relative))}\n`);
101
+ for (const input of buildInputsOf(root)) hash.update(`host:${input}\0${fileDigest(path.join(root, input))}\n`);
102
+ return hash.digest("hex");
103
+ };
104
+
105
+ /** A hash over every file of the bundle except its manifest and what Finder leaves behind, stable across machines. */
106
+ export const bundleStand = (folder: string): string => {
107
+ const hash = createHash("sha256");
108
+ const files = filesBelow(folder).filter((name) => name !== BUNDLE_MANIFEST_FILE && path.posix.basename(name) !== ".DS_Store");
109
+ for (const relative of files) hash.update(`${relative}\0${fileDigest(path.join(folder, relative))}\n`);
110
+ return hash.digest("hex");
111
+ };
112
+
113
+ /** A copy of a bundle, from a package or an archive, must carry exactly the files it was built with. */
114
+ export const assertBundleStand = (folder: string, manifest: Pick<BundleManifest, "id" | "stand">): void => {
115
+ if (bundleStand(folder) !== manifest.stand) {
116
+ throw new Error(`Das Bundle ${manifest.id} in ${folder} hat nicht mehr die Dateien, mit denen es gebaut wurde (stand); ${rebuildHint(folder)}`);
117
+ }
118
+ };
119
+
120
+ /** What a bundle needs from the host API that this host does not offer, one line per module. */
121
+ const missingHostNames = (manifest: Pick<BundleManifest, "hostNames">, record: HostApiRecord): readonly string[] =>
122
+ (["server", "web"] as const).flatMap((half) => Object.entries(manifest.hostNames[half]).flatMap(([specifier, names]) => {
123
+ const offered = record[half][specifier];
124
+ if (!offered) return [`${half} ${specifier}`];
125
+ const missing = names.filter((name) => !offered.includes(name));
126
+ return missing.length > 0 ? [`${half} ${specifier}: ${missing.join(", ")}`] : [];
127
+ }));
128
+
129
+ /** A bundle built against a newer host of the same number may use names this host lacks; that is a start error with its cause, never undefined at run time. */
130
+ export const assertHostNames = (folder: string, manifest: Pick<BundleManifest, "id" | "hostNames">, record: HostApiRecord): void => {
131
+ const missing = missingHostNames(manifest, record);
132
+ if (missing.length === 0) return;
133
+ throw new Error(`Das Bundle ${manifest.id} braucht aus der Host-API ${record.version} Namen, die dieser Host nicht anbietet (${missing.join("; ")}); `
134
+ + `es ist gegen einen neueren Host gebaut: den Host aktualisieren, sonst ${rebuildHint(folder)}`);
135
+ };
136
+
137
+ /** Reads and checks the manifest; format and host API must match this host exactly. */
138
+ export const readBundleManifest = (folder: string): BundleManifest => {
139
+ const file = path.join(folder, BUNDLE_MANIFEST_FILE);
140
+ if (!statSync(file, { throwIfNoEntry: false })?.isFile()) {
141
+ if (SOURCE_MARKERS.some((marker) => existsSync(path.join(folder, marker)))) {
142
+ throw new Error(`${folder} ist ein Quellordner, kein Bundle: mit ragents plugin build ${folder} bauen und im Profil den Bundle-Ordner nennen`);
143
+ }
144
+ throw new Error(`${folder} ist kein Bundle: ${BUNDLE_MANIFEST_FILE} fehlt`);
145
+ }
146
+ const id = pluginIdOf(folder);
147
+ const raw = ((): unknown => {
148
+ try {
149
+ return JSON.parse(readFileSync(file, "utf8"));
150
+ } catch (cause) {
151
+ throw new Error(`${file} ist kein gültiges JSON: ${cause instanceof Error ? cause.message : String(cause)}`);
152
+ }
153
+ })();
154
+ if (!isRecord(raw)) throw new Error(`${file} muss ein Objekt enthalten`);
155
+ if (raw.format !== BUNDLE_FORMAT) {
156
+ throw new Error(`Das Bundle ${id} hat das Format ${String(raw.format)}, dieser Host liest Format ${BUNDLE_FORMAT}; ${rebuildHint(folder)}`);
157
+ }
158
+ if (raw.id !== id) throw new Error(`Das Bundle in ${folder} meldet die Kennung ${String(raw.id)}; die Kennung ist der Ordnername ${id}`);
159
+ if (raw.api !== HOST_API_VERSION) {
160
+ throw new Error(`Das Bundle ${id} ist für Host-API ${String(raw.api)} gebaut, dieser Host bietet ${HOST_API_VERSION}; ${rebuildHint(folder)}`);
161
+ }
162
+ const unknown = Object.keys(raw).filter((key) => !MANIFEST_KEYS.has(key));
163
+ if (unknown.length > 0) throw new Error(`${file}: unbekannte Felder ${unknown.join(", ")}; ${rebuildHint(folder)}`);
164
+ const malformed = [
165
+ ...(isHostNames(raw.hostNames) ? [] : ["hostNames"]),
166
+ ...(typeof raw.stand === "string" ? [] : ["stand"]),
167
+ ...(typeof raw.sourceStand === "string" ? [] : ["sourceStand"]),
168
+ ...(typeof raw.server === "string" ? [] : ["server"]),
169
+ ...(isWeb(raw.web) ? [] : ["web"]),
170
+ ...(isRecord(raw.exports) && isPathRecord(raw.exports.server) && isPathRecord(raw.exports.web) ? [] : ["exports"]),
171
+ ...(isStringList(raw.uses) ? [] : ["uses"]),
172
+ ...(isStringList(raw.assets) ? [] : ["assets"]),
173
+ ];
174
+ if (malformed.length > 0) throw new Error(`${file}: ${malformed.join(", ")} fehlt oder hat die falsche Form; ${rebuildHint(folder)}`);
175
+ const web = raw.web as BundleManifest["web"];
176
+ const webFiles = web === undefined ? [] : [web.entry, web.classes, ...(web.css === undefined ? [] : [web.css])];
177
+ const misplaced = webFiles.filter((entry) => !entry.startsWith("web/") || entry.split("/").includes(".."));
178
+ if (misplaced.length > 0) throw new Error(`${file}: ${misplaced.join(", ")} liegt nicht unter web/; ${rebuildHint(folder)}`);
179
+ for (const required of [raw.server as string, ...webFiles]) {
180
+ if (!statSync(path.join(folder, required), { throwIfNoEntry: false })?.isFile()) throw new Error(`Dem Bundle ${id} fehlt ${required}; ${rebuildHint(folder)}`);
181
+ }
182
+ return raw as unknown as BundleManifest;
183
+ };
@@ -1,16 +1,17 @@
1
- import { PluginHost } from "@aicontainer/ragents";
1
+ import { PluginHost, type PluginWebAddresses } from "@ragents/engine";
2
2
  import { config, HOST_SECRET_ENV_NAMES } from "../config.js";
3
3
  import { SESSION_MODE, SESSIONS_MODE } from "../layout.js";
4
4
  import { withFolderAssets } from "../plugin-support/plugin-folder.js";
5
- import { pluginFolder, webEntryOf } from "../plugin-support/plugins-root.js";
6
5
  import type { PluginModule } from "../plugin-support/plugin-module.js";
7
- import { sessionManagementToken } from "../ragents/global-chat.js";
6
+ import { runManagementToken } from "../ragents/global-chat.js";
8
7
  import { registerTypeScriptFunctions } from "../ragents/typescript-tools.js";
9
8
  import {
9
+ hostAddressToken,
10
10
  runtimeProviderToken,
11
11
  secretEnvNamesToken,
12
- sessionGuardToken,
13
- sessionWorkspaceProviderToken,
12
+ runGuardToken,
13
+ runWorkspaceProviderToken,
14
+ workspaceGuardToken,
14
15
  type HostBridges,
15
16
  } from "../ragents/host-services.js";
16
17
 
@@ -24,6 +25,10 @@ export interface ProfileComposition {
24
25
  readonly product: ProductDescriptor;
25
26
  readonly pluginIds: readonly string[];
26
27
  readonly modules: ReadonlyMap<string, PluginModule>;
28
+ /** The plugins with a web half and where the browser loads it; the web loads exactly these. */
29
+ readonly web: ReadonlyMap<string, PluginWebAddresses>;
30
+ /** Die Vorlage aus defaultStartEntry der Profildatei; der Host lehnt eine nicht registrierte beim Versiegeln ab. */
31
+ readonly defaultStartEntry?: string;
27
32
  }
28
33
 
29
34
  export const composeProfile = (options: ProfileComposition, bridges: HostBridges): PluginHost => {
@@ -31,11 +36,14 @@ export const composeProfile = (options: ProfileComposition, bridges: HostBridges
31
36
  product: options.product,
32
37
  dataDirectory: config.dataDir,
33
38
  storageModes: { sessionsRoot: SESSIONS_MODE, session: SESSION_MODE },
39
+ ...(options.defaultStartEntry !== undefined ? { defaultStartEntry: options.defaultStartEntry } : {}),
34
40
  });
35
- host.provideHost(sessionGuardToken, bridges.ensureSession);
36
- host.provideHost(sessionWorkspaceProviderToken, bridges.sessionWorkspaceFor);
41
+ host.provideHost(runGuardToken, bridges.ensureSession);
42
+ host.provideHost(workspaceGuardToken, bridges.ensureWorkspaceAccess);
43
+ host.provideHost(runWorkspaceProviderToken, bridges.sessionWorkspaceFor);
37
44
  host.provideHost(runtimeProviderToken, bridges.runtime);
38
- host.provideHost(sessionManagementToken, () => {
45
+ host.provideHost(hostAddressToken, () => bridges.apiBaseUrl);
46
+ host.provideHost(runManagementToken, () => {
39
47
  if (!bridges.sessions) throw new Error("Der Host stellt keine Sitzungsverwaltung bereit");
40
48
  return bridges.sessions();
41
49
  });
@@ -52,13 +60,14 @@ export const composeProfile = (options: ProfileComposition, bridges: HostBridges
52
60
  throw new Error(`Plugin ${id} deklariert requires im Manifest; es gehört in den Modulvertrag`);
53
61
  }
54
62
  if (plugin.manifest.web !== undefined) {
55
- throw new Error(`Plugin ${id} deklariert web im Manifest; das ergibt sich aus dem Plugin-Ordner`);
63
+ throw new Error(`Plugin ${id} deklariert web im Manifest; das ergibt sich aus dem Bundle`);
56
64
  }
65
+ const web = options.web.get(id);
57
66
  host.register(withFolderAssets({
58
67
  ...plugin,
59
68
  manifest: {
60
69
  ...plugin.manifest,
61
- web: webEntryOf(pluginFolder(id)) !== undefined,
70
+ ...(web ? { web } : {}),
62
71
  ...(module.requires ? { requires: module.requires } : {}),
63
72
  },
64
73
  }));