@schlenkr/ragents 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (748) hide show
  1. package/README.md +1 -1
  2. package/apps/server/package.json +1 -1
  3. package/apps/server/src/access-projection.ts +6 -6
  4. package/apps/server/src/access-service.ts +3 -3
  5. package/apps/server/src/access-session.ts +19 -19
  6. package/apps/server/src/api/contracts.ts +29 -29
  7. package/apps/server/src/api/core-methods.ts +17 -17
  8. package/apps/server/src/api/delivery.ts +2 -2
  9. package/apps/server/src/api/reference.ts +27 -27
  10. package/apps/server/src/api/rights.ts +18 -18
  11. package/apps/server/src/chat-handler.ts +5 -5
  12. package/apps/server/src/config-definition.ts +37 -10
  13. package/apps/server/src/config-file.ts +49 -49
  14. package/apps/server/src/config.ts +2 -0
  15. package/apps/server/src/data-directory.ts +2 -2
  16. package/apps/server/src/external-access.ts +1 -1
  17. package/apps/server/src/folder-install.ts +1 -1
  18. package/apps/server/src/help-files.ts +1 -1
  19. package/apps/server/src/host-api.json +6 -1
  20. package/apps/server/src/host-api.ts +3 -2
  21. package/apps/server/src/host-record.ts +3 -3
  22. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  23. package/apps/server/src/host-version.ts +17 -17
  24. package/apps/server/src/host-web.ts +5 -5
  25. package/apps/server/src/main.ts +6 -6
  26. package/apps/server/src/missing-environment.ts +6 -6
  27. package/apps/server/src/parent-watch.ts +4 -4
  28. package/apps/server/src/plugin-build/build.ts +38 -38
  29. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  30. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  31. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  32. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  33. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  34. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  35. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  36. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  37. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  38. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  39. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  40. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  41. package/apps/server/src/plugin-support/http.ts +2 -2
  42. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  43. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  44. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  45. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  46. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  47. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  48. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  49. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  50. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  51. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  52. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  53. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  54. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  55. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  56. package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
  57. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  58. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  59. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  60. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  61. package/apps/server/src/plugin-support/prompt.ts +1 -1
  62. package/apps/server/src/plugin-support/provision.ts +8 -8
  63. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  64. package/apps/server/src/plugin-support/skills.ts +18 -18
  65. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  66. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  67. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  68. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  69. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  70. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  71. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  72. package/apps/server/src/plugin-support/zip.ts +7 -7
  73. package/apps/server/src/profile/bundle-manifest.ts +27 -27
  74. package/apps/server/src/profile/compose.ts +12 -7
  75. package/apps/server/src/profile/plugin-discovery.ts +14 -14
  76. package/apps/server/src/profile/provisioning.ts +5 -5
  77. package/apps/server/src/profile-target.ts +10 -10
  78. package/apps/server/src/protocol.ts +2 -2
  79. package/apps/server/src/provider.ts +62 -57
  80. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  81. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  82. package/apps/server/src/ragents/coordinator.ts +2 -2
  83. package/apps/server/src/ragents/engine.ts +23 -23
  84. package/apps/server/src/ragents/global-chat.ts +8 -8
  85. package/apps/server/src/ragents/host-services.ts +6 -3
  86. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  87. package/apps/server/src/ragents/run-owner.ts +2 -2
  88. package/apps/server/src/ragents/session.ts +49 -49
  89. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  90. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  91. package/apps/server/src/rpc/dispatcher.ts +19 -19
  92. package/apps/server/src/rpc/http-transport.ts +11 -11
  93. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  94. package/apps/server/src/run-preparation-input.ts +5 -5
  95. package/apps/server/src/run-preparation.ts +24 -24
  96. package/apps/server/src/run-transfer.ts +39 -39
  97. package/apps/server/src/server.ts +48 -48
  98. package/apps/server/src/settings.ts +1 -1
  99. package/apps/server/src/startup.ts +3 -3
  100. package/apps/server/src/title-compactor.ts +9 -9
  101. package/apps/server/src/title-settings.ts +3 -3
  102. package/apps/server/src/web-bundles.ts +2 -2
  103. package/apps/server/src/web-stylesheet.ts +2 -2
  104. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-CpPi6QLr.js} +1 -1
  105. package/apps/web/dist/assets/main-DJmCHGzM.js +11 -0
  106. package/apps/web/dist/assets/mermaid-HWGCJPDP-q-mf1kLN.js +608 -0
  107. package/apps/web/dist/assets/runPanel-nk_aMxSn.js +21 -0
  108. package/apps/web/dist/help/guide-access.html +5 -5
  109. package/apps/web/dist/help/guide-access.md +2 -2
  110. package/apps/web/dist/help/guide-clients.html +53 -54
  111. package/apps/web/dist/help/guide-clients.md +50 -51
  112. package/apps/web/dist/help/guide-distributed.html +12 -7
  113. package/apps/web/dist/help/guide-distributed.md +9 -4
  114. package/apps/web/dist/help/guide-functions.html +3 -3
  115. package/apps/web/dist/help/guide-getting-started.html +24 -15
  116. package/apps/web/dist/help/guide-getting-started.md +22 -12
  117. package/apps/web/dist/help/guide-ideas.html +3 -3
  118. package/apps/web/dist/help/guide-plugins.html +5 -4
  119. package/apps/web/dist/help/guide-plugins.md +2 -1
  120. package/apps/web/dist/help/guide-programs.html +3 -3
  121. package/apps/web/dist/help/guide-runtime.html +6 -6
  122. package/apps/web/dist/help/guide-runtime.md +3 -3
  123. package/apps/web/dist/help/guide.html +3 -3
  124. package/apps/web/dist/help/index.html +196 -144
  125. package/apps/web/dist/help/mini-app.css +6 -0
  126. package/apps/web/dist/help/mini-app.js +14 -14
  127. package/apps/web/dist/host-web.json +91 -91
  128. package/apps/web/dist/index.html +3 -3
  129. package/apps/web/dist/run-panel.html +3 -3
  130. package/apps/web/package.json +1 -1
  131. package/apps/web/src/AccessContext.tsx +15 -15
  132. package/apps/web/src/App.tsx +13 -13
  133. package/apps/web/src/DiffCode.tsx +2 -2
  134. package/apps/web/src/HelpDialog.tsx +3 -3
  135. package/apps/web/src/Overview.tsx +13 -13
  136. package/apps/web/src/PluginActivation.ts +1 -1
  137. package/apps/web/src/PluginChat.tsx +15 -15
  138. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  139. package/apps/web/src/PluginRegistry.tsx +44 -44
  140. package/apps/web/src/RunPreparationChat.tsx +11 -11
  141. package/apps/web/src/RunStore.ts +1 -1
  142. package/apps/web/src/SessionList.tsx +14 -14
  143. package/apps/web/src/SettingsModal.tsx +112 -112
  144. package/apps/web/src/StartOptions.tsx +11 -11
  145. package/apps/web/src/StartSelection.tsx +11 -11
  146. package/apps/web/src/StartTiles.tsx +8 -8
  147. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  148. package/apps/web/src/ThemeSettings.tsx +8 -8
  149. package/apps/web/src/TitleModelSettings.tsx +13 -13
  150. package/apps/web/src/WorkspacePanel.tsx +9 -9
  151. package/apps/web/src/access-session.ts +4 -4
  152. package/apps/web/src/access-token.ts +5 -5
  153. package/apps/web/src/actor-conversation.ts +3 -3
  154. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  155. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  156. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  157. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  158. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  159. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  160. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  161. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  162. package/apps/web/src/api.ts +7 -7
  163. package/apps/web/src/chat/QuasselHost.tsx +1 -1
  164. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  165. package/apps/web/src/chat/chat-target.ts +3 -3
  166. package/apps/web/src/chat/requests.ts +2 -2
  167. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  168. package/apps/web/src/chat-view-settings.tsx +5 -6
  169. package/apps/web/src/diff-view.css +1 -1
  170. package/apps/web/src/highlighting.css +1 -1
  171. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  172. package/apps/web/src/lib/labels.ts +6 -6
  173. package/apps/web/src/main.tsx +4 -4
  174. package/apps/web/src/offered-machines.ts +2 -2
  175. package/apps/web/src/page-opener.tsx +1 -1
  176. package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
  177. package/apps/web/src/panel/LoginForm.tsx +6 -6
  178. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  179. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  180. package/apps/web/src/panel/PanelPage.tsx +1 -1
  181. package/apps/web/src/panel/RunLine.tsx +4 -4
  182. package/apps/web/src/panel/RunsPage.tsx +15 -15
  183. package/apps/web/src/panel/StartPage.tsx +26 -26
  184. package/apps/web/src/panel/connection-state.ts +9 -9
  185. package/apps/web/src/panel/contract.ts +28 -28
  186. package/apps/web/src/panel.tsx +1 -1
  187. package/apps/web/src/plugin-bootstrap.ts +5 -5
  188. package/apps/web/src/product/ModelControl.tsx +3 -3
  189. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  190. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  191. package/apps/web/src/product/model-settings.ts +2 -2
  192. package/apps/web/src/rpc/client.ts +16 -16
  193. package/apps/web/src/rpc.ts +1 -1
  194. package/apps/web/src/run-overview.ts +1 -1
  195. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  196. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  197. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  198. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  199. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  200. package/apps/web/src/run-panel/clipboard.ts +3 -3
  201. package/apps/web/src/run-panel/host-contract.ts +5 -5
  202. package/apps/web/src/run-panel/host.ts +15 -15
  203. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  204. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  205. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  206. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  207. package/apps/web/src/run-panel.tsx +4 -4
  208. package/apps/web/src/run-preparation.ts +2 -2
  209. package/apps/web/src/run-view.ts +3 -3
  210. package/apps/web/src/settings-contributions.ts +32 -32
  211. package/apps/web/src/theme.ts +9 -9
  212. package/apps/web/src/title-model-settings.ts +6 -6
  213. package/apps/web/src/ui/ListDetail.tsx +9 -9
  214. package/apps/web/src/ui/dialog.tsx +2 -2
  215. package/apps/web/src/ui/modal-controller.ts +3 -3
  216. package/apps/web/src/ui/modal.tsx +2 -2
  217. package/apps/web/src/ui/popover.tsx +1 -1
  218. package/apps/web/src/ui/relative-time.ts +8 -8
  219. package/apps/web/src/ui/startup-notice.tsx +2 -2
  220. package/apps/web/src/ui/state-icon.tsx +1 -1
  221. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  222. package/apps/web/src/ui/stop-button.tsx +2 -2
  223. package/bundles/ragents.activity/ragents-bundle.json +3 -3
  224. package/bundles/ragents.activity/web/classes.json +1 -1
  225. package/bundles/ragents.activity/web/index.js +1 -1
  226. package/bundles/ragents.activity/web/index.js.map +2 -2
  227. package/bundles/ragents.actor-programs/ragents-bundle.json +3 -3
  228. package/bundles/ragents.actor-programs/server/index.js +225 -225
  229. package/bundles/ragents.actor-programs/server/index.js.map +2 -2
  230. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  231. package/bundles/ragents.actor-programs/web/index.js +1 -1
  232. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  233. package/bundles/ragents.ask/ragents-bundle.json +3 -3
  234. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  235. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  236. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  237. package/bundles/ragents.ask/server/index.js +23 -23
  238. package/bundles/ragents.ask/server/index.js.map +2 -2
  239. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  240. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  241. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
  242. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
  243. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  245. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  246. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  247. package/bundles/ragents.ask/web/classes.json +1 -1
  248. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  249. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  250. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  251. package/bundles/ragents.ask/web/index.js +1 -1
  252. package/bundles/ragents.ask/web/index.js.map +2 -2
  253. package/bundles/ragents.browser/executor/index.mjs +35 -35
  254. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  255. package/bundles/ragents.browser/ragents-bundle.json +3 -3
  256. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  257. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  258. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  259. package/bundles/ragents.browser/server/index.js +31 -31
  260. package/bundles/ragents.browser/server/index.js.map +2 -2
  261. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  262. package/bundles/ragents.documents/prompt.hbs +1 -1
  263. package/bundles/ragents.documents/ragents-bundle.json +3 -3
  264. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  265. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  266. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  267. package/bundles/ragents.documents/server/index.js +26 -26
  268. package/bundles/ragents.documents/server/index.js.map +2 -2
  269. package/bundles/ragents.documents/web/classes.json +1 -1
  270. package/bundles/ragents.documents/web/index.js +1 -1
  271. package/bundles/ragents.documents/web/index.js.map +3 -3
  272. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  273. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  274. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +3 -3
  275. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  276. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  277. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  278. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  280. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  281. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +3 -3
  282. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  283. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  284. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  285. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  286. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  287. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  288. package/bundles/ragents.lsp-typescript/ragents-bundle.json +3 -3
  289. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  290. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  291. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  292. package/bundles/ragents.model-relay/ragents-bundle.json +8 -4
  293. package/bundles/ragents.model-relay/server/index.js +25 -21
  294. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  295. package/bundles/ragents.orchestration/ragents-bundle.json +3 -3
  296. package/bundles/ragents.orchestration/server/index.js +28 -28
  297. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  300. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  301. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  302. package/bundles/ragents.orchestration/web/classes.json +1 -1
  303. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  304. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  305. package/bundles/ragents.orchestration/web/index.js +8 -8
  306. package/bundles/ragents.orchestration/web/index.js.map +2 -2
  307. package/bundles/ragents.overseer/ragents-bundle.json +3 -3
  308. package/bundles/ragents.overseer/server/index.js +98 -98
  309. package/bundles/ragents.overseer/server/index.js.map +2 -2
  310. package/bundles/ragents.overseer/web/classes.json +1 -1
  311. package/bundles/ragents.overseer/web/index.js +1 -1
  312. package/bundles/ragents.overseer/web/index.js.map +2 -2
  313. package/bundles/ragents.processes/ragents-bundle.json +3 -3
  314. package/bundles/ragents.processes/server/index.js +11 -11
  315. package/bundles/ragents.processes/server/index.js.map +2 -2
  316. package/bundles/ragents.processes/web/classes.json +1 -1
  317. package/bundles/ragents.processes/web/index.js +3 -3
  318. package/bundles/ragents.processes/web/index.js.map +2 -2
  319. package/bundles/ragents.product/ragents-bundle.json +3 -3
  320. package/bundles/ragents.product/server/index.js +12 -13
  321. package/bundles/ragents.product/server/index.js.map +2 -2
  322. package/bundles/ragents.product/web/classes.json +1 -1
  323. package/bundles/ragents.product/web/index.js +1 -1
  324. package/bundles/ragents.product/web/index.js.map +2 -2
  325. package/bundles/ragents.profile-distribution/ragents-bundle.json +3 -3
  326. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  327. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  328. package/bundles/ragents.reference/ragents-bundle.json +3 -3
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  335. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  336. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  340. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  341. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  347. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  348. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  349. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  350. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  352. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  353. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  360. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  361. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  362. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  363. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  365. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  366. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  367. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  368. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  392. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  393. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  394. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  395. package/bundles/ragents.reference/web/classes.json +1 -1
  396. package/bundles/ragents.reference/web/index.js +1 -1
  397. package/bundles/ragents.reference/web/index.js.map +2 -2
  398. package/bundles/ragents.todo/ragents-bundle.json +3 -3
  399. package/bundles/ragents.todo/server/index.js +5 -8
  400. package/bundles/ragents.todo/server/index.js.map +2 -2
  401. package/bundles/ragents.todo/web/classes.json +1 -1
  402. package/bundles/ragents.todo/web/index.js +1 -1
  403. package/bundles/ragents.todo/web/index.js.map +2 -2
  404. package/bundles/ragents.transcript/ragents-bundle.json +3 -3
  405. package/bundles/ragents.transcript/server/index.js +11 -11
  406. package/bundles/ragents.transcript/server/index.js.map +2 -2
  407. package/bundles/ragents.watch/ragents-bundle.json +3 -3
  408. package/bundles/ragents.watch/server/index.js +48 -48
  409. package/bundles/ragents.watch/server/index.js.map +2 -2
  410. package/bundles/ragents.workspace/ragents-bundle.json +3 -3
  411. package/bundles/ragents.workspace/server/index.js +83 -83
  412. package/bundles/ragents.workspace/server/index.js.map +2 -2
  413. package/bundles/ragents.workspace/web/classes.json +1 -1
  414. package/bundles/ragents.workspace/web/index.js +1 -1
  415. package/bundles/ragents.workspace/web/index.js.map +2 -2
  416. package/package.json +4 -4
  417. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  418. package/packages/agent/dist/index.d.ts +1 -1
  419. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  420. package/packages/agent/src/core/compaction/utils.ts +1 -1
  421. package/packages/agent/src/core/model-runtime.ts +45 -5
  422. package/packages/agent/src/index.ts +1 -1
  423. package/packages/agent/src/loop/agent-loop.ts +2 -2
  424. package/packages/ai/dist/models.d.ts +1 -0
  425. package/packages/ai/dist/models.generated.d.ts +4544 -983
  426. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  427. package/packages/ai/src/api/ai-sdk.ts +33 -7
  428. package/packages/ai/src/api-registry.ts +1 -1
  429. package/packages/ai/src/index.ts +2 -2
  430. package/packages/ai/src/models.generated.ts +1 -1
  431. package/packages/ai/src/models.ts +1 -1
  432. package/packages/ai/src/providers/openrouter.models.ts +3725 -552
  433. package/packages/ragents/src/access.ts +12 -12
  434. package/packages/ragents/src/agents/actor-input.ts +33 -33
  435. package/packages/ragents/src/agents/catalog.ts +1 -1
  436. package/packages/ragents/src/agents/delivery.ts +17 -17
  437. package/packages/ragents/src/agents/plugins.ts +1 -1
  438. package/packages/ragents/src/agents/scheduler.ts +7 -7
  439. package/packages/ragents/src/agents/schemas.ts +1 -1
  440. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  441. package/packages/ragents/src/agents/tools.ts +20 -20
  442. package/packages/ragents/src/agents/toolset.ts +5 -5
  443. package/packages/ragents/src/agents/workspaces.ts +1 -1
  444. package/packages/ragents/src/domain/events.ts +1 -1
  445. package/packages/ragents/src/domain/model.ts +5 -5
  446. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  447. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  448. package/packages/ragents/src/drivers/agent.ts +2 -2
  449. package/packages/ragents/src/drivers/attachments.ts +4 -4
  450. package/packages/ragents/src/http/contracts.ts +14 -14
  451. package/packages/ragents/src/http/methods.ts +6 -6
  452. package/packages/ragents/src/plugin-host.ts +119 -119
  453. package/packages/ragents/src/plugin-types.ts +16 -16
  454. package/packages/ragents/src/rpc/contract.ts +5 -5
  455. package/packages/ragents/src/rpc/contribution.ts +2 -2
  456. package/packages/ragents/src/rpc/peer.ts +11 -11
  457. package/packages/ragents/src/rpc/protocol.ts +2 -2
  458. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  459. package/packages/ragents/src/runtime/journal-storage.ts +1 -1
  460. package/packages/ragents/src/runtime/journal.ts +10 -10
  461. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  462. package/packages/ragents/src/runtime/stop.ts +2 -2
  463. package/packages/ragents/src/script/mediators.ts +35 -35
  464. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  465. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  466. package/packages/ragents/src/typescript/compiler.ts +7 -7
  467. package/packages/ragents/src/typescript/snippet.ts +5 -5
  468. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  469. package/packages/workspace-executor/src/commands.ts +18 -18
  470. package/packages/workspace-executor/src/context.ts +15 -15
  471. package/packages/workspace-executor/src/contributions.ts +44 -44
  472. package/packages/workspace-executor/src/errors.ts +1 -1
  473. package/packages/workspace-executor/src/executor.ts +16 -16
  474. package/packages/workspace-executor/src/files.ts +31 -31
  475. package/packages/workspace-executor/src/index.ts +1 -1
  476. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  477. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  478. package/packages/workspace-executor/src/language-server/host.ts +36 -36
  479. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  480. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  481. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  482. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  483. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +3 -3
  484. package/packages/workspace-executor/src/managed-process.ts +12 -12
  485. package/packages/workspace-executor/src/module.ts +8 -8
  486. package/packages/workspace-executor/src/modules.ts +3 -3
  487. package/packages/workspace-executor/src/paths.ts +11 -11
  488. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  489. package/packages/workspace-executor/src/processes/module.ts +3 -3
  490. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  491. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  492. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  493. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  494. package/packages/workspace-executor/src/run-folders.ts +3 -3
  495. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  496. package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
  497. package/packages/workspace-executor/src/session-ident.ts +2 -2
  498. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  499. package/packages/workspace-executor/src/tools.ts +5 -5
  500. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  501. package/plugins/ragents.activity/web/activity.ts +2 -2
  502. package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
  503. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  504. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  505. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  506. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  507. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  508. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  509. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  510. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  511. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  512. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  513. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  514. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  515. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  516. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  517. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  518. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  519. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  520. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  521. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  522. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  523. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  524. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  525. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  526. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  527. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  528. package/plugins/ragents.ask/ask-payload.ts +1 -1
  529. package/plugins/ragents.ask/contract.ts +5 -5
  530. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  531. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  532. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  533. package/plugins/ragents.ask/server/contract.ts +5 -5
  534. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  535. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  536. package/plugins/ragents.ask/web/index.tsx +2 -2
  537. package/plugins/ragents.browser/executor/contract.ts +6 -6
  538. package/plugins/ragents.browser/executor/index.ts +1 -1
  539. package/plugins/ragents.browser/executor/module.ts +6 -6
  540. package/plugins/ragents.browser/executor/pages.ts +32 -32
  541. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  542. package/plugins/ragents.browser/provision.ts +7 -7
  543. package/plugins/ragents.browser/server/browser.ts +14 -14
  544. package/plugins/ragents.browser/server/contract.ts +1 -1
  545. package/plugins/ragents.browser/server/index.ts +1 -1
  546. package/plugins/ragents.browser/server/tools.ts +14 -14
  547. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  548. package/plugins/ragents.documents/contract.ts +2 -2
  549. package/plugins/ragents.documents/prompt.hbs +1 -1
  550. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  551. package/plugins/ragents.documents/server/files-route.ts +6 -6
  552. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  553. package/plugins/ragents.documents/server/store.ts +1 -1
  554. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  555. package/plugins/ragents.documents/web/index.tsx +11 -11
  556. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  557. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  558. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  559. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  560. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  561. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  562. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  563. package/plugins/ragents.model-relay/server/config.ts +6 -2
  564. package/plugins/ragents.model-relay/server/index.ts +2 -2
  565. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  566. package/plugins/ragents.orchestration/contract.ts +8 -8
  567. package/plugins/ragents.orchestration/server/index.ts +4 -4
  568. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  569. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  570. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  571. package/plugins/ragents.orchestration/web/ActorChat.tsx +3 -3
  572. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -5
  573. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  574. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  575. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  576. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  577. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  578. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  579. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  580. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  581. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  582. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  583. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  584. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  585. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  586. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  587. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  588. package/plugins/ragents.orchestration/web/format.ts +1 -1
  589. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  590. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  591. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  592. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
  593. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  594. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  595. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  596. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  597. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  598. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  599. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
  600. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  601. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  602. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  603. package/plugins/ragents.overseer/contract.ts +20 -20
  604. package/plugins/ragents.overseer/server/api.ts +6 -6
  605. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  606. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  607. package/plugins/ragents.overseer/server/index.ts +24 -24
  608. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  609. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  610. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  611. package/plugins/ragents.overseer/server/settings.ts +6 -6
  612. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  613. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  614. package/plugins/ragents.overseer/web/index.tsx +20 -20
  615. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  616. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  617. package/plugins/ragents.processes/contract.ts +5 -5
  618. package/plugins/ragents.processes/server/methods.ts +4 -4
  619. package/plugins/ragents.processes/server/observer.ts +8 -8
  620. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  621. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  622. package/plugins/ragents.processes/web/processes.ts +10 -10
  623. package/plugins/ragents.product/server/config.ts +1 -1
  624. package/plugins/ragents.product/server/index.ts +4 -4
  625. package/plugins/ragents.product/server/runtime.ts +9 -10
  626. package/plugins/ragents.product/web/index.tsx +1 -1
  627. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  628. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  629. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  630. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  631. package/plugins/ragents.reference/examples.ts +27 -27
  632. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  636. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  637. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  638. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  639. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  640. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  641. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  642. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  643. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  644. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  645. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  648. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  649. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  650. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  651. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  652. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  653. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  654. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  655. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  656. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  657. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  661. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  662. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  663. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  664. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  665. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  666. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  667. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  668. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  669. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  670. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  671. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  672. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  693. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  694. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  695. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  696. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  697. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  698. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  699. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  700. package/plugins/ragents.todo/contract.ts +0 -3
  701. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  702. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  703. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  704. package/plugins/ragents.watch/server/condition.ts +4 -4
  705. package/plugins/ragents.watch/server/functions.ts +27 -27
  706. package/plugins/ragents.watch/server/observation.ts +2 -2
  707. package/plugins/ragents.watch/server/service.ts +14 -14
  708. package/plugins/ragents.workspace/client/transport.ts +1 -1
  709. package/plugins/ragents.workspace/client/workspace-client.ts +63 -63
  710. package/plugins/ragents.workspace/contract.ts +46 -46
  711. package/plugins/ragents.workspace/server/binding.ts +20 -20
  712. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  713. package/plugins/ragents.workspace/server/clients.ts +50 -50
  714. package/plugins/ragents.workspace/server/config.ts +7 -7
  715. package/plugins/ragents.workspace/server/index.ts +3 -3
  716. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  717. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  718. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  719. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  720. package/plugins/ragents.workspace/web/index.tsx +1 -1
  721. package/ragents.config.core.ts +1 -1
  722. package/ragents.config.developer.ts +3 -3
  723. package/ragents.config.showcase.ts +2 -2
  724. package/scripts/agent/agent-cli.ts +96 -96
  725. package/scripts/agent/journal.ts +5 -5
  726. package/scripts/agent/turn-control.ts +4 -4
  727. package/scripts/package/build-package.ts +31 -31
  728. package/scripts/package/host-links.mjs +3 -3
  729. package/scripts/package/publish-package.ts +29 -29
  730. package/scripts/package/ragents.mjs +19 -19
  731. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  732. package/scripts/plugin/plugin-cli.ts +14 -14
  733. package/scripts/provision/run-provision.ts +14 -15
  734. package/scripts/remote/connect.ts +49 -49
  735. package/scripts/remote/start.ts +18 -18
  736. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  737. package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
  738. package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
  739. package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
  740. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  741. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  742. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  743. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  744. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  745. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  746. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  747. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  748. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -28,7 +28,7 @@ const StartOptionsContext = createContext<StartOptionsControl>(inertControl);
28
28
 
29
29
  const messageOf = (cause: unknown): string => cause instanceof Error ? cause.message : String(cause);
30
30
 
31
- /** Eine Vorbelegung gilt nur für Optionen, die der Run gerade wählen lässt; Unbekanntes bleibt liegen. */
31
+ /** A preset applies only to options the run currently lets you choose; anything unknown is left alone. */
32
32
  export const initialStartOptionUpdates = (
33
33
  options: readonly StartOptionState[],
34
34
  values: Readonly<Record<string, unknown>>,
@@ -36,7 +36,7 @@ export const initialStartOptionUpdates = (
36
36
  .filter((option) => option.selectable && !option.locked && Object.hasOwn(values, option.id))
37
37
  .map((option) => [option.id, values[option.id]] as const);
38
38
 
39
- /** Was eine Vorlage festlegt, belegt niemand vor; sonst scheitert ihr Start an der abweichenden Wahl. */
39
+ /** Nothing presets what a template fixes; otherwise its start fails on the differing choice. */
40
40
  export const withoutFixedStartOptions = (
41
41
  values: Readonly<Record<string, unknown>>,
42
42
  fixed: Readonly<Record<string, unknown>> | undefined,
@@ -47,7 +47,7 @@ export interface ShownStartOption {
47
47
  readonly fixed: boolean;
48
48
  }
49
49
 
50
- /** Was eine Stelle zeigt: die wählbaren offenen Optionen und jede, die die Vorlage festlegt, mit deren Wert und nicht wählbar. */
50
+ /** What a place shows: the selectable open options and every option the template fixes, with the template's value and not selectable. */
51
51
  export const shownStartOptions = (
52
52
  options: readonly StartOptionState[],
53
53
  fixed: Readonly<Record<string, unknown>>,
@@ -65,7 +65,7 @@ const sameJson = (left: unknown, right: unknown): boolean => {
65
65
  && keys.every((key) => Object.hasOwn(right, key) && sameJson((left as Record<string, unknown>)[key], (right as Record<string, unknown>)[key]));
66
66
  };
67
67
 
68
- /** Was vor dem Start anders gewählt ist, als die Vorlage festlegt; so ein Start scheitert am Server. */
68
+ /** What was chosen before the start differently from what the template fixes; such a start fails on the server. */
69
69
  export const conflictingStartOptions = (
70
70
  options: readonly StartOptionState[],
71
71
  fixed: Readonly<Record<string, unknown>>,
@@ -139,7 +139,7 @@ export function StartOptionsProvider({
139
139
  const operation = active.current;
140
140
  if (!operation || operation.sessionId !== sessionId || operation.controller.signal.aborted) return;
141
141
  if (operation.pending || saving.current?.sessionId === sessionId) {
142
- setState((current) => ({ ...current, errors: new Map(current.errors).set(optionId, "Die Startoptionen werden noch geladen oder gespeichert. Bitte versuche es danach erneut.") }));
142
+ setState((current) => ({ ...current, errors: new Map(current.errors).set(optionId, "The start options are still loading or saving. Please try again afterwards.") }));
143
143
  return;
144
144
  }
145
145
  operation.pending = true;
@@ -189,7 +189,7 @@ export function StartOptionsProvider({
189
189
  })();
190
190
  }, [allowed, sessionId, set, state]);
191
191
 
192
- // Bis der Server nach der ersten Nachricht geantwortet hat, ist alles gesperrt; danach gilt sein locked.
192
+ // Until the server has answered after the first message, everything is locked; after that its locked applies.
193
193
  const control = useMemo<StartOptionsControl>(() => ({
194
194
  options: state.sessionId === sessionId ? state.options.map((option) => ({ ...option, locked: option.locked || (started && !state.loadedStarted) })) : [],
195
195
  errors: state.sessionId === sessionId ? state.errors : new Map(),
@@ -207,9 +207,9 @@ const ChoiceControl = ({ disabled, error, option, setValue }: StartOptionControl
207
207
  try {
208
208
  const presentation = choicePresentationFrom(option.presentation, option.id);
209
209
  if (!presentation) {
210
- return { message: `Die Startoption ${option.id} hat weder eine Web-Komponente noch eine Auswahl-Darstellung` };
210
+ return { message: `The start option ${option.id} has neither a web component nor a choice presentation` };
211
211
  }
212
- if (typeof option.value !== "string") return { message: `Der Wert der Startoption ${option.id} ist keine Kennung` };
212
+ if (typeof option.value !== "string") return { message: `The value of the start option ${option.id} is not an identifier` };
213
213
  return { presentation, value: option.value };
214
214
  } catch (cause) {
215
215
  return { message: messageOf(cause) };
@@ -233,12 +233,12 @@ const unchangeable = async () => undefined;
233
233
 
234
234
  function FixedStartOption({ conflict, machines, option, registry }: { conflict: boolean; machines: OfferedMachines; option: StartOptionState; registry: PluginRegistry }) {
235
235
  const Control = registry.startOptions.get(option.id)?.Control ?? ChoiceControl;
236
- return <span className="contents" data-start-option-fixed={option.id} title="Von der Vorlage festgelegt">
237
- <Control disabled error={conflict ? "Gewählt ist ein anderer Wert; die Vorlage legt diesen fest." : undefined} machines={machines} option={option} setValue={unchangeable} />
236
+ return <span className="contents" data-start-option-fixed={option.id} title="Set by the template">
237
+ <Control disabled error={conflict ? "A different value is chosen; the template sets this one." : undefined} machines={machines} option={option} setValue={unchangeable} />
238
238
  </span>;
239
239
  }
240
240
 
241
- /** Die Startoptionen einer Stelle; was die gewählte Vorlage festlegt, steht fest mit ihrem Wert statt zur Wahl. */
241
+ /** The start options of a place; what the chosen template fixes is shown with its value instead of as a choice. */
242
242
  export function StartOptionControls({ disabled, registry, placement = "page", fixed = noneFixed }: {
243
243
  disabled: boolean;
244
244
  registry: PluginRegistry;
@@ -14,16 +14,16 @@ const tileOf = (entry: StartEntry, guided: boolean, technical: boolean): Connect
14
14
  title: entry.title,
15
15
  description: entry.description,
16
16
  kind: entry.action,
17
- category: entry.category ?? (technical ? "Run-Scripts" : "Abläufe"),
17
+ category: entry.category ?? (technical ? "Run scripts" : "Workflows"),
18
18
  ...(guided ? { guided: true } : {}),
19
19
  });
20
20
 
21
- /** Die Startauswahl eines Entwurfs: dieselben Kacheln wie Start in VS Code; Neuer Chat öffnet den leeren Run, eine Vorlage startet sofort oder nach ihrem Leitfaden. */
21
+ /** The start selection of a draft: the same tiles as Start in VS Code; New chat opens the empty run, a template starts right away or after its guide. */
22
22
  export function StartSelection({ registry, session, initialEntryId, onOpen }: {
23
23
  registry: PluginRegistry;
24
24
  session: SessionContext;
25
25
  initialEntryId?: string;
26
- /** Der Entwurf wird zum offenen Run, als leerer Chat oder nach dem Start einer Vorlage. */
26
+ /** The draft becomes the open run, as an empty chat or after a template starts. */
27
27
  onOpen: () => void;
28
28
  }) {
29
29
  const access = useAccess();
@@ -61,7 +61,7 @@ export function StartSelection({ registry, session, initialEntryId, onOpen }: {
61
61
  const open = useCallback((entryId: string) => {
62
62
  const entry = registry.startEntries.find((candidate) => candidate.id === entryId);
63
63
  if (!entry || !canStartEntry(access, entry.id)) {
64
- setError("Diese Vorlage ist im aktuellen Profil nicht verfügbar.");
64
+ setError("This template is not available in the current profile.");
65
65
  return;
66
66
  }
67
67
  openStartEntry(entry, registry, modal, sessionRef, launch);
@@ -74,17 +74,17 @@ export function StartSelection({ registry, session, initialEntryId, onOpen }: {
74
74
  }, [disabled, initialEntryId, open]);
75
75
 
76
76
  return <div className="flex min-h-0 min-w-0 flex-1 flex-col overflow-auto px-10 pt-6 pb-5 max-md:px-3 max-md:pt-11 max-md:pb-4">
77
- <section aria-label="Startauswahl" className="mx-auto grid w-full max-w-composer grid-cols-1 gap-1.5">
78
- <StartSection count={startTileCount(tiles, defaultEntry, free)} title="Neu" />
77
+ <section aria-label="Start selection" className="mx-auto grid w-full max-w-composer grid-cols-1 gap-1.5">
78
+ <StartSection count={startTileCount(tiles, defaultEntry, free)} title="New" />
79
79
  {error && <p className="text-[0.8rem] text-destructive" role="alert">{error}</p>}
80
80
  {tiles.length === 0 && !free
81
- ? <p className="text-[0.75rem] text-muted-foreground" role="status">Für dieses Benutzerkonto ist keine Vorlage freigegeben.</p>
82
- : <StartTiles defaultEntry={defaultEntry} disabled={disabled} entries={tiles} label="Vorlagen" onNewChat={free ? onOpen : undefined} onStart={open} />}
81
+ ? <p className="text-[0.75rem] text-muted-foreground" role="status">No template is shared with this user account.</p>
82
+ : <StartTiles defaultEntry={defaultEntry} disabled={disabled} entries={tiles} label="Templates" onNewChat={free ? onOpen : undefined} onStart={open} />}
83
83
  </section>
84
84
  </div>;
85
85
  }
86
86
 
87
- /** Eine Vorlage öffnen: ihr Leitfaden fragt zuerst, ein Skill mit Leitfaden geht danach in den Vorbereitungschat, alles andere startet sofort. */
87
+ /** Opens a template: its guide asks first, a skill with a guide then moves to the preparation chat, everything else starts right away. */
88
88
  export function openStartEntry(entry: StartEntry, registry: PluginRegistry, modal: ModalController,
89
89
  sessionRef: RefObject<SessionContext>, launch: (entry: StartEntry, value: JsonValue | null) => Promise<void>) {
90
90
  const guide = registry.guideFor(entry);
@@ -100,11 +100,11 @@ export function openStartEntry(entry: StartEntry, registry: PluginRegistry, moda
100
100
  void launch(entry, value);
101
101
  return;
102
102
  }
103
- if (typeof value !== "string" || !value.trim()) throw new Error(`Der Leitfaden für ${entry.title} muss einen nicht leeren Auftrag liefern.`);
103
+ if (typeof value !== "string" || !value.trim()) throw new Error(`The guide for ${entry.title} must return a non-empty task.`);
104
104
  const prompt = value;
105
105
  completed = true;
106
106
  controller.back();
107
- modal.open({ title: "Auftrag vorbereiten", subtitle: entry.title,
107
+ modal.open({ title: "Prepare task", subtitle: entry.title,
108
108
  render: () => <RunPreparationChat entry={entry} initialPrompt={prompt} registry={registry} sessionRef={sessionRef} /> });
109
109
  }} />,
110
110
  });
@@ -2,7 +2,7 @@ import { BookIcon, ChevronRightIcon, CodeIcon, PlusIcon } from "lucide-react";
2
2
  import type { ReactNode } from "react";
3
3
  import type { ConnectionEntry } from "./panel/contract";
4
4
 
5
- const NEW_CHAT = { category: "Ohne Vorlage", title: "Neuer Chat", description: "Leerer Run, der Auftrag entsteht im Chat." };
5
+ const NEW_CHAT = { category: "No template", title: "New chat", description: "Empty run; the task takes shape in the chat." };
6
6
 
7
7
  const sectionClass = "flex items-baseline gap-2 text-[0.66rem] font-bold uppercase tracking-[0.06em] text-muted-foreground";
8
8
  const countClass = "font-mono text-[0.62rem] font-normal tracking-normal opacity-80";
@@ -12,7 +12,7 @@ const entryIcon = (entry: ConnectionEntry): ReactNode => entry.kind === "skill"
12
12
  ? <BookIcon aria-hidden className="size-3.5" />
13
13
  : <CodeIcon aria-hidden className="size-3.5" />;
14
14
 
15
- /** Die Überschrift eines Abschnitts der Startseite, mit Zahl und rechts einer Aktion. */
15
+ /** The heading of a Start page section, with a count and an action on the right. */
16
16
  export function StartSection({ title, count, children }: { title: string; count?: number; children?: ReactNode }) {
17
17
  return <div className="flex items-baseline justify-between gap-2">
18
18
  <h2 className={sectionClass}>{title}{count !== undefined && <span className={countClass}>{count}</span>}</h2>
@@ -25,7 +25,7 @@ function Tile({ category, title, description, icon, standard, guided, disabled,
25
25
  title: string;
26
26
  description: string;
27
27
  icon: ReactNode;
28
- /** Die Vorlage ist der Default ihres Servers. */
28
+ /** The template is its server's default. */
29
29
  standard?: boolean;
30
30
  guided?: boolean;
31
31
  disabled: boolean;
@@ -36,28 +36,28 @@ function Tile({ category, title, description, icon, standard, guided, disabled,
36
36
  <span className="flex min-w-0 items-center gap-1.5 text-(--tone)">
37
37
  {icon}
38
38
  <span className="truncate text-[0.58rem] font-semibold uppercase tracking-[0.06em] text-muted-foreground">{category}</span>
39
- {standard && <span className="ml-auto flex-none rounded-sm border border-current px-1 text-[0.52rem] font-semibold uppercase tracking-[0.06em] leading-[1.5] opacity-70">Standard</span>}
39
+ {standard && <span className="ml-auto flex-none rounded-sm border border-current px-1 text-[0.52rem] font-semibold uppercase tracking-[0.06em] leading-[1.5] opacity-70">Default</span>}
40
40
  </span>
41
41
  <span className="text-[0.76rem] font-semibold leading-snug [overflow-wrap:anywhere]">{title}</span>
42
42
  <span className="line-clamp-2 text-[0.66rem] leading-[1.45] text-muted-foreground">{description}</span>
43
43
  <span className="mt-auto flex items-center gap-0.5 pt-1.5 text-[0.62rem] font-semibold text-(--tone) opacity-50 group-enabled/tile:group-hover/tile:opacity-100">
44
- {guided ? "Einrichten" : "Starten"}<ChevronRightIcon aria-hidden className="size-3" />
44
+ {guided ? "Set up" : "Start"}<ChevronRightIcon aria-hidden className="size-3" />
45
45
  </span>
46
46
  </button>
47
47
  </li>;
48
48
  }
49
49
 
50
- /** Wie viele Kacheln StartTiles zeigt: die Vorlagen, ohne Standard-Vorlage dazu Neuer Chat. */
50
+ /** How many tiles StartTiles shows: the templates, plus New chat when there is no default template. */
51
51
  export const startTileCount = (entries: readonly ConnectionEntry[], defaultEntry: string | undefined, newChat: boolean): number =>
52
52
  entries.length + (defaultEntry === undefined && newChat ? 1 : 0);
53
53
 
54
- /** Die Vorlagen eines Servers als Kacheln, die Standard-Vorlage oder Neuer Chat zuerst: Start in VS Code und die Startauswahl im Browser. */
54
+ /** A server's templates as tiles, the default template or New chat first: Start in VS Code and the start selection in the browser. */
55
55
  export function StartTiles({ entries, defaultEntry, label, disabled = false, onNewChat, onStart }: {
56
56
  entries: readonly ConnectionEntry[];
57
57
  defaultEntry?: string;
58
58
  label: string;
59
59
  disabled?: boolean;
60
- /** Ohne sie fehlt die Kachel Neuer Chat. */
60
+ /** Without it the New chat tile is missing. */
61
61
  onNewChat?: () => void;
62
62
  onStart: (entryId: string) => void;
63
63
  }) {
@@ -51,10 +51,10 @@ export function SurfaceShortcuts({ children }: { children: ReactNode }) {
51
51
  };
52
52
 
53
53
  return <div className="flex min-w-0 flex-1" ref={containerRef}>
54
- {scroll.overflow && <ToolbarItem as="button" aria-controls={id} aria-label="Apps und Actors nach links" className="w-8 justify-center px-0" disabled={!scroll.left} onClick={() => move(-1)} title="Nach links blättern" type="button"><ChevronLeftIcon size={18} /></ToolbarItem>}
55
- <div aria-label="Apps und Actors durchblättern" className="flex min-w-0 flex-1 items-stretch overflow-x-auto no-scrollbar focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:-outline-offset-3" id={id} ref={viewportRef} role="group" tabIndex={0}>
54
+ {scroll.overflow && <ToolbarItem as="button" aria-controls={id} aria-label="Scroll apps and actors left" className="w-8 justify-center px-0" disabled={!scroll.left} onClick={() => move(-1)} title="Scroll left" type="button"><ChevronLeftIcon size={18} /></ToolbarItem>}
55
+ <div aria-label="Browse apps and actors" className="flex min-w-0 flex-1 items-stretch overflow-x-auto no-scrollbar focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:-outline-offset-3" id={id} ref={viewportRef} role="group" tabIndex={0}>
56
56
  <div className="flex w-max flex-none items-stretch" ref={contentRef}>{children}</div>
57
57
  </div>
58
- {scroll.overflow && <ToolbarItem as="button" aria-controls={id} aria-label="Apps und Actors nach rechts" className="w-8 justify-center border-r-0 border-l border-border px-0 [&>svg]:rotate-180" disabled={!scroll.right} onClick={() => move(1)} title="Nach rechts blättern" type="button"><ChevronLeftIcon size={18} /></ToolbarItem>}
58
+ {scroll.overflow && <ToolbarItem as="button" aria-controls={id} aria-label="Scroll apps and actors right" className="w-8 justify-center border-r-0 border-l border-border px-0 [&>svg]:rotate-180" disabled={!scroll.right} onClick={() => move(1)} title="Scroll right" type="button"><ChevronLeftIcon size={18} /></ToolbarItem>}
59
59
  </div>;
60
60
  }
@@ -13,8 +13,8 @@ export function ThemeSettings() {
13
13
  const writable = access.can("settings.write");
14
14
  return <div className="mx-auto flex max-w-[1020px] flex-col gap-6 px-[clamp(20px,4vw,46px)] pt-7 pb-12 max-sm:px-3.5 max-sm:pt-5 max-sm:pb-9">
15
15
  <header>
16
- <h2 className="text-[1.08rem] text-foreground">Darstellung</h2>
17
- <p className="mt-2 max-w-[780px] text-xs leading-[1.55] text-muted-foreground">Farben für die gesamte Oberfläche, die Fläche und die Leiste.</p>
16
+ <h2 className="text-[1.08rem] text-foreground">Appearance</h2>
17
+ <p className="mt-2 max-w-[780px] text-xs leading-[1.55] text-muted-foreground">Colors for the whole interface, the surface and the sidebar.</p>
18
18
  </header>
19
19
  <section aria-labelledby="theme-settings-title">
20
20
  <Card className="flex-row flex-wrap items-center gap-5 p-6 max-sm:p-4">
@@ -25,9 +25,9 @@ export function ThemeSettings() {
25
25
  </div>
26
26
  <div className="flex-[1_1_220px]">
27
27
  <h3 className="mb-1.5 text-lg font-semibold" id="theme-settings-title">Schichtwerk</h3>
28
- <p className={noteClasses}>Matte Flächen und gezeichnete Konturen.</p>
28
+ <p className={noteClasses}>Matte surfaces and drawn outlines.</p>
29
29
  </div>
30
- <ToggleGroup aria-label="Schichtwerk-Farbschema" className="flex-none max-sm:w-full" disabled={!writable} size="sm" spacing={0}
30
+ <ToggleGroup aria-label="Schichtwerk color scheme" className="flex-none max-sm:w-full" disabled={!writable} size="sm" spacing={0}
31
31
  value={[preference]} variant="outline"
32
32
  onValueChange={([value]) => { if (value && writable) store.setPreference(parseThemePreference(value)); }}>
33
33
  {themeOptions.map((option) => <ToggleGroupItem key={option.value} value={option.value}>{option.label}</ToggleGroupItem>)}
@@ -36,11 +36,11 @@ export function ThemeSettings() {
36
36
  </section>
37
37
  <p className={noteClasses} role="status">
38
38
  {preference === "system"
39
- ? `Folgt der Systemeinstellung. Aktuell ist Schichtwerk ${appearance === "dark" ? "Dunkel" : "Hell"} aktiv.`
40
- : `Schichtwerk ${appearance === "dark" ? "Dunkel" : "Hell"} ist aktiv.`}
41
- {" "}Änderungen gelten sofort und werden in diesem Browser gespeichert.
39
+ ? `Follows the system setting. Schichtwerk ${appearance === "dark" ? "Dark" : "Light"} is currently active.`
40
+ : `Schichtwerk ${appearance === "dark" ? "Dark" : "Light"} is active.`}
41
+ {" "}Changes apply immediately and are saved in this browser.
42
42
  </p>
43
- {!writable && <p className={noteClasses}>Die Darstellung ist mit deinen Rechten nur lesbar.</p>}
43
+ {!writable && <p className={noteClasses}>With your permissions, the appearance is read-only.</p>}
44
44
  {error && <p className="text-sm leading-[1.6] text-destructive" role="alert">{error}</p>}
45
45
  </div>;
46
46
  }
@@ -47,9 +47,9 @@ export function TitleModelSettings() {
47
47
  if (!readable) return null;
48
48
  if (state.status === "failed") return <Alert className="grid justify-items-start gap-2" variant="destructive">
49
49
  <AlertDescription>{state.error}</AlertDescription>
50
- <Button variant="outline" onClick={() => { setState({ status: "loading" }); setRetry((value) => value + 1); }}>Erneut laden</Button>
50
+ <Button variant="outline" onClick={() => { setState({ status: "loading" }); setRetry((value) => value + 1); }}>Reload</Button>
51
51
  </Alert>;
52
- if (state.status !== "ready" || draft === undefined) return <p className={noteClasses} role="status">Einstellungen für Überschriften werden geladen ...</p>;
52
+ if (state.status !== "ready" || draft === undefined) return <p className={noteClasses} role="status">Loading title settings ...</p>;
53
53
  const { settings } = state;
54
54
  const save = async () => {
55
55
  if (!writable || saving.current || !dirty) return;
@@ -61,39 +61,39 @@ export function TitleModelSettings() {
61
61
  const saved = await requestTitleModelSettings({ selection: draft });
62
62
  setState({ status: "ready", settings: saved });
63
63
  setDraft(saved.selection);
64
- setNotice(saved.selection === null ? "Automatische Überschriften sind deaktiviert." : "Modell für die nächsten automatischen Überschriften gespeichert.");
64
+ setNotice(saved.selection === null ? "Automatic titles are turned off." : "Model saved for the next automatic titles.");
65
65
  window.dispatchEvent(new Event(titleModelSettingsChangedEvent));
66
66
  } catch (cause) { setError(messageOf(cause)); }
67
67
  finally { saving.current = false; setPending(false); }
68
68
  };
69
69
 
70
70
  const options = titleModelOptions(settings.models, draft, settings.models.length > 20 ? query : "");
71
- return <form aria-label="Modell für automatische Überschriften" className="flex min-w-0 flex-col items-start gap-3" onSubmit={(event) => {
71
+ return <form aria-label="Model for automatic titles" className="flex min-w-0 flex-col items-start gap-3" onSubmit={(event) => {
72
72
  event.preventDefault();
73
73
  void save();
74
74
  }}>
75
- <p className={noteClasses}>Verdichtet den ersten Auftrag zu einer kurzen Titelzeile. Gilt für die nächsten automatisch erzeugten Titel.</p>
76
- {settings.models.length === 0 && <p className={noteClasses}>Der Anbieter bietet kein Modell für Überschriften an; automatische Überschriften bleiben aus.</p>}
77
- {!writable && <p className={noteClasses}>Du hast Lesezugriff auf diese Einstellungen.</p>}
78
- {settings.models.length > 20 && <Input aria-label="Modelle für Überschriften durchsuchen" className={controlClasses} disabled={!writable || pending}
79
- onChange={(event) => setQuery(event.target.value)} placeholder="Modell suchen ..." type="search" value={query} />}
75
+ <p className={noteClasses}>Condenses the first task into a short title line. Applies to the next automatically generated titles.</p>
76
+ {settings.models.length === 0 && <p className={noteClasses}>The provider offers no model for titles; automatic titles stay off.</p>}
77
+ {!writable && <p className={noteClasses}>You have read access to these settings.</p>}
78
+ {settings.models.length > 20 && <Input aria-label="Search title models" className={controlClasses} disabled={!writable || pending}
79
+ onChange={(event) => setQuery(event.target.value)} placeholder="Search models ..." type="search" value={query} />}
80
80
  <Select disabled={!writable || pending} items={options} value={titleSelectionKey(draft)} onValueChange={(key) => {
81
81
  if (key === null) return;
82
82
  setDraft(titleSelectionFromKey(key, settings.models));
83
83
  setError(undefined);
84
84
  setNotice(undefined);
85
85
  }}>
86
- <SelectTrigger aria-label="Modell" className={controlClasses}><SelectValue /></SelectTrigger>
86
+ <SelectTrigger aria-label="Model" className={controlClasses}><SelectValue /></SelectTrigger>
87
87
  <SelectContent>
88
88
  {options.map((option) => <SelectItem key={option.value} value={option.value}>{option.label}</SelectItem>)}
89
89
  </SelectContent>
90
90
  </Select>
91
91
  <div className="flex flex-wrap items-center gap-x-3 gap-y-2">
92
- <Button disabled={!writable || pending || !dirty} type="submit">{pending ? "Wird gespeichert ..." : "Speichern"}</Button>
92
+ <Button disabled={!writable || pending || !dirty} type="submit">{pending ? "Saving ..." : "Save"}</Button>
93
93
  {dirty && <Button variant="outline" disabled={pending} onClick={() => {
94
94
  setDraft(settings.selection); setError(undefined); setNotice(undefined);
95
- }}>Änderungen verwerfen</Button>}
96
- <span className={`${noteClasses} empty:hidden`} role="status">{notice ?? (dirty ? "Ungespeicherte Änderungen" : "")}</span>
95
+ }}>Discard changes</Button>}
96
+ <span className={`${noteClasses} empty:hidden`} role="status">{notice ?? (dirty ? "Unsaved changes" : "")}</span>
97
97
  </div>
98
98
  {error && <p className="text-[0.76rem] text-destructive" role="alert">{error}</p>}
99
99
  </form>;
@@ -48,7 +48,7 @@ export function WorkspacePanel(props: WorkspacePanelProps) {
48
48
  const tabs = props.tabs;
49
49
  const activeTab = tabs.find((tab) => tab.id === props.navigation.activeTabId) ?? tabs[0];
50
50
  const activeTabId = activeTab?.id;
51
- const stateAction = collapsed ? "Leiste aufklappen" : "Leiste einklappen";
51
+ const stateAction = collapsed ? "Expand sidebar" : "Collapse sidebar";
52
52
 
53
53
  useLayoutEffect(() => {
54
54
  const panel = panelRef.current;
@@ -147,7 +147,7 @@ export function WorkspacePanel(props: WorkspacePanelProps) {
147
147
  frame = undefined;
148
148
  applyWidth(currentWidth);
149
149
  target.setAttribute("aria-valuenow", String(Math.round(currentWidth)));
150
- target.setAttribute("aria-valuetext", `${Math.round(currentWidth)} Pixel`);
150
+ target.setAttribute("aria-valuetext", `${Math.round(currentWidth)} pixels`);
151
151
  });
152
152
  }
153
153
 
@@ -165,7 +165,7 @@ export function WorkspacePanel(props: WorkspacePanelProps) {
165
165
  applyWidth(normalWidthRef.current);
166
166
  const effective = clampWidth(normalWidthRef.current);
167
167
  target.setAttribute("aria-valuenow", String(Math.round(effective)));
168
- target.setAttribute("aria-valuetext", `${Math.round(effective)} Pixel`);
168
+ target.setAttribute("aria-valuetext", `${Math.round(effective)} pixels`);
169
169
  }
170
170
 
171
171
  window.addEventListener("pointermove", move);
@@ -196,7 +196,7 @@ export function WorkspacePanel(props: WorkspacePanelProps) {
196
196
 
197
197
  return (
198
198
  <aside
199
- aria-label="Leiste"
199
+ aria-label="Sidebar"
200
200
  className={cn(
201
201
  "relative z-20 flex min-h-0 min-w-0 flex-col @max-[960px]/chat-content:absolute @max-[960px]/chat-content:inset-y-0 @max-[960px]/chat-content:right-0 @max-[960px]/chat-content:left-auto",
202
202
  collapsed
@@ -211,12 +211,12 @@ export function WorkspacePanel(props: WorkspacePanelProps) {
211
211
  <div
212
212
  aria-controls="workspace-panel"
213
213
  aria-disabled={!resizable}
214
- aria-label="Breite der Leiste"
214
+ aria-label="Sidebar width"
215
215
  aria-orientation="vertical"
216
216
  aria-valuemax={Math.round(layoutBounds.max)}
217
217
  aria-valuemin={Math.round(layoutBounds.min)}
218
218
  aria-valuenow={Math.round(effectiveWidth)}
219
- aria-valuetext={`${Math.round(effectiveWidth)} Pixel`}
219
+ aria-valuetext={`${Math.round(effectiveWidth)} pixels`}
220
220
  className={cn(
221
221
  "absolute inset-y-0 right-auto -left-1 z-30 w-2 touch-none",
222
222
  resizable
@@ -227,11 +227,11 @@ export function WorkspacePanel(props: WorkspacePanelProps) {
227
227
  onPointerDown={resizable ? startResize : undefined}
228
228
  role="separator"
229
229
  tabIndex={resizable ? 0 : -1}
230
- title="Breite ziehen"
230
+ title="Drag to resize"
231
231
  />
232
232
  )}
233
233
  {props.headerContainer && createPortal(<TooltipProvider><div className="flex min-w-0 flex-1 items-center gap-1.5 overflow-hidden pr-[7px] pl-[9px]" data-workspace-state={props.state}>
234
- <nav aria-label="Leiste" className="flex min-w-0 flex-1 flex-nowrap gap-[3px] overflow-x-auto no-scrollbar" hidden={collapsed} role="tablist">
234
+ <nav aria-label="Sidebar" className="flex min-w-0 flex-1 flex-nowrap gap-[3px] overflow-x-auto no-scrollbar" hidden={collapsed} role="tablist">
235
235
  {tabs.map((tab) => (
236
236
  <Tooltip key={tab.id}>
237
237
  <TooltipTrigger
@@ -253,7 +253,7 @@ export function WorkspacePanel(props: WorkspacePanelProps) {
253
253
  />
254
254
  )}
255
255
  </TooltipTrigger>
256
- <TooltipContent side="bottom">{props.pendingTabIds.includes(tab.id) ? `${tab.label} - es gibt Neues` : tab.label}</TooltipContent>
256
+ <TooltipContent side="bottom">{props.pendingTabIds.includes(tab.id) ? `${tab.label} - new activity` : tab.label}</TooltipContent>
257
257
  </Tooltip>
258
258
  ))}
259
259
  </nav>
@@ -1,22 +1,22 @@
1
1
  import type { AccessSnapshot } from "../../../packages/ragents/src/access";
2
2
 
3
3
  export function accessSnapshotFrom(value: unknown): AccessSnapshot {
4
- if (!value || typeof value !== "object") throw new Error("Ungültige Benutzerkonfiguration");
4
+ if (!value || typeof value !== "object") throw new Error("Invalid user configuration");
5
5
  const snapshot = value as Record<string, unknown>;
6
- if (typeof snapshot.enabled !== "boolean") throw new Error("Ungültiger Anmeldemodus");
6
+ if (typeof snapshot.enabled !== "boolean") throw new Error("Invalid sign-in mode");
7
7
  if (snapshot.user === null) return { enabled: snapshot.enabled, user: null };
8
8
  const user = snapshot.user as Record<string, unknown> | undefined;
9
9
  if (!user || typeof user.id !== "string" || typeof user.label !== "string"
10
10
  || !Array.isArray(user.rights) || !user.rights.every((right) => typeof right === "string")
11
11
  || (user.startEntries !== undefined && (!Array.isArray(user.startEntries)
12
12
  || !user.startEntries.every((entry) => typeof entry === "string" && entry.length > 0)))) {
13
- throw new Error("Ungültiger angemeldeter Benutzer");
13
+ throw new Error("Invalid signed-in user");
14
14
  }
15
15
  return { enabled: snapshot.enabled, user: { id: user.id, label: user.label, rights: user.rights,
16
16
  ...(user.startEntries !== undefined ? { startEntries: user.startEntries as string[] } : {}) } };
17
17
  }
18
18
 
19
- /** Die Pfade, die der Server hinter die Anmeldung stellt; über /rpc und /rpc/stream laufen alle Daten der Oberfläche. */
19
+ /** The paths the server puts behind sign-in; all UI data flows through /rpc and /rpc/stream. */
20
20
  const PROTECTED_PATH = /^\/(?:api|rpc|files)(?:\/|$)/;
21
21
 
22
22
  export function observeAccessExpiry(request: typeof fetch, origin: string, onExpired: () => void): typeof fetch {
@@ -7,12 +7,12 @@ let installed: string | undefined;
7
7
  const sameOrigin = (url: string, browser: Window): boolean => new URL(url, browser.location.href).origin === browser.location.origin;
8
8
 
9
9
  /**
10
- * Hält den Zugangstoken einer Seite, die ohne Anmeldecookie läuft (iframe in einem VS-Code-Webview):
11
- * jeder Abruf an den eigenen Server trägt ihn als Bearer, Adressen ohne Header (Ereignisstrom, Frames) als Abfrageparameter.
10
+ * Holds the access token of a page that runs without a sign-in cookie (iframe in a VS Code webview):
11
+ * every fetch to its own server carries it as a bearer, addresses without headers (event stream, frames) as a query parameter.
12
12
  */
13
13
  export function installAccessToken(token: string, browser: Window = window): void {
14
- if (!token) throw new Error("Der Zugangstoken ist leer.");
15
- if (installed !== undefined) throw new Error("Der Zugangstoken ist bereits installiert.");
14
+ if (!token) throw new Error("The access token is empty.");
15
+ if (installed !== undefined) throw new Error("The access token is already installed.");
16
16
  installed = token;
17
17
  const original = browser.fetch.bind(browser);
18
18
  browser.fetch = (input, init) => {
@@ -24,7 +24,7 @@ export function installAccessToken(token: string, browser: Window = window): voi
24
24
 
25
25
  export const accessTokenInstalled = (): boolean => installed !== undefined;
26
26
 
27
- /** Hängt den installierten Token an eine Serveradresse an; ohne Token bleibt die Adresse unverändert. */
27
+ /** Appends the installed token to a server address; without a token the address stays unchanged. */
28
28
  export function withAccessToken(path: string): string {
29
29
  if (installed === undefined) return path;
30
30
  return `${path}${path.includes("?") ? "&" : "?"}${ACCESS_TOKEN_QUERY}=${encodeURIComponent(installed)}`;
@@ -6,8 +6,8 @@ const ACTOR_HUES = [212, 158, 28, 283, 350, 190, 95, 320, 55, 245];
6
6
  const shortId = (id: string) => id.length > 12 ? `${id.slice(0, 12)}...` : id;
7
7
 
8
8
  export const actorInputLabel = (view: RunView, input: RunActorInput): string => input.subscriptionId
9
- ? "Über Subscription zugestellt"
10
- : `Zugestellt von @${view.actors.find((actor) => actor.id === input.enqueuedBy)?.handle ?? shortId(input.enqueuedBy)}`;
9
+ ? "Delivered via subscription"
10
+ : `Delivered by @${view.actors.find((actor) => actor.id === input.enqueuedBy)?.handle ?? shortId(input.enqueuedBy)}`;
11
11
 
12
12
  export const actorConversation = (view: RunView, actor: RunActor): Message[] => {
13
13
  const colorOf = (actorId: string) => {
@@ -20,7 +20,7 @@ export const actorConversation = (view: RunView, actor: RunActor): Message[] =>
20
20
  const fromOwner = input.enqueuedBy === view.ownerId;
21
21
  const attachments = input.artifactIds.map((id) => {
22
22
  const artifact = view.artifacts.find((entry) => entry.id === id);
23
- if (!artifact) throw new Error(`Anhang ${id} fehlt in der Run-Ansicht`);
23
+ if (!artifact) throw new Error(`Attachment ${id} is missing from the run view`);
24
24
  return {
25
25
  name: artifact.title, mediaType: artifact.mediaType, size: artifact.size,
26
26
  url: `/chat/${encodeURIComponent(view.id)}/attachments/${encodeURIComponent(id)}`,
@@ -4,11 +4,11 @@ import { Button, Checkbox, Input, Table, TableBody, TableCell, TableHead, TableH
4
4
  import type { DataTableProps, TableAction, TableColumn, TableValue } from "./table-contracts";
5
5
 
6
6
  export type TableSort = { id: string; direction: "asc" | "desc" };
7
- const displayValue = (value: TableValue) => value === null || value === undefined ? "" : typeof value === "boolean" ? value ? "Ja" : "Nein" : String(value);
7
+ const displayValue = (value: TableValue) => value === null || value === undefined ? "" : typeof value === "boolean" ? value ? "Yes" : "No" : String(value);
8
8
 
9
9
  export function tableRows<Row>(rows: readonly Row[], columns: readonly TableColumn<Row>[], query: string, sort?: TableSort): Row[] {
10
- const needle = query.trim().toLocaleLowerCase("de-DE");
11
- const filtered = rows.filter((row) => !needle || columns.some((column) => column.filterable !== false && displayValue(column.value(row)).toLocaleLowerCase("de-DE").includes(needle)));
10
+ const needle = query.trim().toLocaleLowerCase("en-US");
11
+ const filtered = rows.filter((row) => !needle || columns.some((column) => column.filterable !== false && displayValue(column.value(row)).toLocaleLowerCase("en-US").includes(needle)));
12
12
  const column = sort && columns.find((entry) => entry.id === sort.id && entry.sortable);
13
13
  if (!column || !sort) return filtered;
14
14
  return filtered.sort((left, right) => {
@@ -18,7 +18,7 @@ export function tableRows<Row>(rows: readonly Row[], columns: readonly TableColu
18
18
  if (b === null || b === undefined) return -1;
19
19
  const order = typeof a === "number" && typeof b === "number" ? a - b
20
20
  : typeof a === "boolean" && typeof b === "boolean" ? Number(a) - Number(b)
21
- : String(a).localeCompare(String(b), "de-DE", { numeric: true });
21
+ : String(a).localeCompare(String(b), "en-US", { numeric: true });
22
22
  return sort.direction === "asc" ? order : -order;
23
23
  });
24
24
  }
@@ -61,11 +61,11 @@ export function DataTable<Row>(props: DataTableProps<Row>) {
61
61
  }
62
62
  };
63
63
  return (
64
- <section aria-label={title ?? "Datentabelle"} aria-busy={loading} className="flex min-w-0 flex-col gap-3">
64
+ <section aria-label={title ?? "Data table"} aria-busy={loading} className="flex min-w-0 flex-col gap-3">
65
65
  {title && <h2 className="text-base font-semibold">{title}</h2>}
66
- {filterable && <Input aria-label="Tabelle durchsuchen" id={filterId} onChange={(event) => setQuery(event.target.value)} placeholder="Tabelle durchsuchen" type="search" value={query} />}
66
+ {filterable && <Input aria-label="Search table" id={filterId} onChange={(event) => setQuery(event.target.value)} placeholder="Search table" type="search" value={query} />}
67
67
  {loading && <p className="text-sm text-muted-foreground" role="status">Loading...</p>}
68
- <div aria-label={title ?? "Tabelleninhalt"} className="max-w-full overflow-auto" role="region" tabIndex={0}>
68
+ <div aria-label={title ?? "Table content"} className="max-w-full overflow-auto" role="region" tabIndex={0}>
69
69
  <Table>
70
70
  <TableHeader><TableRow>
71
71
  {selectable && <TableHead className="w-8"><Checkbox aria-label="Select all visible rows" checked={allSelected} disabled={loading || visible.length === 0} indeterminate={partiallySelected} onCheckedChange={toggleVisible} /></TableHead>}
@@ -76,7 +76,7 @@ export function DataTable<Row>(props: DataTableProps<Row>) {
76
76
  </Button>
77
77
  : column.label}
78
78
  </TableHead>)}
79
- {actions.length > 0 && <TableHead>Aktionen</TableHead>}
79
+ {actions.length > 0 && <TableHead>Actions</TableHead>}
80
80
  </TableRow></TableHeader>
81
81
  <TableBody>
82
82
  {visible.map((row) => {
@@ -23,7 +23,7 @@ function FilePreview({ file }: { file: File }) {
23
23
  return () => { active = false; };
24
24
  }, [file]);
25
25
  if (preview?.file !== file) return null;
26
- if (preview.error) return <p className="text-sm text-destructive" role="alert">Vorschau fehlgeschlagen: {preview.error}</p>;
26
+ if (preview.error) return <p className="text-sm text-destructive" role="alert">Preview failed: {preview.error}</p>;
27
27
  if (preview.text !== undefined) return <div className="mt-3 max-h-56 overflow-auto rounded-md bg-muted"><SourceCode content={preview.text} path={file.name} /></div>;
28
28
  if (!preview.url) return null;
29
29
  if (file.type.startsWith("image/")) return <img alt={file.name} className="mt-3 block max-h-56 max-w-full rounded-md" src={preview.url} />;
@@ -53,12 +53,12 @@ export function FilePicker({ label, files, onChange, disabled, showPreview = tru
53
53
  <Label htmlFor={id}>{label}</Label>
54
54
  <input accept={options.accept} className="max-w-full min-w-0 text-sm file:mr-2 file:rounded-md file:border file:bg-background file:px-2 file:py-1 file:text-sm" disabled={blocked} id={id} multiple={options.multiple !== false} type="file" {...fileInput.inputProps} />
55
55
  <p className="text-xs text-muted-foreground">Select files, drag them here, or paste while the file picker is focused.</p>
56
- {options.accept && <p className="text-xs text-muted-foreground">Erlaubt: {options.accept}</p>}
56
+ {options.accept && <p className="text-xs text-muted-foreground">Allowed: {options.accept}</p>}
57
57
  </div>
58
58
  {error && <p className="mt-2 text-sm text-destructive" role="alert">{error}</p>}
59
59
  {files.length > 0 && <ul className="mt-2 divide-y">{files.map((file, index) => <li className="py-2" key={`${file.name}:${file.size}:${file.lastModified}:${index}`}>
60
- <div className="flex items-start justify-between gap-3"><span className="min-w-0 break-words"><strong>{file.name}</strong> <small className="block text-muted-foreground">{new Intl.NumberFormat("de-DE").format(file.size)} Bytes</small></span>
61
- <Button aria-label={`${file.name} entfernen`} disabled={blocked} onClick={() => { void change(() => files.filter((_, position) => position !== index)); }} size="sm" variant="outline">Entfernen</Button></div>
60
+ <div className="flex items-start justify-between gap-3"><span className="min-w-0 break-words"><strong>{file.name}</strong> <small className="block text-muted-foreground">{new Intl.NumberFormat("en-US").format(file.size)} bytes</small></span>
61
+ <Button aria-label={`Remove ${file.name}`} disabled={blocked} onClick={() => { void change(() => files.filter((_, position) => position !== index)); }} size="sm" variant="outline">Remove</Button></div>
62
62
  {showPreview && <FilePreview file={file} />}
63
63
  </li>)}</ul>}
64
64
  </section>;