@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,4 +1,4 @@
1
- // Der Hook löst @aicontainer/* auch für eine Profildatei außerhalb des Hosts auf; im Paket gibt es dort kein node_modules.
1
+ // Der Hook löst @ragents/* auch für eine Profildatei außerhalb des Hosts auf; im Paket gibt es dort kein node_modules.
2
2
  import "../../apps/server/src/host-resolution.ts";
3
3
  import { spawn } from "node:child_process";
4
4
  import { randomUUID } from "node:crypto";
@@ -10,9 +10,12 @@ import { hostRecordFile, readHostRecord, removeHostRecord, writeHostRecord } fro
10
10
  import { hostRoot } from "../../apps/server/src/host-version.ts";
11
11
  import { callerDirectory, selectProfileTarget, type ProfileTarget } from "../../apps/server/src/profile-target.ts";
12
12
  import { RpcClient } from "../../apps/web/src/rpc/client.ts";
13
+ import type { RunView, Turn, TurnToolCall } from "../../packages/ragents/src/domain/model.ts";
14
+ import { runContracts } from "../../packages/ragents/src/http/contracts.ts";
13
15
  import { RpcError } from "../../packages/ragents/src/rpc/protocol.ts";
14
- import { WORKSPACE_BINDING_OPTION_ID } from "../../plugins/ragents.workspace/contract.ts";
15
- import { JournalReader, journalLines, readJournal, RUN_ID_PATTERN, type JournalEvent } from "./journal.ts";
16
+ import { WORKSPACE_BINDING_OPTION_ID, WORKSPACE_CLIENT_ID_PATTERN, type WorkspaceBindingPresentation } from "../../plugins/ragents.workspace/contract.ts";
17
+ import { interruptPrimaryTurn, stopWholeRun } from "./turn-control.ts";
18
+ import { journalLines, readJournal, RUN_ID_PATTERN, type JournalEvent } from "./journal.ts";
16
19
 
17
20
  const DEFAULT_PROFILE = "developer";
18
21
  const HOST_START_TIMEOUT_MS = 120_000;
@@ -26,41 +29,58 @@ export const defaultProfile = (): string => process.env.RAGENTS_PROFILE ?? DEFAU
26
29
 
27
30
  export const usage = (): string => `Verwendung: ragents <befehl> [argumente]
28
31
 
29
- run <ordner> "<auftrag>" [--profile <p>] [--entry <einstieg>] [--json]
32
+ run [<ordner>] "<auftrag>" [--profile <p>] [--entry <vorlage>] [--workstation <kennung>] [--json]
30
33
  Startet den Host des Profils, falls keiner läuft, legt einen Run mit Bindung path auf den
31
- Ordner an, schickt den Auftrag und wartet, bis der Turn endet.
34
+ Ordner an, schickt den Auftrag und wartet, bis der Turn endet. Ein einzelner Wert ist immer
35
+ der Auftrag: ohne <ordner> wählt run keine Bindung, es gilt die Vorgabe des Profils oder die
36
+ der Vorlage. Legt die Vorlage die Bindung fest, ist ein <ordner> ein Fehler. Mit
37
+ --workstation liegt der Ordner auf dem am Host angemeldeten Arbeitsplatz mit dieser Kennung
38
+ (pnpm workspace-client <server-url> <ordner> --id <kennung>) statt auf dem Server; ohne ihn
39
+ bricht run ab, und ohne <ordner> gibt es kein --workstation.
32
40
  send <run> "<text>" [--profile <p>] [--json]
33
41
  Folgeauftrag im selben Run, gleiches Warten.
34
42
  journal <run> [--profile <p>] [--json] [--tools]
35
- Den Verlauf des Runs kompakt lesen.
36
- stop <run> [--profile <p>] den laufenden Turn abbrechen
43
+ Den Verlauf des Runs kompakt lesen: aus dem Datenordner des Profils, mit RAGENTS_URL vom
44
+ Server (dort mit dem Recht runs.inspect).
45
+ stop <run> [--profile <p>] den laufenden Turn des Primary-Actors unterbrechen; der Run
46
+ bleibt aktiv und nimmt den nächsten Auftrag an
47
+ stop <run> --run [--profile <p>]
48
+ Not-Aus: alle Turns abbrechen und alle Actors des Runs stoppen
37
49
  stop --host [--profile <p>] den gemerkten Host beenden
50
+ plugin build <ordner...> [--out <o>] [--watch] [--no-typecheck]
51
+ Plugin-Quellordner zu Bundles bauen; Einzelheiten mit plugin --help.
38
52
 
39
53
  <p> ist ein Profilname neben dem Host oder der Pfad zu einer ragents.config.<profil>.ts an
40
54
  beliebiger Stelle; ohne --profile gilt RAGENTS_PROFILE, sonst ${DEFAULT_PROFILE}. Exit-Code:
41
55
  0 fertig, 2 abgebrochen, 1 fehlgeschlagen oder Verbindungsproblem. Die letzte Zeile auf stdout
42
- ist "run: <id>". Die Adresse kommt aus <Datenordner>/host.json, sonst aus RAGENTS_URL, sonst aus
56
+ ist "run: <id>". run und send folgen dem Turn über den Server (Kanal ragents.run und
57
+ ragents.runs.view), auch auf einem anderen Rechner; Werkzeugzeilen zeigt der Server nur mit
58
+ runs.inspect, --json liefert dieselben Schritte als JSON. Reißt die Verbindung ab, endet der
59
+ Befehl mit 1 und der Ursache. Die Adresse kommt aus <Datenordner>/host.json, sonst aus RAGENTS_URL, sonst aus
43
60
  host.PORT des Profils; RAGENTS_TOKEN geht als Bearer-Token mit, falls das Profil eine Anmeldung
44
61
  verlangt. Der so gestartete Host baut die Oberfläche nicht - ein Agent braucht sie nicht; mit
45
62
  Oberfläche startet ragents start <profil>.`;
46
63
 
47
64
  export type AgentCommand =
48
- | { readonly kind: "run"; readonly profile: string; readonly folder: string; readonly text: string; readonly entry: string | undefined; readonly json: boolean }
65
+ | { readonly kind: "run"; readonly profile: string; readonly folder: string | undefined; readonly text: string; readonly entry: string | undefined; readonly json: boolean; readonly workstation?: string }
49
66
  | { readonly kind: "send"; readonly profile: string; readonly runId: string; readonly text: string; readonly json: boolean }
50
67
  | { readonly kind: "journal"; readonly profile: string; readonly runId: string; readonly json: boolean; readonly tools: boolean }
51
68
  | { readonly kind: "stop"; readonly profile: string; readonly runId: string }
69
+ | { readonly kind: "stop-run"; readonly profile: string; readonly runId: string }
52
70
  | { readonly kind: "stop-host"; readonly profile: string };
53
71
 
54
72
  interface Flags {
55
73
  readonly profile: string;
56
74
  readonly entry: string | undefined;
75
+ readonly workstation: string | undefined;
57
76
  readonly json: boolean;
58
77
  readonly tools: boolean;
59
78
  readonly host: boolean;
79
+ readonly run: boolean;
60
80
  readonly positional: readonly string[];
61
81
  }
62
82
 
63
- const VALUE_FLAGS = new Set(["--profile", "--entry"]);
83
+ const VALUE_FLAGS = new Set(["--profile", "--entry", "--workstation"]);
64
84
 
65
85
  const scan = (argv: readonly string[], allowed: readonly string[]): Flags => {
66
86
  const positional: string[] = [];
@@ -85,9 +105,11 @@ const scan = (argv: readonly string[], allowed: readonly string[]): Flags => {
85
105
  return {
86
106
  profile: values.get("--profile") ?? defaultProfile(),
87
107
  entry: values.get("--entry"),
108
+ workstation: values.get("--workstation"),
88
109
  json: switches.has("--json"),
89
110
  tools: switches.has("--tools"),
90
111
  host: switches.has("--host"),
112
+ run: switches.has("--run"),
91
113
  positional,
92
114
  };
93
115
  };
@@ -95,11 +117,17 @@ const scan = (argv: readonly string[], allowed: readonly string[]): Flags => {
95
117
  export const parseArguments = (argv: readonly string[]): AgentCommand => {
96
118
  const [command, ...rest] = argv;
97
119
  if (command === "run") {
98
- const flags = scan(rest, ["--profile", "--entry", "--json"]);
99
- const [folder, text, ...extra] = flags.positional;
100
- if (!folder || !text) throw new Error(`run braucht <ordner> und "<auftrag>".\n\n${usage()}`);
101
- if (extra.length > 0) throw new Error(`run nimmt genau zwei Werte, nicht ${flags.positional.length}.`);
102
- return { kind: "run", profile: flags.profile, folder, text, entry: flags.entry, json: flags.json };
120
+ const flags = scan(rest, ["--profile", "--entry", "--workstation", "--json"]);
121
+ if (flags.positional.length > 2) throw new Error(`run nimmt höchstens zwei Werte, nicht ${flags.positional.length}.`);
122
+ const [folder, text] = flags.positional.length === 2 ? flags.positional : [undefined, flags.positional[0]];
123
+ if (!text) throw new Error(`run braucht "<auftrag>", davor optional <ordner>.\n\n${usage()}`);
124
+ if (folder === "") throw new Error("run braucht einen nicht leeren <ordner> oder nur den Auftrag.");
125
+ if (flags.workstation !== undefined && folder === undefined) throw new Error("--workstation braucht <ordner>, den Pfad auf dem Arbeitsplatz.");
126
+ if (flags.workstation !== undefined && !WORKSPACE_CLIENT_ID_PATTERN.test(flags.workstation)) {
127
+ throw new Error(`Ungültige Arbeitsplatz-Kennung: ${flags.workstation} (8 bis 64 Zeichen aus Buchstaben, Ziffern, _ und -).`);
128
+ }
129
+ return { kind: "run", profile: flags.profile, folder, text, entry: flags.entry, json: flags.json,
130
+ ...(flags.workstation ? { workstation: flags.workstation } : {}) };
103
131
  }
104
132
  if (command === "send") {
105
133
  const flags = scan(rest, ["--profile", "--json"]);
@@ -118,7 +146,8 @@ export const parseArguments = (argv: readonly string[]): AgentCommand => {
118
146
  return { kind: "journal", profile: flags.profile, runId, json: flags.json, tools: flags.tools };
119
147
  }
120
148
  if (command === "stop") {
121
- const flags = scan(rest, ["--profile", "--host"]);
149
+ const flags = scan(rest, ["--profile", "--host", "--run"]);
150
+ if (flags.host && flags.run) throw new Error("stop nimmt entweder --host oder --run.");
122
151
  if (flags.host) {
123
152
  if (flags.positional.length > 0) throw new Error("stop --host nimmt keine Run-Id.");
124
153
  return { kind: "stop-host", profile: flags.profile };
@@ -127,7 +156,7 @@ export const parseArguments = (argv: readonly string[]): AgentCommand => {
127
156
  if (!runId) throw new Error(`stop braucht <run> oder --host.\n\n${usage()}`);
128
157
  if (extra.length > 0) throw new Error(`stop nimmt genau einen Wert, nicht ${flags.positional.length}.`);
129
158
  if (!RUN_ID_PATTERN.test(runId)) throw new Error(`Ungültige Run-Id: ${runId}`);
130
- return { kind: "stop", profile: flags.profile, runId };
159
+ return { kind: flags.run ? "stop-run" : "stop", profile: flags.profile, runId };
131
160
  }
132
161
  throw new Error(command ? `Unbekannter Befehl: ${command}\n\n${usage()}` : usage());
133
162
  };
@@ -231,7 +260,7 @@ export const withLoginHint = async <T>(call: () => Promise<T>): Promise<T> => {
231
260
  }
232
261
  };
233
262
 
234
- /** Ein Einstieg richtet den Run erst ein und bestimmt dabei seinen Chatpartner; bis dahin lehnt der Server die Nachricht ab. */
263
+ /** Eine Vorlage richtet den Run erst ein und bestimmt dabei seinen Chatpartner; bis dahin lehnt der Server die Nachricht ab. */
235
264
  const sendWhenChatReady = async (rpc: RpcClient, runId: string, text: string): Promise<void> => {
236
265
  const deadline = Date.now() + CHAT_READY_TIMEOUT_MS;
237
266
  for (let attempt = 0; ; attempt += 1) {
@@ -240,7 +269,7 @@ const sendWhenChatReady = async (rpc: RpcClient, runId: string, text: string): P
240
269
  return;
241
270
  } catch (error) {
242
271
  if (!(error instanceof RpcError) || error.domainCode !== "actor-chat-unsupported" || Date.now() >= deadline) throw error;
243
- if (attempt === 0) note("== Der Einstieg richtet den Run ein; der Auftrag wartet auf seinen Chatpartner.");
272
+ if (attempt === 0) note("== Die Vorlage richtet den Run ein; der Auftrag wartet auf seinen Chatpartner.");
244
273
  await delay(POLL_INTERVAL_MS);
245
274
  }
246
275
  }
@@ -262,88 +291,148 @@ const seconds = (from: string | undefined, to: string | undefined): string => {
262
291
  return Number.isNaN(start) || Number.isNaN(end) ? "?" : ((end - start) / 1000).toFixed(1);
263
292
  };
264
293
 
265
- export interface FollowState {
266
- readonly inputId: string | undefined;
267
- readonly turnId: string | undefined;
294
+ /** Ein Schritt des eigenen Turns: `line` für stdout (fehlt bei einem sauberen Ende), `data` für --json. */
295
+ export interface ProgressEntry {
296
+ readonly key: string;
297
+ readonly at: string;
298
+ readonly line: string | undefined;
299
+ readonly data: Readonly<Record<string, unknown>>;
300
+ }
301
+
302
+ export interface TurnProgress {
303
+ readonly entries: readonly ProgressEntry[];
268
304
  readonly outcome: TurnOutcome | undefined;
269
305
  readonly reason: string | undefined;
270
306
  }
271
307
 
272
- export const INITIAL_FOLLOW_STATE: FollowState = { inputId: undefined, turnId: undefined, outcome: undefined, reason: undefined };
273
-
274
- /** Verfolgt genau den Turn, den der eigene Text ausgelöst hat: Eingabe, Turn, Ende. */
275
- export const advance = (state: FollowState, event: JournalEvent, text: string): FollowState => {
276
- const payload = event.payload;
277
- if (state.inputId === undefined) {
278
- if (event.type === "actor.input.enqueued" && payload.content === text) return { ...state, inputId: String(payload.inputId) };
279
- return state;
280
- }
281
- if (state.turnId === undefined) {
282
- if (event.type === "turn.started" && payload.inputId === state.inputId) return { ...state, turnId: String(payload.turnId) };
283
- return state;
284
- }
285
- if (payload.turnId !== state.turnId) return state;
286
- if (event.type === "turn.finished") {
287
- return payload.outcome === "failed"
288
- ? { ...state, outcome: "failed", reason: String(payload.reason ?? "") }
289
- : { ...state, outcome: "completed", reason: undefined };
290
- }
291
- if (event.type === "turn.interrupted") return { ...state, outcome: "interrupted", reason: String(payload.reason ?? "") };
292
- return state;
308
+ const PENDING: TurnProgress = { entries: [], outcome: undefined, reason: undefined };
309
+
310
+ const TOOL_ENDS: Readonly<Record<Exclude<TurnToolCall["status"], "running">, string>> = { completed: "ok", failed: "Fehler", interrupted: "abgebrochen" };
311
+
312
+ const toolEntries = (call: TurnToolCall): ProgressEntry[] => [
313
+ { key: `tool:${call.id}`, at: call.startedAt, line: `> ${call.name}`, data: { kind: "tool", call } },
314
+ ...call.status === "running" ? [] : [{
315
+ key: `tool-end:${call.id}`,
316
+ at: call.finishedAt ?? call.startedAt,
317
+ line: `< ${call.name} ${seconds(call.startedAt, call.finishedAt ?? undefined)}s ${TOOL_ENDS[call.status]}`,
318
+ data: { kind: "tool-end", call },
319
+ }],
320
+ ];
321
+
322
+ const endEntry = (turn: Turn): ProgressEntry => ({
323
+ key: `turn:${turn.id}`,
324
+ at: turn.finishedAt ?? turn.startedAt,
325
+ line: turn.status === "failed" ? `! Turn fehlgeschlagen: ${shorten(turn.reason, 300)}`
326
+ : turn.status === "interrupted" ? `! Turn abgebrochen: ${shorten(turn.reason, 300)}` : undefined,
327
+ data: { kind: "turn", id: turn.id, status: turn.status, reason: turn.reason },
328
+ });
329
+
330
+ /** Die neue Eingabe des Owners mit diesem Text, der Turn, der sie begonnen oder eingespeist bekommen hat, und seine Schritte ab ihr. */
331
+ export const progressOf = (view: RunView | null, known: ReadonlySet<string>, text: string): TurnProgress => {
332
+ const input = view?.inputs.find((entry) => !known.has(entry.id) && entry.enqueuedBy === view.ownerId && entry.subscriptionId === null
333
+ && entry.content.trim() === text.trim());
334
+ if (!input) return PENDING;
335
+ if (input.lifecycle.kind === "discarded") return { entries: [], outcome: "interrupted", reason: input.lifecycle.reason };
336
+ if (input.lifecycle.kind === "pending") return PENDING;
337
+ const turnId = input.lifecycle.turnId;
338
+ const turn = view?.turns.find((entry) => entry.id === turnId);
339
+ if (!turn) return PENDING;
340
+ const entries = [
341
+ ...turn.toolCalls.filter((call) => Date.parse(call.startedAt) >= Date.parse(input.enqueuedAt)).flatMap(toolEntries),
342
+ ...turn.outputs.filter((output) => output.sequence > input.sequence && output.text.trim()).map((output): ProgressEntry =>
343
+ ({ key: `output:${output.sequence}`, at: output.occurredAt, line: output.text.trim(), data: { kind: "output", output } })),
344
+ ].sort((left, right) => Date.parse(left.at) - Date.parse(right.at));
345
+ if (turn.status === "running") return { entries, outcome: undefined, reason: undefined };
346
+ return { entries: [...entries, endEntry(turn)], outcome: turn.status, reason: turn.status === "completed" ? undefined : turn.reason ?? "" };
293
347
  };
294
348
 
295
- export const streamLines = (event: JournalEvent, started: Map<string, JournalEvent>): readonly string[] => {
296
- const payload = event.payload;
297
- const callId = typeof payload.toolCallId === "string" ? payload.toolCallId : "";
298
- if (event.type === "tool.call.started") {
299
- started.set(callId, event);
300
- return [`> ${String(payload.name ?? "")} ${shorten(payload.input, 200)}`];
301
- }
302
- if (event.type === "tool.call.completed" || event.type === "tool.call.failed") {
303
- const begin = started.get(callId);
304
- started.delete(callId);
305
- const duration = seconds(begin?.occurredAt, event.occurredAt);
306
- return event.type === "tool.call.completed"
307
- ? [`< ${String(payload.name ?? "")} ${duration}s ok`]
308
- : [`< ${String(payload.name ?? "")} ${duration}s Fehler: ${shorten(payload.error, 300)}`];
309
- }
310
- if (event.type === "model.output.completed") {
311
- const answer = typeof payload.text === "string" ? payload.text.trim() : "";
312
- return answer ? [answer] : [];
313
- }
314
- if (event.type === "turn.interrupted") return [`! Turn abgebrochen: ${shorten(payload.reason, 300)}`];
315
- if (event.type === "turn.finished" && payload.outcome === "failed") return [`! Turn fehlgeschlagen: ${shorten(payload.reason, 300)}`];
316
- return [];
349
+ interface RunWatch {
350
+ /** Kehrt zurück, sobald der Kanal seit dem letzten Aufruf etwas gemeldet hat; ein Abriss des Stroms ist ein harter Fehler. */
351
+ readonly changed: () => Promise<void>;
352
+ readonly close: () => void;
353
+ }
354
+
355
+ /** Wie Web und VS Code: der Kanal ragents.run meldet erst ready, dann jede Journaländerung; den Stand liefert ragents.runs.view. */
356
+ const watchRun = (rpc: RpcClient, runId: string): RunWatch => {
357
+ let dirty = false;
358
+ let failure: Error | undefined;
359
+ let wake: (() => void) | undefined;
360
+ const signal = (): void => {
361
+ const waiting = wake;
362
+ wake = undefined;
363
+ waiting?.();
364
+ };
365
+ const fail = (message: string): void => {
366
+ failure ??= new Error(message);
367
+ signal();
368
+ };
369
+ const unsubscribe = rpc.subscribe(coreContracts.channels.run, { runId }, () => {
370
+ dirty = true;
371
+ signal();
372
+ }, (message) => fail(`Der Ereignisstrom des Runs fällt aus: ${message}`));
373
+ const stopStatus = rpc.onStatus((status) => {
374
+ if (status.kind === "unauthorized") fail(LOGIN_REQUIRED);
375
+ });
376
+ return {
377
+ changed: async () => {
378
+ while (!dirty && !failure) await new Promise<void>((resolve) => { wake = resolve; });
379
+ if (failure) throw failure;
380
+ dirty = false;
381
+ },
382
+ close: () => {
383
+ stopStatus();
384
+ unsubscribe();
385
+ },
386
+ };
317
387
  };
318
388
 
319
389
  interface FollowOptions {
320
- readonly reader: JournalReader;
390
+ readonly rpc: RpcClient;
321
391
  readonly baseUrl: string;
392
+ readonly runId: string;
322
393
  readonly text: string;
323
394
  readonly json: boolean;
324
395
  readonly write: (line: string) => void;
396
+ readonly send: () => Promise<void>;
325
397
  }
326
398
 
399
+ /** Abonniert den Run, merkt sich die vorhandenen Eingaben, schickt den Auftrag und folgt ihm über die Run-Ansicht bis zum Turn-Ende. */
327
400
  const follow = async (options: FollowOptions): Promise<TurnOutcome> => {
328
- const started = new Map<string, JournalEvent>();
329
- let state = INITIAL_FOLLOW_STATE;
330
- let unhealthy = 0;
331
- let checkedAt = Date.now();
332
- for (;;) {
333
- for (const event of options.reader.next()) {
334
- if (options.json) options.write(JSON.stringify(event));
335
- else for (const line of streamLines(event, started)) options.write(line);
336
- state = advance(state, event, options.text);
337
- if (state.outcome) {
338
- if (state.reason && !options.json) note(`== ${state.reason}`);
339
- return state.outcome;
401
+ const { rpc, runId } = options;
402
+ const watch = watchRun(rpc, runId);
403
+ try {
404
+ await watch.changed();
405
+ const before = await rpc.call(runContracts.view, { runId });
406
+ const known = new Set(before?.inputs.map((input) => input.id));
407
+ await options.send();
408
+ return await followSent(options, watch, known);
409
+ } finally {
410
+ watch.close();
411
+ }
412
+ };
413
+
414
+ /** Nach dem Senden läuft der Turn beim Server weiter, was immer hier scheitert; der Fehler sagt das. */
415
+ const followSent = async (options: FollowOptions, watch: RunWatch, known: ReadonlySet<string>): Promise<TurnOutcome> => {
416
+ const { rpc, runId } = options;
417
+ try {
418
+ const written = new Set<string>();
419
+ for (;;) {
420
+ const progress = progressOf(await rpc.call(runContracts.view, { runId }), known, options.text);
421
+ for (const entry of progress.entries.filter((candidate) => !written.has(candidate.key))) {
422
+ written.add(entry.key);
423
+ if (options.json) options.write(JSON.stringify(entry.data));
424
+ else if (entry.line !== undefined) options.write(entry.line);
425
+ }
426
+ if (progress.outcome) {
427
+ if (progress.reason && !options.json) note(`== ${progress.reason}`);
428
+ return progress.outcome;
340
429
  }
430
+ await watch.changed();
341
431
  }
342
- await delay(POLL_INTERVAL_MS);
343
- if (Date.now() - checkedAt < 5_000) continue;
344
- checkedAt = Date.now();
345
- unhealthy = await healthy(options.baseUrl) ? 0 : unhealthy + 1;
346
- if (unhealthy >= 2) throw new Error(`Der Host unter ${options.baseUrl} antwortet nicht mehr; der Run läuft ohne ihn nicht weiter.`);
432
+ } catch (error) {
433
+ if (error instanceof RpcError && error.status === 401) throw error;
434
+ throw new Error(`Der Turn in ${runId} lässt sich über ${options.baseUrl} nicht weiter verfolgen und läuft dort womöglich weiter: `
435
+ + (error instanceof Error ? error.message : String(error)));
347
436
  }
348
437
  };
349
438
 
@@ -351,26 +440,61 @@ export type LineWriter = (line: string) => void;
351
440
 
352
441
  const toStdout: LineWriter = (line) => { process.stdout.write(`${line}\n`); };
353
442
 
443
+ /** Der angemeldete Arbeitsplatz mit dieser Kennung, wie die Startoption ihn nennt; fehlt er, bricht run mit Ursache ab. */
444
+ const workstationOf = (presentation: unknown, id: string): { client: string; label: string } => {
445
+ const clients = (presentation as WorkspaceBindingPresentation | null)?.clients ?? [];
446
+ const found = clients.find((entry) => entry.id === id);
447
+ if (!found) {
448
+ const registered = clients.map((entry) => `${entry.id} (${entry.label})`).join(", ") || "keiner";
449
+ throw new Error(`Am Host ist kein Arbeitsplatz mit der Kennung ${id} angemeldet; angemeldet: ${registered}. Anmelden mit pnpm workspace-client <server-url> <ordner> --id ${id}.`);
450
+ }
451
+ return { client: found.id, label: found.label };
452
+ };
453
+
454
+ /** Legt die Vorlage die Ordnerbindung selbst fest, widerspricht ihr jeder genannte Ordner; run überstimmt keine Seite still. */
455
+ const assertEntryLeavesBinding = async (rpc: RpcClient, entryId: string, folder: string): Promise<void> => {
456
+ const { startEntries } = await withLoginHint(() => rpc.call(coreContracts.plugins.bootstrap, {}));
457
+ const entry = startEntries.find((candidate) => candidate.id === entryId);
458
+ if (!entry) throw new Error(`Die Vorlage ${entryId} gibt es in diesem Profil nicht, oder sie ist für Deinen Benutzer nicht freigegeben.`);
459
+ const fixed = entry.fixedStartOptions?.[WORKSPACE_BINDING_OPTION_ID];
460
+ if (fixed !== undefined) {
461
+ throw new Error(`Die Vorlage ${entryId} legt die Ordnerbindung selbst fest (${JSON.stringify(fixed)}), genannt ist aber der Ordner ${folder}. `
462
+ + "Lass <ordner> weg oder starte ohne diese Vorlage.");
463
+ }
464
+ };
465
+
466
+ const bindFolder = async (rpc: RpcClient, runId: string, folder: string, command: Extract<AgentCommand, { kind: "run" }>, profile: string, baseUrl: string): Promise<void> => {
467
+ if (command.entry) await assertEntryLeavesBinding(rpc, command.entry, folder);
468
+ const options = await withLoginHint(() => rpc.call(coreContracts.startOptions.list, { runId }));
469
+ const binding = options.find((option) => option.id === WORKSPACE_BINDING_OPTION_ID);
470
+ if (command.workstation) {
471
+ if (!binding) throw new Error(`Das Profil ${profile} kennt ${WORKSPACE_BINDING_OPTION_ID} nicht; ohne Ordnerbindung gibt es keinen Arbeitsplatz für --workstation.`);
472
+ const machine = workstationOf(binding.presentation, command.workstation);
473
+ await withLoginHint(() => rpc.call(coreContracts.startOptions.select, { runId, optionId: WORKSPACE_BINDING_OPTION_ID, value: { machine, folder: { path: folder } } }));
474
+ note(`== Run ${runId} auf Arbeitsplatz ${machine.label}: ${folder} (${baseUrl})`);
475
+ } else if (binding) {
476
+ await withLoginHint(() => rpc.call(coreContracts.startOptions.select, { runId, optionId: WORKSPACE_BINDING_OPTION_ID, value: { machine: "server", folder: { path: folder } } }));
477
+ note(`== Run ${runId} auf ${folder} (${baseUrl})`);
478
+ } else {
479
+ note(`== Run ${runId} (${baseUrl}); das Profil ${profile} kennt ${WORKSPACE_BINDING_OPTION_ID} nicht und legt seinen Arbeitsbereich selbst an, ${folder} bleibt ungebunden.`);
480
+ }
481
+ };
482
+
354
483
  const runCommand = async (command: Extract<AgentCommand, { kind: "run" }>, write: LineWriter): Promise<number> => {
355
- const folder = path.resolve(callerDirectory(), command.folder);
356
- if (!statSync(folder, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`Kein Verzeichnis: ${folder}`);
484
+ const folder = command.folder === undefined || (command.workstation && path.win32.isAbsolute(command.folder))
485
+ ? command.folder : path.resolve(callerDirectory(), command.folder);
486
+ if (folder !== undefined && !command.workstation && !statSync(folder, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`Kein Verzeichnis: ${folder}`);
357
487
  const target = await loadProfile(command.profile);
358
488
  const baseUrl = await ensureHost(target);
359
489
  const rpc = client(baseUrl);
360
490
  const runId = randomUUID();
361
- const options = await withLoginHint(() => rpc.call(coreContracts.startOptions.list, { runId }));
362
- if (options.some((option) => option.id === WORKSPACE_BINDING_OPTION_ID)) {
363
- await withLoginHint(() => rpc.call(coreContracts.startOptions.select, { runId, optionId: WORKSPACE_BINDING_OPTION_ID, value: { kind: "path", path: folder } }));
364
- note(`== Run ${runId} auf ${folder} (${baseUrl})`);
365
- } else {
366
- note(`== Run ${runId} (${baseUrl}); das Profil ${target.profile} kennt ${WORKSPACE_BINDING_OPTION_ID} nicht und legt seinen Arbeitsbereich selbst an, ${folder} bleibt ungebunden.`);
367
- }
368
- const reader = new JournalReader(target.dataDirectory, runId);
491
+ if (folder !== undefined) await bindFolder(rpc, runId, folder, command, target.profile, baseUrl);
492
+ else note(`== Run ${runId} (${baseUrl}) ohne Ordner; die Bindung kommt aus ${command.entry ? `der Vorlage ${command.entry} oder ` : ""}der Vorgabe des Profils ${target.profile}.`);
369
493
  if (command.entry) await withLoginHint(() => rpc.call(coreContracts.chat.start, { runId, entry: command.entry }));
370
- await withLoginHint(() => command.entry
371
- ? sendWhenChatReady(rpc, runId, command.text)
372
- : rpc.call(coreContracts.chat.send, { runId, text: command.text }).then(() => undefined));
373
- const outcome = await follow({ reader, baseUrl, text: command.text.trim(), json: command.json, write });
494
+ const outcome = await withLoginHint(() => follow({ rpc, baseUrl, runId, text: command.text, json: command.json, write,
495
+ send: () => command.entry
496
+ ? sendWhenChatReady(rpc, runId, command.text)
497
+ : rpc.call(coreContracts.chat.send, { runId, text: command.text }).then(() => undefined) }));
374
498
  write(`run: ${runId}`);
375
499
  return EXIT_CODES[outcome];
376
500
  };
@@ -380,27 +504,43 @@ const sendCommand = async (command: Extract<AgentCommand, { kind: "send" }>, wri
380
504
  const baseUrl = await addressOf(target);
381
505
  if (!await healthy(baseUrl)) throw new Error(`Unter ${baseUrl} antwortet kein RAgents-Server; starte ihn mit ragents run.`);
382
506
  const rpc = client(baseUrl);
383
- const reader = new JournalReader(target.dataDirectory, command.runId);
384
- reader.next();
385
- await withLoginHint(() => rpc.call(coreContracts.chat.send, { runId: command.runId, text: command.text }));
386
- const outcome = await follow({ reader, baseUrl, text: command.text.trim(), json: command.json, write });
507
+ const outcome = await withLoginHint(() => follow({ rpc, baseUrl, runId: command.runId, text: command.text, json: command.json, write,
508
+ send: () => rpc.call(coreContracts.chat.send, { runId: command.runId, text: command.text }).then(() => undefined) }));
387
509
  write(`run: ${command.runId}`);
388
510
  return EXIT_CODES[outcome];
389
511
  };
390
512
 
513
+ /** Mit RAGENTS_URL liegt das Journal beim Server, nicht im Datenordner des lokalen Profils; ragents.runs.events braucht runs.inspect. */
514
+ const serverJournal = async (target: ProfileTarget, runId: string): Promise<readonly JournalEvent[]> => {
515
+ const baseUrl = await addressOf(target);
516
+ try {
517
+ const events = await withLoginHint(() => client(baseUrl).call(runContracts.events, { runId }));
518
+ return events.map((event) => ({ sequence: event.sequence, type: event.type, actorId: event.actorId, occurredAt: event.occurredAt,
519
+ payload: event.payload as Record<string, unknown> }));
520
+ } catch (error) {
521
+ if (error instanceof RpcError && error.status === 403) throw new Error(`Das Journal über ${baseUrl} braucht das Recht runs.inspect: ${error.message}`);
522
+ throw error;
523
+ }
524
+ };
525
+
391
526
  const journalCommand = async (command: Extract<AgentCommand, { kind: "journal" }>, write: LineWriter): Promise<number> => {
392
527
  const target = await loadProfile(command.profile);
393
- const events = readJournal(target.dataDirectory, command.runId);
528
+ const events = process.env.RAGENTS_URL ? await serverJournal(target, command.runId) : readJournal(target.dataDirectory, command.runId);
394
529
  if (command.json) for (const event of events) write(JSON.stringify(event));
395
530
  else for (const line of journalLines(events, command.tools ? "tools" : "chat", 0)) write(line);
396
531
  return 0;
397
532
  };
398
533
 
399
- const stopCommand = async (command: Extract<AgentCommand, { kind: "stop" }>): Promise<number> => {
534
+ const stopCommand = async (command: Extract<AgentCommand, { kind: "stop" | "stop-run" }>): Promise<number> => {
400
535
  const target = await loadProfile(command.profile);
401
- const baseUrl = await addressOf(target);
402
- await withLoginHint(() => client(baseUrl).call(coreContracts.chat.stop, { runId: command.runId }));
403
- note(`== Turn von ${command.runId} abgebrochen`);
536
+ const rpc = client(await addressOf(target));
537
+ if (command.kind === "stop-run") {
538
+ await withLoginHint(() => stopWholeRun(rpc, command.runId));
539
+ note(`== Run ${command.runId} angehalten (Not-Aus)`);
540
+ return 0;
541
+ }
542
+ const actorId = await withLoginHint(() => interruptPrimaryTurn(rpc, command.runId));
543
+ note(`== Laufender Turn von ${actorId} in ${command.runId} unterbrochen; der Run bleibt aktiv`);
404
544
  return 0;
405
545
  };
406
546
 
@@ -413,6 +553,17 @@ const alive = (pid: number): boolean => {
413
553
  }
414
554
  };
415
555
 
556
+ /** Die PID, die der Host unter dieser Adresse selbst nennt; undefined, wenn dort kein Host antwortet. */
557
+ const hostPidAt = async (baseUrl: string): Promise<number | undefined> => {
558
+ try {
559
+ const response = await fetch(`${baseUrl}/health`, { signal: AbortSignal.timeout(HEALTH_TIMEOUT_MS) });
560
+ const body = response.ok ? await response.json() as { pid?: unknown } : undefined;
561
+ return typeof body?.pid === "number" ? body.pid : undefined;
562
+ } catch {
563
+ return undefined;
564
+ }
565
+ };
566
+
416
567
  const stopHostCommand = async (command: Extract<AgentCommand, { kind: "stop-host" }>): Promise<number> => {
417
568
  const target = await loadProfile(command.profile);
418
569
  const noted = readHostRecord(target.dataDirectory);
@@ -422,6 +573,12 @@ const stopHostCommand = async (command: Extract<AgentCommand, { kind: "stop-host
422
573
  note(`== Der gemerkte Host (PID ${noted.pid}) läuft nicht mehr; der Vermerk ist weg.`);
423
574
  return 0;
424
575
  }
576
+ const answering = await hostPidAt(noted.url);
577
+ if (answering !== noted.pid) {
578
+ removeHostRecord(target.dataDirectory);
579
+ const found = answering === undefined ? "kein Host, der seine PID nennt" : `ein anderer Host (PID ${answering})`;
580
+ throw new Error(`Unter ${noted.url} antwortet ${found}; die gemerkte PID ${noted.pid} gehört nicht nachweislich zum Host und wird nicht beendet. Der Vermerk ist weg.`);
581
+ }
425
582
  process.kill(noted.pid, "SIGTERM");
426
583
  const deadline = Date.now() + HOST_STOP_TIMEOUT_MS;
427
584
  while (Date.now() < deadline && alive(noted.pid)) await delay(250);
@@ -438,7 +595,7 @@ export const execute = async (command: AgentCommand, write: LineWriter = toStdou
438
595
  if (command.kind === "run") return runCommand(command, write);
439
596
  if (command.kind === "send") return sendCommand(command, write);
440
597
  if (command.kind === "journal") return journalCommand(command, write);
441
- if (command.kind === "stop") return stopCommand(command);
598
+ if (command.kind === "stop" || command.kind === "stop-run") return stopCommand(command);
442
599
  return stopHostCommand(command);
443
600
  };
444
601
 
@@ -452,6 +609,7 @@ const main = async (): Promise<number> => {
452
609
  console.error(usage());
453
610
  return 1;
454
611
  }
612
+ if (argv[0] === "plugin") return (await import("../plugin/plugin-cli.ts")).main(argv.slice(1));
455
613
  return execute(parseArguments(argv));
456
614
  };
457
615
 
@@ -84,7 +84,7 @@ export const usageByActor = (events: readonly JournalEvent[]): Map<string, Actor
84
84
  const result = new Map<string, ActorUsage>();
85
85
  for (const event of events) {
86
86
  const model = event.payload.usage as Record<string, unknown> | undefined;
87
- if (!model) continue;
87
+ if (!model || event.type === "model.step.completed") continue;
88
88
  const entry = result.get(event.actorId) ?? { calls: 0, inputTokens: 0, cacheReadTokens: 0, outputTokens: 0, costUsd: 0 };
89
89
  entry.calls += 1;
90
90
  for (const key of ["inputTokens", "cacheReadTokens", "outputTokens", "costUsd"] as const) {
@@ -111,12 +111,16 @@ export const journalLines = (events: readonly JournalEvent[], mode: JournalMode,
111
111
  const output = text(payload.text);
112
112
  if (output.trim()) lines.push(`[${event.sequence}] ${actor}: ${output.slice(0, 800)}`);
113
113
  } else if (type === "actor.input.enqueued" && mode !== "tools") {
114
- const input = payload.input as Record<string, unknown> | undefined;
115
- lines.push(`[${event.sequence}] INPUT -> ${String(payload.actorId ?? "").slice(0, 14)}: ${text(payload.text ?? input?.text).slice(0, 300)}`);
114
+ const content = payload.subscriptionId ? `[event ${String((payload.sourceEventIds as string[] | undefined)?.[0] ?? "")}]` : text(payload.content);
115
+ lines.push(`[${event.sequence}] INPUT -> ${String(payload.actorId ?? "").slice(0, 14)}: ${content.slice(0, 300)}`);
116
+ } else if (type === "context.compacted" && mode !== "tools") {
117
+ lines.push(`[${event.sequence}] CONTEXT COMPACTED ${actor}: about ${String(payload.tokensBefore)} tokens summarized`);
118
+ } else if (type === "turn.input-steered" && mode !== "tools") {
119
+ lines.push(`[${event.sequence}] STEERING -> ${actor}: ${String(payload.inputId ?? "")} in ${String(payload.turnId ?? "")}`);
116
120
  } else if (type.startsWith("tool.call.") && mode !== "chat") {
117
121
  const body = type.endsWith("started") ? payload.input : type.endsWith("failed") ? payload.error : undefined;
118
122
  if (body !== undefined) lines.push(`[${event.sequence}] ${type.split(".").pop()} ${actor} ${String(payload.name ?? "")}: ${JSON.stringify(body).slice(0, 300)}`);
119
- } else if (mode !== "tools" && (type.includes("failed") || type.includes("stopped") || type.includes("question"))) {
123
+ } else if (mode !== "tools" && (type.includes("failed") || type.includes("stopped") || type.startsWith("action."))) {
120
124
  lines.push(`[${event.sequence}] ${type} ${actor}: ${JSON.stringify(payload).slice(0, 300)}`);
121
125
  }
122
126
  }
@@ -0,0 +1,19 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { coreContracts } from "../../apps/server/src/api/contracts.ts";
3
+ import type { RpcClient } from "../../apps/web/src/rpc/client.ts";
4
+ import { runContracts } from "../../packages/ragents/src/http/contracts.ts";
5
+
6
+ /** Wie die Chat-Eingabe: nur der laufende Turn des Primary-Actors endet, Run und Actors bleiben aktiv. */
7
+ export const interruptPrimaryTurn = async (rpc: RpcClient, runId: string): Promise<string> => {
8
+ const view = await rpc.call(runContracts.view, { runId });
9
+ if (!view) throw new Error(`Der Run ${runId} ist nicht gestartet.`);
10
+ const actorId = view.primaryActorId;
11
+ if (!actorId) throw new Error(`Der Run ${runId} hat keinen Primary-Actor, dessen Turn sich unterbrechen ließe; den ganzen Run hält stop mit --run an.`);
12
+ await rpc.call(runContracts.interruptTurn, { runId, commandId: randomUUID(), actorId });
13
+ return actorId;
14
+ };
15
+
16
+ /** Not-Aus: bricht alle Turns ab und stoppt alle Actors des Runs. */
17
+ export const stopWholeRun = async (rpc: RpcClient, runId: string): Promise<void> => {
18
+ await rpc.call(coreContracts.chat.stop, { runId });
19
+ };