@schlenkr/ragents 0.1.10 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (743) hide show
  1. package/apps/server/package.json +1 -1
  2. package/apps/server/src/access-projection.ts +4 -4
  3. package/apps/server/src/access-service.ts +3 -3
  4. package/apps/server/src/access-session.ts +19 -19
  5. package/apps/server/src/api/contracts.ts +29 -29
  6. package/apps/server/src/api/core-methods.ts +17 -17
  7. package/apps/server/src/api/delivery.ts +2 -2
  8. package/apps/server/src/api/reference.ts +27 -27
  9. package/apps/server/src/api/rights.ts +18 -18
  10. package/apps/server/src/chat-handler.ts +5 -5
  11. package/apps/server/src/config-definition.ts +37 -10
  12. package/apps/server/src/config-file.ts +49 -49
  13. package/apps/server/src/config.ts +2 -0
  14. package/apps/server/src/data-directory.ts +2 -2
  15. package/apps/server/src/external-access.ts +1 -1
  16. package/apps/server/src/folder-install.ts +1 -1
  17. package/apps/server/src/help-files.ts +1 -1
  18. package/apps/server/src/host-api.json +6 -1
  19. package/apps/server/src/host-api.ts +3 -2
  20. package/apps/server/src/host-record.ts +3 -3
  21. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  22. package/apps/server/src/host-version.ts +17 -17
  23. package/apps/server/src/host-web.ts +5 -5
  24. package/apps/server/src/main.ts +6 -6
  25. package/apps/server/src/missing-environment.ts +6 -6
  26. package/apps/server/src/parent-watch.ts +4 -4
  27. package/apps/server/src/plugin-build/build.ts +31 -31
  28. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  29. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  30. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  31. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  32. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  33. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  34. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  35. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  36. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  37. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  38. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  39. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  40. package/apps/server/src/plugin-support/http.ts +2 -2
  41. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  42. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  43. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  44. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  45. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  46. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  47. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  48. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  49. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  50. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  51. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  52. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  53. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  54. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  55. package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
  56. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  57. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  58. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  59. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  60. package/apps/server/src/plugin-support/prompt.ts +1 -1
  61. package/apps/server/src/plugin-support/provision.ts +8 -8
  62. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  63. package/apps/server/src/plugin-support/skills.ts +18 -18
  64. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  65. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  66. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  67. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  68. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  69. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  70. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  71. package/apps/server/src/plugin-support/zip.ts +7 -7
  72. package/apps/server/src/profile/bundle-manifest.ts +17 -17
  73. package/apps/server/src/profile/compose.ts +12 -7
  74. package/apps/server/src/profile/plugin-discovery.ts +12 -12
  75. package/apps/server/src/profile/provisioning.ts +5 -5
  76. package/apps/server/src/profile-target.ts +10 -10
  77. package/apps/server/src/protocol.ts +2 -2
  78. package/apps/server/src/provider.ts +61 -56
  79. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  80. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  81. package/apps/server/src/ragents/coordinator.ts +2 -2
  82. package/apps/server/src/ragents/engine.ts +23 -23
  83. package/apps/server/src/ragents/global-chat.ts +8 -8
  84. package/apps/server/src/ragents/host-services.ts +6 -3
  85. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  86. package/apps/server/src/ragents/run-owner.ts +2 -2
  87. package/apps/server/src/ragents/session.ts +49 -49
  88. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  89. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  90. package/apps/server/src/rpc/dispatcher.ts +19 -19
  91. package/apps/server/src/rpc/http-transport.ts +11 -11
  92. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  93. package/apps/server/src/run-preparation-input.ts +5 -5
  94. package/apps/server/src/run-preparation.ts +24 -24
  95. package/apps/server/src/run-transfer.ts +39 -39
  96. package/apps/server/src/server.ts +48 -48
  97. package/apps/server/src/settings.ts +1 -1
  98. package/apps/server/src/startup.ts +3 -3
  99. package/apps/server/src/title-compactor.ts +9 -9
  100. package/apps/server/src/title-settings.ts +3 -3
  101. package/apps/server/src/web-bundles.ts +2 -2
  102. package/apps/server/src/web-stylesheet.ts +2 -2
  103. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-BfNSGxjB.js} +1 -1
  104. package/apps/web/dist/assets/main-D6bsKcIK.js +11 -0
  105. package/apps/web/dist/assets/mermaid-HWGCJPDP-DROEqEeg.js +608 -0
  106. package/apps/web/dist/assets/runPanel-Dumuuqry.js +21 -0
  107. package/apps/web/dist/help/guide-access.html +5 -5
  108. package/apps/web/dist/help/guide-access.md +2 -2
  109. package/apps/web/dist/help/guide-clients.html +53 -54
  110. package/apps/web/dist/help/guide-clients.md +50 -51
  111. package/apps/web/dist/help/guide-distributed.html +12 -7
  112. package/apps/web/dist/help/guide-distributed.md +9 -4
  113. package/apps/web/dist/help/guide-functions.html +3 -3
  114. package/apps/web/dist/help/guide-getting-started.html +24 -15
  115. package/apps/web/dist/help/guide-getting-started.md +22 -12
  116. package/apps/web/dist/help/guide-ideas.html +3 -3
  117. package/apps/web/dist/help/guide-plugins.html +5 -4
  118. package/apps/web/dist/help/guide-plugins.md +2 -1
  119. package/apps/web/dist/help/guide-programs.html +3 -3
  120. package/apps/web/dist/help/guide-runtime.html +6 -6
  121. package/apps/web/dist/help/guide-runtime.md +3 -3
  122. package/apps/web/dist/help/guide.html +3 -3
  123. package/apps/web/dist/help/index.html +196 -144
  124. package/apps/web/dist/help/mini-app.css +6 -0
  125. package/apps/web/dist/help/mini-app.js +14 -14
  126. package/apps/web/dist/host-web.json +90 -90
  127. package/apps/web/dist/index.html +3 -3
  128. package/apps/web/dist/run-panel.html +3 -3
  129. package/apps/web/package.json +1 -1
  130. package/apps/web/src/AccessContext.tsx +15 -15
  131. package/apps/web/src/App.tsx +13 -13
  132. package/apps/web/src/DiffCode.tsx +2 -2
  133. package/apps/web/src/HelpDialog.tsx +3 -3
  134. package/apps/web/src/Overview.tsx +13 -13
  135. package/apps/web/src/PluginActivation.ts +1 -1
  136. package/apps/web/src/PluginChat.tsx +15 -15
  137. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  138. package/apps/web/src/PluginRegistry.tsx +44 -44
  139. package/apps/web/src/RunPreparationChat.tsx +11 -11
  140. package/apps/web/src/RunStore.ts +1 -1
  141. package/apps/web/src/SessionList.tsx +14 -14
  142. package/apps/web/src/SettingsModal.tsx +112 -112
  143. package/apps/web/src/StartOptions.tsx +11 -11
  144. package/apps/web/src/StartSelection.tsx +11 -11
  145. package/apps/web/src/StartTiles.tsx +8 -8
  146. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  147. package/apps/web/src/ThemeSettings.tsx +8 -8
  148. package/apps/web/src/TitleModelSettings.tsx +13 -13
  149. package/apps/web/src/WorkspacePanel.tsx +9 -9
  150. package/apps/web/src/access-session.ts +4 -4
  151. package/apps/web/src/access-token.ts +5 -5
  152. package/apps/web/src/actor-conversation.ts +3 -3
  153. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  154. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  155. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  156. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  157. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  158. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  159. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  160. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  161. package/apps/web/src/api.ts +7 -7
  162. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  163. package/apps/web/src/chat/chat-target.ts +3 -3
  164. package/apps/web/src/chat/requests.ts +2 -2
  165. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  166. package/apps/web/src/chat-view-settings.tsx +5 -6
  167. package/apps/web/src/diff-view.css +1 -1
  168. package/apps/web/src/highlighting.css +1 -1
  169. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  170. package/apps/web/src/lib/labels.ts +6 -6
  171. package/apps/web/src/main.tsx +4 -4
  172. package/apps/web/src/offered-machines.ts +2 -2
  173. package/apps/web/src/page-opener.tsx +1 -1
  174. package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
  175. package/apps/web/src/panel/LoginForm.tsx +6 -6
  176. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  177. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  178. package/apps/web/src/panel/PanelPage.tsx +1 -1
  179. package/apps/web/src/panel/RunLine.tsx +4 -4
  180. package/apps/web/src/panel/RunsPage.tsx +15 -15
  181. package/apps/web/src/panel/StartPage.tsx +26 -26
  182. package/apps/web/src/panel/connection-state.ts +9 -9
  183. package/apps/web/src/panel/contract.ts +28 -28
  184. package/apps/web/src/panel.tsx +1 -1
  185. package/apps/web/src/plugin-bootstrap.ts +5 -5
  186. package/apps/web/src/product/ModelControl.tsx +3 -3
  187. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  188. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  189. package/apps/web/src/product/model-settings.ts +2 -2
  190. package/apps/web/src/rpc/client.ts +16 -16
  191. package/apps/web/src/rpc.ts +1 -1
  192. package/apps/web/src/run-overview.ts +1 -1
  193. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  194. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  195. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  196. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  197. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  198. package/apps/web/src/run-panel/clipboard.ts +3 -3
  199. package/apps/web/src/run-panel/host-contract.ts +5 -5
  200. package/apps/web/src/run-panel/host.ts +15 -15
  201. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  202. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  203. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  204. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  205. package/apps/web/src/run-panel.tsx +4 -4
  206. package/apps/web/src/run-preparation.ts +2 -2
  207. package/apps/web/src/run-view.ts +3 -3
  208. package/apps/web/src/settings-contributions.ts +32 -32
  209. package/apps/web/src/theme.ts +9 -9
  210. package/apps/web/src/title-model-settings.ts +6 -6
  211. package/apps/web/src/ui/ListDetail.tsx +9 -9
  212. package/apps/web/src/ui/dialog.tsx +2 -2
  213. package/apps/web/src/ui/modal-controller.ts +3 -3
  214. package/apps/web/src/ui/modal.tsx +2 -2
  215. package/apps/web/src/ui/popover.tsx +1 -1
  216. package/apps/web/src/ui/relative-time.ts +8 -8
  217. package/apps/web/src/ui/startup-notice.tsx +2 -2
  218. package/apps/web/src/ui/state-icon.tsx +1 -1
  219. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  220. package/apps/web/src/ui/stop-button.tsx +2 -2
  221. package/bundles/ragents.activity/ragents-bundle.json +2 -2
  222. package/bundles/ragents.activity/web/classes.json +1 -1
  223. package/bundles/ragents.activity/web/index.js +1 -1
  224. package/bundles/ragents.activity/web/index.js.map +2 -2
  225. package/bundles/ragents.actor-programs/ragents-bundle.json +2 -2
  226. package/bundles/ragents.actor-programs/server/index.js +225 -225
  227. package/bundles/ragents.actor-programs/server/index.js.map +2 -2
  228. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  229. package/bundles/ragents.actor-programs/web/index.js +1 -1
  230. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  231. package/bundles/ragents.ask/ragents-bundle.json +2 -2
  232. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  233. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  234. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  235. package/bundles/ragents.ask/server/index.js +23 -23
  236. package/bundles/ragents.ask/server/index.js.map +2 -2
  237. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  238. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  239. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
  240. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
  241. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  242. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  243. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  245. package/bundles/ragents.ask/web/classes.json +1 -1
  246. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  247. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  248. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  249. package/bundles/ragents.ask/web/index.js +1 -1
  250. package/bundles/ragents.ask/web/index.js.map +2 -2
  251. package/bundles/ragents.browser/executor/index.mjs +35 -35
  252. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  253. package/bundles/ragents.browser/ragents-bundle.json +2 -2
  254. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  255. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  256. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  257. package/bundles/ragents.browser/server/index.js +31 -31
  258. package/bundles/ragents.browser/server/index.js.map +2 -2
  259. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  260. package/bundles/ragents.documents/prompt.hbs +1 -1
  261. package/bundles/ragents.documents/ragents-bundle.json +2 -2
  262. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  263. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  264. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  265. package/bundles/ragents.documents/server/index.js +26 -26
  266. package/bundles/ragents.documents/server/index.js.map +2 -2
  267. package/bundles/ragents.documents/web/classes.json +1 -1
  268. package/bundles/ragents.documents/web/index.js +1 -1
  269. package/bundles/ragents.documents/web/index.js.map +3 -3
  270. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  271. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  272. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +2 -2
  273. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  274. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  275. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  276. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  277. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  278. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +2 -2
  280. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  281. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  282. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  283. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  284. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  285. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  286. package/bundles/ragents.lsp-typescript/ragents-bundle.json +2 -2
  287. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  288. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  289. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  290. package/bundles/ragents.model-relay/ragents-bundle.json +7 -3
  291. package/bundles/ragents.model-relay/server/index.js +25 -21
  292. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  293. package/bundles/ragents.orchestration/ragents-bundle.json +2 -2
  294. package/bundles/ragents.orchestration/server/index.js +28 -28
  295. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  296. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  297. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  300. package/bundles/ragents.orchestration/web/classes.json +1 -1
  301. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  302. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  303. package/bundles/ragents.orchestration/web/index.js +8 -8
  304. package/bundles/ragents.orchestration/web/index.js.map +2 -2
  305. package/bundles/ragents.overseer/ragents-bundle.json +2 -2
  306. package/bundles/ragents.overseer/server/index.js +98 -98
  307. package/bundles/ragents.overseer/server/index.js.map +2 -2
  308. package/bundles/ragents.overseer/web/classes.json +1 -1
  309. package/bundles/ragents.overseer/web/index.js +1 -1
  310. package/bundles/ragents.overseer/web/index.js.map +2 -2
  311. package/bundles/ragents.processes/ragents-bundle.json +2 -2
  312. package/bundles/ragents.processes/server/index.js +11 -11
  313. package/bundles/ragents.processes/server/index.js.map +2 -2
  314. package/bundles/ragents.processes/web/classes.json +1 -1
  315. package/bundles/ragents.processes/web/index.js +3 -3
  316. package/bundles/ragents.processes/web/index.js.map +2 -2
  317. package/bundles/ragents.product/ragents-bundle.json +2 -2
  318. package/bundles/ragents.product/server/index.js +12 -13
  319. package/bundles/ragents.product/server/index.js.map +2 -2
  320. package/bundles/ragents.product/web/classes.json +1 -1
  321. package/bundles/ragents.product/web/index.js +1 -1
  322. package/bundles/ragents.product/web/index.js.map +2 -2
  323. package/bundles/ragents.profile-distribution/ragents-bundle.json +2 -2
  324. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  325. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  326. package/bundles/ragents.reference/ragents-bundle.json +2 -2
  327. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  328. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  335. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  336. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  340. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  341. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  347. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  348. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  349. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  350. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  352. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  353. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  360. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  361. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  362. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  363. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  365. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  366. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  367. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  368. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  392. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  393. package/bundles/ragents.reference/web/classes.json +1 -1
  394. package/bundles/ragents.reference/web/index.js +1 -1
  395. package/bundles/ragents.reference/web/index.js.map +2 -2
  396. package/bundles/ragents.todo/ragents-bundle.json +2 -2
  397. package/bundles/ragents.todo/server/index.js +5 -5
  398. package/bundles/ragents.todo/server/index.js.map +2 -2
  399. package/bundles/ragents.todo/web/classes.json +1 -1
  400. package/bundles/ragents.todo/web/index.js +1 -1
  401. package/bundles/ragents.todo/web/index.js.map +2 -2
  402. package/bundles/ragents.transcript/ragents-bundle.json +2 -2
  403. package/bundles/ragents.transcript/server/index.js +11 -11
  404. package/bundles/ragents.transcript/server/index.js.map +2 -2
  405. package/bundles/ragents.watch/ragents-bundle.json +2 -2
  406. package/bundles/ragents.watch/server/index.js +48 -48
  407. package/bundles/ragents.watch/server/index.js.map +2 -2
  408. package/bundles/ragents.workspace/ragents-bundle.json +2 -2
  409. package/bundles/ragents.workspace/server/index.js +81 -81
  410. package/bundles/ragents.workspace/server/index.js.map +2 -2
  411. package/bundles/ragents.workspace/web/classes.json +1 -1
  412. package/bundles/ragents.workspace/web/index.js +1 -1
  413. package/bundles/ragents.workspace/web/index.js.map +2 -2
  414. package/package.json +4 -4
  415. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  416. package/packages/agent/dist/index.d.ts +1 -1
  417. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  418. package/packages/agent/src/core/compaction/utils.ts +1 -1
  419. package/packages/agent/src/core/model-runtime.ts +45 -5
  420. package/packages/agent/src/index.ts +1 -1
  421. package/packages/agent/src/loop/agent-loop.ts +2 -2
  422. package/packages/ai/dist/models.d.ts +1 -0
  423. package/packages/ai/dist/models.generated.d.ts +4544 -983
  424. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  425. package/packages/ai/src/api/ai-sdk.ts +33 -7
  426. package/packages/ai/src/api-registry.ts +1 -1
  427. package/packages/ai/src/index.ts +2 -2
  428. package/packages/ai/src/models.generated.ts +1 -1
  429. package/packages/ai/src/models.ts +1 -1
  430. package/packages/ai/src/providers/openrouter.models.ts +3723 -550
  431. package/packages/ragents/src/access.ts +12 -12
  432. package/packages/ragents/src/agents/actor-input.ts +33 -33
  433. package/packages/ragents/src/agents/catalog.ts +1 -1
  434. package/packages/ragents/src/agents/delivery.ts +17 -17
  435. package/packages/ragents/src/agents/plugins.ts +1 -1
  436. package/packages/ragents/src/agents/scheduler.ts +7 -7
  437. package/packages/ragents/src/agents/schemas.ts +1 -1
  438. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  439. package/packages/ragents/src/agents/tools.ts +20 -20
  440. package/packages/ragents/src/agents/toolset.ts +5 -5
  441. package/packages/ragents/src/agents/workspaces.ts +1 -1
  442. package/packages/ragents/src/domain/events.ts +1 -1
  443. package/packages/ragents/src/domain/model.ts +5 -5
  444. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  445. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  446. package/packages/ragents/src/drivers/agent.ts +2 -2
  447. package/packages/ragents/src/drivers/attachments.ts +4 -4
  448. package/packages/ragents/src/http/contracts.ts +14 -14
  449. package/packages/ragents/src/http/methods.ts +6 -6
  450. package/packages/ragents/src/plugin-host.ts +119 -119
  451. package/packages/ragents/src/plugin-types.ts +16 -16
  452. package/packages/ragents/src/rpc/contract.ts +5 -5
  453. package/packages/ragents/src/rpc/contribution.ts +2 -2
  454. package/packages/ragents/src/rpc/peer.ts +11 -11
  455. package/packages/ragents/src/rpc/protocol.ts +2 -2
  456. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  457. package/packages/ragents/src/runtime/journal.ts +10 -10
  458. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  459. package/packages/ragents/src/runtime/stop.ts +2 -2
  460. package/packages/ragents/src/script/mediators.ts +35 -35
  461. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  462. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  463. package/packages/ragents/src/typescript/compiler.ts +7 -7
  464. package/packages/ragents/src/typescript/snippet.ts +5 -5
  465. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  466. package/packages/workspace-executor/src/commands.ts +18 -18
  467. package/packages/workspace-executor/src/context.ts +15 -15
  468. package/packages/workspace-executor/src/contributions.ts +35 -35
  469. package/packages/workspace-executor/src/errors.ts +1 -1
  470. package/packages/workspace-executor/src/executor.ts +15 -15
  471. package/packages/workspace-executor/src/files.ts +30 -30
  472. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  473. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  474. package/packages/workspace-executor/src/language-server/host.ts +35 -35
  475. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  476. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  477. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  478. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  479. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +2 -2
  480. package/packages/workspace-executor/src/managed-process.ts +12 -12
  481. package/packages/workspace-executor/src/module.ts +8 -8
  482. package/packages/workspace-executor/src/modules.ts +3 -3
  483. package/packages/workspace-executor/src/paths.ts +11 -11
  484. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  485. package/packages/workspace-executor/src/processes/module.ts +3 -3
  486. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  487. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  488. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  489. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  490. package/packages/workspace-executor/src/run-folders.ts +3 -3
  491. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  492. package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
  493. package/packages/workspace-executor/src/session-ident.ts +2 -2
  494. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  495. package/packages/workspace-executor/src/tools.ts +5 -5
  496. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  497. package/plugins/ragents.activity/web/activity.ts +2 -2
  498. package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
  499. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  500. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  501. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  502. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  503. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  504. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  505. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  506. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  507. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  508. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  509. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  510. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  511. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  512. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  513. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  514. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  515. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  516. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  517. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  518. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  519. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  520. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  521. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  522. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  523. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  524. package/plugins/ragents.ask/ask-payload.ts +1 -1
  525. package/plugins/ragents.ask/contract.ts +5 -5
  526. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  527. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  528. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  529. package/plugins/ragents.ask/server/contract.ts +5 -5
  530. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  531. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  532. package/plugins/ragents.ask/web/index.tsx +2 -2
  533. package/plugins/ragents.browser/executor/contract.ts +6 -6
  534. package/plugins/ragents.browser/executor/index.ts +1 -1
  535. package/plugins/ragents.browser/executor/module.ts +6 -6
  536. package/plugins/ragents.browser/executor/pages.ts +32 -32
  537. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  538. package/plugins/ragents.browser/provision.ts +7 -7
  539. package/plugins/ragents.browser/server/browser.ts +14 -14
  540. package/plugins/ragents.browser/server/contract.ts +1 -1
  541. package/plugins/ragents.browser/server/index.ts +1 -1
  542. package/plugins/ragents.browser/server/tools.ts +14 -14
  543. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  544. package/plugins/ragents.documents/contract.ts +2 -2
  545. package/plugins/ragents.documents/prompt.hbs +1 -1
  546. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  547. package/plugins/ragents.documents/server/files-route.ts +6 -6
  548. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  549. package/plugins/ragents.documents/server/store.ts +1 -1
  550. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  551. package/plugins/ragents.documents/web/index.tsx +11 -11
  552. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  553. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  554. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  555. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  556. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  557. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  558. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  559. package/plugins/ragents.model-relay/server/config.ts +6 -2
  560. package/plugins/ragents.model-relay/server/index.ts +2 -2
  561. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  562. package/plugins/ragents.orchestration/contract.ts +8 -8
  563. package/plugins/ragents.orchestration/server/index.ts +4 -4
  564. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  565. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  566. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  567. package/plugins/ragents.orchestration/web/ActorChat.tsx +2 -2
  568. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -4
  569. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  570. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  571. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  572. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  573. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  574. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  575. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  576. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  577. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  578. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  579. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  580. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  581. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  582. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  583. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  584. package/plugins/ragents.orchestration/web/format.ts +1 -1
  585. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  586. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  587. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  588. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
  589. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  590. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  591. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  592. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  593. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  594. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  595. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
  596. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  597. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  598. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  599. package/plugins/ragents.overseer/contract.ts +20 -20
  600. package/plugins/ragents.overseer/server/api.ts +6 -6
  601. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  602. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  603. package/plugins/ragents.overseer/server/index.ts +24 -24
  604. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  605. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  606. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  607. package/plugins/ragents.overseer/server/settings.ts +6 -6
  608. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  609. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  610. package/plugins/ragents.overseer/web/index.tsx +20 -20
  611. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  612. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  613. package/plugins/ragents.processes/contract.ts +5 -5
  614. package/plugins/ragents.processes/server/methods.ts +4 -4
  615. package/plugins/ragents.processes/server/observer.ts +8 -8
  616. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  617. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  618. package/plugins/ragents.processes/web/processes.ts +10 -10
  619. package/plugins/ragents.product/server/config.ts +1 -1
  620. package/plugins/ragents.product/server/index.ts +4 -4
  621. package/plugins/ragents.product/server/runtime.ts +9 -10
  622. package/plugins/ragents.product/web/index.tsx +1 -1
  623. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  624. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  625. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  626. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  627. package/plugins/ragents.reference/examples.ts +27 -27
  628. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  629. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  630. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  631. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  632. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  636. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  637. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  638. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  639. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  640. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  641. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  642. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  643. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  644. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  645. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  648. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  649. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  650. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  651. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  652. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  653. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  654. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  655. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  656. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  657. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  661. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  662. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  663. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  664. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  665. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  666. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  667. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  668. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  669. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  670. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  671. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  672. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  693. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  694. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  695. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  696. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  697. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  698. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  699. package/plugins/ragents.watch/server/condition.ts +4 -4
  700. package/plugins/ragents.watch/server/functions.ts +27 -27
  701. package/plugins/ragents.watch/server/observation.ts +2 -2
  702. package/plugins/ragents.watch/server/service.ts +14 -14
  703. package/plugins/ragents.workspace/client/transport.ts +1 -1
  704. package/plugins/ragents.workspace/client/workspace-client.ts +54 -54
  705. package/plugins/ragents.workspace/contract.ts +46 -46
  706. package/plugins/ragents.workspace/server/binding.ts +20 -20
  707. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  708. package/plugins/ragents.workspace/server/clients.ts +42 -42
  709. package/plugins/ragents.workspace/server/config.ts +7 -7
  710. package/plugins/ragents.workspace/server/index.ts +3 -3
  711. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  712. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  713. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  714. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  715. package/plugins/ragents.workspace/web/index.tsx +1 -1
  716. package/ragents.config.core.ts +1 -1
  717. package/ragents.config.developer.ts +3 -3
  718. package/ragents.config.showcase.ts +2 -2
  719. package/scripts/agent/agent-cli.ts +96 -96
  720. package/scripts/agent/journal.ts +5 -5
  721. package/scripts/agent/turn-control.ts +4 -4
  722. package/scripts/package/build-package.ts +29 -29
  723. package/scripts/package/host-links.mjs +3 -3
  724. package/scripts/package/publish-package.ts +29 -29
  725. package/scripts/package/ragents.mjs +19 -19
  726. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  727. package/scripts/plugin/plugin-cli.ts +14 -14
  728. package/scripts/provision/run-provision.ts +14 -15
  729. package/scripts/remote/connect.ts +46 -46
  730. package/scripts/remote/start.ts +18 -18
  731. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  732. package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
  733. package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
  734. package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
  735. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  736. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  737. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  738. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  739. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  740. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  741. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  742. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  743. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["ragents-host-read:read", "ragents-host-value:typebox#Type", "ragents-host-value:@ragents/engine/src/http/contracts#openJson", "ragents-host-value:@ragents/engine/src/rpc/contract#defineChannel", "ragents-host-value:@ragents/engine/src/rpc/contract#defineOperation", "../../../plugins/ragents.workspace/contract.ts", "ragents-host-value:@ragents/web/ui#Alert", "ragents-host-value:@ragents/web/ui#Button", "ragents-host-value:@ragents/web/ui#Empty", "ragents-host-value:@ragents/web/ui#EmptyDescription", "ragents-host-value:@ragents/web/ui#EmptyHeader", "ragents-host-value:@ragents/web/ui#EmptyMedia", "ragents-host-value:@ragents/web/ui#EmptyTitle", "ragents-host-value:@ragents/web/ui#Input", "ragents-host-value:@ragents/web/ui#Label", "ragents-host-value:@ragents/web/ui#Select", "ragents-host-value:@ragents/web/ui#SelectContent", "ragents-host-value:@ragents/web/ui#SelectItem", "ragents-host-value:@ragents/web/ui#SelectTrigger", "ragents-host-value:@ragents/web/ui#SelectValue", "ragents-host-value:@ragents/web/ui#Toggle", "ragents-host-value:react#createContext", "ragents-host-value:react#createElement", "ragents-host-value:react#forwardRef", "ragents-host-value:react#useContext", "ragents-host-value:react#useEffect", "ragents-host-value:react#useId", "ragents-host-value:react#useMemo", "ragents-host-value:react#useRef", "ragents-host-value:react#useState", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toKebabCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toLucideIconData.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toCamelCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toPascalCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/mergeClasses.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/defaultAttributes.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/buildLucideIconNode.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/buildLucideIconForReact.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/hasA11yProp.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/context.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/Icon.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/createLucideIcon.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/braces.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/chevron-right.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/eye-off.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/eye.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/file-archive.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/file-code-corner.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/file-cog.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/file-image.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/file-terminal.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/file-text.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/file.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/folder-open.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/folder.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/palette.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/refresh-cw.ts", "ragents-host-value:@ragents/web/PluginRegistry#workspaceAccessible", "ragents-host-value:@ragents/web/rpc#rpc", "../../../plugins/ragents.workspace/web/api.ts", "../../../plugins/ragents.workspace/web/file-icons.tsx", "ragents-host-value:@ragents/web/SourceCode#SourceCode", "ragents-host-value:react/jsx-runtime#Fragment", "ragents-host-value:react/jsx-runtime#jsx", "ragents-host-value:react/jsx-runtime#jsxs", "../../../plugins/ragents.workspace/web/FileBrowser.tsx", "ragents-host-value:@ragents/web/Toolbar#ToolbarCopy", "ragents-host-value:@ragents/web/Toolbar#ToolbarItem", "ragents-host-value:@ragents/web/Toolbar#ToolbarLabel", "ragents-host-value:@ragents/web/Toolbar#ToolbarText", "../../../plugins/ragents.workspace/web/WorkspaceBinding.tsx", "../../../plugins/ragents.workspace/web/index.tsx"],
4
- "sourcesContent": ["export const read = (specifier, name) => {\n const module = globalThis[\"__ragentsHostModules\"]?.[specifier];\n if (module === undefined) throw new Error(`Der Host stellt ${specifier} nicht bereit`);\n if (!(name in module)) throw new Error(`Der Host stellt ${name} aus ${specifier} nicht bereit; das Bundle ist gegen einen neueren Host gebaut`);\n return module[name];\n};", "import { read } from \"ragents-host-read:read\";\nexport default read(\"typebox\", \"Type\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/http/contracts\", \"openJson\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/rpc/contract\", \"defineChannel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/rpc/contract\", \"defineOperation\");\n", "import { Type } from \"typebox\";\nimport { openJson } from \"@ragents/engine/src/http/contracts\";\nimport { defineChannel, defineOperation } from \"@ragents/engine/src/rpc/contract\";\n\nexport const WORKSPACE_PLUGIN_ID = \"ragents.workspace\";\n\nexport const BROWSE_ROOTS = [\"workspace\", \"files\"] as const;\nexport type BrowseRoot = typeof BROWSE_ROOTS[number];\n\nexport interface BrowseEntry {\n name: string;\n kind: \"directory\" | \"file\";\n size: number;\n modifiedAt: string;\n}\n\nexport interface BrowseListing {\n root: BrowseRoot;\n /** Wo die Wurzel liegt; bei einem Arbeitsplatz mit dessen Label. */\n location: string;\n path: string;\n entries: BrowseEntry[];\n truncated: boolean;\n}\n\nexport type BrowsePreview =\n | { root: BrowseRoot; path: string; size: number; previewable: true; content: string }\n | { root: BrowseRoot; path: string; size: number; previewable: false; reason: string };\n\nexport const WORKSPACE_BINDING_OPTION_ID = \"ragents.workspace.binding\";\n\nexport const WORKSPACE_METADATA_ID = \"ragents.workspace\";\n\n/** Auf welchem Rechner der Arbeitsbereich eines Runs liegt: dem Server oder einem Arbeitsplatz, dessen Label die Bindung festh\u00E4lt. */\nexport type WorkspaceMachine = \"server\" | { client: string; label: string };\n\n/** Ein vorhandener Ordner, den der Run weder anlegt noch l\u00F6scht. */\nexport type ExistingWorkspaceFolder = {\n path: string;\n};\n\n/** Der neue Ordner je Run auf einem Arbeitsplatz; seinen Pfad dort h\u00E4lt die Bindung ab dem W\u00E4hlen fest. */\nexport type FreshWorkstationFolder = {\n path: string;\n fresh: true;\n};\n\n/** Welcher Ordner: ein neuer je Run oder ein vorhandener; `fresh` auf dem Server legt der Host je Run in seiner Ablage an. */\nexport type WorkspaceFolder = \"fresh\" | ExistingWorkspaceFolder | FreshWorkstationFolder;\n\n/** Wo und in welchem Ordner ein Run arbeitet; wird beim Start als Startoption ins Journal eingefroren. */\nexport type WorkspaceBinding = {\n machine: WorkspaceMachine;\n folder: WorkspaceFolder;\n};\n\nexport const freshServerBinding = (): WorkspaceBinding => ({ machine: \"server\", folder: \"fresh\" });\n\nexport const WORKSPACE_CLIENT_ID_PATTERN = /^[A-Za-z0-9_-]{8,64}$/;\n\n/** Was ein Arbeitsplatz bei der Anmeldung \u00FCber sich sagt. */\nexport interface WorkspaceClientDescription {\n label: string;\n hostname: string;\n platform: string;\n folders: string[];\n /** Wo der Arbeitsplatz die neuen Ordner je Run anlegt, je Run ein Unterordner mit dessen Kennung. */\n runsDirectory: string;\n /** Ob die Bash des Arbeitsplatzes rg findet; der Prompt richtet die Suche danach. */\n ripgrep: boolean;\n}\n\nexport interface WorkspaceClientInfo extends WorkspaceClientDescription {\n id: string;\n}\n\n/** Wie der neue Ordner je Run auf jedem Rechner hei\u00DFt: der leere Ordner oder der Beitrag eines Plugins; null, wo es keinen gibt. */\nexport interface FreshWorkspaceLabels {\n server: string;\n client: string | null;\n}\n\nexport interface WorkspaceBindingPresentation {\n kind: \"workspace-binding\";\n clients: WorkspaceClientInfo[];\n fresh: FreshWorkspaceLabels;\n /** Ob ein vorhandener Ordner des Serverrechners gebunden werden darf. */\n serverFolders: boolean;\n}\n\nexport interface WorkspaceSessionMetadata {\n binding: WorkspaceBinding;\n summary: string;\n}\n\nconst clientId = Type.String({ pattern: \"^[A-Za-z0-9_-]{8,64}$\", description: \"Stabile Kennung des Arbeitsplatzes\" });\n\nconst executorVersion = Type.String({ minLength: 1, maxLength: 64, description: \"Stand des Executors, den der Arbeitsplatz mitbringt\" });\n\n/** Die Kennung eines Plugins; ein Arbeitsplatz sucht dessen Bundle unter genau diesem Namen, ein Pfad kann darin nicht stecken. */\nexport const PLUGIN_ID_PATTERN = /^[a-z0-9]+(?:[.-][a-z0-9]+)*$/;\n\nconst executorContributions = Type.Array(Type.Object({\n plugin: Type.String({ pattern: PLUGIN_ID_PATTERN.source, maxLength: 128, description: \"Kennung des Plugins\" }),\n stand: Type.String({ pattern: \"^[0-9a-f]{64}$\", description: \"SHA-256 der Datei des Beitrags\" }),\n}, { additionalProperties: false }), { maxItems: 64, description: \"Die Beitr\u00E4ge der Plugins zum Executor, in der Reihenfolge der Pluginliste des Servers\" });\n\nconst clientDescription = {\n label: Type.String({ minLength: 1, maxLength: 120 }),\n hostname: Type.String({ minLength: 1 }),\n platform: Type.String({ minLength: 1 }),\n folders: Type.Array(Type.String({ minLength: 1 }), { maxItems: 32 }),\n runsDirectory: Type.String({ minLength: 1, description: \"Absoluter Ordner, unter dem der Arbeitsplatz die neuen Ordner je Run anlegt\" }),\n ripgrep: Type.Boolean({ description: \"Ob die Bash des Arbeitsplatzes rg findet\" }),\n};\n\nexport const clientInfoSchema = Type.Object({\n id: Type.String(),\n ...clientDescription,\n}, { additionalProperties: false });\n\n/** Die Anmeldung, wie ein Arbeitsplatz mit dem Executor des Servers sie sendet. */\nexport const clientRegistrationSchema = Type.Object({\n id: clientId,\n ...clientDescription,\n executor: executorVersion,\n contributions: executorContributions,\n}, { additionalProperties: false });\n\n/** Ein Arbeitsplatz mit einem anderen Executor kennt die Form dieses Stands nicht; der Server lehnt ihn an seinem Stand ab, nicht an der Form. */\nconst otherExecutorRegistration = Type.Object({ label: clientDescription.label, executor: executorVersion }, {\n description: \"Anmeldung mit einem anderen Executor-Stand in beliebiger Form; der Server lehnt sie mit workspace-executor-version ab\",\n});\n\nconst absolutePath = Type.String({ minLength: 1, description: \"Absoluter Pfad im gebundenen Ordner\" });\n\n/** Keine Operation eines Moduls: gibt frei, was der Executor des Arbeitsplatzes f\u00FCr den Run h\u00E4lt. */\nexport const WORKSPACE_CLIENT_STOP_OPERATION = \"stop\";\n\n/** Die eine Operation, die der Server auf dem Arbeitsplatz ruft; Fortschritt ist der JSON-Wert der Operation, bei Bash { text }. */\nexport const workspaceClientContracts = {\n execute: defineOperation({\n id: \"ragents.workspace.client.execute\",\n description: \"Eine Operation des Executors auf dem Arbeitsplatz ausf\u00FChren, etwa ein Werkzeug, eine Dateiabfrage oder die Prozessanzeige; das Ergebnis ist ihr Wert, Fortschritt ihr JSON-Wert. stop gibt frei, was der Arbeitsplatz f\u00FCr den Run h\u00E4lt.\",\n implementedBy: \"client\",\n input: Type.Object({\n runId: Type.String({ minLength: 1, maxLength: 64, description: \"Kennung des Runs\" }),\n operation: Type.String({ minLength: 1, maxLength: 64, description: \"Name der Operation, etwa read, bash, roslyn_open, files.list oder stop\" }),\n toolCallId: Type.Optional(Type.String({ minLength: 1, maxLength: 200, description: \"Nur bei einem Werkzeugaufruf des Modells\" })),\n cwd: absolutePath,\n env: Type.Record(Type.String(), Type.String(), { description: \"Was der Server beitr\u00E4gt: Run-Marker und Git-Regeln der Sandbox\" }),\n input: Type.Unknown({ description: \"Die Eingabe der Operation\" }),\n }, { additionalProperties: false }),\n result: Type.Object({ value: Type.Unknown() }, { additionalProperties: false }),\n }),\n} as const;\n\nconst browseTarget = {\n runId: Type.String({ minLength: 1, maxLength: 64, description: \"Kennung des Runs\" }),\n root: Type.Union([Type.Literal(\"workspace\"), Type.Literal(\"files\")]),\n path: Type.String({ description: \"Pfad unterhalb der Wurzel; leer ist die Wurzel selbst\" }),\n};\n\n/** Die Anmeldung eines Arbeitsplatzes bindet die aufrufende Verbindung; \u00FCber sie ruft der Server zur\u00FCck. */\nexport const workspaceContracts = {\n browse: {\n list: defineOperation({\n id: \"ragents.workspace.browse.list\",\n description: \"Ein Verzeichnis im Arbeitsverzeichnis oder in der Dateiablage eines Runs auflisten.\",\n rights: [\"runs.read\", \"runs.inspect\"],\n input: Type.Object(browseTarget, { additionalProperties: false }),\n result: openJson<BrowseListing>(\"BrowseListing\"),\n }),\n preview: defineOperation({\n id: \"ragents.workspace.browse.preview\",\n description: \"Eine Datei als Text vorschauen; zu gro\u00DFe und bin\u00E4re Dateien nennen stattdessen den Grund.\",\n rights: [\"runs.read\", \"runs.inspect\"],\n input: Type.Object(browseTarget, { additionalProperties: false }),\n result: openJson<BrowsePreview>(\"BrowsePreview\"),\n }),\n },\n channels: {\n browse: defineChannel({\n id: \"ragents.workspace.browse\",\n description: \"Meldet jede \u00C4nderung unterhalb der beobachteten Wurzel eines Runs.\",\n rights: [\"runs.read\", \"runs.inspect\"],\n params: Type.Object({ runId: browseTarget.runId, root: browseTarget.root }, { additionalProperties: false }),\n message: Type.Object({ changed: Type.Literal(true) }, { additionalProperties: false }),\n }),\n },\n clients: {\n list: defineOperation({\n id: \"ragents.workspace.clients.list\",\n description: \"Die angemeldeten Arbeitspl\u00E4tze des Aufrufers; fremde erscheinen auch mit runs.read.all nicht.\",\n rights: [\"runs.read\"],\n input: Type.Object({}, { additionalProperties: false }),\n result: Type.Array(clientInfoSchema),\n }),\n contributions: defineOperation({\n id: \"ragents.workspace.clients.contributions\",\n description: \"Die Beitr\u00E4ge der Plugins zum Executor, die ein Arbeitsplatz vor der Anmeldung l\u00E4dt und mit ihr zur\u00FCckmeldet. Ein Arbeitsplatz mit anderem Executor-Stand scheitert an seinem Stand; weitere Felder z\u00E4hlen nicht.\",\n rights: [\"runs.write\"],\n input: Type.Object({ label: clientDescription.label, executor: executorVersion }),\n result: executorContributions,\n }),\n register: defineOperation({\n id: \"ragents.workspace.clients.register\",\n description: \"Einen Arbeitsplatz anmelden oder seine Ordner erneuern; die Verbindung dieser Anfrage wird sein R\u00FCckweg und braucht einen Ereignisstrom. Ein Arbeitsplatz mit anderem Executor-Stand scheitert an seinem Stand, bevor die \u00FCbrige Form z\u00E4hlt.\",\n rights: [\"runs.write\"],\n input: Type.Union([clientRegistrationSchema, otherExecutorRegistration]),\n result: clientInfoSchema,\n }),\n unregister: defineOperation({\n id: \"ragents.workspace.clients.unregister\",\n description: \"Einen eigenen Arbeitsplatz abmelden; offene Auftr\u00E4ge scheitern.\",\n rights: [\"runs.write\"],\n input: Type.Object({ id: clientId }, { additionalProperties: false }),\n result: Type.Null(),\n }),\n },\n} as const;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null;\n\nconst hasExactly = (value: Record<string, unknown>, keys: readonly string[]): boolean =>\n Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key));\n\nconst isMachine = (value: unknown): value is WorkspaceMachine =>\n value === \"server\" || (isRecord(value) && hasExactly(value, [\"client\", \"label\"])\n && typeof value.client === \"string\" && WORKSPACE_CLIENT_ID_PATTERN.test(value.client) && typeof value.label === \"string\");\n\nconst isFolder = (value: unknown): value is WorkspaceFolder => {\n if (value === \"fresh\") return true;\n if (!isRecord(value) || typeof value.path !== \"string\" || value.path.length === 0) return false;\n return hasExactly(value, [\"path\"]) || (hasExactly(value, [\"path\", \"fresh\"]) && value.fresh === true);\n};\n\n/** Einen neuen Ordner mit Pfad gibt es nur auf einem Arbeitsplatz; auf dem Server legt ihn der Host selbst an. */\nexport const isWorkspaceBinding = (value: unknown): value is WorkspaceBinding =>\n isRecord(value) && hasExactly(value, [\"machine\", \"folder\"]) && isMachine(value.machine) && isFolder(value.folder)\n && !(value.machine === \"server\" && typeof value.folder === \"object\" && \"fresh\" in value.folder);\n\nexport const isFreshFolder = (folder: WorkspaceFolder): folder is \"fresh\" | FreshWorkstationFolder =>\n folder === \"fresh\" || \"fresh\" in folder;\n\n/** Die Form vor der Trennung von Rechner und Ordner, `{ kind: \"fresh\" | \"path\" | \"client\" }`, eindeutig in der heutigen. */\nconst fromKind = (value: Record<string, unknown>): unknown => {\n switch (value.kind) {\n case \"fresh\": return hasExactly(value, [\"kind\"]) ? freshServerBinding() : undefined;\n case \"path\": return hasExactly(value, [\"kind\", \"path\"]) ? { machine: \"server\", folder: { path: value.path } } : undefined;\n case \"client\": return hasExactly(value, [\"kind\", \"client\", \"label\", \"path\"])\n ? { machine: { client: value.client, label: value.label }, folder: { path: value.path } }\n : undefined;\n default: return undefined;\n }\n};\n\n/** Die gespeicherte Bindung; \u00E4ltere, unver\u00E4nderliche Journale tragen die Form mit `kind`, und nur hier wird sie abgebildet. */\nexport const storedWorkspaceBinding = (value: unknown): WorkspaceBinding | undefined => {\n if (isWorkspaceBinding(value)) return value;\n const mapped = isRecord(value) && Object.hasOwn(value, \"kind\") ? fromKind(value) : undefined;\n return isWorkspaceBinding(mapped) ? mapped : undefined;\n};\n\nexport const FRESH_WORKSPACE_LABEL = \"Leerer Ordner je Run\";\n\n/** Wie der neue Ordner je Run auf dem Rechner der Bindung hei\u00DFt; ohne Beitrag dort der leere Ordner. */\nconst freshLabelOf = (binding: WorkspaceBinding, labels: FreshWorkspaceLabels): string =>\n (binding.machine === \"server\" ? labels.server : labels.client) ?? FRESH_WORKSPACE_LABEL;\n\nexport const workspaceBindingSummary = (binding: WorkspaceBinding, labels: FreshWorkspaceLabels): string => {\n const { machine, folder } = binding;\n const fresh = freshLabelOf(binding, labels);\n const where = folder === \"fresh\" ? fresh : \"fresh\" in folder ? `${folder.path} (${fresh})` : folder.path;\n return machine === \"server\" ? where : `${machine.label}: ${where}`;\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Alert\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Button\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Empty\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyDescription\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyHeader\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyMedia\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Input\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Label\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Select\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectTrigger\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectValue\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Toggle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"createContext\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"createElement\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"forwardRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useContext\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useId\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useMemo\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useState\");\n", "/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string?.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n", "import { toKebabCase } from './toKebabCase';\nimport type { LucideIconData, LucideIconNode } from '../build/types';\n\n/**\n * Converts legacy `(name, iconNode, aliases?)` icon arguments into icon data object format.\n */\nexport function toLucideIconData(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases: string[] = [],\n): LucideIconData {\n if (iconNode == null) {\n throw new Error('[lucide]: iconNode is required when icon name is used');\n }\n\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...(aliases.length > 0 ? { aliases } : {}),\n };\n}\n", "/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) => {\n let out = '';\n let upperNext = false;\n\n for (const ch of string) {\n if (ch === '-' || ch === '_' || ch <= ' ') {\n upperNext = out.length > 0;\n continue;\n }\n\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n\n upperNext = false;\n }\n\n return out as string;\n};\n", "import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n", "/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n", "const defaultAttributes = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n} as const;\n\nexport default defaultAttributes;\n", "import type { LucideBuildParams, LucideIconData, LucideIconNode, SVGProps } from './types';\nimport defaultAttributes from './defaultAttributes';\nimport { mergeClasses } from '../utils/mergeClasses';\n\nfunction isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Creates a Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconNode(icon: LucideIconData, params: LucideBuildParams = {}): LucideIconNode {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName: string) =>\n attributeNames[attributeName] ?? attributeName;\n\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes['width'];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes['height'];\n const aliasClassNames =\n icon.aliases\n ?.filter((alias: string): alias is string => typeof alias === 'string' && alias.trim() !== '')\n .map((alias: string) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...(icon.name ? [`lucide-${icon.name}`] : []), ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(' ').filter(Boolean) ?? [];\n const className =\n params.includeDefaultClasses === false\n ? mergeClasses(...classNamesFromClassName)\n : mergeClasses('lucide', ...iconClassNames, ...classNamesFromClassName);\n\n const calculatedStrokeWidth = params.absoluteStrokeWidth\n ? (Number(params.strokeWidth ?? defaultAttributes['stroke-width']) *\n Number(icon.size ?? icon.width ?? defaultAttributes['width'])) /\n Number(params.size ?? params.width ?? defaultAttributes['width'])\n : (params.strokeWidth ?? defaultAttributes['stroke-width']);\n\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {} as SVGProps),\n ...('color' in params &&\n params.color && {\n [getAttributeName('stroke')]: params.color,\n }),\n ...('size' in params &&\n isDefined(params.size) && {\n [getAttributeName('width')]: params.size,\n [getAttributeName('height')]: params.size,\n }),\n ...('width' in params &&\n isDefined(params.width) && {\n [getAttributeName('width')]: params.width,\n }),\n ...('height' in params &&\n isDefined(params.height) && {\n [getAttributeName('height')]: params.height,\n }),\n [getAttributeName('stroke-width')]: calculatedStrokeWidth,\n ...(className && {\n [getAttributeName('class')]: className,\n }),\n [getAttributeName('viewBox')]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...(params.hasA11yProp === false\n ? {\n [getAttributeName('aria-hidden')]: 'true',\n }\n : {}),\n ...('attributes' in params && params.attributes),\n };\n\n return [\n 'svg',\n attributes,\n icon.node.map((child): LucideIconNode => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke\n ? { [getAttributeName('vector-effect')]: 'non-scaling-stroke', ...attrs }\n : attrs;\n\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n }),\n ];\n}\n\nexport default buildLucideIconNode;\n", "import buildLucideIconNode from './buildLucideIconNode';\nimport type { LucideBuildParams, LucideIconData, LucideIconNode } from './types';\n\n/**\n * Creates a React-compatible Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconForReact(\n icon: LucideIconData,\n params: LucideBuildParams = {},\n): LucideIconNode {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: 'className',\n 'stroke-width': 'strokeWidth',\n 'stroke-linecap': 'strokeLinecap',\n 'stroke-linejoin': 'strokeLinejoin',\n 'vector-effect': 'vectorEffect',\n },\n });\n}\n\nexport default buildLucideIconForReact;\n", "/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: object) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n", "'use client';\n\nimport { createContext, createElement, type ReactNode, useContext, useMemo } from 'react';\nimport { LucideProps } from './types';\n\ntype LucideConfig = {\n size: number;\n color: string;\n strokeWidth: number;\n /**\n * @deprecated Use `nonScalingStroke` instead.\n */\n absoluteStrokeWidth: boolean;\n nonScalingStroke: boolean;\n className: string;\n};\n\nconst LucideContext = createContext<LucideProps>({});\n\ntype LucideProviderProps = {\n children: ReactNode;\n} & Partial<LucideConfig>;\n\nexport function LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n}: LucideProviderProps) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className],\n );\n\n return createElement(LucideContext.Provider, { value }, children);\n}\n\nexport const useLucideContext = () => useContext(LucideContext);\n", "'use client';\n\nimport { createElement, forwardRef } from 'react';\nimport { buildLucideIconForReact, hasA11yProp, mergeClasses } from '@lucide/shared';\nimport { LucideIconData, LucideIconNode, LucideProps } from './types';\nimport { useLucideContext } from './context';\n\ntype IconComponentProps = LucideProps &\n (\n | {\n iconNode: LucideIconNode[];\n icon?: never;\n }\n | {\n icon: LucideIconData;\n iconNode?: never;\n }\n );\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {boolean} props.nonScalingStroke - Whether to use non scaling strokes\n * @param {string} props.className - The class name of the icon\n * @param {LucideIconNode[]} props.children - The children of the icon\n * @param {LucideIconNode[]} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = '',\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24,\n },\n ...rest\n },\n ref,\n ) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = 'currentColor',\n className: contextClass = '',\n } = useLucideContext() ?? {};\n\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest,\n });\n\n return createElement(\n name,\n {\n ref,\n ...svgAttributes,\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n", "import { createElement, forwardRef } from 'react';\nimport { toLucideIconData, toPascalCase } from '@lucide/shared';\nimport { LucideIcon, LucideIconData, LucideIconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Creates a Lucide icon component from icon data.\n *\n * @param icon Icon data object.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(icon: LucideIconData): LucideIcon;\n\n/**\n * Creates a Lucide icon component from the legacy icon arguments.\n *\n * @param iconName Icon name.\n * @param iconNode Icon node.\n * @param aliases Optional icon aliases.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases?: string[],\n): LucideIcon;\n\nfunction createLucideIcon(\n iconDataOrName: LucideIconData | string,\n iconNode: LucideIconNode[] = [],\n aliases: string[] = [],\n): LucideIcon {\n const iconData =\n typeof iconDataOrName === 'string'\n ? toLucideIconData(iconDataOrName, iconNode, aliases)\n : iconDataOrName;\n\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props,\n }),\n );\n\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n\n return Component;\n}\n\nexport default createLucideIcon;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'braces',\n size: 24,\n node: [\n [\n 'path',\n { d: 'M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1', key: 'ezmyqa' },\n ],\n [\n 'path',\n {\n d: 'M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1',\n key: 'e1hn23',\n },\n ],\n ],\n aliases: ['curly-braces'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Braces\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDdhMiAyIDAgMCAwLTIgMnY1YTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxIDIgMnY1YzAgMS4xLjkgMiAyIDJoMSIgLz4KICA8cGF0aCBkPSJNMTYgMjFoMWEyIDIgMCAwIDAgMi0ydi01YzAtMS4xLjktMiAyLTJhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMC0yLTJoLTEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/braces\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Braces = createLucideIcon(__iconData);\n\nexport default Braces;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'chevron-right',\n size: 24,\n node: [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon(__iconData);\n\nexport default ChevronRight;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'eye-off',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n key: 'ct8e1f',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242', key: '151rxh' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n key: '13bj9a',\n },\n ],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name EyeOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5IiAvPgogIDxwYXRoIGQ9Ik0xNC4wODQgMTQuMTU4YTMgMyAwIDAgMS00LjI0Mi00LjI0MiIgLz4KICA8cGF0aCBkPSJNMTcuNDc5IDE3LjQ5OWExMC43NSAxMC43NSAwIDAgMS0xNS40MTctNS4xNTEgMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSA0LjQ0Ni01LjE0MyIgLz4KICA8cGF0aCBkPSJtMiAyIDIwIDIwIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst EyeOff = createLucideIcon(__iconData);\n\nexport default EyeOff;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'eye',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n key: '1nclc0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Eye\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMi4wNjIgMTIuMzQ4YTEgMSAwIDAgMSAwLS42OTYgMTAuNzUgMTAuNzUgMCAwIDEgMTkuODc2IDAgMSAxIDAgMCAxIDAgLjY5NiAxMC43NSAxMC43NSAwIDAgMS0xOS44NzYgMCIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Eye = createLucideIcon(__iconData);\n\nexport default Eye;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-archive',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M13.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v11.5',\n key: '4pqfef',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M8 12v-1', key: '1ej8lb' }],\n ['path', { d: 'M8 18v-2', key: 'qcmpov' }],\n ['path', { d: 'M8 7V6', key: '1nbb54' }],\n ['circle', { cx: '8', cy: '20', r: '2', key: 'ckkr5m' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileArchive\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMuNjU5IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTEuNSIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNOCAxMnYtMSIgLz4KICA8cGF0aCBkPSJNOCAxOHYtMiIgLz4KICA8cGF0aCBkPSJNOCA3VjYiIC8+CiAgPGNpcmNsZSBjeD0iOCIgY3k9IjIwIiByPSIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-archive\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileArchive = createLucideIcon(__iconData);\n\nexport default FileArchive;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-code-corner',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35',\n key: '1wthlu',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'm5 16-3 3 3 3', key: '331omg' }],\n ['path', { d: 'm9 22 3-3-3-3', key: 'lsp7cz' }],\n ],\n aliases: ['file-code-2'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileCodeCorner\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNCAxMi4xNVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMy4zNSIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJtNSAxNi0zIDMgMyAzIiAvPgogIDxwYXRoIGQ9Im05IDIyIDMtMy0zLTMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/file-code-corner\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileCodeCorner = createLucideIcon(__iconData);\n\nexport default FileCodeCorner;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-cog',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M15 8a1 1 0 0 1-1-1V2a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8z',\n key: '1ckgky',\n },\n ],\n ['path', { d: 'M20 8v12a2 2 0 0 1-2 2h-4.182', key: '1726p0' }],\n ['path', { d: 'm3.305 19.53.923-.382', key: 'ao1pio' }],\n ['path', { d: 'M4 10.592V4a2 2 0 0 1 2-2h8', key: '1foop0' }],\n ['path', { d: 'm4.228 16.852-.924-.383', key: '1fv9zy' }],\n ['path', { d: 'm5.852 15.228-.383-.923', key: '1a9hc2' }],\n ['path', { d: 'm5.852 20.772-.383.924', key: '1sh9ke' }],\n ['path', { d: 'm8.148 15.228.383-.923', key: '4yu6lf' }],\n ['path', { d: 'm8.53 21.696-.382-.924', key: '18b0s9' }],\n ['path', { d: 'm9.773 16.852.922-.383', key: 'ti6xop' }],\n ['path', { d: 'm9.773 19.148.922.383', key: 'rws47d' }],\n ['circle', { cx: '7', cy: '18', r: '3', key: 'lvkj7j' }],\n ],\n aliases: ['file-cog-2'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileCog\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgOGExIDEgMCAwIDEtMS0xVjJhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4eiIgLz4KICA8cGF0aCBkPSJNMjAgOHYxMmEyIDIgMCAwIDEtMiAyaC00LjE4MiIgLz4KICA8cGF0aCBkPSJtMy4zMDUgMTkuNTMuOTIzLS4zODIiIC8+CiAgPHBhdGggZD0iTTQgMTAuNTkyVjRhMiAyIDAgMCAxIDItMmg4IiAvPgogIDxwYXRoIGQ9Im00LjIyOCAxNi44NTItLjkyNC0uMzgzIiAvPgogIDxwYXRoIGQ9Im01Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiAvPgogIDxwYXRoIGQ9Im01Ljg1MiAyMC43NzItLjM4My45MjQiIC8+CiAgPHBhdGggZD0ibTguMTQ4IDE1LjIyOC4zODMtLjkyMyIgLz4KICA8cGF0aCBkPSJtOC41MyAyMS42OTYtLjM4Mi0uOTI0IiAvPgogIDxwYXRoIGQ9Im05Ljc3MyAxNi44NTIuOTIyLS4zODMiIC8+CiAgPHBhdGggZD0ibTkuNzczIDE5LjE0OC45MjIuMzgzIiAvPgogIDxjaXJjbGUgY3g9IjciIGN5PSIxOCIgcj0iMyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file-cog\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileCog = createLucideIcon(__iconData);\n\nexport default FileCog;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-image',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['circle', { cx: '10', cy: '12', r: '2', key: '737tya' }],\n ['path', { d: 'm20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22', key: 'wt3hpn' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileImage\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8Y2lyY2xlIGN4PSIxMCIgY3k9IjEyIiByPSIyIiAvPgogIDxwYXRoIGQ9Im0yMCAxNy0xLjI5Ni0xLjI5NmEyLjQxIDIuNDEgMCAwIDAtMy40MDggMEw5IDIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-image\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileImage = createLucideIcon(__iconData);\n\nexport default FileImage;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-terminal',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'm8 16 2-2-2-2', key: '10vzyd' }],\n ['path', { d: 'M12 18h4', key: '1wd2n7' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileTerminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJtOCAxNiAyLTItMi0yIiAvPgogIDxwYXRoIGQ9Ik0xMiAxOGg0IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-terminal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileTerminal = createLucideIcon(__iconData);\n\nexport default FileTerminal;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-text',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M10 9H8', key: 'b1mrlr' }],\n ['path', { d: 'M16 13H8', key: 't4e002' }],\n ['path', { d: 'M16 17H8', key: 'z1uh3a' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileText\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNMTAgOUg4IiAvPgogIDxwYXRoIGQ9Ik0xNiAxM0g4IiAvPgogIDxwYXRoIGQ9Ik0xNiAxN0g4IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-text\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileText = createLucideIcon(__iconData);\n\nexport default FileText;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name File\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst File = createLucideIcon(__iconData);\n\nexport default File;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'folder-open',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'm6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2',\n key: 'usdka0',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FolderOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiAxNCAxLjUtMi45QTIgMiAwIDAgMSA5LjI0IDEwSDIwYTIgMiAwIDAgMSAxLjk0IDIuNWwtMS41NCA2YTIgMiAwIDAgMS0xLjk1IDEuNUg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgxOGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-open\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderOpen = createLucideIcon(__iconData);\n\nexport default FolderOpen;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'folder',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Folder\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/folder\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Folder = createLucideIcon(__iconData);\n\nexport default Folder;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'palette',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z',\n key: 'e79jfc',\n },\n ],\n ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor', key: '1okk4w' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor', key: 'f64h9f' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor', key: 'qy21gx' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'fotxhn' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Palette\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMjJhMSAxIDAgMCAxIDAtMjAgMTAgOSAwIDAgMSAxMCA5IDUgNSAwIDAgMS01IDVoLTIuMjVhMS43NSAxLjc1IDAgMCAwLTEuNCAyLjhsLjMuNGExLjc1IDEuNzUgMCAwIDEtMS40IDIuOHoiIC8+CiAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjYuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KICA8Y2lyY2xlIGN4PSIxNy41IiBjeT0iMTAuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KICA8Y2lyY2xlIGN4PSI2LjUiIGN5PSIxMi41IiByPSIuNSIgZmlsbD0iY3VycmVudENvbG9yIiAvPgogIDxjaXJjbGUgY3g9IjguNSIgY3k9IjcuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/palette\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Palette = createLucideIcon(__iconData);\n\nexport default Palette;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'refresh-cw',\n size: 24,\n node: [\n ['path', { d: 'M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8', key: 'v9h5vc' }],\n ['path', { d: 'M21 3v5h-5', key: '1q7to0' }],\n ['path', { d: 'M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16', key: '3uifl3' }],\n ['path', { d: 'M8 16H3v5', key: '1cv678' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name RefreshCw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAwIDEgOS05IDkuNzUgOS43NSAwIDAgMSA2Ljc0IDIuNzRMMjEgOCIgLz4KICA8cGF0aCBkPSJNMjEgM3Y1aC01IiAvPgogIDxwYXRoIGQ9Ik0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgLz4KICA8cGF0aCBkPSJNOCAxNkgzdjUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/refresh-cw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCw = createLucideIcon(__iconData);\n\nexport default RefreshCw;\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"workspaceAccessible\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/rpc\", \"rpc\");\n", "import { rpc } from \"@ragents/web/rpc\";\nimport { workspaceContracts, type BrowseListing, type BrowsePreview, type BrowseRoot } from \"../contract\";\n\nexport const fetchBrowseListing = (runId: string, root: BrowseRoot, directory: string): Promise<BrowseListing> =>\n rpc.call(workspaceContracts.browse.list, { runId, root, path: directory });\n\nexport const fetchBrowsePreview = (runId: string, root: BrowseRoot, file: string): Promise<BrowsePreview> =>\n rpc.call(workspaceContracts.browse.preview, { runId, root, path: file });\n", "import {\n Braces,\n File,\n FileArchive,\n FileCode2,\n FileCog,\n FileImage,\n FileTerminal,\n FileText,\n Folder,\n FolderOpen,\n Palette,\n type LucideIcon,\n} from \"lucide-react\";\n\ntype FileTone = \"blue\" | \"yellow\" | \"green\" | \"teal\" | \"orange\" | \"pink\" | \"violet\" | \"red\" | \"muted\";\n\ninterface FileIconChoice {\n Icon: LucideIcon;\n tone: FileTone;\n}\n\nexport const fileToneClass: Readonly<Record<FileTone, string>> = {\n blue: \"text-info\",\n yellow: \"text-warning\",\n green: \"text-success\",\n teal: \"text-teal\",\n orange: \"text-[color-mix(in_srgb,var(--warning)_75%,var(--destructive))]\",\n pink: \"text-[color-mix(in_srgb,var(--destructive)_65%,var(--accent))]\",\n violet: \"text-primary\",\n red: \"text-destructive\",\n muted: \"text-muted-foreground\",\n};\n\nconst byExtension: Readonly<Record<string, FileIconChoice>> = {\n ts: { Icon: FileCode2, tone: \"blue\" },\n tsx: { Icon: FileCode2, tone: \"blue\" },\n mts: { Icon: FileCode2, tone: \"blue\" },\n cts: { Icon: FileCode2, tone: \"blue\" },\n js: { Icon: FileCode2, tone: \"yellow\" },\n jsx: { Icon: FileCode2, tone: \"yellow\" },\n mjs: { Icon: FileCode2, tone: \"yellow\" },\n cjs: { Icon: FileCode2, tone: \"yellow\" },\n cs: { Icon: FileCode2, tone: \"green\" },\n fs: { Icon: FileCode2, tone: \"teal\" },\n fsx: { Icon: FileCode2, tone: \"teal\" },\n py: { Icon: FileCode2, tone: \"green\" },\n json: { Icon: Braces, tone: \"yellow\" },\n md: { Icon: FileText, tone: \"violet\" },\n txt: { Icon: FileText, tone: \"muted\" },\n pdf: { Icon: FileText, tone: \"red\" },\n html: { Icon: FileCode2, tone: \"orange\" },\n htm: { Icon: FileCode2, tone: \"orange\" },\n hbs: { Icon: FileCode2, tone: \"orange\" },\n css: { Icon: Palette, tone: \"pink\" },\n png: { Icon: FileImage, tone: \"violet\" },\n jpg: { Icon: FileImage, tone: \"violet\" },\n jpeg: { Icon: FileImage, tone: \"violet\" },\n gif: { Icon: FileImage, tone: \"violet\" },\n webp: { Icon: FileImage, tone: \"violet\" },\n svg: { Icon: FileImage, tone: \"violet\" },\n ico: { Icon: FileImage, tone: \"violet\" },\n sh: { Icon: FileTerminal, tone: \"green\" },\n zsh: { Icon: FileTerminal, tone: \"green\" },\n bash: { Icon: FileTerminal, tone: \"green\" },\n yml: { Icon: FileCog, tone: \"muted\" },\n yaml: { Icon: FileCog, tone: \"muted\" },\n toml: { Icon: FileCog, tone: \"muted\" },\n ini: { Icon: FileCog, tone: \"muted\" },\n csproj: { Icon: FileCog, tone: \"blue\" },\n fsproj: { Icon: FileCog, tone: \"teal\" },\n sln: { Icon: FileCog, tone: \"blue\" },\n slnx: { Icon: FileCog, tone: \"blue\" },\n zip: { Icon: FileArchive, tone: \"orange\" },\n gz: { Icon: FileArchive, tone: \"orange\" },\n tar: { Icon: FileArchive, tone: \"orange\" },\n lock: { Icon: FileCog, tone: \"muted\" },\n};\n\nconst byName: Readonly<Record<string, FileIconChoice>> = {\n \"package.json\": { Icon: Braces, tone: \"green\" },\n \"pnpm-lock.yaml\": { Icon: FileCog, tone: \"muted\" },\n \"tsconfig.json\": { Icon: Braces, tone: \"blue\" },\n \".gitignore\": { Icon: FileCog, tone: \"muted\" },\n dockerfile: { Icon: FileCog, tone: \"teal\" },\n};\n\nexport const fileIconFor = (name: string, kind: \"directory\" | \"file\", open: boolean): FileIconChoice => {\n if (kind === \"directory\") return { Icon: open ? FolderOpen : Folder, tone: \"muted\" };\n const named = byName[name.toLowerCase()];\n if (named) return named;\n const extension = name.includes(\".\") ? name.toLowerCase().split(\".\").at(-1) ?? \"\" : \"\";\n return byExtension[extension] ?? { Icon: File, tone: \"muted\" };\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/SourceCode\", \"SourceCode\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"Fragment\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsxs\");\n", "import {\n Alert,\n Button,\n Empty,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n Toggle,\n} from \"@ragents/web/ui\";\nimport { useEffect, useRef, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { ChevronRight, Eye, EyeOff, FolderOpen, RefreshCw } from \"lucide-react\";\nimport { workspaceAccessible, type WorkspaceTabContext } from \"@ragents/web/PluginRegistry\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { BROWSE_ROOTS, workspaceContracts, type BrowseListing, type BrowsePreview, type BrowseRoot } from \"../contract\";\nimport { fetchBrowseListing, fetchBrowsePreview } from \"./api\";\nimport { fileIconFor, fileToneClass } from \"./file-icons\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\n\nconst rowClass = \"h-auto w-full justify-start gap-1.5 rounded-none py-[3px] pr-2.5 pl-(--row-indent) text-[0.7rem] font-normal data-selected:bg-primary/12 data-selected:text-primary\";\nconst previewSourceClass = \"min-w-0 px-2.5 pt-0 pb-2.5 text-xs leading-[1.45] whitespace-pre-wrap break-words\";\nconst indent = (depth: number) => ({ \"--row-indent\": `${8 + depth * 12}px` }) as CSSProperties;\n\nconst rootLabels: Readonly<Record<BrowseRoot, string>> = {\n workspace: \"Arbeitsverzeichnis\",\n files: \"Dateiablage\",\n};\n\nconst emptyHints: Readonly<Record<BrowseRoot, string>> = {\n workspace: \"Im Arbeitsverzeichnis des Runs liegt noch nichts.\",\n files: \"In der Dateiablage des Runs liegt noch nichts.\",\n};\n\nconst messageOf = (cause: unknown): string => cause instanceof Error ? cause.message : String(cause);\n\nconst sizeLabel = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n};\n\nconst timeLabel = (value: string): string => {\n const at = new Date(value);\n return Number.isNaN(at.getTime()) ? value : at.toLocaleString(\"de-DE\");\n};\n\ninterface BrowserMemory {\n expanded: ReadonlySet<string>;\n selected: string | undefined;\n}\n\nexport function FileBrowserPanel({ active, session }: WorkspaceTabContext) {\n const runId = session.session.id;\n const treeMemory = useRef(new Map<string, BrowserMemory>());\n const reachable = workspaceAccessible(session.session);\n const roots: readonly BrowseRoot[] = reachable ? BROWSE_ROOTS : [\"files\"];\n const [chosenRoot, setRoot] = useState<BrowseRoot>(\"workspace\");\n const root: BrowseRoot = reachable ? chosenRoot : \"files\";\n const stateKey = `${runId}|${root}`;\n const [listings, setListings] = useState<ReadonlyMap<string, BrowseListing>>(() => new Map());\n const [expanded, setExpanded] = useState<ReadonlySet<string>>(() => new Set());\n const [selected, setSelected] = useState<string | undefined>();\n const [preview, setPreview] = useState<BrowsePreview>();\n const [error, setError] = useState<string>();\n const [pending, setPending] = useState(false);\n const [reload, setReload] = useState(0);\n const [showHidden, setShowHidden] = useState(false);\n\n const expandedRef = useRef(expanded);\n expandedRef.current = expanded;\n\n const keyRef = useRef(stateKey);\n useEffect(() => {\n if (keyRef.current === stateKey) return;\n keyRef.current = stateKey;\n const saved = treeMemory.current.get(stateKey);\n setListings(new Map());\n setExpanded(saved?.expanded ?? new Set());\n setSelected(saved?.selected);\n setPreview(undefined);\n setError(undefined);\n }, [stateKey]);\n\n useEffect(() => {\n treeMemory.current.set(stateKey, { expanded, selected });\n }, [expanded, root, runId, selected, stateKey]);\n\n useEffect(() => {\n if (!active || selected === undefined || preview !== undefined) return;\n let alive = true;\n void fetchBrowsePreview(runId, root, selected)\n .then((value) => alive && setPreview(value))\n .catch(() => alive && setSelected(undefined));\n return () => {\n alive = false;\n };\n }, [active, preview, root, runId, selected]);\n\n useEffect(() => {\n if (!active) return;\n let alive = true;\n let timer: number | undefined;\n let busy = false;\n\n const load = async (visible: boolean) => {\n if (busy) return;\n busy = true;\n if (visible) setPending(true);\n try {\n const targets = [\"\", ...expandedRef.current];\n const results = await Promise.all(targets.map(async (directory) => ({\n directory,\n listing: await fetchBrowseListing(runId, root, directory).catch((cause: unknown) =>\n directory === \"\" ? Promise.reject(cause) : null),\n })));\n if (!alive) return;\n const gone = results.filter((result) => result.listing === null).map((result) => result.directory);\n setListings(new Map(results\n .filter((result) => result.listing !== null)\n .map((result) => [result.directory, result.listing as BrowseListing])));\n if (gone.length > 0) {\n setExpanded((current) => new Set([...current].filter((directory) =>\n !gone.some((missing) => directory === missing || directory.startsWith(`${missing}/`)))));\n }\n setError(undefined);\n } catch (cause) {\n if (alive) setError(messageOf(cause));\n } finally {\n busy = false;\n if (alive) {\n if (visible) setPending(false);\n if (timer !== undefined) window.clearTimeout(timer);\n timer = window.setTimeout(() => void load(false), 30000);\n }\n }\n };\n\n const unsubscribe = rpc.subscribe(workspaceContracts.channels.browse, { runId, root }, () => void load(false));\n void load(true);\n return () => {\n alive = false;\n unsubscribe();\n if (timer !== undefined) window.clearTimeout(timer);\n };\n }, [active, reload, root, runId]);\n\n const toggleDirectory = (directory: string) => {\n setExpanded((current) => {\n const next = new Set(current);\n if (next.has(directory)) next.delete(directory);\n else next.add(directory);\n return next;\n });\n if (listings.has(directory)) return;\n setPending(true);\n void fetchBrowseListing(runId, root, directory)\n .then((listing) => {\n setListings((current) => new Map(current).set(directory, listing));\n setError(undefined);\n })\n .catch((cause: unknown) => setError(messageOf(cause)))\n .finally(() => setPending(false));\n };\n\n const openFile = (file: string) => {\n setSelected(file);\n setPreview(undefined);\n setPending(true);\n void fetchBrowsePreview(runId, root, file)\n .then((value) => {\n setPreview(value);\n setError(undefined);\n })\n .catch((cause: unknown) => setError(messageOf(cause)))\n .finally(() => setPending(false));\n };\n\n const renderLevel = (directory: string, depth: number): ReactNode => {\n const listing = listings.get(directory);\n if (!listing) return null;\n const visible = showHidden ? listing.entries : listing.entries.filter((entry) => !entry.name.startsWith(\".\"));\n return (\n <>\n {visible.map((entry) => {\n const full = directory ? `${directory}/${entry.name}` : entry.name;\n const open = expanded.has(full);\n const { Icon, tone } = fileIconFor(entry.name, entry.kind, open);\n return (\n <div key={full}>\n <Button\n className={rowClass}\n data-selected={selected === full}\n onClick={() => entry.kind === \"directory\" ? toggleDirectory(full) : openFile(full)}\n style={indent(depth)}\n title={`${entry.name} - ${sizeLabel(entry.size)} - ${timeLabel(entry.modifiedAt)}`}\n variant=\"ghost\"\n >\n <span className={`inline-flex w-3 flex-none items-center justify-center text-muted-foreground${open ? \" [&>svg]:rotate-90\" : \"\"}`}>\n {entry.kind === \"directory\" ? <ChevronRight size={11} strokeWidth={2} /> : null}\n </span>\n <Icon aria-hidden className={`flex-none ${fileToneClass[tone]}`} size={14} strokeWidth={1.7} />\n <span className=\"min-w-0 flex-1 truncate text-left font-mono\">{entry.name}</span>\n {entry.kind === \"file\" && <span className=\"flex-none text-[0.64rem] text-muted-foreground tabular-nums\">{sizeLabel(entry.size)}</span>}\n </Button>\n {entry.kind === \"directory\" && open && renderLevel(full, depth + 1)}\n </div>\n );\n })}\n {listing.truncated && (\n <div className=\"py-1 pr-2.5 pl-(--row-indent) text-[0.64rem] text-muted-foreground\" style={indent(depth)}>\n Weitere Eintr\u00E4ge sind nicht gelistet.\n </div>\n )}\n </>\n );\n };\n\n const rootListing = listings.get(\"\");\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <header className=\"flex items-center gap-2 px-2.5 py-2\">\n <div className=\"flex min-w-0 flex-1 gap-1\">\n {roots.map((value) => (\n <Toggle key={value} onPressedChange={() => setRoot(value)} pressed={value === root} size=\"sm\" variant=\"outline\">\n {rootLabels[value]}\n </Toggle>\n ))}\n </div>\n <div className=\"flex items-center gap-1\">\n <Toggle\n aria-label={showHidden ? \"Versteckte Eintr\u00E4ge ausblenden\" : \"Versteckte Eintr\u00E4ge anzeigen\"}\n onPressedChange={setShowHidden}\n pressed={showHidden}\n size=\"sm\"\n title={showHidden ? \"Versteckte Eintr\u00E4ge ausblenden\" : \"Versteckte Eintr\u00E4ge anzeigen\"}\n >\n {showHidden ? <Eye size={15} strokeWidth={1.8} /> : <EyeOff size={15} strokeWidth={1.8} />}\n </Toggle>\n <Button aria-label=\"Dateien aktualisieren\" onClick={() => setReload((value) => value + 1)} size=\"icon\" title=\"Aktualisieren\" variant=\"ghost\">\n <RefreshCw className={pending ? \"animate-spin\" : undefined} size={15} strokeWidth={1.8} />\n </Button>\n </div>\n </header>\n {error && (\n <Alert className=\"shrink-0 rounded-none border-x-0 border-t-0 border-b-border-soft bg-destructive/8 px-2.5 py-2 text-[0.68rem]\" variant=\"destructive\">\n {error}\n </Alert>\n )}\n {rootListing && <div className=\"truncate px-2.5 pt-0.5 pb-1.5 font-mono text-[0.66rem] text-muted-foreground\" title={rootListing.location}>{rootListing.location}</div>}\n {rootListing && rootListing.entries.length === 0 && (\n <Empty className=\"min-h-30 flex-none gap-2 p-7\">\n <EmptyHeader>\n <EmptyMedia><FolderOpen size={15} strokeWidth={1.7} /></EmptyMedia>\n <EmptyTitle>Keine Dateien</EmptyTitle>\n <EmptyDescription>{emptyHints[root]}</EmptyDescription>\n </EmptyHeader>\n </Empty>\n )}\n <div className=\"min-h-0 flex-1 overflow-auto pb-2\">{renderLevel(\"\", 0)}</div>\n {selected && (\n <div className=\"flex min-h-0 flex-1 flex-col border-t border-border-soft\">\n <div className=\"truncate px-2.5 py-1.5 font-mono text-[0.66rem] text-muted-foreground\" title={selected}>{selected}</div>\n {preview && !preview.previewable && <div className=\"px-2.5 pb-2 text-[0.68rem] text-muted-foreground\">{preview.reason}</div>}\n {preview && preview.previewable && (\n <div className=\"min-h-0 flex-1 overflow-auto\">\n <SourceCode className={previewSourceClass} content={preview.content} path={selected} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarCopy\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarText\");\n", "import { useId, useMemo, useState } from \"react\";\nimport { FolderIcon } from \"lucide-react\";\nimport { Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@ragents/web/ui\";\nimport { ToolbarCopy, ToolbarItem, ToolbarLabel, ToolbarText } from \"@ragents/web/Toolbar\";\nimport type {\n SessionMetadataContext,\n StartOptionBadgeContext,\n StartOptionControlContext,\n} from \"@ragents/web/PluginRegistry\";\nimport {\n FRESH_WORKSPACE_LABEL,\n isFreshFolder,\n isWorkspaceBinding,\n storedWorkspaceBinding,\n workspaceBindingSummary,\n WORKSPACE_METADATA_ID,\n type FreshWorkspaceLabels,\n type WorkspaceBinding,\n type WorkspaceBindingPresentation,\n type WorkspaceClientInfo,\n type WorkspaceSessionMetadata,\n} from \"../contract\";\n\nexport interface BindingChoice {\n value: string;\n label: string;\n}\n\ntype FolderChoice = \"fresh\" | \"existing\";\n\nconst SERVER = \"server\";\n\nconst errorClass = \"text-[0.75rem] text-destructive\";\n\nconst labelClass = \"text-[0.66rem] font-medium text-muted-foreground\";\n\nconst messageOf = (cause: unknown): string => cause instanceof Error ? cause.message : String(cause);\n\nconst isClientInfo = (value: unknown): value is WorkspaceClientInfo => {\n const raw = value as Record<string, unknown> | null;\n return typeof raw === \"object\" && raw !== null\n && typeof raw.id === \"string\" && typeof raw.label === \"string\"\n && typeof raw.hostname === \"string\" && typeof raw.platform === \"string\"\n && Array.isArray(raw.folders) && raw.folders.every((folder) => typeof folder === \"string\")\n && typeof raw.runsDirectory === \"string\" && typeof raw.ripgrep === \"boolean\";\n};\n\nconst isFreshLabels = (value: unknown): value is FreshWorkspaceLabels => {\n const raw = value as Record<string, unknown> | null;\n return typeof raw === \"object\" && raw !== null && typeof raw.server === \"string\"\n && (raw.client === null || typeof raw.client === \"string\");\n};\n\nconst presentationFrom = (presentation: unknown, optionId: string): WorkspaceBindingPresentation => {\n const raw = presentation as Record<string, unknown> | null;\n if (typeof raw !== \"object\" || raw === null || raw.kind !== \"workspace-binding\"\n || !Array.isArray(raw.clients) || !raw.clients.every(isClientInfo)\n || !isFreshLabels(raw.fresh) || typeof raw.serverFolders !== \"boolean\") {\n throw new Error(`Die Startoption ${optionId} liefert keine Arbeitsbereich-Darstellung`);\n }\n return { kind: \"workspace-binding\", clients: raw.clients, fresh: raw.fresh, serverFolders: raw.serverFolders };\n};\n\n/** Auch ein eingefrorener Wert aus einem \u00E4lteren Journal; dieselbe Abbildung wie auf dem Server. */\nconst bindingFrom = (value: unknown, optionId: string): WorkspaceBinding => {\n const binding = storedWorkspaceBinding(value);\n if (!binding) throw new Error(`Der Wert der Startoption ${optionId} ist keine Arbeitsbereich-Bindung`);\n return binding;\n};\n\nconst machineOf = (binding: WorkspaceBinding): string => binding.machine === SERVER ? SERVER : binding.machine.client;\n\nconst folderOf = (binding: WorkspaceBinding): FolderChoice => isFreshFolder(binding.folder) ? \"fresh\" : \"existing\";\n\nconst pathOf = (binding: WorkspaceBinding): string => {\n const { folder } = binding;\n return isFreshFolder(folder) ? \"\" : folder.path;\n};\n\n/** Ein neuer Ordner auf einem Arbeitsplatz ist dieselbe Wahl, ob schon mit Pfad eingefroren oder nicht. */\nconst sameBinding = (left: WorkspaceBinding, right: WorkspaceBinding): boolean =>\n machineOf(left) === machineOf(right) && folderOf(left) === folderOf(right) && pathOf(left) === pathOf(right);\n\n/** Der Server, die verbundenen Arbeitspl\u00E4tze nur, wo der Host sie anbietet, und ein schon gew\u00E4hlter Arbeitsplatz, damit die Wahl lesbar bleibt. */\nexport const workspaceMachineChoices = (\n presentation: WorkspaceBindingPresentation,\n binding: WorkspaceBinding,\n machines: StartOptionControlContext[\"machines\"],\n): BindingChoice[] => {\n const { machine } = binding;\n const clients = machines === \"all\" ? presentation.clients : [];\n const current = machine === SERVER || clients.some((client) => client.id === machine.client) ? []\n : [{ value: machine.client, label: presentation.clients.some((client) => client.id === machine.client)\n ? `Arbeitsplatz ${machine.label}` : `Arbeitsplatz ${machine.label} (nicht verbunden)` }];\n return [\n { value: SERVER, label: \"Server\" },\n ...clients.map((client) => ({ value: client.id, label: `Arbeitsplatz ${client.label}` })),\n ...current,\n ];\n};\n\n/** Auf dem Server gibt es den neuen Ordner immer, einen vorhandenen nur ohne Beitrag, der ihn ausschlie\u00DFt; auf einem Arbeitsplatz umgekehrt. */\nexport const workspaceFolderChoices = (presentation: WorkspaceBindingPresentation, machine: string): BindingChoice[] => {\n const existing = { value: \"existing\", label: \"Vorhandener Ordner\" };\n if (machine === SERVER) {\n return [{ value: \"fresh\", label: presentation.fresh.server }, ...(presentation.serverFolders ? [existing] : [])];\n }\n return [...(presentation.fresh.client === null ? [] : [{ value: \"fresh\", label: presentation.fresh.client }]), existing];\n};\n\nexport const workspaceMetadataFrom = (value: unknown): WorkspaceSessionMetadata | undefined => {\n const raw = value as Record<string, unknown> | null;\n if (typeof raw !== \"object\" || raw === null || typeof raw.summary !== \"string\" || !isWorkspaceBinding(raw.binding)) {\n return undefined;\n }\n return { binding: raw.binding, summary: raw.summary };\n};\n\nconst parse = (option: StartOptionControlContext[\"option\"]) => {\n try {\n return {\n presentation: presentationFrom(option.presentation, option.id),\n binding: bindingFrom(option.value, option.id),\n };\n } catch (cause) {\n return { message: messageOf(cause) };\n }\n};\n\nexport function WorkspaceBindingControl({ disabled, error, machines: offeredMachines, option, setValue }: StartOptionControlContext) {\n const [machineDraft, setMachine] = useState<string | undefined>(undefined);\n const [folderDraft, setFolder] = useState<FolderChoice | undefined>(undefined);\n const [draft, setDraft] = useState<string | undefined>(undefined);\n const pathId = useId();\n const parsed = useMemo(() => parse(option), [option]);\n if (\"message\" in parsed) return <p className={errorClass} role=\"alert\">{parsed.message}</p>;\n const { presentation, binding } = parsed;\n\n const machine = machineDraft ?? machineOf(binding);\n const folder = folderDraft ?? folderOf(binding);\n const path = draft ?? pathOf(binding);\n const machines = workspaceMachineChoices(presentation, binding, offeredMachines);\n const folderChoices = workspaceFolderChoices(presentation, machine);\n const client = presentation.clients.find((entry) => entry.id === machine);\n const offered = folder === \"existing\" ? client?.folders.map((entry) => ({ value: entry, label: entry })) ?? [] : [];\n\n const bindingOf = (nextMachine: string, nextFolder: FolderChoice, nextPath: string): WorkspaceBinding | undefined => {\n const label = presentation.clients.find((entry) => entry.id === nextMachine)?.label\n ?? (binding.machine !== SERVER && binding.machine.client === nextMachine ? binding.machine.label : nextMachine);\n const where = nextMachine === SERVER ? SERVER : { client: nextMachine, label };\n if (nextFolder === \"fresh\") return { machine: where, folder: \"fresh\" };\n return nextPath === \"\" ? undefined : { machine: where, folder: { path: nextPath } };\n };\n\n const commit = (nextMachine: string, nextFolder: FolderChoice, nextPath: string) => {\n const next = bindingOf(nextMachine, nextFolder, nextPath);\n if (next && !sameBinding(next, binding)) void setValue(next);\n };\n\n const chooseMachine = (next: string) => {\n const available = workspaceFolderChoices(presentation, next).map((choice) => choice.value as FolderChoice);\n const nextFolder = available.includes(folder) ? folder : available[0]!;\n const nextPath = path === \"\" ? presentation.clients.find((entry) => entry.id === next)?.folders[0] ?? \"\" : path;\n setMachine(next);\n setFolder(nextFolder);\n setDraft(nextPath);\n commit(next, nextFolder, nextPath);\n };\n\n const chooseFolder = (next: FolderChoice) => {\n const nextPath = path === \"\" ? client?.folders[0] ?? \"\" : path;\n setFolder(next);\n setDraft(nextPath);\n commit(machine, next, nextPath);\n };\n\n const chooseOffered = (next: string) => {\n setDraft(next);\n commit(machine, folder, next);\n };\n\n return (\n <div className=\"flex w-full flex-col items-start gap-2\">\n <span className=\"text-[0.72rem] font-semibold text-muted-foreground\">Arbeitsbereich</span>\n <div className=\"flex w-full flex-wrap items-end gap-2\">\n <div className=\"flex flex-col gap-1\">\n <span className={labelClass}>Rechner</span>\n <Select disabled={disabled} items={machines} onValueChange={(next) => { if (next !== null) chooseMachine(next); }} value={machine}>\n <SelectTrigger aria-label=\"Rechner des Arbeitsbereichs\" className=\"min-w-0 max-w-full\" size=\"sm\"><SelectValue /></SelectTrigger>\n <SelectContent>{machines.map((choice) => <SelectItem key={choice.value} value={choice.value}>{choice.label}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className={labelClass}>Ordner</span>\n <Select disabled={disabled} items={folderChoices} onValueChange={(next) => { if (next !== null) chooseFolder(next as FolderChoice); }} value={folder}>\n <SelectTrigger aria-label=\"Ordner des Arbeitsbereichs\" className=\"min-w-0 max-w-full\" size=\"sm\"><SelectValue /></SelectTrigger>\n <SelectContent>{folderChoices.map((choice) => <SelectItem key={choice.value} value={choice.value}>{choice.label}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n {folder === \"existing\" && (\n <div className=\"flex min-w-[15rem] flex-1 flex-col gap-1\">\n <Label className={labelClass} htmlFor={pathId}>Absoluter Pfad</Label>\n <Input\n className=\"h-7 text-sm\"\n disabled={disabled}\n id={pathId}\n onBlur={() => commit(machine, folder, path)}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={(event) => { if (event.key === \"Enter\") commit(machine, folder, path); }}\n placeholder=\"/Users/name/projekt\"\n value={path}\n />\n </div>\n )}\n {offered.length > 0 && (\n <div className=\"flex flex-col gap-1\">\n <span className={labelClass}>Angebotener Ordner</span>\n <Select disabled={disabled} items={offered} onValueChange={(next) => { if (next !== null) chooseOffered(next); }} value={offered.some((entry) => entry.value === path) ? path : null}>\n <SelectTrigger aria-label=\"Angebotener Ordner\" className=\"min-w-0 max-w-full\" size=\"sm\"><SelectValue placeholder=\"\u00DCbernehmen\" /></SelectTrigger>\n <SelectContent>{offered.map((entry) => <SelectItem key={entry.value} value={entry.value}>{entry.label}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n )}\n </div>\n {error && <p className={errorClass} role=\"alert\">{error}</p>}\n </div>\n );\n}\n\nconst freshLabelsOf = (presentation: unknown): FreshWorkspaceLabels => {\n const raw = presentation as Record<string, unknown> | null;\n return typeof raw === \"object\" && raw !== null && isFreshLabels(raw.fresh) ? raw.fresh : { server: FRESH_WORKSPACE_LABEL, client: FRESH_WORKSPACE_LABEL };\n};\n\nexport function WorkspaceBindingBadge({ option }: StartOptionBadgeContext) {\n if (!option.locked) return null;\n let binding: WorkspaceBinding;\n try {\n binding = bindingFrom(option.value, option.id);\n } catch (cause) {\n return <ToolbarItem title={messageOf(cause)}><ToolbarText>Arbeitsbereich unlesbar</ToolbarText></ToolbarItem>;\n }\n const summary = workspaceBindingSummary(binding, freshLabelsOf(option.presentation));\n return (\n <ToolbarItem title={`Arbeitsbereich: ${summary}`}>\n <ToolbarCopy><ToolbarLabel>Arbeitsbereich</ToolbarLabel><ToolbarText>{summary}</ToolbarText></ToolbarCopy>\n </ToolbarItem>\n );\n}\n\nexport function WorkspaceMetadata({ placement, session }: SessionMetadataContext) {\n const metadata = workspaceMetadataFrom(session.metadata?.[WORKSPACE_METADATA_ID]);\n if (!metadata) return null;\n if (placement === \"list\") {\n const { machine, folder } = metadata.binding;\n if (machine === \"server\" && folder === \"fresh\") return null;\n return (\n <span className=\"flex max-w-full items-center gap-1.5 overflow-hidden pl-px text-xs text-muted-foreground\" title={`Arbeitsbereich: ${metadata.summary}`}>\n <FolderIcon aria-hidden className=\"size-3 flex-none\" />\n <span className=\"truncate\">{metadata.summary}</span>\n </span>\n );\n }\n return (\n <ToolbarItem title={`Arbeitsbereich: ${metadata.summary}`}>\n <FolderIcon aria-hidden className=\"size-3.5\" />\n <ToolbarCopy><ToolbarLabel>Arbeitsbereich</ToolbarLabel><ToolbarText>{metadata.summary}</ToolbarText></ToolbarCopy>\n </ToolbarItem>\n );\n}\n", "import type { WebPlugin } from \"@ragents/web/PluginRegistry\";\nimport { WORKSPACE_BINDING_OPTION_ID, WORKSPACE_PLUGIN_ID } from \"../contract\";\nimport { FileBrowserPanel } from \"./FileBrowser\";\nimport { WorkspaceBindingBadge, WorkspaceBindingControl, WorkspaceMetadata } from \"./WorkspaceBinding\";\n\nexport const WORKSPACE_FILES_TAB_ID = \"ragents.workspace.files\";\n\nfunction IconFiles() {\n return (\n <svg aria-hidden fill=\"none\" height=\"15\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.7\" viewBox=\"0 0 24 24\" width=\"15\">\n <path d=\"M3 6.5A1.5 1.5 0 0 1 4.5 5h4L10 7h9.5A1.5 1.5 0 0 1 21 8.5v9a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 3 17.5z\" />\n <path d=\"M3 11h18\" />\n </svg>\n );\n}\n\nexport const webPlugin: WebPlugin = {\n id: WORKSPACE_PLUGIN_ID,\n workspaceTabs: [{\n readRight: \"runs.inspect\",\n id: WORKSPACE_FILES_TAB_ID,\n label: \"Dateien\",\n order: 260,\n Icon: IconFiles,\n Panel: FileBrowserPanel,\n }],\n startOptions: [{\n id: WORKSPACE_BINDING_OPTION_ID,\n Control: WorkspaceBindingControl,\n Badge: WorkspaceBindingBadge,\n }],\n sessionMetadata: [{\n id: \"ragents.workspace.binding\",\n order: 90,\n Metadata: WorkspaceMetadata,\n }],\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["export const read = (specifier, name) => {\n const module = globalThis[\"__ragentsHostModules\"]?.[specifier];\n if (module === undefined) throw new Error(`The host does not provide ${specifier}`);\n if (!(name in module)) throw new Error(`The host does not provide ${name} from ${specifier}; the bundle was built against a newer host`);\n return module[name];\n};", "import { read } from \"ragents-host-read:read\";\nexport default read(\"typebox\", \"Type\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/http/contracts\", \"openJson\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/rpc/contract\", \"defineChannel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/rpc/contract\", \"defineOperation\");\n", "import { Type } from \"typebox\";\nimport { openJson } from \"@ragents/engine/src/http/contracts\";\nimport { defineChannel, defineOperation } from \"@ragents/engine/src/rpc/contract\";\n\nexport const WORKSPACE_PLUGIN_ID = \"ragents.workspace\";\n\nexport const BROWSE_ROOTS = [\"workspace\", \"files\"] as const;\nexport type BrowseRoot = typeof BROWSE_ROOTS[number];\n\nexport interface BrowseEntry {\n name: string;\n kind: \"directory\" | \"file\";\n size: number;\n modifiedAt: string;\n}\n\nexport interface BrowseListing {\n root: BrowseRoot;\n /** Where the root is; on a workstation with its label. */\n location: string;\n path: string;\n entries: BrowseEntry[];\n truncated: boolean;\n}\n\nexport type BrowsePreview =\n | { root: BrowseRoot; path: string; size: number; previewable: true; content: string }\n | { root: BrowseRoot; path: string; size: number; previewable: false; reason: string };\n\nexport const WORKSPACE_BINDING_OPTION_ID = \"ragents.workspace.binding\";\n\nexport const WORKSPACE_METADATA_ID = \"ragents.workspace\";\n\n/** On which machine the workspace of a run is: the server or a workstation whose label the binding records. */\nexport type WorkspaceMachine = \"server\" | { client: string; label: string };\n\n/** An existing folder that the run neither creates nor deletes. */\nexport type ExistingWorkspaceFolder = {\n path: string;\n};\n\n/** The new folder per run on a workstation; the binding records its path there from the moment it is chosen. */\nexport type FreshWorkstationFolder = {\n path: string;\n fresh: true;\n};\n\n/** Which folder: a new one per run or an existing one; for `fresh` on the server, the host creates one per run in its storage. */\nexport type WorkspaceFolder = \"fresh\" | ExistingWorkspaceFolder | FreshWorkstationFolder;\n\n/** Where and in which folder a run works; frozen into the journal as a start option at the start. */\nexport type WorkspaceBinding = {\n machine: WorkspaceMachine;\n folder: WorkspaceFolder;\n};\n\nexport const freshServerBinding = (): WorkspaceBinding => ({ machine: \"server\", folder: \"fresh\" });\n\nexport const WORKSPACE_CLIENT_ID_PATTERN = /^[A-Za-z0-9_-]{8,64}$/;\n\n/** What a workstation says about itself at sign-in. */\nexport interface WorkspaceClientDescription {\n label: string;\n hostname: string;\n platform: string;\n folders: string[];\n /** Where the workstation creates the new folders per run, one subfolder per run named with its ID. */\n runsDirectory: string;\n /** Whether the workstation's bash finds rg; the prompt adjusts the search accordingly. */\n ripgrep: boolean;\n}\n\nexport interface WorkspaceClientInfo extends WorkspaceClientDescription {\n id: string;\n}\n\n/** What the new folder per run is called on each machine: the empty folder or a plugin's contribution; null where there is none. */\nexport interface FreshWorkspaceLabels {\n server: string;\n client: string | null;\n}\n\nexport interface WorkspaceBindingPresentation {\n kind: \"workspace-binding\";\n clients: WorkspaceClientInfo[];\n fresh: FreshWorkspaceLabels;\n /** Whether an existing folder of the server machine may be bound. */\n serverFolders: boolean;\n}\n\nexport interface WorkspaceSessionMetadata {\n binding: WorkspaceBinding;\n summary: string;\n}\n\nconst clientId = Type.String({ pattern: \"^[A-Za-z0-9_-]{8,64}$\", description: \"Stable ID of the workstation\" });\n\nconst executorVersion = Type.String({ minLength: 1, maxLength: 64, description: \"Version of the executor that the workstation brings\" });\n\n/** The ID of a plugin; a workstation looks for its bundle under exactly this name, so it cannot contain a path. */\nexport const PLUGIN_ID_PATTERN = /^[a-z0-9]+(?:[.-][a-z0-9]+)*$/;\n\nconst executorContributions = Type.Array(Type.Object({\n plugin: Type.String({ pattern: PLUGIN_ID_PATTERN.source, maxLength: 128, description: \"ID of the plugin\" }),\n stand: Type.String({ pattern: \"^[0-9a-f]{64}$\", description: \"SHA-256 of the contribution file\" }),\n}, { additionalProperties: false }), { maxItems: 64, description: \"The plugins' contributions to the executor, in the order of the server's plugin list\" });\n\nconst clientDescription = {\n label: Type.String({ minLength: 1, maxLength: 120 }),\n hostname: Type.String({ minLength: 1 }),\n platform: Type.String({ minLength: 1 }),\n folders: Type.Array(Type.String({ minLength: 1 }), { maxItems: 32 }),\n runsDirectory: Type.String({ minLength: 1, description: \"Absolute folder under which the workstation creates the new folders per run\" }),\n ripgrep: Type.Boolean({ description: \"Whether the workstation's bash finds rg\" }),\n};\n\nexport const clientInfoSchema = Type.Object({\n id: Type.String(),\n ...clientDescription,\n}, { additionalProperties: false });\n\n/** The sign-in as a workstation with the server's executor sends it. */\nexport const clientRegistrationSchema = Type.Object({\n id: clientId,\n ...clientDescription,\n executor: executorVersion,\n contributions: executorContributions,\n}, { additionalProperties: false });\n\n/** A workstation with a different executor does not know the shape of this version; the server rejects it by its version, not by its shape. */\nconst otherExecutorRegistration = Type.Object({ label: clientDescription.label, executor: executorVersion }, {\n description: \"Sign-in with a different executor version in any shape; the server rejects it with workspace-executor-version\",\n});\n\nconst absolutePath = Type.String({ minLength: 1, description: \"Absolute path in the bound folder\" });\n\n/** Not an operation of a module: releases what the workstation's executor holds for the run. */\nexport const WORKSPACE_CLIENT_STOP_OPERATION = \"stop\";\n\n/** The one operation the server calls on the workstation; progress is the JSON value of the operation, for bash { text }. */\nexport const workspaceClientContracts = {\n execute: defineOperation({\n id: \"ragents.workspace.client.execute\",\n description: \"Run an operation of the executor on the workstation, such as a tool, a file query, or the process display; the result is its value, progress its JSON value. stop releases what the workstation holds for the run.\",\n implementedBy: \"client\",\n input: Type.Object({\n runId: Type.String({ minLength: 1, maxLength: 64, description: \"ID of the run\" }),\n operation: Type.String({ minLength: 1, maxLength: 64, description: \"Name of the operation, such as read, bash, roslyn_open, files.list, or stop\" }),\n toolCallId: Type.Optional(Type.String({ minLength: 1, maxLength: 200, description: \"Only for a tool call of the model\" })),\n cwd: absolutePath,\n env: Type.Record(Type.String(), Type.String(), { description: \"What the server contributes: run marker and git rules of the sandbox\" }),\n input: Type.Unknown({ description: \"The input of the operation\" }),\n }, { additionalProperties: false }),\n result: Type.Object({ value: Type.Unknown() }, { additionalProperties: false }),\n }),\n} as const;\n\nconst browseTarget = {\n runId: Type.String({ minLength: 1, maxLength: 64, description: \"ID of the run\" }),\n root: Type.Union([Type.Literal(\"workspace\"), Type.Literal(\"files\")]),\n path: Type.String({ description: \"Path below the root; empty is the root itself\" }),\n};\n\n/** The sign-in of a workstation binds the calling connection; the server calls back through it. */\nexport const workspaceContracts = {\n browse: {\n list: defineOperation({\n id: \"ragents.workspace.browse.list\",\n description: \"List a directory in the workspace or in the file store of a run.\",\n rights: [\"runs.read\", \"runs.inspect\"],\n input: Type.Object(browseTarget, { additionalProperties: false }),\n result: openJson<BrowseListing>(\"BrowseListing\"),\n }),\n preview: defineOperation({\n id: \"ragents.workspace.browse.preview\",\n description: \"Preview a file as text; files that are too large or binary state the reason instead.\",\n rights: [\"runs.read\", \"runs.inspect\"],\n input: Type.Object(browseTarget, { additionalProperties: false }),\n result: openJson<BrowsePreview>(\"BrowsePreview\"),\n }),\n },\n channels: {\n browse: defineChannel({\n id: \"ragents.workspace.browse\",\n description: \"Reports every change below the observed root of a run.\",\n rights: [\"runs.read\", \"runs.inspect\"],\n params: Type.Object({ runId: browseTarget.runId, root: browseTarget.root }, { additionalProperties: false }),\n message: Type.Object({ changed: Type.Literal(true) }, { additionalProperties: false }),\n }),\n },\n clients: {\n list: defineOperation({\n id: \"ragents.workspace.clients.list\",\n description: \"The caller's signed-in workstations; other users' workstations do not appear even with runs.read.all.\",\n rights: [\"runs.read\"],\n input: Type.Object({}, { additionalProperties: false }),\n result: Type.Array(clientInfoSchema),\n }),\n contributions: defineOperation({\n id: \"ragents.workspace.clients.contributions\",\n description: \"The plugins' contributions to the executor that a workstation loads before sign-in and reports back with it. A workstation with a different executor version fails on its version; other fields do not matter.\",\n rights: [\"runs.write\"],\n input: Type.Object({ label: clientDescription.label, executor: executorVersion }),\n result: executorContributions,\n }),\n register: defineOperation({\n id: \"ragents.workspace.clients.register\",\n description: \"Sign in a workstation or renew its folders; the connection of this request becomes its return path and needs an event stream. A workstation with a different executor version fails on its version before the rest of the shape matters.\",\n rights: [\"runs.write\"],\n input: Type.Union([clientRegistrationSchema, otherExecutorRegistration]),\n result: clientInfoSchema,\n }),\n unregister: defineOperation({\n id: \"ragents.workspace.clients.unregister\",\n description: \"Sign out one of your own workstations; open tasks fail.\",\n rights: [\"runs.write\"],\n input: Type.Object({ id: clientId }, { additionalProperties: false }),\n result: Type.Null(),\n }),\n },\n} as const;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null;\n\nconst hasExactly = (value: Record<string, unknown>, keys: readonly string[]): boolean =>\n Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key));\n\nconst isMachine = (value: unknown): value is WorkspaceMachine =>\n value === \"server\" || (isRecord(value) && hasExactly(value, [\"client\", \"label\"])\n && typeof value.client === \"string\" && WORKSPACE_CLIENT_ID_PATTERN.test(value.client) && typeof value.label === \"string\");\n\nconst isFolder = (value: unknown): value is WorkspaceFolder => {\n if (value === \"fresh\") return true;\n if (!isRecord(value) || typeof value.path !== \"string\" || value.path.length === 0) return false;\n return hasExactly(value, [\"path\"]) || (hasExactly(value, [\"path\", \"fresh\"]) && value.fresh === true);\n};\n\n/** A new folder with a path exists only on a workstation; on the server the host creates it itself. */\nexport const isWorkspaceBinding = (value: unknown): value is WorkspaceBinding =>\n isRecord(value) && hasExactly(value, [\"machine\", \"folder\"]) && isMachine(value.machine) && isFolder(value.folder)\n && !(value.machine === \"server\" && typeof value.folder === \"object\" && \"fresh\" in value.folder);\n\nexport const isFreshFolder = (folder: WorkspaceFolder): folder is \"fresh\" | FreshWorkstationFolder =>\n folder === \"fresh\" || \"fresh\" in folder;\n\n/** The shape before machine and folder were separated, `{ kind: \"fresh\" | \"path\" | \"client\" }`, mapped unambiguously to the current one. */\nconst fromKind = (value: Record<string, unknown>): unknown => {\n switch (value.kind) {\n case \"fresh\": return hasExactly(value, [\"kind\"]) ? freshServerBinding() : undefined;\n case \"path\": return hasExactly(value, [\"kind\", \"path\"]) ? { machine: \"server\", folder: { path: value.path } } : undefined;\n case \"client\": return hasExactly(value, [\"kind\", \"client\", \"label\", \"path\"])\n ? { machine: { client: value.client, label: value.label }, folder: { path: value.path } }\n : undefined;\n default: return undefined;\n }\n};\n\n/** The stored binding; older, immutable journals carry the shape with `kind`, and only here is it mapped. */\nexport const storedWorkspaceBinding = (value: unknown): WorkspaceBinding | undefined => {\n if (isWorkspaceBinding(value)) return value;\n const mapped = isRecord(value) && Object.hasOwn(value, \"kind\") ? fromKind(value) : undefined;\n return isWorkspaceBinding(mapped) ? mapped : undefined;\n};\n\nexport const FRESH_WORKSPACE_LABEL = \"Empty folder per run\";\n\n/** What the new folder per run is called on the binding's machine; without a contribution there, the empty folder. */\nconst freshLabelOf = (binding: WorkspaceBinding, labels: FreshWorkspaceLabels): string =>\n (binding.machine === \"server\" ? labels.server : labels.client) ?? FRESH_WORKSPACE_LABEL;\n\nexport const workspaceBindingSummary = (binding: WorkspaceBinding, labels: FreshWorkspaceLabels): string => {\n const { machine, folder } = binding;\n const fresh = freshLabelOf(binding, labels);\n const where = folder === \"fresh\" ? fresh : \"fresh\" in folder ? `${folder.path} (${fresh})` : folder.path;\n return machine === \"server\" ? where : `${machine.label}: ${where}`;\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Alert\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Button\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Empty\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyDescription\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyHeader\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyMedia\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Input\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Label\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Select\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectTrigger\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectValue\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Toggle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"createContext\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"createElement\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"forwardRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useContext\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useEffect\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useId\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useMemo\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useRef\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react\", \"useState\");\n", "/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string?.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n", "import { toKebabCase } from './toKebabCase';\nimport type { LucideIconData, LucideIconNode } from '../build/types';\n\n/**\n * Converts legacy `(name, iconNode, aliases?)` icon arguments into icon data object format.\n */\nexport function toLucideIconData(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases: string[] = [],\n): LucideIconData {\n if (iconNode == null) {\n throw new Error('[lucide]: iconNode is required when icon name is used');\n }\n\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...(aliases.length > 0 ? { aliases } : {}),\n };\n}\n", "/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) => {\n let out = '';\n let upperNext = false;\n\n for (const ch of string) {\n if (ch === '-' || ch === '_' || ch <= ' ') {\n upperNext = out.length > 0;\n continue;\n }\n\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n\n upperNext = false;\n }\n\n return out as string;\n};\n", "import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n", "/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n", "const defaultAttributes = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n} as const;\n\nexport default defaultAttributes;\n", "import type { LucideBuildParams, LucideIconData, LucideIconNode, SVGProps } from './types';\nimport defaultAttributes from './defaultAttributes';\nimport { mergeClasses } from '../utils/mergeClasses';\n\nfunction isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Creates a Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconNode(icon: LucideIconData, params: LucideBuildParams = {}): LucideIconNode {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName: string) =>\n attributeNames[attributeName] ?? attributeName;\n\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes['width'];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes['height'];\n const aliasClassNames =\n icon.aliases\n ?.filter((alias: string): alias is string => typeof alias === 'string' && alias.trim() !== '')\n .map((alias: string) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...(icon.name ? [`lucide-${icon.name}`] : []), ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(' ').filter(Boolean) ?? [];\n const className =\n params.includeDefaultClasses === false\n ? mergeClasses(...classNamesFromClassName)\n : mergeClasses('lucide', ...iconClassNames, ...classNamesFromClassName);\n\n const calculatedStrokeWidth = params.absoluteStrokeWidth\n ? (Number(params.strokeWidth ?? defaultAttributes['stroke-width']) *\n Number(icon.size ?? icon.width ?? defaultAttributes['width'])) /\n Number(params.size ?? params.width ?? defaultAttributes['width'])\n : (params.strokeWidth ?? defaultAttributes['stroke-width']);\n\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {} as SVGProps),\n ...('color' in params &&\n params.color && {\n [getAttributeName('stroke')]: params.color,\n }),\n ...('size' in params &&\n isDefined(params.size) && {\n [getAttributeName('width')]: params.size,\n [getAttributeName('height')]: params.size,\n }),\n ...('width' in params &&\n isDefined(params.width) && {\n [getAttributeName('width')]: params.width,\n }),\n ...('height' in params &&\n isDefined(params.height) && {\n [getAttributeName('height')]: params.height,\n }),\n [getAttributeName('stroke-width')]: calculatedStrokeWidth,\n ...(className && {\n [getAttributeName('class')]: className,\n }),\n [getAttributeName('viewBox')]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...(params.hasA11yProp === false\n ? {\n [getAttributeName('aria-hidden')]: 'true',\n }\n : {}),\n ...('attributes' in params && params.attributes),\n };\n\n return [\n 'svg',\n attributes,\n icon.node.map((child): LucideIconNode => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke\n ? { [getAttributeName('vector-effect')]: 'non-scaling-stroke', ...attrs }\n : attrs;\n\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n }),\n ];\n}\n\nexport default buildLucideIconNode;\n", "import buildLucideIconNode from './buildLucideIconNode';\nimport type { LucideBuildParams, LucideIconData, LucideIconNode } from './types';\n\n/**\n * Creates a React-compatible Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconForReact(\n icon: LucideIconData,\n params: LucideBuildParams = {},\n): LucideIconNode {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: 'className',\n 'stroke-width': 'strokeWidth',\n 'stroke-linecap': 'strokeLinecap',\n 'stroke-linejoin': 'strokeLinejoin',\n 'vector-effect': 'vectorEffect',\n },\n });\n}\n\nexport default buildLucideIconForReact;\n", "/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: object) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n", "'use client';\n\nimport { createContext, createElement, type ReactNode, useContext, useMemo } from 'react';\nimport { LucideProps } from './types';\n\ntype LucideConfig = {\n size: number;\n color: string;\n strokeWidth: number;\n /**\n * @deprecated Use `nonScalingStroke` instead.\n */\n absoluteStrokeWidth: boolean;\n nonScalingStroke: boolean;\n className: string;\n};\n\nconst LucideContext = createContext<LucideProps>({});\n\ntype LucideProviderProps = {\n children: ReactNode;\n} & Partial<LucideConfig>;\n\nexport function LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n}: LucideProviderProps) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className],\n );\n\n return createElement(LucideContext.Provider, { value }, children);\n}\n\nexport const useLucideContext = () => useContext(LucideContext);\n", "'use client';\n\nimport { createElement, forwardRef } from 'react';\nimport { buildLucideIconForReact, hasA11yProp, mergeClasses } from '@lucide/shared';\nimport { LucideIconData, LucideIconNode, LucideProps } from './types';\nimport { useLucideContext } from './context';\n\ntype IconComponentProps = LucideProps &\n (\n | {\n iconNode: LucideIconNode[];\n icon?: never;\n }\n | {\n icon: LucideIconData;\n iconNode?: never;\n }\n );\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {boolean} props.nonScalingStroke - Whether to use non scaling strokes\n * @param {string} props.className - The class name of the icon\n * @param {LucideIconNode[]} props.children - The children of the icon\n * @param {LucideIconNode[]} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = '',\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24,\n },\n ...rest\n },\n ref,\n ) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = 'currentColor',\n className: contextClass = '',\n } = useLucideContext() ?? {};\n\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest,\n });\n\n return createElement(\n name,\n {\n ref,\n ...svgAttributes,\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n", "import { createElement, forwardRef } from 'react';\nimport { toLucideIconData, toPascalCase } from '@lucide/shared';\nimport { LucideIcon, LucideIconData, LucideIconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Creates a Lucide icon component from icon data.\n *\n * @param icon Icon data object.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(icon: LucideIconData): LucideIcon;\n\n/**\n * Creates a Lucide icon component from the legacy icon arguments.\n *\n * @param iconName Icon name.\n * @param iconNode Icon node.\n * @param aliases Optional icon aliases.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases?: string[],\n): LucideIcon;\n\nfunction createLucideIcon(\n iconDataOrName: LucideIconData | string,\n iconNode: LucideIconNode[] = [],\n aliases: string[] = [],\n): LucideIcon {\n const iconData =\n typeof iconDataOrName === 'string'\n ? toLucideIconData(iconDataOrName, iconNode, aliases)\n : iconDataOrName;\n\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props,\n }),\n );\n\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n\n return Component;\n}\n\nexport default createLucideIcon;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'braces',\n size: 24,\n node: [\n [\n 'path',\n { d: 'M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1', key: 'ezmyqa' },\n ],\n [\n 'path',\n {\n d: 'M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1',\n key: 'e1hn23',\n },\n ],\n ],\n aliases: ['curly-braces'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Braces\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDdhMiAyIDAgMCAwLTIgMnY1YTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxIDIgMnY1YzAgMS4xLjkgMiAyIDJoMSIgLz4KICA8cGF0aCBkPSJNMTYgMjFoMWEyIDIgMCAwIDAgMi0ydi01YzAtMS4xLjktMiAyLTJhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMC0yLTJoLTEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/braces\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Braces = createLucideIcon(__iconData);\n\nexport default Braces;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'chevron-right',\n size: 24,\n node: [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon(__iconData);\n\nexport default ChevronRight;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'eye-off',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n key: 'ct8e1f',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242', key: '151rxh' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n key: '13bj9a',\n },\n ],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name EyeOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5IiAvPgogIDxwYXRoIGQ9Ik0xNC4wODQgMTQuMTU4YTMgMyAwIDAgMS00LjI0Mi00LjI0MiIgLz4KICA8cGF0aCBkPSJNMTcuNDc5IDE3LjQ5OWExMC43NSAxMC43NSAwIDAgMS0xNS40MTctNS4xNTEgMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSA0LjQ0Ni01LjE0MyIgLz4KICA8cGF0aCBkPSJtMiAyIDIwIDIwIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst EyeOff = createLucideIcon(__iconData);\n\nexport default EyeOff;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'eye',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n key: '1nclc0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Eye\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMi4wNjIgMTIuMzQ4YTEgMSAwIDAgMSAwLS42OTYgMTAuNzUgMTAuNzUgMCAwIDEgMTkuODc2IDAgMSAxIDAgMCAxIDAgLjY5NiAxMC43NSAxMC43NSAwIDAgMS0xOS44NzYgMCIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Eye = createLucideIcon(__iconData);\n\nexport default Eye;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-archive',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M13.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v11.5',\n key: '4pqfef',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M8 12v-1', key: '1ej8lb' }],\n ['path', { d: 'M8 18v-2', key: 'qcmpov' }],\n ['path', { d: 'M8 7V6', key: '1nbb54' }],\n ['circle', { cx: '8', cy: '20', r: '2', key: 'ckkr5m' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileArchive\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMuNjU5IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTEuNSIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNOCAxMnYtMSIgLz4KICA8cGF0aCBkPSJNOCAxOHYtMiIgLz4KICA8cGF0aCBkPSJNOCA3VjYiIC8+CiAgPGNpcmNsZSBjeD0iOCIgY3k9IjIwIiByPSIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-archive\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileArchive = createLucideIcon(__iconData);\n\nexport default FileArchive;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-code-corner',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35',\n key: '1wthlu',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'm5 16-3 3 3 3', key: '331omg' }],\n ['path', { d: 'm9 22 3-3-3-3', key: 'lsp7cz' }],\n ],\n aliases: ['file-code-2'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileCodeCorner\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNCAxMi4xNVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMy4zNSIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJtNSAxNi0zIDMgMyAzIiAvPgogIDxwYXRoIGQ9Im05IDIyIDMtMy0zLTMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/file-code-corner\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileCodeCorner = createLucideIcon(__iconData);\n\nexport default FileCodeCorner;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-cog',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M15 8a1 1 0 0 1-1-1V2a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8z',\n key: '1ckgky',\n },\n ],\n ['path', { d: 'M20 8v12a2 2 0 0 1-2 2h-4.182', key: '1726p0' }],\n ['path', { d: 'm3.305 19.53.923-.382', key: 'ao1pio' }],\n ['path', { d: 'M4 10.592V4a2 2 0 0 1 2-2h8', key: '1foop0' }],\n ['path', { d: 'm4.228 16.852-.924-.383', key: '1fv9zy' }],\n ['path', { d: 'm5.852 15.228-.383-.923', key: '1a9hc2' }],\n ['path', { d: 'm5.852 20.772-.383.924', key: '1sh9ke' }],\n ['path', { d: 'm8.148 15.228.383-.923', key: '4yu6lf' }],\n ['path', { d: 'm8.53 21.696-.382-.924', key: '18b0s9' }],\n ['path', { d: 'm9.773 16.852.922-.383', key: 'ti6xop' }],\n ['path', { d: 'm9.773 19.148.922.383', key: 'rws47d' }],\n ['circle', { cx: '7', cy: '18', r: '3', key: 'lvkj7j' }],\n ],\n aliases: ['file-cog-2'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileCog\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgOGExIDEgMCAwIDEtMS0xVjJhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4eiIgLz4KICA8cGF0aCBkPSJNMjAgOHYxMmEyIDIgMCAwIDEtMiAyaC00LjE4MiIgLz4KICA8cGF0aCBkPSJtMy4zMDUgMTkuNTMuOTIzLS4zODIiIC8+CiAgPHBhdGggZD0iTTQgMTAuNTkyVjRhMiAyIDAgMCAxIDItMmg4IiAvPgogIDxwYXRoIGQ9Im00LjIyOCAxNi44NTItLjkyNC0uMzgzIiAvPgogIDxwYXRoIGQ9Im01Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiAvPgogIDxwYXRoIGQ9Im01Ljg1MiAyMC43NzItLjM4My45MjQiIC8+CiAgPHBhdGggZD0ibTguMTQ4IDE1LjIyOC4zODMtLjkyMyIgLz4KICA8cGF0aCBkPSJtOC41MyAyMS42OTYtLjM4Mi0uOTI0IiAvPgogIDxwYXRoIGQ9Im05Ljc3MyAxNi44NTIuOTIyLS4zODMiIC8+CiAgPHBhdGggZD0ibTkuNzczIDE5LjE0OC45MjIuMzgzIiAvPgogIDxjaXJjbGUgY3g9IjciIGN5PSIxOCIgcj0iMyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file-cog\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileCog = createLucideIcon(__iconData);\n\nexport default FileCog;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-image',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['circle', { cx: '10', cy: '12', r: '2', key: '737tya' }],\n ['path', { d: 'm20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22', key: 'wt3hpn' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileImage\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8Y2lyY2xlIGN4PSIxMCIgY3k9IjEyIiByPSIyIiAvPgogIDxwYXRoIGQ9Im0yMCAxNy0xLjI5Ni0xLjI5NmEyLjQxIDIuNDEgMCAwIDAtMy40MDggMEw5IDIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-image\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileImage = createLucideIcon(__iconData);\n\nexport default FileImage;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-terminal',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'm8 16 2-2-2-2', key: '10vzyd' }],\n ['path', { d: 'M12 18h4', key: '1wd2n7' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileTerminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJtOCAxNiAyLTItMi0yIiAvPgogIDxwYXRoIGQ9Ik0xMiAxOGg0IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-terminal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileTerminal = createLucideIcon(__iconData);\n\nexport default FileTerminal;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-text',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M10 9H8', key: 'b1mrlr' }],\n ['path', { d: 'M16 13H8', key: 't4e002' }],\n ['path', { d: 'M16 17H8', key: 'z1uh3a' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FileText\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNMTAgOUg4IiAvPgogIDxwYXRoIGQ9Ik0xNiAxM0g4IiAvPgogIDxwYXRoIGQ9Ik0xNiAxN0g4IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-text\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileText = createLucideIcon(__iconData);\n\nexport default FileText;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name File\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst File = createLucideIcon(__iconData);\n\nexport default File;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'folder-open',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'm6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2',\n key: 'usdka0',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FolderOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiAxNCAxLjUtMi45QTIgMiAwIDAgMSA5LjI0IDEwSDIwYTIgMiAwIDAgMSAxLjk0IDIuNWwtMS41NCA2YTIgMiAwIDAgMS0xLjk1IDEuNUg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgxOGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-open\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderOpen = createLucideIcon(__iconData);\n\nexport default FolderOpen;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'folder',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Folder\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/folder\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Folder = createLucideIcon(__iconData);\n\nexport default Folder;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'palette',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z',\n key: 'e79jfc',\n },\n ],\n ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor', key: '1okk4w' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor', key: 'f64h9f' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor', key: 'qy21gx' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'fotxhn' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Palette\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMjJhMSAxIDAgMCAxIDAtMjAgMTAgOSAwIDAgMSAxMCA5IDUgNSAwIDAgMS01IDVoLTIuMjVhMS43NSAxLjc1IDAgMCAwLTEuNCAyLjhsLjMuNGExLjc1IDEuNzUgMCAwIDEtMS40IDIuOHoiIC8+CiAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjYuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KICA8Y2lyY2xlIGN4PSIxNy41IiBjeT0iMTAuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KICA8Y2lyY2xlIGN4PSI2LjUiIGN5PSIxMi41IiByPSIuNSIgZmlsbD0iY3VycmVudENvbG9yIiAvPgogIDxjaXJjbGUgY3g9IjguNSIgY3k9IjcuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/palette\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Palette = createLucideIcon(__iconData);\n\nexport default Palette;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'refresh-cw',\n size: 24,\n node: [\n ['path', { d: 'M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8', key: 'v9h5vc' }],\n ['path', { d: 'M21 3v5h-5', key: '1q7to0' }],\n ['path', { d: 'M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16', key: '3uifl3' }],\n ['path', { d: 'M8 16H3v5', key: '1cv678' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name RefreshCw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAwIDEgOS05IDkuNzUgOS43NSAwIDAgMSA2Ljc0IDIuNzRMMjEgOCIgLz4KICA8cGF0aCBkPSJNMjEgM3Y1aC01IiAvPgogIDxwYXRoIGQ9Ik0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgLz4KICA8cGF0aCBkPSJNOCAxNkgzdjUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/refresh-cw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCw = createLucideIcon(__iconData);\n\nexport default RefreshCw;\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"workspaceAccessible\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/rpc\", \"rpc\");\n", "import { rpc } from \"@ragents/web/rpc\";\nimport { workspaceContracts, type BrowseListing, type BrowsePreview, type BrowseRoot } from \"../contract\";\n\nexport const fetchBrowseListing = (runId: string, root: BrowseRoot, directory: string): Promise<BrowseListing> =>\n rpc.call(workspaceContracts.browse.list, { runId, root, path: directory });\n\nexport const fetchBrowsePreview = (runId: string, root: BrowseRoot, file: string): Promise<BrowsePreview> =>\n rpc.call(workspaceContracts.browse.preview, { runId, root, path: file });\n", "import {\n Braces,\n File,\n FileArchive,\n FileCode2,\n FileCog,\n FileImage,\n FileTerminal,\n FileText,\n Folder,\n FolderOpen,\n Palette,\n type LucideIcon,\n} from \"lucide-react\";\n\ntype FileTone = \"blue\" | \"yellow\" | \"green\" | \"teal\" | \"orange\" | \"pink\" | \"violet\" | \"red\" | \"muted\";\n\ninterface FileIconChoice {\n Icon: LucideIcon;\n tone: FileTone;\n}\n\nexport const fileToneClass: Readonly<Record<FileTone, string>> = {\n blue: \"text-info\",\n yellow: \"text-warning\",\n green: \"text-success\",\n teal: \"text-teal\",\n orange: \"text-[color-mix(in_srgb,var(--warning)_75%,var(--destructive))]\",\n pink: \"text-[color-mix(in_srgb,var(--destructive)_65%,var(--accent))]\",\n violet: \"text-primary\",\n red: \"text-destructive\",\n muted: \"text-muted-foreground\",\n};\n\nconst byExtension: Readonly<Record<string, FileIconChoice>> = {\n ts: { Icon: FileCode2, tone: \"blue\" },\n tsx: { Icon: FileCode2, tone: \"blue\" },\n mts: { Icon: FileCode2, tone: \"blue\" },\n cts: { Icon: FileCode2, tone: \"blue\" },\n js: { Icon: FileCode2, tone: \"yellow\" },\n jsx: { Icon: FileCode2, tone: \"yellow\" },\n mjs: { Icon: FileCode2, tone: \"yellow\" },\n cjs: { Icon: FileCode2, tone: \"yellow\" },\n cs: { Icon: FileCode2, tone: \"green\" },\n fs: { Icon: FileCode2, tone: \"teal\" },\n fsx: { Icon: FileCode2, tone: \"teal\" },\n py: { Icon: FileCode2, tone: \"green\" },\n json: { Icon: Braces, tone: \"yellow\" },\n md: { Icon: FileText, tone: \"violet\" },\n txt: { Icon: FileText, tone: \"muted\" },\n pdf: { Icon: FileText, tone: \"red\" },\n html: { Icon: FileCode2, tone: \"orange\" },\n htm: { Icon: FileCode2, tone: \"orange\" },\n hbs: { Icon: FileCode2, tone: \"orange\" },\n css: { Icon: Palette, tone: \"pink\" },\n png: { Icon: FileImage, tone: \"violet\" },\n jpg: { Icon: FileImage, tone: \"violet\" },\n jpeg: { Icon: FileImage, tone: \"violet\" },\n gif: { Icon: FileImage, tone: \"violet\" },\n webp: { Icon: FileImage, tone: \"violet\" },\n svg: { Icon: FileImage, tone: \"violet\" },\n ico: { Icon: FileImage, tone: \"violet\" },\n sh: { Icon: FileTerminal, tone: \"green\" },\n zsh: { Icon: FileTerminal, tone: \"green\" },\n bash: { Icon: FileTerminal, tone: \"green\" },\n yml: { Icon: FileCog, tone: \"muted\" },\n yaml: { Icon: FileCog, tone: \"muted\" },\n toml: { Icon: FileCog, tone: \"muted\" },\n ini: { Icon: FileCog, tone: \"muted\" },\n csproj: { Icon: FileCog, tone: \"blue\" },\n fsproj: { Icon: FileCog, tone: \"teal\" },\n sln: { Icon: FileCog, tone: \"blue\" },\n slnx: { Icon: FileCog, tone: \"blue\" },\n zip: { Icon: FileArchive, tone: \"orange\" },\n gz: { Icon: FileArchive, tone: \"orange\" },\n tar: { Icon: FileArchive, tone: \"orange\" },\n lock: { Icon: FileCog, tone: \"muted\" },\n};\n\nconst byName: Readonly<Record<string, FileIconChoice>> = {\n \"package.json\": { Icon: Braces, tone: \"green\" },\n \"pnpm-lock.yaml\": { Icon: FileCog, tone: \"muted\" },\n \"tsconfig.json\": { Icon: Braces, tone: \"blue\" },\n \".gitignore\": { Icon: FileCog, tone: \"muted\" },\n dockerfile: { Icon: FileCog, tone: \"teal\" },\n};\n\nexport const fileIconFor = (name: string, kind: \"directory\" | \"file\", open: boolean): FileIconChoice => {\n if (kind === \"directory\") return { Icon: open ? FolderOpen : Folder, tone: \"muted\" };\n const named = byName[name.toLowerCase()];\n if (named) return named;\n const extension = name.includes(\".\") ? name.toLowerCase().split(\".\").at(-1) ?? \"\" : \"\";\n return byExtension[extension] ?? { Icon: File, tone: \"muted\" };\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/SourceCode\", \"SourceCode\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"Fragment\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsxs\");\n", "import {\n Alert,\n Button,\n Empty,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n Toggle,\n} from \"@ragents/web/ui\";\nimport { useEffect, useRef, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { ChevronRight, Eye, EyeOff, FolderOpen, RefreshCw } from \"lucide-react\";\nimport { workspaceAccessible, type WorkspaceTabContext } from \"@ragents/web/PluginRegistry\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { BROWSE_ROOTS, workspaceContracts, type BrowseListing, type BrowsePreview, type BrowseRoot } from \"../contract\";\nimport { fetchBrowseListing, fetchBrowsePreview } from \"./api\";\nimport { fileIconFor, fileToneClass } from \"./file-icons\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\n\nconst rowClass = \"h-auto w-full justify-start gap-1.5 rounded-none py-[3px] pr-2.5 pl-(--row-indent) text-[0.7rem] font-normal data-selected:bg-primary/12 data-selected:text-primary\";\nconst previewSourceClass = \"min-w-0 px-2.5 pt-0 pb-2.5 text-xs leading-[1.45] whitespace-pre-wrap break-words\";\nconst indent = (depth: number) => ({ \"--row-indent\": `${8 + depth * 12}px` }) as CSSProperties;\n\nconst rootLabels: Readonly<Record<BrowseRoot, string>> = {\n workspace: \"Working directory\",\n files: \"File storage\",\n};\n\nconst emptyHints: Readonly<Record<BrowseRoot, string>> = {\n workspace: \"There is nothing in the run's working directory yet.\",\n files: \"There is nothing in the run's file storage yet.\",\n};\n\nconst messageOf = (cause: unknown): string => cause instanceof Error ? cause.message : String(cause);\n\nconst sizeLabel = (bytes: number): string => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n};\n\nconst timeLabel = (value: string): string => {\n const at = new Date(value);\n return Number.isNaN(at.getTime()) ? value : at.toLocaleString(\"en-US\");\n};\n\ninterface BrowserMemory {\n expanded: ReadonlySet<string>;\n selected: string | undefined;\n}\n\nexport function FileBrowserPanel({ active, session }: WorkspaceTabContext) {\n const runId = session.session.id;\n const treeMemory = useRef(new Map<string, BrowserMemory>());\n const reachable = workspaceAccessible(session.session);\n const roots: readonly BrowseRoot[] = reachable ? BROWSE_ROOTS : [\"files\"];\n const [chosenRoot, setRoot] = useState<BrowseRoot>(\"workspace\");\n const root: BrowseRoot = reachable ? chosenRoot : \"files\";\n const stateKey = `${runId}|${root}`;\n const [listings, setListings] = useState<ReadonlyMap<string, BrowseListing>>(() => new Map());\n const [expanded, setExpanded] = useState<ReadonlySet<string>>(() => new Set());\n const [selected, setSelected] = useState<string | undefined>();\n const [preview, setPreview] = useState<BrowsePreview>();\n const [error, setError] = useState<string>();\n const [pending, setPending] = useState(false);\n const [reload, setReload] = useState(0);\n const [showHidden, setShowHidden] = useState(false);\n\n const expandedRef = useRef(expanded);\n expandedRef.current = expanded;\n\n const keyRef = useRef(stateKey);\n useEffect(() => {\n if (keyRef.current === stateKey) return;\n keyRef.current = stateKey;\n const saved = treeMemory.current.get(stateKey);\n setListings(new Map());\n setExpanded(saved?.expanded ?? new Set());\n setSelected(saved?.selected);\n setPreview(undefined);\n setError(undefined);\n }, [stateKey]);\n\n useEffect(() => {\n treeMemory.current.set(stateKey, { expanded, selected });\n }, [expanded, root, runId, selected, stateKey]);\n\n useEffect(() => {\n if (!active || selected === undefined || preview !== undefined) return;\n let alive = true;\n void fetchBrowsePreview(runId, root, selected)\n .then((value) => alive && setPreview(value))\n .catch(() => alive && setSelected(undefined));\n return () => {\n alive = false;\n };\n }, [active, preview, root, runId, selected]);\n\n useEffect(() => {\n if (!active) return;\n let alive = true;\n let timer: number | undefined;\n let busy = false;\n\n const load = async (visible: boolean) => {\n if (busy) return;\n busy = true;\n if (visible) setPending(true);\n try {\n const targets = [\"\", ...expandedRef.current];\n const results = await Promise.all(targets.map(async (directory) => ({\n directory,\n listing: await fetchBrowseListing(runId, root, directory).catch((cause: unknown) =>\n directory === \"\" ? Promise.reject(cause) : null),\n })));\n if (!alive) return;\n const gone = results.filter((result) => result.listing === null).map((result) => result.directory);\n setListings(new Map(results\n .filter((result) => result.listing !== null)\n .map((result) => [result.directory, result.listing as BrowseListing])));\n if (gone.length > 0) {\n setExpanded((current) => new Set([...current].filter((directory) =>\n !gone.some((missing) => directory === missing || directory.startsWith(`${missing}/`)))));\n }\n setError(undefined);\n } catch (cause) {\n if (alive) setError(messageOf(cause));\n } finally {\n busy = false;\n if (alive) {\n if (visible) setPending(false);\n if (timer !== undefined) window.clearTimeout(timer);\n timer = window.setTimeout(() => void load(false), 30000);\n }\n }\n };\n\n const unsubscribe = rpc.subscribe(workspaceContracts.channels.browse, { runId, root }, () => void load(false));\n void load(true);\n return () => {\n alive = false;\n unsubscribe();\n if (timer !== undefined) window.clearTimeout(timer);\n };\n }, [active, reload, root, runId]);\n\n const toggleDirectory = (directory: string) => {\n setExpanded((current) => {\n const next = new Set(current);\n if (next.has(directory)) next.delete(directory);\n else next.add(directory);\n return next;\n });\n if (listings.has(directory)) return;\n setPending(true);\n void fetchBrowseListing(runId, root, directory)\n .then((listing) => {\n setListings((current) => new Map(current).set(directory, listing));\n setError(undefined);\n })\n .catch((cause: unknown) => setError(messageOf(cause)))\n .finally(() => setPending(false));\n };\n\n const openFile = (file: string) => {\n setSelected(file);\n setPreview(undefined);\n setPending(true);\n void fetchBrowsePreview(runId, root, file)\n .then((value) => {\n setPreview(value);\n setError(undefined);\n })\n .catch((cause: unknown) => setError(messageOf(cause)))\n .finally(() => setPending(false));\n };\n\n const renderLevel = (directory: string, depth: number): ReactNode => {\n const listing = listings.get(directory);\n if (!listing) return null;\n const visible = showHidden ? listing.entries : listing.entries.filter((entry) => !entry.name.startsWith(\".\"));\n return (\n <>\n {visible.map((entry) => {\n const full = directory ? `${directory}/${entry.name}` : entry.name;\n const open = expanded.has(full);\n const { Icon, tone } = fileIconFor(entry.name, entry.kind, open);\n return (\n <div key={full}>\n <Button\n className={rowClass}\n data-selected={selected === full}\n onClick={() => entry.kind === \"directory\" ? toggleDirectory(full) : openFile(full)}\n style={indent(depth)}\n title={`${entry.name} - ${sizeLabel(entry.size)} - ${timeLabel(entry.modifiedAt)}`}\n variant=\"ghost\"\n >\n <span className={`inline-flex w-3 flex-none items-center justify-center text-muted-foreground${open ? \" [&>svg]:rotate-90\" : \"\"}`}>\n {entry.kind === \"directory\" ? <ChevronRight size={11} strokeWidth={2} /> : null}\n </span>\n <Icon aria-hidden className={`flex-none ${fileToneClass[tone]}`} size={14} strokeWidth={1.7} />\n <span className=\"min-w-0 flex-1 truncate text-left font-mono\">{entry.name}</span>\n {entry.kind === \"file\" && <span className=\"flex-none text-[0.64rem] text-muted-foreground tabular-nums\">{sizeLabel(entry.size)}</span>}\n </Button>\n {entry.kind === \"directory\" && open && renderLevel(full, depth + 1)}\n </div>\n );\n })}\n {listing.truncated && (\n <div className=\"py-1 pr-2.5 pl-(--row-indent) text-[0.64rem] text-muted-foreground\" style={indent(depth)}>\n Further entries are not listed.\n </div>\n )}\n </>\n );\n };\n\n const rootListing = listings.get(\"\");\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <header className=\"flex items-center gap-2 px-2.5 py-2\">\n <div className=\"flex min-w-0 flex-1 gap-1\">\n {roots.map((value) => (\n <Toggle key={value} onPressedChange={() => setRoot(value)} pressed={value === root} size=\"sm\" variant=\"outline\">\n {rootLabels[value]}\n </Toggle>\n ))}\n </div>\n <div className=\"flex items-center gap-1\">\n <Toggle\n aria-label={showHidden ? \"Hide hidden entries\" : \"Show hidden entries\"}\n onPressedChange={setShowHidden}\n pressed={showHidden}\n size=\"sm\"\n title={showHidden ? \"Hide hidden entries\" : \"Show hidden entries\"}\n >\n {showHidden ? <Eye size={15} strokeWidth={1.8} /> : <EyeOff size={15} strokeWidth={1.8} />}\n </Toggle>\n <Button aria-label=\"Refresh files\" onClick={() => setReload((value) => value + 1)} size=\"icon\" title=\"Refresh\" variant=\"ghost\">\n <RefreshCw className={pending ? \"animate-spin\" : undefined} size={15} strokeWidth={1.8} />\n </Button>\n </div>\n </header>\n {error && (\n <Alert className=\"shrink-0 rounded-none border-x-0 border-t-0 border-b-border-soft bg-destructive/8 px-2.5 py-2 text-[0.68rem]\" variant=\"destructive\">\n {error}\n </Alert>\n )}\n {rootListing && <div className=\"truncate px-2.5 pt-0.5 pb-1.5 font-mono text-[0.66rem] text-muted-foreground\" title={rootListing.location}>{rootListing.location}</div>}\n {rootListing && rootListing.entries.length === 0 && (\n <Empty className=\"min-h-30 flex-none gap-2 p-7\">\n <EmptyHeader>\n <EmptyMedia><FolderOpen size={15} strokeWidth={1.7} /></EmptyMedia>\n <EmptyTitle>No files</EmptyTitle>\n <EmptyDescription>{emptyHints[root]}</EmptyDescription>\n </EmptyHeader>\n </Empty>\n )}\n <div className=\"min-h-0 flex-1 overflow-auto pb-2\">{renderLevel(\"\", 0)}</div>\n {selected && (\n <div className=\"flex min-h-0 flex-1 flex-col border-t border-border-soft\">\n <div className=\"truncate px-2.5 py-1.5 font-mono text-[0.66rem] text-muted-foreground\" title={selected}>{selected}</div>\n {preview && !preview.previewable && <div className=\"px-2.5 pb-2 text-[0.68rem] text-muted-foreground\">{preview.reason}</div>}\n {preview && preview.previewable && (\n <div className=\"min-h-0 flex-1 overflow-auto\">\n <SourceCode className={previewSourceClass} content={preview.content} path={selected} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarCopy\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarText\");\n", "import { useId, useMemo, useState } from \"react\";\nimport { FolderIcon } from \"lucide-react\";\nimport { Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@ragents/web/ui\";\nimport { ToolbarCopy, ToolbarItem, ToolbarLabel, ToolbarText } from \"@ragents/web/Toolbar\";\nimport type {\n SessionMetadataContext,\n StartOptionBadgeContext,\n StartOptionControlContext,\n} from \"@ragents/web/PluginRegistry\";\nimport {\n FRESH_WORKSPACE_LABEL,\n isFreshFolder,\n isWorkspaceBinding,\n storedWorkspaceBinding,\n workspaceBindingSummary,\n WORKSPACE_METADATA_ID,\n type FreshWorkspaceLabels,\n type WorkspaceBinding,\n type WorkspaceBindingPresentation,\n type WorkspaceClientInfo,\n type WorkspaceSessionMetadata,\n} from \"../contract\";\n\nexport interface BindingChoice {\n value: string;\n label: string;\n}\n\ntype FolderChoice = \"fresh\" | \"existing\";\n\nconst SERVER = \"server\";\n\nconst errorClass = \"text-[0.75rem] text-destructive\";\n\nconst labelClass = \"text-[0.66rem] font-medium text-muted-foreground\";\n\nconst messageOf = (cause: unknown): string => cause instanceof Error ? cause.message : String(cause);\n\nconst isClientInfo = (value: unknown): value is WorkspaceClientInfo => {\n const raw = value as Record<string, unknown> | null;\n return typeof raw === \"object\" && raw !== null\n && typeof raw.id === \"string\" && typeof raw.label === \"string\"\n && typeof raw.hostname === \"string\" && typeof raw.platform === \"string\"\n && Array.isArray(raw.folders) && raw.folders.every((folder) => typeof folder === \"string\")\n && typeof raw.runsDirectory === \"string\" && typeof raw.ripgrep === \"boolean\";\n};\n\nconst isFreshLabels = (value: unknown): value is FreshWorkspaceLabels => {\n const raw = value as Record<string, unknown> | null;\n return typeof raw === \"object\" && raw !== null && typeof raw.server === \"string\"\n && (raw.client === null || typeof raw.client === \"string\");\n};\n\nconst presentationFrom = (presentation: unknown, optionId: string): WorkspaceBindingPresentation => {\n const raw = presentation as Record<string, unknown> | null;\n if (typeof raw !== \"object\" || raw === null || raw.kind !== \"workspace-binding\"\n || !Array.isArray(raw.clients) || !raw.clients.every(isClientInfo)\n || !isFreshLabels(raw.fresh) || typeof raw.serverFolders !== \"boolean\") {\n throw new Error(`The start option ${optionId} does not provide a workspace presentation`);\n }\n return { kind: \"workspace-binding\", clients: raw.clients, fresh: raw.fresh, serverFolders: raw.serverFolders };\n};\n\n/** Also a frozen value from an older journal; the same mapping as on the server. */\nconst bindingFrom = (value: unknown, optionId: string): WorkspaceBinding => {\n const binding = storedWorkspaceBinding(value);\n if (!binding) throw new Error(`The value of the start option ${optionId} is not a workspace binding`);\n return binding;\n};\n\nconst machineOf = (binding: WorkspaceBinding): string => binding.machine === SERVER ? SERVER : binding.machine.client;\n\nconst folderOf = (binding: WorkspaceBinding): FolderChoice => isFreshFolder(binding.folder) ? \"fresh\" : \"existing\";\n\nconst pathOf = (binding: WorkspaceBinding): string => {\n const { folder } = binding;\n return isFreshFolder(folder) ? \"\" : folder.path;\n};\n\n/** A new folder on a workstation is the same choice, whether already frozen with a path or not. */\nconst sameBinding = (left: WorkspaceBinding, right: WorkspaceBinding): boolean =>\n machineOf(left) === machineOf(right) && folderOf(left) === folderOf(right) && pathOf(left) === pathOf(right);\n\n/** The server, the connected workstations only where the host offers them, and an already chosen workstation so that the choice stays readable. */\nexport const workspaceMachineChoices = (\n presentation: WorkspaceBindingPresentation,\n binding: WorkspaceBinding,\n machines: StartOptionControlContext[\"machines\"],\n): BindingChoice[] => {\n const { machine } = binding;\n const clients = machines === \"all\" ? presentation.clients : [];\n const current = machine === SERVER || clients.some((client) => client.id === machine.client) ? []\n : [{ value: machine.client, label: presentation.clients.some((client) => client.id === machine.client)\n ? `Workstation ${machine.label}` : `Workstation ${machine.label} (not connected)` }];\n return [\n { value: SERVER, label: \"Server\" },\n ...clients.map((client) => ({ value: client.id, label: `Workstation ${client.label}` })),\n ...current,\n ];\n};\n\n/** On the server, the new folder always exists, an existing one only without a contribution that excludes it; on a workstation the other way around. */\nexport const workspaceFolderChoices = (presentation: WorkspaceBindingPresentation, machine: string): BindingChoice[] => {\n const existing = { value: \"existing\", label: \"Existing folder\" };\n if (machine === SERVER) {\n return [{ value: \"fresh\", label: presentation.fresh.server }, ...(presentation.serverFolders ? [existing] : [])];\n }\n return [...(presentation.fresh.client === null ? [] : [{ value: \"fresh\", label: presentation.fresh.client }]), existing];\n};\n\nexport const workspaceMetadataFrom = (value: unknown): WorkspaceSessionMetadata | undefined => {\n const raw = value as Record<string, unknown> | null;\n if (typeof raw !== \"object\" || raw === null || typeof raw.summary !== \"string\" || !isWorkspaceBinding(raw.binding)) {\n return undefined;\n }\n return { binding: raw.binding, summary: raw.summary };\n};\n\nconst parse = (option: StartOptionControlContext[\"option\"]) => {\n try {\n return {\n presentation: presentationFrom(option.presentation, option.id),\n binding: bindingFrom(option.value, option.id),\n };\n } catch (cause) {\n return { message: messageOf(cause) };\n }\n};\n\nexport function WorkspaceBindingControl({ disabled, error, machines: offeredMachines, option, setValue }: StartOptionControlContext) {\n const [machineDraft, setMachine] = useState<string | undefined>(undefined);\n const [folderDraft, setFolder] = useState<FolderChoice | undefined>(undefined);\n const [draft, setDraft] = useState<string | undefined>(undefined);\n const pathId = useId();\n const parsed = useMemo(() => parse(option), [option]);\n if (\"message\" in parsed) return <p className={errorClass} role=\"alert\">{parsed.message}</p>;\n const { presentation, binding } = parsed;\n\n const machine = machineDraft ?? machineOf(binding);\n const folder = folderDraft ?? folderOf(binding);\n const path = draft ?? pathOf(binding);\n const machines = workspaceMachineChoices(presentation, binding, offeredMachines);\n const folderChoices = workspaceFolderChoices(presentation, machine);\n const client = presentation.clients.find((entry) => entry.id === machine);\n const offered = folder === \"existing\" ? client?.folders.map((entry) => ({ value: entry, label: entry })) ?? [] : [];\n\n const bindingOf = (nextMachine: string, nextFolder: FolderChoice, nextPath: string): WorkspaceBinding | undefined => {\n const label = presentation.clients.find((entry) => entry.id === nextMachine)?.label\n ?? (binding.machine !== SERVER && binding.machine.client === nextMachine ? binding.machine.label : nextMachine);\n const where = nextMachine === SERVER ? SERVER : { client: nextMachine, label };\n if (nextFolder === \"fresh\") return { machine: where, folder: \"fresh\" };\n return nextPath === \"\" ? undefined : { machine: where, folder: { path: nextPath } };\n };\n\n const commit = (nextMachine: string, nextFolder: FolderChoice, nextPath: string) => {\n const next = bindingOf(nextMachine, nextFolder, nextPath);\n if (next && !sameBinding(next, binding)) void setValue(next);\n };\n\n const chooseMachine = (next: string) => {\n const available = workspaceFolderChoices(presentation, next).map((choice) => choice.value as FolderChoice);\n const nextFolder = available.includes(folder) ? folder : available[0]!;\n const nextPath = path === \"\" ? presentation.clients.find((entry) => entry.id === next)?.folders[0] ?? \"\" : path;\n setMachine(next);\n setFolder(nextFolder);\n setDraft(nextPath);\n commit(next, nextFolder, nextPath);\n };\n\n const chooseFolder = (next: FolderChoice) => {\n const nextPath = path === \"\" ? client?.folders[0] ?? \"\" : path;\n setFolder(next);\n setDraft(nextPath);\n commit(machine, next, nextPath);\n };\n\n const chooseOffered = (next: string) => {\n setDraft(next);\n commit(machine, folder, next);\n };\n\n return (\n <div className=\"flex w-full flex-col items-start gap-2\">\n <span className=\"text-[0.72rem] font-semibold text-muted-foreground\">Workspace</span>\n <div className=\"flex w-full flex-wrap items-end gap-2\">\n <div className=\"flex flex-col gap-1\">\n <span className={labelClass}>Machine</span>\n <Select disabled={disabled} items={machines} onValueChange={(next) => { if (next !== null) chooseMachine(next); }} value={machine}>\n <SelectTrigger aria-label=\"Workspace machine\" className=\"min-w-0 max-w-full\" size=\"sm\"><SelectValue /></SelectTrigger>\n <SelectContent>{machines.map((choice) => <SelectItem key={choice.value} value={choice.value}>{choice.label}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className={labelClass}>Folder</span>\n <Select disabled={disabled} items={folderChoices} onValueChange={(next) => { if (next !== null) chooseFolder(next as FolderChoice); }} value={folder}>\n <SelectTrigger aria-label=\"Workspace folder\" className=\"min-w-0 max-w-full\" size=\"sm\"><SelectValue /></SelectTrigger>\n <SelectContent>{folderChoices.map((choice) => <SelectItem key={choice.value} value={choice.value}>{choice.label}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n {folder === \"existing\" && (\n <div className=\"flex min-w-[15rem] flex-1 flex-col gap-1\">\n <Label className={labelClass} htmlFor={pathId}>Absolute path</Label>\n <Input\n className=\"h-7 text-sm\"\n disabled={disabled}\n id={pathId}\n onBlur={() => commit(machine, folder, path)}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={(event) => { if (event.key === \"Enter\") commit(machine, folder, path); }}\n placeholder=\"/Users/name/project\"\n value={path}\n />\n </div>\n )}\n {offered.length > 0 && (\n <div className=\"flex flex-col gap-1\">\n <span className={labelClass}>Offered folder</span>\n <Select disabled={disabled} items={offered} onValueChange={(next) => { if (next !== null) chooseOffered(next); }} value={offered.some((entry) => entry.value === path) ? path : null}>\n <SelectTrigger aria-label=\"Offered folder\" className=\"min-w-0 max-w-full\" size=\"sm\"><SelectValue placeholder=\"Apply\" /></SelectTrigger>\n <SelectContent>{offered.map((entry) => <SelectItem key={entry.value} value={entry.value}>{entry.label}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n )}\n </div>\n {error && <p className={errorClass} role=\"alert\">{error}</p>}\n </div>\n );\n}\n\nconst freshLabelsOf = (presentation: unknown): FreshWorkspaceLabels => {\n const raw = presentation as Record<string, unknown> | null;\n return typeof raw === \"object\" && raw !== null && isFreshLabels(raw.fresh) ? raw.fresh : { server: FRESH_WORKSPACE_LABEL, client: FRESH_WORKSPACE_LABEL };\n};\n\nexport function WorkspaceBindingBadge({ option }: StartOptionBadgeContext) {\n if (!option.locked) return null;\n let binding: WorkspaceBinding;\n try {\n binding = bindingFrom(option.value, option.id);\n } catch (cause) {\n return <ToolbarItem title={messageOf(cause)}><ToolbarText>Workspace unreadable</ToolbarText></ToolbarItem>;\n }\n const summary = workspaceBindingSummary(binding, freshLabelsOf(option.presentation));\n return (\n <ToolbarItem title={`Workspace: ${summary}`}>\n <ToolbarCopy><ToolbarLabel>Workspace</ToolbarLabel><ToolbarText>{summary}</ToolbarText></ToolbarCopy>\n </ToolbarItem>\n );\n}\n\nexport function WorkspaceMetadata({ placement, session }: SessionMetadataContext) {\n const metadata = workspaceMetadataFrom(session.metadata?.[WORKSPACE_METADATA_ID]);\n if (!metadata) return null;\n if (placement === \"list\") {\n const { machine, folder } = metadata.binding;\n if (machine === \"server\" && folder === \"fresh\") return null;\n return (\n <span className=\"flex max-w-full items-center gap-1.5 overflow-hidden pl-px text-xs text-muted-foreground\" title={`Workspace: ${metadata.summary}`}>\n <FolderIcon aria-hidden className=\"size-3 flex-none\" />\n <span className=\"truncate\">{metadata.summary}</span>\n </span>\n );\n }\n return (\n <ToolbarItem title={`Workspace: ${metadata.summary}`}>\n <FolderIcon aria-hidden className=\"size-3.5\" />\n <ToolbarCopy><ToolbarLabel>Workspace</ToolbarLabel><ToolbarText>{metadata.summary}</ToolbarText></ToolbarCopy>\n </ToolbarItem>\n );\n}\n", "import type { WebPlugin } from \"@ragents/web/PluginRegistry\";\nimport { WORKSPACE_BINDING_OPTION_ID, WORKSPACE_PLUGIN_ID } from \"../contract\";\nimport { FileBrowserPanel } from \"./FileBrowser\";\nimport { WorkspaceBindingBadge, WorkspaceBindingControl, WorkspaceMetadata } from \"./WorkspaceBinding\";\n\nexport const WORKSPACE_FILES_TAB_ID = \"ragents.workspace.files\";\n\nfunction IconFiles() {\n return (\n <svg aria-hidden fill=\"none\" height=\"15\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.7\" viewBox=\"0 0 24 24\" width=\"15\">\n <path d=\"M3 6.5A1.5 1.5 0 0 1 4.5 5h4L10 7h9.5A1.5 1.5 0 0 1 21 8.5v9a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 3 17.5z\" />\n <path d=\"M3 11h18\" />\n </svg>\n );\n}\n\nexport const webPlugin: WebPlugin = {\n id: WORKSPACE_PLUGIN_ID,\n workspaceTabs: [{\n readRight: \"runs.inspect\",\n id: WORKSPACE_FILES_TAB_ID,\n label: \"Files\",\n order: 260,\n Icon: IconFiles,\n Panel: FileBrowserPanel,\n }],\n startOptions: [{\n id: WORKSPACE_BINDING_OPTION_ID,\n Control: WorkspaceBindingControl,\n Badge: WorkspaceBindingBadge,\n }],\n sessionMetadata: [{\n id: \"ragents.workspace.binding\",\n order: 90,\n Metadata: WorkspaceMetadata,\n }],\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["read", "specifier", "name", "module", "typebox_Type_default", "read", "contracts_openJson_default", "read", "contract_defineChannel_default", "read", "contract_defineOperation_default", "read", "WORKSPACE_PLUGIN_ID", "BROWSE_ROOTS", "WORKSPACE_BINDING_OPTION_ID", "WORKSPACE_METADATA_ID", "freshServerBinding", "WORKSPACE_CLIENT_ID_PATTERN", "clientId", "typebox_Type_default", "executorVersion", "PLUGIN_ID_PATTERN", "executorContributions", "clientDescription", "clientInfoSchema", "clientRegistrationSchema", "otherExecutorRegistration", "absolutePath", "workspaceClientContracts", "contract_defineOperation_default", "typebox_Type_default", "absolutePath", "browseTarget", "workspaceContracts", "contracts_openJson_default", "contract_defineChannel_default", "clientInfoSchema", "clientDescription", "executorVersion", "executorContributions", "clientRegistrationSchema", "otherExecutorRegistration", "clientId", "isRecord", "value", "hasExactly", "keys", "key", "isMachine", "WORKSPACE_CLIENT_ID_PATTERN", "isFolder", "isWorkspaceBinding", "isFreshFolder", "folder", "fromKind", "freshServerBinding", "storedWorkspaceBinding", "mapped", "FRESH_WORKSPACE_LABEL", "freshLabelOf", "binding", "labels", "workspaceBindingSummary", "machine", "fresh", "where", "ui_Alert_default", "read", "ui_Button_default", "read", "ui_Empty_default", "read", "ui_EmptyDescription_default", "read", "ui_EmptyHeader_default", "read", "ui_EmptyMedia_default", "read", "ui_EmptyTitle_default", "read", "ui_Input_default", "read", "ui_Label_default", "read", "ui_Select_default", "read", "ui_SelectContent_default", "read", "ui_SelectItem_default", "read", "ui_SelectTrigger_default", "read", "ui_SelectValue_default", "read", "ui_Toggle_default", "read", "react_createContext_default", "read", "react_createElement_default", "read", "react_forwardRef_default", "read", "react_useContext_default", "read", "react_useEffect_default", "read", "react_useId_default", "read", "react_useMemo_default", "read", "react_useRef_default", "read", "react_useState_default", "read", "toKebabCase", "string", "toLucideIconData", "iconName", "iconNode", "aliases", "toKebabCase", "toCamelCase", "string", "out", "upperNext", "ch", "toPascalCase", "string", "camelCase", "toCamelCase", "mergeClasses", "classes", "className", "index", "array", "defaultAttributes", "isDefined", "value", "buildLucideIconNode", "icon", "params", "attributeNames", "getAttributeName", "attributeName", "viewBoxWidth", "defaultAttributes", "viewBoxHeight", "aliasClassNames", "alias", "iconClassNames", "classNamesFromClassName", "className", "mergeClasses", "calculatedStrokeWidth", "attrs", "attrName", "child", "name", "children", "nextAttrs", "buildLucideIconForReact", "icon", "params", "buildLucideIconNode", "hasA11yProp", "props", "prop", "LucideContext", "react_createContext_default", "useLucideContext", "react_useContext_default", "LucideContext", "Icon", "react_forwardRef_default", "color", "size", "width", "height", "strokeWidth", "absoluteStrokeWidth", "nonScalingStroke", "className", "children", "iconNode", "icon", "rest", "ref", "contextSize", "contextStrokeWidth", "contextAbsoluteStrokeWidth", "contextNonScalingStroke", "contextColor", "contextClass", "useLucideContext", "hasAccessibleProp", "hasA11yProp", "name", "svgAttributes", "builtIconNode", "buildLucideIconForReact", "mergeClasses", "react_createElement_default", "tag", "attrs", "createLucideIcon", "iconDataOrName", "iconNode", "aliases", "iconData", "toLucideIconData", "Component", "react_forwardRef_default", "className", "props", "ref", "react_createElement_default", "Icon", "toPascalCase", "__iconData", "Braces", "createLucideIcon", "__iconData", "ChevronRight", "createLucideIcon", "__iconData", "EyeOff", "createLucideIcon", "__iconData", "Eye", "createLucideIcon", "__iconData", "FileArchive", "createLucideIcon", "__iconData", "FileCodeCorner", "createLucideIcon", "__iconData", "FileCog", "createLucideIcon", "__iconData", "FileImage", "createLucideIcon", "__iconData", "FileTerminal", "createLucideIcon", "__iconData", "FileText", "createLucideIcon", "__iconData", "File", "createLucideIcon", "__iconData", "FolderOpen", "createLucideIcon", "__iconData", "Folder", "createLucideIcon", "__iconData", "Palette", "createLucideIcon", "__iconData", "RefreshCw", "createLucideIcon", "PluginRegistry_workspaceAccessible_default", "read", "rpc_rpc_default", "read", "fetchBrowseListing", "runId", "root", "directory", "rpc_rpc_default", "workspaceContracts", "fetchBrowsePreview", "file", "fileToneClass", "byExtension", "FileCodeCorner", "Braces", "FileText", "Palette", "FileImage", "FileTerminal", "FileCog", "FileArchive", "byName", "fileIconFor", "name", "kind", "open", "FolderOpen", "Folder", "named", "extension", "File", "SourceCode_SourceCode_default", "read", "jsx_runtime_Fragment_default", "read", "jsx_runtime_jsx_default", "read", "jsx_runtime_jsxs_default", "read", "rowClass", "previewSourceClass", "indent", "depth", "rootLabels", "emptyHints", "messageOf", "cause", "sizeLabel", "bytes", "timeLabel", "value", "at", "FileBrowserPanel", "active", "session", "runId", "treeMemory", "react_useRef_default", "reachable", "PluginRegistry_workspaceAccessible_default", "roots", "BROWSE_ROOTS", "chosenRoot", "setRoot", "react_useState_default", "root", "stateKey", "listings", "setListings", "expanded", "setExpanded", "selected", "setSelected", "preview", "setPreview", "error", "setError", "pending", "setPending", "reload", "setReload", "showHidden", "setShowHidden", "expandedRef", "keyRef", "react_useEffect_default", "saved", "alive", "fetchBrowsePreview", "timer", "busy", "load", "visible", "targets", "results", "directory", "fetchBrowseListing", "gone", "result", "current", "missing", "unsubscribe", "rpc_rpc_default", "workspaceContracts", "toggleDirectory", "next", "listing", "openFile", "file", "renderLevel", "entry", "jsx_runtime_jsxs_default", "jsx_runtime_Fragment_default", "full", "open", "Icon", "tone", "fileIconFor", "ui_Button_default", "jsx_runtime_jsx_default", "ChevronRight", "fileToneClass", "rootListing", "ui_Toggle_default", "Eye", "EyeOff", "RefreshCw", "ui_Alert_default", "ui_Empty_default", "ui_EmptyHeader_default", "ui_EmptyMedia_default", "FolderOpen", "ui_EmptyTitle_default", "ui_EmptyDescription_default", "SourceCode_SourceCode_default", "Toolbar_ToolbarCopy_default", "read", "Toolbar_ToolbarItem_default", "read", "Toolbar_ToolbarLabel_default", "read", "Toolbar_ToolbarText_default", "read", "SERVER", "errorClass", "labelClass", "messageOf", "cause", "isClientInfo", "value", "raw", "folder", "isFreshLabels", "presentationFrom", "presentation", "optionId", "bindingFrom", "binding", "storedWorkspaceBinding", "machineOf", "folderOf", "isFreshFolder", "pathOf", "sameBinding", "left", "right", "workspaceMachineChoices", "machines", "machine", "clients", "current", "client", "workspaceFolderChoices", "existing", "workspaceMetadataFrom", "isWorkspaceBinding", "parse", "option", "WorkspaceBindingControl", "disabled", "error", "offeredMachines", "setValue", "machineDraft", "setMachine", "react_useState_default", "folderDraft", "setFolder", "draft", "setDraft", "pathId", "react_useId_default", "parsed", "react_useMemo_default", "jsx_runtime_jsx_default", "path", "folderChoices", "entry", "offered", "bindingOf", "nextMachine", "nextFolder", "nextPath", "label", "where", "commit", "next", "chooseMachine", "available", "choice", "chooseFolder", "chooseOffered", "jsx_runtime_jsxs_default", "ui_Select_default", "ui_SelectTrigger_default", "ui_SelectValue_default", "ui_SelectContent_default", "ui_SelectItem_default", "ui_Label_default", "ui_Input_default", "event", "freshLabelsOf", "FRESH_WORKSPACE_LABEL", "WorkspaceBindingBadge", "Toolbar_ToolbarItem_default", "Toolbar_ToolbarText_default", "summary", "workspaceBindingSummary", "Toolbar_ToolbarCopy_default", "Toolbar_ToolbarLabel_default", "WorkspaceMetadata", "placement", "session", "metadata", "WORKSPACE_METADATA_ID", "Folder", "WORKSPACE_FILES_TAB_ID", "IconFiles", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "webPlugin", "WORKSPACE_PLUGIN_ID", "FileBrowserPanel", "WORKSPACE_BINDING_OPTION_ID", "WorkspaceBindingControl", "WorkspaceBindingBadge", "WorkspaceMetadata"]
7
7
  }