@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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["ragents-host-read:read", "ragents-host-value:@ragents/web/PluginRegistry#pluginRoutePrefixFrom", "ragents-host-value:@ragents/web/PluginRegistry#useSurfaceController", "ragents-host-value:@ragents/web/lib/guards#isRecord", "ragents-host-value:@ragents/web/rpc#rpc", "ragents-host-value:@ragents/web/access-token#withAccessToken", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#ACTOR_INVOCATIONS_STATE_ID", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#ACTOR_PROGRAMS_STATE_ID", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#ACTOR_STATE_ID", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#actorProgramContracts", "../../../plugins/ragents.actor-programs/parameter-types.ts", "../../../node_modules/.pnpm/quassel@0.3.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/src/chat-attachments.ts", "../../../node_modules/.pnpm/quassel@0.3.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/src/events.ts", "../../../plugins/ragents.actor-programs/web/bridge.ts", "../../../plugins/ragents.actor-programs/web/api.ts", "ragents-host-value:@ragents/web/AccessContext#useAccess", "ragents-host-value:react#createContext", "ragents-host-value:react#createElement", "ragents-host-value:react#forwardRef", "ragents-host-value:react#useCallback", "ragents-host-value:react#useContext", "ragents-host-value:react#useEffect", "ragents-host-value:react#useLayoutEffect", "ragents-host-value:react#useMemo", "ragents-host-value:react#useRef", "ragents-host-value:react#useState", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toKebabCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toLucideIconData.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toCamelCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toPascalCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/mergeClasses.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/defaultAttributes.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/buildLucideIconNode.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/buildLucideIconForReact.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/hasA11yProp.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/context.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/Icon.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/createLucideIcon.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/arrow-left.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/layout-grid.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/x.ts", "ragents-host-value:@ragents/web/ui#Alert", "ragents-host-value:@ragents/web/ui#Badge", "ragents-host-value:@ragents/web/ui#Button", "ragents-host-value:@ragents/web/ui#Dialog", "ragents-host-value:@ragents/web/ui#DialogContent", "ragents-host-value:@ragents/web/ui#DialogTitle", "ragents-host-value:@ragents/web/ui#Empty", "ragents-host-value:@ragents/web/ui#EmptyContent", "ragents-host-value:@ragents/web/ui#EmptyDescription", "ragents-host-value:@ragents/web/ui#EmptyHeader", "ragents-host-value:@ragents/web/ui#EmptyMedia", "ragents-host-value:@ragents/web/ui#EmptyTitle", "ragents-host-value:@ragents/web/ui#Input", "ragents-host-value:@ragents/web/ui#Spinner", "ragents-host-value:@ragents/web/ui#Textarea", "ragents-host-value:@ragents/web/ui#cn", "ragents-host-value:@ragents/web/Toolbar#ToolbarCopy", "ragents-host-value:@ragents/web/Toolbar#ToolbarItem", "ragents-host-value:@ragents/web/Toolbar#ToolbarLabel", "ragents-host-value:@ragents/web/Toolbar#ToolbarText", "../../../plugins/ragents.actor-programs/web/AppsPanel.tsx", "ragents-host-value:@ragents/web/run-view#runActorFrom", "ragents-host-value:@ragents/web/run-view#runViewFrom", "ragents-host-value:@ragents/web/SourceCode#SourceCode", "../../../plugins/ragents.actor-programs/web/program-state.ts", "ragents-host-value:react/jsx-runtime#Fragment", "ragents-host-value:react/jsx-runtime#jsx", "ragents-host-value:react/jsx-runtime#jsxs", "../../../plugins/ragents.actor-programs/web/ProgramSource.tsx", "../../../plugins/ragents.actor-programs/web/function-call.ts", "../../../plugins/ragents.actor-programs/web/function-input.ts", "../../../plugins/ragents.actor-programs/web/FunctionForm.tsx", "../../../plugins/ragents.actor-programs/web/ExpandIcon.tsx", "../../../plugins/ragents.actor-programs/web/state-revision.ts", "../../../plugins/ragents.actor-programs/web/invocations.ts", "../../../plugins/ragents.actor-programs/web/context.ts", "ragents-host-value:@ragents/web/run-panel/input-bridge#hostInputEnabled", "ragents-host-value:@ragents/web/run-panel/input-bridge#isRunPanelKeyboardMessage", "ragents-host-value:@ragents/web/run-panel/input-bridge#relayFrameInput", "ragents-host-value:@ragents/web/theme#useResolvedTheme", "ragents-host-value:@ragents/web/api#sendActorMessage", "ragents-host-value:@ragents/engine/src/http/contracts#actorByHandle", "ragents-host-value:@ragents/web/actor-conversation#actorChatMessages", "ragents-host-value:@ragents/web/chat/chat-target#programChatNotice", "../../../plugins/ragents.actor-programs/web/chat-state.ts", "ragents-host-value:@ragents/web/chat/useAttachmentCapabilities#getAttachmentCapabilities", "../../../plugins/ragents.actor-programs/web/ActorViewFrame.tsx", "../../../plugins/ragents.actor-programs/web/FullscreenHost.tsx", "../../../plugins/ragents.actor-programs/web/EmbeddedApps.tsx", "../../../plugins/ragents.actor-programs/web/index.tsx"],
4
- "sourcesContent": ["export const read = (specifier, name) => {\n const module = globalThis[\"__ragentsHostModules\"]?.[specifier];\n if (module === undefined) throw new Error(`Der Host stellt ${specifier} nicht bereit`);\n if (!(name in module)) throw new Error(`Der Host stellt ${name} aus ${specifier} nicht bereit; das Bundle ist gegen einen neueren Host gebaut`);\n return module[name];\n};", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"pluginRoutePrefixFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"useSurfaceController\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/guards\", \"isRecord\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/rpc\", \"rpc\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/access-token\", \"withAccessToken\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"ACTOR_INVOCATIONS_STATE_ID\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"ACTOR_PROGRAMS_STATE_ID\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"ACTOR_STATE_ID\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"actorProgramContracts\");\n", "export const actorFunctionParameterTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"string[]\", \"number[]\", \"json\"] as const;\n\nexport type ActorFunctionParameterType = typeof actorFunctionParameterTypes[number];\n", "import type { ChatAttachmentInput } from \"./events\";\n\nexport const MAX_CHAT_ATTACHMENTS = 8;\nexport const MAX_CHAT_ATTACHMENT_BYTES = 20 * 1024 * 1024;\nexport const MAX_CHAT_REQUEST_BYTES = 29 * 1024 * 1024;\n\nexport const chatAttachmentMediaType = (name: string, mediaType: string): string => {\n const explicit = mediaType.trim().toLowerCase();\n if (explicit) return explicit === \"video/quicktime\" ? \"video/mov\" : explicit;\n const types: Record<string, string> = {\n png: \"image/png\", jpg: \"image/jpeg\", jpeg: \"image/jpeg\", gif: \"image/gif\", webp: \"image/webp\",\n avif: \"image/avif\", svg: \"image/svg+xml\", pdf: \"application/pdf\",\n mp4: \"video/mp4\", webm: \"video/webm\", mov: \"video/mov\", mpeg: \"video/mpeg\", mpg: \"video/mpeg\",\n txt: \"text/plain\", md: \"text/markdown\", csv: \"text/csv\", tsv: \"text/tab-separated-values\",\n json: \"application/json\", jsonl: \"application/x-ndjson\", xml: \"application/xml\",\n yaml: \"application/yaml\", yml: \"application/yaml\", ts: \"text/plain\", tsx: \"text/plain\",\n js: \"application/javascript\", py: \"text/plain\", cs: \"text/plain\", fs: \"text/plain\",\n html: \"text/html\", css: \"text/css\", log: \"text/plain\",\n };\n return types[name.split(\".\").at(-1)?.toLowerCase() ?? \"\"] ?? \"application/octet-stream\";\n};\n\nexport const parseChatAttachments = (value: unknown): ChatAttachmentInput[] => {\n if (value === undefined) return [];\n if (!Array.isArray(value) || value.length > MAX_CHAT_ATTACHMENTS) {\n throw new Error(`Anh\u00E4nge m\u00FCssen eine Liste mit h\u00F6chstens ${MAX_CHAT_ATTACHMENTS} Dateien sein.`);\n }\n let total = 0;\n return value.map((entry, index) => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) throw new Error(`Anhang ${index + 1} ist ung\u00FCltig.`);\n const { name, mediaType, data } = entry as Record<string, unknown>;\n if (typeof name !== \"string\" || !name.trim() || name.length > 255 || /[/\\\\\\u0000-\\u001f\\u007f]/.test(name)\n || name === \".\" || name === \"..\") throw new Error(`Anhang ${index + 1} ben\u00F6tigt einen g\u00FCltigen Dateinamen ohne Pfad.`);\n const normalizedType = typeof mediaType === \"string\" ? chatAttachmentMediaType(name, mediaType) : \"\";\n if (!/^[a-z0-9!#$&^_.+-]+\\/[a-z0-9!#$&^_.+-]+$/i.test(normalizedType)) {\n throw new Error(`Anhang ${name} ben\u00F6tigt einen g\u00FCltigen MIME-Typ.`);\n }\n if (typeof data === \"string\" && data.length > Math.ceil(MAX_CHAT_ATTACHMENT_BYTES / 3) * 4)\n throw new Error(\"Anh\u00E4nge d\u00FCrfen zusammen h\u00F6chstens 20 MiB gro\u00DF sein.\");\n if (typeof data !== \"string\" || data.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(data)) {\n throw new Error(`Anhang ${name} enth\u00E4lt ung\u00FCltiges Base64.`);\n }\n const padding = data.endsWith(\"==\") ? 2 : data.endsWith(\"=\") ? 1 : 0;\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n if (padding && (alphabet.indexOf(data[data.length - padding - 1]) & (padding === 2 ? 15 : 3)) !== 0) {\n throw new Error(`Anhang ${name} enth\u00E4lt nichtkanonisches Base64.`);\n }\n total += data.length / 4 * 3 - padding;\n if (total > MAX_CHAT_ATTACHMENT_BYTES) throw new Error(\"Anh\u00E4nge d\u00FCrfen zusammen h\u00F6chstens 20 MiB gro\u00DF sein.\");\n return { name, mediaType: normalizedType, data };\n });\n};\n", "export type Role = \"user\" | \"assistant\" | \"thinking\" | \"tool\" | \"system\" | \"action\";\n\nexport interface ChatAttachmentInput {\n name: string;\n mediaType: string;\n data: string;\n}\n\nexport interface ChatAttachment {\n name: string;\n mediaType: string;\n size: number;\n url: string;\n}\n\nexport interface ChatAttachmentCapabilities {\n input: readonly string[];\n model: string;\n}\n\nexport interface ToolInfo {\n id: string;\n name: string;\n arguments: string;\n result?: string;\n isError?: boolean;\n}\n\nexport interface ChatTextCursor {\n conversationId: string;\n sequence: number;\n /** Accumulated non-whitespace UTF-16 units in the turn anchored by sequence. */\n offset: number;\n}\n\nexport interface ChatJournalCursor {\n conversationId: string;\n eventId: string;\n sequence: number;\n}\n\n/**\n * Eine Aktion, die auf eine Eingabe des Benutzers wartet. Form und Inhalt von `payload` und\n * `result` geh\u00F6ren dem Plugin in `owner`; `status` gesetzt hei\u00DFt: erledigt, die Karte ist Beleg.\n */\nexport interface PendingAction {\n actionId: string;\n owner: string | null;\n payload: unknown;\n status?: \"approved\" | \"dismissed\";\n result?: unknown;\n}\n\nexport interface Message {\n key: string;\n role: Role;\n /** Absenderkennung f\u00FCr die Darstellung; unabh\u00E4ngig von Rolle und Sprechblasenlabel. */\n sender?: string;\n text: string;\n textCursor?: ChatTextCursor;\n closed?: boolean;\n attachments?: ChatAttachment[];\n tool?: ToolInfo;\n action?: PendingAction;\n /** ISO-Zeitpunkt der Nachricht; Anzeige optional (ChatMessages showTimestamps). */\n at?: string;\n /** Der ActorInput hinter einer eingehenden Nachricht; an ihm h\u00E4ngt die Steering-Markierung. */\n inputId?: string;\n /** Die Nachricht ist in einen schon laufenden Turn eingespeist worden, statt einen eigenen zu beginnen. */\n steered?: boolean;\n /** Farbige Sprechblase statt Fliesstext, z.B. fuer Mehrparteien-Gespraeche. */\n bubble?: { color: string; side: \"start\" | \"end\"; label?: string };\n}\n\nexport interface ChatStartupStatus {\n status: \"preparing\" | \"failed\";\n message: string;\n}\n\nexport type ChatEvent =\n | { kind: \"reset\"; reason?: \"conversation-reset\"; conversationId: string | null }\n | { kind: \"replay-end\"; conversationId: string | null }\n | { kind: \"user\"; text: string; inputId?: string; at?: string; attachments?: ChatAttachment[] }\n | { kind: \"steered\"; inputId: string }\n | { kind: \"text\"; delta: string; at?: string; cursor: ChatTextCursor }\n | { kind: \"thinking\"; delta: string; at?: string }\n | { kind: \"tool\"; id: string; name: string; arguments: string; label?: string; at?: string }\n | { kind: \"tool-result\"; id: string; result: string; isError?: boolean }\n | { kind: \"action\"; actionId: string; owner: string | null; text: string; payload: unknown; at?: string }\n | { kind: \"action-resolved\"; actionId: string; status: \"approved\" | \"dismissed\"; result: unknown }\n | { kind: \"system\"; text: string; at?: string }\n | { kind: \"status\"; running: boolean; startup?: ChatStartupStatus }\n | { kind: \"turn-done\" }\n | { kind: \"plugin\"; pluginId: string; type: string; payload?: unknown; at?: string; journal?: ChatJournalCursor };\n\nlet keyCounter = 0;\n\n// crypto.randomUUID fehlt ausserhalb sicherer Kontexte, etwa bei einem Host unter http.\nconst newKey = (): string => typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\n ? crypto.randomUUID()\n : `qsl-${Date.now().toString(36)}-${(keyCounter += 1).toString(36)}`;\n\nfunction openMessageIndex(messages: Message[]): number {\n for (let index = messages.length - 1; index >= 0; index--) {\n const message = messages[index];\n if (!message.closed && (message.role === \"assistant\" || message.role === \"thinking\")) return index;\n }\n return -1;\n}\n\nfunction closeOpen(messages: Message[]): Message[] {\n const index = openMessageIndex(messages);\n if (index === -1) {\n return messages;\n }\n return messages.map((message, position) => position === index ? { ...message, closed: true } : message);\n}\n\nfunction appendDelta(messages: Message[], role: Role, delta: string, at?: string, textCursor?: ChatTextCursor): Message[] {\n const index = openMessageIndex(messages);\n const current = messages[index];\n if (current && current.role === role\n && current.textCursor?.conversationId === textCursor?.conversationId\n && current.textCursor?.sequence === textCursor?.sequence) {\n return messages.map((message, position) => position === index\n ? { ...message, text: message.text + delta, ...(textCursor ? { textCursor } : {}) }\n : message);\n }\n return [...closeOpen(messages), { key: newKey(), role, text: delta, at, ...(textCursor ? { textCursor } : {}) }];\n}\n\n/** Eingehende Nachrichten lassen den laufenden Ausgabeblock offen. */\nexport function applyEvent(messages: Message[], event: ChatEvent): Message[] {\n switch (event.kind) {\n case \"reset\":\n return [];\n case \"user\":\n return [...messages, { key: newKey(), role: \"user\", text: event.text, closed: true, at: event.at,\n ...(event.inputId ? { inputId: event.inputId } : {}),\n ...(event.attachments?.length ? { attachments: event.attachments } : {}) }];\n case \"steered\":\n return messages.map((message) => message.inputId === event.inputId ? { ...message, steered: true } : message);\n case \"text\":\n return appendDelta(messages, \"assistant\", event.delta, event.at, event.cursor);\n case \"thinking\":\n return appendDelta(messages, \"thinking\", event.delta, event.at);\n case \"tool\":\n return [\n ...closeOpen(messages),\n {\n key: newKey(),\n role: \"tool\",\n text: event.label ?? event.name,\n closed: true,\n tool: { id: event.id, name: event.name, arguments: event.arguments },\n at: event.at,\n },\n ];\n case \"tool-result\": {\n const index = messages.map((message) => message.tool?.id).lastIndexOf(event.id);\n return messages.map((message, position) =>\n position === index && message.tool\n ? { ...message, tool: { ...message.tool, result: event.result, isError: event.isError } }\n : message,\n );\n }\n case \"action\":\n return [\n ...closeOpen(messages),\n {\n key: newKey(),\n role: \"action\",\n text: event.text,\n closed: true,\n action: { actionId: event.actionId, owner: event.owner, payload: event.payload },\n at: event.at,\n },\n ];\n case \"action-resolved\":\n return messages.map((message) =>\n message.action?.actionId === event.actionId\n ? { ...message, action: { ...message.action, status: event.status, result: event.result } }\n : message,\n );\n case \"system\":\n return [...closeOpen(messages), { key: newKey(), role: \"system\", text: event.text, closed: true, at: event.at }];\n case \"turn-done\":\n return closeOpen(messages);\n default:\n return messages;\n }\n}\n\nexport function prettyJson(value: string): string {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n}\n\nexport function compactToolLine(tool: ToolInfo): string {\n const args = tool.arguments.replace(/\\s+/g, \" \").trim();\n const line = args && args !== \"{}\" ? `${tool.name} ${args}` : tool.name;\n return line.length > 160 ? `${line.slice(0, 160)} ...` : line;\n}\n\nexport { MAX_CHAT_ATTACHMENTS, MAX_CHAT_ATTACHMENT_BYTES, MAX_CHAT_REQUEST_BYTES, chatAttachmentMediaType, parseChatAttachments } from \"./chat-attachments\";\n", "import { isRecord } from \"@ragents/web/lib/guards\";\nimport { parseChatAttachments, type ChatAttachmentInput } from \"quassel/events\";\n\nexport const RUN_APP_BRIDGE_VERSION = 1;\n\nexport const RUN_APP_FRAME_READY = \"ragents.app.frame-ready\";\nexport const RUN_APP_CONNECTED = \"ragents.app.connected\";\nexport const RUN_APP_READY = \"ragents.app.ready\";\nexport const RUN_APP_THEME = \"ragents.app.theme\";\nexport const RUN_APP_INVOKE = \"ragents.app.invoke\";\nexport const RUN_APP_GET_STATE = \"ragents.app.get-state\";\nexport const RUN_APP_STATE = \"ragents.app.state\";\nexport const RUN_APP_INVOCATION = \"ragents.app.invocation\";\nexport const RUN_APP_ERROR = \"ragents.app.error\";\nexport const RUN_APP_CHAT_WATCH = \"ragents.app.chat-watch\";\nexport const RUN_APP_CHAT_UNWATCH = \"ragents.app.chat-unwatch\";\nexport const RUN_APP_CHAT_SEND = \"ragents.app.chat-send\";\nexport const RUN_APP_CHAT_STATE = \"ragents.app.chat-state\";\nexport const RUN_APP_CHAT_ACK = \"ragents.app.chat-ack\";\n\nexport type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nexport interface RunAppInvokeRequest {\n type: typeof RUN_APP_INVOKE;\n version: typeof RUN_APP_BRIDGE_VERSION;\n requestId: string;\n actionId: string;\n input: JsonValue;\n}\n\nexport interface RunAppGetStateRequest {\n type: typeof RUN_APP_GET_STATE;\n version: typeof RUN_APP_BRIDGE_VERSION;\n requestId: string;\n}\n\nexport type RunAppChatRequest = {\n version: typeof RUN_APP_BRIDGE_VERSION;\n requestId: string;\n actor: string;\n} & (\n | { type: typeof RUN_APP_CHAT_WATCH }\n | { type: typeof RUN_APP_CHAT_UNWATCH }\n | { type: typeof RUN_APP_CHAT_SEND; text: string; attachments?: ChatAttachmentInput[] }\n);\n\nexport type RunAppBridgeRequest = RunAppInvokeRequest | RunAppGetStateRequest | RunAppChatRequest;\n\nexport type RunAppBridgeValidation =\n | { ok: true; request: RunAppBridgeRequest }\n | { ok: false; requestId?: string; error: string };\n\nconst ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;\nconst MAX_INPUT_LENGTH = 64 * 1024;\nconst MAX_DEPTH = 24;\n\nexport const isJsonValue = (value: unknown, depth = 0): value is JsonValue => {\n if (depth > MAX_DEPTH) return false;\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (Array.isArray(value)) return value.every((entry) => isJsonValue(entry, depth + 1));\n if (!isRecord(value)) return false;\n return Object.entries(value).every(([key, entry]) => key.length <= 256 && isJsonValue(entry, depth + 1));\n};\n\nconst requestIdFrom = (value: unknown): string | undefined =>\n typeof value === \"string\" && ID_PATTERN.test(value) ? value : undefined;\n\nconst inputWithinLimit = (value: JsonValue): boolean => {\n try {\n return new TextEncoder().encode(JSON.stringify(value)).byteLength <= MAX_INPUT_LENGTH;\n } catch {\n return false;\n }\n};\n\nexport const validateRunAppBridgeRequest = (value: unknown): RunAppBridgeValidation => {\n if (!isRecord(value)) return { ok: false, error: \"Die App-Nachricht ist kein Objekt\" };\n const requestId = requestIdFrom(value.requestId);\n if (!requestId) return { ok: false, error: \"Die App-Nachricht enth\u00E4lt keine g\u00FCltige requestId\" };\n if (value.version !== RUN_APP_BRIDGE_VERSION) {\n return { ok: false, requestId, error: \"Die App verwendet eine nicht unterst\u00FCtzte Bridge-Version\" };\n }\n if (value.type === RUN_APP_GET_STATE) {\n return { ok: true, request: { type: RUN_APP_GET_STATE, version: RUN_APP_BRIDGE_VERSION, requestId } };\n }\n if (value.type === RUN_APP_CHAT_WATCH || value.type === RUN_APP_CHAT_UNWATCH || value.type === RUN_APP_CHAT_SEND) {\n if (typeof value.actor !== \"string\" || !/^@?[\\p{L}\\p{N}_-]{1,64}$/u.test(value.actor)) {\n return { ok: false, requestId, error: \"Das Chat-Ziel muss primary oder ein Actor-Handle wie @reviewer sein\" };\n }\n const common = { version: RUN_APP_BRIDGE_VERSION, requestId, actor: value.actor } as const;\n if (value.type !== RUN_APP_CHAT_SEND) return { ok: true, request: { ...common, type: value.type } };\n let attachments: ChatAttachmentInput[];\n try { attachments = parseChatAttachments(value.attachments); } catch (cause) {\n return { ok: false, requestId, error: cause instanceof Error ? cause.message : String(cause) };\n }\n if (typeof value.text !== \"string\" || (!value.text.trim() && !attachments.length) || !inputWithinLimit(value.text)) {\n return { ok: false, requestId, error: \"Die Chat-Nachricht ist leer oder zu gro\u00DF\" };\n }\n return { ok: true, request: { ...common, type: RUN_APP_CHAT_SEND, text: value.text.trim(), ...(attachments.length ? { attachments } : {}) } };\n }\n if (value.type !== RUN_APP_INVOKE) {\n return { ok: false, requestId, error: \"Die App-Nachricht hat einen unbekannten Typ\" };\n }\n if (typeof value.actionId !== \"string\" || !ID_PATTERN.test(value.actionId)) {\n return { ok: false, requestId, error: \"Die App-Nachricht enth\u00E4lt keine g\u00FCltige actionId\" };\n }\n if (!isJsonValue(value.input) || !inputWithinLimit(value.input)) {\n return { ok: false, requestId, error: \"Die Eingabe der App-Aktion ist kein g\u00FCltiger JSON-Wert oder zu gro\u00DF\" };\n }\n return {\n ok: true,\n request: {\n type: RUN_APP_INVOKE,\n version: RUN_APP_BRIDGE_VERSION,\n requestId,\n actionId: value.actionId,\n input: value.input,\n },\n };\n};\n", "import { isRecord } from \"@ragents/web/lib/guards\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { withAccessToken } from \"@ragents/web/access-token\";\nimport { actorProgramContracts } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport {\n actorFunctionParameterTypes,\n type ActorFunctionParameterType,\n} from \"../parameter-types\";\nimport { isJsonValue, type JsonValue } from \"./bridge\";\n\nexport type RunAppInvocationStatus = \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\";\n\nexport interface RunAppAction {\n id: string;\n label: string;\n description?: string;\n confirmation: string | null;\n}\n\nexport type RunAppPlacement = { kind: \"canvas\"; anchorActorId: string };\n\nexport type RunAppInvocation = {\n id: string;\n actorId: string;\n actorHandle: string;\n appId: string;\n actionId: string;\n revision: string;\n output: string[];\n createdAt: string;\n requestId: string;\n} & (\n | { status: \"queued\" }\n | { status: \"running\"; startedAt: string }\n | { status: \"succeeded\"; startedAt: string; finishedAt: string; result: JsonValue }\n | { status: \"failed\" | \"cancelled\"; startedAt?: string; finishedAt: string; error: string }\n);\n\nexport interface RunApp {\n id: string;\n actorId: string;\n actorHandle: string;\n visible?: boolean;\n title: string;\n description?: string;\n revision: string;\n actions: RunAppAction[];\n placements: RunAppPlacement[];\n state: { version: 1; revision: number; values: JsonValue };\n invocations: RunAppInvocation[];\n}\n\nexport interface RunToolParameter {\n name: string;\n description: string;\n type: ActorFunctionParameterType;\n required: boolean;\n}\n\nexport interface RunToolTarget {\n actorId: string;\n handle: string | null;\n}\n\nexport interface RunScriptTool {\n actorId: string;\n actorHandle: string;\n functionId: string;\n revision: string;\n moduleId: string;\n name: string;\n description: string;\n parameters: RunToolParameter[];\n card: boolean;\n sourceHash: string;\n targets: RunToolTarget[];\n installedBy: string;\n}\n\nexport interface ActorProgramSourceFile {\n path: string;\n content: string;\n}\n\nexport interface ActorProgramsListing {\n apps: RunApp[];\n tools: RunScriptTool[];\n}\n\nexport interface ActorProgramsApi {\n list: (runId: string, signal?: AbortSignal) => Promise<ActorProgramsListing>;\n source: (runId: string, moduleId: string, signal?: AbortSignal) => Promise<ActorProgramSourceFile[]>;\n frameUrl: (runId: string, appId: string, revision: string) => string;\n invoke: (\n runId: string,\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n signal?: AbortSignal,\n ) => Promise<RunAppInvocation>;\n invocation: (runId: string, appId: string, invocationId: string, signal?: AbortSignal) => Promise<RunAppInvocation>;\n invokeFunction: (runId: string, actorHandle: string, revision: string, functionId: string, requestId: string, input: JsonValue, signal?: AbortSignal) => Promise<RunAppInvocation>;\n functionInvocation: (runId: string, actorHandle: string, invocationId: string, signal?: AbortSignal) => Promise<RunAppInvocation>;\n}\n\nconst ID_PATTERN = /^[A-Za-z0-9_-]{1,100}$/;\nconst VIEW_ID_PATTERN = /^[A-Za-z0-9_-]{1,130}$/;\nconst HASH_PATTERN = /^[a-f0-9]{64}$/;\nconst PARAMETER_TYPES = new Set<RunToolParameter[\"type\"]>(actorFunctionParameterTypes);\n\nconst requiredString = (value: unknown, field: string): string => {\n if (typeof value !== \"string\" || !value.trim()) throw new Error(`${field} fehlt oder ist leer`);\n return value;\n};\n\nconst optionalString = (value: unknown, field: string): string | undefined => {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") throw new Error(`${field} ist kein Text`);\n return value;\n};\n\nconst idFrom = (value: unknown, field: string): string => {\n const id = requiredString(value, field);\n if (!ID_PATTERN.test(id)) throw new Error(`${field} ist keine g\u00FCltige Kennung`);\n return id;\n};\n\nconst unique = <T,>(values: T[], keyOf: (value: T) => string, label: string): T[] => {\n const ids = values.map(keyOf);\n if (new Set(ids).size !== ids.length) throw new Error(`${label} enth\u00E4lt doppelte Kennungen`);\n return values;\n};\n\nexport const runAppActionFrom = (value: unknown): RunAppAction => {\n if (!isRecord(value)) throw new Error(\"Eine App-Aktion ist kein Objekt\");\n if (value.confirmation !== null && typeof value.confirmation !== \"string\") {\n throw new Error(\"confirmation einer App-Aktion muss Text oder null sein\");\n }\n if (typeof value.confirmation === \"string\" && !value.confirmation.trim()) {\n throw new Error(\"confirmation einer App-Aktion darf nicht leer sein\");\n }\n return {\n id: idFrom(value.id, \"action.id\"),\n label: requiredString(value.label, \"action.label\"),\n ...(value.description !== undefined\n ? { description: optionalString(value.description, \"action.description\") as string }\n : {}),\n confirmation: value.confirmation,\n };\n};\n\nexport const runAppInvocationFrom = (value: unknown): RunAppInvocation => {\n if (!isRecord(value)) throw new Error(\"Eine App-Ausf\u00FChrung ist kein Objekt\");\n if (!Array.isArray(value.output) || value.output.some((line) => typeof line !== \"string\")) {\n throw new Error(\"output einer App-Ausf\u00FChrung ist keine Textliste\");\n }\n const base = {\n id: idFrom(value.id, \"invocation.id\"),\n actorId: requiredString(value.actorId, \"invocation.actorId\"),\n actorHandle: requiredString(value.actorHandle, \"invocation.actorHandle\"),\n appId: requiredString(value.appId, \"invocation.appId\"),\n actionId: idFrom(value.actionId, \"invocation.actionId\"),\n revision: requiredString(value.revision, \"invocation.revision\"),\n output: value.output as string[],\n createdAt: requiredString(value.createdAt, \"invocation.createdAt\"),\n requestId: idFrom(value.requestId, \"invocation.requestId\"),\n };\n switch (value.status) {\n case \"queued\":\n return { ...base, status: \"queued\" };\n case \"running\":\n return { ...base, status: \"running\", startedAt: requiredString(value.startedAt, \"invocation.startedAt\") };\n case \"succeeded\": {\n if (!isJsonValue(value.result)) throw new Error(\"result einer App-Ausf\u00FChrung ist kein JSON-Wert\");\n return {\n ...base,\n status: \"succeeded\",\n startedAt: requiredString(value.startedAt, \"invocation.startedAt\"),\n finishedAt: requiredString(value.finishedAt, \"invocation.finishedAt\"),\n result: value.result,\n };\n }\n case \"failed\":\n case \"cancelled\":\n return {\n ...base,\n status: value.status,\n ...(value.startedAt !== undefined\n ? { startedAt: requiredString(value.startedAt, \"invocation.startedAt\") }\n : {}),\n finishedAt: requiredString(value.finishedAt, \"invocation.finishedAt\"),\n error: requiredString(value.error, \"invocation.error\"),\n };\n default:\n throw new Error(\"status einer App-Ausf\u00FChrung ist ung\u00FCltig\");\n }\n};\n\nconst runAppPlacementFrom = (value: unknown): RunAppPlacement => {\n if (!isRecord(value)) throw new Error(\"Eine App-Platzierung ist kein Objekt\");\n if (value.kind === \"canvas\") {\n return {\n kind: \"canvas\",\n anchorActorId: requiredString(value.anchorActorId, \"placement.anchorActorId\"),\n };\n }\n throw new Error(\"kind einer App-Platzierung muss canvas sein\");\n};\n\nexport const runAppFrom = (value: unknown): RunApp => {\n if (!isRecord(value)) throw new Error(\"Eine App ist kein Objekt\");\n if (!Array.isArray(value.actions)) throw new Error(\"actions einer App ist keine Liste\");\n if (!Array.isArray(value.invocations)) throw new Error(\"invocations einer App ist keine Liste\");\n const rawPlacements = value.placements ?? [];\n if (!Array.isArray(rawPlacements)) throw new Error(\"placements einer App ist keine Liste\");\n if (!isRecord(value.state) || value.state.version !== 1 || !Number.isSafeInteger(value.state.revision) || !isJsonValue(value.state.values)) throw new Error(\"state einer Ansicht entspricht nicht dem Zustandvertrag\");\n const actions = unique(value.actions.map(runAppActionFrom), (action) => action.id, \"actions\");\n const invocations = unique(\n value.invocations.map(runAppInvocationFrom),\n (invocation) => invocation.id,\n \"invocations\",\n );\n const actionIds = new Set(actions.map((action) => action.id));\n if (invocations.some((invocation) => !actionIds.has(invocation.actionId))) {\n throw new Error(\"Eine App-Ausf\u00FChrung verweist auf eine unbekannte Aktion\");\n }\n if (value.visible !== undefined && typeof value.visible !== \"boolean\") throw new Error(\"visible einer App ist kein Wahrheitswert\");\n if (rawPlacements.length > 1) throw new Error(\"placements einer App enth\u00E4lt mehr als eine Platzierung\");\n const placements = rawPlacements.map(runAppPlacementFrom);\n const id = requiredString(value.id, \"view.id\");\n if (!VIEW_ID_PATTERN.test(id)) throw new Error(\"view.id ist keine g\u00FCltige Kennung\");\n const actorId = requiredString(value.actorId, \"view.actorId\");\n if (placements.some((placement) => placement.anchorActorId !== actorId)) throw new Error(\"Die Ansicht muss bei ihrem eigenen Actor platziert sein\");\n return {\n id,\n actorId,\n actorHandle: requiredString(value.actorHandle, \"view.actorHandle\"),\n visible: value.visible !== false,\n title: requiredString(value.title, \"app.title\"),\n ...(value.description !== undefined\n ? { description: optionalString(value.description, \"app.description\") as string }\n : {}),\n revision: requiredString(value.revision, \"app.revision\"),\n actions,\n placements,\n state: { version: 1, revision: value.state.revision as number, values: value.state.values },\n invocations,\n };\n};\n\nconst runToolParameterFrom = (value: unknown): RunToolParameter => {\n if (!isRecord(value)) throw new Error(\"Ein Werkzeugparameter ist kein Objekt\");\n if (typeof value.type !== \"string\" || !PARAMETER_TYPES.has(value.type as RunToolParameter[\"type\"])) {\n throw new Error(\"type eines Werkzeugparameters ist ung\u00FCltig\");\n }\n if (typeof value.required !== \"boolean\") throw new Error(\"required eines Werkzeugparameters ist kein Wahrheitswert\");\n return {\n name: idFrom(value.name, \"parameter.name\"),\n description: requiredString(value.description, \"parameter.description\"),\n type: value.type as RunToolParameter[\"type\"],\n required: value.required,\n };\n};\n\nconst runToolTargetFrom = (value: unknown): RunToolTarget => {\n if (!isRecord(value)) throw new Error(\"Ein Werkzeugziel ist kein Objekt\");\n if (value.handle !== null && typeof value.handle !== \"string\") {\n throw new Error(\"handle eines Werkzeugziels muss Text oder null sein\");\n }\n return {\n actorId: requiredString(value.actorId, \"target.actorId\"),\n handle: value.handle,\n };\n};\n\nexport const runScriptToolFrom = (value: unknown): RunScriptTool => {\n if (!isRecord(value)) throw new Error(\"Ein Script-Werkzeug ist kein Objekt\");\n if (!Array.isArray(value.parameters)) throw new Error(\"parameters eines Script-Werkzeugs ist keine Liste\");\n if (!Array.isArray(value.targets)) throw new Error(\"targets eines Script-Werkzeugs ist keine Liste\");\n const sourceHash = requiredString(value.sourceHash, \"tool.sourceHash\");\n if (!HASH_PATTERN.test(sourceHash)) throw new Error(\"sourceHash eines Script-Werkzeugs ist ung\u00FCltig\");\n return {\n actorId: requiredString(value.actorId, \"tool.actorId\"),\n actorHandle: requiredString(value.actorHandle, \"tool.actorHandle\"),\n functionId: idFrom(value.functionId, \"tool.functionId\"),\n revision: requiredString(value.revision, \"tool.revision\"),\n moduleId: idFrom(value.moduleId, \"tool.moduleId\"),\n name: idFrom(value.name, \"tool.name\"),\n description: requiredString(value.description, \"tool.description\"),\n parameters: unique(value.parameters.map(runToolParameterFrom), (parameter) => parameter.name, \"parameters\"),\n card: value.card === true,\n sourceHash,\n targets: unique(value.targets.map(runToolTargetFrom), (target) => target.actorId, \"targets\"),\n installedBy: requiredString(value.installedBy, \"tool.installedBy\"),\n };\n};\n\nconst actorProgramSourceFileFrom = (value: unknown): ActorProgramSourceFile => {\n if (!isRecord(value)) throw new Error(\"Eine Quelldatei ist kein Objekt\");\n if (typeof value.content !== \"string\") throw new Error(\"content einer Quelldatei ist kein Text\");\n return {\n path: requiredString(value.path, \"source.path\"),\n content: value.content,\n };\n};\n\nexport const actorProgramSourceFrom = (value: unknown): ActorProgramSourceFile[] => {\n if (!isRecord(value) || !Array.isArray(value.files)) throw new Error(\"Die Quellenliste entspricht nicht dem Vertrag\");\n return unique(value.files.map(actorProgramSourceFileFrom), (file) => file.path, \"files\");\n};\n\nexport const actorProgramsListingFrom = (value: unknown): ActorProgramsListing => {\n if (!isRecord(value) || !Array.isArray(value.apps) || !Array.isArray(value.tools)) {\n throw new Error(\"Die Liste der Actor-Programme entspricht nicht dem Vertrag\");\n }\n return {\n apps: unique(value.apps.map(runAppFrom), (app) => app.id, \"apps\"),\n tools: unique(value.tools.map(runScriptToolFrom), (tool) => tool.name, \"tools\"),\n };\n};\n\nconst segment = (value: string): string => encodeURIComponent(value);\n\nconst frameBase = (routePrefix: string, runId: string): string =>\n `${routePrefix}/runs/${segment(runId)}/apps`;\n\nexport const createActorProgramsApi = (routePrefix: string): ActorProgramsApi => ({\n list: async (runId, signal) =>\n actorProgramsListingFrom(await rpc.call(actorProgramContracts.apps, { runId }, { signal })),\n source: async (runId, moduleId, signal) =>\n actorProgramSourceFrom(await rpc.call(actorProgramContracts.source, { runId, moduleId }, { signal })),\n frameUrl: (runId, appId, revision) =>\n withAccessToken(`${frameBase(routePrefix, runId)}/${segment(appId)}/frame?revision=${segment(revision)}`),\n invoke: async (runId, appId, revision, actionId, requestId, input, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.action, { runId, appId, revision, actionId, requestId, input }, { signal })),\n invocation: async (runId, appId, invocationId, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.invocation, { runId, appId, invocationId }, { signal })),\n invokeFunction: async (runId, actorHandle, revision, functionId, requestId, input, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.function, { runId, actorHandle, revision, functionId, requestId, input }, { signal })),\n functionInvocation: async (runId, actorHandle, invocationId, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.functionInvocation, { runId, actorHandle, invocationId }, { signal })),\n});\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/AccessContext\", \"useAccess\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"createContext\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"createElement\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"forwardRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useCallback\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useContext\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useLayoutEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useMemo\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useState\");\n", "/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string?.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n", "import { toKebabCase } from './toKebabCase';\nimport type { LucideIconData, LucideIconNode } from '../build/types';\n\n/**\n * Converts legacy `(name, iconNode, aliases?)` icon arguments into icon data object format.\n */\nexport function toLucideIconData(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases: string[] = [],\n): LucideIconData {\n if (iconNode == null) {\n throw new Error('[lucide]: iconNode is required when icon name is used');\n }\n\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...(aliases.length > 0 ? { aliases } : {}),\n };\n}\n", "/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) => {\n let out = '';\n let upperNext = false;\n\n for (const ch of string) {\n if (ch === '-' || ch === '_' || ch <= ' ') {\n upperNext = out.length > 0;\n continue;\n }\n\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n\n upperNext = false;\n }\n\n return out as string;\n};\n", "import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n", "/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n", "const defaultAttributes = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n} as const;\n\nexport default defaultAttributes;\n", "import type { LucideBuildParams, LucideIconData, LucideIconNode, SVGProps } from './types';\nimport defaultAttributes from './defaultAttributes';\nimport { mergeClasses } from '../utils/mergeClasses';\n\nfunction isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Creates a Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconNode(icon: LucideIconData, params: LucideBuildParams = {}): LucideIconNode {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName: string) =>\n attributeNames[attributeName] ?? attributeName;\n\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes['width'];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes['height'];\n const aliasClassNames =\n icon.aliases\n ?.filter((alias: string): alias is string => typeof alias === 'string' && alias.trim() !== '')\n .map((alias: string) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...(icon.name ? [`lucide-${icon.name}`] : []), ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(' ').filter(Boolean) ?? [];\n const className =\n params.includeDefaultClasses === false\n ? mergeClasses(...classNamesFromClassName)\n : mergeClasses('lucide', ...iconClassNames, ...classNamesFromClassName);\n\n const calculatedStrokeWidth = params.absoluteStrokeWidth\n ? (Number(params.strokeWidth ?? defaultAttributes['stroke-width']) *\n Number(icon.size ?? icon.width ?? defaultAttributes['width'])) /\n Number(params.size ?? params.width ?? defaultAttributes['width'])\n : (params.strokeWidth ?? defaultAttributes['stroke-width']);\n\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {} as SVGProps),\n ...('color' in params &&\n params.color && {\n [getAttributeName('stroke')]: params.color,\n }),\n ...('size' in params &&\n isDefined(params.size) && {\n [getAttributeName('width')]: params.size,\n [getAttributeName('height')]: params.size,\n }),\n ...('width' in params &&\n isDefined(params.width) && {\n [getAttributeName('width')]: params.width,\n }),\n ...('height' in params &&\n isDefined(params.height) && {\n [getAttributeName('height')]: params.height,\n }),\n [getAttributeName('stroke-width')]: calculatedStrokeWidth,\n ...(className && {\n [getAttributeName('class')]: className,\n }),\n [getAttributeName('viewBox')]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...(params.hasA11yProp === false\n ? {\n [getAttributeName('aria-hidden')]: 'true',\n }\n : {}),\n ...('attributes' in params && params.attributes),\n };\n\n return [\n 'svg',\n attributes,\n icon.node.map((child): LucideIconNode => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke\n ? { [getAttributeName('vector-effect')]: 'non-scaling-stroke', ...attrs }\n : attrs;\n\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n }),\n ];\n}\n\nexport default buildLucideIconNode;\n", "import buildLucideIconNode from './buildLucideIconNode';\nimport type { LucideBuildParams, LucideIconData, LucideIconNode } from './types';\n\n/**\n * Creates a React-compatible Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconForReact(\n icon: LucideIconData,\n params: LucideBuildParams = {},\n): LucideIconNode {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: 'className',\n 'stroke-width': 'strokeWidth',\n 'stroke-linecap': 'strokeLinecap',\n 'stroke-linejoin': 'strokeLinejoin',\n 'vector-effect': 'vectorEffect',\n },\n });\n}\n\nexport default buildLucideIconForReact;\n", "/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: object) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n", "'use client';\n\nimport { createContext, createElement, type ReactNode, useContext, useMemo } from 'react';\nimport { LucideProps } from './types';\n\ntype LucideConfig = {\n size: number;\n color: string;\n strokeWidth: number;\n /**\n * @deprecated Use `nonScalingStroke` instead.\n */\n absoluteStrokeWidth: boolean;\n nonScalingStroke: boolean;\n className: string;\n};\n\nconst LucideContext = createContext<LucideProps>({});\n\ntype LucideProviderProps = {\n children: ReactNode;\n} & Partial<LucideConfig>;\n\nexport function LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n}: LucideProviderProps) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className],\n );\n\n return createElement(LucideContext.Provider, { value }, children);\n}\n\nexport const useLucideContext = () => useContext(LucideContext);\n", "'use client';\n\nimport { createElement, forwardRef } from 'react';\nimport { buildLucideIconForReact, hasA11yProp, mergeClasses } from '@lucide/shared';\nimport { LucideIconData, LucideIconNode, LucideProps } from './types';\nimport { useLucideContext } from './context';\n\ntype IconComponentProps = LucideProps &\n (\n | {\n iconNode: LucideIconNode[];\n icon?: never;\n }\n | {\n icon: LucideIconData;\n iconNode?: never;\n }\n );\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {boolean} props.nonScalingStroke - Whether to use non scaling strokes\n * @param {string} props.className - The class name of the icon\n * @param {LucideIconNode[]} props.children - The children of the icon\n * @param {LucideIconNode[]} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = '',\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24,\n },\n ...rest\n },\n ref,\n ) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = 'currentColor',\n className: contextClass = '',\n } = useLucideContext() ?? {};\n\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest,\n });\n\n return createElement(\n name,\n {\n ref,\n ...svgAttributes,\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n", "import { createElement, forwardRef } from 'react';\nimport { toLucideIconData, toPascalCase } from '@lucide/shared';\nimport { LucideIcon, LucideIconData, LucideIconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Creates a Lucide icon component from icon data.\n *\n * @param icon Icon data object.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(icon: LucideIconData): LucideIcon;\n\n/**\n * Creates a Lucide icon component from the legacy icon arguments.\n *\n * @param iconName Icon name.\n * @param iconNode Icon node.\n * @param aliases Optional icon aliases.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases?: string[],\n): LucideIcon;\n\nfunction createLucideIcon(\n iconDataOrName: LucideIconData | string,\n iconNode: LucideIconNode[] = [],\n aliases: string[] = [],\n): LucideIcon {\n const iconData =\n typeof iconDataOrName === 'string'\n ? toLucideIconData(iconDataOrName, iconNode, aliases)\n : iconDataOrName;\n\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props,\n }),\n );\n\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n\n return Component;\n}\n\nexport default createLucideIcon;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-left',\n size: 24,\n node: [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTIgMTktNy03IDctNyIgLz4KICA8cGF0aCBkPSJNMTkgMTJINSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon(__iconData);\n\nexport default ArrowLeft;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'layout-grid',\n size: 24,\n node: [\n ['rect', { width: '7', height: '7', x: '3', y: '3', rx: '1', key: '1g98yp' }],\n ['rect', { width: '7', height: '7', x: '14', y: '3', rx: '1', key: '6d4xhi' }],\n ['rect', { width: '7', height: '7', x: '14', y: '14', rx: '1', key: 'nxv5o0' }],\n ['rect', { width: '7', height: '7', x: '3', y: '14', rx: '1', key: '1bb6yr' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name LayoutGrid\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIzIiB5PSIzIiByeD0iMSIgLz4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIxNCIgeT0iMyIgcng9IjEiIC8+CiAgPHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iNyIgeD0iMTQiIHk9IjE0IiByeD0iMSIgLz4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIzIiB5PSIxNCIgcng9IjEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/layout-grid\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LayoutGrid = createLucideIcon(__iconData);\n\nexport default LayoutGrid;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'x',\n size: 24,\n node: [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon(__iconData);\n\nexport default X;\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Alert\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Badge\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Button\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Dialog\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Empty\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyDescription\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyHeader\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyMedia\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Input\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Spinner\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Textarea\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"cn\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarCopy\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarText\");\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { ArrowLeftIcon, LayoutGridIcon } from \"lucide-react\";\nimport { Alert, Badge, Button, cn, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Spinner } from \"@ragents/web/ui\";\nimport { ToolbarCopy, ToolbarItem, ToolbarLabel, ToolbarText } from \"@ragents/web/Toolbar\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type PropsWithChildren,\n} from \"react\";\nimport { askPayloadOf, ASK_PLUGIN_ID } from \"@ragents/plugins/ragents.ask/ask-payload\";\nimport { answerQuestion } from \"@ragents/plugins/ragents.ask/web/api\";\nimport { QuestionCard } from \"@ragents/plugins/ragents.ask/web/QuestionCard\";\nimport { ACTOR_PROGRAMS_STATE_ID } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport {\n useSurfaceController,\n type SessionContext,\n type SessionHeaderContext,\n type WorkspaceTabContext,\n} from \"@ragents/web/PluginRegistry\";\nimport { runViewFrom, type RunAction } from \"@ragents/web/run-view\";\nimport { useSurfaceEntities } from \"@ragents/plugins/ragents.orchestration/web/surface-entities\";\nimport { SURFACE_TILE_DRAG_TYPE } from \"@ragents/plugins/ragents.orchestration/web/tile-docking\";\nimport { ProgramSlotContext, type ProgramSlot } from \"@ragents/plugins/ragents.orchestration/web/program-slot\";\nimport {\n type RunApp,\n type RunAppInvocation,\n type ActorProgramsApi,\n type ActorProgramsListing,\n type RunScriptTool,\n} from \"./api\";\nimport type { JsonValue } from \"./bridge\";\nimport { actorProgramSourceView, ProgramSource } from \"./ProgramSource\";\nimport { FunctionForm } from \"./FunctionForm\";\nimport { ExpandIcon } from \"./ExpandIcon\";\nimport { actorProgramsRevision } from \"./state-revision\";\nimport { actorProgramViews, currentActorListing } from \"./program-state\";\nimport { activeActorInvocations, readActorInvocation } from \"./invocations\";\nimport { ActorProgramsContext, useActorPrograms, type ActorProgramsContextValue } from \"./context\";\n\nexport { useActorPrograms, type ActorProgramsContextValue } from \"./context\";\n\nexport const RUN_TOOLS_TAB_ID = \"ragents.actor-programs.tools\";\n\nconst entryIconClass = \"flex size-[34px] items-center justify-center rounded-[10px] bg-[color-mix(in_srgb,var(--primary)_12%,var(--background))] text-primary\";\nconst headClass = \"grid flex-none grid-cols-[auto_minmax(0,1fr)] items-center gap-2.5 border-b border-border-soft px-workspace-inset py-[9px]\";\nconst sectionLabelClass = \"mb-2 text-[0.66rem] tracking-[0.075em] text-muted-foreground uppercase\";\nconst quickIconClass = \"grid size-[30px] flex-none place-items-center rounded-lg border border-info/25 bg-glass-app text-info\";\n\nconst ACTIVE_STATUSES = new Set([\"queued\", \"running\"]);\nconst POLL_INTERVAL = 700;\n\nconst replaceInvocation = (\n listing: ActorProgramsListing | undefined,\n invocation: RunAppInvocation,\n): ActorProgramsListing | undefined => listing && ({\n ...listing,\n apps: listing.apps.map((app) => {\n if (app.actorId !== invocation.actorId || app.revision !== invocation.revision) return app;\n const exists = app.invocations.some((entry) => entry.id === invocation.id);\n return {\n ...app,\n invocations: exists\n ? app.invocations.map((entry) => entry.id === invocation.id ? invocation : entry)\n : [...app.invocations, invocation],\n };\n }),\n});\n\nexport function ActorProgramsProvider({\n api,\n children,\n session,\n}: PropsWithChildren<{ api: ActorProgramsApi; session: SessionContext }>) {\n const runId = session.session.id;\n const canInspect = useAccess().can(\"runs.inspect\");\n const [storedListing, setListing] = useState<ActorProgramsListing>();\n const listing = useMemo(() => currentActorListing(storedListing, session.runView), [storedListing, session.runView]);\n const [error, setError] = useState<string>();\n const [fullscreen, setFullscreen] = useState<{ runId: string; appId: string }>();\n const visibleApps = actorProgramApps(session).filter((app) => app.app.visible !== false);\n const fullscreenAppId = fullscreen?.runId === runId && visibleApps.some((app) => app.id === fullscreen.appId)\n ? fullscreen.appId : undefined;\n const closeFullscreen = useCallback(() => setFullscreen(undefined), []);\n const openFullscreen = useCallback((appId: string) => {\n if (!actorProgramApps(session).some((app) => app.id === appId && app.app.visible !== false)) {\n throw new Error(\"Die Actor-Ansicht ist nicht auf der Fl\u00E4che verf\u00FCgbar.\");\n }\n setFullscreen({ runId, appId });\n }, [runId, session]);\n useEffect(() => { if (fullscreen && !fullscreenAppId) setFullscreen(undefined); }, [fullscreen, fullscreenAppId]);\n const loadRevision = useRef(0);\n\n const refresh = useCallback(async () => {\n const revision = ++loadRevision.current;\n try {\n const next = await api.list(runId);\n if (revision !== loadRevision.current) return;\n setListing(next);\n setError(undefined);\n } catch (caught) {\n if (revision !== loadRevision.current) return;\n setError(caught instanceof Error ? caught.message : String(caught));\n }\n }, [api, runId]);\n\n const moduleRevision = useMemo(() => actorProgramsRevision(session.runView), [session.runView]);\n useEffect(() => {\n setListing(undefined);\n setError(undefined);\n return () => { loadRevision.current += 1; };\n }, [runId]);\n useEffect(() => { void refresh(); }, [moduleRevision, refresh]);\n\n const activeInvocations = useMemo(() => activeActorInvocations(listing?.apps ?? [], canInspect), [canInspect, listing]);\n const activeKey = activeInvocations.length > 0 ? JSON.stringify(activeInvocations) : \"\";\n\n useEffect(() => {\n if (!activeKey) return;\n const targets = activeInvocations;\n let disposed = false;\n let timer: number | undefined;\n let controller: AbortController | undefined;\n\n const poll = async () => {\n controller = new AbortController();\n const results = await Promise.allSettled(targets.map(async (target) => ({\n target,\n invocation: await readActorInvocation(api, runId, target, controller?.signal),\n })));\n if (disposed) return;\n const updates = results.flatMap((result) => result.status === \"fulfilled\" ? [result.value] : []);\n if (updates.length > 0) {\n setListing((current) => updates.reduce((next, update) => replaceInvocation(next, update.invocation), current));\n setError(undefined);\n }\n const failed = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\n if (failed) setError(failed.reason instanceof Error ? failed.reason.message : String(failed.reason));\n const finished = updates.some((update) => !ACTIVE_STATUSES.has(update.invocation.status));\n if (finished) {\n await refresh();\n } else if (!disposed) {\n timer = window.setTimeout(() => void poll(), POLL_INTERVAL);\n }\n };\n\n timer = window.setTimeout(() => void poll(), 250);\n return () => {\n disposed = true;\n if (timer !== undefined) window.clearTimeout(timer);\n controller?.abort();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- activeKey encodes activeInvocations; the poll uses the captured targets\n }, [activeKey, api, refresh, runId]);\n\n const invoke = useCallback(async (\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n ) => {\n loadRevision.current += 1;\n const invocation = await api.invoke(runId, appId, revision, actionId, requestId, input);\n loadRevision.current += 1;\n setListing((current) => replaceInvocation(current, invocation));\n return invocation;\n }, [api, runId]);\n\n const value = useMemo<ActorProgramsContextValue>(() => ({\n api,\n error,\n fullscreenAppId,\n invoke,\n listing,\n openFullscreen,\n closeFullscreen,\n refresh,\n runId,\n }), [api, error, fullscreenAppId, invoke, listing, openFullscreen, closeFullscreen, refresh, runId]);\n const slot = useMemo<ProgramSlot>(() => ({\n runId,\n needsAnswer: (session, appId) => {\n const app = listing?.apps.find((candidate) => candidate.id === appId);\n return app !== undefined && pendingConfirmationFor(session, app) !== undefined;\n },\n openFullscreen,\n source: (view, actorId) => actorProgramSourceView(api, view, actorId),\n }), [api, listing, openFullscreen, runId]);\n return <ActorProgramsContext.Provider value={value}>\n <ProgramSlotContext.Provider value={slot}>{children}</ProgramSlotContext.Provider>\n </ActorProgramsContext.Provider>;\n}\n\nexport const actorProgramApps = (session: SessionContext) => actorProgramViews(session.runView);\n\nexport const pendingConfirmationFor = (\n session: SessionContext,\n app: Pick<RunApp, \"invocations\">,\n): RunAction | undefined => {\n const view = runViewFrom(session.runView);\n if (!view) return undefined;\n const invocationIds = new Set(app.invocations\n .filter((invocation) => ACTIVE_STATUSES.has(invocation.status))\n .map((invocation) => invocation.id));\n return view.actions.find((action) => action.owner === ASK_PLUGIN_ID\n && action.status === \"pending\"\n && action.askedBy === view.ownerId\n && action.parameters.source === ACTOR_PROGRAMS_STATE_ID\n && invocationIds.has(action.parameters.invocationId));\n};\n\nexport function HostConfirmation({ action, session }: { action: RunAction; session: SessionContext }) {\n const access = useAccess();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string>();\n\n const answer = async (text: string) => {\n if (busy) return;\n setBusy(true);\n setError(undefined);\n try {\n await answerQuestion(session.session.id, action.id, text);\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : String(caught));\n setBusy(false);\n }\n };\n\n return (\n <section aria-label=\"Host-Best\u00E4tigung\" className=\"grid flex-none gap-2 border-b border-border-soft bg-warning-soft px-workspace-inset py-2.5\" data-slot=\"host-confirmation\">\n <header className=\"grid gap-0.5\">\n <strong className=\"text-[0.72rem] text-foreground\">Best\u00E4tigung im Host</strong>\n <span className=\"text-xs text-muted-foreground\">Die App kann diese Entscheidung nicht selbst beantworten.</span>\n </header>\n {busy\n ? <p className=\"text-xs text-muted-foreground\">Antwort wird verarbeitet</p>\n : (\n <QuestionCard\n onAnswer={access.can(\"runs.write\") ? (text: string) => void answer(text) : undefined}\n question={askPayloadOf(action.payload) ?? { question: action.title, options: [], multi: false }}\n text={action.title}\n />\n )}\n {error && <p className=\"text-xs text-destructive\" role=\"alert\">{error}</p>}\n </section>\n );\n}\n\nconst targetLabel = (target: RunScriptTool[\"targets\"][number]): string =>\n target.handle ? `@${target.handle}` : target.actorId;\n\nexport function ToolsPanel({ active, navigation, selection, session }: WorkspaceTabContext) {\n const { api, error, listing, refresh, runId } = useActorPrograms();\n const selectedName = typeof selection === \"string\" ? selection : undefined;\n const selected = listing?.tools.find((tool) => tool.name === selectedName);\n\n if (!listing && !error) {\n return (\n <div className=\"flex h-full items-center justify-center gap-2.5 text-sm text-muted-foreground\">\n <Spinner aria-hidden aria-label={undefined} role={undefined} />\n <span>Funktionen werden geladen</span>\n </div>\n );\n }\n if (!listing) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyMedia><IconTools /></EmptyMedia>\n <EmptyTitle>Funktionen konnten nicht geladen werden</EmptyTitle>\n <EmptyDescription>{error}</EmptyDescription>\n </EmptyHeader>\n <EmptyContent>\n <Button onClick={() => void refresh()} variant=\"outline\">Erneut versuchen</Button>\n </EmptyContent>\n </Empty>\n );\n }\n if (selectedName && !selected) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyMedia><IconTools /></EmptyMedia>\n <EmptyTitle>Funktion nicht mehr verf\u00FCgbar</EmptyTitle>\n <EmptyDescription>Das ausgew\u00E4hlte Actor-Funktion ist in diesem Run nicht mehr installiert.</EmptyDescription>\n </EmptyHeader>\n <EmptyContent>\n <Button onClick={() => navigation.openTab(RUN_TOOLS_TAB_ID, null)} variant=\"outline\">\n Zur \u00DCbersicht\n </Button>\n </EmptyContent>\n </Empty>\n );\n }\n if (selected) {\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <header className={headClass}>\n <Button aria-label=\"Zur\u00FCck zur Funktions\u00FCbersicht\" onClick={() => navigation.openTab(RUN_TOOLS_TAB_ID, null)} size=\"icon-sm\" title=\"Zur\u00FCck zur Funktions\u00FCbersicht\" variant=\"outline\">\n <ArrowLeftIcon />\n </Button>\n <span className=\"grid min-w-0 gap-px\">\n <strong className=\"truncate text-[0.82rem] font-semibold\" title={selected.name}>{selected.name}</strong>\n <small className=\"truncate text-xs text-muted-foreground\">Funktion von @{selected.actorHandle}</small>\n </span>\n </header>\n <div className=\"flex min-h-0 flex-col gap-[22px] overflow-y-auto px-workspace-inset pt-[18px] pb-7\">\n <div className=\"grid grid-cols-[42px_minmax(0,1fr)] items-start gap-3\">\n <span className={cn(entryIconClass, \"size-[42px] bg-accent\")}><IconTools size={22} /></span>\n <div>\n <h2 className=\"text-[1.05rem] text-foreground\">{selected.name}</h2>\n <p className=\"mt-1 text-[0.74rem] leading-[1.45] text-muted-foreground\">{selected.description}</p>\n </div>\n </div>\n <section>\n <h3 className={sectionLabelClass}>Verf\u00FCgbar f\u00FCr</h3>\n <div className=\"flex flex-wrap gap-1.5\">\n {selected.targets.map((target) => <span className=\"rounded-full bg-primary/9 px-2 py-1 text-xs text-foreground\" key={target.actorId}>{targetLabel(target)}</span>)}\n </div>\n </section>\n <section>\n <h3 className={sectionLabelClass}>Parameter</h3>\n {active && <FunctionForm detail key={`${runId}:${selected.actorId}:${selected.functionId}:${selected.revision}`} session={session} tool={selected} />}\n </section>\n <ProgramSource api={api} moduleId={selected.moduleId} revision={selected.revision} runId={runId} />\n <dl className=\"grid grid-cols-2 gap-2\">\n {[{ label: \"Programm\", value: selected.moduleId, title: undefined },\n { label: \"Quellhash\", value: selected.sourceHash.slice(0, 12), title: selected.sourceHash }].map((fact) => (\n <div className=\"grid gap-[3px] rounded-lg bg-foreground/4 px-2.5 py-2\" key={fact.label}>\n <dt className=\"text-[0.61rem] text-muted-foreground uppercase\">{fact.label}</dt>\n <dd className=\"truncate font-mono text-xs text-foreground\" title={fact.title}>{fact.value}</dd>\n </div>\n ))}\n </dl>\n </div>\n </div>\n );\n }\n if (listing.tools.length === 0) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyMedia><IconTools /></EmptyMedia>\n <EmptyTitle>Noch keine Funktionen</EmptyTitle>\n <EmptyDescription>Von Agenten erstellte Actor-Funktionen dieses Runs erscheinen hier.</EmptyDescription>\n </EmptyHeader>\n </Empty>\n );\n }\n\n return (\n <div className=\"@container flex h-full min-h-0 flex-col gap-2 overflow-y-auto px-workspace-inset pt-3 pb-5 [scrollbar-width:thin]\">\n {error && <Alert className=\"mb-1\" role=\"status\" variant=\"destructive\">{error}</Alert>}\n {listing.tools.map((tool) => (\n <button\n className=\"grid w-full cursor-pointer grid-cols-[34px_minmax(0,1fr)_auto_14px] items-center gap-2.5 rounded-lg border border-border bg-card px-[11px] py-2.5 text-left text-foreground transition-[background-color,border-color] hover:border-[color-mix(in_srgb,var(--primary)_52%,var(--border))] hover:bg-[color-mix(in_srgb,var(--primary)_7%,var(--card))] focus-visible:border-[color-mix(in_srgb,var(--primary)_52%,var(--border))] focus-visible:bg-[color-mix(in_srgb,var(--primary)_7%,var(--card))] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary/52 @max-[470px]:grid-cols-[34px_minmax(0,1fr)_14px]\"\n key={tool.name}\n onClick={() => navigation.openTab(RUN_TOOLS_TAB_ID, tool.name)}\n type=\"button\"\n >\n <span className={entryIconClass}><IconTools size={20} /></span>\n <span className=\"grid min-w-0 gap-0.5\">\n <strong className=\"truncate text-[0.8rem] font-semibold\">{tool.name}</strong>\n <small className=\"truncate text-[0.69rem] text-muted-foreground\">{tool.description}</small>\n </span>\n <Badge className=\"max-w-[132px] truncate @max-[470px]:hidden\" variant=\"secondary\">\n {tool.targets.length} {tool.targets.length === 1 ? \"Agent\" : \"Agenten\"}\n </Badge>\n <IconOpen />\n </button>\n ))}\n </div>\n );\n}\n\n/** Ein Klick auf eine Mini-App w\u00E4hlt ihre Kachel auf der Fl\u00E4che; die Fl\u00E4che ist der Fl\u00E4chen-Controller des Orchestrierungs-Plugins. */\nexport function ActorProgramsHeader({ session }: SessionHeaderContext) {\n const canArrange = useAccess().can(\"runs.inspect\");\n const surface = useSurfaceController();\n const stage = useSurfaceEntities(session.session.id);\n const { closeFullscreen, fullscreenAppId, openFullscreen } = useActorPrograms();\n const apps = actorProgramApps(session).filter((app) => app.app.visible !== false);\n if (apps.length === 0) return null;\n\n return (\n <nav aria-label=\"Actor-Ansichten\" className=\"flex min-w-0 flex-none items-stretch\">\n {apps.map((app) => (\n <div role=\"group\" aria-label={app.title} key={`app:${app.id}`}\n className={cn(\"relative flex flex-none items-stretch border-r border-border hover:bg-accent focus-within:bg-accent\",\n fullscreenAppId === app.id && \"bg-primary/12 after:pointer-events-none after:absolute after:inset-x-0 after:bottom-0 after:h-[3px] after:bg-primary after:content-['']\")}>\n <ToolbarItem\n as=\"button\"\n className=\"max-w-[214px] border-r-0 font-bold hover:not-disabled:bg-transparent\"\n draggable={canArrange}\n onDragStart={(event) => {\n if (!canArrange) { event.preventDefault(); return; }\n event.dataTransfer.setData(SURFACE_TILE_DRAG_TYPE, `app:${app.id}`);\n event.dataTransfer.effectAllowed = \"move\";\n closeFullscreen();\n }}\n onClick={() => {\n if (!surface) throw new Error(\"Die App-Zug\u00E4nge brauchen den Fl\u00E4chen-Controller des Orchestrierungs-Plugins.\");\n closeFullscreen();\n surface.acceptSelection({ type: \"run-app\", id: app.id });\n }}\n aria-label={`Mini-App: ${app.title} von @${app.actorHandle}`}\n title={`Mini-App: ${app.title} von @${app.actorHandle}${canArrange ? \". Zum Andocken auf eine Kachel ziehen.\" : \"\"}`}\n type=\"button\"\n >\n <span className={cn(quickIconClass, !stage.has(`app:${app.id}`) && \"bg-transparent\")}><LayoutGridIcon size={20} /></span>\n <ToolbarCopy><ToolbarLabel>@{app.actorHandle}</ToolbarLabel><ToolbarText>{app.title}</ToolbarText></ToolbarCopy>\n </ToolbarItem>\n <ToolbarItem as=\"button\" aria-expanded={fullscreenAppId === app.id} aria-label={`${app.title} ${fullscreenAppId === app.id ? \"Vollansicht schlie\u00DFen\" : \"in Vollansicht \u00F6ffnen\"}`}\n title={`${app.title} ${fullscreenAppId === app.id ? \"Vollansicht schlie\u00DFen\" : \"in Vollansicht \u00F6ffnen\"}`}\n className=\"relative w-[38px] justify-center border-r-0 p-0 hover:not-disabled:bg-transparent before:pointer-events-none before:absolute before:top-1/4 before:bottom-1/4 before:left-0 before:border-l before:border-dashed before:border-border-strong before:content-['']\"\n onClick={() => fullscreenAppId === app.id ? closeFullscreen() : openFullscreen(app.id)} type=\"button\">\n <ExpandIcon />\n </ToolbarItem>\n </div>\n ))}\n </nav>\n );\n}\n\nexport function ToolsBadge() {\n const { listing } = useActorPrograms();\n return listing && listing.tools.length > 0\n ? <Badge variant=\"secondary\">{listing.tools.length}</Badge>\n : null;\n}\n\nfunction IconTools({ size = 28 }: { size?: number }) {\n return (\n <svg aria-hidden fill=\"none\" height={size} stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.6\" viewBox=\"0 0 24 24\" width={size}>\n <path d=\"M14.5 6.5 17.5 3.5l3 3-3 3\" />\n <path d=\"m9.5 17.5-3 3-3-3 3-3\" />\n <path d=\"M13 5H9a4 4 0 0 0-4 4v5.5M11 19h4a4 4 0 0 0 4-4V9.5\" />\n </svg>\n );\n}\n\nfunction IconOpen() {\n return (\n <svg aria-hidden fill=\"none\" height=\"14\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.8\" viewBox=\"0 0 24 24\" width=\"14\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runActorFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runViewFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/SourceCode\", \"SourceCode\");\n", "import { ACTOR_PROGRAMS_STATE_ID, ACTOR_STATE_ID } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport { isRecord } from \"@ragents/web/lib/guards\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport type { ActorProgramsListing } from \"./api\";\nimport { isJsonValue } from \"./bridge\";\n\nexport interface ActorProgramView {\n id: string;\n title: string;\n actorId: string;\n actorHandle: string;\n revision: string;\n app: Record<string, unknown>;\n}\n\nexport const actorProgramSourceReference = (runView: unknown, actorId: string): { name: string; revision: string } | undefined => {\n const view = runViewFrom(runView);\n const entry = view?.pluginStates.find((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID\n && entry.scope.kind === \"actor\" && entry.scope.actorId === actorId);\n if (!entry || !isRecord(entry.state) || entry.state.program === null) return undefined;\n const program = entry.state.program;\n if (!isRecord(program) || program.actorId !== actorId || typeof program.name !== \"string\" || typeof program.revision !== \"string\") {\n throw new Error(\"Die Quellcode-Zuordnung des Actor-Programms ist ung\u00FCltig.\");\n }\n return { name: program.name, revision: program.revision };\n};\n\nexport const actorProgramViews = (runView: unknown): ActorProgramView[] => {\n const view = runViewFrom(runView);\n if (!view) return [];\n return view.pluginStates.flatMap((entry): ActorProgramView[] => {\n if (entry.pluginId !== ACTOR_PROGRAMS_STATE_ID || entry.scope.kind !== \"actor\") return [];\n const actorId = entry.scope.actorId;\n const actor = view.actors.find((actor) => actor.id === actorId);\n if (!actor || actor.kind === \"human\" || actor.lifecycle?.kind === \"stopped\") return [];\n if (!isRecord(entry.state) || !isRecord(entry.state.program)) return [];\n const program = entry.state.program;\n if (program.actorId !== actor.id || program.actorHandle !== actor.handle || typeof program.revision !== \"string\" || !Array.isArray(program.views)) {\n throw new Error(`Das Ansichtsprogramm von @${actor.handle} ist ung\u00FCltig.`);\n }\n return program.views.map((app) => {\n if (!isRecord(app) || typeof app.id !== \"string\" || typeof app.title !== \"string\") throw new Error(`Eine Ansicht von @${actor.handle} ist ung\u00FCltig.`);\n return { id: app.id, title: app.title, actorId: actor.id, actorHandle: actor.handle, revision: program.revision as string, app };\n });\n });\n};\n\nexport const currentActorListing = (listing: ActorProgramsListing | undefined, runView: unknown): ActorProgramsListing | undefined => {\n const view = runViewFrom(runView);\n if (!listing || !view) return undefined;\n const currentViews = new Map(actorProgramViews(view).map((entry) => [entry.id, entry]));\n const activeActors = new Set(view.actors.filter((actor) => actor.kind !== \"human\" && actor.lifecycle?.kind !== \"stopped\").map((actor) => actor.id));\n return {\n ...listing,\n apps: listing.apps.flatMap((app) => {\n const current = currentViews.get(app.id);\n if (!current || current.actorId !== app.actorId || current.revision !== app.revision) return [];\n const state = view.pluginStates.find((entry) => entry.pluginId === ACTOR_STATE_ID && entry.scope.kind === \"actor\" && entry.scope.actorId === app.actorId);\n const values = state ? state.state : app.state.values;\n if (!isJsonValue(values)) throw new Error(`Der Zustand von @${app.actorHandle} ist kein JSON-Wert.`);\n return [{ ...app, visible: current.app.visible !== false,\n state: { ...app.state, values } }];\n }),\n tools: listing.tools.filter((tool) => activeActors.has(tool.actorId) && view.pluginStates.some((entry) =>\n entry.pluginId === ACTOR_PROGRAMS_STATE_ID && entry.scope.kind === \"actor\" && entry.scope.actorId === tool.actorId\n && isRecord(entry.state) && isRecord(entry.state.program) && entry.state.program.revision === tool.revision)),\n };\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"Fragment\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsxs\");\n", "import { useEffect, useState, type ReactNode } from \"react\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\nimport { Alert, Button, cn, Spinner } from \"@ragents/web/ui\";\nimport type { RunView } from \"@ragents/web/run-view\";\nimport type { ActorProgramSourceFile, ActorProgramsApi } from \"./api\";\nimport { actorProgramSourceReference } from \"./program-state\";\n\ntype SourceState =\n | { kind: \"loading\" }\n | { kind: \"ready\"; files: ActorProgramSourceFile[] }\n | { kind: \"error\"; message: string };\n\nexport function ProgramSource({ api, moduleId, runId, revision, expandedByDefault = false }: {\n api: ActorProgramsApi;\n moduleId: string;\n runId: string;\n revision?: string;\n expandedByDefault?: boolean;\n}) {\n const [expanded, setExpanded] = useState(expandedByDefault);\n const [state, setState] = useState<SourceState>({ kind: \"loading\" });\n const [activePath, setActivePath] = useState<string>();\n\n useEffect(() => {\n if (!expanded) return undefined;\n const controller = new AbortController();\n setState({ kind: \"loading\" });\n api.source(runId, moduleId, controller.signal).then(\n (files) => {\n if (controller.signal.aborted) return;\n setState({ kind: \"ready\", files });\n setActivePath(files.find((file) => file.path === \"src/server.ts\")?.path ?? files.find((file) => /\\.tsx?$/.test(file.path))?.path ?? files[0]?.path);\n },\n (caught: unknown) => {\n if (controller.signal.aborted) return;\n setState({ kind: \"error\", message: caught instanceof Error ? caught.message : String(caught) });\n },\n );\n return () => controller.abort();\n }, [api, expanded, moduleId, runId, revision]);\n\n const active = state.kind === \"ready\"\n ? state.files.find((file) => file.path === activePath) ?? state.files[0]\n : undefined;\n\n return (\n <section className=\"grid w-full min-w-0 grid-cols-[minmax(0,1fr)] justify-items-start gap-2\">\n <h3 className=\"text-xs font-semibold text-muted-foreground\">Quellcode</h3>\n {!expanded && (\n <Button onClick={() => setExpanded(true)} size=\"sm\" variant=\"outline\">Quellcode anzeigen</Button>\n )}\n {expanded && (\n <>\n <p className=\"text-[0.67rem] text-muted-foreground\">Quelle des installierten Builds</p>\n {state.kind === \"loading\" && (\n <p className=\"flex items-center gap-2 text-[0.72rem] text-muted-foreground\">\n <Spinner aria-hidden aria-label={undefined} role={undefined} />\n <span>Quellcode wird geladen</span>\n </p>\n )}\n {state.kind === \"error\" && <Alert className=\"w-full\" variant=\"destructive\">{state.message}</Alert>}\n {state.kind === \"ready\" && (\n <div className=\"flex flex-wrap gap-1.5\">\n {state.files.map((file) => (\n <button\n className={cn(\"max-w-full cursor-pointer rounded-lg border border-border-soft bg-background/70 px-[9px] py-1 text-left font-mono text-[0.66rem] text-muted-foreground [overflow-wrap:anywhere]\",\n file.path === active?.path && \"border-[color-mix(in_srgb,var(--primary)_48%,var(--border))] bg-primary/9 text-foreground\")}\n key={file.path}\n onClick={() => setActivePath(file.path)}\n type=\"button\"\n >\n {file.path}\n </button>\n ))}\n </div>\n )}\n {active && <SourceCode className=\"h-full max-h-[340px] w-full min-h-0 min-w-0 overflow-auto rounded-lg border border-border-soft bg-background/70\" content={active.content} path={active.path} />}\n {!expandedByDefault && <Button onClick={() => setExpanded(false)} size=\"sm\" variant=\"outline\">Quellcode ausblenden</Button>}\n </>\n )}\n </section>\n );\n}\n\n/** The installed source of the actor's program, or nothing if the actor runs none. */\nexport const actorProgramSourceView = (api: ActorProgramsApi, view: RunView, actorId: string): ReactNode => {\n const program = actorProgramSourceReference(view, actorId);\n return program && <ProgramSource api={api} expandedByDefault key={`${view.id}:${actorId}:${program.revision}`}\n moduleId={program.name} revision={program.revision} runId={view.id} />;\n};\n", "import type { RunAppInvocation, ActorProgramsApi, RunScriptTool } from \"./api\";\nimport type { JsonValue } from \"./bridge\";\n\nconst waitForPoll = (signal: AbortSignal): Promise<void> => new Promise((resolve, reject) => {\n signal.throwIfAborted();\n const finish = (): void => { signal.removeEventListener(\"abort\", abort); resolve(); };\n const timer = setTimeout(finish, 350);\n const abort = (): void => { clearTimeout(timer); reject(signal.reason); };\n signal.addEventListener(\"abort\", abort, { once: true });\n});\n\nexport const invokeActorFunction = async (\n api: ActorProgramsApi,\n runId: string,\n tool: Pick<RunScriptTool, \"actorHandle\" | \"functionId\" | \"revision\">,\n input: JsonValue,\n signal: AbortSignal,\n changed: (invocation: RunAppInvocation) => void,\n): Promise<RunAppInvocation> => {\n let invocation = await api.invokeFunction(runId, tool.actorHandle, tool.revision, tool.functionId, crypto.randomUUID().replaceAll(\"-\", \"\"), input, signal);\n changed(invocation);\n while (invocation.status === \"queued\" || invocation.status === \"running\") {\n await waitForPoll(signal);\n invocation = await api.functionInvocation(runId, tool.actorHandle, invocation.id, signal);\n changed(invocation);\n }\n return invocation;\n};\n", "import type { RunToolParameter } from \"./api\";\nimport { isJsonValue, type JsonValue } from \"./bridge\";\n\nconst parseParameter = (parameter: RunToolParameter, form: FormData): JsonValue | undefined => {\n const raw = String(form.get(parameter.name) ?? \"\");\n if (parameter.type === \"boolean\") {\n if (parameter.required) return form.has(parameter.name);\n return raw === \"\" ? undefined : raw === \"true\";\n }\n if (raw === \"\" && !parameter.required) return undefined;\n if (parameter.type === \"string\") return raw;\n if (!raw.trim()) throw new Error(`${parameter.name}: Bitte einen Wert eingeben.`);\n if (parameter.type === \"number\" || parameter.type === \"integer\") {\n const value = Number(raw);\n if (!Number.isFinite(value) || parameter.type === \"integer\" && !Number.isInteger(value)) {\n throw new Error(`${parameter.name} ist keine g\u00FCltige ${parameter.type === \"integer\" ? \"Ganzzahl\" : \"Zahl\"}.`);\n }\n return value;\n }\n if (parameter.type === \"string[]\" && !raw.trimStart().startsWith(\"[\")) {\n return raw.split(/\\r?\\n|,/).map((entry) => entry.trim()).filter(Boolean);\n }\n let value: unknown;\n try { value = JSON.parse(raw); }\n catch { throw new Error(`${parameter.name}: Bitte g\u00FCltiges JSON eingeben.`); }\n if (!isJsonValue(value)) throw new Error(`${parameter.name}: Kein g\u00FCltiger JSON-Wert.`);\n if (parameter.type === \"string[]\" && (!Array.isArray(value) || !value.every((entry) => typeof entry === \"string\"))) {\n throw new Error(`${parameter.name}: Bitte eine Liste aus Texten eingeben.`);\n }\n if (parameter.type === \"number[]\" && (!Array.isArray(value) || !value.every((entry) => typeof entry === \"number\"))) {\n throw new Error(`${parameter.name}: Bitte eine JSON-Liste aus Zahlen eingeben.`);\n }\n return value;\n};\n\nexport const actorFunctionInput = (parameters: readonly RunToolParameter[], form: FormData): Record<string, JsonValue> =>\n Object.fromEntries(parameters.flatMap((parameter) => {\n const value = parseParameter(parameter, form);\n return value === undefined ? [] : [[parameter.name, value]];\n }));\n", "import { useEffect, useRef, useState, type FormEvent } from \"react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { Button, cn, Input, Textarea } from \"@ragents/web/ui\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport type { RunAppInvocation, RunScriptTool } from \"./api\";\nimport { HostConfirmation, pendingConfirmationFor, useActorPrograms } from \"./AppsPanel\";\nimport { invokeActorFunction } from \"./function-call\";\nimport { actorFunctionInput } from \"./function-input\";\n\nconst selectClass = \"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base font-normal md:text-sm\";\n\nexport function FunctionForm({ session, tool, detail = false }: {\n session: SessionContext;\n tool: RunScriptTool;\n detail?: boolean;\n}) {\n const writable = useAccess().can(\"runs.write\");\n const { api, refresh, runId } = useActorPrograms();\n const [error, setError] = useState<string>();\n const [busy, setBusy] = useState(false);\n const [invocation, setInvocation] = useState<RunAppInvocation>();\n const controllerRef = useRef<AbortController | undefined>(undefined);\n useEffect(() => () => controllerRef.current?.abort(), []);\n const confirmation = invocation ? pendingConfirmationFor(session, { invocations: [invocation] }) : undefined;\n\n const submit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (controllerRef.current || !writable) return;\n const controller = new AbortController();\n controllerRef.current = controller;\n setError(undefined);\n setInvocation(undefined);\n try {\n const input = actorFunctionInput(tool.parameters, new FormData(event.currentTarget));\n setBusy(true);\n await invokeActorFunction(api, runId, tool, input, controller.signal, (current) => {\n if (!controller.signal.aborted) setInvocation(current);\n });\n if (!controller.signal.aborted) await refresh();\n } catch (caught) {\n if (!controller.signal.aborted) setError(caught instanceof Error ? caught.message : String(caught));\n } finally {\n if (!controller.signal.aborted) setBusy(false);\n if (controllerRef.current === controller) controllerRef.current = undefined;\n }\n };\n\n const status = confirmation ? \"Best\u00E4tigung erforderlich\"\n : invocation?.status === \"queued\" ? \"Wartet auf Ausf\u00FChrung\"\n : invocation?.status === \"running\" ? \"Funktion l\u00E4uft\"\n : invocation?.status === \"succeeded\" ? \"Ausgef\u00FChrt\"\n : invocation?.status === \"cancelled\" ? \"Abgebrochen\"\n : invocation?.status === \"failed\" ? \"Fehlgeschlagen\"\n : busy ? \"Aufruf wird gesendet\" : undefined;\n const failure = error ?? (invocation?.status === \"failed\" || invocation?.status === \"cancelled\" ? invocation.error : undefined);\n\n return (\n <div className=\"grid min-w-0 gap-2.5\">\n <form aria-label={`${tool.name} aufrufen`} className={cn(\"grid\", detail ? \"gap-3.5\" : \"gap-2\")} onSubmit={(event) => void submit(event)}>\n {tool.parameters.length === 0 && detail && <p>Diese Funktion ben\u00F6tigt keine Parameter.</p>}\n {tool.parameters.map((parameter) => (\n <label className={cn(\"grid gap-[3px] font-[650] text-foreground [&_small]:text-[0.61rem] [&_small]:font-normal [&_small]:text-muted-foreground\",\n detail ? \"text-[0.8rem]\" : \"text-[0.68rem]\",\n parameter.type === \"boolean\" && parameter.required && \"grid-cols-[auto_minmax(0,1fr)] items-center gap-x-1.5 [&_small]:col-start-2\")} key={parameter.name}>\n {parameter.type === \"boolean\" && parameter.required && <input aria-description={parameter.description} className=\"m-0 accent-primary\" disabled={!writable || busy} name={parameter.name} type=\"checkbox\" />}\n <span>{parameter.name}{parameter.required ? \" *\" : \"\"}{detail && <small className=\"ml-2\">{parameter.type}{parameter.required ? \"\" : \" (optional)\"}</small>}</span>\n {parameter.type === \"boolean\"\n ? !parameter.required && <select className={selectClass} disabled={!writable || busy} name={parameter.name} defaultValue=\"\"><option value=\"\">Nicht \u00FCbergeben</option><option value=\"true\">Ja</option><option value=\"false\">Nein</option></select>\n : parameter.type === \"json\" || parameter.type === \"string[]\" || parameter.type === \"number[]\" || detail && parameter.type === \"string\"\n ? <Textarea aria-description={parameter.description} className=\"min-h-8 resize-y font-normal\" disabled={!writable || busy} name={parameter.name} placeholder={parameter.description} required={parameter.required} rows={2} />\n : <Input\n aria-description={parameter.description}\n className=\"font-normal\"\n disabled={!writable || busy}\n name={parameter.name}\n placeholder={parameter.description}\n required={parameter.required}\n step={parameter.type === \"integer\" ? \"1\" : parameter.type === \"number\" ? \"any\" : undefined}\n type={parameter.type === \"integer\" || parameter.type === \"number\" ? \"number\" : \"text\"}\n />}\n {(detail || parameter.type === \"boolean\") && <small>{parameter.description}</small>}\n {parameter.type === \"json\" && <small>Als JSON eingeben.</small>}\n {parameter.type === \"number[]\" && <small>Als JSON-Liste eingeben, z. B. [1, 2, 3].</small>}\n {parameter.type === \"string[]\" && <small>Ein Eintrag pro Zeile oder als JSON-Liste.</small>}\n </label>\n ))}\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button disabled={!writable || busy} type=\"submit\">{busy ? \"Wird ausgef\u00FChrt ...\" : \"Ausf\u00FChren\"}</Button>\n {status && <span className=\"text-[0.63rem] text-muted-foreground\" role=\"status\">{status}</span>}\n </div>\n </form>\n {confirmation && <HostConfirmation action={confirmation} key={confirmation.id} session={session} />}\n {failure && <p className=\"text-destructive [overflow-wrap:anywhere]\" role=\"alert\">{failure}</p>}\n {invocation?.status === \"succeeded\" && !error && (\n <section aria-label=\"Ergebnis\" className=\"grid min-w-0 gap-2\">\n <h3>Ergebnis</h3>\n <pre className=\"max-h-[320px] overflow-auto rounded-md border border-border-soft bg-card p-2.5 text-[0.75rem] whitespace-pre-wrap text-foreground [overflow-wrap:anywhere]\">{typeof invocation.result === \"string\" ? invocation.result : JSON.stringify(invocation.result, null, 2)}</pre>\n </section>\n )}\n </div>\n );\n}\n", "export function ExpandIcon() {\n return <svg aria-hidden fill=\"none\" height=\"14\" stroke=\"currentColor\" strokeWidth=\"1.7\" viewBox=\"0 0 24 24\" width=\"14\">\n <path d=\"M9 3H3v6M15 3h6v6M3 15v6h6M21 15v6h-6\" />\n </svg>;\n}\n", "import { ACTOR_PROGRAMS_STATE_ID, ACTOR_INVOCATIONS_STATE_ID, ACTOR_STATE_ID } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\n\nexport const actorProgramsRevision = (runView: unknown): string => {\n const view = runViewFrom(runView);\n const programActors = new Set(view?.pluginStates.filter((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID && entry.scope.kind === \"actor\")\n .map((entry) => entry.scope.kind === \"actor\" ? entry.scope.actorId : \"\") ?? []);\n return JSON.stringify({\n actors: view?.actors.filter((actor) => programActors.has(actor.id)).map((actor) => [actor.id, actor.handle, actor.lifecycle?.kind === \"stopped\"]).sort(([left], [right]) => String(left).localeCompare(String(right))) ?? [],\n states: (view?.pluginStates ?? [])\n .filter((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID || entry.pluginId === ACTOR_INVOCATIONS_STATE_ID\n || entry.pluginId === ACTOR_STATE_ID && entry.scope.kind === \"actor\" && programActors.has(entry.scope.actorId))\n .map((entry) => [`${entry.pluginId}:${entry.scope.kind === \"actor\" ? entry.scope.actorId : \"run\"}`, entry.state])\n .sort(([left], [right]) => String(left).localeCompare(String(right))),\n });\n};\n", "import type { ActorProgramsApi, RunApp, RunAppInvocation } from \"./api\";\n\ntype InvocationTarget = { invocationId: string } & (\n | { kind: \"app\"; appId: string }\n | { kind: \"function\"; actorHandle: string }\n);\n\nexport const activeActorInvocations = (apps: readonly RunApp[], includeFunctions = true): InvocationTarget[] => {\n const appIds = new Set(apps.map((app) => app.id));\n const active = new Map<string, InvocationTarget>();\n for (const app of apps) for (const invocation of app.invocations) {\n if (invocation.status === \"queued\" || invocation.status === \"running\") {\n if (!includeFunctions && !appIds.has(invocation.appId)) continue;\n active.set(`${invocation.actorId}/${invocation.id}`, appIds.has(invocation.appId)\n ? { kind: \"app\", appId: invocation.appId, invocationId: invocation.id }\n : { kind: \"function\", actorHandle: invocation.actorHandle, invocationId: invocation.id });\n }\n }\n return [...active.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([, target]) => target);\n};\n\nexport const readActorInvocation = (\n api: ActorProgramsApi,\n runId: string,\n target: InvocationTarget,\n signal?: AbortSignal,\n): Promise<RunAppInvocation> => target.kind === \"app\"\n ? api.invocation(runId, target.appId, target.invocationId, signal)\n : api.functionInvocation(runId, target.actorHandle, target.invocationId, signal);\n\nexport const invocationTime = (invocation: RunAppInvocation): number => {\n const raw = invocation.status === \"queued\"\n ? invocation.createdAt\n : invocation.status === \"running\"\n ? invocation.startedAt\n : invocation.finishedAt;\n const parsed = Date.parse(raw);\n return Number.isNaN(parsed) ? 0 : parsed;\n};\n\nexport const latestInvocation = (app: RunApp): RunAppInvocation | undefined =>\n app.invocations.reduce<RunAppInvocation | undefined>((latest, invocation) =>\n !latest || invocationTime(invocation) >= invocationTime(latest) ? invocation : latest, undefined);\n", "import { createContext, useContext } from \"react\";\nimport type { ActorProgramsApi, ActorProgramsListing, RunAppInvocation } from \"./api\";\nimport type { JsonValue } from \"./bridge\";\n\nexport interface ActorProgramsContextValue {\n api: ActorProgramsApi;\n error: string | undefined;\n fullscreenAppId: string | undefined;\n listing: ActorProgramsListing | undefined;\n openFullscreen: (appId: string) => void;\n closeFullscreen: () => void;\n refresh: () => Promise<void>;\n invoke: (\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n ) => Promise<RunAppInvocation>;\n runId: string;\n}\n\nexport const ActorProgramsContext = createContext<ActorProgramsContextValue | undefined>(undefined);\nexport const useOptionalActorPrograms = () => useContext(ActorProgramsContext);\n\nexport const useActorPrograms = (): ActorProgramsContextValue => {\n const value = useOptionalActorPrograms();\n if (!value) throw new Error(\"Der Actor-Programm-Provider ist nicht aktiv\");\n return value;\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/input-bridge\", \"hostInputEnabled\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/input-bridge\", \"isRunPanelKeyboardMessage\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/input-bridge\", \"relayFrameInput\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/theme\", \"useResolvedTheme\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/api\", \"sendActorMessage\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/http/contracts\", \"actorByHandle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/actor-conversation\", \"actorChatMessages\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/chat-target\", \"programChatNotice\");\n", "import { actorByHandle } from \"@ragents/engine/src/http/contracts\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport type { ChatSnapshot } from \"@ragents/web/actor-programs/client-ui/contracts\";\nimport { actorChatMessages } from \"@ragents/web/actor-conversation\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport { programChatNotice } from \"@ragents/web/chat/chat-target\";\n\nexport const resolveChatActor = (session: SessionContext, target: string) => {\n const view = runViewFrom(session.runView);\n if (!view || view.id !== session.session.id) throw new Error(\"Die Run-Ansicht f\u00FCr diesen Chat ist noch nicht verf\u00FCgbar\");\n const actor = target === \"primary\"\n ? view.actors.find((entry) => entry.id === view.primaryActorId)\n : actorByHandle(view.actors, target);\n if (!actor || actor.kind === \"human\") {\n const names = view.actors.filter((entry) => entry.kind !== \"human\").map((entry) => `@${entry.handle}`).join(\", \");\n throw new Error(`Das Chat-Ziel ist nicht verf\u00FCgbar. Erlaubt sind primary und: ${names || \"noch keine Actors\"}`);\n }\n return { view, actor };\n};\n\nexport const chatSnapshotOf = (session: SessionContext, target: string): ChatSnapshot => {\n try {\n const { view, actor } = resolveChatActor(session, target);\n const primary = actor.id === view.primaryActorId;\n const error = actor.kind === \"script\" ? programChatNotice : session.conversationError ?? (!session.connected\n ? \"Die Verbindung zum Run ist unterbrochen\"\n : actor.lifecycle?.kind === \"stopped\" ? `@${actor.handle} gestoppt: ${actor.lifecycle.reason}. Er nimmt keine Eingaben an, bis er neu gestartet wird` : undefined);\n return {\n owner: actor.id,\n messages: actorChatMessages(view, actor, session.messages, session.actorConversations?.[actor.id]),\n running: primary ? session.running : actor.lifecycle?.kind === \"running\",\n ...(actor.kind === \"script\" ? { readOnly: true } : {}),\n ...(error ? { error } : {}),\n };\n } catch (error) {\n return { messages: [], running: false, error: error instanceof Error ? error.message : String(error) };\n }\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/useAttachmentCapabilities\", \"getAttachmentCapabilities\");\n", "import { hostInputEnabled, isRunPanelKeyboardMessage, relayFrameInput } from \"@ragents/web/run-panel/input-bridge\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { cn } from \"@ragents/web/ui\";\nimport { useResolvedTheme } from \"@ragents/web/theme\";\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport type { RunApp, RunAppInvocation, ActorProgramsApi } from \"./api\";\nimport { latestInvocation } from \"./invocations\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport { sendActorMessage } from \"@ragents/web/api\";\nimport { chatSnapshotOf, resolveChatActor } from \"./chat-state\";\nimport { getAttachmentCapabilities } from \"@ragents/web/chat/useAttachmentCapabilities\";\nimport type { ChatSnapshot } from \"@ragents/web/actor-programs/client-ui/contracts\";\nimport {\n RUN_APP_BRIDGE_VERSION,\n RUN_APP_CHAT_ACK,\n RUN_APP_CHAT_SEND,\n RUN_APP_CHAT_STATE,\n RUN_APP_CHAT_UNWATCH,\n RUN_APP_CHAT_WATCH,\n RUN_APP_CONNECTED,\n RUN_APP_ERROR,\n RUN_APP_FRAME_READY,\n RUN_APP_GET_STATE,\n RUN_APP_INVOCATION,\n RUN_APP_READY,\n RUN_APP_STATE,\n RUN_APP_THEME,\n validateRunAppBridgeRequest,\n type JsonValue,\n type RunAppInvokeRequest,\n} from \"./bridge\";\n\ninterface ActorViewFrameProps {\n api: ActorProgramsApi;\n app: RunApp;\n invoke: (\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n ) => Promise<RunAppInvocation>;\n pendingConfirmationInvocationId?: string;\n presentation: \"embedded\" | \"fullscreen\" | \"tiled\";\n runId: string;\n session: SessionContext;\n}\n\nconst ACTIVE_STATUSES = new Set([\"queued\", \"running\"]);\nconst REQUEST_ID_HISTORY_LIMIT = 512;\n\nconst invocationSignature = (invocation: RunAppInvocation): string => JSON.stringify(invocation);\n\nconst markTones: Record<string, string> = {\n success: \"bg-success\",\n running: \"bg-primary shadow-[0_0_0_4px_color-mix(in_srgb,var(--primary)_12%,transparent)] animate-fade-pulse [animation-duration:1.2s] motion-reduce:animate-none\",\n confirm: \"bg-warning\",\n error: \"bg-destructive\",\n};\n\nexport function ActorViewFrame({\n api,\n app,\n invoke,\n pendingConfirmationInvocationId,\n presentation,\n runId,\n session,\n}: ActorViewFrameProps) {\n const access = useAccess();\n const theme = useResolvedTheme();\n const themeRef = useRef(theme);\n themeRef.current = theme;\n const writableRef = useRef(access.can(\"runs.write\"));\n writableRef.current = access.can(\"runs.write\");\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const portRef = useRef<MessagePort | undefined>(undefined);\n const bridgeGenerationRef = useRef(0);\n const bridgeConnectedRef = useRef(false);\n const appRef = useRef(app);\n const sessionRef = useRef(session);\n sessionRef.current = session;\n const watchedChats = useRef(new Map<string, string>());\n const chatCapabilities = useRef(new Map<string, { result?: Pick<ChatSnapshot, \"attachmentCapabilities\" | \"attachmentCapabilitiesError\">; pending: Promise<Pick<ChatSnapshot, \"attachmentCapabilities\" | \"attachmentCapabilitiesError\">> }>());\n const recentRequestIdsRef = useRef(new Set<string>());\n const sentStateRef = useRef(\"\");\n const sentInvocationsRef = useRef(new Map<string, string>());\n const [bridgeReady, setBridgeReady] = useState(false);\n const [frameError, setFrameError] = useState<string>();\n const [actionError, setActionError] = useState<string>();\n const [submitting, setSubmitting] = useState<string[]>([]);\n appRef.current = app;\n const frameUrl = useMemo(() => api.frameUrl(runId, app.id, app.revision), [api, app.id, app.revision, runId]);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- a fresh token is minted per frame url on purpose\n const bridgeToken = useMemo(() => crypto.randomUUID().replaceAll(\"-\", \"\"), [frameUrl]);\n\n const closeBridge = useCallback(() => {\n bridgeGenerationRef.current += 1;\n bridgeConnectedRef.current = false;\n portRef.current?.close();\n portRef.current = undefined;\n watchedChats.current.clear();\n chatCapabilities.current.clear();\n setBridgeReady(false);\n setSubmitting([]);\n }, []);\n\n const sendChatState = useCallback((port: MessagePort, actor: string, requestId?: string) => {\n const generation = bridgeGenerationRef.current;\n const publish = (capabilities: Pick<ChatSnapshot, \"attachmentCapabilities\" | \"attachmentCapabilitiesError\">) => {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current || !watchedChats.current.has(actor)) return;\n const chat = chatSnapshotOf(sessionRef.current, actor);\n const snapshot = { ...chat, ...capabilities, readOnly: chat.readOnly === true || !writableRef.current };\n const signature = JSON.stringify(snapshot);\n if (requestId === undefined && watchedChats.current.get(actor) === signature) return;\n watchedChats.current.set(actor, signature);\n port.postMessage({ type: RUN_APP_CHAT_STATE, version: RUN_APP_BRIDGE_VERSION, actor, snapshot, ...(requestId ? { requestId } : {}) });\n };\n try {\n const current = sessionRef.current;\n const target = resolveChatActor(current, actor).actor;\n const key = JSON.stringify([current.session.id, target.id, target.execution?.driver]);\n let entry = chatCapabilities.current.get(key);\n if (!entry) {\n const pending = getAttachmentCapabilities(current.session.id, target.id).then(\n (attachmentCapabilities) => ({ attachmentCapabilities }),\n (cause: unknown) => ({ attachmentCapabilitiesError: cause instanceof Error ? cause.message : String(cause) }),\n );\n entry = { pending };\n chatCapabilities.current.set(key, entry);\n const saved = entry;\n void pending.then((result) => { saved.result = result; });\n }\n publish(entry.result ?? { attachmentCapabilitiesError: \"Modellf\u00E4higkeiten werden gepr\u00FCft ...\" });\n if (!entry.result) void entry.pending.then(publish);\n } catch (cause) {\n publish({ attachmentCapabilitiesError: cause instanceof Error ? cause.message : String(cause) });\n }\n }, []);\n\n const postError = useCallback((port: MessagePort, requestId: string | undefined, message: string) => {\n port.postMessage({\n type: RUN_APP_ERROR,\n version: RUN_APP_BRIDGE_VERSION,\n ...(requestId ? { requestId } : {}),\n message,\n });\n }, []);\n\n const executeRequest = useCallback(async (\n request: RunAppInvokeRequest,\n port: MessagePort,\n generation: number,\n installedApp: Pick<RunApp, \"id\" | \"revision\">,\n ) => {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n setActionError(undefined);\n setSubmitting((current) => [...current, request.requestId]);\n try {\n if (!writableRef.current) throw new Error(\"Du hast Lesezugriff auf diese Actor-Ansicht.\");\n const invocation = await invoke(\n installedApp.id,\n installedApp.revision,\n request.actionId,\n request.requestId,\n request.input,\n );\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n sentInvocationsRef.current.set(invocation.id, invocationSignature(invocation));\n port.postMessage({\n type: RUN_APP_INVOCATION,\n version: RUN_APP_BRIDGE_VERSION,\n requestId: request.requestId,\n invocation,\n });\n } catch (caught) {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n const message = caught instanceof Error ? caught.message : String(caught);\n setActionError(message);\n postError(port, request.requestId, message);\n } finally {\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n setSubmitting((current) => current.filter((requestId) => requestId !== request.requestId));\n }\n }\n }, [invoke, postError]);\n\n const sendState = useCallback((port: MessagePort, requestId?: string) => {\n const current = appRef.current;\n port.postMessage({\n type: RUN_APP_STATE,\n version: RUN_APP_BRIDGE_VERSION,\n ...(requestId ? { requestId } : {}),\n state: current.state ?? null,\n });\n }, []);\n\n const handlePortMessage = useCallback((\n value: unknown,\n port: MessagePort,\n generation: number,\n installedApp: RunApp,\n ) => {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n if (relayFrameInput(window, value, (message) => {\n if (generation === bridgeGenerationRef.current && port === portRef.current) port.postMessage(message);\n })) return;\n const message = value as { type?: unknown; version?: unknown } | null;\n if (message?.type === RUN_APP_CONNECTED && message.version === RUN_APP_BRIDGE_VERSION) {\n bridgeConnectedRef.current = true;\n setFrameError(undefined);\n setBridgeReady(true);\n return;\n }\n const validation = validateRunAppBridgeRequest(value);\n if (!validation.ok) {\n postError(port, validation.requestId, validation.error);\n return;\n }\n const { request } = validation;\n if (recentRequestIdsRef.current.has(request.requestId)) {\n postError(port, request.requestId, \"Diese requestId wurde bereits verwendet\");\n return;\n }\n recentRequestIdsRef.current.add(request.requestId);\n if (recentRequestIdsRef.current.size > REQUEST_ID_HISTORY_LIMIT) {\n const oldest = recentRequestIdsRef.current.values().next().value;\n if (oldest !== undefined) recentRequestIdsRef.current.delete(oldest);\n }\n if (request.type === RUN_APP_CHAT_WATCH) {\n watchedChats.current.set(request.actor, \"\");\n sendChatState(port, request.actor, request.requestId);\n return;\n }\n if (request.type === RUN_APP_CHAT_UNWATCH) {\n watchedChats.current.delete(request.actor);\n port.postMessage({ type: RUN_APP_CHAT_ACK, version: RUN_APP_BRIDGE_VERSION, requestId: request.requestId });\n return;\n }\n if (request.type === RUN_APP_CHAT_SEND) {\n void (async () => {\n try {\n if (!writableRef.current) throw new Error(\"Du hast Lesezugriff auf diesen Chat.\");\n const current = sessionRef.current;\n const snapshot = chatSnapshotOf(current, request.actor);\n if (snapshot.error) throw new Error(snapshot.error);\n const { actor } = resolveChatActor(current, request.actor);\n await sendActorMessage(current.session.id, actor.id, request.text, request.attachments);\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n port.postMessage({ type: RUN_APP_CHAT_ACK, version: RUN_APP_BRIDGE_VERSION, requestId: request.requestId });\n }\n } catch (error) {\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n postError(port, request.requestId, error instanceof Error ? error.message : String(error));\n }\n }\n })();\n return;\n }\n if (request.type === RUN_APP_GET_STATE) {\n sendState(port, request.requestId);\n return;\n }\n const action = installedApp.actions.find((entry) => entry.id === request.actionId);\n if (!action) {\n postError(port, request.requestId, \"Die angeforderte App-Aktion ist nicht installiert\");\n return;\n }\n void executeRequest(request, port, generation, installedApp);\n }, [executeRequest, postError, sendChatState, sendState]);\n\n const attachBridge = useCallback((port: MessagePort, installedApp: RunApp) => {\n if (portRef.current) {\n port.close();\n return;\n }\n closeBridge();\n const generation = bridgeGenerationRef.current;\n portRef.current = port;\n port.onmessage = (event) => handlePortMessage(event.data, port, generation, installedApp);\n port.onmessageerror = () => {\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n postError(port, undefined, \"Die App hat eine unlesbare Nachricht gesendet\");\n }\n };\n port.start();\n recentRequestIdsRef.current = new Set();\n sentStateRef.current = JSON.stringify(installedApp.state ?? null);\n sentInvocationsRef.current = new Map(installedApp.invocations.map((invocation) => [\n invocation.id,\n invocationSignature(invocation),\n ]));\n port.postMessage({\n type: RUN_APP_READY,\n version: RUN_APP_BRIDGE_VERSION,\n theme: themeRef.current,\n hostInput: hostInputEnabled(window),\n app: {\n id: installedApp.id,\n actorId: installedApp.actorId,\n actorHandle: installedApp.actorHandle,\n title: installedApp.title,\n description: installedApp.description,\n actions: installedApp.actions,\n },\n actor: { id: installedApp.actorId, handle: installedApp.actorHandle },\n state: installedApp.state ?? null,\n invocations: installedApp.invocations,\n });\n setFrameError(undefined);\n }, [closeBridge, handlePortMessage, postError]);\n\n useLayoutEffect(() => {\n const frame = iframeRef.current;\n if (!frame) return;\n closeBridge();\n setActionError(undefined);\n setFrameError(undefined);\n const installedApp = appRef.current;\n let initialLoaded = false;\n let pendingPort: MessagePort | undefined;\n const connect = (port: MessagePort) => {\n if (initialLoaded) attachBridge(port, installedApp);\n else pendingPort = port;\n };\n const receiveReady = (event: MessageEvent<unknown>) => {\n const data = event.data as { type?: unknown; version?: unknown; token?: unknown; keyboard?: unknown } | null;\n if (event.source === frame.contentWindow && event.origin === \"null\"\n && data?.type === \"ragents.app.escape\" && data.version === RUN_APP_BRIDGE_VERSION\n && data.token === bridgeToken) {\n window.dispatchEvent(new KeyboardEvent(\"keydown\", { ...(isRunPanelKeyboardMessage(data.keyboard) ? data.keyboard.event : { key: \"Escape\" }), bubbles: true, cancelable: true }));\n return;\n }\n if (event.source !== frame.contentWindow\n || event.origin !== \"null\"\n || data?.type !== RUN_APP_FRAME_READY\n || data.version !== RUN_APP_BRIDGE_VERSION\n || data.token !== bridgeToken\n || event.ports.length !== 1) return;\n if (pendingPort || portRef.current) {\n event.ports[0]!.close();\n return;\n }\n connect(event.ports[0]!);\n };\n const handleLoad = () => {\n if (!initialLoaded) {\n initialLoaded = true;\n if (pendingPort) {\n const port = pendingPort;\n pendingPort = undefined;\n attachBridge(port, installedApp);\n }\n return;\n }\n pendingPort?.close();\n pendingPort = undefined;\n closeBridge();\n setFrameError(\"Die App hat ihre installierte Seite verlassen und wurde getrennt.\");\n };\n window.addEventListener(\"message\", receiveReady);\n frame.addEventListener(\"load\", handleLoad);\n frame.src = `${frameUrl}#ragentsBridge=${encodeURIComponent(bridgeToken)}`;\n const timeout = window.setTimeout(() => {\n if (!bridgeConnectedRef.current) setFrameError(\"Die App hat keine g\u00FCltige Host-Bridge ge\u00F6ffnet.\");\n }, 5_000);\n return () => {\n window.clearTimeout(timeout);\n window.removeEventListener(\"message\", receiveReady);\n frame.removeEventListener(\"load\", handleLoad);\n pendingPort?.close();\n closeBridge();\n };\n }, [attachBridge, bridgeToken, closeBridge, frameUrl]);\n\n useEffect(() => {\n if (!bridgeReady) return;\n portRef.current?.postMessage({ type: RUN_APP_THEME, version: RUN_APP_BRIDGE_VERSION, theme });\n }, [bridgeReady, theme]);\n\n useEffect(() => {\n if (!bridgeReady) return;\n const stateSignature = JSON.stringify(app.state ?? null);\n if (stateSignature !== sentStateRef.current) {\n sentStateRef.current = stateSignature;\n const port = portRef.current;\n if (port) sendState(port);\n }\n app.invocations.forEach((invocation) => {\n const signature = invocationSignature(invocation);\n if (sentInvocationsRef.current.get(invocation.id) === signature) return;\n sentInvocationsRef.current.set(invocation.id, signature);\n portRef.current?.postMessage({\n type: RUN_APP_INVOCATION,\n version: RUN_APP_BRIDGE_VERSION,\n invocation,\n });\n });\n }, [app.invocations, app.state, bridgeReady, sendState]);\n\n useEffect(() => {\n if (!bridgeReady || !portRef.current) return;\n for (const actor of watchedChats.current.keys()) sendChatState(portRef.current, actor);\n }, [bridgeReady, sendChatState, session]);\n\n const latest = latestInvocation(app);\n const active = app.invocations.filter((invocation) => ACTIVE_STATUSES.has(invocation.status));\n const confirmationInvocation = active.find((invocation) => invocation.id === pendingConfirmationInvocationId);\n const confirmationAction = confirmationInvocation\n ? app.actions.find((action) => action.id === confirmationInvocation.actionId)\n : undefined;\n const status = frameError\n ? { tone: \"error\", title: \"App getrennt\", detail: frameError }\n : submitting.length > 0\n ? { tone: \"running\", title: \"Aktion wird gestartet\", detail: `${submitting.length} Anfrage(n)` }\n : confirmationAction\n ? { tone: \"confirm\", title: \"Wartet auf Deine Best\u00E4tigung\", detail: confirmationAction.label }\n : active.length > 0\n ? { tone: \"running\", title: \"Aktion l\u00E4uft\", detail: active.map((invocation) =>\n app.actions.find((action) => action.id === invocation.actionId)?.label.trim()\n || (access.can(\"runs.inspect\") ? invocation.actionId : \"\")).filter(Boolean).join(\", \") }\n : actionError\n ? { tone: \"error\", title: \"Aktion fehlgeschlagen\", detail: actionError }\n : latest?.status === \"failed\"\n ? { tone: \"error\", title: \"Letzte Aktion fehlgeschlagen\", detail: latest.error }\n : latest?.status === \"cancelled\"\n ? { tone: \"muted\", title: \"Letzte Aktion abgebrochen\", detail: latest.actionId }\n : latest?.status === \"succeeded\"\n ? {\n tone: \"success\",\n title: \"Letzte Aktion abgeschlossen\",\n detail: latest.output.at(-1) ?? latest.actionId,\n }\n : bridgeReady\n ? undefined\n : { tone: \"muted\", title: \"App wird geladen\", detail: \"Bridge noch nicht verbunden\" };\n\n const visibleStatus = status && (presentation === \"fullscreen\" ? status.tone === \"error\" : status.tone !== \"success\") ? status : undefined;\n\n const compact = presentation !== \"fullscreen\";\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <div aria-live=\"polite\" role=\"status\"\n className={cn(\"grid min-w-0 items-center overflow-hidden text-xs text-muted-foreground\",\n compact\n ? \"order-1 h-7 flex-[0_0_28px] grid-cols-[auto_minmax(0,1fr)] gap-1.5 px-workspace-inset py-1\"\n : \"h-[31px] flex-[0_0_31px] grid-cols-[8px_auto_minmax(0,1fr)] gap-[7px] border-b border-border-soft px-workspace-inset py-[5px]\")}>\n {visibleStatus && <>\n {!compact && <span className={cn(\"size-[7px] rounded-full bg-muted-foreground/55\", markTones[visibleStatus.tone])} />}\n <strong className={cn(\"font-semibold whitespace-nowrap text-foreground\", compact ? \"text-[0.63rem]\" : \"text-[0.7rem]\")}>{visibleStatus.title}</strong>\n <span className=\"truncate\" title={visibleStatus.detail}>{visibleStatus.detail}</span>\n </>}\n </div>\n <div className={cn(\"relative flex min-h-0 flex-1 overflow-hidden\", compact ? \"bg-transparent\" : \"bg-background\")}>\n <iframe\n allow=\"camera 'none'; geolocation 'none'; microphone 'none'\"\n className={cn(\"absolute inset-0 h-full w-full min-h-0 min-w-0 border-0\", compact ? \"bg-transparent\" : \"bg-background\")}\n ref={iframeRef}\n referrerPolicy=\"no-referrer\"\n sandbox=\"allow-scripts allow-forms allow-downloads\"\n aria-label={app.title}\n title=\"\"\n />\n </div>\n </div>\n );\n}\n", "import { useRef } from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport { Button, Dialog, DialogContent, DialogTitle } from \"@ragents/web/ui\";\nimport { HostConfirmation, pendingConfirmationFor, actorProgramApps, useActorPrograms } from \"./AppsPanel\";\nimport { ActorViewFrame } from \"./ActorViewFrame\";\n\nexport function FullscreenHost({ session }: { session: SessionContext }) {\n const { api, closeFullscreen, error, fullscreenAppId, invoke, listing, runId } = useActorPrograms();\n const closeRef = useRef<HTMLButtonElement>(null);\n if (!fullscreenAppId) return null;\n const entry = actorProgramApps(session).find((candidate) => candidate.id === fullscreenAppId && candidate.app.visible !== false);\n if (!entry) return null;\n const app = listing?.apps.find((candidate) => candidate.id === fullscreenAppId);\n const title = entry.title;\n const confirmation = app ? pendingConfirmationFor(session, app) : undefined;\n return <Dialog key={`${runId}:${fullscreenAppId}`} open onOpenChange={(open) => { if (!open) closeFullscreen(); }}>\n <DialogContent className=\"h-[calc(100%-2*clamp(16px,2vw,24px))] w-[calc(100%-2*clamp(16px,2vw,24px))] gap-0 bg-background p-0\" initialFocus={closeRef} scope=\"surface\" showCloseButton={false} size=\"full\">\n <header className=\"flex flex-none items-center gap-3 border-b border-border bg-card py-2 pr-3 pl-4\">\n <DialogTitle className=\"min-w-0 flex-1 truncate text-[0.9rem]\" render={<h2 />}>{title}</DialogTitle>\n <Button aria-label={`${title} Vollansicht schlie\u00DFen`} className=\"rounded-full\" onClick={closeFullscreen} ref={closeRef} size=\"icon\" title={`${title} Vollansicht schlie\u00DFen`} variant=\"outline\"><XIcon /></Button>\n </header>\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden [&>[data-slot=host-confirmation]]:max-h-[65%] [&>[data-slot=host-confirmation]]:flex-[0_1_auto] [&>[data-slot=host-confirmation]]:overflow-auto\">\n {confirmation && <HostConfirmation action={confirmation} key={confirmation.id} session={session} />}\n {app ? <ActorViewFrame api={api} app={app} invoke={invoke} pendingConfirmationInvocationId={confirmation?.parameters.invocationId}\n presentation=\"fullscreen\" runId={runId} session={session} />\n : <p className=\"flex flex-1 items-center justify-center gap-2 text-[0.7rem] text-muted-foreground\" role={error ? \"alert\" : \"status\"}>{error ?? \"Actor-Ansicht wird geladen\"}</p>}\n </div>\n </DialogContent>\n </Dialog>;\n}\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { Spinner } from \"@ragents/web/ui\";\nimport { isRecord } from \"@ragents/web/lib/guards\";\nimport { runActorFrom } from \"@ragents/web/run-view\";\nimport type {\n SurfaceElementContext,\n SurfaceElementDefinition,\n CardSectionContext,\n SessionContext,\n} from \"@ragents/web/PluginRegistry\";\nimport { HostConfirmation, pendingConfirmationFor, actorProgramApps, useActorPrograms } from \"./AppsPanel\";\nimport { ActorViewFrame } from \"./ActorViewFrame\";\nimport { FunctionForm } from \"./FunctionForm\";\n\nexport function ActorProgramToolCardSection({ actor, session }: CardSectionContext) {\n const inspect = useAccess().can(\"runs.inspect\");\n const { listing } = useActorPrograms();\n const owner = runActorFrom(actor);\n if (!inspect || owner.lifecycle?.kind === \"stopped\") return null;\n const tools = listing?.tools.filter((tool) => tool.card && tool.actorId === owner.id) ?? [];\n if (tools.length === 0) return null;\n return (\n <section className=\"grid min-w-0 gap-[9px]\">\n {tools.map((tool) => (\n <article aria-label={tool.name} className=\"min-w-0\" key={`${session.session.id}:${tool.actorId}:${tool.functionId}:${tool.revision}`}>\n <strong>{tool.name}</strong>\n <FunctionForm session={session} tool={tool} />\n </article>\n ))}\n </section>\n );\n}\n\nexport const actorProgramSurfaceElements = (session: SessionContext): readonly SurfaceElementDefinition[] =>\n actorProgramApps(session).flatMap((module): SurfaceElementDefinition[] => {\n const rawPlacements = module.app.placements;\n const placement = Array.isArray(rawPlacements) ? rawPlacements.find((entry) => isRecord(entry) && entry.kind === \"canvas\") : undefined;\n const surface = isRecord(placement) ? placement : undefined;\n if (surface && typeof surface.anchorActorId !== \"string\") {\n throw new Error(`Die Fl\u00E4chenplatzierung der Actor-Ansicht ${module.title} ist ung\u00FCltig`);\n }\n if (surface && surface.anchorActorId !== module.actorId) throw new Error(`Die Ansicht ${module.title} geh\u00F6rt zu @${module.actorHandle}.`);\n return [{\n id: module.id,\n title: module.title,\n visible: module.app.visible !== false,\n anchorActorId: module.actorId,\n data: { actorId: module.actorId, actorHandle: module.actorHandle },\n entity: { type: \"run-app\", id: module.id },\n }];\n });\n\nexport function ActorProgramSurfaceElement({ definition, session }: SurfaceElementContext) {\n const { api, invoke, listing, runId } = useActorPrograms();\n const app = listing?.apps.find((candidate) => candidate.id === definition.id);\n const confirmation = app ? pendingConfirmationFor(session, app) : undefined;\n const title = definition.title ?? definition.id;\n const frame = app ? (\n <ActorViewFrame\n api={api}\n app={app}\n invoke={invoke}\n pendingConfirmationInvocationId={confirmation?.parameters.invocationId}\n presentation=\"tiled\"\n runId={runId}\n session={session}\n />\n ) : (\n <div className=\"flex flex-1 items-center justify-center gap-2 text-[0.7rem] text-muted-foreground\">\n <Spinner aria-hidden aria-label={undefined} role={undefined} />\n <span>Actor-Ansicht wird geladen</span>\n </div>\n );\n return (\n <article aria-label={title} className=\"flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden\">\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden [&>[data-slot=host-confirmation]]:max-h-[65%] [&>[data-slot=host-confirmation]]:flex-[0_1_auto] [&>[data-slot=host-confirmation]]:overflow-auto\">\n {confirmation && <HostConfirmation action={confirmation} key={confirmation.id} session={session} />}\n {frame}\n </div>\n </article>\n );\n}\n", "import {\n pluginRoutePrefixFrom,\n type SessionProviderProps,\n type WebPlugin,\n type WebPluginDescriptor,\n} from \"@ragents/web/PluginRegistry\";\nimport { createActorProgramsApi } from \"./api\";\nimport {\n RUN_TOOLS_TAB_ID,\n ActorProgramsHeader,\n ActorProgramsProvider,\n ToolsBadge,\n ToolsPanel,\n} from \"./AppsPanel\";\nimport { FullscreenHost } from \"./FullscreenHost\";\nimport {\n ActorProgramSurfaceElement,\n ActorProgramToolCardSection,\n actorProgramSurfaceElements,\n} from \"./EmbeddedApps\";\n\nexport const ACTOR_PROGRAMS_PLUGIN_ID = \"ragents.actor-programs\";\n\nfunction IconTools() {\n return (\n <svg aria-hidden fill=\"none\" height=\"15\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.7\" viewBox=\"0 0 24 24\" width=\"15\">\n <path d=\"M14.5 6.5 17.5 3.5l3 3-3 3\" />\n <path d=\"m9.5 17.5-3 3-3-3 3-3\" />\n <path d=\"M13 5H9a4 4 0 0 0-4 4v5.5M11 19h4a4 4 0 0 0 4-4V9.5\" />\n </svg>\n );\n}\n\nconst configuredPlugin = (descriptor: WebPluginDescriptor, routePrefix: string): WebPlugin => {\n const api = createActorProgramsApi(routePrefix);\n\n function Provider({ children, session }: SessionProviderProps) {\n return (\n <ActorProgramsProvider api={api} session={session}>\n {children}\n <FullscreenHost session={session} />\n </ActorProgramsProvider>\n );\n }\n\n return {\n ...descriptor,\n needsRunView: true,\n SessionProvider: Provider,\n sessionHeaders: [{\n id: \"ragents.actor-programs.quick-list\",\n placement: \"surface\",\n order: 250,\n Header: ActorProgramsHeader,\n }],\n cardSections: [{\n id: \"ragents.actor-programs.tools\",\n order: 400,\n Section: ActorProgramToolCardSection,\n }],\n surfaceElements: [{\n id: \"ragents.actor-programs.apps\",\n order: 400,\n select: actorProgramSurfaceElements,\n Element: ActorProgramSurfaceElement,\n }],\n workspaceTabs: [\n {\n readRight: \"runs.inspect\",\n id: RUN_TOOLS_TAB_ID,\n label: \"Funktionen\",\n order: 251,\n Icon: IconTools,\n Panel: ToolsPanel,\n Badge: ToolsBadge,\n },\n ],\n };\n};\n\nconst descriptor: WebPluginDescriptor = { id: ACTOR_PROGRAMS_PLUGIN_ID };\n\nexport const webPlugin: WebPlugin = {\n ...descriptor,\n activate: (config) => configuredPlugin(descriptor, pluginRoutePrefixFrom(descriptor.id, config)),\n};\n"],
5
- "mappings": "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",
3
+ "sources": ["ragents-host-read:read", "ragents-host-value:@ragents/web/PluginRegistry#pluginRoutePrefixFrom", "ragents-host-value:@ragents/web/PluginRegistry#useSurfaceController", "ragents-host-value:@ragents/web/lib/guards#isRecord", "ragents-host-value:@ragents/web/rpc#rpc", "ragents-host-value:@ragents/web/access-token#withAccessToken", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#ACTOR_INVOCATIONS_STATE_ID", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#ACTOR_PROGRAMS_STATE_ID", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#ACTOR_STATE_ID", "ragents-host-value:@ragents/host/plugin-support/actor-programs/contract#actorProgramContracts", "../../../plugins/ragents.actor-programs/parameter-types.ts", "../../../node_modules/.pnpm/quassel@0.4.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/src/chat-attachments.ts", "../../../node_modules/.pnpm/quassel@0.4.0_@types+react@19.2.18_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/src/events.ts", "../../../plugins/ragents.actor-programs/web/bridge.ts", "../../../plugins/ragents.actor-programs/web/api.ts", "ragents-host-value:@ragents/web/AccessContext#useAccess", "ragents-host-value:react#createContext", "ragents-host-value:react#createElement", "ragents-host-value:react#forwardRef", "ragents-host-value:react#useCallback", "ragents-host-value:react#useContext", "ragents-host-value:react#useEffect", "ragents-host-value:react#useLayoutEffect", "ragents-host-value:react#useMemo", "ragents-host-value:react#useRef", "ragents-host-value:react#useState", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toKebabCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toLucideIconData.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toCamelCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toPascalCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/mergeClasses.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/defaultAttributes.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/buildLucideIconNode.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/buildLucideIconForReact.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/hasA11yProp.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/context.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/Icon.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/createLucideIcon.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/arrow-left.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/layout-grid.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/x.ts", "ragents-host-value:@ragents/web/ui#Alert", "ragents-host-value:@ragents/web/ui#Badge", "ragents-host-value:@ragents/web/ui#Button", "ragents-host-value:@ragents/web/ui#Dialog", "ragents-host-value:@ragents/web/ui#DialogContent", "ragents-host-value:@ragents/web/ui#DialogTitle", "ragents-host-value:@ragents/web/ui#Empty", "ragents-host-value:@ragents/web/ui#EmptyContent", "ragents-host-value:@ragents/web/ui#EmptyDescription", "ragents-host-value:@ragents/web/ui#EmptyHeader", "ragents-host-value:@ragents/web/ui#EmptyMedia", "ragents-host-value:@ragents/web/ui#EmptyTitle", "ragents-host-value:@ragents/web/ui#Input", "ragents-host-value:@ragents/web/ui#Spinner", "ragents-host-value:@ragents/web/ui#Textarea", "ragents-host-value:@ragents/web/ui#cn", "ragents-host-value:@ragents/web/Toolbar#ToolbarCopy", "ragents-host-value:@ragents/web/Toolbar#ToolbarItem", "ragents-host-value:@ragents/web/Toolbar#ToolbarLabel", "ragents-host-value:@ragents/web/Toolbar#ToolbarText", "../../../plugins/ragents.actor-programs/web/AppsPanel.tsx", "ragents-host-value:@ragents/web/run-view#runActorFrom", "ragents-host-value:@ragents/web/run-view#runViewFrom", "ragents-host-value:@ragents/web/SourceCode#SourceCode", "../../../plugins/ragents.actor-programs/web/program-state.ts", "ragents-host-value:react/jsx-runtime#Fragment", "ragents-host-value:react/jsx-runtime#jsx", "ragents-host-value:react/jsx-runtime#jsxs", "../../../plugins/ragents.actor-programs/web/ProgramSource.tsx", "../../../plugins/ragents.actor-programs/web/function-call.ts", "../../../plugins/ragents.actor-programs/web/function-input.ts", "../../../plugins/ragents.actor-programs/web/FunctionForm.tsx", "../../../plugins/ragents.actor-programs/web/ExpandIcon.tsx", "../../../plugins/ragents.actor-programs/web/state-revision.ts", "../../../plugins/ragents.actor-programs/web/invocations.ts", "../../../plugins/ragents.actor-programs/web/context.ts", "ragents-host-value:@ragents/web/run-panel/input-bridge#hostInputEnabled", "ragents-host-value:@ragents/web/run-panel/input-bridge#isRunPanelKeyboardMessage", "ragents-host-value:@ragents/web/run-panel/input-bridge#relayFrameInput", "ragents-host-value:@ragents/web/theme#useResolvedTheme", "ragents-host-value:@ragents/web/api#sendActorMessage", "ragents-host-value:@ragents/engine/src/http/contracts#actorByHandle", "ragents-host-value:@ragents/web/actor-conversation#actorChatMessages", "ragents-host-value:@ragents/web/chat/chat-target#programChatNotice", "../../../plugins/ragents.actor-programs/web/chat-state.ts", "ragents-host-value:@ragents/web/chat/useAttachmentCapabilities#getAttachmentCapabilities", "../../../plugins/ragents.actor-programs/web/ActorViewFrame.tsx", "../../../plugins/ragents.actor-programs/web/FullscreenHost.tsx", "../../../plugins/ragents.actor-programs/web/EmbeddedApps.tsx", "../../../plugins/ragents.actor-programs/web/index.tsx"],
4
+ "sourcesContent": ["export const read = (specifier, name) => {\n const module = globalThis[\"__ragentsHostModules\"]?.[specifier];\n if (module === undefined) throw new Error(`The host does not provide ${specifier}`);\n if (!(name in module)) throw new Error(`The host does not provide ${name} from ${specifier}; the bundle was built against a newer host`);\n return module[name];\n};", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"pluginRoutePrefixFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"useSurfaceController\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/guards\", \"isRecord\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/rpc\", \"rpc\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/access-token\", \"withAccessToken\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"ACTOR_INVOCATIONS_STATE_ID\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"ACTOR_PROGRAMS_STATE_ID\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"ACTOR_STATE_ID\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/host/plugin-support/actor-programs/contract\", \"actorProgramContracts\");\n", "export const actorFunctionParameterTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"string[]\", \"number[]\", \"json\"] as const;\n\nexport type ActorFunctionParameterType = typeof actorFunctionParameterTypes[number];\n", "import type { ChatAttachmentInput } from \"./events\";\n\nexport const MAX_CHAT_ATTACHMENTS = 8;\nexport const MAX_CHAT_ATTACHMENT_BYTES = 20 * 1024 * 1024;\nexport const MAX_CHAT_REQUEST_BYTES = 29 * 1024 * 1024;\n\nexport const chatAttachmentMediaType = (name: string, mediaType: string): string => {\n const explicit = mediaType.trim().toLowerCase();\n if (explicit) return explicit === \"video/quicktime\" ? \"video/mov\" : explicit;\n const types: Record<string, string> = {\n png: \"image/png\", jpg: \"image/jpeg\", jpeg: \"image/jpeg\", gif: \"image/gif\", webp: \"image/webp\",\n avif: \"image/avif\", svg: \"image/svg+xml\", pdf: \"application/pdf\",\n mp4: \"video/mp4\", webm: \"video/webm\", mov: \"video/mov\", mpeg: \"video/mpeg\", mpg: \"video/mpeg\",\n txt: \"text/plain\", md: \"text/markdown\", csv: \"text/csv\", tsv: \"text/tab-separated-values\",\n json: \"application/json\", jsonl: \"application/x-ndjson\", xml: \"application/xml\",\n yaml: \"application/yaml\", yml: \"application/yaml\", ts: \"text/plain\", tsx: \"text/plain\",\n js: \"application/javascript\", py: \"text/plain\", cs: \"text/plain\", fs: \"text/plain\",\n html: \"text/html\", css: \"text/css\", log: \"text/plain\",\n };\n return types[name.split(\".\").at(-1)?.toLowerCase() ?? \"\"] ?? \"application/octet-stream\";\n};\n\nexport const parseChatAttachments = (value: unknown): ChatAttachmentInput[] => {\n if (value === undefined) return [];\n if (!Array.isArray(value) || value.length > MAX_CHAT_ATTACHMENTS) {\n throw new Error(`Attachments must be a list of at most ${MAX_CHAT_ATTACHMENTS} files.`);\n }\n let total = 0;\n return value.map((entry, index) => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) throw new Error(`Attachment ${index + 1} is invalid.`);\n const { name, mediaType, data } = entry as Record<string, unknown>;\n if (typeof name !== \"string\" || !name.trim() || name.length > 255 || /[/\\\\\\u0000-\\u001f\\u007f]/.test(name)\n || name === \".\" || name === \"..\") throw new Error(`Attachment ${index + 1} needs a valid file name without a path.`);\n const normalizedType = typeof mediaType === \"string\" ? chatAttachmentMediaType(name, mediaType) : \"\";\n if (!/^[a-z0-9!#$&^_.+-]+\\/[a-z0-9!#$&^_.+-]+$/i.test(normalizedType)) {\n throw new Error(`Attachment ${name} needs a valid MIME type.`);\n }\n if (typeof data === \"string\" && data.length > Math.ceil(MAX_CHAT_ATTACHMENT_BYTES / 3) * 4)\n throw new Error(\"Attachments may be at most 20 MiB in total.\");\n if (typeof data !== \"string\" || data.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(data)) {\n throw new Error(`Attachment ${name} contains invalid Base64.`);\n }\n const padding = data.endsWith(\"==\") ? 2 : data.endsWith(\"=\") ? 1 : 0;\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n if (padding && (alphabet.indexOf(data[data.length - padding - 1]) & (padding === 2 ? 15 : 3)) !== 0) {\n throw new Error(`Attachment ${name} contains non-canonical Base64.`);\n }\n total += data.length / 4 * 3 - padding;\n if (total > MAX_CHAT_ATTACHMENT_BYTES) throw new Error(\"Attachments may be at most 20 MiB in total.\");\n return { name, mediaType: normalizedType, data };\n });\n};\n", "export type Role = \"user\" | \"assistant\" | \"thinking\" | \"tool\" | \"system\" | \"action\";\n\nexport interface ChatAttachmentInput {\n name: string;\n mediaType: string;\n data: string;\n}\n\nexport interface ChatAttachment {\n name: string;\n mediaType: string;\n size: number;\n url: string;\n}\n\nexport interface ChatAttachmentCapabilities {\n input: readonly string[];\n model: string;\n}\n\nexport interface ToolInfo {\n id: string;\n name: string;\n arguments: string;\n result?: string;\n isError?: boolean;\n}\n\nexport interface ChatTextCursor {\n conversationId: string;\n sequence: number;\n /** Accumulated non-whitespace UTF-16 units in the turn anchored by sequence. */\n offset: number;\n}\n\nexport interface ChatJournalCursor {\n conversationId: string;\n eventId: string;\n sequence: number;\n}\n\n/**\n * An action waiting for input from the user. Shape and content of `payload` and `result`\n * belong to the plugin in `owner`; a set `status` means: done, the card is a record.\n */\nexport interface PendingAction {\n actionId: string;\n owner: string | null;\n payload: unknown;\n status?: \"approved\" | \"dismissed\";\n result?: unknown;\n}\n\nexport interface Message {\n key: string;\n role: Role;\n /** Sender identifier for display; independent of role and bubble label. */\n sender?: string;\n text: string;\n textCursor?: ChatTextCursor;\n closed?: boolean;\n attachments?: ChatAttachment[];\n tool?: ToolInfo;\n action?: PendingAction;\n /** ISO timestamp of the message; display optional (ChatMessages showTimestamps). */\n at?: string;\n /** The ActorInput behind an incoming message; the steering mark hangs on it. */\n inputId?: string;\n /** The message was fed into an already running turn instead of starting its own. */\n steered?: boolean;\n /** Colored speech bubble instead of running text, e.g. for multi-party conversations. */\n bubble?: { color: string; side: \"start\" | \"end\"; label?: string };\n}\n\nexport interface ChatStartupStatus {\n status: \"preparing\" | \"failed\";\n message: string;\n}\n\nexport type ChatEvent =\n | { kind: \"reset\"; reason?: \"conversation-reset\"; conversationId: string | null }\n | { kind: \"replay-end\"; conversationId: string | null }\n | { kind: \"user\"; text: string; inputId?: string; at?: string; attachments?: ChatAttachment[] }\n | { kind: \"steered\"; inputId: string }\n | { kind: \"text\"; delta: string; at?: string; cursor: ChatTextCursor }\n | { kind: \"thinking\"; delta: string; at?: string }\n | { kind: \"tool\"; id: string; name: string; arguments: string; label?: string; at?: string }\n | { kind: \"tool-result\"; id: string; result: string; isError?: boolean }\n | { kind: \"action\"; actionId: string; owner: string | null; text: string; payload: unknown; at?: string }\n | { kind: \"action-resolved\"; actionId: string; status: \"approved\" | \"dismissed\"; result: unknown }\n | { kind: \"system\"; text: string; at?: string }\n | { kind: \"status\"; running: boolean; startup?: ChatStartupStatus }\n | { kind: \"turn-done\" }\n | { kind: \"plugin\"; pluginId: string; type: string; payload?: unknown; at?: string; journal?: ChatJournalCursor };\n\nlet keyCounter = 0;\n\n// crypto.randomUUID is missing outside secure contexts, e.g. for a host served over http.\nconst newKey = (): string => typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\n ? crypto.randomUUID()\n : `qsl-${Date.now().toString(36)}-${(keyCounter += 1).toString(36)}`;\n\nfunction openMessageIndex(messages: Message[]): number {\n for (let index = messages.length - 1; index >= 0; index--) {\n const message = messages[index];\n if (!message.closed && (message.role === \"assistant\" || message.role === \"thinking\")) return index;\n }\n return -1;\n}\n\nfunction closeOpen(messages: Message[]): Message[] {\n const index = openMessageIndex(messages);\n if (index === -1) {\n return messages;\n }\n return messages.map((message, position) => position === index ? { ...message, closed: true } : message);\n}\n\nfunction appendDelta(messages: Message[], role: Role, delta: string, at?: string, textCursor?: ChatTextCursor): Message[] {\n const index = openMessageIndex(messages);\n const current = messages[index];\n if (current && current.role === role\n && current.textCursor?.conversationId === textCursor?.conversationId\n && current.textCursor?.sequence === textCursor?.sequence) {\n return messages.map((message, position) => position === index\n ? { ...message, text: message.text + delta, ...(textCursor ? { textCursor } : {}) }\n : message);\n }\n return [...closeOpen(messages), { key: newKey(), role, text: delta, at, ...(textCursor ? { textCursor } : {}) }];\n}\n\n/** Incoming messages leave the running output block open. */\nexport function applyEvent(messages: Message[], event: ChatEvent): Message[] {\n switch (event.kind) {\n case \"reset\":\n return [];\n case \"user\":\n return [...messages, { key: newKey(), role: \"user\", text: event.text, closed: true, at: event.at,\n ...(event.inputId ? { inputId: event.inputId } : {}),\n ...(event.attachments?.length ? { attachments: event.attachments } : {}) }];\n case \"steered\":\n return messages.map((message) => message.inputId === event.inputId ? { ...message, steered: true } : message);\n case \"text\":\n return appendDelta(messages, \"assistant\", event.delta, event.at, event.cursor);\n case \"thinking\":\n return appendDelta(messages, \"thinking\", event.delta, event.at);\n case \"tool\":\n return [\n ...closeOpen(messages),\n {\n key: newKey(),\n role: \"tool\",\n text: event.label ?? event.name,\n closed: true,\n tool: { id: event.id, name: event.name, arguments: event.arguments },\n at: event.at,\n },\n ];\n case \"tool-result\": {\n const index = messages.map((message) => message.tool?.id).lastIndexOf(event.id);\n return messages.map((message, position) =>\n position === index && message.tool\n ? { ...message, tool: { ...message.tool, result: event.result, isError: event.isError } }\n : message,\n );\n }\n case \"action\":\n return [\n ...closeOpen(messages),\n {\n key: newKey(),\n role: \"action\",\n text: event.text,\n closed: true,\n action: { actionId: event.actionId, owner: event.owner, payload: event.payload },\n at: event.at,\n },\n ];\n case \"action-resolved\":\n return messages.map((message) =>\n message.action?.actionId === event.actionId\n ? { ...message, action: { ...message.action, status: event.status, result: event.result } }\n : message,\n );\n case \"system\":\n return [...closeOpen(messages), { key: newKey(), role: \"system\", text: event.text, closed: true, at: event.at }];\n case \"turn-done\":\n return closeOpen(messages);\n default:\n return messages;\n }\n}\n\nexport function prettyJson(value: string): string {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n}\n\nexport function compactToolLine(tool: ToolInfo): string {\n const args = tool.arguments.replace(/\\s+/g, \" \").trim();\n const line = args && args !== \"{}\" ? `${tool.name} ${args}` : tool.name;\n return line.length > 160 ? `${line.slice(0, 160)} ...` : line;\n}\n\nexport { MAX_CHAT_ATTACHMENTS, MAX_CHAT_ATTACHMENT_BYTES, MAX_CHAT_REQUEST_BYTES, chatAttachmentMediaType, parseChatAttachments } from \"./chat-attachments\";\n", "import { isRecord } from \"@ragents/web/lib/guards\";\nimport { parseChatAttachments, type ChatAttachmentInput } from \"quassel/events\";\n\nexport const RUN_APP_BRIDGE_VERSION = 1;\n\nexport const RUN_APP_FRAME_READY = \"ragents.app.frame-ready\";\nexport const RUN_APP_CONNECTED = \"ragents.app.connected\";\nexport const RUN_APP_READY = \"ragents.app.ready\";\nexport const RUN_APP_THEME = \"ragents.app.theme\";\nexport const RUN_APP_INVOKE = \"ragents.app.invoke\";\nexport const RUN_APP_GET_STATE = \"ragents.app.get-state\";\nexport const RUN_APP_STATE = \"ragents.app.state\";\nexport const RUN_APP_INVOCATION = \"ragents.app.invocation\";\nexport const RUN_APP_ERROR = \"ragents.app.error\";\nexport const RUN_APP_CHAT_WATCH = \"ragents.app.chat-watch\";\nexport const RUN_APP_CHAT_UNWATCH = \"ragents.app.chat-unwatch\";\nexport const RUN_APP_CHAT_SEND = \"ragents.app.chat-send\";\nexport const RUN_APP_CHAT_STATE = \"ragents.app.chat-state\";\nexport const RUN_APP_CHAT_ACK = \"ragents.app.chat-ack\";\n\nexport type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nexport interface RunAppInvokeRequest {\n type: typeof RUN_APP_INVOKE;\n version: typeof RUN_APP_BRIDGE_VERSION;\n requestId: string;\n actionId: string;\n input: JsonValue;\n}\n\nexport interface RunAppGetStateRequest {\n type: typeof RUN_APP_GET_STATE;\n version: typeof RUN_APP_BRIDGE_VERSION;\n requestId: string;\n}\n\nexport type RunAppChatRequest = {\n version: typeof RUN_APP_BRIDGE_VERSION;\n requestId: string;\n actor: string;\n} & (\n | { type: typeof RUN_APP_CHAT_WATCH }\n | { type: typeof RUN_APP_CHAT_UNWATCH }\n | { type: typeof RUN_APP_CHAT_SEND; text: string; attachments?: ChatAttachmentInput[] }\n);\n\nexport type RunAppBridgeRequest = RunAppInvokeRequest | RunAppGetStateRequest | RunAppChatRequest;\n\nexport type RunAppBridgeValidation =\n | { ok: true; request: RunAppBridgeRequest }\n | { ok: false; requestId?: string; error: string };\n\nconst ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;\nconst MAX_INPUT_LENGTH = 64 * 1024;\nconst MAX_DEPTH = 24;\n\nexport const isJsonValue = (value: unknown, depth = 0): value is JsonValue => {\n if (depth > MAX_DEPTH) return false;\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (Array.isArray(value)) return value.every((entry) => isJsonValue(entry, depth + 1));\n if (!isRecord(value)) return false;\n return Object.entries(value).every(([key, entry]) => key.length <= 256 && isJsonValue(entry, depth + 1));\n};\n\nconst requestIdFrom = (value: unknown): string | undefined =>\n typeof value === \"string\" && ID_PATTERN.test(value) ? value : undefined;\n\nconst inputWithinLimit = (value: JsonValue): boolean => {\n try {\n return new TextEncoder().encode(JSON.stringify(value)).byteLength <= MAX_INPUT_LENGTH;\n } catch {\n return false;\n }\n};\n\nexport const validateRunAppBridgeRequest = (value: unknown): RunAppBridgeValidation => {\n if (!isRecord(value)) return { ok: false, error: \"The app message is not an object\" };\n const requestId = requestIdFrom(value.requestId);\n if (!requestId) return { ok: false, error: \"The app message contains no valid requestId\" };\n if (value.version !== RUN_APP_BRIDGE_VERSION) {\n return { ok: false, requestId, error: \"The app uses an unsupported bridge version\" };\n }\n if (value.type === RUN_APP_GET_STATE) {\n return { ok: true, request: { type: RUN_APP_GET_STATE, version: RUN_APP_BRIDGE_VERSION, requestId } };\n }\n if (value.type === RUN_APP_CHAT_WATCH || value.type === RUN_APP_CHAT_UNWATCH || value.type === RUN_APP_CHAT_SEND) {\n if (typeof value.actor !== \"string\" || !/^@?[\\p{L}\\p{N}_-]{1,64}$/u.test(value.actor)) {\n return { ok: false, requestId, error: \"The chat target must be primary or an actor handle such as @reviewer\" };\n }\n const common = { version: RUN_APP_BRIDGE_VERSION, requestId, actor: value.actor } as const;\n if (value.type !== RUN_APP_CHAT_SEND) return { ok: true, request: { ...common, type: value.type } };\n let attachments: ChatAttachmentInput[];\n try { attachments = parseChatAttachments(value.attachments); } catch (cause) {\n return { ok: false, requestId, error: cause instanceof Error ? cause.message : String(cause) };\n }\n if (typeof value.text !== \"string\" || (!value.text.trim() && !attachments.length) || !inputWithinLimit(value.text)) {\n return { ok: false, requestId, error: \"The chat message is empty or too large\" };\n }\n return { ok: true, request: { ...common, type: RUN_APP_CHAT_SEND, text: value.text.trim(), ...(attachments.length ? { attachments } : {}) } };\n }\n if (value.type !== RUN_APP_INVOKE) {\n return { ok: false, requestId, error: \"The app message has an unknown type\" };\n }\n if (typeof value.actionId !== \"string\" || !ID_PATTERN.test(value.actionId)) {\n return { ok: false, requestId, error: \"The app message contains no valid actionId\" };\n }\n if (!isJsonValue(value.input) || !inputWithinLimit(value.input)) {\n return { ok: false, requestId, error: \"The input of the app action is not a valid JSON value or too large\" };\n }\n return {\n ok: true,\n request: {\n type: RUN_APP_INVOKE,\n version: RUN_APP_BRIDGE_VERSION,\n requestId,\n actionId: value.actionId,\n input: value.input,\n },\n };\n};\n", "import { isRecord } from \"@ragents/web/lib/guards\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { withAccessToken } from \"@ragents/web/access-token\";\nimport { actorProgramContracts } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport {\n actorFunctionParameterTypes,\n type ActorFunctionParameterType,\n} from \"../parameter-types\";\nimport { isJsonValue, type JsonValue } from \"./bridge\";\n\nexport type RunAppInvocationStatus = \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\";\n\nexport interface RunAppAction {\n id: string;\n label: string;\n description?: string;\n confirmation: string | null;\n}\n\nexport type RunAppPlacement = { kind: \"canvas\"; anchorActorId: string };\n\nexport type RunAppInvocation = {\n id: string;\n actorId: string;\n actorHandle: string;\n appId: string;\n actionId: string;\n revision: string;\n output: string[];\n createdAt: string;\n requestId: string;\n} & (\n | { status: \"queued\" }\n | { status: \"running\"; startedAt: string }\n | { status: \"succeeded\"; startedAt: string; finishedAt: string; result: JsonValue }\n | { status: \"failed\" | \"cancelled\"; startedAt?: string; finishedAt: string; error: string }\n);\n\nexport interface RunApp {\n id: string;\n actorId: string;\n actorHandle: string;\n visible?: boolean;\n title: string;\n description?: string;\n revision: string;\n actions: RunAppAction[];\n placements: RunAppPlacement[];\n state: { version: 1; revision: number; values: JsonValue };\n invocations: RunAppInvocation[];\n}\n\nexport interface RunToolParameter {\n name: string;\n description: string;\n type: ActorFunctionParameterType;\n required: boolean;\n}\n\nexport interface RunToolTarget {\n actorId: string;\n handle: string | null;\n}\n\nexport interface RunScriptTool {\n actorId: string;\n actorHandle: string;\n functionId: string;\n revision: string;\n moduleId: string;\n name: string;\n description: string;\n parameters: RunToolParameter[];\n card: boolean;\n sourceHash: string;\n targets: RunToolTarget[];\n installedBy: string;\n}\n\nexport interface ActorProgramSourceFile {\n path: string;\n content: string;\n}\n\nexport interface ActorProgramsListing {\n apps: RunApp[];\n tools: RunScriptTool[];\n}\n\nexport interface ActorProgramsApi {\n list: (runId: string, signal?: AbortSignal) => Promise<ActorProgramsListing>;\n source: (runId: string, moduleId: string, signal?: AbortSignal) => Promise<ActorProgramSourceFile[]>;\n frameUrl: (runId: string, appId: string, revision: string) => string;\n invoke: (\n runId: string,\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n signal?: AbortSignal,\n ) => Promise<RunAppInvocation>;\n invocation: (runId: string, appId: string, invocationId: string, signal?: AbortSignal) => Promise<RunAppInvocation>;\n invokeFunction: (runId: string, actorHandle: string, revision: string, functionId: string, requestId: string, input: JsonValue, signal?: AbortSignal) => Promise<RunAppInvocation>;\n functionInvocation: (runId: string, actorHandle: string, invocationId: string, signal?: AbortSignal) => Promise<RunAppInvocation>;\n}\n\nconst ID_PATTERN = /^[A-Za-z0-9_-]{1,100}$/;\nconst VIEW_ID_PATTERN = /^[A-Za-z0-9_-]{1,130}$/;\nconst HASH_PATTERN = /^[a-f0-9]{64}$/;\nconst PARAMETER_TYPES = new Set<RunToolParameter[\"type\"]>(actorFunctionParameterTypes);\n\nconst requiredString = (value: unknown, field: string): string => {\n if (typeof value !== \"string\" || !value.trim()) throw new Error(`${field} is missing or empty`);\n return value;\n};\n\nconst optionalString = (value: unknown, field: string): string | undefined => {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") throw new Error(`${field} is not text`);\n return value;\n};\n\nconst idFrom = (value: unknown, field: string): string => {\n const id = requiredString(value, field);\n if (!ID_PATTERN.test(id)) throw new Error(`${field} is not a valid identifier`);\n return id;\n};\n\nconst unique = <T,>(values: T[], keyOf: (value: T) => string, label: string): T[] => {\n const ids = values.map(keyOf);\n if (new Set(ids).size !== ids.length) throw new Error(`${label} contains duplicate identifiers`);\n return values;\n};\n\nexport const runAppActionFrom = (value: unknown): RunAppAction => {\n if (!isRecord(value)) throw new Error(\"An app action is not an object\");\n if (value.confirmation !== null && typeof value.confirmation !== \"string\") {\n throw new Error(\"confirmation of an app action must be text or null\");\n }\n if (typeof value.confirmation === \"string\" && !value.confirmation.trim()) {\n throw new Error(\"confirmation of an app action must not be empty\");\n }\n return {\n id: idFrom(value.id, \"action.id\"),\n label: requiredString(value.label, \"action.label\"),\n ...(value.description !== undefined\n ? { description: optionalString(value.description, \"action.description\") as string }\n : {}),\n confirmation: value.confirmation,\n };\n};\n\nexport const runAppInvocationFrom = (value: unknown): RunAppInvocation => {\n if (!isRecord(value)) throw new Error(\"An app execution is not an object\");\n if (!Array.isArray(value.output) || value.output.some((line) => typeof line !== \"string\")) {\n throw new Error(\"output of an app execution is not a text list\");\n }\n const base = {\n id: idFrom(value.id, \"invocation.id\"),\n actorId: requiredString(value.actorId, \"invocation.actorId\"),\n actorHandle: requiredString(value.actorHandle, \"invocation.actorHandle\"),\n appId: requiredString(value.appId, \"invocation.appId\"),\n actionId: idFrom(value.actionId, \"invocation.actionId\"),\n revision: requiredString(value.revision, \"invocation.revision\"),\n output: value.output as string[],\n createdAt: requiredString(value.createdAt, \"invocation.createdAt\"),\n requestId: idFrom(value.requestId, \"invocation.requestId\"),\n };\n switch (value.status) {\n case \"queued\":\n return { ...base, status: \"queued\" };\n case \"running\":\n return { ...base, status: \"running\", startedAt: requiredString(value.startedAt, \"invocation.startedAt\") };\n case \"succeeded\": {\n if (!isJsonValue(value.result)) throw new Error(\"result of an app execution is not a JSON value\");\n return {\n ...base,\n status: \"succeeded\",\n startedAt: requiredString(value.startedAt, \"invocation.startedAt\"),\n finishedAt: requiredString(value.finishedAt, \"invocation.finishedAt\"),\n result: value.result,\n };\n }\n case \"failed\":\n case \"cancelled\":\n return {\n ...base,\n status: value.status,\n ...(value.startedAt !== undefined\n ? { startedAt: requiredString(value.startedAt, \"invocation.startedAt\") }\n : {}),\n finishedAt: requiredString(value.finishedAt, \"invocation.finishedAt\"),\n error: requiredString(value.error, \"invocation.error\"),\n };\n default:\n throw new Error(\"status of an app execution is invalid\");\n }\n};\n\nconst runAppPlacementFrom = (value: unknown): RunAppPlacement => {\n if (!isRecord(value)) throw new Error(\"An app placement is not an object\");\n if (value.kind === \"canvas\") {\n return {\n kind: \"canvas\",\n anchorActorId: requiredString(value.anchorActorId, \"placement.anchorActorId\"),\n };\n }\n throw new Error(\"kind of an app placement must be canvas\");\n};\n\nexport const runAppFrom = (value: unknown): RunApp => {\n if (!isRecord(value)) throw new Error(\"An app is not an object\");\n if (!Array.isArray(value.actions)) throw new Error(\"actions of an app is not a list\");\n if (!Array.isArray(value.invocations)) throw new Error(\"invocations of an app is not a list\");\n const rawPlacements = value.placements ?? [];\n if (!Array.isArray(rawPlacements)) throw new Error(\"placements of an app is not a list\");\n if (!isRecord(value.state) || value.state.version !== 1 || !Number.isSafeInteger(value.state.revision) || !isJsonValue(value.state.values)) throw new Error(\"state of a view does not match the state contract\");\n const actions = unique(value.actions.map(runAppActionFrom), (action) => action.id, \"actions\");\n const invocations = unique(\n value.invocations.map(runAppInvocationFrom),\n (invocation) => invocation.id,\n \"invocations\",\n );\n const actionIds = new Set(actions.map((action) => action.id));\n if (invocations.some((invocation) => !actionIds.has(invocation.actionId))) {\n throw new Error(\"An app execution refers to an unknown action\");\n }\n if (value.visible !== undefined && typeof value.visible !== \"boolean\") throw new Error(\"visible of an app is not a boolean\");\n if (rawPlacements.length > 1) throw new Error(\"placements of an app contains more than one placement\");\n const placements = rawPlacements.map(runAppPlacementFrom);\n const id = requiredString(value.id, \"view.id\");\n if (!VIEW_ID_PATTERN.test(id)) throw new Error(\"view.id is not a valid identifier\");\n const actorId = requiredString(value.actorId, \"view.actorId\");\n if (placements.some((placement) => placement.anchorActorId !== actorId)) throw new Error(\"The view must be placed at its own actor\");\n return {\n id,\n actorId,\n actorHandle: requiredString(value.actorHandle, \"view.actorHandle\"),\n visible: value.visible !== false,\n title: requiredString(value.title, \"app.title\"),\n ...(value.description !== undefined\n ? { description: optionalString(value.description, \"app.description\") as string }\n : {}),\n revision: requiredString(value.revision, \"app.revision\"),\n actions,\n placements,\n state: { version: 1, revision: value.state.revision as number, values: value.state.values },\n invocations,\n };\n};\n\nconst runToolParameterFrom = (value: unknown): RunToolParameter => {\n if (!isRecord(value)) throw new Error(\"A tool parameter is not an object\");\n if (typeof value.type !== \"string\" || !PARAMETER_TYPES.has(value.type as RunToolParameter[\"type\"])) {\n throw new Error(\"type of a tool parameter is invalid\");\n }\n if (typeof value.required !== \"boolean\") throw new Error(\"required of a tool parameter is not a boolean\");\n return {\n name: idFrom(value.name, \"parameter.name\"),\n description: requiredString(value.description, \"parameter.description\"),\n type: value.type as RunToolParameter[\"type\"],\n required: value.required,\n };\n};\n\nconst runToolTargetFrom = (value: unknown): RunToolTarget => {\n if (!isRecord(value)) throw new Error(\"A tool target is not an object\");\n if (value.handle !== null && typeof value.handle !== \"string\") {\n throw new Error(\"handle of a tool target must be text or null\");\n }\n return {\n actorId: requiredString(value.actorId, \"target.actorId\"),\n handle: value.handle,\n };\n};\n\nexport const runScriptToolFrom = (value: unknown): RunScriptTool => {\n if (!isRecord(value)) throw new Error(\"A script tool is not an object\");\n if (!Array.isArray(value.parameters)) throw new Error(\"parameters of a script tool is not a list\");\n if (!Array.isArray(value.targets)) throw new Error(\"targets of a script tool is not a list\");\n const sourceHash = requiredString(value.sourceHash, \"tool.sourceHash\");\n if (!HASH_PATTERN.test(sourceHash)) throw new Error(\"sourceHash of a script tool is invalid\");\n return {\n actorId: requiredString(value.actorId, \"tool.actorId\"),\n actorHandle: requiredString(value.actorHandle, \"tool.actorHandle\"),\n functionId: idFrom(value.functionId, \"tool.functionId\"),\n revision: requiredString(value.revision, \"tool.revision\"),\n moduleId: idFrom(value.moduleId, \"tool.moduleId\"),\n name: idFrom(value.name, \"tool.name\"),\n description: requiredString(value.description, \"tool.description\"),\n parameters: unique(value.parameters.map(runToolParameterFrom), (parameter) => parameter.name, \"parameters\"),\n card: value.card === true,\n sourceHash,\n targets: unique(value.targets.map(runToolTargetFrom), (target) => target.actorId, \"targets\"),\n installedBy: requiredString(value.installedBy, \"tool.installedBy\"),\n };\n};\n\nconst actorProgramSourceFileFrom = (value: unknown): ActorProgramSourceFile => {\n if (!isRecord(value)) throw new Error(\"A source file is not an object\");\n if (typeof value.content !== \"string\") throw new Error(\"content of a source file is not text\");\n return {\n path: requiredString(value.path, \"source.path\"),\n content: value.content,\n };\n};\n\nexport const actorProgramSourceFrom = (value: unknown): ActorProgramSourceFile[] => {\n if (!isRecord(value) || !Array.isArray(value.files)) throw new Error(\"The source list does not match the contract\");\n return unique(value.files.map(actorProgramSourceFileFrom), (file) => file.path, \"files\");\n};\n\nexport const actorProgramsListingFrom = (value: unknown): ActorProgramsListing => {\n if (!isRecord(value) || !Array.isArray(value.apps) || !Array.isArray(value.tools)) {\n throw new Error(\"The list of actor programs does not match the contract\");\n }\n return {\n apps: unique(value.apps.map(runAppFrom), (app) => app.id, \"apps\"),\n tools: unique(value.tools.map(runScriptToolFrom), (tool) => tool.name, \"tools\"),\n };\n};\n\nconst segment = (value: string): string => encodeURIComponent(value);\n\nconst frameBase = (routePrefix: string, runId: string): string =>\n `${routePrefix}/runs/${segment(runId)}/apps`;\n\nexport const createActorProgramsApi = (routePrefix: string): ActorProgramsApi => ({\n list: async (runId, signal) =>\n actorProgramsListingFrom(await rpc.call(actorProgramContracts.apps, { runId }, { signal })),\n source: async (runId, moduleId, signal) =>\n actorProgramSourceFrom(await rpc.call(actorProgramContracts.source, { runId, moduleId }, { signal })),\n frameUrl: (runId, appId, revision) =>\n withAccessToken(`${frameBase(routePrefix, runId)}/${segment(appId)}/frame?revision=${segment(revision)}`),\n invoke: async (runId, appId, revision, actionId, requestId, input, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.action, { runId, appId, revision, actionId, requestId, input }, { signal })),\n invocation: async (runId, appId, invocationId, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.invocation, { runId, appId, invocationId }, { signal })),\n invokeFunction: async (runId, actorHandle, revision, functionId, requestId, input, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.function, { runId, actorHandle, revision, functionId, requestId, input }, { signal })),\n functionInvocation: async (runId, actorHandle, invocationId, signal) =>\n runAppInvocationFrom(await rpc.call(actorProgramContracts.functionInvocation, { runId, actorHandle, invocationId }, { signal })),\n});\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/AccessContext\", \"useAccess\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"createContext\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"createElement\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"forwardRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useCallback\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useContext\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useLayoutEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useMemo\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useState\");\n", "/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string?.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n", "import { toKebabCase } from './toKebabCase';\nimport type { LucideIconData, LucideIconNode } from '../build/types';\n\n/**\n * Converts legacy `(name, iconNode, aliases?)` icon arguments into icon data object format.\n */\nexport function toLucideIconData(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases: string[] = [],\n): LucideIconData {\n if (iconNode == null) {\n throw new Error('[lucide]: iconNode is required when icon name is used');\n }\n\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...(aliases.length > 0 ? { aliases } : {}),\n };\n}\n", "/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) => {\n let out = '';\n let upperNext = false;\n\n for (const ch of string) {\n if (ch === '-' || ch === '_' || ch <= ' ') {\n upperNext = out.length > 0;\n continue;\n }\n\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n\n upperNext = false;\n }\n\n return out as string;\n};\n", "import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n", "/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n", "const defaultAttributes = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n} as const;\n\nexport default defaultAttributes;\n", "import type { LucideBuildParams, LucideIconData, LucideIconNode, SVGProps } from './types';\nimport defaultAttributes from './defaultAttributes';\nimport { mergeClasses } from '../utils/mergeClasses';\n\nfunction isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Creates a Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconNode(icon: LucideIconData, params: LucideBuildParams = {}): LucideIconNode {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName: string) =>\n attributeNames[attributeName] ?? attributeName;\n\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes['width'];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes['height'];\n const aliasClassNames =\n icon.aliases\n ?.filter((alias: string): alias is string => typeof alias === 'string' && alias.trim() !== '')\n .map((alias: string) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...(icon.name ? [`lucide-${icon.name}`] : []), ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(' ').filter(Boolean) ?? [];\n const className =\n params.includeDefaultClasses === false\n ? mergeClasses(...classNamesFromClassName)\n : mergeClasses('lucide', ...iconClassNames, ...classNamesFromClassName);\n\n const calculatedStrokeWidth = params.absoluteStrokeWidth\n ? (Number(params.strokeWidth ?? defaultAttributes['stroke-width']) *\n Number(icon.size ?? icon.width ?? defaultAttributes['width'])) /\n Number(params.size ?? params.width ?? defaultAttributes['width'])\n : (params.strokeWidth ?? defaultAttributes['stroke-width']);\n\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {} as SVGProps),\n ...('color' in params &&\n params.color && {\n [getAttributeName('stroke')]: params.color,\n }),\n ...('size' in params &&\n isDefined(params.size) && {\n [getAttributeName('width')]: params.size,\n [getAttributeName('height')]: params.size,\n }),\n ...('width' in params &&\n isDefined(params.width) && {\n [getAttributeName('width')]: params.width,\n }),\n ...('height' in params &&\n isDefined(params.height) && {\n [getAttributeName('height')]: params.height,\n }),\n [getAttributeName('stroke-width')]: calculatedStrokeWidth,\n ...(className && {\n [getAttributeName('class')]: className,\n }),\n [getAttributeName('viewBox')]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...(params.hasA11yProp === false\n ? {\n [getAttributeName('aria-hidden')]: 'true',\n }\n : {}),\n ...('attributes' in params && params.attributes),\n };\n\n return [\n 'svg',\n attributes,\n icon.node.map((child): LucideIconNode => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke\n ? { [getAttributeName('vector-effect')]: 'non-scaling-stroke', ...attrs }\n : attrs;\n\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n }),\n ];\n}\n\nexport default buildLucideIconNode;\n", "import buildLucideIconNode from './buildLucideIconNode';\nimport type { LucideBuildParams, LucideIconData, LucideIconNode } from './types';\n\n/**\n * Creates a React-compatible Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconForReact(\n icon: LucideIconData,\n params: LucideBuildParams = {},\n): LucideIconNode {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: 'className',\n 'stroke-width': 'strokeWidth',\n 'stroke-linecap': 'strokeLinecap',\n 'stroke-linejoin': 'strokeLinejoin',\n 'vector-effect': 'vectorEffect',\n },\n });\n}\n\nexport default buildLucideIconForReact;\n", "/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: object) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n", "'use client';\n\nimport { createContext, createElement, type ReactNode, useContext, useMemo } from 'react';\nimport { LucideProps } from './types';\n\ntype LucideConfig = {\n size: number;\n color: string;\n strokeWidth: number;\n /**\n * @deprecated Use `nonScalingStroke` instead.\n */\n absoluteStrokeWidth: boolean;\n nonScalingStroke: boolean;\n className: string;\n};\n\nconst LucideContext = createContext<LucideProps>({});\n\ntype LucideProviderProps = {\n children: ReactNode;\n} & Partial<LucideConfig>;\n\nexport function LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n}: LucideProviderProps) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className],\n );\n\n return createElement(LucideContext.Provider, { value }, children);\n}\n\nexport const useLucideContext = () => useContext(LucideContext);\n", "'use client';\n\nimport { createElement, forwardRef } from 'react';\nimport { buildLucideIconForReact, hasA11yProp, mergeClasses } from '@lucide/shared';\nimport { LucideIconData, LucideIconNode, LucideProps } from './types';\nimport { useLucideContext } from './context';\n\ntype IconComponentProps = LucideProps &\n (\n | {\n iconNode: LucideIconNode[];\n icon?: never;\n }\n | {\n icon: LucideIconData;\n iconNode?: never;\n }\n );\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {boolean} props.nonScalingStroke - Whether to use non scaling strokes\n * @param {string} props.className - The class name of the icon\n * @param {LucideIconNode[]} props.children - The children of the icon\n * @param {LucideIconNode[]} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = '',\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24,\n },\n ...rest\n },\n ref,\n ) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = 'currentColor',\n className: contextClass = '',\n } = useLucideContext() ?? {};\n\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest,\n });\n\n return createElement(\n name,\n {\n ref,\n ...svgAttributes,\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n", "import { createElement, forwardRef } from 'react';\nimport { toLucideIconData, toPascalCase } from '@lucide/shared';\nimport { LucideIcon, LucideIconData, LucideIconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Creates a Lucide icon component from icon data.\n *\n * @param icon Icon data object.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(icon: LucideIconData): LucideIcon;\n\n/**\n * Creates a Lucide icon component from the legacy icon arguments.\n *\n * @param iconName Icon name.\n * @param iconNode Icon node.\n * @param aliases Optional icon aliases.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases?: string[],\n): LucideIcon;\n\nfunction createLucideIcon(\n iconDataOrName: LucideIconData | string,\n iconNode: LucideIconNode[] = [],\n aliases: string[] = [],\n): LucideIcon {\n const iconData =\n typeof iconDataOrName === 'string'\n ? toLucideIconData(iconDataOrName, iconNode, aliases)\n : iconDataOrName;\n\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props,\n }),\n );\n\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n\n return Component;\n}\n\nexport default createLucideIcon;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-left',\n size: 24,\n node: [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTIgMTktNy03IDctNyIgLz4KICA8cGF0aCBkPSJNMTkgMTJINSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon(__iconData);\n\nexport default ArrowLeft;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'layout-grid',\n size: 24,\n node: [\n ['rect', { width: '7', height: '7', x: '3', y: '3', rx: '1', key: '1g98yp' }],\n ['rect', { width: '7', height: '7', x: '14', y: '3', rx: '1', key: '6d4xhi' }],\n ['rect', { width: '7', height: '7', x: '14', y: '14', rx: '1', key: 'nxv5o0' }],\n ['rect', { width: '7', height: '7', x: '3', y: '14', rx: '1', key: '1bb6yr' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name LayoutGrid\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIzIiB5PSIzIiByeD0iMSIgLz4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIxNCIgeT0iMyIgcng9IjEiIC8+CiAgPHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iNyIgeD0iMTQiIHk9IjE0IiByeD0iMSIgLz4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIzIiB5PSIxNCIgcng9IjEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/layout-grid\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LayoutGrid = createLucideIcon(__iconData);\n\nexport default LayoutGrid;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'x',\n size: 24,\n node: [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon(__iconData);\n\nexport default X;\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Alert\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Badge\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Button\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Dialog\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"DialogTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Empty\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyDescription\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyHeader\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyMedia\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Input\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Spinner\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Textarea\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"cn\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarCopy\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarText\");\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { ArrowLeftIcon, LayoutGridIcon } from \"lucide-react\";\nimport { Alert, Badge, Button, cn, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Spinner } from \"@ragents/web/ui\";\nimport { ToolbarCopy, ToolbarItem, ToolbarLabel, ToolbarText } from \"@ragents/web/Toolbar\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type PropsWithChildren,\n} from \"react\";\nimport { askPayloadOf, ASK_PLUGIN_ID } from \"@ragents/plugins/ragents.ask/ask-payload\";\nimport { answerQuestion } from \"@ragents/plugins/ragents.ask/web/api\";\nimport { QuestionCard } from \"@ragents/plugins/ragents.ask/web/QuestionCard\";\nimport { ACTOR_PROGRAMS_STATE_ID } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport {\n useSurfaceController,\n type SessionContext,\n type SessionHeaderContext,\n type WorkspaceTabContext,\n} from \"@ragents/web/PluginRegistry\";\nimport { runViewFrom, type RunAction } from \"@ragents/web/run-view\";\nimport { useSurfaceEntities } from \"@ragents/plugins/ragents.orchestration/web/surface-entities\";\nimport { SURFACE_TILE_DRAG_TYPE } from \"@ragents/plugins/ragents.orchestration/web/tile-docking\";\nimport { ProgramSlotContext, type ProgramSlot } from \"@ragents/plugins/ragents.orchestration/web/program-slot\";\nimport {\n type RunApp,\n type RunAppInvocation,\n type ActorProgramsApi,\n type ActorProgramsListing,\n type RunScriptTool,\n} from \"./api\";\nimport type { JsonValue } from \"./bridge\";\nimport { actorProgramSourceView, ProgramSource } from \"./ProgramSource\";\nimport { FunctionForm } from \"./FunctionForm\";\nimport { ExpandIcon } from \"./ExpandIcon\";\nimport { actorProgramsRevision } from \"./state-revision\";\nimport { actorProgramViews, currentActorListing } from \"./program-state\";\nimport { activeActorInvocations, readActorInvocation } from \"./invocations\";\nimport { ActorProgramsContext, useActorPrograms, type ActorProgramsContextValue } from \"./context\";\n\nexport { useActorPrograms, type ActorProgramsContextValue } from \"./context\";\n\nexport const RUN_TOOLS_TAB_ID = \"ragents.actor-programs.tools\";\n\nconst entryIconClass = \"flex size-[34px] items-center justify-center rounded-[10px] bg-[color-mix(in_srgb,var(--primary)_12%,var(--background))] text-primary\";\nconst headClass = \"grid flex-none grid-cols-[auto_minmax(0,1fr)] items-center gap-2.5 border-b border-border-soft px-workspace-inset py-[9px]\";\nconst sectionLabelClass = \"mb-2 text-[0.66rem] tracking-[0.075em] text-muted-foreground uppercase\";\nconst quickIconClass = \"grid size-[30px] flex-none place-items-center rounded-lg border border-info/25 bg-glass-app text-info\";\n\nconst ACTIVE_STATUSES = new Set([\"queued\", \"running\"]);\nconst POLL_INTERVAL = 700;\n\nconst replaceInvocation = (\n listing: ActorProgramsListing | undefined,\n invocation: RunAppInvocation,\n): ActorProgramsListing | undefined => listing && ({\n ...listing,\n apps: listing.apps.map((app) => {\n if (app.actorId !== invocation.actorId || app.revision !== invocation.revision) return app;\n const exists = app.invocations.some((entry) => entry.id === invocation.id);\n return {\n ...app,\n invocations: exists\n ? app.invocations.map((entry) => entry.id === invocation.id ? invocation : entry)\n : [...app.invocations, invocation],\n };\n }),\n});\n\nexport function ActorProgramsProvider({\n api,\n children,\n session,\n}: PropsWithChildren<{ api: ActorProgramsApi; session: SessionContext }>) {\n const runId = session.session.id;\n const canInspect = useAccess().can(\"runs.inspect\");\n const [storedListing, setListing] = useState<ActorProgramsListing>();\n const listing = useMemo(() => currentActorListing(storedListing, session.runView), [storedListing, session.runView]);\n const [error, setError] = useState<string>();\n const [fullscreen, setFullscreen] = useState<{ runId: string; appId: string }>();\n const visibleApps = actorProgramApps(session).filter((app) => app.app.visible !== false);\n const fullscreenAppId = fullscreen?.runId === runId && visibleApps.some((app) => app.id === fullscreen.appId)\n ? fullscreen.appId : undefined;\n const closeFullscreen = useCallback(() => setFullscreen(undefined), []);\n const openFullscreen = useCallback((appId: string) => {\n if (!actorProgramApps(session).some((app) => app.id === appId && app.app.visible !== false)) {\n throw new Error(\"The actor view is not available on the surface.\");\n }\n setFullscreen({ runId, appId });\n }, [runId, session]);\n useEffect(() => { if (fullscreen && !fullscreenAppId) setFullscreen(undefined); }, [fullscreen, fullscreenAppId]);\n const loadRevision = useRef(0);\n\n const refresh = useCallback(async () => {\n const revision = ++loadRevision.current;\n try {\n const next = await api.list(runId);\n if (revision !== loadRevision.current) return;\n setListing(next);\n setError(undefined);\n } catch (caught) {\n if (revision !== loadRevision.current) return;\n setError(caught instanceof Error ? caught.message : String(caught));\n }\n }, [api, runId]);\n\n const moduleRevision = useMemo(() => actorProgramsRevision(session.runView), [session.runView]);\n useEffect(() => {\n setListing(undefined);\n setError(undefined);\n return () => { loadRevision.current += 1; };\n }, [runId]);\n useEffect(() => { void refresh(); }, [moduleRevision, refresh]);\n\n const activeInvocations = useMemo(() => activeActorInvocations(listing?.apps ?? [], canInspect), [canInspect, listing]);\n const activeKey = activeInvocations.length > 0 ? JSON.stringify(activeInvocations) : \"\";\n\n useEffect(() => {\n if (!activeKey) return;\n const targets = activeInvocations;\n let disposed = false;\n let timer: number | undefined;\n let controller: AbortController | undefined;\n\n const poll = async () => {\n controller = new AbortController();\n const results = await Promise.allSettled(targets.map(async (target) => ({\n target,\n invocation: await readActorInvocation(api, runId, target, controller?.signal),\n })));\n if (disposed) return;\n const updates = results.flatMap((result) => result.status === \"fulfilled\" ? [result.value] : []);\n if (updates.length > 0) {\n setListing((current) => updates.reduce((next, update) => replaceInvocation(next, update.invocation), current));\n setError(undefined);\n }\n const failed = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\n if (failed) setError(failed.reason instanceof Error ? failed.reason.message : String(failed.reason));\n const finished = updates.some((update) => !ACTIVE_STATUSES.has(update.invocation.status));\n if (finished) {\n await refresh();\n } else if (!disposed) {\n timer = window.setTimeout(() => void poll(), POLL_INTERVAL);\n }\n };\n\n timer = window.setTimeout(() => void poll(), 250);\n return () => {\n disposed = true;\n if (timer !== undefined) window.clearTimeout(timer);\n controller?.abort();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- activeKey encodes activeInvocations; the poll uses the captured targets\n }, [activeKey, api, refresh, runId]);\n\n const invoke = useCallback(async (\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n ) => {\n loadRevision.current += 1;\n const invocation = await api.invoke(runId, appId, revision, actionId, requestId, input);\n loadRevision.current += 1;\n setListing((current) => replaceInvocation(current, invocation));\n return invocation;\n }, [api, runId]);\n\n const value = useMemo<ActorProgramsContextValue>(() => ({\n api,\n error,\n fullscreenAppId,\n invoke,\n listing,\n openFullscreen,\n closeFullscreen,\n refresh,\n runId,\n }), [api, error, fullscreenAppId, invoke, listing, openFullscreen, closeFullscreen, refresh, runId]);\n const slot = useMemo<ProgramSlot>(() => ({\n runId,\n needsAnswer: (session, appId) => {\n const app = listing?.apps.find((candidate) => candidate.id === appId);\n return app !== undefined && pendingConfirmationFor(session, app) !== undefined;\n },\n openFullscreen,\n source: (view, actorId) => actorProgramSourceView(api, view, actorId),\n }), [api, listing, openFullscreen, runId]);\n return <ActorProgramsContext.Provider value={value}>\n <ProgramSlotContext.Provider value={slot}>{children}</ProgramSlotContext.Provider>\n </ActorProgramsContext.Provider>;\n}\n\nexport const actorProgramApps = (session: SessionContext) => actorProgramViews(session.runView);\n\nexport const pendingConfirmationFor = (\n session: SessionContext,\n app: Pick<RunApp, \"invocations\">,\n): RunAction | undefined => {\n const view = runViewFrom(session.runView);\n if (!view) return undefined;\n const invocationIds = new Set(app.invocations\n .filter((invocation) => ACTIVE_STATUSES.has(invocation.status))\n .map((invocation) => invocation.id));\n return view.actions.find((action) => action.owner === ASK_PLUGIN_ID\n && action.status === \"pending\"\n && action.askedBy === view.ownerId\n && action.parameters.source === ACTOR_PROGRAMS_STATE_ID\n && invocationIds.has(action.parameters.invocationId));\n};\n\nexport function HostConfirmation({ action, session }: { action: RunAction; session: SessionContext }) {\n const access = useAccess();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string>();\n\n const answer = async (text: string) => {\n if (busy) return;\n setBusy(true);\n setError(undefined);\n try {\n await answerQuestion(session.session.id, action.id, text);\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : String(caught));\n setBusy(false);\n }\n };\n\n return (\n <section aria-label=\"Host confirmation\" className=\"grid flex-none gap-2 border-b border-border-soft bg-warning-soft px-workspace-inset py-2.5\" data-slot=\"host-confirmation\">\n <header className=\"grid gap-0.5\">\n <strong className=\"text-[0.72rem] text-foreground\">Confirmation in the host</strong>\n <span className=\"text-xs text-muted-foreground\">The app cannot answer this decision itself.</span>\n </header>\n {busy\n ? <p className=\"text-xs text-muted-foreground\">Processing answer</p>\n : (\n <QuestionCard\n onAnswer={access.can(\"runs.write\") ? (text: string) => void answer(text) : undefined}\n question={askPayloadOf(action.payload) ?? { question: action.title, options: [], multi: false }}\n text={action.title}\n />\n )}\n {error && <p className=\"text-xs text-destructive\" role=\"alert\">{error}</p>}\n </section>\n );\n}\n\nconst targetLabel = (target: RunScriptTool[\"targets\"][number]): string =>\n target.handle ? `@${target.handle}` : target.actorId;\n\nexport function ToolsPanel({ active, navigation, selection, session }: WorkspaceTabContext) {\n const { api, error, listing, refresh, runId } = useActorPrograms();\n const selectedName = typeof selection === \"string\" ? selection : undefined;\n const selected = listing?.tools.find((tool) => tool.name === selectedName);\n\n if (!listing && !error) {\n return (\n <div className=\"flex h-full items-center justify-center gap-2.5 text-sm text-muted-foreground\">\n <Spinner aria-hidden aria-label={undefined} role={undefined} />\n <span>Loading functions</span>\n </div>\n );\n }\n if (!listing) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyMedia><IconTools /></EmptyMedia>\n <EmptyTitle>Functions could not be loaded</EmptyTitle>\n <EmptyDescription>{error}</EmptyDescription>\n </EmptyHeader>\n <EmptyContent>\n <Button onClick={() => void refresh()} variant=\"outline\">Retry</Button>\n </EmptyContent>\n </Empty>\n );\n }\n if (selectedName && !selected) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyMedia><IconTools /></EmptyMedia>\n <EmptyTitle>Function no longer available</EmptyTitle>\n <EmptyDescription>The selected actor function is no longer installed in this run.</EmptyDescription>\n </EmptyHeader>\n <EmptyContent>\n <Button onClick={() => navigation.openTab(RUN_TOOLS_TAB_ID, null)} variant=\"outline\">\n To overview\n </Button>\n </EmptyContent>\n </Empty>\n );\n }\n if (selected) {\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <header className={headClass}>\n <Button aria-label=\"Back to function overview\" onClick={() => navigation.openTab(RUN_TOOLS_TAB_ID, null)} size=\"icon-sm\" title=\"Back to function overview\" variant=\"outline\">\n <ArrowLeftIcon />\n </Button>\n <span className=\"grid min-w-0 gap-px\">\n <strong className=\"truncate text-[0.82rem] font-semibold\" title={selected.name}>{selected.name}</strong>\n <small className=\"truncate text-xs text-muted-foreground\">Function of @{selected.actorHandle}</small>\n </span>\n </header>\n <div className=\"flex min-h-0 flex-col gap-[22px] overflow-y-auto px-workspace-inset pt-[18px] pb-7\">\n <div className=\"grid grid-cols-[42px_minmax(0,1fr)] items-start gap-3\">\n <span className={cn(entryIconClass, \"size-[42px] bg-accent\")}><IconTools size={22} /></span>\n <div>\n <h2 className=\"text-[1.05rem] text-foreground\">{selected.name}</h2>\n <p className=\"mt-1 text-[0.74rem] leading-[1.45] text-muted-foreground\">{selected.description}</p>\n </div>\n </div>\n <section>\n <h3 className={sectionLabelClass}>Available to</h3>\n <div className=\"flex flex-wrap gap-1.5\">\n {selected.targets.map((target) => <span className=\"rounded-full bg-primary/9 px-2 py-1 text-xs text-foreground\" key={target.actorId}>{targetLabel(target)}</span>)}\n </div>\n </section>\n <section>\n <h3 className={sectionLabelClass}>Parameter</h3>\n {active && <FunctionForm detail key={`${runId}:${selected.actorId}:${selected.functionId}:${selected.revision}`} session={session} tool={selected} />}\n </section>\n <ProgramSource api={api} moduleId={selected.moduleId} revision={selected.revision} runId={runId} />\n <dl className=\"grid grid-cols-2 gap-2\">\n {[{ label: \"Program\", value: selected.moduleId, title: undefined },\n { label: \"Source hash\", value: selected.sourceHash.slice(0, 12), title: selected.sourceHash }].map((fact) => (\n <div className=\"grid gap-[3px] rounded-lg bg-foreground/4 px-2.5 py-2\" key={fact.label}>\n <dt className=\"text-[0.61rem] text-muted-foreground uppercase\">{fact.label}</dt>\n <dd className=\"truncate font-mono text-xs text-foreground\" title={fact.title}>{fact.value}</dd>\n </div>\n ))}\n </dl>\n </div>\n </div>\n );\n }\n if (listing.tools.length === 0) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyMedia><IconTools /></EmptyMedia>\n <EmptyTitle>No functions yet</EmptyTitle>\n <EmptyDescription>Actor functions created by agents in this run appear here.</EmptyDescription>\n </EmptyHeader>\n </Empty>\n );\n }\n\n return (\n <div className=\"@container flex h-full min-h-0 flex-col gap-2 overflow-y-auto px-workspace-inset pt-3 pb-5 [scrollbar-width:thin]\">\n {error && <Alert className=\"mb-1\" role=\"status\" variant=\"destructive\">{error}</Alert>}\n {listing.tools.map((tool) => (\n <button\n className=\"grid w-full cursor-pointer grid-cols-[34px_minmax(0,1fr)_auto_14px] items-center gap-2.5 rounded-lg border border-border bg-card px-[11px] py-2.5 text-left text-foreground transition-[background-color,border-color] hover:border-[color-mix(in_srgb,var(--primary)_52%,var(--border))] hover:bg-[color-mix(in_srgb,var(--primary)_7%,var(--card))] focus-visible:border-[color-mix(in_srgb,var(--primary)_52%,var(--border))] focus-visible:bg-[color-mix(in_srgb,var(--primary)_7%,var(--card))] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary/52 @max-[470px]:grid-cols-[34px_minmax(0,1fr)_14px]\"\n key={tool.name}\n onClick={() => navigation.openTab(RUN_TOOLS_TAB_ID, tool.name)}\n type=\"button\"\n >\n <span className={entryIconClass}><IconTools size={20} /></span>\n <span className=\"grid min-w-0 gap-0.5\">\n <strong className=\"truncate text-[0.8rem] font-semibold\">{tool.name}</strong>\n <small className=\"truncate text-[0.69rem] text-muted-foreground\">{tool.description}</small>\n </span>\n <Badge className=\"max-w-[132px] truncate @max-[470px]:hidden\" variant=\"secondary\">\n {tool.targets.length} {tool.targets.length === 1 ? \"agent\" : \"agents\"}\n </Badge>\n <IconOpen />\n </button>\n ))}\n </div>\n );\n}\n\n/** A click on a mini-app selects its tile on the surface; the surface is the surface controller of the orchestration plugin. */\nexport function ActorProgramsHeader({ session }: SessionHeaderContext) {\n const canArrange = useAccess().can(\"runs.inspect\");\n const surface = useSurfaceController();\n const stage = useSurfaceEntities(session.session.id);\n const { closeFullscreen, fullscreenAppId, openFullscreen } = useActorPrograms();\n const apps = actorProgramApps(session).filter((app) => app.app.visible !== false);\n if (apps.length === 0) return null;\n\n return (\n <nav aria-label=\"Actor views\" className=\"flex min-w-0 flex-none items-stretch\">\n {apps.map((app) => (\n <div role=\"group\" aria-label={app.title} key={`app:${app.id}`}\n className={cn(\"relative flex flex-none items-stretch border-r border-border hover:bg-accent focus-within:bg-accent\",\n fullscreenAppId === app.id && \"bg-primary/12 after:pointer-events-none after:absolute after:inset-x-0 after:bottom-0 after:h-[3px] after:bg-primary after:content-['']\")}>\n <ToolbarItem\n as=\"button\"\n className=\"max-w-[214px] border-r-0 font-bold hover:not-disabled:bg-transparent\"\n draggable={canArrange}\n onDragStart={(event) => {\n if (!canArrange) { event.preventDefault(); return; }\n event.dataTransfer.setData(SURFACE_TILE_DRAG_TYPE, `app:${app.id}`);\n event.dataTransfer.effectAllowed = \"move\";\n closeFullscreen();\n }}\n onClick={() => {\n if (!surface) throw new Error(\"The app entries need the surface controller of the orchestration plugin.\");\n closeFullscreen();\n surface.acceptSelection({ type: \"run-app\", id: app.id });\n }}\n aria-label={`Mini-app: ${app.title} of @${app.actorHandle}`}\n title={`Mini-app: ${app.title} of @${app.actorHandle}${canArrange ? \". Drag onto a tile to dock.\" : \"\"}`}\n type=\"button\"\n >\n <span className={cn(quickIconClass, !stage.has(`app:${app.id}`) && \"bg-transparent\")}><LayoutGridIcon size={20} /></span>\n <ToolbarCopy><ToolbarLabel>@{app.actorHandle}</ToolbarLabel><ToolbarText>{app.title}</ToolbarText></ToolbarCopy>\n </ToolbarItem>\n <ToolbarItem as=\"button\" aria-expanded={fullscreenAppId === app.id} aria-label={`${app.title} ${fullscreenAppId === app.id ? \"close full view\" : \"open in full view\"}`}\n title={`${app.title} ${fullscreenAppId === app.id ? \"close full view\" : \"open in full view\"}`}\n className=\"relative w-[38px] justify-center border-r-0 p-0 hover:not-disabled:bg-transparent before:pointer-events-none before:absolute before:top-1/4 before:bottom-1/4 before:left-0 before:border-l before:border-dashed before:border-border-strong before:content-['']\"\n onClick={() => fullscreenAppId === app.id ? closeFullscreen() : openFullscreen(app.id)} type=\"button\">\n <ExpandIcon />\n </ToolbarItem>\n </div>\n ))}\n </nav>\n );\n}\n\nexport function ToolsBadge() {\n const { listing } = useActorPrograms();\n return listing && listing.tools.length > 0\n ? <Badge variant=\"secondary\">{listing.tools.length}</Badge>\n : null;\n}\n\nfunction IconTools({ size = 28 }: { size?: number }) {\n return (\n <svg aria-hidden fill=\"none\" height={size} stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.6\" viewBox=\"0 0 24 24\" width={size}>\n <path d=\"M14.5 6.5 17.5 3.5l3 3-3 3\" />\n <path d=\"m9.5 17.5-3 3-3-3 3-3\" />\n <path d=\"M13 5H9a4 4 0 0 0-4 4v5.5M11 19h4a4 4 0 0 0 4-4V9.5\" />\n </svg>\n );\n}\n\nfunction IconOpen() {\n return (\n <svg aria-hidden fill=\"none\" height=\"14\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.8\" viewBox=\"0 0 24 24\" width=\"14\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runActorFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runViewFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/SourceCode\", \"SourceCode\");\n", "import { ACTOR_PROGRAMS_STATE_ID, ACTOR_STATE_ID } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport { isRecord } from \"@ragents/web/lib/guards\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport type { ActorProgramsListing } from \"./api\";\nimport { isJsonValue } from \"./bridge\";\n\nexport interface ActorProgramView {\n id: string;\n title: string;\n actorId: string;\n actorHandle: string;\n revision: string;\n app: Record<string, unknown>;\n}\n\nexport const actorProgramSourceReference = (runView: unknown, actorId: string): { name: string; revision: string } | undefined => {\n const view = runViewFrom(runView);\n const entry = view?.pluginStates.find((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID\n && entry.scope.kind === \"actor\" && entry.scope.actorId === actorId);\n if (!entry || !isRecord(entry.state) || entry.state.program === null) return undefined;\n const program = entry.state.program;\n if (!isRecord(program) || program.actorId !== actorId || typeof program.name !== \"string\" || typeof program.revision !== \"string\") {\n throw new Error(\"The source code mapping of the actor program is invalid.\");\n }\n return { name: program.name, revision: program.revision };\n};\n\nexport const actorProgramViews = (runView: unknown): ActorProgramView[] => {\n const view = runViewFrom(runView);\n if (!view) return [];\n return view.pluginStates.flatMap((entry): ActorProgramView[] => {\n if (entry.pluginId !== ACTOR_PROGRAMS_STATE_ID || entry.scope.kind !== \"actor\") return [];\n const actorId = entry.scope.actorId;\n const actor = view.actors.find((actor) => actor.id === actorId);\n if (!actor || actor.kind === \"human\" || actor.lifecycle?.kind === \"stopped\") return [];\n if (!isRecord(entry.state) || !isRecord(entry.state.program)) return [];\n const program = entry.state.program;\n if (program.actorId !== actor.id || program.actorHandle !== actor.handle || typeof program.revision !== \"string\" || !Array.isArray(program.views)) {\n throw new Error(`The view program of @${actor.handle} is invalid.`);\n }\n return program.views.map((app) => {\n if (!isRecord(app) || typeof app.id !== \"string\" || typeof app.title !== \"string\") throw new Error(`A view of @${actor.handle} is invalid.`);\n return { id: app.id, title: app.title, actorId: actor.id, actorHandle: actor.handle, revision: program.revision as string, app };\n });\n });\n};\n\nexport const currentActorListing = (listing: ActorProgramsListing | undefined, runView: unknown): ActorProgramsListing | undefined => {\n const view = runViewFrom(runView);\n if (!listing || !view) return undefined;\n const currentViews = new Map(actorProgramViews(view).map((entry) => [entry.id, entry]));\n const activeActors = new Set(view.actors.filter((actor) => actor.kind !== \"human\" && actor.lifecycle?.kind !== \"stopped\").map((actor) => actor.id));\n return {\n ...listing,\n apps: listing.apps.flatMap((app) => {\n const current = currentViews.get(app.id);\n if (!current || current.actorId !== app.actorId || current.revision !== app.revision) return [];\n const state = view.pluginStates.find((entry) => entry.pluginId === ACTOR_STATE_ID && entry.scope.kind === \"actor\" && entry.scope.actorId === app.actorId);\n const values = state ? state.state : app.state.values;\n if (!isJsonValue(values)) throw new Error(`The state of @${app.actorHandle} is not a JSON value.`);\n return [{ ...app, visible: current.app.visible !== false,\n state: { ...app.state, values } }];\n }),\n tools: listing.tools.filter((tool) => activeActors.has(tool.actorId) && view.pluginStates.some((entry) =>\n entry.pluginId === ACTOR_PROGRAMS_STATE_ID && entry.scope.kind === \"actor\" && entry.scope.actorId === tool.actorId\n && isRecord(entry.state) && isRecord(entry.state.program) && entry.state.program.revision === tool.revision)),\n };\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"Fragment\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsxs\");\n", "import { useEffect, useState, type ReactNode } from \"react\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\nimport { Alert, Button, cn, Spinner } from \"@ragents/web/ui\";\nimport type { RunView } from \"@ragents/web/run-view\";\nimport type { ActorProgramSourceFile, ActorProgramsApi } from \"./api\";\nimport { actorProgramSourceReference } from \"./program-state\";\n\ntype SourceState =\n | { kind: \"loading\" }\n | { kind: \"ready\"; files: ActorProgramSourceFile[] }\n | { kind: \"error\"; message: string };\n\nexport function ProgramSource({ api, moduleId, runId, revision, expandedByDefault = false }: {\n api: ActorProgramsApi;\n moduleId: string;\n runId: string;\n revision?: string;\n expandedByDefault?: boolean;\n}) {\n const [expanded, setExpanded] = useState(expandedByDefault);\n const [state, setState] = useState<SourceState>({ kind: \"loading\" });\n const [activePath, setActivePath] = useState<string>();\n\n useEffect(() => {\n if (!expanded) return undefined;\n const controller = new AbortController();\n setState({ kind: \"loading\" });\n api.source(runId, moduleId, controller.signal).then(\n (files) => {\n if (controller.signal.aborted) return;\n setState({ kind: \"ready\", files });\n setActivePath(files.find((file) => file.path === \"src/server.ts\")?.path ?? files.find((file) => /\\.tsx?$/.test(file.path))?.path ?? files[0]?.path);\n },\n (caught: unknown) => {\n if (controller.signal.aborted) return;\n setState({ kind: \"error\", message: caught instanceof Error ? caught.message : String(caught) });\n },\n );\n return () => controller.abort();\n }, [api, expanded, moduleId, runId, revision]);\n\n const active = state.kind === \"ready\"\n ? state.files.find((file) => file.path === activePath) ?? state.files[0]\n : undefined;\n\n return (\n <section className=\"grid w-full min-w-0 grid-cols-[minmax(0,1fr)] justify-items-start gap-2\">\n <h3 className=\"text-xs font-semibold text-muted-foreground\">Source code</h3>\n {!expanded && (\n <Button onClick={() => setExpanded(true)} size=\"sm\" variant=\"outline\">Show source code</Button>\n )}\n {expanded && (\n <>\n <p className=\"text-[0.67rem] text-muted-foreground\">Source of the installed build</p>\n {state.kind === \"loading\" && (\n <p className=\"flex items-center gap-2 text-[0.72rem] text-muted-foreground\">\n <Spinner aria-hidden aria-label={undefined} role={undefined} />\n <span>Loading source code</span>\n </p>\n )}\n {state.kind === \"error\" && <Alert className=\"w-full\" variant=\"destructive\">{state.message}</Alert>}\n {state.kind === \"ready\" && (\n <div className=\"flex flex-wrap gap-1.5\">\n {state.files.map((file) => (\n <button\n className={cn(\"max-w-full cursor-pointer rounded-lg border border-border-soft bg-background/70 px-[9px] py-1 text-left font-mono text-[0.66rem] text-muted-foreground [overflow-wrap:anywhere]\",\n file.path === active?.path && \"border-[color-mix(in_srgb,var(--primary)_48%,var(--border))] bg-primary/9 text-foreground\")}\n key={file.path}\n onClick={() => setActivePath(file.path)}\n type=\"button\"\n >\n {file.path}\n </button>\n ))}\n </div>\n )}\n {active && <SourceCode className=\"h-full max-h-[340px] w-full min-h-0 min-w-0 overflow-auto rounded-lg border border-border-soft bg-background/70\" content={active.content} path={active.path} />}\n {!expandedByDefault && <Button onClick={() => setExpanded(false)} size=\"sm\" variant=\"outline\">Hide source code</Button>}\n </>\n )}\n </section>\n );\n}\n\n/** The installed source of the actor's program, or nothing if the actor runs none. */\nexport const actorProgramSourceView = (api: ActorProgramsApi, view: RunView, actorId: string): ReactNode => {\n const program = actorProgramSourceReference(view, actorId);\n return program && <ProgramSource api={api} expandedByDefault key={`${view.id}:${actorId}:${program.revision}`}\n moduleId={program.name} revision={program.revision} runId={view.id} />;\n};\n", "import type { RunAppInvocation, ActorProgramsApi, RunScriptTool } from \"./api\";\nimport type { JsonValue } from \"./bridge\";\n\nconst waitForPoll = (signal: AbortSignal): Promise<void> => new Promise((resolve, reject) => {\n signal.throwIfAborted();\n const finish = (): void => { signal.removeEventListener(\"abort\", abort); resolve(); };\n const timer = setTimeout(finish, 350);\n const abort = (): void => { clearTimeout(timer); reject(signal.reason); };\n signal.addEventListener(\"abort\", abort, { once: true });\n});\n\nexport const invokeActorFunction = async (\n api: ActorProgramsApi,\n runId: string,\n tool: Pick<RunScriptTool, \"actorHandle\" | \"functionId\" | \"revision\">,\n input: JsonValue,\n signal: AbortSignal,\n changed: (invocation: RunAppInvocation) => void,\n): Promise<RunAppInvocation> => {\n let invocation = await api.invokeFunction(runId, tool.actorHandle, tool.revision, tool.functionId, crypto.randomUUID().replaceAll(\"-\", \"\"), input, signal);\n changed(invocation);\n while (invocation.status === \"queued\" || invocation.status === \"running\") {\n await waitForPoll(signal);\n invocation = await api.functionInvocation(runId, tool.actorHandle, invocation.id, signal);\n changed(invocation);\n }\n return invocation;\n};\n", "import type { RunToolParameter } from \"./api\";\nimport { isJsonValue, type JsonValue } from \"./bridge\";\n\nconst parseParameter = (parameter: RunToolParameter, form: FormData): JsonValue | undefined => {\n const raw = String(form.get(parameter.name) ?? \"\");\n if (parameter.type === \"boolean\") {\n if (parameter.required) return form.has(parameter.name);\n return raw === \"\" ? undefined : raw === \"true\";\n }\n if (raw === \"\" && !parameter.required) return undefined;\n if (parameter.type === \"string\") return raw;\n if (!raw.trim()) throw new Error(`${parameter.name}: Please enter a value.`);\n if (parameter.type === \"number\" || parameter.type === \"integer\") {\n const value = Number(raw);\n if (!Number.isFinite(value) || parameter.type === \"integer\" && !Number.isInteger(value)) {\n throw new Error(`${parameter.name} is not a valid ${parameter.type === \"integer\" ? \"integer\" : \"number\"}.`);\n }\n return value;\n }\n if (parameter.type === \"string[]\" && !raw.trimStart().startsWith(\"[\")) {\n return raw.split(/\\r?\\n|,/).map((entry) => entry.trim()).filter(Boolean);\n }\n let value: unknown;\n try { value = JSON.parse(raw); }\n catch { throw new Error(`${parameter.name}: Please enter valid JSON.`); }\n if (!isJsonValue(value)) throw new Error(`${parameter.name}: Not a valid JSON value.`);\n if (parameter.type === \"string[]\" && (!Array.isArray(value) || !value.every((entry) => typeof entry === \"string\"))) {\n throw new Error(`${parameter.name}: Please enter a list of texts.`);\n }\n if (parameter.type === \"number[]\" && (!Array.isArray(value) || !value.every((entry) => typeof entry === \"number\"))) {\n throw new Error(`${parameter.name}: Please enter a JSON list of numbers.`);\n }\n return value;\n};\n\nexport const actorFunctionInput = (parameters: readonly RunToolParameter[], form: FormData): Record<string, JsonValue> =>\n Object.fromEntries(parameters.flatMap((parameter) => {\n const value = parseParameter(parameter, form);\n return value === undefined ? [] : [[parameter.name, value]];\n }));\n", "import { useEffect, useRef, useState, type FormEvent } from \"react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { Button, cn, Input, Textarea } from \"@ragents/web/ui\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport type { RunAppInvocation, RunScriptTool } from \"./api\";\nimport { HostConfirmation, pendingConfirmationFor, useActorPrograms } from \"./AppsPanel\";\nimport { invokeActorFunction } from \"./function-call\";\nimport { actorFunctionInput } from \"./function-input\";\n\nconst selectClass = \"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base font-normal md:text-sm\";\n\nexport function FunctionForm({ session, tool, detail = false }: {\n session: SessionContext;\n tool: RunScriptTool;\n detail?: boolean;\n}) {\n const writable = useAccess().can(\"runs.write\");\n const { api, refresh, runId } = useActorPrograms();\n const [error, setError] = useState<string>();\n const [busy, setBusy] = useState(false);\n const [invocation, setInvocation] = useState<RunAppInvocation>();\n const controllerRef = useRef<AbortController | undefined>(undefined);\n useEffect(() => () => controllerRef.current?.abort(), []);\n const confirmation = invocation ? pendingConfirmationFor(session, { invocations: [invocation] }) : undefined;\n\n const submit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (controllerRef.current || !writable) return;\n const controller = new AbortController();\n controllerRef.current = controller;\n setError(undefined);\n setInvocation(undefined);\n try {\n const input = actorFunctionInput(tool.parameters, new FormData(event.currentTarget));\n setBusy(true);\n await invokeActorFunction(api, runId, tool, input, controller.signal, (current) => {\n if (!controller.signal.aborted) setInvocation(current);\n });\n if (!controller.signal.aborted) await refresh();\n } catch (caught) {\n if (!controller.signal.aborted) setError(caught instanceof Error ? caught.message : String(caught));\n } finally {\n if (!controller.signal.aborted) setBusy(false);\n if (controllerRef.current === controller) controllerRef.current = undefined;\n }\n };\n\n const status = confirmation ? \"Confirmation required\"\n : invocation?.status === \"queued\" ? \"Waiting for execution\"\n : invocation?.status === \"running\" ? \"Function running\"\n : invocation?.status === \"succeeded\" ? \"Executed\"\n : invocation?.status === \"cancelled\" ? \"Cancelled\"\n : invocation?.status === \"failed\" ? \"Failed\"\n : busy ? \"Sending call\" : undefined;\n const failure = error ?? (invocation?.status === \"failed\" || invocation?.status === \"cancelled\" ? invocation.error : undefined);\n\n return (\n <div className=\"grid min-w-0 gap-2.5\">\n <form aria-label={`Call ${tool.name}`} className={cn(\"grid\", detail ? \"gap-3.5\" : \"gap-2\")} onSubmit={(event) => void submit(event)}>\n {tool.parameters.length === 0 && detail && <p>This function needs no parameters.</p>}\n {tool.parameters.map((parameter) => (\n <label className={cn(\"grid gap-[3px] font-[650] text-foreground [&_small]:text-[0.61rem] [&_small]:font-normal [&_small]:text-muted-foreground\",\n detail ? \"text-[0.8rem]\" : \"text-[0.68rem]\",\n parameter.type === \"boolean\" && parameter.required && \"grid-cols-[auto_minmax(0,1fr)] items-center gap-x-1.5 [&_small]:col-start-2\")} key={parameter.name}>\n {parameter.type === \"boolean\" && parameter.required && <input aria-description={parameter.description} className=\"m-0 accent-primary\" disabled={!writable || busy} name={parameter.name} type=\"checkbox\" />}\n <span>{parameter.name}{parameter.required ? \" *\" : \"\"}{detail && <small className=\"ml-2\">{parameter.type}{parameter.required ? \"\" : \" (optional)\"}</small>}</span>\n {parameter.type === \"boolean\"\n ? !parameter.required && <select className={selectClass} disabled={!writable || busy} name={parameter.name} defaultValue=\"\"><option value=\"\">Not passed</option><option value=\"true\">Yes</option><option value=\"false\">No</option></select>\n : parameter.type === \"json\" || parameter.type === \"string[]\" || parameter.type === \"number[]\" || detail && parameter.type === \"string\"\n ? <Textarea aria-description={parameter.description} className=\"min-h-8 resize-y font-normal\" disabled={!writable || busy} name={parameter.name} placeholder={parameter.description} required={parameter.required} rows={2} />\n : <Input\n aria-description={parameter.description}\n className=\"font-normal\"\n disabled={!writable || busy}\n name={parameter.name}\n placeholder={parameter.description}\n required={parameter.required}\n step={parameter.type === \"integer\" ? \"1\" : parameter.type === \"number\" ? \"any\" : undefined}\n type={parameter.type === \"integer\" || parameter.type === \"number\" ? \"number\" : \"text\"}\n />}\n {(detail || parameter.type === \"boolean\") && <small>{parameter.description}</small>}\n {parameter.type === \"json\" && <small>Enter as JSON.</small>}\n {parameter.type === \"number[]\" && <small>Enter as a JSON list, e.g. [1, 2, 3].</small>}\n {parameter.type === \"string[]\" && <small>One entry per line or as a JSON list.</small>}\n </label>\n ))}\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button disabled={!writable || busy} type=\"submit\">{busy ? \"Running ...\" : \"Run\"}</Button>\n {status && <span className=\"text-[0.63rem] text-muted-foreground\" role=\"status\">{status}</span>}\n </div>\n </form>\n {confirmation && <HostConfirmation action={confirmation} key={confirmation.id} session={session} />}\n {failure && <p className=\"text-destructive [overflow-wrap:anywhere]\" role=\"alert\">{failure}</p>}\n {invocation?.status === \"succeeded\" && !error && (\n <section aria-label=\"Result\" className=\"grid min-w-0 gap-2\">\n <h3>Result</h3>\n <pre className=\"max-h-[320px] overflow-auto rounded-md border border-border-soft bg-card p-2.5 text-[0.75rem] whitespace-pre-wrap text-foreground [overflow-wrap:anywhere]\">{typeof invocation.result === \"string\" ? invocation.result : JSON.stringify(invocation.result, null, 2)}</pre>\n </section>\n )}\n </div>\n );\n}\n", "export function ExpandIcon() {\n return <svg aria-hidden fill=\"none\" height=\"14\" stroke=\"currentColor\" strokeWidth=\"1.7\" viewBox=\"0 0 24 24\" width=\"14\">\n <path d=\"M9 3H3v6M15 3h6v6M3 15v6h6M21 15v6h-6\" />\n </svg>;\n}\n", "import { ACTOR_PROGRAMS_STATE_ID, ACTOR_INVOCATIONS_STATE_ID, ACTOR_STATE_ID } from \"@ragents/host/plugin-support/actor-programs/contract\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\n\nexport const actorProgramsRevision = (runView: unknown): string => {\n const view = runViewFrom(runView);\n const programActors = new Set(view?.pluginStates.filter((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID && entry.scope.kind === \"actor\")\n .map((entry) => entry.scope.kind === \"actor\" ? entry.scope.actorId : \"\") ?? []);\n return JSON.stringify({\n actors: view?.actors.filter((actor) => programActors.has(actor.id)).map((actor) => [actor.id, actor.handle, actor.lifecycle?.kind === \"stopped\"]).sort(([left], [right]) => String(left).localeCompare(String(right))) ?? [],\n states: (view?.pluginStates ?? [])\n .filter((entry) => entry.pluginId === ACTOR_PROGRAMS_STATE_ID || entry.pluginId === ACTOR_INVOCATIONS_STATE_ID\n || entry.pluginId === ACTOR_STATE_ID && entry.scope.kind === \"actor\" && programActors.has(entry.scope.actorId))\n .map((entry) => [`${entry.pluginId}:${entry.scope.kind === \"actor\" ? entry.scope.actorId : \"run\"}`, entry.state])\n .sort(([left], [right]) => String(left).localeCompare(String(right))),\n });\n};\n", "import type { ActorProgramsApi, RunApp, RunAppInvocation } from \"./api\";\n\ntype InvocationTarget = { invocationId: string } & (\n | { kind: \"app\"; appId: string }\n | { kind: \"function\"; actorHandle: string }\n);\n\nexport const activeActorInvocations = (apps: readonly RunApp[], includeFunctions = true): InvocationTarget[] => {\n const appIds = new Set(apps.map((app) => app.id));\n const active = new Map<string, InvocationTarget>();\n for (const app of apps) for (const invocation of app.invocations) {\n if (invocation.status === \"queued\" || invocation.status === \"running\") {\n if (!includeFunctions && !appIds.has(invocation.appId)) continue;\n active.set(`${invocation.actorId}/${invocation.id}`, appIds.has(invocation.appId)\n ? { kind: \"app\", appId: invocation.appId, invocationId: invocation.id }\n : { kind: \"function\", actorHandle: invocation.actorHandle, invocationId: invocation.id });\n }\n }\n return [...active.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([, target]) => target);\n};\n\nexport const readActorInvocation = (\n api: ActorProgramsApi,\n runId: string,\n target: InvocationTarget,\n signal?: AbortSignal,\n): Promise<RunAppInvocation> => target.kind === \"app\"\n ? api.invocation(runId, target.appId, target.invocationId, signal)\n : api.functionInvocation(runId, target.actorHandle, target.invocationId, signal);\n\nexport const invocationTime = (invocation: RunAppInvocation): number => {\n const raw = invocation.status === \"queued\"\n ? invocation.createdAt\n : invocation.status === \"running\"\n ? invocation.startedAt\n : invocation.finishedAt;\n const parsed = Date.parse(raw);\n return Number.isNaN(parsed) ? 0 : parsed;\n};\n\nexport const latestInvocation = (app: RunApp): RunAppInvocation | undefined =>\n app.invocations.reduce<RunAppInvocation | undefined>((latest, invocation) =>\n !latest || invocationTime(invocation) >= invocationTime(latest) ? invocation : latest, undefined);\n", "import { createContext, useContext } from \"react\";\nimport type { ActorProgramsApi, ActorProgramsListing, RunAppInvocation } from \"./api\";\nimport type { JsonValue } from \"./bridge\";\n\nexport interface ActorProgramsContextValue {\n api: ActorProgramsApi;\n error: string | undefined;\n fullscreenAppId: string | undefined;\n listing: ActorProgramsListing | undefined;\n openFullscreen: (appId: string) => void;\n closeFullscreen: () => void;\n refresh: () => Promise<void>;\n invoke: (\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n ) => Promise<RunAppInvocation>;\n runId: string;\n}\n\nexport const ActorProgramsContext = createContext<ActorProgramsContextValue | undefined>(undefined);\nexport const useOptionalActorPrograms = () => useContext(ActorProgramsContext);\n\nexport const useActorPrograms = (): ActorProgramsContextValue => {\n const value = useOptionalActorPrograms();\n if (!value) throw new Error(\"The actor program provider is not active\");\n return value;\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/input-bridge\", \"hostInputEnabled\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/input-bridge\", \"isRunPanelKeyboardMessage\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/input-bridge\", \"relayFrameInput\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/theme\", \"useResolvedTheme\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/api\", \"sendActorMessage\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/http/contracts\", \"actorByHandle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/actor-conversation\", \"actorChatMessages\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/chat-target\", \"programChatNotice\");\n", "import { actorByHandle } from \"@ragents/engine/src/http/contracts\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport type { ChatSnapshot } from \"@ragents/web/actor-programs/client-ui/contracts\";\nimport { actorChatMessages } from \"@ragents/web/actor-conversation\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport { programChatNotice } from \"@ragents/web/chat/chat-target\";\n\nexport const resolveChatActor = (session: SessionContext, target: string) => {\n const view = runViewFrom(session.runView);\n if (!view || view.id !== session.session.id) throw new Error(\"The run view for this chat is not available yet\");\n const actor = target === \"primary\"\n ? view.actors.find((entry) => entry.id === view.primaryActorId)\n : actorByHandle(view.actors, target);\n if (!actor || actor.kind === \"human\") {\n const names = view.actors.filter((entry) => entry.kind !== \"human\").map((entry) => `@${entry.handle}`).join(\", \");\n throw new Error(`The chat target is not available. Allowed are primary and: ${names || \"no actors yet\"}`);\n }\n return { view, actor };\n};\n\nexport const chatSnapshotOf = (session: SessionContext, target: string): ChatSnapshot => {\n try {\n const { view, actor } = resolveChatActor(session, target);\n const primary = actor.id === view.primaryActorId;\n const error = actor.kind === \"script\" ? programChatNotice : session.conversationError ?? (!session.connected\n ? \"The connection to the run is interrupted\"\n : actor.lifecycle?.kind === \"stopped\" ? `@${actor.handle} stopped: ${actor.lifecycle.reason}. It accepts no input until it is restarted` : undefined);\n return {\n owner: actor.id,\n messages: actorChatMessages(view, actor, session.messages, session.actorConversations?.[actor.id]),\n running: primary ? session.running : actor.lifecycle?.kind === \"running\",\n ...(actor.kind === \"script\" ? { readOnly: true } : {}),\n ...(error ? { error } : {}),\n };\n } catch (error) {\n return { messages: [], running: false, error: error instanceof Error ? error.message : String(error) };\n }\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/useAttachmentCapabilities\", \"getAttachmentCapabilities\");\n", "import { hostInputEnabled, isRunPanelKeyboardMessage, relayFrameInput } from \"@ragents/web/run-panel/input-bridge\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { cn } from \"@ragents/web/ui\";\nimport { useResolvedTheme } from \"@ragents/web/theme\";\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport type { RunApp, RunAppInvocation, ActorProgramsApi } from \"./api\";\nimport { latestInvocation } from \"./invocations\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport { sendActorMessage } from \"@ragents/web/api\";\nimport { chatSnapshotOf, resolveChatActor } from \"./chat-state\";\nimport { getAttachmentCapabilities } from \"@ragents/web/chat/useAttachmentCapabilities\";\nimport type { ChatSnapshot } from \"@ragents/web/actor-programs/client-ui/contracts\";\nimport {\n RUN_APP_BRIDGE_VERSION,\n RUN_APP_CHAT_ACK,\n RUN_APP_CHAT_SEND,\n RUN_APP_CHAT_STATE,\n RUN_APP_CHAT_UNWATCH,\n RUN_APP_CHAT_WATCH,\n RUN_APP_CONNECTED,\n RUN_APP_ERROR,\n RUN_APP_FRAME_READY,\n RUN_APP_GET_STATE,\n RUN_APP_INVOCATION,\n RUN_APP_READY,\n RUN_APP_STATE,\n RUN_APP_THEME,\n validateRunAppBridgeRequest,\n type JsonValue,\n type RunAppInvokeRequest,\n} from \"./bridge\";\n\ninterface ActorViewFrameProps {\n api: ActorProgramsApi;\n app: RunApp;\n invoke: (\n appId: string,\n revision: string,\n actionId: string,\n requestId: string,\n input: JsonValue,\n ) => Promise<RunAppInvocation>;\n pendingConfirmationInvocationId?: string;\n presentation: \"embedded\" | \"fullscreen\" | \"tiled\";\n runId: string;\n session: SessionContext;\n}\n\nconst ACTIVE_STATUSES = new Set([\"queued\", \"running\"]);\nconst REQUEST_ID_HISTORY_LIMIT = 512;\n\nconst invocationSignature = (invocation: RunAppInvocation): string => JSON.stringify(invocation);\n\nconst markTones: Record<string, string> = {\n success: \"bg-success\",\n running: \"bg-primary shadow-[0_0_0_4px_color-mix(in_srgb,var(--primary)_12%,transparent)] animate-fade-pulse [animation-duration:1.2s] motion-reduce:animate-none\",\n confirm: \"bg-warning\",\n error: \"bg-destructive\",\n};\n\nexport function ActorViewFrame({\n api,\n app,\n invoke,\n pendingConfirmationInvocationId,\n presentation,\n runId,\n session,\n}: ActorViewFrameProps) {\n const access = useAccess();\n const theme = useResolvedTheme();\n const themeRef = useRef(theme);\n themeRef.current = theme;\n const writableRef = useRef(access.can(\"runs.write\"));\n writableRef.current = access.can(\"runs.write\");\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const portRef = useRef<MessagePort | undefined>(undefined);\n const bridgeGenerationRef = useRef(0);\n const bridgeConnectedRef = useRef(false);\n const appRef = useRef(app);\n const sessionRef = useRef(session);\n sessionRef.current = session;\n const watchedChats = useRef(new Map<string, string>());\n const chatCapabilities = useRef(new Map<string, { result?: Pick<ChatSnapshot, \"attachmentCapabilities\" | \"attachmentCapabilitiesError\">; pending: Promise<Pick<ChatSnapshot, \"attachmentCapabilities\" | \"attachmentCapabilitiesError\">> }>());\n const recentRequestIdsRef = useRef(new Set<string>());\n const sentStateRef = useRef(\"\");\n const sentInvocationsRef = useRef(new Map<string, string>());\n const [bridgeReady, setBridgeReady] = useState(false);\n const [frameError, setFrameError] = useState<string>();\n const [actionError, setActionError] = useState<string>();\n const [submitting, setSubmitting] = useState<string[]>([]);\n appRef.current = app;\n const frameUrl = useMemo(() => api.frameUrl(runId, app.id, app.revision), [api, app.id, app.revision, runId]);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- a fresh token is minted per frame url on purpose\n const bridgeToken = useMemo(() => crypto.randomUUID().replaceAll(\"-\", \"\"), [frameUrl]);\n\n const closeBridge = useCallback(() => {\n bridgeGenerationRef.current += 1;\n bridgeConnectedRef.current = false;\n portRef.current?.close();\n portRef.current = undefined;\n watchedChats.current.clear();\n chatCapabilities.current.clear();\n setBridgeReady(false);\n setSubmitting([]);\n }, []);\n\n const sendChatState = useCallback((port: MessagePort, actor: string, requestId?: string) => {\n const generation = bridgeGenerationRef.current;\n const publish = (capabilities: Pick<ChatSnapshot, \"attachmentCapabilities\" | \"attachmentCapabilitiesError\">) => {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current || !watchedChats.current.has(actor)) return;\n const chat = chatSnapshotOf(sessionRef.current, actor);\n const snapshot = { ...chat, ...capabilities, readOnly: chat.readOnly === true || !writableRef.current };\n const signature = JSON.stringify(snapshot);\n if (requestId === undefined && watchedChats.current.get(actor) === signature) return;\n watchedChats.current.set(actor, signature);\n port.postMessage({ type: RUN_APP_CHAT_STATE, version: RUN_APP_BRIDGE_VERSION, actor, snapshot, ...(requestId ? { requestId } : {}) });\n };\n try {\n const current = sessionRef.current;\n const target = resolveChatActor(current, actor).actor;\n const key = JSON.stringify([current.session.id, target.id, target.execution?.driver]);\n let entry = chatCapabilities.current.get(key);\n if (!entry) {\n const pending = getAttachmentCapabilities(current.session.id, target.id).then(\n (attachmentCapabilities) => ({ attachmentCapabilities }),\n (cause: unknown) => ({ attachmentCapabilitiesError: cause instanceof Error ? cause.message : String(cause) }),\n );\n entry = { pending };\n chatCapabilities.current.set(key, entry);\n const saved = entry;\n void pending.then((result) => { saved.result = result; });\n }\n publish(entry.result ?? { attachmentCapabilitiesError: \"Checking model capabilities ...\" });\n if (!entry.result) void entry.pending.then(publish);\n } catch (cause) {\n publish({ attachmentCapabilitiesError: cause instanceof Error ? cause.message : String(cause) });\n }\n }, []);\n\n const postError = useCallback((port: MessagePort, requestId: string | undefined, message: string) => {\n port.postMessage({\n type: RUN_APP_ERROR,\n version: RUN_APP_BRIDGE_VERSION,\n ...(requestId ? { requestId } : {}),\n message,\n });\n }, []);\n\n const executeRequest = useCallback(async (\n request: RunAppInvokeRequest,\n port: MessagePort,\n generation: number,\n installedApp: Pick<RunApp, \"id\" | \"revision\">,\n ) => {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n setActionError(undefined);\n setSubmitting((current) => [...current, request.requestId]);\n try {\n if (!writableRef.current) throw new Error(\"You have read-only access to this actor view.\");\n const invocation = await invoke(\n installedApp.id,\n installedApp.revision,\n request.actionId,\n request.requestId,\n request.input,\n );\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n sentInvocationsRef.current.set(invocation.id, invocationSignature(invocation));\n port.postMessage({\n type: RUN_APP_INVOCATION,\n version: RUN_APP_BRIDGE_VERSION,\n requestId: request.requestId,\n invocation,\n });\n } catch (caught) {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n const message = caught instanceof Error ? caught.message : String(caught);\n setActionError(message);\n postError(port, request.requestId, message);\n } finally {\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n setSubmitting((current) => current.filter((requestId) => requestId !== request.requestId));\n }\n }\n }, [invoke, postError]);\n\n const sendState = useCallback((port: MessagePort, requestId?: string) => {\n const current = appRef.current;\n port.postMessage({\n type: RUN_APP_STATE,\n version: RUN_APP_BRIDGE_VERSION,\n ...(requestId ? { requestId } : {}),\n state: current.state ?? null,\n });\n }, []);\n\n const handlePortMessage = useCallback((\n value: unknown,\n port: MessagePort,\n generation: number,\n installedApp: RunApp,\n ) => {\n if (generation !== bridgeGenerationRef.current || port !== portRef.current) return;\n if (relayFrameInput(window, value, (message) => {\n if (generation === bridgeGenerationRef.current && port === portRef.current) port.postMessage(message);\n })) return;\n const message = value as { type?: unknown; version?: unknown } | null;\n if (message?.type === RUN_APP_CONNECTED && message.version === RUN_APP_BRIDGE_VERSION) {\n bridgeConnectedRef.current = true;\n setFrameError(undefined);\n setBridgeReady(true);\n return;\n }\n const validation = validateRunAppBridgeRequest(value);\n if (!validation.ok) {\n postError(port, validation.requestId, validation.error);\n return;\n }\n const { request } = validation;\n if (recentRequestIdsRef.current.has(request.requestId)) {\n postError(port, request.requestId, \"This requestId has already been used\");\n return;\n }\n recentRequestIdsRef.current.add(request.requestId);\n if (recentRequestIdsRef.current.size > REQUEST_ID_HISTORY_LIMIT) {\n const oldest = recentRequestIdsRef.current.values().next().value;\n if (oldest !== undefined) recentRequestIdsRef.current.delete(oldest);\n }\n if (request.type === RUN_APP_CHAT_WATCH) {\n watchedChats.current.set(request.actor, \"\");\n sendChatState(port, request.actor, request.requestId);\n return;\n }\n if (request.type === RUN_APP_CHAT_UNWATCH) {\n watchedChats.current.delete(request.actor);\n port.postMessage({ type: RUN_APP_CHAT_ACK, version: RUN_APP_BRIDGE_VERSION, requestId: request.requestId });\n return;\n }\n if (request.type === RUN_APP_CHAT_SEND) {\n void (async () => {\n try {\n if (!writableRef.current) throw new Error(\"You have read-only access to this chat.\");\n const current = sessionRef.current;\n const snapshot = chatSnapshotOf(current, request.actor);\n if (snapshot.error) throw new Error(snapshot.error);\n const { actor } = resolveChatActor(current, request.actor);\n await sendActorMessage(current.session.id, actor.id, request.text, request.attachments);\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n port.postMessage({ type: RUN_APP_CHAT_ACK, version: RUN_APP_BRIDGE_VERSION, requestId: request.requestId });\n }\n } catch (error) {\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n postError(port, request.requestId, error instanceof Error ? error.message : String(error));\n }\n }\n })();\n return;\n }\n if (request.type === RUN_APP_GET_STATE) {\n sendState(port, request.requestId);\n return;\n }\n const action = installedApp.actions.find((entry) => entry.id === request.actionId);\n if (!action) {\n postError(port, request.requestId, \"The requested app action is not installed\");\n return;\n }\n void executeRequest(request, port, generation, installedApp);\n }, [executeRequest, postError, sendChatState, sendState]);\n\n const attachBridge = useCallback((port: MessagePort, installedApp: RunApp) => {\n if (portRef.current) {\n port.close();\n return;\n }\n closeBridge();\n const generation = bridgeGenerationRef.current;\n portRef.current = port;\n port.onmessage = (event) => handlePortMessage(event.data, port, generation, installedApp);\n port.onmessageerror = () => {\n if (generation === bridgeGenerationRef.current && port === portRef.current) {\n postError(port, undefined, \"The app sent an unreadable message\");\n }\n };\n port.start();\n recentRequestIdsRef.current = new Set();\n sentStateRef.current = JSON.stringify(installedApp.state ?? null);\n sentInvocationsRef.current = new Map(installedApp.invocations.map((invocation) => [\n invocation.id,\n invocationSignature(invocation),\n ]));\n port.postMessage({\n type: RUN_APP_READY,\n version: RUN_APP_BRIDGE_VERSION,\n theme: themeRef.current,\n hostInput: hostInputEnabled(window),\n app: {\n id: installedApp.id,\n actorId: installedApp.actorId,\n actorHandle: installedApp.actorHandle,\n title: installedApp.title,\n description: installedApp.description,\n actions: installedApp.actions,\n },\n actor: { id: installedApp.actorId, handle: installedApp.actorHandle },\n state: installedApp.state ?? null,\n invocations: installedApp.invocations,\n });\n setFrameError(undefined);\n }, [closeBridge, handlePortMessage, postError]);\n\n useLayoutEffect(() => {\n const frame = iframeRef.current;\n if (!frame) return;\n closeBridge();\n setActionError(undefined);\n setFrameError(undefined);\n const installedApp = appRef.current;\n let initialLoaded = false;\n let pendingPort: MessagePort | undefined;\n const connect = (port: MessagePort) => {\n if (initialLoaded) attachBridge(port, installedApp);\n else pendingPort = port;\n };\n const receiveReady = (event: MessageEvent<unknown>) => {\n const data = event.data as { type?: unknown; version?: unknown; token?: unknown; keyboard?: unknown } | null;\n if (event.source === frame.contentWindow && event.origin === \"null\"\n && data?.type === \"ragents.app.escape\" && data.version === RUN_APP_BRIDGE_VERSION\n && data.token === bridgeToken) {\n window.dispatchEvent(new KeyboardEvent(\"keydown\", { ...(isRunPanelKeyboardMessage(data.keyboard) ? data.keyboard.event : { key: \"Escape\" }), bubbles: true, cancelable: true }));\n return;\n }\n if (event.source !== frame.contentWindow\n || event.origin !== \"null\"\n || data?.type !== RUN_APP_FRAME_READY\n || data.version !== RUN_APP_BRIDGE_VERSION\n || data.token !== bridgeToken\n || event.ports.length !== 1) return;\n if (pendingPort || portRef.current) {\n event.ports[0]!.close();\n return;\n }\n connect(event.ports[0]!);\n };\n const handleLoad = () => {\n if (!initialLoaded) {\n initialLoaded = true;\n if (pendingPort) {\n const port = pendingPort;\n pendingPort = undefined;\n attachBridge(port, installedApp);\n }\n return;\n }\n pendingPort?.close();\n pendingPort = undefined;\n closeBridge();\n setFrameError(\"The app left its installed page and was disconnected.\");\n };\n window.addEventListener(\"message\", receiveReady);\n frame.addEventListener(\"load\", handleLoad);\n frame.src = `${frameUrl}#ragentsBridge=${encodeURIComponent(bridgeToken)}`;\n const timeout = window.setTimeout(() => {\n if (!bridgeConnectedRef.current) setFrameError(\"The app did not open a valid host bridge.\");\n }, 5_000);\n return () => {\n window.clearTimeout(timeout);\n window.removeEventListener(\"message\", receiveReady);\n frame.removeEventListener(\"load\", handleLoad);\n pendingPort?.close();\n closeBridge();\n };\n }, [attachBridge, bridgeToken, closeBridge, frameUrl]);\n\n useEffect(() => {\n if (!bridgeReady) return;\n portRef.current?.postMessage({ type: RUN_APP_THEME, version: RUN_APP_BRIDGE_VERSION, theme });\n }, [bridgeReady, theme]);\n\n useEffect(() => {\n if (!bridgeReady) return;\n const stateSignature = JSON.stringify(app.state ?? null);\n if (stateSignature !== sentStateRef.current) {\n sentStateRef.current = stateSignature;\n const port = portRef.current;\n if (port) sendState(port);\n }\n app.invocations.forEach((invocation) => {\n const signature = invocationSignature(invocation);\n if (sentInvocationsRef.current.get(invocation.id) === signature) return;\n sentInvocationsRef.current.set(invocation.id, signature);\n portRef.current?.postMessage({\n type: RUN_APP_INVOCATION,\n version: RUN_APP_BRIDGE_VERSION,\n invocation,\n });\n });\n }, [app.invocations, app.state, bridgeReady, sendState]);\n\n useEffect(() => {\n if (!bridgeReady || !portRef.current) return;\n for (const actor of watchedChats.current.keys()) sendChatState(portRef.current, actor);\n }, [bridgeReady, sendChatState, session]);\n\n const latest = latestInvocation(app);\n const active = app.invocations.filter((invocation) => ACTIVE_STATUSES.has(invocation.status));\n const confirmationInvocation = active.find((invocation) => invocation.id === pendingConfirmationInvocationId);\n const confirmationAction = confirmationInvocation\n ? app.actions.find((action) => action.id === confirmationInvocation.actionId)\n : undefined;\n const status = frameError\n ? { tone: \"error\", title: \"App disconnected\", detail: frameError }\n : submitting.length > 0\n ? { tone: \"running\", title: \"Starting action\", detail: `${submitting.length} request(s)` }\n : confirmationAction\n ? { tone: \"confirm\", title: \"Waiting for your confirmation\", detail: confirmationAction.label }\n : active.length > 0\n ? { tone: \"running\", title: \"Action running\", detail: active.map((invocation) =>\n app.actions.find((action) => action.id === invocation.actionId)?.label.trim()\n || (access.can(\"runs.inspect\") ? invocation.actionId : \"\")).filter(Boolean).join(\", \") }\n : actionError\n ? { tone: \"error\", title: \"Action failed\", detail: actionError }\n : latest?.status === \"failed\"\n ? { tone: \"error\", title: \"Last action failed\", detail: latest.error }\n : latest?.status === \"cancelled\"\n ? { tone: \"muted\", title: \"Last action cancelled\", detail: latest.actionId }\n : latest?.status === \"succeeded\"\n ? {\n tone: \"success\",\n title: \"Last action completed\",\n detail: latest.output.at(-1) ?? latest.actionId,\n }\n : bridgeReady\n ? undefined\n : { tone: \"muted\", title: \"Loading app\", detail: \"Bridge not connected yet\" };\n\n const visibleStatus = status && (presentation === \"fullscreen\" ? status.tone === \"error\" : status.tone !== \"success\") ? status : undefined;\n\n const compact = presentation !== \"fullscreen\";\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <div aria-live=\"polite\" role=\"status\"\n className={cn(\"grid min-w-0 items-center overflow-hidden text-xs text-muted-foreground\",\n compact\n ? \"order-1 h-7 flex-[0_0_28px] grid-cols-[auto_minmax(0,1fr)] gap-1.5 px-workspace-inset py-1\"\n : \"h-[31px] flex-[0_0_31px] grid-cols-[8px_auto_minmax(0,1fr)] gap-[7px] border-b border-border-soft px-workspace-inset py-[5px]\")}>\n {visibleStatus && <>\n {!compact && <span className={cn(\"size-[7px] rounded-full bg-muted-foreground/55\", markTones[visibleStatus.tone])} />}\n <strong className={cn(\"font-semibold whitespace-nowrap text-foreground\", compact ? \"text-[0.63rem]\" : \"text-[0.7rem]\")}>{visibleStatus.title}</strong>\n <span className=\"truncate\" title={visibleStatus.detail}>{visibleStatus.detail}</span>\n </>}\n </div>\n <div className={cn(\"relative flex min-h-0 flex-1 overflow-hidden\", compact ? \"bg-transparent\" : \"bg-background\")}>\n <iframe\n allow=\"camera 'none'; geolocation 'none'; microphone 'none'\"\n className={cn(\"absolute inset-0 h-full w-full min-h-0 min-w-0 border-0\", compact ? \"bg-transparent\" : \"bg-background\")}\n ref={iframeRef}\n referrerPolicy=\"no-referrer\"\n sandbox=\"allow-scripts allow-forms allow-downloads\"\n aria-label={app.title}\n title=\"\"\n />\n </div>\n </div>\n );\n}\n", "import { useRef } from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport type { SessionContext } from \"@ragents/web/PluginRegistry\";\nimport { Button, Dialog, DialogContent, DialogTitle } from \"@ragents/web/ui\";\nimport { HostConfirmation, pendingConfirmationFor, actorProgramApps, useActorPrograms } from \"./AppsPanel\";\nimport { ActorViewFrame } from \"./ActorViewFrame\";\n\nexport function FullscreenHost({ session }: { session: SessionContext }) {\n const { api, closeFullscreen, error, fullscreenAppId, invoke, listing, runId } = useActorPrograms();\n const closeRef = useRef<HTMLButtonElement>(null);\n if (!fullscreenAppId) return null;\n const entry = actorProgramApps(session).find((candidate) => candidate.id === fullscreenAppId && candidate.app.visible !== false);\n if (!entry) return null;\n const app = listing?.apps.find((candidate) => candidate.id === fullscreenAppId);\n const title = entry.title;\n const confirmation = app ? pendingConfirmationFor(session, app) : undefined;\n return <Dialog key={`${runId}:${fullscreenAppId}`} open onOpenChange={(open) => { if (!open) closeFullscreen(); }}>\n <DialogContent className=\"h-[calc(100%-2*clamp(16px,2vw,24px))] w-[calc(100%-2*clamp(16px,2vw,24px))] gap-0 bg-background p-0\" initialFocus={closeRef} scope=\"surface\" showCloseButton={false} size=\"full\">\n <header className=\"flex flex-none items-center gap-3 border-b border-border bg-card py-2 pr-3 pl-4\">\n <DialogTitle className=\"min-w-0 flex-1 truncate text-[0.9rem]\" render={<h2 />}>{title}</DialogTitle>\n <Button aria-label={`Close ${title} full view`} className=\"rounded-full\" onClick={closeFullscreen} ref={closeRef} size=\"icon\" title={`Close ${title} full view`} variant=\"outline\"><XIcon /></Button>\n </header>\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden [&>[data-slot=host-confirmation]]:max-h-[65%] [&>[data-slot=host-confirmation]]:flex-[0_1_auto] [&>[data-slot=host-confirmation]]:overflow-auto\">\n {confirmation && <HostConfirmation action={confirmation} key={confirmation.id} session={session} />}\n {app ? <ActorViewFrame api={api} app={app} invoke={invoke} pendingConfirmationInvocationId={confirmation?.parameters.invocationId}\n presentation=\"fullscreen\" runId={runId} session={session} />\n : <p className=\"flex flex-1 items-center justify-center gap-2 text-[0.7rem] text-muted-foreground\" role={error ? \"alert\" : \"status\"}>{error ?? \"Loading actor view\"}</p>}\n </div>\n </DialogContent>\n </Dialog>;\n}\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { Spinner } from \"@ragents/web/ui\";\nimport { isRecord } from \"@ragents/web/lib/guards\";\nimport { runActorFrom } from \"@ragents/web/run-view\";\nimport type {\n SurfaceElementContext,\n SurfaceElementDefinition,\n CardSectionContext,\n SessionContext,\n} from \"@ragents/web/PluginRegistry\";\nimport { HostConfirmation, pendingConfirmationFor, actorProgramApps, useActorPrograms } from \"./AppsPanel\";\nimport { ActorViewFrame } from \"./ActorViewFrame\";\nimport { FunctionForm } from \"./FunctionForm\";\n\nexport function ActorProgramToolCardSection({ actor, session }: CardSectionContext) {\n const inspect = useAccess().can(\"runs.inspect\");\n const { listing } = useActorPrograms();\n const owner = runActorFrom(actor);\n if (!inspect || owner.lifecycle?.kind === \"stopped\") return null;\n const tools = listing?.tools.filter((tool) => tool.card && tool.actorId === owner.id) ?? [];\n if (tools.length === 0) return null;\n return (\n <section className=\"grid min-w-0 gap-[9px]\">\n {tools.map((tool) => (\n <article aria-label={tool.name} className=\"min-w-0\" key={`${session.session.id}:${tool.actorId}:${tool.functionId}:${tool.revision}`}>\n <strong>{tool.name}</strong>\n <FunctionForm session={session} tool={tool} />\n </article>\n ))}\n </section>\n );\n}\n\nexport const actorProgramSurfaceElements = (session: SessionContext): readonly SurfaceElementDefinition[] =>\n actorProgramApps(session).flatMap((module): SurfaceElementDefinition[] => {\n const rawPlacements = module.app.placements;\n const placement = Array.isArray(rawPlacements) ? rawPlacements.find((entry) => isRecord(entry) && entry.kind === \"canvas\") : undefined;\n const surface = isRecord(placement) ? placement : undefined;\n if (surface && typeof surface.anchorActorId !== \"string\") {\n throw new Error(`The surface placement of the actor view ${module.title} is invalid`);\n }\n if (surface && surface.anchorActorId !== module.actorId) throw new Error(`The view ${module.title} belongs to @${module.actorHandle}.`);\n return [{\n id: module.id,\n title: module.title,\n visible: module.app.visible !== false,\n anchorActorId: module.actorId,\n data: { actorId: module.actorId, actorHandle: module.actorHandle },\n entity: { type: \"run-app\", id: module.id },\n }];\n });\n\nexport function ActorProgramSurfaceElement({ definition, session }: SurfaceElementContext) {\n const { api, invoke, listing, runId } = useActorPrograms();\n const app = listing?.apps.find((candidate) => candidate.id === definition.id);\n const confirmation = app ? pendingConfirmationFor(session, app) : undefined;\n const title = definition.title ?? definition.id;\n const frame = app ? (\n <ActorViewFrame\n api={api}\n app={app}\n invoke={invoke}\n pendingConfirmationInvocationId={confirmation?.parameters.invocationId}\n presentation=\"tiled\"\n runId={runId}\n session={session}\n />\n ) : (\n <div className=\"flex flex-1 items-center justify-center gap-2 text-[0.7rem] text-muted-foreground\">\n <Spinner aria-hidden aria-label={undefined} role={undefined} />\n <span>Loading actor view</span>\n </div>\n );\n return (\n <article aria-label={title} className=\"flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden\">\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden [&>[data-slot=host-confirmation]]:max-h-[65%] [&>[data-slot=host-confirmation]]:flex-[0_1_auto] [&>[data-slot=host-confirmation]]:overflow-auto\">\n {confirmation && <HostConfirmation action={confirmation} key={confirmation.id} session={session} />}\n {frame}\n </div>\n </article>\n );\n}\n", "import {\n pluginRoutePrefixFrom,\n type SessionProviderProps,\n type WebPlugin,\n type WebPluginDescriptor,\n} from \"@ragents/web/PluginRegistry\";\nimport { createActorProgramsApi } from \"./api\";\nimport {\n RUN_TOOLS_TAB_ID,\n ActorProgramsHeader,\n ActorProgramsProvider,\n ToolsBadge,\n ToolsPanel,\n} from \"./AppsPanel\";\nimport { FullscreenHost } from \"./FullscreenHost\";\nimport {\n ActorProgramSurfaceElement,\n ActorProgramToolCardSection,\n actorProgramSurfaceElements,\n} from \"./EmbeddedApps\";\n\nexport const ACTOR_PROGRAMS_PLUGIN_ID = \"ragents.actor-programs\";\n\nfunction IconTools() {\n return (\n <svg aria-hidden fill=\"none\" height=\"15\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.7\" viewBox=\"0 0 24 24\" width=\"15\">\n <path d=\"M14.5 6.5 17.5 3.5l3 3-3 3\" />\n <path d=\"m9.5 17.5-3 3-3-3 3-3\" />\n <path d=\"M13 5H9a4 4 0 0 0-4 4v5.5M11 19h4a4 4 0 0 0 4-4V9.5\" />\n </svg>\n );\n}\n\nconst configuredPlugin = (descriptor: WebPluginDescriptor, routePrefix: string): WebPlugin => {\n const api = createActorProgramsApi(routePrefix);\n\n function Provider({ children, session }: SessionProviderProps) {\n return (\n <ActorProgramsProvider api={api} session={session}>\n {children}\n <FullscreenHost session={session} />\n </ActorProgramsProvider>\n );\n }\n\n return {\n ...descriptor,\n needsRunView: true,\n SessionProvider: Provider,\n sessionHeaders: [{\n id: \"ragents.actor-programs.quick-list\",\n placement: \"surface\",\n order: 250,\n Header: ActorProgramsHeader,\n }],\n cardSections: [{\n id: \"ragents.actor-programs.tools\",\n order: 400,\n Section: ActorProgramToolCardSection,\n }],\n surfaceElements: [{\n id: \"ragents.actor-programs.apps\",\n order: 400,\n select: actorProgramSurfaceElements,\n Element: ActorProgramSurfaceElement,\n }],\n workspaceTabs: [\n {\n readRight: \"runs.inspect\",\n id: RUN_TOOLS_TAB_ID,\n label: \"Functions\",\n order: 251,\n Icon: IconTools,\n Panel: ToolsPanel,\n Badge: ToolsBadge,\n },\n ],\n };\n};\n\nconst descriptor: WebPluginDescriptor = { id: ACTOR_PROGRAMS_PLUGIN_ID };\n\nexport const webPlugin: WebPlugin = {\n ...descriptor,\n activate: (config) => configuredPlugin(descriptor, pluginRoutePrefixFrom(descriptor.id, config)),\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["read", "specifier", "name", "module", "PluginRegistry_pluginRoutePrefixFrom_default", "read", "PluginRegistry_useSurfaceController_default", "read", "guards_isRecord_default", "read", "rpc_rpc_default", "read", "access_token_withAccessToken_default", "read", "contract_ACTOR_INVOCATIONS_STATE_ID_default", "read", "contract_ACTOR_PROGRAMS_STATE_ID_default", "read", "contract_ACTOR_STATE_ID_default", "read", "contract_actorProgramContracts_default", "read", "actorFunctionParameterTypes", "MAX_CHAT_ATTACHMENTS", "MAX_CHAT_ATTACHMENT_BYTES", "MAX_CHAT_REQUEST_BYTES", "chatAttachmentMediaType", "name", "mediaType", "explicit", "parseChatAttachments", "value", "total", "entry", "index", "data", "normalizedType", "padding", "RUN_APP_BRIDGE_VERSION", "RUN_APP_FRAME_READY", "RUN_APP_CONNECTED", "RUN_APP_READY", "RUN_APP_THEME", "RUN_APP_INVOKE", "RUN_APP_GET_STATE", "RUN_APP_STATE", "RUN_APP_INVOCATION", "RUN_APP_ERROR", "RUN_APP_CHAT_WATCH", "RUN_APP_CHAT_UNWATCH", "RUN_APP_CHAT_SEND", "RUN_APP_CHAT_STATE", "RUN_APP_CHAT_ACK", "ID_PATTERN", "MAX_INPUT_LENGTH", "MAX_DEPTH", "isJsonValue", "value", "depth", "entry", "guards_isRecord_default", "key", "requestIdFrom", "inputWithinLimit", "validateRunAppBridgeRequest", "requestId", "common", "attachments", "parseChatAttachments", "cause", "ID_PATTERN", "VIEW_ID_PATTERN", "HASH_PATTERN", "PARAMETER_TYPES", "actorFunctionParameterTypes", "requiredString", "value", "field", "optionalString", "idFrom", "id", "unique", "values", "keyOf", "label", "ids", "runAppActionFrom", "guards_isRecord_default", "runAppInvocationFrom", "line", "base", "isJsonValue", "runAppPlacementFrom", "runAppFrom", "rawPlacements", "actions", "action", "invocations", "invocation", "actionIds", "placements", "actorId", "placement", "runToolParameterFrom", "runToolTargetFrom", "runScriptToolFrom", "sourceHash", "parameter", "target", "actorProgramSourceFileFrom", "actorProgramSourceFrom", "file", "actorProgramsListingFrom", "app", "tool", "segment", "frameBase", "routePrefix", "runId", "createActorProgramsApi", "signal", "rpc_rpc_default", "contract_actorProgramContracts_default", "moduleId", "appId", "revision", "access_token_withAccessToken_default", "actionId", "requestId", "input", "invocationId", "actorHandle", "functionId", "AccessContext_useAccess_default", "read", "react_createContext_default", "read", "react_createElement_default", "read", "react_forwardRef_default", "read", "react_useCallback_default", "read", "react_useContext_default", "read", "react_useEffect_default", "read", "react_useLayoutEffect_default", "read", "react_useMemo_default", "read", "react_useRef_default", "read", "react_useState_default", "read", "toKebabCase", "string", "toLucideIconData", "iconName", "iconNode", "aliases", "toKebabCase", "toCamelCase", "string", "out", "upperNext", "ch", "toPascalCase", "string", "camelCase", "toCamelCase", "mergeClasses", "classes", "className", "index", "array", "defaultAttributes", "isDefined", "value", "buildLucideIconNode", "icon", "params", "attributeNames", "getAttributeName", "attributeName", "viewBoxWidth", "defaultAttributes", "viewBoxHeight", "aliasClassNames", "alias", "iconClassNames", "classNamesFromClassName", "className", "mergeClasses", "calculatedStrokeWidth", "attrs", "attrName", "child", "name", "children", "nextAttrs", "buildLucideIconForReact", "icon", "params", "buildLucideIconNode", "hasA11yProp", "props", "prop", "LucideContext", "react_createContext_default", "useLucideContext", "react_useContext_default", "LucideContext", "Icon", "react_forwardRef_default", "color", "size", "width", "height", "strokeWidth", "absoluteStrokeWidth", "nonScalingStroke", "className", "children", "iconNode", "icon", "rest", "ref", "contextSize", "contextStrokeWidth", "contextAbsoluteStrokeWidth", "contextNonScalingStroke", "contextColor", "contextClass", "useLucideContext", "hasAccessibleProp", "hasA11yProp", "name", "svgAttributes", "builtIconNode", "buildLucideIconForReact", "mergeClasses", "react_createElement_default", "tag", "attrs", "createLucideIcon", "iconDataOrName", "iconNode", "aliases", "iconData", "toLucideIconData", "Component", "react_forwardRef_default", "className", "props", "ref", "react_createElement_default", "Icon", "toPascalCase", "__iconData", "ArrowLeft", "createLucideIcon", "__iconData", "LayoutGrid", "createLucideIcon", "__iconData", "X", "createLucideIcon", "ui_Alert_default", "read", "ui_Badge_default", "read", "ui_Button_default", "read", "ui_Dialog_default", "read", "ui_DialogContent_default", "read", "ui_DialogTitle_default", "read", "ui_Empty_default", "read", "ui_EmptyContent_default", "read", "ui_EmptyDescription_default", "read", "ui_EmptyHeader_default", "read", "ui_EmptyMedia_default", "read", "ui_EmptyTitle_default", "read", "ui_Input_default", "read", "ui_Spinner_default", "read", "ui_Textarea_default", "read", "ui_cn_default", "read", "Toolbar_ToolbarCopy_default", "read", "Toolbar_ToolbarItem_default", "read", "Toolbar_ToolbarLabel_default", "read", "Toolbar_ToolbarText_default", "read", "askPayloadOf", "ASK_PLUGIN_ID", "answerQuestion", "QuestionCard", "run_view_runActorFrom_default", "read", "run_view_runViewFrom_default", "read", "useSurfaceEntities", "SURFACE_TILE_DRAG_TYPE", "ProgramSlotContext", "SourceCode_SourceCode_default", "read", "actorProgramSourceReference", "runView", "actorId", "entry", "run_view_runViewFrom_default", "contract_ACTOR_PROGRAMS_STATE_ID_default", "guards_isRecord_default", "program", "actorProgramViews", "view", "actor", "app", "currentActorListing", "listing", "currentViews", "activeActors", "current", "state", "contract_ACTOR_STATE_ID_default", "values", "isJsonValue", "tool", "jsx_runtime_Fragment_default", "read", "jsx_runtime_jsx_default", "read", "jsx_runtime_jsxs_default", "read", "ProgramSource", "api", "moduleId", "runId", "revision", "expandedByDefault", "expanded", "setExpanded", "react_useState_default", "state", "setState", "activePath", "setActivePath", "react_useEffect_default", "controller", "files", "file", "caught", "active", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "ui_Button_default", "jsx_runtime_Fragment_default", "ui_Spinner_default", "ui_Alert_default", "ui_cn_default", "SourceCode_SourceCode_default", "actorProgramSourceView", "view", "actorId", "program", "actorProgramSourceReference", "waitForPoll", "signal", "resolve", "reject", "timer", "abort", "invokeActorFunction", "api", "runId", "tool", "input", "changed", "invocation", "parseParameter", "parameter", "form", "raw", "value", "entry", "isJsonValue", "actorFunctionInput", "parameters", "selectClass", "FunctionForm", "session", "tool", "detail", "writable", "AccessContext_useAccess_default", "api", "refresh", "runId", "useActorPrograms", "error", "setError", "react_useState_default", "busy", "setBusy", "invocation", "setInvocation", "controllerRef", "react_useRef_default", "react_useEffect_default", "confirmation", "pendingConfirmationFor", "submit", "event", "controller", "input", "actorFunctionInput", "invokeActorFunction", "current", "caught", "status", "failure", "jsx_runtime_jsxs_default", "ui_cn_default", "jsx_runtime_jsx_default", "parameter", "ui_Textarea_default", "ui_Input_default", "ui_Button_default", "HostConfirmation", "ExpandIcon", "jsx_runtime_jsx_default", "actorProgramsRevision", "runView", "view", "run_view_runViewFrom_default", "programActors", "entry", "contract_ACTOR_PROGRAMS_STATE_ID_default", "actor", "left", "right", "contract_ACTOR_INVOCATIONS_STATE_ID_default", "contract_ACTOR_STATE_ID_default", "activeActorInvocations", "apps", "includeFunctions", "appIds", "app", "active", "invocation", "left", "right", "target", "readActorInvocation", "api", "runId", "signal", "invocationTime", "raw", "parsed", "latestInvocation", "latest", "ActorProgramsContext", "react_createContext_default", "useOptionalActorPrograms", "react_useContext_default", "useActorPrograms", "value", "RUN_TOOLS_TAB_ID", "entryIconClass", "headClass", "sectionLabelClass", "quickIconClass", "ACTIVE_STATUSES", "POLL_INTERVAL", "replaceInvocation", "listing", "invocation", "app", "exists", "entry", "ActorProgramsProvider", "api", "children", "session", "runId", "canInspect", "AccessContext_useAccess_default", "storedListing", "setListing", "react_useState_default", "react_useMemo_default", "currentActorListing", "error", "setError", "fullscreen", "setFullscreen", "visibleApps", "actorProgramApps", "fullscreenAppId", "closeFullscreen", "react_useCallback_default", "openFullscreen", "appId", "react_useEffect_default", "loadRevision", "react_useRef_default", "refresh", "revision", "next", "caught", "moduleRevision", "actorProgramsRevision", "activeInvocations", "activeActorInvocations", "activeKey", "targets", "disposed", "timer", "controller", "poll", "results", "target", "readActorInvocation", "updates", "result", "current", "update", "failed", "invoke", "actionId", "requestId", "input", "value", "slot", "candidate", "pendingConfirmationFor", "view", "actorId", "actorProgramSourceView", "jsx_runtime_jsx_default", "ActorProgramsContext", "ProgramSlotContext", "actorProgramViews", "run_view_runViewFrom_default", "invocationIds", "action", "ASK_PLUGIN_ID", "contract_ACTOR_PROGRAMS_STATE_ID_default", "HostConfirmation", "access", "busy", "setBusy", "answer", "text", "answerQuestion", "jsx_runtime_jsxs_default", "QuestionCard", "askPayloadOf", "targetLabel", "ToolsPanel", "active", "navigation", "selection", "useActorPrograms", "selectedName", "selected", "tool", "ui_Spinner_default", "ui_Empty_default", "ui_EmptyHeader_default", "ui_EmptyMedia_default", "IconTools", "ui_EmptyTitle_default", "ui_EmptyDescription_default", "ui_EmptyContent_default", "ui_Button_default", "ArrowLeft", "ui_cn_default", "FunctionForm", "ProgramSource", "fact", "ui_Alert_default", "ui_Badge_default", "IconOpen", "ActorProgramsHeader", "canArrange", "surface", "PluginRegistry_useSurfaceController_default", "stage", "useSurfaceEntities", "apps", "Toolbar_ToolbarItem_default", "event", "SURFACE_TILE_DRAG_TYPE", "LayoutGrid", "Toolbar_ToolbarCopy_default", "Toolbar_ToolbarLabel_default", "Toolbar_ToolbarText_default", "ExpandIcon", "ToolsBadge", "size", "input_bridge_hostInputEnabled_default", "read", "input_bridge_isRunPanelKeyboardMessage_default", "read", "input_bridge_relayFrameInput_default", "read", "theme_useResolvedTheme_default", "read", "api_sendActorMessage_default", "read", "contracts_actorByHandle_default", "read", "actor_conversation_actorChatMessages_default", "read", "chat_target_programChatNotice_default", "read", "resolveChatActor", "session", "target", "view", "run_view_runViewFrom_default", "actor", "entry", "contracts_actorByHandle_default", "names", "chatSnapshotOf", "primary", "error", "chat_target_programChatNotice_default", "actor_conversation_actorChatMessages_default", "useAttachmentCapabilities_getAttachmentCapabilities_default", "read", "ACTIVE_STATUSES", "REQUEST_ID_HISTORY_LIMIT", "invocationSignature", "invocation", "markTones", "ActorViewFrame", "api", "app", "invoke", "pendingConfirmationInvocationId", "presentation", "runId", "session", "access", "AccessContext_useAccess_default", "theme", "theme_useResolvedTheme_default", "themeRef", "react_useRef_default", "writableRef", "iframeRef", "portRef", "bridgeGenerationRef", "bridgeConnectedRef", "appRef", "sessionRef", "watchedChats", "chatCapabilities", "recentRequestIdsRef", "sentStateRef", "sentInvocationsRef", "bridgeReady", "setBridgeReady", "react_useState_default", "frameError", "setFrameError", "actionError", "setActionError", "submitting", "setSubmitting", "frameUrl", "react_useMemo_default", "bridgeToken", "closeBridge", "react_useCallback_default", "sendChatState", "port", "actor", "requestId", "generation", "publish", "capabilities", "chat", "chatSnapshotOf", "snapshot", "signature", "RUN_APP_CHAT_STATE", "RUN_APP_BRIDGE_VERSION", "current", "target", "resolveChatActor", "key", "entry", "pending", "useAttachmentCapabilities_getAttachmentCapabilities_default", "attachmentCapabilities", "cause", "saved", "result", "postError", "message", "RUN_APP_ERROR", "executeRequest", "request", "installedApp", "RUN_APP_INVOCATION", "caught", "sendState", "RUN_APP_STATE", "handlePortMessage", "value", "input_bridge_relayFrameInput_default", "RUN_APP_CONNECTED", "validation", "validateRunAppBridgeRequest", "oldest", "RUN_APP_CHAT_WATCH", "RUN_APP_CHAT_UNWATCH", "RUN_APP_CHAT_ACK", "RUN_APP_CHAT_SEND", "api_sendActorMessage_default", "error", "RUN_APP_GET_STATE", "attachBridge", "event", "RUN_APP_READY", "input_bridge_hostInputEnabled_default", "react_useLayoutEffect_default", "frame", "initialLoaded", "pendingPort", "connect", "receiveReady", "data", "input_bridge_isRunPanelKeyboardMessage_default", "RUN_APP_FRAME_READY", "handleLoad", "timeout", "react_useEffect_default", "RUN_APP_THEME", "stateSignature", "latest", "latestInvocation", "active", "confirmationInvocation", "confirmationAction", "action", "status", "visibleStatus", "compact", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "ui_cn_default", "jsx_runtime_Fragment_default", "FullscreenHost", "session", "api", "closeFullscreen", "error", "fullscreenAppId", "invoke", "listing", "runId", "useActorPrograms", "closeRef", "react_useRef_default", "entry", "actorProgramApps", "candidate", "app", "title", "confirmation", "pendingConfirmationFor", "jsx_runtime_jsx_default", "ui_Dialog_default", "open", "jsx_runtime_jsxs_default", "ui_DialogContent_default", "ui_DialogTitle_default", "ui_Button_default", "X", "HostConfirmation", "ActorViewFrame", "ActorProgramToolCardSection", "actor", "session", "inspect", "AccessContext_useAccess_default", "listing", "useActorPrograms", "owner", "run_view_runActorFrom_default", "tools", "tool", "jsx_runtime_jsx_default", "jsx_runtime_jsxs_default", "FunctionForm", "actorProgramSurfaceElements", "actorProgramApps", "module", "rawPlacements", "placement", "entry", "guards_isRecord_default", "surface", "ActorProgramSurfaceElement", "definition", "api", "invoke", "runId", "app", "candidate", "confirmation", "pendingConfirmationFor", "title", "frame", "ActorViewFrame", "ui_Spinner_default", "HostConfirmation", "ACTOR_PROGRAMS_PLUGIN_ID", "IconTools", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "configuredPlugin", "descriptor", "routePrefix", "api", "createActorProgramsApi", "Provider", "children", "session", "ActorProgramsProvider", "FullscreenHost", "ActorProgramsHeader", "ActorProgramToolCardSection", "actorProgramSurfaceElements", "ActorProgramSurfaceElement", "RUN_TOOLS_TAB_ID", "ToolsPanel", "ToolsBadge", "webPlugin", "config", "PluginRegistry_pluginRoutePrefixFrom_default"]
7
7
  }