@schlenkr/ragents 0.1.9 → 0.1.11

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 (749) hide show
  1. package/apps/server/package.json +1 -1
  2. package/apps/server/src/access-projection.ts +9 -39
  3. package/apps/server/src/access-service.ts +3 -3
  4. package/apps/server/src/access-session.ts +19 -19
  5. package/apps/server/src/api/contracts.ts +32 -29
  6. package/apps/server/src/api/core-methods.ts +21 -19
  7. package/apps/server/src/api/delivery.ts +2 -2
  8. package/apps/server/src/api/reference.ts +27 -27
  9. package/apps/server/src/api/rights.ts +18 -18
  10. package/apps/server/src/chat-handler.ts +5 -5
  11. package/apps/server/src/config-definition.ts +37 -10
  12. package/apps/server/src/config-file.ts +49 -49
  13. package/apps/server/src/config.ts +2 -0
  14. package/apps/server/src/data-directory.ts +2 -2
  15. package/apps/server/src/external-access.ts +1 -1
  16. package/apps/server/src/folder-install.ts +1 -1
  17. package/apps/server/src/help-files.ts +1 -1
  18. package/apps/server/src/host-api.json +8 -1
  19. package/apps/server/src/host-api.ts +3 -2
  20. package/apps/server/src/host-record.ts +3 -3
  21. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  22. package/apps/server/src/host-version.ts +17 -17
  23. package/apps/server/src/host-web.ts +5 -5
  24. package/apps/server/src/main.ts +6 -6
  25. package/apps/server/src/missing-environment.ts +6 -6
  26. package/apps/server/src/parent-watch.ts +4 -4
  27. package/apps/server/src/plugin-build/build.ts +31 -31
  28. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  29. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  30. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  31. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  32. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  33. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  34. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  35. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  36. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  37. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  38. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  39. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  40. package/apps/server/src/plugin-support/http.ts +2 -2
  41. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  42. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  43. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  44. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  45. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  46. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  47. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  48. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  49. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  50. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  51. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  52. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  53. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  54. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  55. package/apps/server/src/plugin-support/process-sandbox.ts +48 -47
  56. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  57. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  58. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  59. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  60. package/apps/server/src/plugin-support/prompt.ts +1 -1
  61. package/apps/server/src/plugin-support/provision.ts +8 -8
  62. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  63. package/apps/server/src/plugin-support/skills.ts +18 -18
  64. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  65. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  66. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  67. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  68. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  69. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  70. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  71. package/apps/server/src/plugin-support/zip.ts +7 -7
  72. package/apps/server/src/profile/bundle-manifest.ts +17 -17
  73. package/apps/server/src/profile/compose.ts +12 -7
  74. package/apps/server/src/profile/plugin-discovery.ts +12 -12
  75. package/apps/server/src/profile/provisioning.ts +5 -5
  76. package/apps/server/src/profile-target.ts +10 -10
  77. package/apps/server/src/protocol.ts +2 -2
  78. package/apps/server/src/provider.ts +63 -58
  79. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  80. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  81. package/apps/server/src/ragents/coordinator.ts +2 -2
  82. package/apps/server/src/ragents/engine.ts +25 -24
  83. package/apps/server/src/ragents/global-chat.ts +14 -8
  84. package/apps/server/src/ragents/host-services.ts +6 -3
  85. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  86. package/apps/server/src/ragents/run-owner.ts +2 -2
  87. package/apps/server/src/ragents/session.ts +49 -49
  88. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  89. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  90. package/apps/server/src/rpc/dispatcher.ts +19 -19
  91. package/apps/server/src/rpc/http-transport.ts +11 -11
  92. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  93. package/apps/server/src/run-preparation-input.ts +5 -5
  94. package/apps/server/src/run-preparation.ts +24 -24
  95. package/apps/server/src/run-transfer.ts +39 -39
  96. package/apps/server/src/server.ts +51 -49
  97. package/apps/server/src/settings.ts +1 -1
  98. package/apps/server/src/startup.ts +3 -3
  99. package/apps/server/src/title-compactor.ts +9 -9
  100. package/apps/server/src/title-settings.ts +3 -3
  101. package/apps/server/src/web-bundles.ts +2 -2
  102. package/apps/server/src/web-stylesheet.ts +2 -2
  103. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-xXXhTDbh.js → highlighted-body-KPVGNVTW-BfNSGxjB.js} +1 -1
  104. package/apps/web/dist/assets/main-D6bsKcIK.js +11 -0
  105. package/apps/web/dist/assets/mermaid-HWGCJPDP-DROEqEeg.js +608 -0
  106. package/apps/web/dist/assets/runPanel-Dumuuqry.js +21 -0
  107. package/apps/web/dist/help/guide-access.html +5 -5
  108. package/apps/web/dist/help/guide-access.md +2 -2
  109. package/apps/web/dist/help/guide-clients.html +64 -55
  110. package/apps/web/dist/help/guide-clients.md +62 -52
  111. package/apps/web/dist/help/guide-distributed.html +12 -7
  112. package/apps/web/dist/help/guide-distributed.md +9 -4
  113. package/apps/web/dist/help/guide-functions.html +3 -3
  114. package/apps/web/dist/help/guide-getting-started.html +24 -15
  115. package/apps/web/dist/help/guide-getting-started.md +22 -12
  116. package/apps/web/dist/help/guide-ideas.html +3 -3
  117. package/apps/web/dist/help/guide-plugins.html +5 -4
  118. package/apps/web/dist/help/guide-plugins.md +2 -1
  119. package/apps/web/dist/help/guide-programs.html +3 -3
  120. package/apps/web/dist/help/guide-runtime.html +6 -6
  121. package/apps/web/dist/help/guide-runtime.md +3 -3
  122. package/apps/web/dist/help/guide.html +3 -3
  123. package/apps/web/dist/help/index.html +1997 -942
  124. package/apps/web/dist/help/mini-app.css +30 -0
  125. package/apps/web/dist/help/mini-app.js +14 -14
  126. package/apps/web/dist/host-web.json +90 -90
  127. package/apps/web/dist/index.html +3 -3
  128. package/apps/web/dist/run-panel.html +3 -3
  129. package/apps/web/package.json +1 -1
  130. package/apps/web/src/AccessContext.tsx +15 -15
  131. package/apps/web/src/App.tsx +13 -13
  132. package/apps/web/src/DiffCode.tsx +2 -2
  133. package/apps/web/src/HelpDialog.tsx +3 -3
  134. package/apps/web/src/Overview.tsx +13 -13
  135. package/apps/web/src/PluginActivation.ts +1 -1
  136. package/apps/web/src/PluginChat.tsx +15 -15
  137. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  138. package/apps/web/src/PluginRegistry.tsx +44 -44
  139. package/apps/web/src/RunPreparationChat.tsx +11 -11
  140. package/apps/web/src/RunStore.ts +1 -1
  141. package/apps/web/src/SessionList.tsx +14 -14
  142. package/apps/web/src/SettingsModal.tsx +112 -112
  143. package/apps/web/src/StartOptions.tsx +11 -11
  144. package/apps/web/src/StartSelection.tsx +11 -11
  145. package/apps/web/src/StartTiles.tsx +8 -8
  146. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  147. package/apps/web/src/ThemeSettings.tsx +8 -8
  148. package/apps/web/src/TitleModelSettings.tsx +13 -13
  149. package/apps/web/src/WorkspacePanel.tsx +9 -9
  150. package/apps/web/src/access-session.ts +4 -4
  151. package/apps/web/src/access-token.ts +5 -5
  152. package/apps/web/src/actor-conversation.ts +3 -3
  153. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  154. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  155. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  156. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  157. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  158. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  159. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  160. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  161. package/apps/web/src/api.ts +7 -7
  162. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  163. package/apps/web/src/chat/chat-target.ts +3 -3
  164. package/apps/web/src/chat/requests.ts +2 -2
  165. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  166. package/apps/web/src/chat-view-settings.tsx +5 -6
  167. package/apps/web/src/diff-view.css +1 -1
  168. package/apps/web/src/highlighting.css +1 -1
  169. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  170. package/apps/web/src/lib/labels.ts +6 -6
  171. package/apps/web/src/main.tsx +4 -4
  172. package/apps/web/src/offered-machines.ts +2 -2
  173. package/apps/web/src/page-opener.tsx +1 -1
  174. package/apps/web/src/panel/ConnectionsPage.tsx +26 -23
  175. package/apps/web/src/panel/LoginForm.tsx +6 -6
  176. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  177. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  178. package/apps/web/src/panel/PanelPage.tsx +1 -1
  179. package/apps/web/src/panel/RunLine.tsx +4 -4
  180. package/apps/web/src/panel/RunsPage.tsx +15 -15
  181. package/apps/web/src/panel/StartPage.tsx +29 -26
  182. package/apps/web/src/panel/connection-state.ts +9 -9
  183. package/apps/web/src/panel/contract.ts +34 -27
  184. package/apps/web/src/panel.tsx +1 -1
  185. package/apps/web/src/plugin-bootstrap.ts +5 -5
  186. package/apps/web/src/product/ModelControl.tsx +3 -3
  187. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  188. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  189. package/apps/web/src/product/model-settings.ts +2 -2
  190. package/apps/web/src/rpc/client.ts +16 -16
  191. package/apps/web/src/rpc.ts +1 -1
  192. package/apps/web/src/run-overview.ts +1 -1
  193. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  194. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  195. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  196. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  197. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  198. package/apps/web/src/run-panel/clipboard.ts +3 -3
  199. package/apps/web/src/run-panel/host-contract.ts +5 -5
  200. package/apps/web/src/run-panel/host.ts +15 -15
  201. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  202. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  203. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  204. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  205. package/apps/web/src/run-panel.tsx +4 -4
  206. package/apps/web/src/run-preparation.ts +2 -2
  207. package/apps/web/src/run-view.ts +3 -3
  208. package/apps/web/src/settings-contributions.ts +32 -32
  209. package/apps/web/src/theme.ts +9 -9
  210. package/apps/web/src/title-model-settings.ts +6 -6
  211. package/apps/web/src/ui/ListDetail.tsx +9 -9
  212. package/apps/web/src/ui/dialog.tsx +2 -2
  213. package/apps/web/src/ui/modal-controller.ts +3 -3
  214. package/apps/web/src/ui/modal.tsx +2 -2
  215. package/apps/web/src/ui/popover.tsx +1 -1
  216. package/apps/web/src/ui/relative-time.ts +8 -8
  217. package/apps/web/src/ui/startup-notice.tsx +2 -2
  218. package/apps/web/src/ui/state-icon.tsx +1 -1
  219. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  220. package/apps/web/src/ui/stop-button.tsx +2 -2
  221. package/bundles/ragents.activity/ragents-bundle.json +2 -2
  222. package/bundles/ragents.activity/web/classes.json +1 -1
  223. package/bundles/ragents.activity/web/index.js +1 -1
  224. package/bundles/ragents.activity/web/index.js.map +2 -2
  225. package/bundles/ragents.actor-programs/ragents-bundle.json +2 -2
  226. package/bundles/ragents.actor-programs/server/index.js +256 -228
  227. package/bundles/ragents.actor-programs/server/index.js.map +4 -4
  228. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  229. package/bundles/ragents.actor-programs/web/index.js +1 -1
  230. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  231. package/bundles/ragents.ask/ragents-bundle.json +2 -4
  232. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  233. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  234. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  235. package/bundles/ragents.ask/server/index.js +23 -23
  236. package/bundles/ragents.ask/server/index.js.map +2 -2
  237. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  238. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  239. package/bundles/ragents.ask/web/chunks/{chunk-V7W3QDVS.js → chunk-IQBHK7MV.js} +2 -2
  240. package/bundles/ragents.ask/web/chunks/{chunk-V7W3QDVS.js.map → chunk-IQBHK7MV.js.map} +4 -4
  241. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  242. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  243. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  245. package/bundles/ragents.ask/web/classes.json +1 -1
  246. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  247. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  248. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  249. package/bundles/ragents.ask/web/index.js +1 -1
  250. package/bundles/ragents.ask/web/index.js.map +4 -4
  251. package/bundles/ragents.browser/executor/index.mjs +35 -35
  252. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  253. package/bundles/ragents.browser/ragents-bundle.json +2 -2
  254. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  255. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  256. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  257. package/bundles/ragents.browser/server/index.js +31 -31
  258. package/bundles/ragents.browser/server/index.js.map +2 -2
  259. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  260. package/bundles/ragents.documents/prompt.hbs +1 -1
  261. package/bundles/ragents.documents/ragents-bundle.json +2 -2
  262. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  263. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  264. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  265. package/bundles/ragents.documents/server/index.js +26 -26
  266. package/bundles/ragents.documents/server/index.js.map +2 -2
  267. package/bundles/ragents.documents/web/classes.json +1 -1
  268. package/bundles/ragents.documents/web/index.js +1 -1
  269. package/bundles/ragents.documents/web/index.js.map +3 -3
  270. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  271. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  272. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +2 -2
  273. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  274. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  275. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  276. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  277. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  278. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +2 -2
  280. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  281. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  282. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  283. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  284. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  285. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  286. package/bundles/ragents.lsp-typescript/ragents-bundle.json +2 -2
  287. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  288. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  289. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  290. package/bundles/ragents.model-relay/ragents-bundle.json +7 -3
  291. package/bundles/ragents.model-relay/server/index.js +25 -21
  292. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  293. package/bundles/ragents.orchestration/ragents-bundle.json +2 -2
  294. package/bundles/ragents.orchestration/server/index.js +28 -28
  295. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  296. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  297. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  300. package/bundles/ragents.orchestration/web/classes.json +1 -1
  301. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  302. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  303. package/bundles/ragents.orchestration/web/index.js +8 -8
  304. package/bundles/ragents.orchestration/web/index.js.map +3 -3
  305. package/bundles/ragents.overseer/ragents-bundle.json +2 -2
  306. package/bundles/ragents.overseer/server/index.js +99 -99
  307. package/bundles/ragents.overseer/server/index.js.map +2 -2
  308. package/bundles/ragents.overseer/web/classes.json +1 -1
  309. package/bundles/ragents.overseer/web/index.js +1 -1
  310. package/bundles/ragents.overseer/web/index.js.map +2 -2
  311. package/bundles/ragents.processes/ragents-bundle.json +2 -2
  312. package/bundles/ragents.processes/server/index.js +11 -11
  313. package/bundles/ragents.processes/server/index.js.map +2 -2
  314. package/bundles/ragents.processes/web/classes.json +1 -1
  315. package/bundles/ragents.processes/web/index.js +3 -3
  316. package/bundles/ragents.processes/web/index.js.map +2 -2
  317. package/bundles/ragents.product/ragents-bundle.json +2 -2
  318. package/bundles/ragents.product/server/index.js +12 -13
  319. package/bundles/ragents.product/server/index.js.map +2 -2
  320. package/bundles/ragents.product/web/classes.json +1 -1
  321. package/bundles/ragents.product/web/index.js +1 -1
  322. package/bundles/ragents.product/web/index.js.map +2 -2
  323. package/bundles/ragents.profile-distribution/ragents-bundle.json +2 -2
  324. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  325. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  326. package/bundles/ragents.reference/ragents-bundle.json +2 -2
  327. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  328. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  335. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  336. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  340. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  341. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  347. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  348. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  349. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  350. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  352. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  353. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  360. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  361. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  362. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  363. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  365. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  366. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  367. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  368. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  392. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  393. package/bundles/ragents.reference/web/classes.json +1 -1
  394. package/bundles/ragents.reference/web/index.js +1 -1
  395. package/bundles/ragents.reference/web/index.js.map +2 -2
  396. package/bundles/ragents.todo/ragents-bundle.json +2 -2
  397. package/bundles/ragents.todo/server/index.js +5 -5
  398. package/bundles/ragents.todo/server/index.js.map +2 -2
  399. package/bundles/ragents.todo/web/classes.json +1 -1
  400. package/bundles/ragents.todo/web/index.js +1 -1
  401. package/bundles/ragents.todo/web/index.js.map +2 -2
  402. package/bundles/ragents.transcript/ragents-bundle.json +2 -2
  403. package/bundles/ragents.transcript/server/index.js +11 -11
  404. package/bundles/ragents.transcript/server/index.js.map +2 -2
  405. package/bundles/ragents.watch/ragents-bundle.json +2 -2
  406. package/bundles/ragents.watch/server/index.js +48 -48
  407. package/bundles/ragents.watch/server/index.js.map +2 -2
  408. package/bundles/ragents.workspace/ragents-bundle.json +2 -2
  409. package/bundles/ragents.workspace/server/index.js +83 -81
  410. package/bundles/ragents.workspace/server/index.js.map +2 -2
  411. package/bundles/ragents.workspace/web/classes.json +1 -1
  412. package/bundles/ragents.workspace/web/index.js +1 -1
  413. package/bundles/ragents.workspace/web/index.js.map +2 -2
  414. package/package.json +4 -4
  415. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  416. package/packages/agent/dist/core/tools/bash.d.ts +1 -1
  417. package/packages/agent/dist/index.d.ts +1 -1
  418. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  419. package/packages/agent/src/core/compaction/utils.ts +1 -1
  420. package/packages/agent/src/core/model-runtime.ts +45 -5
  421. package/packages/agent/src/core/tools/bash.ts +1 -1
  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 +3723 -550
  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/index.ts +1 -0
  453. package/packages/ragents/src/plugin-host.ts +162 -116
  454. package/packages/ragents/src/plugin-types.ts +29 -10
  455. package/packages/ragents/src/rpc/contract.ts +5 -5
  456. package/packages/ragents/src/rpc/contribution.ts +2 -2
  457. package/packages/ragents/src/rpc/peer.ts +11 -11
  458. package/packages/ragents/src/rpc/protocol.ts +2 -2
  459. package/packages/ragents/src/runtime/decisions/turns.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 +35 -35
  472. package/packages/workspace-executor/src/errors.ts +1 -1
  473. package/packages/workspace-executor/src/executor.ts +15 -15
  474. package/packages/workspace-executor/src/files.ts +30 -30
  475. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  476. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  477. package/packages/workspace-executor/src/language-server/host.ts +35 -35
  478. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  479. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  480. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  481. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  482. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
  483. package/packages/workspace-executor/src/managed-process.ts +35 -7
  484. package/packages/workspace-executor/src/module.ts +8 -8
  485. package/packages/workspace-executor/src/modules.ts +3 -3
  486. package/packages/workspace-executor/src/paths.ts +11 -11
  487. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  488. package/packages/workspace-executor/src/processes/module.ts +3 -3
  489. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  490. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  491. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  492. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  493. package/packages/workspace-executor/src/run-folders.ts +3 -3
  494. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  495. package/packages/workspace-executor/src/sandbox-tools.ts +37 -31
  496. package/packages/workspace-executor/src/session-ident.ts +2 -2
  497. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  498. package/packages/workspace-executor/src/tools.ts +5 -5
  499. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  500. package/plugins/ragents.activity/web/activity.ts +2 -2
  501. package/plugins/ragents.actor-programs/server/access-projections.ts +31 -0
  502. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  503. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  504. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  505. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  506. package/plugins/ragents.actor-programs/server/index.ts +2 -0
  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 -8
  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 +2 -2
  572. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
  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/ActorTile.tsx +1 -1
  578. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  579. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  580. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  581. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  582. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  583. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  584. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  585. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  586. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  587. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  588. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  589. package/plugins/ragents.orchestration/web/format.ts +1 -1
  590. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  591. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  592. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  593. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +29 -28
  594. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  595. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  596. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  597. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  598. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  599. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  600. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +10 -10
  601. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  602. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  603. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  604. package/plugins/ragents.overseer/contract.ts +20 -20
  605. package/plugins/ragents.overseer/server/api.ts +8 -8
  606. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  607. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  608. package/plugins/ragents.overseer/server/index.ts +24 -24
  609. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  610. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  611. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  612. package/plugins/ragents.overseer/server/settings.ts +6 -6
  613. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  614. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  615. package/plugins/ragents.overseer/web/index.tsx +20 -20
  616. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  617. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  618. package/plugins/ragents.processes/contract.ts +5 -5
  619. package/plugins/ragents.processes/server/methods.ts +4 -4
  620. package/plugins/ragents.processes/server/observer.ts +8 -8
  621. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  622. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  623. package/plugins/ragents.processes/web/processes.ts +10 -10
  624. package/plugins/ragents.product/server/config.ts +1 -1
  625. package/plugins/ragents.product/server/index.ts +4 -4
  626. package/plugins/ragents.product/server/runtime.ts +9 -10
  627. package/plugins/ragents.product/web/index.tsx +1 -1
  628. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  629. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  630. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  631. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  632. package/plugins/ragents.reference/examples.ts +27 -27
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  636. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  637. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  638. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  639. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  640. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  641. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  642. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  643. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  644. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  645. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  648. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  649. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  650. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  651. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  652. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  653. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  654. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  655. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  656. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  657. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  661. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  662. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  663. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  664. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  665. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  666. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  667. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  668. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  669. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  670. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  671. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  672. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  693. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  694. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  695. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  696. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  697. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  698. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  699. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  700. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  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 +62 -49
  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 +42 -42
  714. package/plugins/ragents.workspace/server/config.ts +8 -5
  715. package/plugins/ragents.workspace/server/index.ts +5 -4
  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 +29 -29
  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 +46 -46
  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-C7JeZFjs.js +0 -6
  738. package/apps/web/dist/assets/mermaid-HWGCJPDP-DfsU5ofC.js +0 -478
  739. package/apps/web/dist/assets/runPanel-ZT6TPDLM.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/plugins/ragents.ask/web/QuestionSection.tsx +0 -48
  748. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  749. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { FolderIcon, KeyIcon, PencilIcon, PlusIcon, ServerIcon, SettingsIcon, Trash2Icon } from "lucide-react";
2
2
  import { useState } from "react";
3
+ import { cn } from "cn";
3
4
  import { Button, ConnectionStateIcon } from "../ui";
4
5
  import { busyState, connectionState, kindLabel, stateDetail } from "./connection-state";
5
6
  import type { ConnectionView, PanelAction } from "./contract";
@@ -9,7 +10,7 @@ import { PanelHeader } from "./PanelHeader";
9
10
 
10
11
  const fileNameOf = (address: string): string => address.split(/[/\\]/).pop() ?? address;
11
12
 
12
- /** Ein lokales Profil startet die Erweiterung selbst; nur ein Server per Adresse kennt Verbinden, Trennen und Anmelden. */
13
+ /** The extension starts a local profile itself; only a server by address knows connect, disconnect, and sign-in. */
13
14
  function RowActions({ connection, busy, send, onLogin }: {
14
15
  connection: ConnectionView;
15
16
  busy: boolean;
@@ -21,16 +22,16 @@ function RowActions({ connection, busy, send, onLogin }: {
21
22
  const missing = connection.missingEnvironment;
22
23
  if (missing) {
23
24
  return <>
24
- <Button aria-label={`Wert für ${missing.variable} setzen und ${connection.name} erneut starten`} disabled={busy}
25
- onClick={() => send({ action: "setSecret", name: missing.variable, connection: connection.name })} size="xs"><KeyIcon data-icon="inline-start" />Wert setzen</Button>
26
- <Button disabled={busy} onClick={() => send({ action: "retry", name: connection.name })} size="xs" variant="secondary">Erneut versuchen</Button>
25
+ <Button aria-label={`Set value for ${missing.variable} and restart ${connection.name}`} disabled={busy}
26
+ onClick={() => send({ action: "setSecret", name: missing.variable, connection: connection.name })} size="xs"><KeyIcon data-icon="inline-start" />Set value</Button>
27
+ <Button disabled={busy} onClick={() => send({ action: "retry", name: connection.name })} size="xs" variant="secondary">Retry</Button>
27
28
  </>;
28
29
  }
29
- if (state === "login-required" || state === "forbidden") return <Button disabled={busy} onClick={() => onLogin(connection.name)} size="xs" variant="secondary">Anmelden</Button>;
30
- if (state === "unreachable" || state === "failed") return <Button disabled={busy} onClick={() => send({ action: "retry", name: connection.name })} size="xs" variant="secondary">Erneut versuchen</Button>;
30
+ if (state === "login-required" || state === "forbidden") return <Button disabled={busy} onClick={() => onLogin(connection.name)} size="xs" variant="secondary">Sign in</Button>;
31
+ if (state === "unreachable" || state === "failed") return <Button disabled={busy} onClick={() => send({ action: "retry", name: connection.name })} size="xs" variant="secondary">Retry</Button>;
31
32
  if (profile) return null;
32
- if (state === "connected") return <Button disabled={busy} onClick={() => send({ action: "disconnect", name: connection.name })} size="xs" variant="ghost">Trennen</Button>;
33
- if (state === "stopped") return <Button disabled={busy} onClick={() => send({ action: "connect", name: connection.name })} size="xs" variant="secondary">Verbinden</Button>;
33
+ if (state === "connected") return <Button disabled={busy} onClick={() => send({ action: "disconnect", name: connection.name })} size="xs" variant="ghost">Disconnect</Button>;
34
+ if (state === "stopped") return <Button disabled={busy} onClick={() => send({ action: "connect", name: connection.name })} size="xs" variant="secondary">Connect</Button>;
34
35
  return null;
35
36
  }
36
37
 
@@ -43,6 +44,7 @@ function ConnectionRow({ connection, send, onEdit, onLogin, onRemove }: {
43
44
  }) {
44
45
  const busy = busyState(connection);
45
46
  const detail = stateDetail(connection) ?? connection.problem;
47
+ const notice = connection.versionNotice;
46
48
  const profile = connection.kind === "profile";
47
49
  return <li className="grid grid-cols-[auto_minmax(0,1fr)] items-center gap-x-2.5 gap-y-1.5 border-b border-border-soft px-1 py-2.5 last:border-b-0">
48
50
  <span aria-hidden className="grid size-[26px] flex-none place-items-center rounded-md bg-secondary text-muted-foreground">
@@ -57,33 +59,34 @@ function ConnectionRow({ connection, send, onEdit, onLogin, onRemove }: {
57
59
  <span className="block truncate font-mono text-[0.68rem] text-muted-foreground" title={connection.address}>{profile ? fileNameOf(connection.address) : connection.address}</span>
58
60
  </span>
59
61
  {detail && <p className="col-span-2 text-[0.7rem] leading-normal text-destructive [overflow-wrap:anywhere]" role="alert">{detail}</p>}
62
+ {notice && <p className={cn("col-span-2 text-[0.7rem] leading-normal [overflow-wrap:anywhere]", notice.level === "error" ? "text-destructive" : "text-warning")} data-notice={notice.level} role={notice.level === "error" ? "alert" : "status"}>{notice.text}</p>}
60
63
  <span className="col-span-2 flex flex-wrap items-center gap-1.5">
61
64
  <RowActions busy={busy} connection={connection} onLogin={onLogin} send={send} />
62
- {connection.savedLogin && <Button disabled={busy} onClick={() => send({ action: "logout", name: connection.name })} size="xs" variant="ghost">Abmelden</Button>}
63
- <Button onClick={() => onEdit(connection.name)} size="xs" variant="ghost"><PencilIcon data-icon="inline-start" />Bearbeiten</Button>
64
- <Button aria-label={`${connection.name} entfernen`} className="ml-auto" onClick={() => onRemove(connection.name)} size="icon-sm" variant="ghost"><Trash2Icon /></Button>
65
+ {connection.savedLogin && <Button disabled={busy} onClick={() => send({ action: "logout", name: connection.name })} size="xs" variant="ghost">Sign out</Button>}
66
+ <Button onClick={() => onEdit(connection.name)} size="xs" variant="ghost"><PencilIcon data-icon="inline-start" />Edit</Button>
67
+ <Button aria-label={`Remove ${connection.name}`} className="ml-auto" onClick={() => onRemove(connection.name)} size="icon-sm" variant="ghost"><Trash2Icon /></Button>
65
68
  </span>
66
69
  </li>;
67
70
  }
68
71
 
69
- /** Namen aus ragents.hostEnvironment, zu denen kein Wert gespeichert ist; ohne ihn startet der lokale Host ohne diese Umgebungsvariable. */
72
+ /** Names from ragents.hostEnvironment with no saved value; without it the local host starts without this environment variable. */
70
73
  function MissingSecrets({ names, send }: { names: readonly string[]; send: (action: PanelAction) => void }) {
71
74
  return <section className="grid grid-cols-1 gap-1.5">
72
- <h2 className="text-[0.66rem] font-bold uppercase tracking-[0.06em] text-muted-foreground">Fehlende Werte</h2>
75
+ <h2 className="text-[0.66rem] font-bold uppercase tracking-[0.06em] text-muted-foreground">Missing values</h2>
73
76
  <p className="text-[0.7rem] leading-normal text-muted-foreground">
74
- Zu diesen Namen aus ragents.hostEnvironment liegt kein Wert in der SecretStorage; ein lokal gestarteter Host bekommt die Umgebungsvariable nicht.
77
+ These names from ragents.hostEnvironment have no value in the SecretStorage; a locally started host does not get the environment variable.
75
78
  </p>
76
79
  <ul className="grid grid-cols-1">
77
80
  {names.map((name) => <li className="flex items-center gap-2 border-b border-border-soft px-1 py-2.5 last:border-b-0" key={name}>
78
81
  <KeyIcon aria-hidden className="size-3.5 flex-none text-muted-foreground" />
79
82
  <span className="min-w-0 flex-1 truncate font-mono text-[0.72rem]" title={name}>{name}</span>
80
- <Button aria-label={`Wert für ${name} setzen`} onClick={() => send({ action: "setSecret", name })} size="xs" variant="secondary">Wert setzen</Button>
83
+ <Button aria-label={`Set value for ${name}`} onClick={() => send({ action: "setSecret", name })} size="xs" variant="secondary">Set value</Button>
81
84
  </li>)}
82
85
  </ul>
83
86
  </section>;
84
87
  }
85
88
 
86
- /** Die Einrichtung: die Server als Zeilen, dahinter die Dialoge zum Anlegen, Bearbeiten, Anmelden und Entfernen. */
89
+ /** The setup: the servers as rows, behind them the dialogs to create, edit, sign in, and remove. */
87
90
  export function ConnectionsPage({ state, send }: PanelPageProps) {
88
91
  const [dialog, setDialog] = useState<{ kind: "new" } | { kind: "edit"; name: string }>();
89
92
  const [login, setLogin] = useState<string>();
@@ -97,21 +100,21 @@ export function ConnectionsPage({ state, send }: PanelPageProps) {
97
100
  {state.problem && <p className="text-[0.8rem] leading-normal text-destructive [overflow-wrap:anywhere]" role="alert">{state.problem}</p>}
98
101
  <section className="grid grid-cols-1 gap-1.5">
99
102
  {state.connections.length === 0
100
- ? <p className="text-[0.85rem] leading-normal text-muted-foreground">Noch kein Server.</p>
103
+ ? <p className="text-[0.85rem] leading-normal text-muted-foreground">No server yet.</p>
101
104
  : <ul className="grid grid-cols-1">
102
105
  {state.connections.map((connection) => <ConnectionRow connection={connection} key={connection.name} onEdit={(name) => setDialog({ kind: "edit", name })} onLogin={setLogin} onRemove={setRemoving} send={send} />)}
103
106
  </ul>}
104
107
  </section>
105
108
  {missingSecrets.length > 0 && <MissingSecrets names={missingSecrets} send={send} />}
106
109
  <div className="flex flex-wrap items-center gap-2">
107
- <Button onClick={() => setDialog({ kind: "new" })} size="sm"><PlusIcon data-icon="inline-start" />Neuer Server</Button>
108
- <Button aria-label="Einstellung öffnen" onClick={() => send({ action: "settingsFile" })} size="sm" title="Einstellung öffnen (settings.json)" variant="ghost"><SettingsIcon data-icon="inline-start" />settings.json</Button>
110
+ <Button onClick={() => setDialog({ kind: "new" })} size="sm"><PlusIcon data-icon="inline-start" />New server</Button>
111
+ <Button aria-label="Open setting" onClick={() => send({ action: "settingsFile" })} size="sm" title="Open setting (settings.json)" variant="ghost"><SettingsIcon data-icon="inline-start" />settings.json</Button>
109
112
  </div>
110
- {open && <ConnectionDialog connection={editing} key={editing?.name ?? "neu"} onClose={() => setDialog(undefined)} send={send} state={state} />}
113
+ {open && <ConnectionDialog connection={editing} key={editing?.name ?? "new"} onClose={() => setDialog(undefined)} send={send} state={state} />}
111
114
  {loginConnection && <LoginDialog connection={loginConnection} onClose={() => setLogin(undefined)} send={send} />}
112
- {removing !== undefined && <ConfirmDialog confirmLabel="Entfernen" onClose={() => setRemoving(undefined)}
113
- onConfirm={() => { send({ action: "remove", name: removing }); setRemoving(undefined); }} title={`${removing} entfernen?`}>
114
- Der Server verschwindet aus ragents.connections. Gespeicherte Anmeldedaten gehen dabei verloren. Runs auf dem Server bleiben, wo sie sind.
115
+ {removing !== undefined && <ConfirmDialog confirmLabel="Remove" onClose={() => setRemoving(undefined)}
116
+ onConfirm={() => { send({ action: "remove", name: removing }); setRemoving(undefined); }} title={`Remove ${removing}?`}>
117
+ The server is removed from ragents.connections. Saved credentials are lost. Runs on the server stay where they are.
115
118
  </ConfirmDialog>}
116
119
  </div>;
117
120
  }
@@ -2,7 +2,7 @@ import { useState, type FormEvent } from "react";
2
2
  import { Button, Input, Label } from "../ui";
3
3
  import type { ConnectionView, PanelAction } from "./contract";
4
4
 
5
- /** Die Anmeldung an einem Server im Dialogkörper: Benutzer und Passwort oder ein Zugangstoken. */
5
+ /** Signing in to a server in the dialog body: user and password or an access token. */
6
6
  export function LoginForm({ connection, mode, busy, send, submitLabel, onCancel }: {
7
7
  connection: ConnectionView;
8
8
  mode: "password" | "token";
@@ -22,15 +22,15 @@ export function LoginForm({ connection, mode, busy, send, submitLabel, onCancel
22
22
  };
23
23
  return <form className="grid gap-2.5" onSubmit={submit}>
24
24
  {mode === "token"
25
- ? <div className="grid gap-1.5"><Label htmlFor={`token-${field}`}>Zugangstoken</Label><Input autoComplete="off" disabled={busy} id={`token-${field}`} onChange={(event) => setToken(event.target.value)} type="password" value={token} /></div>
25
+ ? <div className="grid gap-1.5"><Label htmlFor={`token-${field}`}>Access token</Label><Input autoComplete="off" disabled={busy} id={`token-${field}`} onChange={(event) => setToken(event.target.value)} type="password" value={token} /></div>
26
26
  : <>
27
- <div className="grid gap-1.5"><Label htmlFor={`user-${field}`}>Benutzer</Label><Input autoComplete="username" disabled={busy} id={`user-${field}`} onChange={(event) => setUser(event.target.value)} value={user} /></div>
28
- <div className="grid gap-1.5"><Label htmlFor={`password-${field}`}>Passwort</Label><Input autoComplete="current-password" disabled={busy} id={`password-${field}`} onChange={(event) => setPassword(event.target.value)} type="password" value={password} /></div>
27
+ <div className="grid gap-1.5"><Label htmlFor={`user-${field}`}>User</Label><Input autoComplete="username" disabled={busy} id={`user-${field}`} onChange={(event) => setUser(event.target.value)} value={user} /></div>
28
+ <div className="grid gap-1.5"><Label htmlFor={`password-${field}`}>Password</Label><Input autoComplete="current-password" disabled={busy} id={`password-${field}`} onChange={(event) => setPassword(event.target.value)} type="password" value={password} /></div>
29
29
  </>}
30
30
  {connection.problem && <p className="text-[0.75rem] leading-normal text-destructive [overflow-wrap:anywhere]" role="alert">{connection.problem}</p>}
31
- <p className="text-[0.72rem] leading-normal text-muted-foreground">Die Anmeldedaten liegen im Schlüsselspeicher von VS Code; die Erweiterung meldet sich danach still am Server an.</p>
31
+ <p className="text-[0.72rem] leading-normal text-muted-foreground">The credentials are stored in the VS Code secret storage; the extension then signs in to the server silently.</p>
32
32
  <div className="mt-1 flex flex-wrap justify-end gap-2">
33
- {onCancel && <Button onClick={onCancel} size="sm" type="button" variant="ghost">Abbrechen</Button>}
33
+ {onCancel && <Button onClick={onCancel} size="sm" type="button" variant="ghost">Cancel</Button>}
34
34
  <Button disabled={busy || !complete} size="sm" type="submit">{submitLabel}</Button>
35
35
  </div>
36
36
  </form>;
@@ -7,7 +7,7 @@ import { LoginForm } from "./LoginForm";
7
7
 
8
8
  const PROFILE_FILE = /^ragents\.config\.([a-z0-9]+(?:-[a-z0-9]+)*)\.ts$/;
9
9
 
10
- /** Eine Profildatei heißt ragents.config.<profil>.ts; ihr Profil ist der Name, den der Dialog vorschlägt. */
10
+ /** A profile file is named ragents.config.<profile>.ts; its profile is the name the dialog suggests. */
11
11
  export const profileNameOf = (profileFile: string): string =>
12
12
  PROFILE_FILE.exec(profileFile.split(/[/\\]/).pop() ?? "")?.[1] ?? "";
13
13
 
@@ -22,7 +22,7 @@ function PanelDialog({ title, onClose, children }: { title: string; onClose: ()
22
22
  </Dialog>;
23
23
  }
24
24
 
25
- /** Die Sicherheitsfrage vor einer Handlung, die nichts zurücknimmt: Entfernen eines Servers, Löschen von Runs. */
25
+ /** The confirmation before an action that cannot be undone: removing a server, deleting runs. */
26
26
  export function ConfirmDialog({ title, confirmLabel, onConfirm, onClose, children }: {
27
27
  title: string;
28
28
  confirmLabel: string;
@@ -33,27 +33,27 @@ export function ConfirmDialog({ title, confirmLabel, onConfirm, onClose, childre
33
33
  return <PanelDialog onClose={onClose} title={title}>
34
34
  <p className="text-[0.78rem] leading-normal text-muted-foreground [overflow-wrap:anywhere]">{children}</p>
35
35
  <div className="mt-1 flex flex-wrap justify-end gap-2">
36
- <Button onClick={onClose} size="sm" type="button" variant="ghost">Abbrechen</Button>
36
+ <Button onClick={onClose} size="sm" type="button" variant="ghost">Cancel</Button>
37
37
  <Button onClick={onConfirm} size="sm" type="button" variant="destructive">{confirmLabel}</Button>
38
38
  </div>
39
39
  </PanelDialog>;
40
40
  }
41
41
 
42
- /** Die Anmeldung an einem Server, von der Start-Seite wie von der Seite Server derselbe Dialog. */
42
+ /** Signing in to a server, the same dialog from the Start page and from the Server page. */
43
43
  export function LoginDialog({ connection, onClose, send }: { connection: ConnectionView; onClose: () => void; send: (action: PanelAction) => void }) {
44
44
  const demanded = connection.state.kind === "login-required" ? connection.state.mode : "password";
45
45
  const [mode, setMode] = useState<"password" | "token">(demanded);
46
46
  useEffect(() => { if (connection.state.kind === "connected") onClose(); }, [onClose, connection.state.kind]);
47
- return <PanelDialog onClose={onClose} title={`Anmelden an ${connection.name}`}>
48
- <div aria-label="Art der Anmeldung" className="flex gap-1.5" role="group">
49
- <Toggle onPressedChange={() => setMode("password")} pressed={mode === "password"} size="sm" variant="outline">Benutzer</Toggle>
50
- <Toggle onPressedChange={() => setMode("token")} pressed={mode === "token"} size="sm" variant="outline">Zugangstoken</Toggle>
47
+ return <PanelDialog onClose={onClose} title={`Sign in to ${connection.name}`}>
48
+ <div aria-label="Sign-in method" className="flex gap-1.5" role="group">
49
+ <Toggle onPressedChange={() => setMode("password")} pressed={mode === "password"} size="sm" variant="outline">User</Toggle>
50
+ <Toggle onPressedChange={() => setMode("token")} pressed={mode === "token"} size="sm" variant="outline">Access token</Toggle>
51
51
  </div>
52
- <LoginForm busy={busyState(connection)} connection={connection} key={mode} mode={mode} onCancel={onClose} send={send} submitLabel="Anmelden" />
52
+ <LoginForm busy={busyState(connection)} connection={connection} key={mode} mode={mode} onCancel={onClose} send={send} submitLabel="Sign in" />
53
53
  </PanelDialog>;
54
54
  }
55
55
 
56
- /** Anlegen und Bearbeiten eines Servers; Bearbeiten schickt update und behält damit die gespeicherten Anmeldedaten. */
56
+ /** Creating and editing a server; editing sends update and so keeps the saved credentials. */
57
57
  export function ConnectionDialog({ state, connection, onClose, send }: {
58
58
  state: PanelState;
59
59
  connection: ConnectionView | undefined;
@@ -91,22 +91,22 @@ export function ConnectionDialog({ state, connection, onClose, send }: {
91
91
  ? { action: "updateServer", name: connection.name, newName: name, url }
92
92
  : { action: "updateProfile", name: connection.name, newName: name, profileFile });
93
93
  };
94
- return <PanelDialog onClose={onClose} title={connection ? `${connection.name} bearbeiten` : "Neuer Server"}>
94
+ return <PanelDialog onClose={onClose} title={connection ? `Edit ${connection.name}` : "New server"}>
95
95
  <form className="grid gap-3" onSubmit={submit}>
96
- <div aria-label="Art des Servers" className="flex gap-1.5" role="group">
96
+ <div aria-label="Server type" className="flex gap-1.5" role="group">
97
97
  <Toggle onPressedChange={() => setKind("server")} pressed={kind === "server"} size="sm" variant="outline">Server</Toggle>
98
- <Toggle onPressedChange={() => setKind("profile")} pressed={kind === "profile"} size="sm" variant="outline">Lokales Profil</Toggle>
98
+ <Toggle onPressedChange={() => setKind("profile")} pressed={kind === "profile"} size="sm" variant="outline">Local profile</Toggle>
99
99
  </div>
100
100
  {kind === "server"
101
- ? <div className="grid gap-1.5"><Label htmlFor="connection-url">Adresse</Label><Input id="connection-url" onChange={(event) => setUrl(event.target.value)} placeholder="https://werkstatt.example.com" value={url} /></div>
101
+ ? <div className="grid gap-1.5"><Label htmlFor="connection-url">Address</Label><Input id="connection-url" onChange={(event) => setUrl(event.target.value)} placeholder="https://workshop.example.com" value={url} /></div>
102
102
  : <div className="grid gap-1.5">
103
- <Label htmlFor="connection-profile-file">Profildatei</Label>
103
+ <Label htmlFor="connection-profile-file">Profile file</Label>
104
104
  <div className="flex items-center gap-2">
105
- <Input aria-label="Profildatei" className="min-w-0 flex-1 font-mono text-[0.72rem]" id="connection-profile-file" onChange={(event) => setProfileFile(event.target.value)} placeholder="~/repos/RAgents/ragents.config.core.ts" title={profileFile} value={profileFile} />
106
- <Button className="flex-none" onClick={() => send({ action: "pickProfile" })} size="sm" type="button" variant="secondary"><FolderOpenIcon data-icon="inline-start" />Datei wählen ...</Button>
105
+ <Input aria-label="Profile file" className="min-w-0 flex-1 font-mono text-[0.72rem]" id="connection-profile-file" onChange={(event) => setProfileFile(event.target.value)} placeholder="~/repos/RAgents/ragents.config.core.ts" title={profileFile} value={profileFile} />
106
+ <Button className="flex-none" onClick={() => send({ action: "pickProfile" })} size="sm" type="button" variant="secondary"><FolderOpenIcon data-icon="inline-start" />Choose file ...</Button>
107
107
  </div>
108
108
  {state.profileSuggestions.length > 0 && <>
109
- <p className="text-[0.7rem] leading-normal text-muted-foreground">Im Host-Ordner gefunden, ein Klick übernimmt sie:</p>
109
+ <p className="text-[0.7rem] leading-normal text-muted-foreground">Found in the host folder, click one to use it:</p>
110
110
  <ul className="grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-1.5">
111
111
  {state.profileSuggestions.map((file) => <li key={file}>
112
112
  <button aria-pressed={profileFile === file} className="flex w-full min-w-0 flex-col gap-0.5 rounded-md border border-border-soft px-2.5 py-1.5 text-left hover:border-border aria-pressed:border-primary aria-pressed:bg-accent" onClick={() => takeProfile(file)} type="button">
@@ -119,13 +119,13 @@ export function ConnectionDialog({ state, connection, onClose, send }: {
119
119
  </div>}
120
120
  <div className="grid gap-1.5">
121
121
  <Label htmlFor="connection-name">Name</Label>
122
- <Input id="connection-name" onChange={(event) => setName(event.target.value)} placeholder={kind === "server" ? "Werkstatt" : "core"} value={name} />
123
- {kind === "profile" && <span className="text-[0.68rem] text-muted-foreground">aus dem Dateinamen übernommen, überschreibbar</span>}
122
+ <Input id="connection-name" onChange={(event) => setName(event.target.value)} placeholder={kind === "server" ? "Workshop" : "core"} value={name} />
123
+ {kind === "profile" && <span className="text-[0.68rem] text-muted-foreground">taken from the file name, can be changed</span>}
124
124
  </div>
125
125
  {state.problem && <p className="text-[0.75rem] leading-normal text-destructive [overflow-wrap:anywhere]" role="alert">{state.problem}</p>}
126
126
  <div className="mt-1 flex flex-wrap justify-end gap-2">
127
- <Button onClick={onClose} size="sm" type="button" variant="ghost">Abbrechen</Button>
128
- <Button disabled={!name.trim() || !value.trim()} size="sm" type="submit">{connection ? "Speichern" : "Anlegen"}</Button>
127
+ <Button onClick={onClose} size="sm" type="button" variant="ghost">Cancel</Button>
128
+ <Button disabled={!name.trim() || !value.trim()} size="sm" type="submit">{connection ? "Save" : "Create"}</Button>
129
129
  </div>
130
130
  </form>
131
131
  </PanelDialog>;
@@ -2,10 +2,10 @@ import { ArrowLeftIcon } from "lucide-react";
2
2
  import { Button } from "../ui";
3
3
  import type { PanelAction } from "./contract";
4
4
 
5
- /** Die Kopfzeile der Seiten Runs und Server: der Weg zurück auf Start und der Seitentitel; die Aktionen stehen in der Titelzeile von VS Code. */
5
+ /** The header of the Runs and Server pages: the way back to Start and the page title; the actions are in the VS Code title bar. */
6
6
  export function PanelHeader({ title, send }: { title: string; send: (action: PanelAction) => void }) {
7
7
  return <div className="flex items-center gap-1.5">
8
- <Button aria-label="Zur Start-Seite" onClick={() => send({ action: "page", page: "start" })} size="icon-sm" title="Zur Start-Seite" variant="ghost"><ArrowLeftIcon /></Button>
8
+ <Button aria-label="Back to Start" onClick={() => send({ action: "page", page: "start" })} size="icon-sm" title="Back to Start" variant="ghost"><ArrowLeftIcon /></Button>
9
9
  <h1 className="min-w-0 flex-1 text-[1.1rem] font-semibold">{title}</h1>
10
10
  </div>;
11
11
  }
@@ -3,7 +3,7 @@ import type { PanelPageProps } from "./page-props";
3
3
  import { RunsPage } from "./RunsPage";
4
4
  import { StartPage } from "./StartPage";
5
5
 
6
- /** Das Panel ohne geöffneten Run: Start, Runs oder Server; der Run selbst liegt im Run-Panel. */
6
+ /** The panel without an open run: Start, Runs, or Server; the run itself lives in the run panel. */
7
7
  export function PanelPage(props: PanelPageProps) {
8
8
  const page = props.state.page;
9
9
  return <main className="h-full overflow-y-auto p-3">
@@ -7,12 +7,12 @@ import type { ConnectionRun, ConnectionView } from "./contract";
7
7
  const lineClass = "grid grid-cols-subgrid items-center rounded-md px-2 py-1.5 text-left hover:bg-accent"
8
8
  + " focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-ring/60";
9
9
 
10
- /** Die Spalten der Liste: Kontrollkästchen (nur im Auswahlmodus), Zustand, Titel, Zeit und Server (nur ab zwei Servern). */
10
+ /** The list columns: checkbox (only in selection mode), state, title, time, and server (only with two or more servers). */
11
11
  const columnsOf = (showConnection: boolean, selecting: boolean): string => selecting
12
12
  ? (showConnection ? "grid-cols-[auto_auto_minmax(0,1fr)_auto_auto]" : "grid-cols-[auto_auto_minmax(0,1fr)_auto]")
13
13
  : (showConnection ? "grid-cols-[auto_minmax(0,1fr)_auto_auto]" : "grid-cols-[auto_minmax(0,1fr)_auto]");
14
14
 
15
- /** Die Liste der Run-Zeilen: ein Raster, dessen Spalten die Zeilen per Subgrid teilen, damit alles untereinander steht. */
15
+ /** The list of run lines: a grid whose columns the rows share via subgrid so everything lines up. */
16
16
  export function RunList({ label, showConnection, selecting = false, children }: {
17
17
  label: string;
18
18
  showConnection: boolean;
@@ -22,7 +22,7 @@ export function RunList({ label, showConnection, selecting = false, children }:
22
22
  return <ul aria-label={label} className={cn("-mx-2 grid gap-x-2 gap-y-0.5", columnsOf(showConnection, selecting))}>{children}</ul>;
23
23
  }
24
24
 
25
- /** Eine Zeile je Run, auf Start wie auf Runs dieselbe: Zustand und Titel links, rechts Zeit und Server in den Spalten der Liste. */
25
+ /** One line per run, the same on Start and on Runs: state and title on the left, time and server on the right in the list columns. */
26
26
  export function RunLine({ connection, run, showConnection, selecting, selected, onOpen, onToggle }: {
27
27
  connection: ConnectionView;
28
28
  run: ConnectionRun;
@@ -35,7 +35,7 @@ export function RunLine({ connection, run, showConnection, selecting, selected,
35
35
  const time = shortTime(run.updatedAt);
36
36
  const problem = run.locked !== undefined ? `Locked: ${run.locked}` : run.problem;
37
37
  return <li className="col-span-full grid grid-cols-subgrid items-center">
38
- {selecting && <Checkbox aria-label={`${run.title} auswählen`} checked={selected === true} className="ml-1" onCheckedChange={() => onToggle?.()} />}
38
+ {selecting && <Checkbox aria-label={`Select ${run.title}`} checked={selected === true} className="ml-1" onCheckedChange={() => onToggle?.()} />}
39
39
  <button aria-disabled={run.locked !== undefined && !selecting} className={cn(lineClass, selecting ? "col-[2/-1]" : "col-span-full", "aria-disabled:cursor-default aria-disabled:hover:bg-transparent")}
40
40
  onClick={() => (selecting ? onToggle?.() : run.locked === undefined && onOpen())} title={showConnection ? `${run.title} (${connection.name})` : run.title} type="button">
41
41
  <RunStateIcon open={run.pendingActions} state={run.state} />
@@ -10,9 +10,9 @@ import { RunLine, RunList } from "./RunLine";
10
10
  const keyOf = (connection: string, runId: string): string => `${connection}\u0000${runId}`;
11
11
 
12
12
  const matches = (connection: ConnectionView, run: ConnectionRun, query: string): boolean =>
13
- `${run.title} ${connection.name}`.toLocaleLowerCase("de-DE").includes(query);
13
+ `${run.title} ${connection.name}`.toLocaleLowerCase("en-US").includes(query);
14
14
 
15
- /** Alle Runs aller Server als eine Liste: Suche, beendete ausblenden, der Serverfilter vom Chip auf Start und eine Mehrfachauswahl zum Löschen. */
15
+ /** All runs of all servers as one list: search, hide ended, the server filter from the chip on Start, and a multi-selection for deleting. */
16
16
  export function RunsPage({ state, send }: PanelPageProps) {
17
17
  const [query, setQuery] = useState("");
18
18
  const [onlyConnection, setOnlyConnection] = useState(state.runsConnection);
@@ -23,7 +23,7 @@ export function RunsPage({ state, send }: PanelPageProps) {
23
23
  const marked = state.connections.length > 1;
24
24
  const all = state.connections.flatMap((connection) => connection.runs.map((run) => ({ connection, run })))
25
25
  .sort((left, right) => right.run.updatedAt - left.run.updatedAt);
26
- const needle = query.trim().toLocaleLowerCase("de-DE");
26
+ const needle = query.trim().toLocaleLowerCase("en-US");
27
27
  const shown = all
28
28
  .filter(({ connection }) => onlyConnection === undefined || connection.name === onlyConnection)
29
29
  .filter(({ run }) => !hideEnded || run.state !== "ended")
@@ -49,36 +49,36 @@ export function RunsPage({ state, send }: PanelPageProps) {
49
49
  <PanelHeader send={send} title="Runs" />
50
50
  <div className="relative">
51
51
  <SearchIcon aria-hidden className="pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground" />
52
- <Input aria-label="Runs suchen" className="h-8 pl-8 text-[0.76rem]" onChange={(event) => setQuery(event.target.value)}
53
- placeholder="Runs suchen ..." type="search" value={query} />
52
+ <Input aria-label="Search runs" className="h-8 pl-8 text-[0.76rem]" onChange={(event) => setQuery(event.target.value)}
53
+ placeholder="Search runs ..." type="search" value={query} />
54
54
  </div>
55
55
  <div className="flex flex-wrap items-center gap-1.5">
56
- {onlyConnection !== undefined && <Toggle aria-label={`Nur ${onlyConnection}`} onPressedChange={() => setOnlyConnection(undefined)} pressed size="sm" title={`Nur Runs auf ${onlyConnection}; Klick zeigt alle`} variant="outline">
56
+ {onlyConnection !== undefined && <Toggle aria-label={`Only ${onlyConnection}`} onPressedChange={() => setOnlyConnection(undefined)} pressed size="sm" title={`Only runs on ${onlyConnection}; click to show all`} variant="outline">
57
57
  {onlyConnection}<XIcon data-icon="inline-end" />
58
58
  </Toggle>}
59
- <Toggle onPressedChange={setHideEnded} pressed={hideEnded} size="sm" variant="outline">Beendete ausblenden</Toggle>
59
+ <Toggle onPressedChange={setHideEnded} pressed={hideEnded} size="sm" variant="outline">Hide ended</Toggle>
60
60
  <Toggle onPressedChange={(next) => (next ? setSelecting(true) : leaveSelection())} pressed={selecting} size="sm" variant="outline">
61
- <CheckSquareIcon data-icon="inline-start" />Auswählen
61
+ <CheckSquareIcon data-icon="inline-start" />Select
62
62
  </Toggle>
63
63
  </div>
64
64
  {shown.length === 0
65
- ? <p className="text-[0.75rem] text-muted-foreground" role="status">{all.length === 0 ? "Noch keine Runs." : "Kein passender Run."}</p>
65
+ ? <p className="text-[0.75rem] text-muted-foreground" role="status">{all.length === 0 ? "No runs yet." : "No matching run."}</p>
66
66
  : <RunList label="Runs" selecting={selecting} showConnection={marked}>
67
67
  {shown.map(({ connection, run }) => <RunLine connection={connection} key={keyOf(connection.name, run.id)}
68
68
  onOpen={() => send({ action: "openRun", name: connection.name, runId: run.id })}
69
69
  onToggle={() => toggle(keyOf(connection.name, run.id))} run={run} selected={selected.has(keyOf(connection.name, run.id))} selecting={selecting} showConnection={marked} />)}
70
70
  </RunList>}
71
71
  {selecting && <div className="sticky bottom-0 flex flex-wrap items-center gap-2 border-t border-border-soft bg-background py-2">
72
- <span className="flex-1 text-[0.72rem] text-muted-foreground" role="status">{selected.size} ausgewählt</span>
73
- <Button disabled={selected.size === 0} onClick={() => setConfirming(true)} size="xs" variant="destructive"><Trash2Icon data-icon="inline-start" />Löschen</Button>
74
- <Button onClick={leaveSelection} size="xs" variant="ghost">Abbrechen</Button>
72
+ <span className="flex-1 text-[0.72rem] text-muted-foreground" role="status">{selected.size} selected</span>
73
+ <Button disabled={selected.size === 0} onClick={() => setConfirming(true)} size="xs" variant="destructive"><Trash2Icon data-icon="inline-start" />Delete</Button>
74
+ <Button onClick={leaveSelection} size="xs" variant="ghost">Cancel</Button>
75
75
  </div>}
76
76
  {confirming && <ConfirmDialog
77
- confirmLabel="Löschen"
77
+ confirmLabel="Delete"
78
78
  onClose={() => setConfirming(false)}
79
79
  onConfirm={remove}
80
- title={selected.size === 1 ? "Einen Run löschen?" : `${selected.size} Runs löschen?`}>
81
- Die gewählten Runs verschwinden mit ihren Journalen von ihrem Server. Das lässt sich nicht rückgängig machen.
80
+ title={selected.size === 1 ? "Delete one run?" : `Delete ${selected.size} runs?`}>
81
+ The selected runs are removed from their server along with their journals. This cannot be undone.
82
82
  </ConfirmDialog>}
83
83
  </div>;
84
84
  }
@@ -11,25 +11,25 @@ import { RunLine, RunList } from "./RunLine";
11
11
 
12
12
  const RECENT_RUNS = 5;
13
13
 
14
- /** Die Vorlage hinter defaultEntry; die Erweiterung nennt nur eine Kennung aus entries. */
14
+ /** The template behind defaultEntry; the extension names only an id from entries. */
15
15
  const defaultEntryOf = (connection: ConnectionView): ConnectionEntry | undefined => connection.entries.find((entry) => entry.id === connection.defaultEntry);
16
16
 
17
17
  const chipPartClass = "focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-ring/60 enabled:hover:bg-accent";
18
18
  const iconPartClass = "flex w-8 flex-none items-center justify-center";
19
19
 
20
- /** Was der linke Teil des Chips tut: das Wort steht neben dem Namen, das Label im Tooltip; ohne run ist er gesperrt. */
20
+ /** What the left part of the chip does: the word stands next to the name, the label in the tooltip; without run it is disabled. */
21
21
  const chipAction = (connection: ConnectionView, send: PanelPageProps["send"], onLogin: (name: string) => void): { word: string; label: string; run?: () => void } => {
22
22
  switch (connectionState(connection)) {
23
23
  case "login-required":
24
- case "forbidden": return { word: "Anmelden", label: `An ${connection.name} anmelden`, run: () => onLogin(connection.name) };
24
+ case "forbidden": return { word: "Sign in", label: `Sign in to ${connection.name}`, run: () => onLogin(connection.name) };
25
25
  case "unreachable":
26
- case "failed": return { word: "Erneut versuchen", label: `${connection.name} erneut versuchen`, run: () => send({ action: "retry", name: connection.name }) };
26
+ case "failed": return { word: "Retry", label: `Retry ${connection.name}`, run: () => send({ action: "retry", name: connection.name }) };
27
27
  case "stopped": return connection.kind === "profile"
28
- ? { word: "Starten", label: `${connection.name} starten`, run: () => send({ action: "startProfile", name: connection.name }) }
29
- : { word: "Verbinden", label: `Mit ${connection.name} verbinden`, run: () => send({ action: "connect", name: connection.name }) };
30
- case "starting": return { word: "startet ...", label: `${connection.name} startet` };
28
+ ? { word: "Start", label: `Start ${connection.name}`, run: () => send({ action: "startProfile", name: connection.name }) }
29
+ : { word: "Connect", label: `Connect to ${connection.name}`, run: () => send({ action: "connect", name: connection.name }) };
30
+ case "starting": return { word: "starting ...", label: `${connection.name} is starting` };
31
31
  case "connected":
32
- case "ready": return { word: "", label: `Runs auf ${connection.name}`, run: () => send({ action: "page", page: "runs", connection: connection.name }) };
32
+ case "ready": return { word: "", label: `Runs on ${connection.name}`, run: () => send({ action: "page", page: "runs", connection: connection.name }) };
33
33
  }
34
34
  };
35
35
 
@@ -38,7 +38,7 @@ interface Failure {
38
38
  readonly message: string;
39
39
  }
40
40
 
41
- /** Das Zustandssymbol als eigener Knopf: bei einem Fehler öffnet es das Popover mit der Meldung, das Schloss den Anmeldedialog. */
41
+ /** The state icon as a button of its own: on an error it opens the popover with the message, the lock opens the sign-in dialog. */
42
42
  function StateButton({ connection, action, failure, onFailure, send, onLogin }: {
43
43
  connection: ConnectionView;
44
44
  action: ReturnType<typeof chipAction>;
@@ -51,29 +51,29 @@ function StateButton({ connection, action, failure, onFailure, send, onLogin }:
51
51
  const detail = stateDetail(connection);
52
52
  const missing = connection.missingEnvironment;
53
53
  if (state === "login-required") {
54
- return <button aria-label={`Anmeldung an ${connection.name}`} className={cn(iconPartClass, chipPartClass)} onClick={() => onLogin(connection.name)} type="button">
54
+ return <button aria-label={`Sign-in for ${connection.name}`} className={cn(iconPartClass, chipPartClass)} onClick={() => onLogin(connection.name)} type="button">
55
55
  <ConnectionStateIcon state={state} />
56
56
  </button>;
57
57
  }
58
58
  const shown = detail !== undefined ? { title: connectionStateWord(state), message: detail } : failure;
59
59
  return <Popover onOpenChange={(next) => onFailure(next ? shown : undefined)} open={failure !== undefined}>
60
- <PopoverTrigger aria-label={`Fehler von ${connection.name} anzeigen`} className={cn(iconPartClass, chipPartClass)}>
60
+ <PopoverTrigger aria-label={`Show error of ${connection.name}`} className={cn(iconPartClass, chipPartClass)}>
61
61
  <ConnectionStateIcon state={state} />
62
62
  </PopoverTrigger>
63
63
  {shown && <PopoverContent align="start" className="w-[min(360px,calc(100vw-16px))] gap-2 p-3" collisionPadding={8} dim side="bottom">
64
64
  <PopoverHeader><PopoverTitle className="text-[0.8rem] font-semibold text-destructive">{shown.title}</PopoverTitle></PopoverHeader>
65
65
  <p className={cn("max-h-[50vh] overflow-auto select-text whitespace-pre-wrap text-[0.72rem] leading-normal [overflow-wrap:anywhere]", shown.message.includes("\n") && "font-mono")}>{shown.message}</p>
66
66
  <div className="flex flex-wrap justify-end gap-2">
67
- <Button onClick={() => send({ action: "showOutput" })} size="xs" variant="ghost">Ausgabe öffnen</Button>
68
- {missing && <Button aria-label={`Wert für ${missing.variable} setzen und ${connection.name} erneut starten`}
69
- onClick={() => { onFailure(undefined); send({ action: "setSecret", name: missing.variable, connection: connection.name }); }} size="xs">Wert setzen</Button>}
67
+ <Button onClick={() => send({ action: "showOutput" })} size="xs" variant="ghost">Open output</Button>
68
+ {missing && <Button aria-label={`Set value for ${missing.variable} and restart ${connection.name}`}
69
+ onClick={() => { onFailure(undefined); send({ action: "setSecret", name: missing.variable, connection: connection.name }); }} size="xs">Set value</Button>}
70
70
  {action.run && action.word && <Button onClick={() => { onFailure(undefined); action.run?.(); }} size="xs" variant="secondary">{action.word}</Button>}
71
71
  </div>
72
72
  </PopoverContent>}
73
73
  </Popover>;
74
74
  }
75
75
 
76
- /** Ein Server als geteilter Knopf: links Zustand, Name, Aktionswort und Zielzeile, rechts das Plus für den Default oder einen neuen Chat. */
76
+ /** A server as a split button: state, name, action word, and route line on the left, the plus for the default or a new chat on the right. */
77
77
  function ConnectionChip({ connection, send, onLogin }: {
78
78
  connection: ConnectionView;
79
79
  send: PanelPageProps["send"];
@@ -88,7 +88,7 @@ function ConnectionChip({ connection, send, onLogin }: {
88
88
  const canCreate = connection.state.kind === "connected" && connection.canCreate;
89
89
  const route = routeLabel(connection);
90
90
  const starter = defaultEntryOf(connection);
91
- const plusLabel = starter ? `Neuer Run aus ${starter.title} auf ${connection.name}` : `Neuer Chat auf ${connection.name}`;
91
+ const plusLabel = starter ? `New run from ${starter.title} on ${connection.name}` : `New chat on ${connection.name}`;
92
92
  const ownIcon = state === "login-required" || detail !== undefined || failure !== undefined;
93
93
  return <li className="flex min-w-0 items-stretch overflow-hidden rounded-md bg-secondary">
94
94
  {ownIcon && <StateButton action={action} connection={connection} failure={failure} onFailure={setFailure} onLogin={onLogin} send={send} />}
@@ -110,16 +110,16 @@ function ConnectionChip({ connection, send, onLogin }: {
110
110
  </li>;
111
111
  }
112
112
 
113
- /** Die Vorlagen eines Servers: die Standard-Vorlage oder Neuer Chat zuerst, dann die übrigen; ab zwei Servern mit Überschrift. */
113
+ /** The templates of a server: the default template or New chat first, then the rest; with a heading when there are two or more servers. */
114
114
  function ConnectionOffers({ connection, marked, send }: { connection: ConnectionView; marked: boolean; send: PanelPageProps["send"] }) {
115
115
  return <div className="grid grid-cols-1 gap-1.5">
116
116
  {marked && <h3 className="flex items-center gap-1.5 pt-1 text-[0.78rem] font-semibold"><ConnectionStateIcon state={connectionState(connection)} />{connection.name}</h3>}
117
- <StartTiles defaultEntry={connection.defaultEntry} entries={connection.entries} label={marked ? `Vorlagen auf ${connection.name}` : "Vorlagen"}
117
+ <StartTiles defaultEntry={connection.defaultEntry} entries={connection.entries} label={marked ? `Templates on ${connection.name}` : "Templates"}
118
118
  onNewChat={() => send({ action: "newRun", name: connection.name })} onStart={(entryId) => send({ action: "newRun", name: connection.name, entryId })} />
119
119
  </div>;
120
120
  }
121
121
 
122
- /** Die Startseite: die Server als Block, darunter die letzten Runs und je erreichbarem Server seine Vorlagen, die Standard-Vorlage oder Neuer Chat zuerst. */
122
+ /** The start page: the servers as a block, below them the latest runs and, per reachable server, its templates, the default template or New chat first. */
123
123
  export function StartPage({ state, send }: PanelPageProps) {
124
124
  const [login, setLogin] = useState<string>();
125
125
  const connections = state.connections;
@@ -131,10 +131,13 @@ export function StartPage({ state, send }: PanelPageProps) {
131
131
  const loginConnection = connections.find((connection) => connection.name === login);
132
132
  return <div className="@container/panel grid grid-cols-1 gap-4">
133
133
  {state.problem && <p className="text-[0.8rem] leading-normal text-destructive [overflow-wrap:anywhere]" role="alert">{state.problem}</p>}
134
+ {connections.flatMap((connection) => connection.versionNotice ? [{ name: connection.name, notice: connection.versionNotice }] : []).map(({ name, notice }) =>
135
+ <p className={cn("text-[0.8rem] leading-normal [overflow-wrap:anywhere]", notice.level === "error" ? "text-destructive" : "text-warning")} data-notice={notice.level} key={name}
136
+ role={notice.level === "error" ? "alert" : "status"}>{marked ? `${name}: ${notice.text}` : notice.text}</p>)}
134
137
  {connections.length === 0
135
138
  ? <div className="grid gap-3">
136
- <p className="text-[0.85rem] leading-normal text-muted-foreground">Noch kein Server. Lege einen Server per Adresse oder ein lokales Profil an.</p>
137
- <Button onClick={() => send({ action: "page", page: "connections" })}><ServerIcon data-icon="inline-start" />Server anlegen</Button>
139
+ <p className="text-[0.85rem] leading-normal text-muted-foreground">No server yet. Add a server by address or a local profile.</p>
140
+ <Button onClick={() => send({ action: "page", page: "connections" })}><ServerIcon data-icon="inline-start" />Add server</Button>
138
141
  </div>
139
142
  : <>
140
143
  <section className="grid grid-cols-1 gap-1.5">
@@ -144,17 +147,17 @@ export function StartPage({ state, send }: PanelPageProps) {
144
147
  </ul>
145
148
  </section>
146
149
  <section className="grid grid-cols-1 gap-1.5">
147
- <StartSection title="Weiter">
148
- {runs.length > 0 && <Button className="text-[0.66rem]" onClick={() => send({ action: "page", page: "runs" })} size="xs" variant="ghost">Alle {runs.length} Runs<ChevronRightIcon data-icon="inline-end" /></Button>}
150
+ <StartSection title="Continue">
151
+ {runs.length > 0 && <Button className="text-[0.66rem]" onClick={() => send({ action: "page", page: "runs" })} size="xs" variant="ghost">All {runs.length} runs<ChevronRightIcon data-icon="inline-end" /></Button>}
149
152
  </StartSection>
150
153
  {runs.length === 0
151
- ? <p className="text-[0.75rem] text-muted-foreground">Noch keine Runs.</p>
152
- : <RunList label="Zuletzt" showConnection={marked}>
154
+ ? <p className="text-[0.75rem] text-muted-foreground">No runs yet.</p>
155
+ : <RunList label="Recent" showConnection={marked}>
153
156
  {runs.slice(0, RECENT_RUNS).map(({ connection, run }) => <RunLine connection={connection} key={`${connection.name}:${run.id}`} onOpen={() => send({ action: "openRun", name: connection.name, runId: run.id })} run={run} showConnection={marked} />)}
154
157
  </RunList>}
155
158
  </section>
156
159
  {reachable.length > 0 && <section className="grid grid-cols-1 gap-1.5">
157
- <StartSection count={tiles} title="Neu" />
160
+ <StartSection count={tiles} title="New" />
158
161
  {reachable.map((connection) => <ConnectionOffers connection={connection} key={connection.name} marked={marked} send={send} />)}
159
162
  </section>}
160
163
  </>}