@schlenkr/ragents 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (748) hide show
  1. package/README.md +1 -1
  2. package/apps/server/package.json +1 -1
  3. package/apps/server/src/access-projection.ts +6 -6
  4. package/apps/server/src/access-service.ts +3 -3
  5. package/apps/server/src/access-session.ts +19 -19
  6. package/apps/server/src/api/contracts.ts +29 -29
  7. package/apps/server/src/api/core-methods.ts +17 -17
  8. package/apps/server/src/api/delivery.ts +2 -2
  9. package/apps/server/src/api/reference.ts +27 -27
  10. package/apps/server/src/api/rights.ts +18 -18
  11. package/apps/server/src/chat-handler.ts +5 -5
  12. package/apps/server/src/config-definition.ts +37 -10
  13. package/apps/server/src/config-file.ts +49 -49
  14. package/apps/server/src/config.ts +2 -0
  15. package/apps/server/src/data-directory.ts +2 -2
  16. package/apps/server/src/external-access.ts +1 -1
  17. package/apps/server/src/folder-install.ts +1 -1
  18. package/apps/server/src/help-files.ts +1 -1
  19. package/apps/server/src/host-api.json +6 -1
  20. package/apps/server/src/host-api.ts +3 -2
  21. package/apps/server/src/host-record.ts +3 -3
  22. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  23. package/apps/server/src/host-version.ts +17 -17
  24. package/apps/server/src/host-web.ts +5 -5
  25. package/apps/server/src/main.ts +6 -6
  26. package/apps/server/src/missing-environment.ts +6 -6
  27. package/apps/server/src/parent-watch.ts +4 -4
  28. package/apps/server/src/plugin-build/build.ts +38 -38
  29. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  30. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  31. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  32. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  33. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  34. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  35. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  36. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  37. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  38. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  39. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  40. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  41. package/apps/server/src/plugin-support/http.ts +2 -2
  42. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  43. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  44. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  45. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  46. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  47. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  48. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  49. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  50. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  51. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  52. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  53. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  54. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  55. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  56. package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
  57. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  58. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  59. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  60. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  61. package/apps/server/src/plugin-support/prompt.ts +1 -1
  62. package/apps/server/src/plugin-support/provision.ts +8 -8
  63. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  64. package/apps/server/src/plugin-support/skills.ts +18 -18
  65. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  66. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  67. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  68. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  69. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  70. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  71. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  72. package/apps/server/src/plugin-support/zip.ts +7 -7
  73. package/apps/server/src/profile/bundle-manifest.ts +27 -27
  74. package/apps/server/src/profile/compose.ts +12 -7
  75. package/apps/server/src/profile/plugin-discovery.ts +14 -14
  76. package/apps/server/src/profile/provisioning.ts +5 -5
  77. package/apps/server/src/profile-target.ts +10 -10
  78. package/apps/server/src/protocol.ts +2 -2
  79. package/apps/server/src/provider.ts +62 -57
  80. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  81. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  82. package/apps/server/src/ragents/coordinator.ts +2 -2
  83. package/apps/server/src/ragents/engine.ts +23 -23
  84. package/apps/server/src/ragents/global-chat.ts +8 -8
  85. package/apps/server/src/ragents/host-services.ts +6 -3
  86. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  87. package/apps/server/src/ragents/run-owner.ts +2 -2
  88. package/apps/server/src/ragents/session.ts +49 -49
  89. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  90. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  91. package/apps/server/src/rpc/dispatcher.ts +19 -19
  92. package/apps/server/src/rpc/http-transport.ts +11 -11
  93. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  94. package/apps/server/src/run-preparation-input.ts +5 -5
  95. package/apps/server/src/run-preparation.ts +24 -24
  96. package/apps/server/src/run-transfer.ts +39 -39
  97. package/apps/server/src/server.ts +48 -48
  98. package/apps/server/src/settings.ts +1 -1
  99. package/apps/server/src/startup.ts +3 -3
  100. package/apps/server/src/title-compactor.ts +9 -9
  101. package/apps/server/src/title-settings.ts +3 -3
  102. package/apps/server/src/web-bundles.ts +2 -2
  103. package/apps/server/src/web-stylesheet.ts +2 -2
  104. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-CpPi6QLr.js} +1 -1
  105. package/apps/web/dist/assets/main-DJmCHGzM.js +11 -0
  106. package/apps/web/dist/assets/mermaid-HWGCJPDP-q-mf1kLN.js +608 -0
  107. package/apps/web/dist/assets/runPanel-nk_aMxSn.js +21 -0
  108. package/apps/web/dist/help/guide-access.html +5 -5
  109. package/apps/web/dist/help/guide-access.md +2 -2
  110. package/apps/web/dist/help/guide-clients.html +53 -54
  111. package/apps/web/dist/help/guide-clients.md +50 -51
  112. package/apps/web/dist/help/guide-distributed.html +12 -7
  113. package/apps/web/dist/help/guide-distributed.md +9 -4
  114. package/apps/web/dist/help/guide-functions.html +3 -3
  115. package/apps/web/dist/help/guide-getting-started.html +24 -15
  116. package/apps/web/dist/help/guide-getting-started.md +22 -12
  117. package/apps/web/dist/help/guide-ideas.html +3 -3
  118. package/apps/web/dist/help/guide-plugins.html +5 -4
  119. package/apps/web/dist/help/guide-plugins.md +2 -1
  120. package/apps/web/dist/help/guide-programs.html +3 -3
  121. package/apps/web/dist/help/guide-runtime.html +6 -6
  122. package/apps/web/dist/help/guide-runtime.md +3 -3
  123. package/apps/web/dist/help/guide.html +3 -3
  124. package/apps/web/dist/help/index.html +196 -144
  125. package/apps/web/dist/help/mini-app.css +6 -0
  126. package/apps/web/dist/help/mini-app.js +14 -14
  127. package/apps/web/dist/host-web.json +91 -91
  128. package/apps/web/dist/index.html +3 -3
  129. package/apps/web/dist/run-panel.html +3 -3
  130. package/apps/web/package.json +1 -1
  131. package/apps/web/src/AccessContext.tsx +15 -15
  132. package/apps/web/src/App.tsx +13 -13
  133. package/apps/web/src/DiffCode.tsx +2 -2
  134. package/apps/web/src/HelpDialog.tsx +3 -3
  135. package/apps/web/src/Overview.tsx +13 -13
  136. package/apps/web/src/PluginActivation.ts +1 -1
  137. package/apps/web/src/PluginChat.tsx +15 -15
  138. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  139. package/apps/web/src/PluginRegistry.tsx +44 -44
  140. package/apps/web/src/RunPreparationChat.tsx +11 -11
  141. package/apps/web/src/RunStore.ts +1 -1
  142. package/apps/web/src/SessionList.tsx +14 -14
  143. package/apps/web/src/SettingsModal.tsx +112 -112
  144. package/apps/web/src/StartOptions.tsx +11 -11
  145. package/apps/web/src/StartSelection.tsx +11 -11
  146. package/apps/web/src/StartTiles.tsx +8 -8
  147. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  148. package/apps/web/src/ThemeSettings.tsx +8 -8
  149. package/apps/web/src/TitleModelSettings.tsx +13 -13
  150. package/apps/web/src/WorkspacePanel.tsx +9 -9
  151. package/apps/web/src/access-session.ts +4 -4
  152. package/apps/web/src/access-token.ts +5 -5
  153. package/apps/web/src/actor-conversation.ts +3 -3
  154. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  155. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  156. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  157. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  158. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  159. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  160. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  161. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  162. package/apps/web/src/api.ts +7 -7
  163. package/apps/web/src/chat/QuasselHost.tsx +1 -1
  164. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  165. package/apps/web/src/chat/chat-target.ts +3 -3
  166. package/apps/web/src/chat/requests.ts +2 -2
  167. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  168. package/apps/web/src/chat-view-settings.tsx +5 -6
  169. package/apps/web/src/diff-view.css +1 -1
  170. package/apps/web/src/highlighting.css +1 -1
  171. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  172. package/apps/web/src/lib/labels.ts +6 -6
  173. package/apps/web/src/main.tsx +4 -4
  174. package/apps/web/src/offered-machines.ts +2 -2
  175. package/apps/web/src/page-opener.tsx +1 -1
  176. package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
  177. package/apps/web/src/panel/LoginForm.tsx +6 -6
  178. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  179. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  180. package/apps/web/src/panel/PanelPage.tsx +1 -1
  181. package/apps/web/src/panel/RunLine.tsx +4 -4
  182. package/apps/web/src/panel/RunsPage.tsx +15 -15
  183. package/apps/web/src/panel/StartPage.tsx +26 -26
  184. package/apps/web/src/panel/connection-state.ts +9 -9
  185. package/apps/web/src/panel/contract.ts +28 -28
  186. package/apps/web/src/panel.tsx +1 -1
  187. package/apps/web/src/plugin-bootstrap.ts +5 -5
  188. package/apps/web/src/product/ModelControl.tsx +3 -3
  189. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  190. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  191. package/apps/web/src/product/model-settings.ts +2 -2
  192. package/apps/web/src/rpc/client.ts +16 -16
  193. package/apps/web/src/rpc.ts +1 -1
  194. package/apps/web/src/run-overview.ts +1 -1
  195. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  196. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  197. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  198. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  199. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  200. package/apps/web/src/run-panel/clipboard.ts +3 -3
  201. package/apps/web/src/run-panel/host-contract.ts +5 -5
  202. package/apps/web/src/run-panel/host.ts +15 -15
  203. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  204. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  205. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  206. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  207. package/apps/web/src/run-panel.tsx +4 -4
  208. package/apps/web/src/run-preparation.ts +2 -2
  209. package/apps/web/src/run-view.ts +3 -3
  210. package/apps/web/src/settings-contributions.ts +32 -32
  211. package/apps/web/src/theme.ts +9 -9
  212. package/apps/web/src/title-model-settings.ts +6 -6
  213. package/apps/web/src/ui/ListDetail.tsx +9 -9
  214. package/apps/web/src/ui/dialog.tsx +2 -2
  215. package/apps/web/src/ui/modal-controller.ts +3 -3
  216. package/apps/web/src/ui/modal.tsx +2 -2
  217. package/apps/web/src/ui/popover.tsx +1 -1
  218. package/apps/web/src/ui/relative-time.ts +8 -8
  219. package/apps/web/src/ui/startup-notice.tsx +2 -2
  220. package/apps/web/src/ui/state-icon.tsx +1 -1
  221. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  222. package/apps/web/src/ui/stop-button.tsx +2 -2
  223. package/bundles/ragents.activity/ragents-bundle.json +3 -3
  224. package/bundles/ragents.activity/web/classes.json +1 -1
  225. package/bundles/ragents.activity/web/index.js +1 -1
  226. package/bundles/ragents.activity/web/index.js.map +2 -2
  227. package/bundles/ragents.actor-programs/ragents-bundle.json +3 -3
  228. package/bundles/ragents.actor-programs/server/index.js +225 -225
  229. package/bundles/ragents.actor-programs/server/index.js.map +2 -2
  230. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  231. package/bundles/ragents.actor-programs/web/index.js +1 -1
  232. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  233. package/bundles/ragents.ask/ragents-bundle.json +3 -3
  234. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  235. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  236. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  237. package/bundles/ragents.ask/server/index.js +23 -23
  238. package/bundles/ragents.ask/server/index.js.map +2 -2
  239. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  240. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  241. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
  242. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
  243. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  245. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  246. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  247. package/bundles/ragents.ask/web/classes.json +1 -1
  248. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  249. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  250. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  251. package/bundles/ragents.ask/web/index.js +1 -1
  252. package/bundles/ragents.ask/web/index.js.map +2 -2
  253. package/bundles/ragents.browser/executor/index.mjs +35 -35
  254. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  255. package/bundles/ragents.browser/ragents-bundle.json +3 -3
  256. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  257. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  258. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  259. package/bundles/ragents.browser/server/index.js +31 -31
  260. package/bundles/ragents.browser/server/index.js.map +2 -2
  261. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  262. package/bundles/ragents.documents/prompt.hbs +1 -1
  263. package/bundles/ragents.documents/ragents-bundle.json +3 -3
  264. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  265. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  266. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  267. package/bundles/ragents.documents/server/index.js +26 -26
  268. package/bundles/ragents.documents/server/index.js.map +2 -2
  269. package/bundles/ragents.documents/web/classes.json +1 -1
  270. package/bundles/ragents.documents/web/index.js +1 -1
  271. package/bundles/ragents.documents/web/index.js.map +3 -3
  272. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  273. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  274. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +3 -3
  275. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  276. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  277. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  278. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  280. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  281. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +3 -3
  282. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  283. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  284. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  285. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  286. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  287. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  288. package/bundles/ragents.lsp-typescript/ragents-bundle.json +3 -3
  289. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  290. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  291. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  292. package/bundles/ragents.model-relay/ragents-bundle.json +8 -4
  293. package/bundles/ragents.model-relay/server/index.js +25 -21
  294. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  295. package/bundles/ragents.orchestration/ragents-bundle.json +3 -3
  296. package/bundles/ragents.orchestration/server/index.js +28 -28
  297. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  300. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  301. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  302. package/bundles/ragents.orchestration/web/classes.json +1 -1
  303. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  304. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  305. package/bundles/ragents.orchestration/web/index.js +8 -8
  306. package/bundles/ragents.orchestration/web/index.js.map +2 -2
  307. package/bundles/ragents.overseer/ragents-bundle.json +3 -3
  308. package/bundles/ragents.overseer/server/index.js +98 -98
  309. package/bundles/ragents.overseer/server/index.js.map +2 -2
  310. package/bundles/ragents.overseer/web/classes.json +1 -1
  311. package/bundles/ragents.overseer/web/index.js +1 -1
  312. package/bundles/ragents.overseer/web/index.js.map +2 -2
  313. package/bundles/ragents.processes/ragents-bundle.json +3 -3
  314. package/bundles/ragents.processes/server/index.js +11 -11
  315. package/bundles/ragents.processes/server/index.js.map +2 -2
  316. package/bundles/ragents.processes/web/classes.json +1 -1
  317. package/bundles/ragents.processes/web/index.js +3 -3
  318. package/bundles/ragents.processes/web/index.js.map +2 -2
  319. package/bundles/ragents.product/ragents-bundle.json +3 -3
  320. package/bundles/ragents.product/server/index.js +12 -13
  321. package/bundles/ragents.product/server/index.js.map +2 -2
  322. package/bundles/ragents.product/web/classes.json +1 -1
  323. package/bundles/ragents.product/web/index.js +1 -1
  324. package/bundles/ragents.product/web/index.js.map +2 -2
  325. package/bundles/ragents.profile-distribution/ragents-bundle.json +3 -3
  326. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  327. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  328. package/bundles/ragents.reference/ragents-bundle.json +3 -3
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  335. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  336. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  340. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  341. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  347. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  348. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  349. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  350. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  352. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  353. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  360. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  361. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  362. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  363. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  365. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  366. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  367. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  368. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  392. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  393. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  394. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  395. package/bundles/ragents.reference/web/classes.json +1 -1
  396. package/bundles/ragents.reference/web/index.js +1 -1
  397. package/bundles/ragents.reference/web/index.js.map +2 -2
  398. package/bundles/ragents.todo/ragents-bundle.json +3 -3
  399. package/bundles/ragents.todo/server/index.js +5 -8
  400. package/bundles/ragents.todo/server/index.js.map +2 -2
  401. package/bundles/ragents.todo/web/classes.json +1 -1
  402. package/bundles/ragents.todo/web/index.js +1 -1
  403. package/bundles/ragents.todo/web/index.js.map +2 -2
  404. package/bundles/ragents.transcript/ragents-bundle.json +3 -3
  405. package/bundles/ragents.transcript/server/index.js +11 -11
  406. package/bundles/ragents.transcript/server/index.js.map +2 -2
  407. package/bundles/ragents.watch/ragents-bundle.json +3 -3
  408. package/bundles/ragents.watch/server/index.js +48 -48
  409. package/bundles/ragents.watch/server/index.js.map +2 -2
  410. package/bundles/ragents.workspace/ragents-bundle.json +3 -3
  411. package/bundles/ragents.workspace/server/index.js +83 -83
  412. package/bundles/ragents.workspace/server/index.js.map +2 -2
  413. package/bundles/ragents.workspace/web/classes.json +1 -1
  414. package/bundles/ragents.workspace/web/index.js +1 -1
  415. package/bundles/ragents.workspace/web/index.js.map +2 -2
  416. package/package.json +4 -4
  417. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  418. package/packages/agent/dist/index.d.ts +1 -1
  419. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  420. package/packages/agent/src/core/compaction/utils.ts +1 -1
  421. package/packages/agent/src/core/model-runtime.ts +45 -5
  422. package/packages/agent/src/index.ts +1 -1
  423. package/packages/agent/src/loop/agent-loop.ts +2 -2
  424. package/packages/ai/dist/models.d.ts +1 -0
  425. package/packages/ai/dist/models.generated.d.ts +4544 -983
  426. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  427. package/packages/ai/src/api/ai-sdk.ts +33 -7
  428. package/packages/ai/src/api-registry.ts +1 -1
  429. package/packages/ai/src/index.ts +2 -2
  430. package/packages/ai/src/models.generated.ts +1 -1
  431. package/packages/ai/src/models.ts +1 -1
  432. package/packages/ai/src/providers/openrouter.models.ts +3725 -552
  433. package/packages/ragents/src/access.ts +12 -12
  434. package/packages/ragents/src/agents/actor-input.ts +33 -33
  435. package/packages/ragents/src/agents/catalog.ts +1 -1
  436. package/packages/ragents/src/agents/delivery.ts +17 -17
  437. package/packages/ragents/src/agents/plugins.ts +1 -1
  438. package/packages/ragents/src/agents/scheduler.ts +7 -7
  439. package/packages/ragents/src/agents/schemas.ts +1 -1
  440. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  441. package/packages/ragents/src/agents/tools.ts +20 -20
  442. package/packages/ragents/src/agents/toolset.ts +5 -5
  443. package/packages/ragents/src/agents/workspaces.ts +1 -1
  444. package/packages/ragents/src/domain/events.ts +1 -1
  445. package/packages/ragents/src/domain/model.ts +5 -5
  446. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  447. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  448. package/packages/ragents/src/drivers/agent.ts +2 -2
  449. package/packages/ragents/src/drivers/attachments.ts +4 -4
  450. package/packages/ragents/src/http/contracts.ts +14 -14
  451. package/packages/ragents/src/http/methods.ts +6 -6
  452. package/packages/ragents/src/plugin-host.ts +119 -119
  453. package/packages/ragents/src/plugin-types.ts +16 -16
  454. package/packages/ragents/src/rpc/contract.ts +5 -5
  455. package/packages/ragents/src/rpc/contribution.ts +2 -2
  456. package/packages/ragents/src/rpc/peer.ts +11 -11
  457. package/packages/ragents/src/rpc/protocol.ts +2 -2
  458. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  459. package/packages/ragents/src/runtime/journal-storage.ts +1 -1
  460. package/packages/ragents/src/runtime/journal.ts +10 -10
  461. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  462. package/packages/ragents/src/runtime/stop.ts +2 -2
  463. package/packages/ragents/src/script/mediators.ts +35 -35
  464. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  465. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  466. package/packages/ragents/src/typescript/compiler.ts +7 -7
  467. package/packages/ragents/src/typescript/snippet.ts +5 -5
  468. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  469. package/packages/workspace-executor/src/commands.ts +18 -18
  470. package/packages/workspace-executor/src/context.ts +15 -15
  471. package/packages/workspace-executor/src/contributions.ts +44 -44
  472. package/packages/workspace-executor/src/errors.ts +1 -1
  473. package/packages/workspace-executor/src/executor.ts +16 -16
  474. package/packages/workspace-executor/src/files.ts +31 -31
  475. package/packages/workspace-executor/src/index.ts +1 -1
  476. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  477. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  478. package/packages/workspace-executor/src/language-server/host.ts +36 -36
  479. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  480. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  481. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  482. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  483. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +3 -3
  484. package/packages/workspace-executor/src/managed-process.ts +12 -12
  485. package/packages/workspace-executor/src/module.ts +8 -8
  486. package/packages/workspace-executor/src/modules.ts +3 -3
  487. package/packages/workspace-executor/src/paths.ts +11 -11
  488. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  489. package/packages/workspace-executor/src/processes/module.ts +3 -3
  490. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  491. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  492. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  493. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  494. package/packages/workspace-executor/src/run-folders.ts +3 -3
  495. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  496. package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
  497. package/packages/workspace-executor/src/session-ident.ts +2 -2
  498. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  499. package/packages/workspace-executor/src/tools.ts +5 -5
  500. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  501. package/plugins/ragents.activity/web/activity.ts +2 -2
  502. package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
  503. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  504. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  505. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  506. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  507. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  508. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  509. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  510. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  511. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  512. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  513. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  514. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  515. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  516. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  517. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  518. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  519. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  520. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  521. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  522. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  523. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  524. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  525. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  526. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  527. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  528. package/plugins/ragents.ask/ask-payload.ts +1 -1
  529. package/plugins/ragents.ask/contract.ts +5 -5
  530. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  531. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  532. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  533. package/plugins/ragents.ask/server/contract.ts +5 -5
  534. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  535. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  536. package/plugins/ragents.ask/web/index.tsx +2 -2
  537. package/plugins/ragents.browser/executor/contract.ts +6 -6
  538. package/plugins/ragents.browser/executor/index.ts +1 -1
  539. package/plugins/ragents.browser/executor/module.ts +6 -6
  540. package/plugins/ragents.browser/executor/pages.ts +32 -32
  541. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  542. package/plugins/ragents.browser/provision.ts +7 -7
  543. package/plugins/ragents.browser/server/browser.ts +14 -14
  544. package/plugins/ragents.browser/server/contract.ts +1 -1
  545. package/plugins/ragents.browser/server/index.ts +1 -1
  546. package/plugins/ragents.browser/server/tools.ts +14 -14
  547. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  548. package/plugins/ragents.documents/contract.ts +2 -2
  549. package/plugins/ragents.documents/prompt.hbs +1 -1
  550. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  551. package/plugins/ragents.documents/server/files-route.ts +6 -6
  552. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  553. package/plugins/ragents.documents/server/store.ts +1 -1
  554. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  555. package/plugins/ragents.documents/web/index.tsx +11 -11
  556. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  557. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  558. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  559. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  560. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  561. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  562. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  563. package/plugins/ragents.model-relay/server/config.ts +6 -2
  564. package/plugins/ragents.model-relay/server/index.ts +2 -2
  565. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  566. package/plugins/ragents.orchestration/contract.ts +8 -8
  567. package/plugins/ragents.orchestration/server/index.ts +4 -4
  568. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  569. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  570. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  571. package/plugins/ragents.orchestration/web/ActorChat.tsx +3 -3
  572. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -5
  573. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  574. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  575. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  576. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  577. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  578. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  579. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  580. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  581. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  582. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  583. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  584. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  585. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  586. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  587. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  588. package/plugins/ragents.orchestration/web/format.ts +1 -1
  589. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  590. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  591. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  592. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
  593. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  594. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  595. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  596. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  597. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  598. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  599. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
  600. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  601. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  602. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  603. package/plugins/ragents.overseer/contract.ts +20 -20
  604. package/plugins/ragents.overseer/server/api.ts +6 -6
  605. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  606. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  607. package/plugins/ragents.overseer/server/index.ts +24 -24
  608. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  609. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  610. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  611. package/plugins/ragents.overseer/server/settings.ts +6 -6
  612. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  613. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  614. package/plugins/ragents.overseer/web/index.tsx +20 -20
  615. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  616. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  617. package/plugins/ragents.processes/contract.ts +5 -5
  618. package/plugins/ragents.processes/server/methods.ts +4 -4
  619. package/plugins/ragents.processes/server/observer.ts +8 -8
  620. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  621. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  622. package/plugins/ragents.processes/web/processes.ts +10 -10
  623. package/plugins/ragents.product/server/config.ts +1 -1
  624. package/plugins/ragents.product/server/index.ts +4 -4
  625. package/plugins/ragents.product/server/runtime.ts +9 -10
  626. package/plugins/ragents.product/web/index.tsx +1 -1
  627. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  628. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  629. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  630. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  631. package/plugins/ragents.reference/examples.ts +27 -27
  632. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  636. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  637. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  638. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  639. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  640. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  641. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  642. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  643. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  644. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  645. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  648. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  649. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  650. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  651. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  652. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  653. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  654. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  655. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  656. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  657. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  661. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  662. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  663. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  664. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  665. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  666. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  667. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  668. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  669. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  670. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  671. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  672. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  693. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  694. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  695. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  696. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  697. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  698. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  699. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  700. package/plugins/ragents.todo/contract.ts +0 -3
  701. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  702. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  703. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  704. package/plugins/ragents.watch/server/condition.ts +4 -4
  705. package/plugins/ragents.watch/server/functions.ts +27 -27
  706. package/plugins/ragents.watch/server/observation.ts +2 -2
  707. package/plugins/ragents.watch/server/service.ts +14 -14
  708. package/plugins/ragents.workspace/client/transport.ts +1 -1
  709. package/plugins/ragents.workspace/client/workspace-client.ts +63 -63
  710. package/plugins/ragents.workspace/contract.ts +46 -46
  711. package/plugins/ragents.workspace/server/binding.ts +20 -20
  712. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  713. package/plugins/ragents.workspace/server/clients.ts +50 -50
  714. package/plugins/ragents.workspace/server/config.ts +7 -7
  715. package/plugins/ragents.workspace/server/index.ts +3 -3
  716. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  717. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  718. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  719. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  720. package/plugins/ragents.workspace/web/index.tsx +1 -1
  721. package/ragents.config.core.ts +1 -1
  722. package/ragents.config.developer.ts +3 -3
  723. package/ragents.config.showcase.ts +2 -2
  724. package/scripts/agent/agent-cli.ts +96 -96
  725. package/scripts/agent/journal.ts +5 -5
  726. package/scripts/agent/turn-control.ts +4 -4
  727. package/scripts/package/build-package.ts +31 -31
  728. package/scripts/package/host-links.mjs +3 -3
  729. package/scripts/package/publish-package.ts +29 -29
  730. package/scripts/package/ragents.mjs +19 -19
  731. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  732. package/scripts/plugin/plugin-cli.ts +14 -14
  733. package/scripts/provision/run-provision.ts +14 -15
  734. package/scripts/remote/connect.ts +49 -49
  735. package/scripts/remote/start.ts +18 -18
  736. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  737. package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
  738. package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
  739. package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
  740. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  741. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  742. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  743. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  744. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  745. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  746. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  747. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  748. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -40,7 +40,7 @@ var WatchConditionError = class extends Error {
40
40
  }
41
41
  };
42
42
  var compileWatchCondition = async (condition, signal) => {
43
- if (!condition.trim()) throw new WatchConditionError("Die Weckbedingung darf nicht leer sein.");
43
+ if (!condition.trim()) throw new WatchConditionError("The wake condition must not be empty.");
44
44
  const compiled = await compileVirtualTypeScriptAsync({
45
45
  sources: [{ fileName: conditionFile, text: `${watchStateDeclarations}
46
46
  const wake = (now: WatchState, before: WatchState): string | undefined => {
@@ -50,11 +50,11 @@ ${condition}
50
50
  emit: "node"
51
51
  }, { signal });
52
52
  if (!compiled.valid) {
53
- throw new WatchConditionError(`Die Weckbedingung ist kein g\xFCltiges TypeScript:
53
+ throw new WatchConditionError(`The wake condition is not valid TypeScript:
54
54
  ${compiled.diagnostics.map((diagnostic) => `${diagnostic.start ? `${Math.max(1, diagnostic.start.line - watchStateDeclarations.split("\n").length)}:${diagnostic.start.column} ` : ""}TS${diagnostic.code}: ${diagnostic.message}`).join("\n")}`);
55
55
  }
56
56
  const emitted = compiled.emittedFiles.find((file) => file.fileName.endsWith(".js"));
57
- if (!emitted) throw new WatchConditionError("Die Weckbedingung hat keinen JavaScript-Code erzeugt.");
57
+ if (!emitted) throw new WatchConditionError("The wake condition produced no JavaScript code.");
58
58
  const sandbox = createContext(/* @__PURE__ */ Object.create(null));
59
59
  runInContext(`${emitted.text}
60
60
  globalThis.wake = wake;`, sandbox, { timeout: RUN_TIMEOUT_MS });
@@ -63,7 +63,7 @@ globalThis.wake = wake;`, sandbox, { timeout: RUN_TIMEOUT_MS });
63
63
  sandbox.before = before;
64
64
  const result = runInContext("wake(now, before)", sandbox, { timeout: RUN_TIMEOUT_MS });
65
65
  if (result === void 0 || result === null || result === false) return void 0;
66
- if (typeof result !== "string" || !result.trim()) throw new WatchConditionError(`Die Weckbedingung muss einen Grund als Text oder nichts liefern, nicht ${JSON.stringify(result)}.`);
66
+ if (typeof result !== "string" || !result.trim()) throw new WatchConditionError(`The wake condition must return a reason as text or nothing, not ${JSON.stringify(result)}.`);
67
67
  return result.trim().slice(0, REASON_CHARS);
68
68
  };
69
69
  };
@@ -72,38 +72,38 @@ globalThis.wake = wake;`, sandbox, { timeout: RUN_TIMEOUT_MS });
72
72
  import { Type } from "typebox";
73
73
  import { defineRunFunction, defineToolAvailability } from "@ragents/engine";
74
74
  import { toolDescriptorFrom } from "@ragents/host/plugin-support/agent-tool.js";
75
- var available = defineToolAvailability({ availability: "always", availabilityDetail: "In jedem Run verf\xFCgbar." }, () => true);
75
+ var available = defineToolAvailability({ availability: "always", availabilityDetail: "Available in every run." }, () => true);
76
76
  var verdictSchema = Type.Object({
77
- at: Type.String({ description: "Zeitpunkt der Bewertung" }),
78
- wake: Type.Boolean({ description: "Ob der W\xE4chter geweckt hat" }),
79
- reason: Type.String({ description: "Grund, den die Bedingung geliefert hat, oder 'Bedingung nicht erf\xFCllt'" }),
80
- changes: Type.Array(Type.String(), { description: "\xC4nderungen seit der letzten Weckung, die der Bewertung vorlagen" })
77
+ at: Type.String({ description: "Time of the evaluation" }),
78
+ wake: Type.Boolean({ description: "Whether the watch woke" }),
79
+ reason: Type.String({ description: "Reason the condition returned, or 'Condition not met'" }),
80
+ changes: Type.Array(Type.String(), { description: "Changes since the last wake that the evaluation saw" })
81
81
  }, { additionalProperties: false });
82
82
  var summarySchema = Type.Object({
83
- id: Type.String({ description: "Kennung des W\xE4chters f\xFCr watch_remove" }),
84
- source: Type.String({ description: "Beobachteter Actor als @handle" }),
85
- target: Type.String({ description: "Geweckter Actor als @handle" }),
86
- condition: Type.String({ description: "Weckbedingung als TypeScript-Funktionsrumpf" }),
87
- observe: Type.Optional(Type.String({ description: "Benannte Operation, deren Ergebnis zum beobachteten Stand geh\xF6rt" })),
88
- stallAfterSeconds: Type.Optional(Type.Integer({ description: "Sekunden ohne Ereignis des beobachteten Actors, ab denen der Stand einen Stillstand nennt" })),
89
- wakes: Type.Integer({ description: "Anzahl der bisherigen Weckungen" }),
90
- lastEvaluatedAt: Type.Optional(Type.String({ description: "Zeitpunkt der letzten Bewertung" })),
83
+ id: Type.String({ description: "Id of the watch for watch_remove" }),
84
+ source: Type.String({ description: "Observed actor as @handle" }),
85
+ target: Type.String({ description: "Woken actor as @handle" }),
86
+ condition: Type.String({ description: "Wake condition as a TypeScript function body" }),
87
+ observe: Type.Optional(Type.String({ description: "Named operation whose result belongs to the observed state" })),
88
+ stallAfterSeconds: Type.Optional(Type.Integer({ description: "Seconds without an event of the observed actor after which the state reports a stall" })),
89
+ wakes: Type.Integer({ description: "Number of wakes so far" }),
90
+ lastEvaluatedAt: Type.Optional(Type.String({ description: "Time of the last evaluation" })),
91
91
  lastVerdict: Type.Optional(verdictSchema)
92
92
  }, { additionalProperties: false });
93
93
  var createSchema = Type.Object({
94
- source: Type.String({ minLength: 1, description: "Beobachteter Actor als @handle oder Kennung" }),
95
- condition: Type.String({ minLength: 1, maxLength: 4e3, description: 'Weckbedingung als TypeScript-Funktionsrumpf von (now: WatchState, before: WatchState) => string | undefined; liefert den Weckgrund als Text oder undefined. WatchState: source { lifecycle idle|running|stopped, completedTurns, lastTurn { status, reason? }, pendingInputs, pendingActions, lastOutput? }, observed (Ergebnis der observe-Operation als Record<string, unknown>), stalledForSeconds (nur bei Stillstand). before ist der Stand bei der letzten Weckung. Beispiel: return now.source.completedTurns > before.source.completedTurns && now.observed?.phase !== "ready" ? "Turn beendet, Auftrag nicht fertig" : undefined;' }),
96
- target: Type.Optional(Type.String({ minLength: 1, description: "Zu weckender Actor als @handle oder Kennung; ohne Angabe der Aufrufer" })),
97
- observe: Type.Optional(Type.String({ minLength: 1, description: "Benannte Operation ohne Eingabe, deren Ergebnis den beobachteten Stand erg\xE4nzt und per Differenz verglichen wird" })),
98
- instruction: Type.Optional(Type.String({ minLength: 1, maxLength: 2e3, description: "Text, der jeder Weckung angeh\xE4ngt wird, etwa wie der Geweckte reagieren soll" })),
99
- stallAfterSeconds: Type.Optional(Type.Integer({ minimum: 1, description: "Sekunden ohne Ereignis des beobachteten Actors, ab denen der Stand stalledForSeconds nennt" }))
94
+ source: Type.String({ minLength: 1, description: "Observed actor as @handle or id" }),
95
+ condition: Type.String({ minLength: 1, maxLength: 4e3, description: 'Wake condition as a TypeScript function body of (now: WatchState, before: WatchState) => string | undefined; returns the wake reason as text or undefined. WatchState: source { lifecycle idle|running|stopped, completedTurns, lastTurn { status, reason? }, pendingInputs, pendingActions, lastOutput? }, observed (result of the observe operation as Record<string, unknown>), stalledForSeconds (only when stalled). before is the state at the last wake. Example: return now.source.completedTurns > before.source.completedTurns && now.observed?.phase !== "ready" ? "Turn ended, task not finished" : undefined;' }),
96
+ target: Type.Optional(Type.String({ minLength: 1, description: "Actor to wake as @handle or id; if omitted, the caller" })),
97
+ observe: Type.Optional(Type.String({ minLength: 1, description: "Named operation without input whose result extends the observed state and is compared by difference" })),
98
+ instruction: Type.Optional(Type.String({ minLength: 1, maxLength: 2e3, description: "Text appended to every wake, e.g. how the woken actor should react" })),
99
+ stallAfterSeconds: Type.Optional(Type.Integer({ minimum: 1, description: "Seconds without an event of the observed actor after which the state reports stalledForSeconds" }))
100
100
  }, { additionalProperties: false });
101
101
  var watchFunctions = (service) => {
102
102
  const functions = [
103
103
  defineRunFunction({
104
104
  name: "watch_create",
105
- label: "W\xE4chter anlegen",
106
- description: "Beobachtet einen Actor dieses Runs und weckt einen anderen mit einer Hintergrundnachricht, sobald die als TypeScript-Funktionsrumpf formulierte Bedingung im ge\xE4nderten Stand einen Grund liefert. Kein Modell: Die Bedingung wird beim Anlegen typgepr\xFCft und danach deterministisch bei jeder \xC4nderung des beobachteten Stands ausgef\xFChrt, sobald der beobachtete Actor zur Ruhe gekommen ist; stalledForSeconds erscheint nach stallAfterSeconds ohne Aktivit\xE4t und danach je weitere Periode erneut. Ein gleicher W\xE4chter wird nicht doppelt angelegt.",
105
+ label: "Create watch",
106
+ description: "Observes an actor of this run and wakes another with a background message as soon as the condition, written as a TypeScript function body, returns a reason for the changed state. No model: the condition is type-checked on creation and afterwards run deterministically on every change of the observed state, once the observed actor has come to rest; stalledForSeconds appears after stallAfterSeconds without activity and again after each further period. An identical watch is not created twice.",
107
107
  schema: createSchema,
108
108
  resultSchema: summarySchema,
109
109
  available,
@@ -111,8 +111,8 @@ var watchFunctions = (service) => {
111
111
  }),
112
112
  defineRunFunction({
113
113
  name: "watch_list",
114
- label: "W\xE4chter auflisten",
115
- description: "Listet die W\xE4chter dieses Runs mit Bedingung, Anzahl der Weckungen und letztem Urteil.",
114
+ label: "List watches",
115
+ description: "Lists the watches of this run with condition, number of wakes and last verdict.",
116
116
  schema: Type.Object({}, { additionalProperties: false }),
117
117
  resultSchema: Type.Array(summarySchema),
118
118
  available,
@@ -120,11 +120,11 @@ var watchFunctions = (service) => {
120
120
  }),
121
121
  defineRunFunction({
122
122
  name: "watch_remove",
123
- label: "W\xE4chter entfernen",
124
- description: "Entfernt einen W\xE4chter dieses Runs; danach weckt er nicht mehr.",
123
+ label: "Remove watch",
124
+ description: "Removes a watch of this run; afterwards it no longer wakes.",
125
125
  schema: Type.Object({
126
- id: Type.String({ minLength: 1, description: "Kennung aus watch_create oder watch_list" }),
127
- reason: Type.String({ minLength: 1, description: "Grund der Entfernung" })
126
+ id: Type.String({ minLength: 1, description: "Id from watch_create or watch_list" }),
127
+ reason: Type.String({ minLength: 1, description: "Reason for the removal" })
128
128
  }, { additionalProperties: false }),
129
129
  resultSchema: Type.Object({ removed: Type.Literal(true) }, { additionalProperties: false }),
130
130
  available,
@@ -186,10 +186,10 @@ var changesBetween = (before, after) => {
186
186
  const lines = [];
187
187
  for (const [path, value] of current) {
188
188
  const old = previous.get(path);
189
- if (old === void 0) lines.push(`${path}: ${value}${before === void 0 ? "" : " (neu)"}`);
189
+ if (old === void 0) lines.push(`${path}: ${value}${before === void 0 ? "" : " (new)"}`);
190
190
  else if (old !== value) lines.push(`${path}: ${old} -> ${value}`);
191
191
  }
192
- for (const path of previous.keys()) if (!current.has(path)) lines.push(`${path}: entfernt`);
192
+ for (const path of previous.keys()) if (!current.has(path)) lines.push(`${path}: removed`);
193
193
  return lines;
194
194
  };
195
195
 
@@ -212,14 +212,14 @@ var invalid = (message) => new DomainError("watch-invalid", message, 400);
212
212
  var cleanText = (value, field, limit) => {
213
213
  if (value === void 0) return void 0;
214
214
  const text = value.trim();
215
- if (!text) throw invalid(`${field} darf nicht leer sein.`);
216
- if (text.length > limit) throw invalid(`${field} darf h\xF6chstens ${limit} Zeichen enthalten.`);
215
+ if (!text) throw invalid(`${field} must not be empty.`);
216
+ if (text.length > limit) throw invalid(`${field} may contain at most ${limit} characters.`);
217
217
  return text;
218
218
  };
219
219
  var wakeMessage = (definition, reason, changes) => [
220
- `Der W\xE4chter weckt Dich: ${reason}`,
221
- `\xC4nderungen bei @${definition.sourceHandle} seit der letzten Weckung:
222
- ${changes.length ? changes.map((line) => `- ${line}`).join("\n") : "- keine"}`,
220
+ `The watch wakes you: ${reason}`,
221
+ `Changes at @${definition.sourceHandle} since the last wake:
222
+ ${changes.length ? changes.map((line) => `- ${line}`).join("\n") : "- none"}`,
223
223
  ...definition.instruction ? [definition.instruction] : []
224
224
  ].join("\n");
225
225
  var WatchService = class {
@@ -236,18 +236,18 @@ var WatchService = class {
236
236
  const runtime = this.#options.runtime();
237
237
  const view = runtime.view(runId);
238
238
  const source = watchableActorOf(view, request.source);
239
- if (!source) throw invalid(`Der beobachtete Actor ${request.source} existiert in diesem Run nicht.`);
239
+ if (!source) throw invalid(`The observed actor ${request.source} does not exist in this run.`);
240
240
  const target = request.target ? watchableActorOf(view, request.target) : watchableActorOf(view, callerActorId);
241
- if (!target) throw invalid(`Der zu weckende Actor ${request.target ?? callerActorId} existiert in diesem Run nicht oder ist kein Agent.`);
241
+ if (!target) throw invalid(`The actor to wake ${request.target ?? callerActorId} does not exist in this run or is not an agent.`);
242
242
  const condition = cleanText(request.condition, "condition", CONDITION_CHARS);
243
243
  const instruction = cleanText(request.instruction, "instruction", INSTRUCTION_CHARS);
244
- if (request.observe !== void 0 && !this.#options.operationExists(request.observe)) throw invalid(`Die Operation ${request.observe} ist nicht registriert.`);
245
- if (request.stallAfterSeconds !== void 0 && (!Number.isInteger(request.stallAfterSeconds) || request.stallAfterSeconds < 1)) throw invalid("stallAfterSeconds muss eine positive ganze Zahl sein.");
244
+ if (request.observe !== void 0 && !this.#options.operationExists(request.observe)) throw invalid(`The operation ${request.observe} is not registered.`);
245
+ if (request.stallAfterSeconds !== void 0 && (!Number.isInteger(request.stallAfterSeconds) || request.stallAfterSeconds < 1)) throw invalid("stallAfterSeconds must be a positive integer.");
246
246
  const run = this.#ensure(runId);
247
247
  const existing = [...run.watches.values()].find((watch2) => watch2.definition.sourceActorId === source.id && watch2.definition.targetActorId === target.id && watch2.definition.condition === condition);
248
248
  if (existing) return summaryOf(existing);
249
249
  const predicate = await this.#options.compile(condition, run.abort.signal);
250
- if (this.#runs.get(runId) !== run) throw invalid("Der Run wurde w\xE4hrend des Anlegens beendet.");
250
+ if (this.#runs.get(runId) !== run) throw invalid("The run ended while the watch was being created.");
251
251
  const definition = {
252
252
  id: `watch_${randomUUID()}`,
253
253
  sourceActorId: source.id,
@@ -273,8 +273,8 @@ var WatchService = class {
273
273
  remove(runId, watchId, reason) {
274
274
  const run = this.#runs.get(runId);
275
275
  const watch = run?.watches.get(watchId);
276
- if (!run || !watch) throw new DomainError("watch-unknown", `Der W\xE4chter ${watchId} existiert in diesem Run nicht.`, 404);
277
- if (!reason.trim()) throw invalid("reason darf nicht leer sein.");
276
+ if (!run || !watch) throw new DomainError("watch-unknown", `The watch ${watchId} does not exist in this run.`, 404);
277
+ if (!reason.trim()) throw invalid("reason must not be empty.");
278
278
  run.watches.delete(watchId);
279
279
  this.#persist(run);
280
280
  this.#updateStallTimer(run);
@@ -313,7 +313,7 @@ var WatchService = class {
313
313
  return state?.watches ?? [];
314
314
  }
315
315
  #ensure(runId) {
316
- if (this.#closed) throw new Error("Der W\xE4chterdienst ist beendet.");
316
+ if (this.#closed) throw new Error("The watch service has ended.");
317
317
  const existing = this.#runs.get(runId);
318
318
  if (existing) return existing;
319
319
  const runtime = this.#options.runtime();
@@ -383,7 +383,7 @@ var WatchService = class {
383
383
  await this.#evaluate(run, watch);
384
384
  } catch (error) {
385
385
  if (run.abort.signal.aborted) return;
386
- (this.#options.log ?? ((message, cause) => console.error(message, cause)))(`W\xE4chter ${watch.definition.id} in Run ${run.runId} konnte nicht bewerten:`, error);
386
+ (this.#options.log ?? ((message, cause) => console.error(message, cause)))(`Watch ${watch.definition.id} in run ${run.runId} could not evaluate:`, error);
387
387
  }
388
388
  }
389
389
  }
@@ -419,7 +419,7 @@ var WatchService = class {
419
419
  watch.lastEvaluated = key;
420
420
  watch.lastEvaluatedAt = at;
421
421
  watch.lastJudgedChanges = judged;
422
- watch.history = [...watch.history, { at, wake: reason !== void 0, reason: reason ?? "Bedingung nicht erf\xFCllt", changes }].slice(-HISTORY_LENGTH);
422
+ watch.history = [...watch.history, { at, wake: reason !== void 0, reason: reason ?? "Condition not met", changes }].slice(-HISTORY_LENGTH);
423
423
  if (reason === void 0) {
424
424
  if (changes.some((line) => !line.startsWith("stalledForSeconds:"))) this.#persist(run);
425
425
  return;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../plugins/ragents.watch/server/index.ts", "../../../plugins/ragents.watch/server/condition.ts", "../../../plugins/ragents.watch/server/functions.ts", "../../../plugins/ragents.watch/server/service.ts", "../../../plugins/ragents.watch/server/observation.ts"],
4
- "sourcesContent": ["import type { JsonValue, RAgentsPlugin } from \"@ragents/engine\";\nimport { randomUUID } from \"node:crypto\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { runtimeProviderToken } from \"@ragents/host/ragents/host-services.js\";\nimport { WATCH_PLUGIN_ID } from \"../contract.js\";\nimport { watchServiceToken } from \"./contract.js\";\nimport { compileWatchCondition } from \"./condition.js\";\nimport { watchFunctions } from \"./functions.js\";\nimport { WatchService } from \"./service.js\";\n\nconst watchPlugin: RAgentsPlugin = {\n manifest: { id: WATCH_PLUGIN_ID },\n register: (host) => {\n const runtime = host.service(runtimeProviderToken);\n const service = new WatchService({\n runtime,\n compile: (condition, signal) => compileWatchCondition(condition, signal),\n operationExists: (id) => host.operation(id) !== undefined,\n observe: (runId, id, signal) => host.invokeOperation(id, {\n runId, invocationId: `ragents.watch:${randomUUID()}`, signal,\n principal: { kind: \"operator\", actorId: runtime().view(runId).ownerId },\n }, {}) as Promise<JsonValue>,\n });\n host.provide(watchServiceToken, service);\n host.functions(watchFunctions(service));\n host.lifecycle({\n id: \"ragents.watch.lifecycle\",\n prepareSession: ({ runId }) => service.prepare(runId),\n stopSession: ({ runId }) => service.stop(runId),\n deleteSession: ({ runId }) => service.stop(runId),\n shutdown: () => service.shutdown(),\n });\n },\n};\n\nexport const plugin: PluginModule = {\n requires: [\"ragents.orchestration\"],\n create: () => watchPlugin,\n};\n", "import { createContext, runInContext } from \"node:vm\";\nimport { compileVirtualTypeScriptAsync, type JsonValue } from \"@ragents/engine\";\n\nconst conditionFile = \"watch-condition.ts\";\nconst RUN_TIMEOUT_MS = 200;\nconst REASON_CHARS = 300;\n\nexport type WatchPredicate = (now: JsonValue, before: JsonValue) => string | undefined;\n\nexport const watchStateDeclarations = `interface WatchTurn { readonly status: string; readonly reason?: string }\ninterface WatchSource {\n readonly lifecycle: \"idle\" | \"running\" | \"stopped\";\n readonly stopReason?: string;\n readonly completedTurns: number;\n readonly lastTurn?: WatchTurn;\n readonly pendingInputs: number;\n readonly pendingActions: number;\n readonly lastOutput?: string;\n}\ninterface WatchState {\n readonly source: WatchSource;\n readonly observed?: Record<string, unknown>;\n readonly stalledForSeconds?: number;\n}\n`;\n\nexport class WatchConditionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"WatchConditionError\";\n }\n}\n\nexport const compileWatchCondition = async (condition: string, signal?: AbortSignal): Promise<WatchPredicate> => {\n if (!condition.trim()) throw new WatchConditionError(\"Die Weckbedingung darf nicht leer sein.\");\n const compiled = await compileVirtualTypeScriptAsync({\n sources: [{ fileName: conditionFile, text: `${watchStateDeclarations}\\nconst wake = (now: WatchState, before: WatchState): string | undefined => {\\n${condition}\\n};\\n` }],\n emit: \"node\",\n }, { signal });\n if (!compiled.valid) {\n throw new WatchConditionError(`Die Weckbedingung ist kein g\u00FCltiges TypeScript:\\n${compiled.diagnostics.map((diagnostic) =>\n `${diagnostic.start ? `${Math.max(1, diagnostic.start.line - watchStateDeclarations.split(\"\\n\").length)}:${diagnostic.start.column} ` : \"\"}TS${diagnostic.code}: ${diagnostic.message}`).join(\"\\n\")}`);\n }\n const emitted = compiled.emittedFiles.find((file) => file.fileName.endsWith(\".js\"));\n if (!emitted) throw new WatchConditionError(\"Die Weckbedingung hat keinen JavaScript-Code erzeugt.\");\n const sandbox = createContext(Object.create(null));\n runInContext(`${emitted.text}\\nglobalThis.wake = wake;`, sandbox, { timeout: RUN_TIMEOUT_MS });\n return (now, before) => {\n sandbox.now = now;\n sandbox.before = before;\n const result: unknown = runInContext(\"wake(now, before)\", sandbox, { timeout: RUN_TIMEOUT_MS });\n if (result === undefined || result === null || result === false) return undefined;\n if (typeof result !== \"string\" || !result.trim()) throw new WatchConditionError(`Die Weckbedingung muss einen Grund als Text oder nichts liefern, nicht ${JSON.stringify(result)}.`);\n return result.trim().slice(0, REASON_CHARS);\n };\n};\n", "import { Type } from \"typebox\";\nimport { defineRunFunction, defineToolAvailability, type ToolContributor } from \"@ragents/engine\";\nimport { toolDescriptorFrom } from \"@ragents/host/plugin-support/agent-tool.js\";\nimport type { WatchServiceApi } from \"../contract.js\";\n\nconst available = defineToolAvailability({ availability: \"always\", availabilityDetail: \"In jedem Run verf\u00FCgbar.\" }, () => true);\n\nconst verdictSchema = Type.Object({\n at: Type.String({ description: \"Zeitpunkt der Bewertung\" }),\n wake: Type.Boolean({ description: \"Ob der W\u00E4chter geweckt hat\" }),\n reason: Type.String({ description: \"Grund, den die Bedingung geliefert hat, oder 'Bedingung nicht erf\u00FCllt'\" }),\n changes: Type.Array(Type.String(), { description: \"\u00C4nderungen seit der letzten Weckung, die der Bewertung vorlagen\" }),\n}, { additionalProperties: false });\n\nconst summarySchema = Type.Object({\n id: Type.String({ description: \"Kennung des W\u00E4chters f\u00FCr watch_remove\" }),\n source: Type.String({ description: \"Beobachteter Actor als @handle\" }),\n target: Type.String({ description: \"Geweckter Actor als @handle\" }),\n condition: Type.String({ description: \"Weckbedingung als TypeScript-Funktionsrumpf\" }),\n observe: Type.Optional(Type.String({ description: \"Benannte Operation, deren Ergebnis zum beobachteten Stand geh\u00F6rt\" })),\n stallAfterSeconds: Type.Optional(Type.Integer({ description: \"Sekunden ohne Ereignis des beobachteten Actors, ab denen der Stand einen Stillstand nennt\" })),\n wakes: Type.Integer({ description: \"Anzahl der bisherigen Weckungen\" }),\n lastEvaluatedAt: Type.Optional(Type.String({ description: \"Zeitpunkt der letzten Bewertung\" })),\n lastVerdict: Type.Optional(verdictSchema),\n}, { additionalProperties: false });\n\nconst createSchema = Type.Object({\n source: Type.String({ minLength: 1, description: \"Beobachteter Actor als @handle oder Kennung\" }),\n condition: Type.String({ minLength: 1, maxLength: 4_000, description: \"Weckbedingung als TypeScript-Funktionsrumpf von (now: WatchState, before: WatchState) => string | undefined; liefert den Weckgrund als Text oder undefined. WatchState: source { lifecycle idle|running|stopped, completedTurns, lastTurn { status, reason? }, pendingInputs, pendingActions, lastOutput? }, observed (Ergebnis der observe-Operation als Record<string, unknown>), stalledForSeconds (nur bei Stillstand). before ist der Stand bei der letzten Weckung. Beispiel: return now.source.completedTurns > before.source.completedTurns && now.observed?.phase !== \\\"ready\\\" ? \\\"Turn beendet, Auftrag nicht fertig\\\" : undefined;\" }),\n target: Type.Optional(Type.String({ minLength: 1, description: \"Zu weckender Actor als @handle oder Kennung; ohne Angabe der Aufrufer\" })),\n observe: Type.Optional(Type.String({ minLength: 1, description: \"Benannte Operation ohne Eingabe, deren Ergebnis den beobachteten Stand erg\u00E4nzt und per Differenz verglichen wird\" })),\n instruction: Type.Optional(Type.String({ minLength: 1, maxLength: 2_000, description: \"Text, der jeder Weckung angeh\u00E4ngt wird, etwa wie der Geweckte reagieren soll\" })),\n stallAfterSeconds: Type.Optional(Type.Integer({ minimum: 1, description: \"Sekunden ohne Ereignis des beobachteten Actors, ab denen der Stand stalledForSeconds nennt\" })),\n}, { additionalProperties: false });\n\nexport const watchFunctions = (service: WatchServiceApi): ToolContributor => {\n const functions = [\n defineRunFunction({\n name: \"watch_create\", label: \"W\u00E4chter anlegen\",\n description: \"Beobachtet einen Actor dieses Runs und weckt einen anderen mit einer Hintergrundnachricht, sobald die als TypeScript-Funktionsrumpf formulierte Bedingung im ge\u00E4nderten Stand einen Grund liefert. Kein Modell: Die Bedingung wird beim Anlegen typgepr\u00FCft und danach deterministisch bei jeder \u00C4nderung des beobachteten Stands ausgef\u00FChrt, sobald der beobachtete Actor zur Ruhe gekommen ist; stalledForSeconds erscheint nach stallAfterSeconds ohne Aktivit\u00E4t und danach je weitere Periode erneut. Ein gleicher W\u00E4chter wird nicht doppelt angelegt.\",\n schema: createSchema, resultSchema: summarySchema, available,\n run: (scope, _toolCallId, input) => service.create(scope.caller.runId, scope.caller.actorId, input),\n }),\n defineRunFunction({\n name: \"watch_list\", label: \"W\u00E4chter auflisten\",\n description: \"Listet die W\u00E4chter dieses Runs mit Bedingung, Anzahl der Weckungen und letztem Urteil.\",\n schema: Type.Object({}, { additionalProperties: false }), resultSchema: Type.Array(summarySchema), available,\n run: (scope) => service.list(scope.caller.runId),\n }),\n defineRunFunction({\n name: \"watch_remove\", label: \"W\u00E4chter entfernen\",\n description: \"Entfernt einen W\u00E4chter dieses Runs; danach weckt er nicht mehr.\",\n schema: Type.Object({\n id: Type.String({ minLength: 1, description: \"Kennung aus watch_create oder watch_list\" }),\n reason: Type.String({ minLength: 1, description: \"Grund der Entfernung\" }),\n }, { additionalProperties: false }),\n resultSchema: Type.Object({ removed: Type.Literal(true) }, { additionalProperties: false }), available,\n run: (scope, _toolCallId, input) => { service.remove(scope.caller.runId, input.id, input.reason); return { removed: true as const }; },\n }),\n ];\n return { name: \"ragents.watch\", descriptors: functions.map((fn) => toolDescriptorFrom(fn, available)), tools: () => functions };\n};\n", "import { randomUUID } from \"node:crypto\";\nimport { DomainError, type ExecutableActor, type JournalEvent, type JsonValue, type Orchestration, type RunView } from \"@ragents/engine\";\nimport { WATCH_PLUGIN_ID, type WatchDefinition, type WatchRequest, type WatchServiceApi, type WatchSummary, type WatchVerdict } from \"../contract.js\";\nimport { changesBetween, lastActivityOf, observeActor, watchableActorOf } from \"./observation.js\";\nimport type { WatchPredicate } from \"./condition.js\";\n\nconst CONDITION_CHARS = 4_000;\nconst INSTRUCTION_CHARS = 2_000;\nconst HISTORY_LENGTH = 10;\n\ntype StoredWatch = WatchDefinition & { baseline?: JsonValue; wakes: number; history?: WatchVerdict[] };\ninterface WatchState { version: 1; watches: StoredWatch[] }\n\ninterface WatchRuntime {\n definition: WatchDefinition;\n predicate: WatchPredicate;\n baseline?: JsonValue;\n wakes: number;\n lastEvaluated?: string;\n lastEvaluatedAt?: string;\n lastJudgedChanges?: string;\n history: WatchVerdict[];\n}\n\ninterface RunWatches {\n runId: string;\n unsubscribe: () => void;\n abort: AbortController;\n watches: Map<string, WatchRuntime>;\n debounce?: ReturnType<typeof setTimeout>;\n stallTimer?: ReturnType<typeof setInterval>;\n evaluating?: Promise<void>;\n dirty: boolean;\n}\n\nexport interface WatchServiceOptions {\n runtime: () => Orchestration;\n compile: (condition: string, signal: AbortSignal) => Promise<WatchPredicate>;\n observe: (runId: string, operationId: string, signal: AbortSignal) => Promise<JsonValue>;\n operationExists: (operationId: string) => boolean;\n debounceMs?: number;\n stallCheckMs?: number;\n now?: () => number;\n log?: (message: string, error?: unknown) => void;\n}\n\nconst summaryOf = (watch: WatchRuntime): WatchSummary => ({\n id: watch.definition.id,\n source: `@${watch.definition.sourceHandle}`,\n target: `@${watch.definition.targetHandle}`,\n condition: watch.definition.condition,\n ...(watch.definition.observe ? { observe: watch.definition.observe } : {}),\n ...(watch.definition.stallAfterSeconds ? { stallAfterSeconds: watch.definition.stallAfterSeconds } : {}),\n wakes: watch.wakes,\n ...(watch.lastEvaluatedAt ? { lastEvaluatedAt: watch.lastEvaluatedAt } : {}),\n ...(watch.history.length ? { lastVerdict: watch.history[watch.history.length - 1] } : {}),\n});\n\nconst invalid = (message: string) => new DomainError(\"watch-invalid\", message, 400);\n\nconst cleanText = (value: string | undefined, field: string, limit: number): string | undefined => {\n if (value === undefined) return undefined;\n const text = value.trim();\n if (!text) throw invalid(`${field} darf nicht leer sein.`);\n if (text.length > limit) throw invalid(`${field} darf h\u00F6chstens ${limit} Zeichen enthalten.`);\n return text;\n};\n\nexport const wakeMessage = (definition: WatchDefinition, reason: string, changes: readonly string[]): string => [\n `Der W\u00E4chter weckt Dich: ${reason}`,\n `\u00C4nderungen bei @${definition.sourceHandle} seit der letzten Weckung:\\n${changes.length ? changes.map((line) => `- ${line}`).join(\"\\n\") : \"- keine\"}`,\n ...(definition.instruction ? [definition.instruction] : []),\n].join(\"\\n\");\n\nexport class WatchService implements WatchServiceApi {\n readonly #options: WatchServiceOptions;\n readonly #runs = new Map<string, RunWatches>();\n #closed = false;\n\n constructor(options: WatchServiceOptions) {\n this.#options = options;\n }\n\n #now(): number {\n return this.#options.now ? this.#options.now() : Date.parse(this.#options.runtime().now());\n }\n\n async create(runId: string, callerActorId: string, request: WatchRequest): Promise<WatchSummary> {\n const runtime = this.#options.runtime();\n const view = runtime.view(runId);\n const source = watchableActorOf(view, request.source);\n if (!source) throw invalid(`Der beobachtete Actor ${request.source} existiert in diesem Run nicht.`);\n const target = request.target ? watchableActorOf(view, request.target) : watchableActorOf(view, callerActorId);\n if (!target) throw invalid(`Der zu weckende Actor ${request.target ?? callerActorId} existiert in diesem Run nicht oder ist kein Agent.`);\n const condition = cleanText(request.condition, \"condition\", CONDITION_CHARS)!;\n const instruction = cleanText(request.instruction, \"instruction\", INSTRUCTION_CHARS);\n if (request.observe !== undefined && !this.#options.operationExists(request.observe)) throw invalid(`Die Operation ${request.observe} ist nicht registriert.`);\n if (request.stallAfterSeconds !== undefined && (!Number.isInteger(request.stallAfterSeconds) || request.stallAfterSeconds < 1)) throw invalid(\"stallAfterSeconds muss eine positive ganze Zahl sein.\");\n const run = this.#ensure(runId);\n const existing = [...run.watches.values()].find((watch) => watch.definition.sourceActorId === source.id && watch.definition.targetActorId === target.id && watch.definition.condition === condition);\n if (existing) return summaryOf(existing);\n const predicate = await this.#options.compile(condition, run.abort.signal);\n if (this.#runs.get(runId) !== run) throw invalid(\"Der Run wurde w\u00E4hrend des Anlegens beendet.\");\n const definition: WatchDefinition = {\n id: `watch_${randomUUID()}`,\n sourceActorId: source.id,\n sourceHandle: source.handle,\n targetActorId: target.id,\n targetHandle: target.handle,\n condition,\n ...(request.observe !== undefined ? { observe: request.observe } : {}),\n ...(instruction !== undefined ? { instruction } : {}),\n ...(request.stallAfterSeconds !== undefined ? { stallAfterSeconds: request.stallAfterSeconds } : {}),\n createdBy: callerActorId,\n };\n const watch: WatchRuntime = { definition, predicate, wakes: 0, history: [] };\n run.watches.set(definition.id, watch);\n this.#persist(run);\n this.#updateStallTimer(run);\n this.#schedule(run, true);\n return summaryOf(watch);\n }\n\n list(runId: string): WatchSummary[] {\n return [...(this.#runs.get(runId)?.watches.values() ?? [])].map(summaryOf);\n }\n\n remove(runId: string, watchId: string, reason: string): void {\n const run = this.#runs.get(runId);\n const watch = run?.watches.get(watchId);\n if (!run || !watch) throw new DomainError(\"watch-unknown\", `Der W\u00E4chter ${watchId} existiert in diesem Run nicht.`, 404);\n if (!reason.trim()) throw invalid(\"reason darf nicht leer sein.\");\n run.watches.delete(watchId);\n this.#persist(run);\n this.#updateStallTimer(run);\n }\n\n async prepare(runId: string): Promise<void> {\n if (this.#closed || this.#runs.has(runId)) return;\n const runtime = this.#options.runtime();\n if (runtime.events(runId).length === 0) return;\n const stored = this.#stored(runtime.view(runId));\n if (stored.length === 0) return;\n const run = this.#ensure(runId);\n for (const entry of stored) {\n const { baseline, wakes, history, ...definition } = entry;\n const predicate = await this.#options.compile(definition.condition, run.abort.signal);\n if (this.#runs.get(runId) !== run) return;\n run.watches.set(definition.id, { definition, predicate, ...(baseline !== undefined ? { baseline } : {}), wakes, history: history ?? [] });\n }\n this.#updateStallTimer(run);\n this.#schedule(run, true);\n }\n\n stop(runId: string): void {\n const run = this.#runs.get(runId);\n if (!run) return;\n this.#runs.delete(runId);\n run.unsubscribe();\n run.abort.abort();\n if (run.debounce) clearTimeout(run.debounce);\n if (run.stallTimer) clearInterval(run.stallTimer);\n }\n\n shutdown(): void {\n for (const runId of [...this.#runs.keys()]) this.stop(runId);\n this.#closed = true;\n }\n\n #stored(view: RunView): StoredWatch[] {\n const state = view.pluginStates.find((entry) => entry.pluginId === WATCH_PLUGIN_ID && entry.scope.kind === \"run\")?.state as unknown as WatchState | undefined;\n return state?.watches ?? [];\n }\n\n #ensure(runId: string): RunWatches {\n if (this.#closed) throw new Error(\"Der W\u00E4chterdienst ist beendet.\");\n const existing = this.#runs.get(runId);\n if (existing) return existing;\n const runtime = this.#options.runtime();\n const run: RunWatches = {\n runId,\n unsubscribe: runtime.subscribe((events) => { if (events.some((event) => event.runId === runId)) this.#schedule(run); }),\n abort: new AbortController(),\n watches: new Map(),\n dirty: false,\n };\n this.#runs.set(runId, run);\n return run;\n }\n\n #persist(run: RunWatches): void {\n const runtime = this.#options.runtime();\n const view = runtime.view(run.runId);\n const state: WatchState = { version: 1, watches: [...run.watches.values()].map((watch) => ({ ...watch.definition, ...(watch.baseline !== undefined ? { baseline: watch.baseline } : {}), wakes: watch.wakes, history: watch.history })) };\n runtime.replacePluginState({ actorId: view.ownerId, commandId: `ragents.watch:state:${randomUUID()}` }, run.runId, { pluginId: WATCH_PLUGIN_ID, scope: { kind: \"run\" }, state: state as unknown as JsonValue });\n }\n\n #updateStallTimer(run: RunWatches): void {\n const needed = [...run.watches.values()].some((watch) => watch.definition.stallAfterSeconds !== undefined);\n if (!needed && run.stallTimer) { clearInterval(run.stallTimer); run.stallTimer = undefined; }\n if (needed && !run.stallTimer) {\n run.stallTimer = setInterval(() => this.#schedule(run), this.#options.stallCheckMs ?? 30_000);\n run.stallTimer.unref();\n }\n }\n\n #schedule(run: RunWatches, immediate = false): void {\n if (this.#runs.get(run.runId) !== run) return;\n if (run.evaluating) { run.dirty = true; return; }\n if (immediate) {\n if (run.debounce) { clearTimeout(run.debounce); run.debounce = undefined; }\n this.#start(run);\n return;\n }\n if (run.debounce) return;\n run.debounce = setTimeout(() => { run.debounce = undefined; this.#start(run); }, this.#options.debounceMs ?? 1_000);\n run.debounce.unref();\n }\n\n #start(run: RunWatches): void {\n run.evaluating = this.#evaluateAll(run).finally(() => {\n run.evaluating = undefined;\n if (run.dirty) { run.dirty = false; this.#schedule(run); }\n });\n }\n\n async #evaluateAll(run: RunWatches): Promise<void> {\n for (const watch of [...run.watches.values()]) {\n if (this.#runs.get(run.runId) !== run || !run.watches.has(watch.definition.id)) return;\n try { await this.#evaluate(run, watch); }\n catch (error) {\n if (run.abort.signal.aborted) return;\n (this.#options.log ?? ((message, cause) => console.error(message, cause)))(`W\u00E4chter ${watch.definition.id} in Run ${run.runId} konnte nicht bewerten:`, error);\n }\n }\n }\n\n async #evaluate(run: RunWatches, watch: WatchRuntime): Promise<void> {\n const runtime = this.#options.runtime();\n const view = runtime.view(run.runId);\n const source = view.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === watch.definition.sourceActorId);\n const target = view.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === watch.definition.targetActorId);\n if (!source || !target || target.lifecycle.kind === \"stopped\") return;\n const observation = await this.#observe(run, watch, view, source, runtime.events(run.runId));\n if (this.#runs.get(run.runId) !== run || !run.watches.has(watch.definition.id)) return;\n const key = JSON.stringify(observation);\n if (watch.baseline === undefined) {\n watch.baseline = observation;\n watch.lastEvaluated = key;\n this.#persist(run);\n return;\n }\n if (key === watch.lastEvaluated) return;\n const current = runtime.view(run.runId);\n const busy = current.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === target.id)?.lifecycle.kind !== \"idle\"\n || current.inputs.some((input) => input.actorId === target.id && input.lifecycle.kind === \"pending\")\n || current.actions.some((action) => action.askedBy === target.id && action.status === \"pending\");\n if (busy) return;\n const unsettled = source.lifecycle.kind === \"running\" || current.inputs.some((input) => input.actorId === source.id && input.lifecycle.kind === \"pending\");\n if (unsettled && !(typeof observation === \"object\" && observation !== null && \"stalledForSeconds\" in observation)) return;\n const changes = changesBetween(watch.baseline, observation);\n const judged = JSON.stringify(changes);\n if (changes.length === 0 || judged === watch.lastJudgedChanges) { watch.lastEvaluated = key; return; }\n const reason = watch.predicate(observation, watch.baseline);\n const at = new Date(this.#now()).toISOString();\n watch.lastEvaluated = key;\n watch.lastEvaluatedAt = at;\n watch.lastJudgedChanges = judged;\n watch.history = [...watch.history, { at, wake: reason !== undefined, reason: reason ?? \"Bedingung nicht erf\u00FCllt\", changes }].slice(-HISTORY_LENGTH);\n if (reason === undefined) {\n if (changes.some((line) => !line.startsWith(\"stalledForSeconds:\"))) this.#persist(run);\n return;\n }\n runtime.enqueueInput({ actorId: current.ownerId, commandId: `ragents.watch:wake:${watch.definition.id}:${randomUUID()}` }, run.runId, {\n actorId: target.id,\n presentation: \"background\",\n content: wakeMessage(watch.definition, reason, changes),\n });\n watch.baseline = observation;\n watch.wakes += 1;\n this.#persist(run);\n }\n\n async #observe(run: RunWatches, watch: WatchRuntime, view: RunView, source: ExecutableActor, events: readonly JournalEvent[]): Promise<JsonValue> {\n const observed = watch.definition.observe ? await this.#options.observe(run.runId, watch.definition.observe, run.abort.signal) : undefined;\n const stall = watch.definition.stallAfterSeconds;\n const age = stall ? this.#now() - Date.parse(lastActivityOf(events, source)) : 0;\n return {\n source: observeActor(view, source.id) as unknown as JsonValue,\n ...(observed !== undefined ? { observed } : {}),\n ...(stall && age >= stall * 1_000 ? { stalledForSeconds: Math.floor(age / (stall * 1_000)) * stall } : {}),\n };\n }\n}\n", "import { actorByReference, type ExecutableActor, type JournalEvent, type JsonValue, type RunView } from \"@ragents/engine\";\n\nconst OUTPUT_CHARS = 600;\n\nexport interface ActorObservation {\n lifecycle: \"idle\" | \"running\" | \"stopped\";\n stopReason?: string;\n completedTurns: number;\n lastTurn?: { status: string; reason?: string };\n pendingInputs: number;\n pendingActions: number;\n lastOutput?: string;\n}\n\nexport const watchableActorOf = (view: RunView, reference: string): ExecutableActor | undefined => {\n const actor = actorByReference(view.actors, reference);\n return actor?.kind === \"human\" ? undefined : actor;\n};\n\nexport const observeActor = (view: RunView, actorId: string): ActorObservation | undefined => {\n const actor = view.actors.find((candidate): candidate is ExecutableActor => candidate.kind !== \"human\" && candidate.id === actorId);\n if (!actor) return undefined;\n const turns = view.turns.filter((turn) => turn.actorId === actorId);\n const last = turns.at(-1);\n const output = turns.findLast((turn) => turn.status !== \"running\" && turn.outputs.length > 0)?.outputs.at(-1)?.text;\n return {\n lifecycle: actor.lifecycle.kind,\n ...(actor.lifecycle.kind === \"stopped\" ? { stopReason: actor.lifecycle.reason } : {}),\n completedTurns: turns.filter((turn) => turn.status !== \"running\").length,\n ...(last ? { lastTurn: { status: last.status, ...(last.reason ? { reason: last.reason } : {}) } } : {}),\n pendingInputs: view.inputs.filter((input) => input.actorId === actorId && input.lifecycle.kind === \"pending\").length,\n pendingActions: view.actions.filter((action) => action.askedBy === actorId && action.status === \"pending\").length,\n ...(output ? { lastOutput: output.length > OUTPUT_CHARS ? `...${output.slice(-OUTPUT_CHARS)}` : output } : {}),\n };\n};\n\nexport const lastActivityOf = (events: readonly JournalEvent[], actor: ExecutableActor): string => {\n const event = events.findLast((candidate) => candidate.actorId === actor.id\n || candidate.type === \"actor.input.enqueued\" && candidate.payload.actorId === actor.id\n || (candidate.type === \"turn.finished\" || candidate.type === \"turn.interrupted\") && candidate.actorId === actor.id);\n return event?.occurredAt ?? actor.createdAt;\n};\n\nconst isObject = (value: JsonValue): value is { [key: string]: JsonValue } => typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const flattenJson = (value: JsonValue, prefix = \"\", into = new Map<string, string>()): Map<string, string> => {\n if (Array.isArray(value)) {\n if (value.length === 0 && prefix) into.set(prefix, \"[]\");\n value.forEach((entry, index) => flattenJson(entry, prefix ? `${prefix}.${index}` : String(index), into));\n } else if (isObject(value)) {\n const keys = Object.keys(value);\n if (keys.length === 0 && prefix) into.set(prefix, \"{}\");\n for (const key of keys) flattenJson(value[key], prefix ? `${prefix}.${key}` : key, into);\n } else into.set(prefix || \"$\", JSON.stringify(value));\n return into;\n};\n\nexport const changesBetween = (before: JsonValue | undefined, after: JsonValue): string[] => {\n const previous = before === undefined ? new Map<string, string>() : flattenJson(before);\n const current = flattenJson(after);\n const lines: string[] = [];\n for (const [path, value] of current) {\n const old = previous.get(path);\n if (old === undefined) lines.push(`${path}: ${value}${before === undefined ? \"\" : \" (neu)\"}`);\n else if (old !== value) lines.push(`${path}: ${old} -> ${value}`);\n }\n for (const path of previous.keys()) if (!current.has(path)) lines.push(`${path}: entfernt`);\n return lines;\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { JsonValue, RAgentsPlugin } from \"@ragents/engine\";\nimport { randomUUID } from \"node:crypto\";\nimport type { PluginModule } from \"@ragents/host/plugin-support/plugin-module.js\";\nimport { runtimeProviderToken } from \"@ragents/host/ragents/host-services.js\";\nimport { WATCH_PLUGIN_ID } from \"../contract.js\";\nimport { watchServiceToken } from \"./contract.js\";\nimport { compileWatchCondition } from \"./condition.js\";\nimport { watchFunctions } from \"./functions.js\";\nimport { WatchService } from \"./service.js\";\n\nconst watchPlugin: RAgentsPlugin = {\n manifest: { id: WATCH_PLUGIN_ID },\n register: (host) => {\n const runtime = host.service(runtimeProviderToken);\n const service = new WatchService({\n runtime,\n compile: (condition, signal) => compileWatchCondition(condition, signal),\n operationExists: (id) => host.operation(id) !== undefined,\n observe: (runId, id, signal) => host.invokeOperation(id, {\n runId, invocationId: `ragents.watch:${randomUUID()}`, signal,\n principal: { kind: \"operator\", actorId: runtime().view(runId).ownerId },\n }, {}) as Promise<JsonValue>,\n });\n host.provide(watchServiceToken, service);\n host.functions(watchFunctions(service));\n host.lifecycle({\n id: \"ragents.watch.lifecycle\",\n prepareSession: ({ runId }) => service.prepare(runId),\n stopSession: ({ runId }) => service.stop(runId),\n deleteSession: ({ runId }) => service.stop(runId),\n shutdown: () => service.shutdown(),\n });\n },\n};\n\nexport const plugin: PluginModule = {\n requires: [\"ragents.orchestration\"],\n create: () => watchPlugin,\n};\n", "import { createContext, runInContext } from \"node:vm\";\nimport { compileVirtualTypeScriptAsync, type JsonValue } from \"@ragents/engine\";\n\nconst conditionFile = \"watch-condition.ts\";\nconst RUN_TIMEOUT_MS = 200;\nconst REASON_CHARS = 300;\n\nexport type WatchPredicate = (now: JsonValue, before: JsonValue) => string | undefined;\n\nexport const watchStateDeclarations = `interface WatchTurn { readonly status: string; readonly reason?: string }\ninterface WatchSource {\n readonly lifecycle: \"idle\" | \"running\" | \"stopped\";\n readonly stopReason?: string;\n readonly completedTurns: number;\n readonly lastTurn?: WatchTurn;\n readonly pendingInputs: number;\n readonly pendingActions: number;\n readonly lastOutput?: string;\n}\ninterface WatchState {\n readonly source: WatchSource;\n readonly observed?: Record<string, unknown>;\n readonly stalledForSeconds?: number;\n}\n`;\n\nexport class WatchConditionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"WatchConditionError\";\n }\n}\n\nexport const compileWatchCondition = async (condition: string, signal?: AbortSignal): Promise<WatchPredicate> => {\n if (!condition.trim()) throw new WatchConditionError(\"The wake condition must not be empty.\");\n const compiled = await compileVirtualTypeScriptAsync({\n sources: [{ fileName: conditionFile, text: `${watchStateDeclarations}\\nconst wake = (now: WatchState, before: WatchState): string | undefined => {\\n${condition}\\n};\\n` }],\n emit: \"node\",\n }, { signal });\n if (!compiled.valid) {\n throw new WatchConditionError(`The wake condition is not valid TypeScript:\\n${compiled.diagnostics.map((diagnostic) =>\n `${diagnostic.start ? `${Math.max(1, diagnostic.start.line - watchStateDeclarations.split(\"\\n\").length)}:${diagnostic.start.column} ` : \"\"}TS${diagnostic.code}: ${diagnostic.message}`).join(\"\\n\")}`);\n }\n const emitted = compiled.emittedFiles.find((file) => file.fileName.endsWith(\".js\"));\n if (!emitted) throw new WatchConditionError(\"The wake condition produced no JavaScript code.\");\n const sandbox = createContext(Object.create(null));\n runInContext(`${emitted.text}\\nglobalThis.wake = wake;`, sandbox, { timeout: RUN_TIMEOUT_MS });\n return (now, before) => {\n sandbox.now = now;\n sandbox.before = before;\n const result: unknown = runInContext(\"wake(now, before)\", sandbox, { timeout: RUN_TIMEOUT_MS });\n if (result === undefined || result === null || result === false) return undefined;\n if (typeof result !== \"string\" || !result.trim()) throw new WatchConditionError(`The wake condition must return a reason as text or nothing, not ${JSON.stringify(result)}.`);\n return result.trim().slice(0, REASON_CHARS);\n };\n};\n", "import { Type } from \"typebox\";\nimport { defineRunFunction, defineToolAvailability, type ToolContributor } from \"@ragents/engine\";\nimport { toolDescriptorFrom } from \"@ragents/host/plugin-support/agent-tool.js\";\nimport type { WatchServiceApi } from \"../contract.js\";\n\nconst available = defineToolAvailability({ availability: \"always\", availabilityDetail: \"Available in every run.\" }, () => true);\n\nconst verdictSchema = Type.Object({\n at: Type.String({ description: \"Time of the evaluation\" }),\n wake: Type.Boolean({ description: \"Whether the watch woke\" }),\n reason: Type.String({ description: \"Reason the condition returned, or 'Condition not met'\" }),\n changes: Type.Array(Type.String(), { description: \"Changes since the last wake that the evaluation saw\" }),\n}, { additionalProperties: false });\n\nconst summarySchema = Type.Object({\n id: Type.String({ description: \"Id of the watch for watch_remove\" }),\n source: Type.String({ description: \"Observed actor as @handle\" }),\n target: Type.String({ description: \"Woken actor as @handle\" }),\n condition: Type.String({ description: \"Wake condition as a TypeScript function body\" }),\n observe: Type.Optional(Type.String({ description: \"Named operation whose result belongs to the observed state\" })),\n stallAfterSeconds: Type.Optional(Type.Integer({ description: \"Seconds without an event of the observed actor after which the state reports a stall\" })),\n wakes: Type.Integer({ description: \"Number of wakes so far\" }),\n lastEvaluatedAt: Type.Optional(Type.String({ description: \"Time of the last evaluation\" })),\n lastVerdict: Type.Optional(verdictSchema),\n}, { additionalProperties: false });\n\nconst createSchema = Type.Object({\n source: Type.String({ minLength: 1, description: \"Observed actor as @handle or id\" }),\n condition: Type.String({ minLength: 1, maxLength: 4_000, description: \"Wake condition as a TypeScript function body of (now: WatchState, before: WatchState) => string | undefined; returns the wake reason as text or undefined. WatchState: source { lifecycle idle|running|stopped, completedTurns, lastTurn { status, reason? }, pendingInputs, pendingActions, lastOutput? }, observed (result of the observe operation as Record<string, unknown>), stalledForSeconds (only when stalled). before is the state at the last wake. Example: return now.source.completedTurns > before.source.completedTurns && now.observed?.phase !== \\\"ready\\\" ? \\\"Turn ended, task not finished\\\" : undefined;\" }),\n target: Type.Optional(Type.String({ minLength: 1, description: \"Actor to wake as @handle or id; if omitted, the caller\" })),\n observe: Type.Optional(Type.String({ minLength: 1, description: \"Named operation without input whose result extends the observed state and is compared by difference\" })),\n instruction: Type.Optional(Type.String({ minLength: 1, maxLength: 2_000, description: \"Text appended to every wake, e.g. how the woken actor should react\" })),\n stallAfterSeconds: Type.Optional(Type.Integer({ minimum: 1, description: \"Seconds without an event of the observed actor after which the state reports stalledForSeconds\" })),\n}, { additionalProperties: false });\n\nexport const watchFunctions = (service: WatchServiceApi): ToolContributor => {\n const functions = [\n defineRunFunction({\n name: \"watch_create\", label: \"Create watch\",\n description: \"Observes an actor of this run and wakes another with a background message as soon as the condition, written as a TypeScript function body, returns a reason for the changed state. No model: the condition is type-checked on creation and afterwards run deterministically on every change of the observed state, once the observed actor has come to rest; stalledForSeconds appears after stallAfterSeconds without activity and again after each further period. An identical watch is not created twice.\",\n schema: createSchema, resultSchema: summarySchema, available,\n run: (scope, _toolCallId, input) => service.create(scope.caller.runId, scope.caller.actorId, input),\n }),\n defineRunFunction({\n name: \"watch_list\", label: \"List watches\",\n description: \"Lists the watches of this run with condition, number of wakes and last verdict.\",\n schema: Type.Object({}, { additionalProperties: false }), resultSchema: Type.Array(summarySchema), available,\n run: (scope) => service.list(scope.caller.runId),\n }),\n defineRunFunction({\n name: \"watch_remove\", label: \"Remove watch\",\n description: \"Removes a watch of this run; afterwards it no longer wakes.\",\n schema: Type.Object({\n id: Type.String({ minLength: 1, description: \"Id from watch_create or watch_list\" }),\n reason: Type.String({ minLength: 1, description: \"Reason for the removal\" }),\n }, { additionalProperties: false }),\n resultSchema: Type.Object({ removed: Type.Literal(true) }, { additionalProperties: false }), available,\n run: (scope, _toolCallId, input) => { service.remove(scope.caller.runId, input.id, input.reason); return { removed: true as const }; },\n }),\n ];\n return { name: \"ragents.watch\", descriptors: functions.map((fn) => toolDescriptorFrom(fn, available)), tools: () => functions };\n};\n", "import { randomUUID } from \"node:crypto\";\nimport { DomainError, type ExecutableActor, type JournalEvent, type JsonValue, type Orchestration, type RunView } from \"@ragents/engine\";\nimport { WATCH_PLUGIN_ID, type WatchDefinition, type WatchRequest, type WatchServiceApi, type WatchSummary, type WatchVerdict } from \"../contract.js\";\nimport { changesBetween, lastActivityOf, observeActor, watchableActorOf } from \"./observation.js\";\nimport type { WatchPredicate } from \"./condition.js\";\n\nconst CONDITION_CHARS = 4_000;\nconst INSTRUCTION_CHARS = 2_000;\nconst HISTORY_LENGTH = 10;\n\ntype StoredWatch = WatchDefinition & { baseline?: JsonValue; wakes: number; history?: WatchVerdict[] };\ninterface WatchState { version: 1; watches: StoredWatch[] }\n\ninterface WatchRuntime {\n definition: WatchDefinition;\n predicate: WatchPredicate;\n baseline?: JsonValue;\n wakes: number;\n lastEvaluated?: string;\n lastEvaluatedAt?: string;\n lastJudgedChanges?: string;\n history: WatchVerdict[];\n}\n\ninterface RunWatches {\n runId: string;\n unsubscribe: () => void;\n abort: AbortController;\n watches: Map<string, WatchRuntime>;\n debounce?: ReturnType<typeof setTimeout>;\n stallTimer?: ReturnType<typeof setInterval>;\n evaluating?: Promise<void>;\n dirty: boolean;\n}\n\nexport interface WatchServiceOptions {\n runtime: () => Orchestration;\n compile: (condition: string, signal: AbortSignal) => Promise<WatchPredicate>;\n observe: (runId: string, operationId: string, signal: AbortSignal) => Promise<JsonValue>;\n operationExists: (operationId: string) => boolean;\n debounceMs?: number;\n stallCheckMs?: number;\n now?: () => number;\n log?: (message: string, error?: unknown) => void;\n}\n\nconst summaryOf = (watch: WatchRuntime): WatchSummary => ({\n id: watch.definition.id,\n source: `@${watch.definition.sourceHandle}`,\n target: `@${watch.definition.targetHandle}`,\n condition: watch.definition.condition,\n ...(watch.definition.observe ? { observe: watch.definition.observe } : {}),\n ...(watch.definition.stallAfterSeconds ? { stallAfterSeconds: watch.definition.stallAfterSeconds } : {}),\n wakes: watch.wakes,\n ...(watch.lastEvaluatedAt ? { lastEvaluatedAt: watch.lastEvaluatedAt } : {}),\n ...(watch.history.length ? { lastVerdict: watch.history[watch.history.length - 1] } : {}),\n});\n\nconst invalid = (message: string) => new DomainError(\"watch-invalid\", message, 400);\n\nconst cleanText = (value: string | undefined, field: string, limit: number): string | undefined => {\n if (value === undefined) return undefined;\n const text = value.trim();\n if (!text) throw invalid(`${field} must not be empty.`);\n if (text.length > limit) throw invalid(`${field} may contain at most ${limit} characters.`);\n return text;\n};\n\nexport const wakeMessage = (definition: WatchDefinition, reason: string, changes: readonly string[]): string => [\n `The watch wakes you: ${reason}`,\n `Changes at @${definition.sourceHandle} since the last wake:\\n${changes.length ? changes.map((line) => `- ${line}`).join(\"\\n\") : \"- none\"}`,\n ...(definition.instruction ? [definition.instruction] : []),\n].join(\"\\n\");\n\nexport class WatchService implements WatchServiceApi {\n readonly #options: WatchServiceOptions;\n readonly #runs = new Map<string, RunWatches>();\n #closed = false;\n\n constructor(options: WatchServiceOptions) {\n this.#options = options;\n }\n\n #now(): number {\n return this.#options.now ? this.#options.now() : Date.parse(this.#options.runtime().now());\n }\n\n async create(runId: string, callerActorId: string, request: WatchRequest): Promise<WatchSummary> {\n const runtime = this.#options.runtime();\n const view = runtime.view(runId);\n const source = watchableActorOf(view, request.source);\n if (!source) throw invalid(`The observed actor ${request.source} does not exist in this run.`);\n const target = request.target ? watchableActorOf(view, request.target) : watchableActorOf(view, callerActorId);\n if (!target) throw invalid(`The actor to wake ${request.target ?? callerActorId} does not exist in this run or is not an agent.`);\n const condition = cleanText(request.condition, \"condition\", CONDITION_CHARS)!;\n const instruction = cleanText(request.instruction, \"instruction\", INSTRUCTION_CHARS);\n if (request.observe !== undefined && !this.#options.operationExists(request.observe)) throw invalid(`The operation ${request.observe} is not registered.`);\n if (request.stallAfterSeconds !== undefined && (!Number.isInteger(request.stallAfterSeconds) || request.stallAfterSeconds < 1)) throw invalid(\"stallAfterSeconds must be a positive integer.\");\n const run = this.#ensure(runId);\n const existing = [...run.watches.values()].find((watch) => watch.definition.sourceActorId === source.id && watch.definition.targetActorId === target.id && watch.definition.condition === condition);\n if (existing) return summaryOf(existing);\n const predicate = await this.#options.compile(condition, run.abort.signal);\n if (this.#runs.get(runId) !== run) throw invalid(\"The run ended while the watch was being created.\");\n const definition: WatchDefinition = {\n id: `watch_${randomUUID()}`,\n sourceActorId: source.id,\n sourceHandle: source.handle,\n targetActorId: target.id,\n targetHandle: target.handle,\n condition,\n ...(request.observe !== undefined ? { observe: request.observe } : {}),\n ...(instruction !== undefined ? { instruction } : {}),\n ...(request.stallAfterSeconds !== undefined ? { stallAfterSeconds: request.stallAfterSeconds } : {}),\n createdBy: callerActorId,\n };\n const watch: WatchRuntime = { definition, predicate, wakes: 0, history: [] };\n run.watches.set(definition.id, watch);\n this.#persist(run);\n this.#updateStallTimer(run);\n this.#schedule(run, true);\n return summaryOf(watch);\n }\n\n list(runId: string): WatchSummary[] {\n return [...(this.#runs.get(runId)?.watches.values() ?? [])].map(summaryOf);\n }\n\n remove(runId: string, watchId: string, reason: string): void {\n const run = this.#runs.get(runId);\n const watch = run?.watches.get(watchId);\n if (!run || !watch) throw new DomainError(\"watch-unknown\", `The watch ${watchId} does not exist in this run.`, 404);\n if (!reason.trim()) throw invalid(\"reason must not be empty.\");\n run.watches.delete(watchId);\n this.#persist(run);\n this.#updateStallTimer(run);\n }\n\n async prepare(runId: string): Promise<void> {\n if (this.#closed || this.#runs.has(runId)) return;\n const runtime = this.#options.runtime();\n if (runtime.events(runId).length === 0) return;\n const stored = this.#stored(runtime.view(runId));\n if (stored.length === 0) return;\n const run = this.#ensure(runId);\n for (const entry of stored) {\n const { baseline, wakes, history, ...definition } = entry;\n const predicate = await this.#options.compile(definition.condition, run.abort.signal);\n if (this.#runs.get(runId) !== run) return;\n run.watches.set(definition.id, { definition, predicate, ...(baseline !== undefined ? { baseline } : {}), wakes, history: history ?? [] });\n }\n this.#updateStallTimer(run);\n this.#schedule(run, true);\n }\n\n stop(runId: string): void {\n const run = this.#runs.get(runId);\n if (!run) return;\n this.#runs.delete(runId);\n run.unsubscribe();\n run.abort.abort();\n if (run.debounce) clearTimeout(run.debounce);\n if (run.stallTimer) clearInterval(run.stallTimer);\n }\n\n shutdown(): void {\n for (const runId of [...this.#runs.keys()]) this.stop(runId);\n this.#closed = true;\n }\n\n #stored(view: RunView): StoredWatch[] {\n const state = view.pluginStates.find((entry) => entry.pluginId === WATCH_PLUGIN_ID && entry.scope.kind === \"run\")?.state as unknown as WatchState | undefined;\n return state?.watches ?? [];\n }\n\n #ensure(runId: string): RunWatches {\n if (this.#closed) throw new Error(\"The watch service has ended.\");\n const existing = this.#runs.get(runId);\n if (existing) return existing;\n const runtime = this.#options.runtime();\n const run: RunWatches = {\n runId,\n unsubscribe: runtime.subscribe((events) => { if (events.some((event) => event.runId === runId)) this.#schedule(run); }),\n abort: new AbortController(),\n watches: new Map(),\n dirty: false,\n };\n this.#runs.set(runId, run);\n return run;\n }\n\n #persist(run: RunWatches): void {\n const runtime = this.#options.runtime();\n const view = runtime.view(run.runId);\n const state: WatchState = { version: 1, watches: [...run.watches.values()].map((watch) => ({ ...watch.definition, ...(watch.baseline !== undefined ? { baseline: watch.baseline } : {}), wakes: watch.wakes, history: watch.history })) };\n runtime.replacePluginState({ actorId: view.ownerId, commandId: `ragents.watch:state:${randomUUID()}` }, run.runId, { pluginId: WATCH_PLUGIN_ID, scope: { kind: \"run\" }, state: state as unknown as JsonValue });\n }\n\n #updateStallTimer(run: RunWatches): void {\n const needed = [...run.watches.values()].some((watch) => watch.definition.stallAfterSeconds !== undefined);\n if (!needed && run.stallTimer) { clearInterval(run.stallTimer); run.stallTimer = undefined; }\n if (needed && !run.stallTimer) {\n run.stallTimer = setInterval(() => this.#schedule(run), this.#options.stallCheckMs ?? 30_000);\n run.stallTimer.unref();\n }\n }\n\n #schedule(run: RunWatches, immediate = false): void {\n if (this.#runs.get(run.runId) !== run) return;\n if (run.evaluating) { run.dirty = true; return; }\n if (immediate) {\n if (run.debounce) { clearTimeout(run.debounce); run.debounce = undefined; }\n this.#start(run);\n return;\n }\n if (run.debounce) return;\n run.debounce = setTimeout(() => { run.debounce = undefined; this.#start(run); }, this.#options.debounceMs ?? 1_000);\n run.debounce.unref();\n }\n\n #start(run: RunWatches): void {\n run.evaluating = this.#evaluateAll(run).finally(() => {\n run.evaluating = undefined;\n if (run.dirty) { run.dirty = false; this.#schedule(run); }\n });\n }\n\n async #evaluateAll(run: RunWatches): Promise<void> {\n for (const watch of [...run.watches.values()]) {\n if (this.#runs.get(run.runId) !== run || !run.watches.has(watch.definition.id)) return;\n try { await this.#evaluate(run, watch); }\n catch (error) {\n if (run.abort.signal.aborted) return;\n (this.#options.log ?? ((message, cause) => console.error(message, cause)))(`Watch ${watch.definition.id} in run ${run.runId} could not evaluate:`, error);\n }\n }\n }\n\n async #evaluate(run: RunWatches, watch: WatchRuntime): Promise<void> {\n const runtime = this.#options.runtime();\n const view = runtime.view(run.runId);\n const source = view.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === watch.definition.sourceActorId);\n const target = view.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === watch.definition.targetActorId);\n if (!source || !target || target.lifecycle.kind === \"stopped\") return;\n const observation = await this.#observe(run, watch, view, source, runtime.events(run.runId));\n if (this.#runs.get(run.runId) !== run || !run.watches.has(watch.definition.id)) return;\n const key = JSON.stringify(observation);\n if (watch.baseline === undefined) {\n watch.baseline = observation;\n watch.lastEvaluated = key;\n this.#persist(run);\n return;\n }\n if (key === watch.lastEvaluated) return;\n const current = runtime.view(run.runId);\n const busy = current.actors.find((actor): actor is ExecutableActor => actor.kind !== \"human\" && actor.id === target.id)?.lifecycle.kind !== \"idle\"\n || current.inputs.some((input) => input.actorId === target.id && input.lifecycle.kind === \"pending\")\n || current.actions.some((action) => action.askedBy === target.id && action.status === \"pending\");\n if (busy) return;\n const unsettled = source.lifecycle.kind === \"running\" || current.inputs.some((input) => input.actorId === source.id && input.lifecycle.kind === \"pending\");\n if (unsettled && !(typeof observation === \"object\" && observation !== null && \"stalledForSeconds\" in observation)) return;\n const changes = changesBetween(watch.baseline, observation);\n const judged = JSON.stringify(changes);\n if (changes.length === 0 || judged === watch.lastJudgedChanges) { watch.lastEvaluated = key; return; }\n const reason = watch.predicate(observation, watch.baseline);\n const at = new Date(this.#now()).toISOString();\n watch.lastEvaluated = key;\n watch.lastEvaluatedAt = at;\n watch.lastJudgedChanges = judged;\n watch.history = [...watch.history, { at, wake: reason !== undefined, reason: reason ?? \"Condition not met\", changes }].slice(-HISTORY_LENGTH);\n if (reason === undefined) {\n if (changes.some((line) => !line.startsWith(\"stalledForSeconds:\"))) this.#persist(run);\n return;\n }\n runtime.enqueueInput({ actorId: current.ownerId, commandId: `ragents.watch:wake:${watch.definition.id}:${randomUUID()}` }, run.runId, {\n actorId: target.id,\n presentation: \"background\",\n content: wakeMessage(watch.definition, reason, changes),\n });\n watch.baseline = observation;\n watch.wakes += 1;\n this.#persist(run);\n }\n\n async #observe(run: RunWatches, watch: WatchRuntime, view: RunView, source: ExecutableActor, events: readonly JournalEvent[]): Promise<JsonValue> {\n const observed = watch.definition.observe ? await this.#options.observe(run.runId, watch.definition.observe, run.abort.signal) : undefined;\n const stall = watch.definition.stallAfterSeconds;\n const age = stall ? this.#now() - Date.parse(lastActivityOf(events, source)) : 0;\n return {\n source: observeActor(view, source.id) as unknown as JsonValue,\n ...(observed !== undefined ? { observed } : {}),\n ...(stall && age >= stall * 1_000 ? { stalledForSeconds: Math.floor(age / (stall * 1_000)) * stall } : {}),\n };\n }\n}\n", "import { actorByReference, type ExecutableActor, type JournalEvent, type JsonValue, type RunView } from \"@ragents/engine\";\n\nconst OUTPUT_CHARS = 600;\n\nexport interface ActorObservation {\n lifecycle: \"idle\" | \"running\" | \"stopped\";\n stopReason?: string;\n completedTurns: number;\n lastTurn?: { status: string; reason?: string };\n pendingInputs: number;\n pendingActions: number;\n lastOutput?: string;\n}\n\nexport const watchableActorOf = (view: RunView, reference: string): ExecutableActor | undefined => {\n const actor = actorByReference(view.actors, reference);\n return actor?.kind === \"human\" ? undefined : actor;\n};\n\nexport const observeActor = (view: RunView, actorId: string): ActorObservation | undefined => {\n const actor = view.actors.find((candidate): candidate is ExecutableActor => candidate.kind !== \"human\" && candidate.id === actorId);\n if (!actor) return undefined;\n const turns = view.turns.filter((turn) => turn.actorId === actorId);\n const last = turns.at(-1);\n const output = turns.findLast((turn) => turn.status !== \"running\" && turn.outputs.length > 0)?.outputs.at(-1)?.text;\n return {\n lifecycle: actor.lifecycle.kind,\n ...(actor.lifecycle.kind === \"stopped\" ? { stopReason: actor.lifecycle.reason } : {}),\n completedTurns: turns.filter((turn) => turn.status !== \"running\").length,\n ...(last ? { lastTurn: { status: last.status, ...(last.reason ? { reason: last.reason } : {}) } } : {}),\n pendingInputs: view.inputs.filter((input) => input.actorId === actorId && input.lifecycle.kind === \"pending\").length,\n pendingActions: view.actions.filter((action) => action.askedBy === actorId && action.status === \"pending\").length,\n ...(output ? { lastOutput: output.length > OUTPUT_CHARS ? `...${output.slice(-OUTPUT_CHARS)}` : output } : {}),\n };\n};\n\nexport const lastActivityOf = (events: readonly JournalEvent[], actor: ExecutableActor): string => {\n const event = events.findLast((candidate) => candidate.actorId === actor.id\n || candidate.type === \"actor.input.enqueued\" && candidate.payload.actorId === actor.id\n || (candidate.type === \"turn.finished\" || candidate.type === \"turn.interrupted\") && candidate.actorId === actor.id);\n return event?.occurredAt ?? actor.createdAt;\n};\n\nconst isObject = (value: JsonValue): value is { [key: string]: JsonValue } => typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const flattenJson = (value: JsonValue, prefix = \"\", into = new Map<string, string>()): Map<string, string> => {\n if (Array.isArray(value)) {\n if (value.length === 0 && prefix) into.set(prefix, \"[]\");\n value.forEach((entry, index) => flattenJson(entry, prefix ? `${prefix}.${index}` : String(index), into));\n } else if (isObject(value)) {\n const keys = Object.keys(value);\n if (keys.length === 0 && prefix) into.set(prefix, \"{}\");\n for (const key of keys) flattenJson(value[key], prefix ? `${prefix}.${key}` : key, into);\n } else into.set(prefix || \"$\", JSON.stringify(value));\n return into;\n};\n\nexport const changesBetween = (before: JsonValue | undefined, after: JsonValue): string[] => {\n const previous = before === undefined ? new Map<string, string>() : flattenJson(before);\n const current = flattenJson(after);\n const lines: string[] = [];\n for (const [path, value] of current) {\n const old = previous.get(path);\n if (old === undefined) lines.push(`${path}: ${value}${before === undefined ? \"\" : \" (new)\"}`);\n else if (old !== value) lines.push(`${path}: ${old} -> ${value}`);\n }\n for (const path of previous.keys()) if (!current.has(path)) lines.push(`${path}: removed`);\n return lines;\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["randomUUID", "watch", "randomUUID"]
7
7
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "format": 4,
2
+ "format": 5,
3
3
  "id": "ragents.workspace",
4
4
  "api": 7,
5
5
  "hostNames": {
@@ -136,8 +136,8 @@
136
136
  ]
137
137
  }
138
138
  },
139
- "stand": "ca7786e0fc6dd61f831e7517e4b81f94e22e93af3ea8bd1135ee841eef604420",
140
- "sourceStand": "3b863a74ff47765c27dd616333b415814e9836d36a8036af49e4d2548e8795d0",
139
+ "revision": "53498a6dbf25ada77b6dcdf7bb1d188c16229a85c7ddeeafa10e6335a8230954",
140
+ "sourceRevision": "f937fbba39f6d0ab90e55e494976d0d650054b722212d7e25cf8ddb835f91492",
141
141
  "server": "server/index.js",
142
142
  "web": {
143
143
  "entry": "web/index.js",