@openhands/agent-canvas 1.13.0 → 1.15.0

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 (1688) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/acp-providers-BKvmTf82.js +1 -0
  4. package/build/assets/active-backend-context-DKFSMbn3.js +2 -0
  5. package/build/assets/agent-context-settings-D3PjSTU1.js +1 -0
  6. package/build/assets/agent-profiles-settings-D4cY5U2T.js +1 -0
  7. package/build/assets/agent-server-conversation-service.api-DozDKIW_.js +86 -0
  8. package/build/assets/agent-settings-351vXWc9.js +2 -0
  9. package/build/assets/agent-settings-Ce7BDZ6I.js +1 -0
  10. package/build/assets/alert-banner-Kyy1YWZU.js +1 -0
  11. package/build/assets/api-error-message-BJyfWp6p.js +1 -0
  12. package/build/assets/api-key-entry-screen-INIxqAMs.js +1 -0
  13. package/build/assets/app-settings-CbHqzQus.js +1 -0
  14. package/build/assets/automation-detail-DXDhUwPq.js +3 -0
  15. package/build/assets/automation-export-BRopEHMu.js +2 -0
  16. package/build/assets/automation-git-sync-CzyS4cn1.js +1 -0
  17. package/build/assets/automation-setup-route-FRr05f_g.js +1 -0
  18. package/build/assets/automation-templates-C_0FZgLG.js +1 -0
  19. package/build/assets/automations-list-CERuQWE6.js +1 -0
  20. package/build/assets/back-nav-button-Dm9tIjVf.js +1 -0
  21. package/build/assets/backend-form-modal-DK78-jn1.js +1 -0
  22. package/build/assets/backend-synced-settings-badge-3fOwg6Bd.js +1 -0
  23. package/build/assets/badge-D4SqUCsR.js +1 -0
  24. package/build/assets/base-modal-C7_BDl_U.js +1 -0
  25. package/build/assets/bot-C-0Wu7vQ.js +1 -0
  26. package/build/assets/brand-button-Dxv6PDeN.js +1 -0
  27. package/build/assets/browser-11etCQ04.js +7 -0
  28. package/build/assets/browser-tab-BAl4ckJE.js +1 -0
  29. package/build/assets/chat-send-button-DWwR2cgI.js +1 -0
  30. package/build/assets/check-Cf2YoT90.js +1 -0
  31. package/build/assets/chevron-down-C3OQ-ehx.js +1 -0
  32. package/build/assets/chevron-right-CN1uUiJ1.js +1 -0
  33. package/build/assets/circle-check-g5yeGMd-.js +1 -0
  34. package/build/assets/circle-plus-check-toggle-CBh_qomE.js +1 -0
  35. package/build/assets/cloud-funnel-analytics-287iIERo.js +1 -0
  36. package/build/assets/cog-C4rrw-ZK.js +1 -0
  37. package/build/assets/command-menu-BZQ8S3Ke.js +1 -0
  38. package/build/assets/commits-tab-DZtJgaDM.js +1 -0
  39. package/build/assets/condenser-settings-BcNmYR4s.js +1 -0
  40. package/build/assets/confirmation-modal-Bk4JRcCM.js +1 -0
  41. package/build/assets/context-menu-list-item-lVYETtY5.js +1 -0
  42. package/build/assets/conversation-CchMzpGl.js +1 -0
  43. package/build/assets/conversation-Dpzftz57.js +93 -0
  44. package/build/assets/conversation-panel-CchMzpGl.js +1 -0
  45. package/build/assets/conversation-state-store-a9d2fxRc.js +1 -0
  46. package/build/assets/conversation-store-Ca3ghXap.js +6 -0
  47. package/build/assets/conversation-tab-empty-state-HJtkmHZj.js +1 -0
  48. package/build/assets/copy-to-clipboard-button-Cjkswvnj.js +1 -0
  49. package/build/assets/device-verify-EZhHhBT7.js +1 -0
  50. package/build/assets/dropdown-classes-DJe-E6MC.js +1 -0
  51. package/build/assets/edit-automation-modal-D-urtv8n.js +1 -0
  52. package/build/assets/empty-state-CvaVahVr.js +1 -0
  53. package/build/assets/entry.client-C7Bi2tkU.js +2 -0
  54. package/build/assets/enum-filter-dropdown-DliX_Lo0.js +1 -0
  55. package/build/assets/environment-switch-overlay-CEKrFiMw.js +1 -0
  56. package/build/assets/error-state-BALXiBNy.js +1 -0
  57. package/build/assets/extension-module-card-classes-DpeaYhYo.js +1 -0
  58. package/build/assets/extensions-hub-CFduxBnk.js +1 -0
  59. package/build/assets/extensions-navigation-BeC224yX.js +1 -0
  60. package/build/assets/external-link-DFpYunfj.js +1 -0
  61. package/build/assets/files-tab-CL3J9b3p.js +1 -0
  62. package/build/assets/form-control-classes-CGw40z5h.js +1 -0
  63. package/build/assets/format-model-name-BNPKVsIq.js +1 -0
  64. package/build/assets/get-git-path-DlAJa_i6.js +1 -0
  65. package/build/assets/git-repo-dropdown-DGMEhz7d.js +1 -0
  66. package/build/assets/git-repo-dropdown-ai8qaNkD.js +1 -0
  67. package/build/assets/highlighted-source-view-C3sxykQi.js +1 -0
  68. package/build/assets/home-BCGlNJCA.js +1 -0
  69. package/build/assets/home-DB1pRqTC.js +1 -0
  70. package/build/assets/home-automation-run-tooltip-CooFQRIG.js +1 -0
  71. package/build/assets/home-store-Dl1dPE58.js +1 -0
  72. package/build/assets/index-home-DB1pRqTC.js +1 -0
  73. package/build/assets/info-uYSVzX86.js +1 -0
  74. package/build/assets/install-server-modal-BbJdhzet.js +1 -0
  75. package/build/assets/kebab-menu-item-content-BYokkRHi.js +1 -0
  76. package/build/assets/key-Cn5za3rg.js +1 -0
  77. package/build/assets/launch-C1ieiOGe.js +1 -0
  78. package/build/assets/list-filter-OFkpRrmi.js +1 -0
  79. package/build/assets/list-todo-Cuu-STFc.js +1 -0
  80. package/build/assets/llm-not-configured-banner-BqqYnJ1t.js +27 -0
  81. package/build/assets/llm-settings-CnDbbmVW.js +1 -0
  82. package/build/assets/llm-settings-S8Yjg__1.js +1 -0
  83. package/build/assets/llm-subscription-service-BpPfzW4x.js +1 -0
  84. package/build/assets/loader-circle-nvrwthvj.js +1 -0
  85. package/build/assets/loading-spinner-0L3ZTToZ.js +1 -0
  86. package/build/assets/manage-backends-modal-BCUPswyl.js +1 -0
  87. package/build/assets/manifest-58597dde.js +1 -0
  88. package/build/assets/manifest-subpage-layout-BGhiUQbA.js +1 -0
  89. package/build/assets/map-provider-B9LTm23I.js +1 -0
  90. package/build/assets/markdown-renderer-Cb2sBWtV.js +8 -0
  91. package/build/assets/mcp-CKbR4Vft.js +1 -0
  92. package/build/assets/mcp-marketplace-utils-C13fFccR.js +1 -0
  93. package/build/assets/mcp-page-Bm4K2NQq.js +9 -0
  94. package/build/assets/messages-BTN5thLe.js +40 -0
  95. package/build/assets/modal-body-CMOc2tLl.js +1 -0
  96. package/build/assets/modal-classes-BAb4Y_BG.js +1 -0
  97. package/build/assets/modal-close-button-CkJ0Ktjj.js +1 -0
  98. package/build/assets/mouse-pointer-click-CsgRs_-r.js +1 -0
  99. package/build/assets/onboarding-Cx_kaiD1.js +1 -0
  100. package/build/assets/onboarding-modal-vMwn7ihv.js +1 -0
  101. package/build/assets/organization-service.api-C8XpQ0pM.js +1 -0
  102. package/build/assets/parse-git-remote-url-DpDM9bK6.js +1 -0
  103. package/build/assets/pencil-Clh1Wjvh.js +1 -0
  104. package/build/assets/planner-tab-DQvDU3ap.js +1 -0
  105. package/build/assets/plug-BuQhHSSG.js +1 -0
  106. package/build/assets/plugins-management-service-BjYeF0b0.js +1 -0
  107. package/build/assets/plus-CEKne-Yp.js +1 -0
  108. package/build/assets/profiles-service.api-QB-T_u-g.js +1 -0
  109. package/build/assets/providers-FfSZ5TXP.js +1 -0
  110. package/build/assets/proxy-tcFL2yTQ.js +1 -0
  111. package/build/assets/puzzle-A9pGxxai.js +1 -0
  112. package/build/assets/recommended-automations-launcher-Bw8uC4V6.js +1 -0
  113. package/build/assets/refresh-cw-Bh69DyYO.js +1 -0
  114. package/build/assets/root-BLeQfBEq.css +1 -0
  115. package/build/assets/root-ZKKYPR1Z.js +2 -0
  116. package/build/assets/root-layout-luJoE9IG.js +2 -0
  117. package/build/assets/schema-field-Csw5fhtN.js +1 -0
  118. package/build/assets/scroll-fade-state-Dw-i4SGq.js +1 -0
  119. package/build/assets/sdk-section-page-HTffvm7Q.js +1 -0
  120. package/build/assets/secret-form-HTUbYw5o.js +1 -0
  121. package/build/assets/secrets-service-BTor9uAU.js +1 -0
  122. package/build/assets/secrets-settings-BizaTEr1.js +1 -0
  123. package/build/assets/server-process-C9RKzd1x.js +1 -0
  124. package/build/assets/settings-BlmrkwRi.js +1 -0
  125. package/build/assets/settings-DcNPxz0v.js +1 -0
  126. package/build/assets/settings-dropdown-input-tM0A0ipy.js +1 -0
  127. package/build/assets/settings-index-CKq0b0Vg.js +1 -0
  128. package/build/assets/settings-input-C03KUoSC.js +1 -0
  129. package/build/assets/settings-list-classes-BJ0g8rWj.js +1 -0
  130. package/build/assets/settings-modal-AzEF1QPP.js +1 -0
  131. package/build/assets/settings-service.api-B2agVfjL.js +1 -0
  132. package/build/assets/settings-switch-CQE0EGC-.js +1 -0
  133. package/build/assets/settings-utils-ClYOkbbI.js +1 -0
  134. package/build/assets/shared-conversation-B55pCyBG.js +1 -0
  135. package/build/assets/shield-check-CFDViW82.js +1 -0
  136. package/build/assets/sidebar-layout-D3hE08wK.js +1 -0
  137. package/build/assets/sidebar-mobile-menu-toggle-BOtyJHwE.js +1 -0
  138. package/build/assets/sidebar-nav-link-CPzhyHQg.js +1 -0
  139. package/build/assets/sidebar-onboarding-checklist-storage-3qYflszY.js +1 -0
  140. package/build/assets/sidebar-store-DtpU7zaI.js +1 -0
  141. package/build/assets/skill-card-pill-row-CFxjoqxn.js +1 -0
  142. package/build/assets/skill-filter-CWZ5kjcg.js +2 -0
  143. package/build/assets/skill-icon-badge-CPQJ6A-I.js +1 -0
  144. package/build/assets/skill-scope-CV1dkAbW.js +1 -0
  145. package/build/assets/skills-plugins-DGHULTq6.js +1 -0
  146. package/build/assets/skills-settings-CM1lFv3e.js +1 -0
  147. package/build/assets/styled-tooltip-Dl06rkpY.js +1 -0
  148. package/build/assets/task-list-tab-04GNQuii.js +1 -0
  149. package/build/assets/terminal-Cj0iHIW7.js +3 -0
  150. package/build/assets/toggle-switch-Fd_QGz0r.js +1 -0
  151. package/build/assets/trash-2-Dl8_RGz0.js +1 -0
  152. package/build/assets/trash-_RMt7Ayc.js +1 -0
  153. package/build/assets/triangle-alert-SM-q4NU_.js +1 -0
  154. package/build/assets/typography-SgFy466J.js +1 -0
  155. package/build/assets/usage-tab-BcfWV6db.js +1 -0
  156. package/build/assets/use-acp-credential-form-BsSW5NHG.js +1 -0
  157. package/build/assets/use-activate-agent-profile-B2NS8nA5.js +1 -0
  158. package/build/assets/use-agent-profiles-DWBPC0Si.js +1 -0
  159. package/build/assets/use-automation-health-BxXdzZMP.js +1 -0
  160. package/build/assets/use-automations-zYb0dUny.js +1 -0
  161. package/build/assets/use-can-manage-org-profiles-BWMahtUh.js +1 -0
  162. package/build/assets/use-cloud-current-user-id-CPHMDG-C.js +1 -0
  163. package/build/assets/use-config-Bft35DOK.js +1 -0
  164. package/build/assets/use-create-conversation-DwN5vv2f.js +1 -0
  165. package/build/assets/use-create-secret-BSxJMxHp.js +1 -0
  166. package/build/assets/use-get-secrets-BT4ihRwj.js +1 -0
  167. package/build/assets/use-has-permission-B3C8rQmR.js +1 -0
  168. package/build/assets/use-is-authed-CFGkY3-Z.js +1 -0
  169. package/build/assets/use-launch-skill-in-chat-BYjYihBP.js +1 -0
  170. package/build/assets/use-llm-configured-BI6obxsc.js +1 -0
  171. package/build/assets/use-llm-profiles-djGAhTWL.js +1 -0
  172. package/build/assets/use-manifest-capabilities-3z0-1G59.js +1 -0
  173. package/build/assets/use-onboarding-completion-BXpyUSsJ.js +1 -0
  174. package/build/assets/use-plugins-marketplace-DI4_pK56.js +1 -0
  175. package/build/assets/use-save-agent-profile-DdBSTdpN.js +1 -0
  176. package/build/assets/use-save-settings-CUZW6yXP.js +1 -0
  177. package/build/assets/use-settings-C5VhGpqd.js +1 -0
  178. package/build/assets/use-settings-nav-items-DHaUu1Dg.js +16 -0
  179. package/build/assets/use-tracking-D5t9otIF.js +3 -0
  180. package/build/assets/use-user-conversation-DT0_QCnL.js +1 -0
  181. package/build/assets/useInfiniteQuery-CgeUQPfs.js +1 -0
  182. package/build/assets/useMutation-DFnzkf6f.js +1 -0
  183. package/build/assets/useQueries-BhbrGEf1.js +1 -0
  184. package/build/assets/useQuery-BXWbZBZl.js +1 -0
  185. package/build/assets/utils-DaCIEEQP.js +1 -0
  186. package/build/assets/vendor~browser-hbU4u2Ag.js +47 -0
  187. package/build/assets/vendor~commits-tab-BaO2Ce3e.js +11 -0
  188. package/build/assets/vendor~conversation-panel~conversation-CTvDDiXg.js +1 -0
  189. package/build/assets/vendor~entry.client-BFE7Llz9.js +1 -0
  190. package/build/assets/vendor~entry.client-BaKt_PIp.js +9 -0
  191. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-ZixYGy6E.js +186 -0
  192. package/build/assets/vendor~index-home~home~conversation-panel~conversation-BTyukeM-.js +13 -0
  193. package/build/assets/vendor~root-layout-BlUaZ18v.js +1 -0
  194. package/build/assets/vendor~root-layout~conversation-panel~conversation-BYAWJwQX.js +1 -0
  195. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-CHaLEBVR.js +1 -0
  196. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-B2OLKL7N.js +1 -0
  197. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-DXqM7vqB.js +1 -0
  198. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-Dtu7BpYk.js +48 -0
  199. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz-MAyNb.js +1 -0
  200. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-DonTKfQD.js +4949 -0
  201. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-BgxDvUcf.js +8420 -0
  202. package/build/assets/verification-settings-Bj6bo097.js +1 -0
  203. package/build/assets/wrench-hi7Q13dF.js +1 -0
  204. package/build/assets/x-DkgltWa0.js +1 -0
  205. package/build/index.html +4 -4
  206. package/build/locales/ar/openhands.json +183 -44
  207. package/build/locales/ca/openhands.json +183 -44
  208. package/build/locales/de/openhands.json +183 -44
  209. package/build/locales/en/openhands.json +183 -44
  210. package/build/locales/es/openhands.json +183 -44
  211. package/build/locales/fr/openhands.json +183 -44
  212. package/build/locales/it/openhands.json +183 -44
  213. package/build/locales/ja/openhands.json +183 -44
  214. package/build/locales/ko-KR/openhands.json +183 -44
  215. package/build/locales/no/openhands.json +183 -44
  216. package/build/locales/pt/openhands.json +183 -44
  217. package/build/locales/tr/openhands.json +183 -44
  218. package/build/locales/uk/openhands.json +183 -44
  219. package/build/locales/zh-CN/openhands.json +183 -44
  220. package/build/locales/zh-TW/openhands.json +183 -44
  221. package/config/defaults.json +2 -2
  222. package/dist/api/agent-server-adapter.cjs +3 -3
  223. package/dist/api/agent-server-adapter.cjs.map +1 -1
  224. package/dist/api/agent-server-adapter.d.ts +10 -1
  225. package/dist/api/agent-server-adapter.js +115 -110
  226. package/dist/api/agent-server-adapter.js.map +1 -1
  227. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  228. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  229. package/dist/api/automation-service/automation-service.api.d.ts +23 -2
  230. package/dist/api/automation-service/automation-service.api.js +130 -73
  231. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  232. package/dist/api/backend-registry/url-selection.cjs +1 -1
  233. package/dist/api/backend-registry/url-selection.cjs.map +1 -1
  234. package/dist/api/backend-registry/url-selection.d.ts +2 -1
  235. package/dist/api/backend-registry/url-selection.js +2 -2
  236. package/dist/api/backend-registry/url-selection.js.map +1 -1
  237. package/dist/api/cloud/conversation-service.api.cjs +1 -1
  238. package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
  239. package/dist/api/cloud/conversation-service.api.d.ts +9 -0
  240. package/dist/api/cloud/conversation-service.api.js +11 -1
  241. package/dist/api/cloud/conversation-service.api.js.map +1 -1
  242. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  243. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  244. package/dist/api/conversation-service/agent-server-conversation-service.api.js +29 -24
  245. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  246. package/dist/api/git-provider-items-service.cjs +2 -0
  247. package/dist/api/git-provider-items-service.cjs.map +1 -0
  248. package/dist/api/git-provider-items-service.d.ts +25 -0
  249. package/dist/api/git-provider-items-service.js +127 -0
  250. package/dist/api/git-provider-items-service.js.map +1 -0
  251. package/dist/api/mcp-health/probe-mcp-server-health.cjs +1 -1
  252. package/dist/api/mcp-health/probe-mcp-server-health.js +31 -31
  253. package/dist/api/open-hands.types.d.ts +0 -19
  254. package/dist/api/profiles-service/profiles-service.api.cjs +1 -1
  255. package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
  256. package/dist/api/profiles-service/profiles-service.api.d.ts +29 -2
  257. package/dist/api/profiles-service/profiles-service.api.js +25 -2
  258. package/dist/api/profiles-service/profiles-service.api.js.map +1 -1
  259. package/dist/api/provider-connections-service/provider-connections-service.api.cjs +2 -0
  260. package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -0
  261. package/dist/api/provider-connections-service/provider-connections-service.api.d.ts +34 -0
  262. package/dist/api/provider-connections-service/provider-connections-service.api.js +50 -0
  263. package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -0
  264. package/dist/api/secrets-service.cjs +1 -1
  265. package/dist/api/secrets-service.cjs.map +1 -1
  266. package/dist/api/secrets-service.d.ts +5 -0
  267. package/dist/api/secrets-service.js +12 -6
  268. package/dist/api/secrets-service.js.map +1 -1
  269. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs +1 -1
  270. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs.map +1 -1
  271. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js +1 -1
  272. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js.map +1 -1
  273. package/dist/components/conversation-events/chat/event-message-components/index.d.ts +0 -1
  274. package/dist/components/conversation-events/chat/event-message.cjs +1 -1
  275. package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
  276. package/dist/components/conversation-events/chat/event-message.js +1 -1
  277. package/dist/components/conversation-events/chat/event-message.js.map +1 -1
  278. package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
  279. package/dist/components/conversation-events/chat/messages.js.map +1 -1
  280. package/dist/components/features/automations/add-automation-menu.d.ts +7 -0
  281. package/dist/components/features/automations/add-automation-modal.cjs +2 -0
  282. package/dist/components/features/automations/add-automation-modal.cjs.map +1 -0
  283. package/dist/components/features/automations/add-automation-modal.js +42 -0
  284. package/dist/components/features/automations/add-automation-modal.js.map +1 -0
  285. package/dist/components/features/automations/automation-action-button-classes.cjs +2 -0
  286. package/dist/components/features/automations/automation-action-button-classes.cjs.map +1 -0
  287. package/dist/components/features/automations/automation-action-button-classes.d.ts +0 -2
  288. package/dist/components/features/automations/automation-action-button-classes.js +8 -0
  289. package/dist/components/features/automations/automation-action-button-classes.js.map +1 -0
  290. package/dist/components/features/automations/automation-card-skeleton.cjs +2 -0
  291. package/dist/components/features/automations/automation-card-skeleton.cjs.map +1 -0
  292. package/dist/components/features/automations/automation-card-skeleton.js +33 -0
  293. package/dist/components/features/automations/automation-card-skeleton.js.map +1 -0
  294. package/dist/components/features/automations/automation-card.cjs +2 -0
  295. package/dist/components/features/automations/automation-card.cjs.map +1 -0
  296. package/dist/components/features/automations/automation-card.d.ts +1 -1
  297. package/dist/components/features/automations/automation-card.js +160 -0
  298. package/dist/components/features/automations/automation-card.js.map +1 -0
  299. package/dist/components/features/automations/automation-group.cjs +2 -0
  300. package/dist/components/features/automations/automation-group.cjs.map +1 -0
  301. package/dist/components/features/automations/automation-group.js +54 -0
  302. package/dist/components/features/automations/automation-group.js.map +1 -0
  303. package/dist/components/features/automations/automation-list-row.cjs +2 -0
  304. package/dist/components/features/automations/automation-list-row.cjs.map +1 -0
  305. package/dist/components/features/automations/automation-list-row.js +152 -0
  306. package/dist/components/features/automations/automation-list-row.js.map +1 -0
  307. package/dist/components/features/automations/automation-run-insights.cjs +2 -0
  308. package/dist/components/features/automations/automation-run-insights.cjs.map +1 -0
  309. package/dist/components/features/automations/automation-run-insights.js +46 -0
  310. package/dist/components/features/automations/automation-run-insights.js.map +1 -0
  311. package/dist/components/features/automations/automation-view-mode.cjs +2 -0
  312. package/dist/components/features/automations/automation-view-mode.cjs.map +1 -0
  313. package/dist/components/features/automations/automation-view-mode.d.ts +5 -1
  314. package/dist/components/features/automations/automation-view-mode.js +6 -0
  315. package/dist/components/features/automations/automation-view-mode.js.map +1 -0
  316. package/dist/components/features/automations/backend-not-configured.cjs +2 -0
  317. package/dist/components/features/automations/backend-not-configured.cjs.map +1 -0
  318. package/dist/components/features/automations/backend-not-configured.js +34 -0
  319. package/dist/components/features/automations/backend-not-configured.js.map +1 -0
  320. package/dist/components/features/automations/build-automation-menu-items.cjs +2 -0
  321. package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -0
  322. package/dist/components/features/automations/build-automation-menu-items.js +53 -0
  323. package/dist/components/features/automations/build-automation-menu-items.js.map +1 -0
  324. package/dist/components/features/automations/build-automation-pills.cjs +2 -0
  325. package/dist/components/features/automations/build-automation-pills.cjs.map +1 -0
  326. package/dist/components/features/automations/build-automation-pills.js +71 -0
  327. package/dist/components/features/automations/build-automation-pills.js.map +1 -0
  328. package/dist/components/features/automations/create-instructions.cjs +2 -0
  329. package/dist/components/features/automations/create-instructions.cjs.map +1 -0
  330. package/dist/components/features/automations/create-instructions.js +102 -0
  331. package/dist/components/features/automations/create-instructions.js.map +1 -0
  332. package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +4 -3
  333. package/dist/components/features/automations/detail/run-status-badge.cjs +2 -0
  334. package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -0
  335. package/dist/components/features/automations/detail/run-status-badge.js +102 -0
  336. package/dist/components/features/automations/detail/run-status-badge.js.map +1 -0
  337. package/dist/components/features/automations/empty-state.cjs +2 -0
  338. package/dist/components/features/automations/empty-state.cjs.map +1 -0
  339. package/dist/components/features/automations/empty-state.js +35 -0
  340. package/dist/components/features/automations/empty-state.js.map +1 -0
  341. package/dist/components/features/automations/error-state.cjs +2 -0
  342. package/dist/components/features/automations/error-state.cjs.map +1 -0
  343. package/dist/components/features/automations/error-state.js +28 -0
  344. package/dist/components/features/automations/error-state.js.map +1 -0
  345. package/dist/components/features/automations/git-sync/git-sync-activity-row.d.ts +15 -0
  346. package/dist/components/features/automations/git-sync/git-sync-config-form.d.ts +13 -0
  347. package/dist/components/features/automations/git-sync/git-sync-error-banner.d.ts +6 -0
  348. package/dist/components/features/automations/git-sync/git-sync-not-local-state.d.ts +1 -0
  349. package/dist/components/features/automations/git-sync/git-sync-overview-section.d.ts +12 -0
  350. package/dist/components/features/automations/git-sync/git-sync-skeleton.d.ts +1 -0
  351. package/dist/components/features/automations/git-sync/git-sync-status-pill.d.ts +7 -0
  352. package/dist/components/features/automations/git-sync/git-sync-unsupported-state.d.ts +7 -0
  353. package/dist/components/features/automations/import-automation-modal.d.ts +2 -1
  354. package/dist/components/features/automations/kebab-menu-item-content.cjs +2 -0
  355. package/dist/components/features/automations/kebab-menu-item-content.cjs.map +1 -0
  356. package/dist/components/features/automations/kebab-menu-item-content.js +21 -0
  357. package/dist/components/features/automations/kebab-menu-item-content.js.map +1 -0
  358. package/dist/components/features/automations/kebab-menu.cjs +2 -0
  359. package/dist/components/features/automations/kebab-menu.cjs.map +1 -0
  360. package/dist/components/features/automations/kebab-menu.d.ts +2 -1
  361. package/dist/components/features/automations/kebab-menu.js +76 -0
  362. package/dist/components/features/automations/kebab-menu.js.map +1 -0
  363. package/dist/components/features/automations/recommended-automations-launcher.cjs +2 -0
  364. package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -0
  365. package/dist/components/features/automations/recommended-automations-launcher.d.ts +7 -1
  366. package/dist/components/features/automations/recommended-automations-launcher.js +134 -0
  367. package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -0
  368. package/dist/components/features/automations/recommended-automations-rail.cjs +2 -0
  369. package/dist/components/features/automations/recommended-automations-rail.cjs.map +1 -0
  370. package/dist/components/features/automations/recommended-automations-rail.d.ts +9 -0
  371. package/dist/components/features/automations/recommended-automations-rail.js +127 -0
  372. package/dist/components/features/automations/recommended-automations-rail.js.map +1 -0
  373. package/dist/components/features/automations/recommended-automations-section.cjs +2 -0
  374. package/dist/components/features/automations/recommended-automations-section.cjs.map +1 -0
  375. package/dist/components/features/automations/recommended-automations-section.d.ts +2 -2
  376. package/dist/components/features/automations/recommended-automations-section.js +198 -0
  377. package/dist/components/features/automations/recommended-automations-section.js.map +1 -0
  378. package/dist/components/features/automations/responder-deployment-modal.cjs +2 -0
  379. package/dist/components/features/automations/responder-deployment-modal.cjs.map +1 -0
  380. package/dist/components/features/automations/responder-deployment-modal.d.ts +2 -1
  381. package/dist/components/features/automations/responder-deployment-modal.js +75 -0
  382. package/dist/components/features/automations/responder-deployment-modal.js.map +1 -0
  383. package/dist/components/features/automations/status-badge.cjs +2 -0
  384. package/dist/components/features/automations/status-badge.cjs.map +1 -0
  385. package/dist/components/features/automations/status-badge.js +12 -0
  386. package/dist/components/features/automations/status-badge.js.map +1 -0
  387. package/dist/components/features/automations/to-latest-run-state.cjs +2 -0
  388. package/dist/components/features/automations/to-latest-run-state.cjs.map +1 -0
  389. package/dist/components/features/automations/to-latest-run-state.d.ts +6 -0
  390. package/dist/components/features/automations/to-latest-run-state.js +21 -0
  391. package/dist/components/features/automations/to-latest-run-state.js.map +1 -0
  392. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  393. package/dist/components/features/backends/backend-form-modal.js +10 -10
  394. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  395. package/dist/components/features/backends/manage-backends-modal.js +5 -5
  396. package/dist/components/features/chat/chat-interface.cjs +2 -2
  397. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  398. package/dist/components/features/chat/chat-interface.js +151 -148
  399. package/dist/components/features/chat/chat-interface.js.map +1 -1
  400. package/dist/components/features/chat/error-message-banner.cjs +1 -1
  401. package/dist/components/features/chat/error-message-banner.cjs.map +1 -1
  402. package/dist/components/features/chat/error-message-banner.d.ts +3 -1
  403. package/dist/components/features/chat/error-message-banner.js +64 -58
  404. package/dist/components/features/chat/error-message-banner.js.map +1 -1
  405. package/dist/components/features/command-menu/command-menu-items.d.ts +10 -4
  406. package/dist/components/features/conversation/conversation-git-actions-menu.cjs +2 -0
  407. package/dist/components/features/conversation/conversation-git-actions-menu.cjs.map +1 -0
  408. package/dist/components/features/conversation/conversation-git-actions-menu.d.ts +15 -0
  409. package/dist/components/features/conversation/conversation-git-actions-menu.js +123 -0
  410. package/dist/components/features/conversation/conversation-git-actions-menu.js.map +1 -0
  411. package/dist/components/features/conversation/conversation-git-actions-toggle.cjs +2 -0
  412. package/dist/components/features/conversation/conversation-git-actions-toggle.cjs.map +1 -0
  413. package/dist/components/features/conversation/conversation-git-actions-toggle.d.ts +10 -0
  414. package/dist/components/features/conversation/conversation-git-actions-toggle.js +60 -0
  415. package/dist/components/features/conversation/conversation-git-actions-toggle.js.map +1 -0
  416. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs +1 -1
  417. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs.map +1 -1
  418. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js +46 -10
  419. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js.map +1 -1
  420. package/dist/components/features/conversation/conversation-main/conversation-main.cjs +1 -1
  421. package/dist/components/features/conversation/conversation-main/conversation-main.cjs.map +1 -1
  422. package/dist/components/features/conversation/conversation-main/conversation-main.js +49 -43
  423. package/dist/components/features/conversation/conversation-main/conversation-main.js.map +1 -1
  424. package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
  425. package/dist/components/features/conversation/conversation-name-with-status.cjs.map +1 -1
  426. package/dist/components/features/conversation/conversation-name-with-status.js +49 -40
  427. package/dist/components/features/conversation/conversation-name-with-status.js.map +1 -1
  428. package/dist/components/features/conversation/conversation-name.cjs +1 -1
  429. package/dist/components/features/conversation/conversation-name.js +4 -4
  430. package/dist/components/features/conversation/conversation-overview-automations-panel.cjs +2 -0
  431. package/dist/components/features/conversation/conversation-overview-automations-panel.cjs.map +1 -0
  432. package/dist/components/features/conversation/conversation-overview-automations-panel.d.ts +6 -0
  433. package/dist/components/features/conversation/conversation-overview-automations-panel.js +48 -0
  434. package/dist/components/features/conversation/conversation-overview-automations-panel.js.map +1 -0
  435. package/dist/components/features/conversation/conversation-overview-context-menu.cjs +2 -0
  436. package/dist/components/features/conversation/conversation-overview-context-menu.cjs.map +1 -0
  437. package/dist/components/features/conversation/conversation-overview-context-menu.d.ts +10 -0
  438. package/dist/components/features/conversation/conversation-overview-context-menu.js +221 -0
  439. package/dist/components/features/conversation/conversation-overview-context-menu.js.map +1 -0
  440. package/dist/components/features/conversation/conversation-overview-diffs-row.cjs +2 -0
  441. package/dist/components/features/conversation/conversation-overview-diffs-row.cjs.map +1 -0
  442. package/dist/components/features/conversation/conversation-overview-diffs-row.d.ts +2 -0
  443. package/dist/components/features/conversation/conversation-overview-diffs-row.js +88 -0
  444. package/dist/components/features/conversation/conversation-overview-diffs-row.js.map +1 -0
  445. package/dist/components/features/conversation/conversation-overview-drawer-content.cjs +2 -0
  446. package/dist/components/features/conversation/conversation-overview-drawer-content.cjs.map +1 -0
  447. package/dist/components/features/conversation/conversation-overview-drawer-content.d.ts +6 -0
  448. package/dist/components/features/conversation/conversation-overview-drawer-content.js +138 -0
  449. package/dist/components/features/conversation/conversation-overview-drawer-content.js.map +1 -0
  450. package/dist/components/features/conversation/conversation-overview-drawer-context.cjs +2 -0
  451. package/dist/components/features/conversation/conversation-overview-drawer-context.cjs.map +1 -0
  452. package/dist/components/features/conversation/conversation-overview-drawer-context.d.ts +17 -0
  453. package/dist/components/features/conversation/conversation-overview-drawer-context.js +43 -0
  454. package/dist/components/features/conversation/conversation-overview-drawer-context.js.map +1 -0
  455. package/dist/components/features/conversation/conversation-overview-drawer.cjs +2 -0
  456. package/dist/components/features/conversation/conversation-overview-drawer.cjs.map +1 -0
  457. package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs +2 -0
  458. package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs.map +1 -0
  459. package/dist/components/features/conversation/conversation-overview-drawer.constants.d.ts +6 -0
  460. package/dist/components/features/conversation/conversation-overview-drawer.constants.js +6 -0
  461. package/dist/components/features/conversation/conversation-overview-drawer.constants.js.map +1 -0
  462. package/dist/components/features/conversation/conversation-overview-drawer.d.ts +7 -0
  463. package/dist/components/features/conversation/conversation-overview-drawer.js +45 -0
  464. package/dist/components/features/conversation/conversation-overview-drawer.js.map +1 -0
  465. package/dist/components/features/conversation/conversation-overview-drawer.types.cjs +2 -0
  466. package/dist/components/features/conversation/conversation-overview-drawer.types.cjs.map +1 -0
  467. package/dist/components/features/conversation/conversation-overview-drawer.types.d.ts +12 -0
  468. package/dist/components/features/conversation/conversation-overview-drawer.types.js +13 -0
  469. package/dist/components/features/conversation/conversation-overview-drawer.types.js.map +1 -0
  470. package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs +2 -0
  471. package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs.map +1 -0
  472. package/dist/components/features/conversation/conversation-overview-git-items-panel.d.ts +7 -0
  473. package/dist/components/features/conversation/conversation-overview-git-items-panel.js +81 -0
  474. package/dist/components/features/conversation/conversation-overview-git-items-panel.js.map +1 -0
  475. package/dist/components/features/conversation/conversation-overview-git-section.cjs +2 -0
  476. package/dist/components/features/conversation/conversation-overview-git-section.cjs.map +1 -0
  477. package/dist/components/features/conversation/conversation-overview-git-section.d.ts +6 -0
  478. package/dist/components/features/conversation/conversation-overview-git-section.js +143 -0
  479. package/dist/components/features/conversation/conversation-overview-git-section.js.map +1 -0
  480. package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs +2 -0
  481. package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs.map +1 -0
  482. package/dist/components/features/conversation/conversation-overview-mcp-panel.d.ts +6 -0
  483. package/dist/components/features/conversation/conversation-overview-mcp-panel.js +108 -0
  484. package/dist/components/features/conversation/conversation-overview-mcp-panel.js.map +1 -0
  485. package/dist/components/features/conversation/conversation-overview-panel.cjs +2 -0
  486. package/dist/components/features/conversation/conversation-overview-panel.cjs.map +1 -0
  487. package/dist/components/features/conversation/conversation-overview-panel.constants.cjs +2 -0
  488. package/dist/components/features/conversation/conversation-overview-panel.constants.cjs.map +1 -0
  489. package/dist/components/features/conversation/conversation-overview-panel.constants.d.ts +24 -0
  490. package/dist/components/features/conversation/conversation-overview-panel.constants.js +12 -0
  491. package/dist/components/features/conversation/conversation-overview-panel.constants.js.map +1 -0
  492. package/dist/components/features/conversation/conversation-overview-panel.d.ts +2 -0
  493. package/dist/components/features/conversation/conversation-overview-panel.js +102 -0
  494. package/dist/components/features/conversation/conversation-overview-panel.js.map +1 -0
  495. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs +2 -0
  496. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs.map +1 -0
  497. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.d.ts +8 -0
  498. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js +29 -0
  499. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js.map +1 -0
  500. package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs +2 -0
  501. package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs.map +1 -0
  502. package/dist/components/features/conversation/conversation-overview-secrets-panel.d.ts +6 -0
  503. package/dist/components/features/conversation/conversation-overview-secrets-panel.js +89 -0
  504. package/dist/components/features/conversation/conversation-overview-secrets-panel.js.map +1 -0
  505. package/dist/components/features/conversation/conversation-overview-sections.cjs +2 -0
  506. package/dist/components/features/conversation/conversation-overview-sections.cjs.map +1 -0
  507. package/dist/components/features/conversation/conversation-overview-sections.d.ts +43 -0
  508. package/dist/components/features/conversation/conversation-overview-sections.js +27 -0
  509. package/dist/components/features/conversation/conversation-overview-sections.js.map +1 -0
  510. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +2 -0
  511. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs.map +1 -0
  512. package/dist/components/features/conversation/conversation-overview-skills-panel.d.ts +6 -0
  513. package/dist/components/features/conversation/conversation-overview-skills-panel.js +138 -0
  514. package/dist/components/features/conversation/conversation-overview-skills-panel.js.map +1 -0
  515. package/dist/components/features/conversation/conversation-overview-toggle.cjs +2 -0
  516. package/dist/components/features/conversation/conversation-overview-toggle.cjs.map +1 -0
  517. package/dist/components/features/conversation/conversation-overview-toggle.d.ts +11 -0
  518. package/dist/components/features/conversation/conversation-overview-toggle.js +99 -0
  519. package/dist/components/features/conversation/conversation-overview-toggle.js.map +1 -0
  520. package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs +2 -0
  521. package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs.map +1 -0
  522. package/dist/components/features/conversation/conversation-secondary-drawer.classes.d.ts +4 -0
  523. package/dist/components/features/conversation/conversation-secondary-drawer.classes.js +7 -0
  524. package/dist/components/features/conversation/conversation-secondary-drawer.classes.js.map +1 -0
  525. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs +1 -1
  526. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs.map +1 -1
  527. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js +10 -9
  528. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js.map +1 -1
  529. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  530. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  531. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +68 -62
  532. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  533. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
  534. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
  535. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +98 -88
  536. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
  537. package/dist/components/features/conversation/right-panel-toggle.cjs +1 -1
  538. package/dist/components/features/conversation/right-panel-toggle.cjs.map +1 -1
  539. package/dist/components/features/conversation/right-panel-toggle.d.ts +3 -2
  540. package/dist/components/features/conversation/right-panel-toggle.js +34 -33
  541. package/dist/components/features/conversation/right-panel-toggle.js.map +1 -1
  542. package/dist/components/features/conversation-panel/compact-conversation-row.cjs +1 -1
  543. package/dist/components/features/conversation-panel/compact-conversation-row.js +6 -6
  544. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
  545. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
  546. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +2 -1
  547. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +14 -7
  548. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
  549. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  550. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  551. package/dist/components/features/conversation-panel/conversation-panel.js +263 -236
  552. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  553. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
  554. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
  555. package/dist/components/features/conversation-panel/local-new-conversation-menu.js +4 -4
  556. package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
  557. package/dist/components/features/diff-viewer/accordion-panel.cjs +2 -0
  558. package/dist/components/features/diff-viewer/accordion-panel.cjs.map +1 -0
  559. package/dist/components/features/diff-viewer/accordion-panel.d.ts +13 -0
  560. package/dist/components/features/diff-viewer/accordion-panel.js +41 -0
  561. package/dist/components/features/diff-viewer/accordion-panel.js.map +1 -0
  562. package/dist/components/features/diff-viewer/commit-list.cjs +1 -1
  563. package/dist/components/features/diff-viewer/commit-list.cjs.map +1 -1
  564. package/dist/components/features/diff-viewer/commit-list.d.ts +5 -1
  565. package/dist/components/features/diff-viewer/commit-list.js +30 -16
  566. package/dist/components/features/diff-viewer/commit-list.js.map +1 -1
  567. package/dist/components/features/diff-viewer/commit-row.cjs +1 -1
  568. package/dist/components/features/diff-viewer/commit-row.cjs.map +1 -1
  569. package/dist/components/features/diff-viewer/commit-row.d.ts +1 -2
  570. package/dist/components/features/diff-viewer/commit-row.js +38 -34
  571. package/dist/components/features/diff-viewer/commit-row.js.map +1 -1
  572. package/dist/components/features/diff-viewer/diff-change-list.cjs +2 -0
  573. package/dist/components/features/diff-viewer/diff-change-list.cjs.map +1 -0
  574. package/dist/components/features/diff-viewer/diff-change-list.d.ts +18 -0
  575. package/dist/components/features/diff-viewer/diff-change-list.js +22 -0
  576. package/dist/components/features/diff-viewer/diff-change-list.js.map +1 -0
  577. package/dist/components/features/diff-viewer/editor-container.cjs +1 -1
  578. package/dist/components/features/diff-viewer/editor-container.cjs.map +1 -1
  579. package/dist/components/features/diff-viewer/editor-container.d.ts +2 -1
  580. package/dist/components/features/diff-viewer/editor-container.js +8 -7
  581. package/dist/components/features/diff-viewer/editor-container.js.map +1 -1
  582. package/dist/components/features/diff-viewer/file-diff-viewer.cjs +1 -1
  583. package/dist/components/features/diff-viewer/file-diff-viewer.cjs.map +1 -1
  584. package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +10 -1
  585. package/dist/components/features/diff-viewer/file-diff-viewer.js +138 -112
  586. package/dist/components/features/diff-viewer/file-diff-viewer.js.map +1 -1
  587. package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs +2 -0
  588. package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs.map +1 -0
  589. package/dist/components/features/diff-viewer/uncommitted-changes-row.d.ts +12 -0
  590. package/dist/components/features/diff-viewer/uncommitted-changes-row.js +51 -0
  591. package/dist/components/features/diff-viewer/uncommitted-changes-row.js.map +1 -0
  592. package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
  593. package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
  594. package/dist/components/features/files-tab/file-content-viewer.js +0 -1
  595. package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
  596. package/dist/components/features/files-tab/file-quick-row.cjs +1 -1
  597. package/dist/components/features/files-tab/file-quick-row.cjs.map +1 -1
  598. package/dist/components/features/files-tab/file-quick-row.d.ts +9 -7
  599. package/dist/components/features/files-tab/file-quick-row.js +63 -34
  600. package/dist/components/features/files-tab/file-quick-row.js.map +1 -1
  601. package/dist/components/features/files-tab/files-tab-tree.constants.cjs +2 -0
  602. package/dist/components/features/files-tab/files-tab-tree.constants.cjs.map +1 -0
  603. package/dist/components/features/files-tab/files-tab-tree.constants.d.ts +7 -0
  604. package/dist/components/features/files-tab/files-tab-tree.constants.js +6 -0
  605. package/dist/components/features/files-tab/files-tab-tree.constants.js.map +1 -0
  606. package/dist/components/features/files-tab/segmented-toggle.cjs +1 -1
  607. package/dist/components/features/files-tab/segmented-toggle.cjs.map +1 -1
  608. package/dist/components/features/files-tab/segmented-toggle.d.ts +5 -3
  609. package/dist/components/features/files-tab/segmented-toggle.js +10 -13
  610. package/dist/components/features/files-tab/segmented-toggle.js.map +1 -1
  611. package/dist/components/features/files-tab/tree-node.cjs +1 -1
  612. package/dist/components/features/files-tab/tree-node.cjs.map +1 -1
  613. package/dist/components/features/files-tab/tree-node.js +34 -32
  614. package/dist/components/features/files-tab/tree-node.js.map +1 -1
  615. package/dist/components/features/files-tab/workspace-path.cjs +2 -0
  616. package/dist/components/features/files-tab/workspace-path.cjs.map +1 -0
  617. package/dist/components/features/files-tab/workspace-path.d.ts +6 -0
  618. package/dist/components/features/files-tab/workspace-path.js +41 -0
  619. package/dist/components/features/files-tab/workspace-path.js.map +1 -0
  620. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +2 -0
  621. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -0
  622. package/dist/components/features/home/featured-automations/automation-health-indicator.js +22 -0
  623. package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -0
  624. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +2 -0
  625. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -0
  626. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +45 -0
  627. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -0
  628. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +2 -0
  629. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -0
  630. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +108 -0
  631. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -0
  632. package/dist/components/features/home/featured-automations/automation-run-health.cjs +2 -0
  633. package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -0
  634. package/dist/components/features/home/featured-automations/automation-run-health.js +75 -0
  635. package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -0
  636. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +2 -0
  637. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -0
  638. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +74 -0
  639. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -0
  640. package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +3 -3
  641. package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs +1 -1
  642. package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs.map +1 -1
  643. package/dist/components/features/home/git-repo-dropdown/use-url-search.js +1 -1
  644. package/dist/components/features/home/git-repo-dropdown/use-url-search.js.map +1 -1
  645. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs +1 -1
  646. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js +6 -6
  647. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs +1 -1
  648. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js +6 -6
  649. package/dist/components/features/manifest/manifest-form-field.d.ts +4 -3
  650. package/dist/components/features/manifest/manifest-icons.cjs +2 -0
  651. package/dist/components/features/manifest/manifest-icons.cjs.map +1 -0
  652. package/dist/components/features/manifest/manifest-icons.d.ts +1 -0
  653. package/dist/components/features/manifest/manifest-icons.js +21 -0
  654. package/dist/components/features/manifest/manifest-icons.js.map +1 -0
  655. package/dist/components/features/manifest/manifest-repository-list.d.ts +25 -0
  656. package/dist/components/features/markdown/markdown-table-scroll.cjs +1 -1
  657. package/dist/components/features/markdown/markdown-table-scroll.cjs.map +1 -1
  658. package/dist/components/features/markdown/markdown-table-scroll.d.ts +2 -6
  659. package/dist/components/features/markdown/markdown-table-scroll.js +15 -21
  660. package/dist/components/features/markdown/markdown-table-scroll.js.map +1 -1
  661. package/dist/components/features/mcp-logo-badge.cjs +1 -1
  662. package/dist/components/features/mcp-logo-badge.cjs.map +1 -1
  663. package/dist/components/features/mcp-logo-badge.d.ts +1 -1
  664. package/dist/components/features/mcp-logo-badge.js +1 -0
  665. package/dist/components/features/mcp-logo-badge.js.map +1 -1
  666. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  667. package/dist/components/features/mcp-page/custom-server-editor.js +16 -16
  668. package/dist/components/features/mcp-page/index.cjs +1 -1
  669. package/dist/components/features/mcp-page/index.js +2 -2
  670. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  671. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  672. package/dist/components/features/mcp-page/install-server-modal.js +25 -25
  673. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  674. package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
  675. package/dist/components/features/mcp-page/installed-server-card.js +5 -5
  676. package/dist/components/features/mcp-page/marketplace-card.cjs +1 -1
  677. package/dist/components/features/mcp-page/marketplace-card.js +4 -4
  678. package/dist/components/features/mcp-page/marketplace-section.cjs +1 -1
  679. package/dist/components/features/mcp-page/marketplace-section.js +3 -3
  680. package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs +2 -0
  681. package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs.map +1 -0
  682. package/dist/components/features/mcp-page/mcp-logo-stack-badge.js +60 -0
  683. package/dist/components/features/mcp-page/mcp-logo-stack-badge.js.map +1 -0
  684. package/dist/components/features/mcp-page/mcp-server-health.cjs +1 -1
  685. package/dist/components/features/mcp-page/mcp-server-health.js +18 -18
  686. package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +10 -7
  687. package/dist/components/features/onboarding/use-onboarding-completion.cjs +2 -0
  688. package/dist/components/features/onboarding/use-onboarding-completion.cjs.map +1 -0
  689. package/dist/components/features/onboarding/use-onboarding-completion.js +32 -0
  690. package/dist/components/features/onboarding/use-onboarding-completion.js.map +1 -0
  691. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs +2 -0
  692. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs.map +1 -0
  693. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.d.ts +1 -0
  694. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js +22 -0
  695. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js.map +1 -0
  696. package/dist/components/features/settings/brand-button.cjs +1 -1
  697. package/dist/components/features/settings/brand-button.cjs.map +1 -1
  698. package/dist/components/features/settings/brand-button.d.ts +2 -0
  699. package/dist/components/features/settings/brand-button.js +4 -2
  700. package/dist/components/features/settings/brand-button.js.map +1 -1
  701. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.cjs +1 -0
  702. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.d.ts +7 -0
  703. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.js +7 -0
  704. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.cjs +1 -1
  705. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.js +3 -0
  706. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  707. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +1 -0
  708. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +20 -1
  709. package/dist/components/features/settings/llm-profiles/provider-connection-modal.cjs +1 -0
  710. package/dist/components/features/settings/llm-profiles/provider-connection-modal.d.ts +19 -0
  711. package/dist/components/features/settings/llm-profiles/provider-connection-modal.js +10 -0
  712. package/dist/components/features/settings/llm-profiles/provider-connection-row.cjs +1 -0
  713. package/dist/components/features/settings/llm-profiles/provider-connection-row.d.ts +10 -0
  714. package/dist/components/features/settings/llm-profiles/provider-connection-row.js +6 -0
  715. package/dist/components/features/settings/llm-profiles/provider-connections-manager.cjs +1 -0
  716. package/dist/components/features/settings/llm-profiles/provider-connections-manager.d.ts +15 -0
  717. package/dist/components/features/settings/llm-profiles/provider-connections-manager.js +8 -0
  718. package/dist/components/features/settings/sdk-settings/schema-field.cjs +1 -1
  719. package/dist/components/features/settings/sdk-settings/schema-field.js +6 -6
  720. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
  721. package/dist/components/features/settings/sdk-settings/sdk-section-page.js +7 -7
  722. package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
  723. package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
  724. package/dist/components/features/settings/secrets-settings/secret-form.js +7 -7
  725. package/dist/components/features/settings/settings-input.cjs +1 -1
  726. package/dist/components/features/settings/settings-input.cjs.map +1 -1
  727. package/dist/components/features/settings/settings-input.d.ts +6 -0
  728. package/dist/components/features/settings/settings-input.js +14 -13
  729. package/dist/components/features/settings/settings-input.js.map +1 -1
  730. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs +2 -0
  731. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs.map +1 -0
  732. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.d.ts +7 -0
  733. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js +102 -0
  734. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js.map +1 -0
  735. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs +2 -0
  736. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs.map +1 -0
  737. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.d.ts +8 -0
  738. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js +66 -0
  739. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js.map +1 -0
  740. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs +2 -0
  741. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs.map +1 -0
  742. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.d.ts +3 -0
  743. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js +15 -0
  744. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js.map +1 -0
  745. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs +2 -0
  746. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs.map +1 -0
  747. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.d.ts +10 -0
  748. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js +39 -0
  749. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js.map +1 -0
  750. package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs +2 -0
  751. package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs.map +1 -0
  752. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs +2 -0
  753. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs.map +1 -0
  754. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.d.ts +26 -0
  755. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js +78 -0
  756. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js.map +1 -0
  757. package/dist/components/features/sidebar/sidebar-onboarding-checklist.d.ts +5 -0
  758. package/dist/components/features/sidebar/sidebar-onboarding-checklist.js +127 -0
  759. package/dist/components/features/sidebar/sidebar-onboarding-checklist.js.map +1 -0
  760. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  761. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  762. package/dist/components/features/sidebar/sidebar-rail-body.js +115 -111
  763. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  764. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs +2 -0
  765. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs.map +1 -0
  766. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.d.ts +1 -0
  767. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js +10 -0
  768. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js.map +1 -0
  769. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +2 -0
  770. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs.map +1 -0
  771. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.d.ts +15 -0
  772. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +75 -0
  773. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js.map +1 -0
  774. package/dist/components/features/skills/add-skill-modal.cjs +2 -0
  775. package/dist/components/features/skills/add-skill-modal.cjs.map +1 -0
  776. package/dist/components/features/skills/add-skill-modal.js +164 -0
  777. package/dist/components/features/skills/add-skill-modal.js.map +1 -0
  778. package/dist/components/features/skills/build-skill-pills.cjs +2 -0
  779. package/dist/components/features/skills/build-skill-pills.cjs.map +1 -0
  780. package/dist/components/features/skills/build-skill-pills.js +88 -0
  781. package/dist/components/features/skills/build-skill-pills.js.map +1 -0
  782. package/dist/components/features/skills/get-skill-card-description.cjs +2 -0
  783. package/dist/components/features/skills/get-skill-card-description.cjs.map +1 -0
  784. package/dist/components/features/skills/get-skill-card-description.js +34 -0
  785. package/dist/components/features/skills/get-skill-card-description.js.map +1 -0
  786. package/dist/components/features/skills/get-skill-chat-launch-message.cjs +2 -0
  787. package/dist/components/features/skills/get-skill-chat-launch-message.cjs.map +1 -0
  788. package/dist/components/features/skills/get-skill-chat-launch-message.js +9 -0
  789. package/dist/components/features/skills/get-skill-chat-launch-message.js.map +1 -0
  790. package/dist/components/features/skills/is-copyable-skill-source.cjs +2 -0
  791. package/dist/components/features/skills/is-copyable-skill-source.cjs.map +1 -0
  792. package/dist/components/features/skills/is-copyable-skill-source.js +9 -0
  793. package/dist/components/features/skills/is-copyable-skill-source.js.map +1 -0
  794. package/dist/components/features/skills/skill-card-pill-row.cjs +2 -0
  795. package/dist/components/features/skills/skill-card-pill-row.cjs.map +1 -0
  796. package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
  797. package/dist/components/features/skills/skill-card-pill-row.js +137 -0
  798. package/dist/components/features/skills/skill-card-pill-row.js.map +1 -0
  799. package/dist/components/features/skills/skill-card.cjs +2 -0
  800. package/dist/components/features/skills/skill-card.cjs.map +1 -0
  801. package/dist/components/features/skills/skill-card.js +93 -0
  802. package/dist/components/features/skills/skill-card.js.map +1 -0
  803. package/dist/components/features/skills/skill-detail-modal.cjs +3 -0
  804. package/dist/components/features/skills/skill-detail-modal.cjs.map +1 -0
  805. package/dist/components/features/skills/skill-detail-modal.js +150 -0
  806. package/dist/components/features/skills/skill-detail-modal.js.map +1 -0
  807. package/dist/components/features/skills/skill-facet-rail.cjs +2 -0
  808. package/dist/components/features/skills/skill-facet-rail.cjs.map +1 -0
  809. package/dist/components/features/skills/skill-facet-rail.js +42 -0
  810. package/dist/components/features/skills/skill-facet-rail.js.map +1 -0
  811. package/dist/components/features/skills/skill-facet-row.cjs +2 -0
  812. package/dist/components/features/skills/skill-facet-row.cjs.map +1 -0
  813. package/dist/components/features/skills/skill-facet-row.js +44 -0
  814. package/dist/components/features/skills/skill-facet-row.js.map +1 -0
  815. package/dist/components/features/skills/skill-filter.cjs +2 -0
  816. package/dist/components/features/skills/skill-filter.cjs.map +1 -0
  817. package/dist/components/features/skills/skill-filter.js +166 -0
  818. package/dist/components/features/skills/skill-filter.js.map +1 -0
  819. package/dist/components/features/skills/skill-filters-modal.cjs +2 -0
  820. package/dist/components/features/skills/skill-filters-modal.cjs.map +1 -0
  821. package/dist/components/features/skills/skill-filters-modal.js +53 -0
  822. package/dist/components/features/skills/skill-filters-modal.js.map +1 -0
  823. package/dist/components/features/skills/skill-icon-badge.cjs +2 -0
  824. package/dist/components/features/skills/skill-icon-badge.cjs.map +1 -0
  825. package/dist/components/features/skills/skill-icon-badge.js +17 -0
  826. package/dist/components/features/skills/skill-icon-badge.js.map +1 -0
  827. package/dist/components/features/skills/skill-type-badge.cjs +2 -0
  828. package/dist/components/features/skills/skill-type-badge.cjs.map +1 -0
  829. package/dist/components/features/skills/skill-type-badge.js +21 -0
  830. package/dist/components/features/skills/skill-type-badge.js.map +1 -0
  831. package/dist/components/features/skills/skills-toolbar.cjs +2 -0
  832. package/dist/components/features/skills/skills-toolbar.cjs.map +1 -0
  833. package/dist/components/features/skills/skills-toolbar.js +63 -0
  834. package/dist/components/features/skills/skills-toolbar.js.map +1 -0
  835. package/dist/components/shared/buttons/circle-plus-check-toggle.cjs +1 -1
  836. package/dist/components/shared/buttons/circle-plus-check-toggle.cjs.map +1 -1
  837. package/dist/components/shared/buttons/circle-plus-check-toggle.js +19 -6
  838. package/dist/components/shared/buttons/circle-plus-check-toggle.js.map +1 -1
  839. package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs +1 -1
  840. package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs.map +1 -1
  841. package/dist/components/shared/buttons/conversation-confirmation-buttons.js +1 -1
  842. package/dist/components/shared/buttons/conversation-confirmation-buttons.js.map +1 -1
  843. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  844. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  845. package/dist/components/shared/filters/enum-filter-dropdown.d.ts +4 -1
  846. package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
  847. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  848. package/dist/components/shared/modals/settings/settings-form.cjs +1 -1
  849. package/dist/components/shared/modals/settings/settings-form.js +4 -4
  850. package/dist/components/ui/resize-handle.cjs +1 -1
  851. package/dist/components/ui/resize-handle.cjs.map +1 -1
  852. package/dist/components/ui/resize-handle.d.ts +2 -1
  853. package/dist/components/ui/resize-handle.js +6 -5
  854. package/dist/components/ui/resize-handle.js.map +1 -1
  855. package/dist/config/defaults.cjs +1 -1
  856. package/dist/config/defaults.cjs.map +1 -1
  857. package/dist/config/defaults.js +2 -2
  858. package/dist/config/defaults.js.map +1 -1
  859. package/dist/constants/skills-docs.cjs +2 -0
  860. package/dist/constants/skills-docs.cjs.map +1 -0
  861. package/dist/constants/skills-docs.js +6 -0
  862. package/dist/constants/skills-docs.js.map +1 -0
  863. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  864. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  865. package/dist/contexts/conversation-websocket-context.js +184 -159
  866. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  867. package/dist/fixtures/home-automations-demo.cjs +2 -0
  868. package/dist/fixtures/home-automations-demo.cjs.map +1 -0
  869. package/dist/fixtures/home-automations-demo.d.ts +1 -3
  870. package/dist/fixtures/home-automations-demo.js +384 -0
  871. package/dist/fixtures/home-automations-demo.js.map +1 -0
  872. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  873. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  874. package/dist/hooks/chat/use-slash-command.d.ts +1 -2
  875. package/dist/hooks/chat/use-slash-command.js +1 -0
  876. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  877. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  878. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  879. package/dist/hooks/mutation/use-create-conversation.js +27 -30
  880. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  881. package/dist/hooks/mutation/use-create-provider-connection.cjs +1 -0
  882. package/dist/hooks/mutation/use-create-provider-connection.d.ts +2 -0
  883. package/dist/hooks/mutation/use-create-provider-connection.js +1 -0
  884. package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
  885. package/dist/hooks/mutation/use-delete-mcp-server.js +3 -3
  886. package/dist/hooks/mutation/use-delete-provider-connection.cjs +1 -0
  887. package/dist/hooks/mutation/use-delete-provider-connection.d.ts +1 -0
  888. package/dist/hooks/mutation/use-delete-provider-connection.js +1 -0
  889. package/dist/hooks/mutation/use-switch-acp-model.cjs +1 -1
  890. package/dist/hooks/mutation/use-switch-acp-model.cjs.map +1 -1
  891. package/dist/hooks/mutation/use-switch-acp-model.d.ts +5 -3
  892. package/dist/hooks/mutation/use-switch-acp-model.js +9 -13
  893. package/dist/hooks/mutation/use-switch-acp-model.js.map +1 -1
  894. package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
  895. package/dist/hooks/mutation/use-update-mcp-server.js +6 -6
  896. package/dist/hooks/mutation/use-update-provider-connection.cjs +1 -0
  897. package/dist/hooks/mutation/use-update-provider-connection.d.ts +7 -0
  898. package/dist/hooks/mutation/use-update-provider-connection.js +1 -0
  899. package/dist/hooks/query/query-keys.cjs +1 -1
  900. package/dist/hooks/query/query-keys.cjs.map +1 -1
  901. package/dist/hooks/query/query-keys.d.ts +3 -0
  902. package/dist/hooks/query/query-keys.js +4 -4
  903. package/dist/hooks/query/query-keys.js.map +1 -1
  904. package/dist/hooks/query/use-automation-detail.cjs +1 -0
  905. package/dist/hooks/query/use-automation-detail.js +2 -0
  906. package/dist/hooks/query/use-automation-health.cjs +2 -0
  907. package/dist/hooks/query/use-automation-health.cjs.map +1 -0
  908. package/dist/hooks/query/use-automation-health.js +22 -0
  909. package/dist/hooks/query/use-automation-health.js.map +1 -0
  910. package/dist/hooks/query/use-automations.cjs +2 -0
  911. package/dist/hooks/query/use-automations.cjs.map +1 -0
  912. package/dist/hooks/query/use-automations.js +28 -0
  913. package/dist/hooks/query/use-automations.js.map +1 -0
  914. package/dist/hooks/query/use-backends-health.cjs +1 -1
  915. package/dist/hooks/query/use-backends-health.cjs.map +1 -1
  916. package/dist/hooks/query/use-backends-health.js +1 -1
  917. package/dist/hooks/query/use-backends-health.js.map +1 -1
  918. package/dist/hooks/query/use-conversation-history.cjs +1 -1
  919. package/dist/hooks/query/use-conversation-history.cjs.map +1 -1
  920. package/dist/hooks/query/use-conversation-history.js +3 -1
  921. package/dist/hooks/query/use-conversation-history.js.map +1 -1
  922. package/dist/hooks/query/use-conversation-metrics.cjs +1 -1
  923. package/dist/hooks/query/use-conversation-metrics.js +3 -3
  924. package/dist/hooks/query/use-git-sync.d.ts +19 -0
  925. package/dist/hooks/query/use-latest-automation-runs.cjs +1 -0
  926. package/dist/hooks/query/use-latest-automation-runs.d.ts +2 -0
  927. package/dist/hooks/query/use-latest-automation-runs.js +3 -0
  928. package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
  929. package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
  930. package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
  931. package/dist/hooks/query/use-paginated-conversations.js +1 -1
  932. package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
  933. package/dist/hooks/query/use-provider-connections.cjs +2 -0
  934. package/dist/hooks/query/use-provider-connections.cjs.map +1 -0
  935. package/dist/hooks/query/use-provider-connections.d.ts +8 -0
  936. package/dist/hooks/query/use-provider-connections.js +19 -0
  937. package/dist/hooks/query/use-provider-connections.js.map +1 -0
  938. package/dist/hooks/query/use-repository-git-items.cjs +2 -0
  939. package/dist/hooks/query/use-repository-git-items.cjs.map +1 -0
  940. package/dist/hooks/query/use-repository-git-items.d.ts +3 -0
  941. package/dist/hooks/query/use-repository-git-items.js +33 -0
  942. package/dist/hooks/query/use-repository-git-items.js.map +1 -0
  943. package/dist/hooks/query/use-task-polling.cjs +1 -1
  944. package/dist/hooks/query/use-task-polling.cjs.map +1 -1
  945. package/dist/hooks/query/use-task-polling.js +12 -10
  946. package/dist/hooks/query/use-task-polling.js.map +1 -1
  947. package/dist/hooks/query/use-workspace-files.cjs +1 -1
  948. package/dist/hooks/query/use-workspace-files.cjs.map +1 -1
  949. package/dist/hooks/query/use-workspace-files.d.ts +14 -4
  950. package/dist/hooks/query/use-workspace-files.js +46 -33
  951. package/dist/hooks/query/use-workspace-files.js.map +1 -1
  952. package/dist/hooks/use-bash-command-runner.cjs +1 -1
  953. package/dist/hooks/use-bash-command-runner.cjs.map +1 -1
  954. package/dist/hooks/use-bash-command-runner.js +45 -42
  955. package/dist/hooks/use-bash-command-runner.js.map +1 -1
  956. package/dist/hooks/use-conversation-overview-column-space.cjs +2 -0
  957. package/dist/hooks/use-conversation-overview-column-space.cjs.map +1 -0
  958. package/dist/hooks/use-conversation-overview-column-space.d.ts +2 -0
  959. package/dist/hooks/use-conversation-overview-column-space.js +25 -0
  960. package/dist/hooks/use-conversation-overview-column-space.js.map +1 -0
  961. package/dist/hooks/use-conversation-overview-git-diff-stats.cjs +2 -0
  962. package/dist/hooks/use-conversation-overview-git-diff-stats.cjs.map +1 -0
  963. package/dist/hooks/use-conversation-overview-git-diff-stats.d.ts +7 -0
  964. package/dist/hooks/use-conversation-overview-git-diff-stats.js +37 -0
  965. package/dist/hooks/use-conversation-overview-git-diff-stats.js.map +1 -0
  966. package/dist/hooks/use-conversation-overview-panel-peek.cjs +2 -0
  967. package/dist/hooks/use-conversation-overview-panel-peek.cjs.map +1 -0
  968. package/dist/hooks/use-conversation-overview-panel-peek.d.ts +9 -0
  969. package/dist/hooks/use-conversation-overview-panel-peek.js +32 -0
  970. package/dist/hooks/use-conversation-overview-panel-peek.js.map +1 -0
  971. package/dist/hooks/use-conversation-overview-stats.cjs +2 -0
  972. package/dist/hooks/use-conversation-overview-stats.cjs.map +1 -0
  973. package/dist/hooks/use-conversation-overview-stats.d.ts +4 -0
  974. package/dist/hooks/use-conversation-overview-stats.js +15 -0
  975. package/dist/hooks/use-conversation-overview-stats.js.map +1 -0
  976. package/dist/hooks/use-conversation-primary-repository.cjs +2 -0
  977. package/dist/hooks/use-conversation-primary-repository.cjs.map +1 -0
  978. package/dist/hooks/use-conversation-primary-repository.d.ts +11 -0
  979. package/dist/hooks/use-conversation-primary-repository.js +17 -0
  980. package/dist/hooks/use-conversation-primary-repository.js.map +1 -0
  981. package/dist/hooks/use-drag-scroll.cjs +2 -0
  982. package/dist/hooks/use-drag-scroll.cjs.map +1 -0
  983. package/dist/hooks/use-drag-scroll.d.ts +12 -0
  984. package/dist/hooks/use-drag-scroll.js +41 -0
  985. package/dist/hooks/use-drag-scroll.js.map +1 -0
  986. package/dist/hooks/use-has-permission.cjs +2 -0
  987. package/dist/hooks/use-has-permission.cjs.map +1 -0
  988. package/dist/hooks/use-has-permission.js +8 -0
  989. package/dist/hooks/use-has-permission.js.map +1 -0
  990. package/dist/hooks/use-home-automation-actions.cjs +2 -0
  991. package/dist/hooks/use-home-automation-actions.cjs.map +1 -0
  992. package/dist/hooks/use-home-automation-actions.js +15 -0
  993. package/dist/hooks/use-home-automation-actions.js.map +1 -0
  994. package/dist/hooks/use-launch-skill-in-chat.cjs +2 -0
  995. package/dist/hooks/use-launch-skill-in-chat.cjs.map +1 -0
  996. package/dist/hooks/use-launch-skill-in-chat.js +16 -0
  997. package/dist/hooks/use-launch-skill-in-chat.js.map +1 -0
  998. package/dist/hooks/use-mcp-server-health.cjs +1 -1
  999. package/dist/hooks/use-mcp-server-health.js +3 -3
  1000. package/dist/hooks/use-resizable-drawer-width.cjs +2 -0
  1001. package/dist/hooks/use-resizable-drawer-width.cjs.map +1 -0
  1002. package/dist/hooks/use-resizable-drawer-width.d.ts +22 -0
  1003. package/dist/hooks/use-resizable-drawer-width.js +46 -0
  1004. package/dist/hooks/use-resizable-drawer-width.js.map +1 -0
  1005. package/dist/hooks/use-responder-url-secret.cjs +2 -0
  1006. package/dist/hooks/use-responder-url-secret.cjs.map +1 -0
  1007. package/dist/hooks/use-responder-url-secret.d.ts +5 -0
  1008. package/dist/hooks/use-responder-url-secret.js +51 -0
  1009. package/dist/hooks/use-responder-url-secret.js.map +1 -0
  1010. package/dist/hooks/use-select-conversation-tab.cjs +1 -1
  1011. package/dist/hooks/use-select-conversation-tab.cjs.map +1 -1
  1012. package/dist/hooks/use-select-conversation-tab.d.ts +2 -0
  1013. package/dist/hooks/use-select-conversation-tab.js +15 -7
  1014. package/dist/hooks/use-select-conversation-tab.js.map +1 -1
  1015. package/dist/hooks/use-tracking.cjs +1 -1
  1016. package/dist/hooks/use-tracking.cjs.map +1 -1
  1017. package/dist/hooks/use-tracking.d.ts +23 -0
  1018. package/dist/hooks/use-tracking.js +16 -0
  1019. package/dist/hooks/use-tracking.js.map +1 -1
  1020. package/dist/hooks/use-websocket.cjs +1 -1
  1021. package/dist/hooks/use-websocket.cjs.map +1 -1
  1022. package/dist/hooks/use-websocket.d.ts +1 -2
  1023. package/dist/hooks/use-websocket.js +58 -51
  1024. package/dist/hooks/use-websocket.js.map +1 -1
  1025. package/dist/i18n/declaration.cjs +1 -1
  1026. package/dist/i18n/declaration.cjs.map +1 -1
  1027. package/dist/i18n/declaration.d.ts +182 -43
  1028. package/dist/i18n/declaration.js +1 -1
  1029. package/dist/i18n/declaration.js.map +1 -1
  1030. package/dist/i18n/translation.cjs +3 -3
  1031. package/dist/i18n/translation.cjs.map +1 -1
  1032. package/dist/i18n/translation.js +3092 -729
  1033. package/dist/i18n/translation.js.map +1 -1
  1034. package/dist/icons/check-circle.cjs +2 -0
  1035. package/dist/icons/check-circle.cjs.map +1 -0
  1036. package/dist/icons/check-circle.js +20 -0
  1037. package/dist/icons/check-circle.js.map +1 -0
  1038. package/dist/icons/chevron-down.cjs +2 -0
  1039. package/dist/icons/chevron-down.cjs.map +1 -0
  1040. package/dist/icons/chevron-down.js +20 -0
  1041. package/dist/icons/chevron-down.js.map +1 -0
  1042. package/dist/icons/clock.cjs +2 -0
  1043. package/dist/icons/clock.cjs.map +1 -0
  1044. package/dist/icons/clock.js +20 -0
  1045. package/dist/icons/clock.js.map +1 -0
  1046. package/dist/icons/exclamation-circle.cjs +2 -0
  1047. package/dist/icons/exclamation-circle.cjs.map +1 -0
  1048. package/dist/icons/exclamation-circle.js +20 -0
  1049. package/dist/icons/exclamation-circle.js.map +1 -0
  1050. package/dist/icons/kebab-vertical.cjs +2 -0
  1051. package/dist/icons/kebab-vertical.cjs.map +1 -0
  1052. package/dist/icons/kebab-vertical.js +14 -0
  1053. package/dist/icons/kebab-vertical.js.map +1 -0
  1054. package/dist/icons/key.cjs +2 -0
  1055. package/dist/icons/key.cjs.map +1 -0
  1056. package/dist/icons/key.js +21 -0
  1057. package/dist/icons/key.js.map +1 -0
  1058. package/dist/icons/message-square-share.cjs +2 -0
  1059. package/dist/icons/message-square-share.cjs.map +1 -0
  1060. package/dist/icons/message-square-share.js +22 -0
  1061. package/dist/icons/message-square-share.js.map +1 -0
  1062. package/dist/icons/play.cjs +2 -0
  1063. package/dist/icons/play.cjs.map +1 -0
  1064. package/dist/icons/play.js +19 -0
  1065. package/dist/icons/play.js.map +1 -0
  1066. package/dist/icons/power.cjs +2 -0
  1067. package/dist/icons/power.cjs.map +1 -0
  1068. package/dist/icons/power.js +20 -0
  1069. package/dist/icons/power.js.map +1 -0
  1070. package/dist/icons/sparkle.cjs +2 -0
  1071. package/dist/icons/sparkle.cjs.map +1 -0
  1072. package/dist/icons/sparkle.js +20 -0
  1073. package/dist/icons/sparkle.js.map +1 -0
  1074. package/dist/icons/trash.cjs +2 -0
  1075. package/dist/icons/trash.cjs.map +1 -0
  1076. package/dist/icons/trash.js +20 -0
  1077. package/dist/icons/trash.js.map +1 -0
  1078. package/dist/icons/x-circle.cjs +2 -0
  1079. package/dist/icons/x-circle.cjs.map +1 -0
  1080. package/dist/icons/x-circle.js +20 -0
  1081. package/dist/icons/x-circle.js.map +1 -0
  1082. package/dist/locales/ar/openhands.json +183 -44
  1083. package/dist/locales/ca/openhands.json +183 -44
  1084. package/dist/locales/de/openhands.json +183 -44
  1085. package/dist/locales/en/openhands.json +183 -44
  1086. package/dist/locales/es/openhands.json +183 -44
  1087. package/dist/locales/fr/openhands.json +183 -44
  1088. package/dist/locales/it/openhands.json +183 -44
  1089. package/dist/locales/ja/openhands.json +183 -44
  1090. package/dist/locales/ko-KR/openhands.json +183 -44
  1091. package/dist/locales/no/openhands.json +183 -44
  1092. package/dist/locales/pt/openhands.json +183 -44
  1093. package/dist/locales/tr/openhands.json +183 -44
  1094. package/dist/locales/uk/openhands.json +183 -44
  1095. package/dist/locales/zh-CN/openhands.json +183 -44
  1096. package/dist/locales/zh-TW/openhands.json +183 -44
  1097. package/dist/manifests/automation-insights.cjs +2 -0
  1098. package/dist/manifests/automation-insights.cjs.map +1 -0
  1099. package/dist/manifests/automation-insights.d.ts +2 -0
  1100. package/dist/manifests/automation-insights.js +9 -0
  1101. package/dist/manifests/automation-insights.js.map +1 -0
  1102. package/dist/manifests/automation-interface.cjs +1 -1
  1103. package/dist/manifests/automation-interface.cjs.map +1 -1
  1104. package/dist/manifests/automation-interface.d.ts +47 -31
  1105. package/dist/manifests/automation-interface.js +48 -54
  1106. package/dist/manifests/automation-interface.js.map +1 -1
  1107. package/dist/manifests/automation-setup.cjs +1 -1
  1108. package/dist/manifests/automation-setup.cjs.map +1 -1
  1109. package/dist/manifests/automation-setup.d.ts +37 -3
  1110. package/dist/manifests/automation-setup.js +16 -2
  1111. package/dist/manifests/automation-setup.js.map +1 -1
  1112. package/dist/manifests/interface-validation.cjs +1 -1
  1113. package/dist/manifests/interface-validation.cjs.map +1 -1
  1114. package/dist/manifests/interface-validation.js +56 -52
  1115. package/dist/manifests/interface-validation.js.map +1 -1
  1116. package/dist/manifests/manifest-actions.d.ts +5 -0
  1117. package/dist/manifests/manifest-bundle.d.ts +30 -0
  1118. package/dist/manifests/manifest-local-validation.d.ts +10 -1
  1119. package/dist/manifests/manifest-sources.cjs +1 -1
  1120. package/dist/manifests/manifest-sources.cjs.map +1 -1
  1121. package/dist/manifests/manifest-sources.js +3 -3
  1122. package/dist/manifests/manifest-sources.js.map +1 -1
  1123. package/dist/manifests/manifest-template.d.ts +14 -0
  1124. package/dist/manifests/manifest-validation.cjs +1 -1
  1125. package/dist/manifests/manifest-validation.cjs.map +1 -1
  1126. package/dist/manifests/manifest-validation.js +78 -45
  1127. package/dist/manifests/manifest-validation.js.map +1 -1
  1128. package/dist/manifests/types.cjs +1 -1
  1129. package/dist/manifests/types.cjs.map +1 -1
  1130. package/dist/manifests/types.d.ts +64 -3
  1131. package/dist/manifests/types.js +7 -6
  1132. package/dist/manifests/types.js.map +1 -1
  1133. package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.cjs +1 -1
  1134. package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.js +10 -10
  1135. package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.cjs +1 -1
  1136. package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.js +8 -8
  1137. package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.cjs +1 -1
  1138. package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.js +9 -9
  1139. package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs +4843 -0
  1140. package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs.map +1 -0
  1141. package/dist/node_modules/@openhands/extensions/automations/bundle-index.js +11 -0
  1142. package/dist/node_modules/@openhands/extensions/automations/bundle-index.js.map +1 -0
  1143. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs +13 -0
  1144. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs.map +1 -0
  1145. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js +87 -0
  1146. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js.map +1 -0
  1147. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +12 -0
  1148. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -0
  1149. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +98 -0
  1150. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -0
  1151. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +9 -7
  1152. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
  1153. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +32 -13
  1154. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
  1155. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +2 -2
  1156. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -1
  1157. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +29 -34
  1158. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -1
  1159. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs +3 -3
  1160. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs.map +1 -1
  1161. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js +2 -2
  1162. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js.map +1 -1
  1163. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs +14 -0
  1164. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs.map +1 -0
  1165. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js +72 -0
  1166. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js.map +1 -0
  1167. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
  1168. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
  1169. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +16 -10
  1170. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
  1171. package/dist/node_modules/@openhands/extensions/automations/index.cjs +1 -1
  1172. package/dist/node_modules/@openhands/extensions/automations/index.cjs.map +1 -1
  1173. package/dist/node_modules/@openhands/extensions/automations/index.js +18 -13
  1174. package/dist/node_modules/@openhands/extensions/automations/index.js.map +1 -1
  1175. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
  1176. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
  1177. package/dist/node_modules/@openhands/extensions/automations/interface.js +6 -2
  1178. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
  1179. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs +1 -1
  1180. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs.map +1 -1
  1181. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js +36 -3
  1182. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js.map +1 -1
  1183. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs +2 -0
  1184. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs.map +1 -0
  1185. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js +75 -0
  1186. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js.map +1 -0
  1187. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
  1188. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
  1189. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +68 -66
  1190. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
  1191. package/dist/node_modules/@openhands/extensions/skills/index.cjs +1002 -47
  1192. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  1193. package/dist/node_modules/@openhands/extensions/skills/index.js +59 -17
  1194. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  1195. package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs +2 -0
  1196. package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs.map +1 -0
  1197. package/dist/node_modules/lucide-react/dist/esm/icons/activity.js +9 -0
  1198. package/dist/node_modules/lucide-react/dist/esm/icons/activity.js.map +1 -0
  1199. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs +2 -0
  1200. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs.map +1 -0
  1201. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js +12 -0
  1202. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js.map +1 -0
  1203. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.cjs +2 -0
  1204. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.cjs.map +1 -0
  1205. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js +27 -0
  1206. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js.map +1 -0
  1207. package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs +2 -0
  1208. package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs.map +1 -0
  1209. package/dist/node_modules/lucide-react/dist/esm/icons/download.js +19 -0
  1210. package/dist/node_modules/lucide-react/dist/esm/icons/download.js.map +1 -0
  1211. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs +2 -0
  1212. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs.map +1 -0
  1213. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +27 -0
  1214. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +1 -0
  1215. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs +2 -0
  1216. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs.map +1 -0
  1217. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js +27 -0
  1218. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js.map +1 -0
  1219. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs +2 -0
  1220. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs.map +1 -0
  1221. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js +12 -0
  1222. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js.map +1 -0
  1223. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs +2 -0
  1224. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs.map +1 -0
  1225. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js +39 -0
  1226. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js.map +1 -0
  1227. package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs +2 -0
  1228. package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs.map +1 -0
  1229. package/dist/node_modules/lucide-react/dist/esm/icons/library.js +23 -0
  1230. package/dist/node_modules/lucide-react/dist/esm/icons/library.js.map +1 -0
  1231. package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs +2 -0
  1232. package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs.map +1 -0
  1233. package/dist/node_modules/lucide-react/dist/esm/icons/package.js +23 -0
  1234. package/dist/node_modules/lucide-react/dist/esm/icons/package.js.map +1 -0
  1235. package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs +2 -0
  1236. package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs.map +1 -0
  1237. package/dist/node_modules/lucide-react/dist/esm/icons/palette.js +39 -0
  1238. package/dist/node_modules/lucide-react/dist/esm/icons/palette.js.map +1 -0
  1239. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs +2 -0
  1240. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs.map +1 -0
  1241. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js +12 -0
  1242. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js.map +1 -0
  1243. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs +2 -0
  1244. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs.map +1 -0
  1245. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js +12 -0
  1246. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js.map +1 -0
  1247. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs +2 -0
  1248. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs.map +1 -0
  1249. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js +25 -0
  1250. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js.map +1 -0
  1251. package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs +2 -0
  1252. package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs.map +1 -0
  1253. package/dist/node_modules/lucide-react/dist/esm/icons/timer.js +27 -0
  1254. package/dist/node_modules/lucide-react/dist/esm/icons/timer.js.map +1 -0
  1255. package/dist/package.cjs +1 -1
  1256. package/dist/package.cjs.map +1 -1
  1257. package/dist/package.js +3 -3
  1258. package/dist/package.js.map +1 -1
  1259. package/dist/routes/app-settings.cjs +1 -1
  1260. package/dist/routes/app-settings.cjs.map +1 -1
  1261. package/dist/routes/app-settings.js +87 -85
  1262. package/dist/routes/app-settings.js.map +1 -1
  1263. package/dist/routes/commits-tab.cjs +1 -1
  1264. package/dist/routes/commits-tab.cjs.map +1 -1
  1265. package/dist/routes/commits-tab.js +27 -21
  1266. package/dist/routes/commits-tab.js.map +1 -1
  1267. package/dist/routes/conversation.cjs +1 -1
  1268. package/dist/routes/conversation.cjs.map +1 -1
  1269. package/dist/routes/conversation.js +56 -55
  1270. package/dist/routes/conversation.js.map +1 -1
  1271. package/dist/routes/files-tab.cjs +1 -1
  1272. package/dist/routes/files-tab.cjs.map +1 -1
  1273. package/dist/routes/files-tab.d.ts +4 -0
  1274. package/dist/routes/files-tab.js +121 -151
  1275. package/dist/routes/files-tab.js.map +1 -1
  1276. package/dist/routes/llm-settings.cjs +1 -1
  1277. package/dist/routes/llm-settings.cjs.map +1 -1
  1278. package/dist/routes/llm-settings.d.ts +9 -1
  1279. package/dist/routes/llm-settings.js +137 -107
  1280. package/dist/routes/llm-settings.js.map +1 -1
  1281. package/dist/routes/mcp.cjs +1 -1
  1282. package/dist/routes/mcp.cjs.map +1 -1
  1283. package/dist/routes/mcp.js +20 -20
  1284. package/dist/routes/secrets-settings.cjs +1 -1
  1285. package/dist/routes/secrets-settings.js +15 -15
  1286. package/dist/services/settings.cjs +1 -1
  1287. package/dist/services/settings.cjs.map +1 -1
  1288. package/dist/services/settings.js +2 -2
  1289. package/dist/services/settings.js.map +1 -1
  1290. package/dist/services/telemetry.cjs +1 -1
  1291. package/dist/services/telemetry.cjs.map +1 -1
  1292. package/dist/services/telemetry.js +47 -51
  1293. package/dist/services/telemetry.js.map +1 -1
  1294. package/dist/stores/conversation-store.cjs +1 -1
  1295. package/dist/stores/conversation-store.cjs.map +1 -1
  1296. package/dist/stores/conversation-store.d.ts +8 -1
  1297. package/dist/stores/conversation-store.js +9 -0
  1298. package/dist/stores/conversation-store.js.map +1 -1
  1299. package/dist/stores/error-message-store.cjs +1 -1
  1300. package/dist/stores/error-message-store.cjs.map +1 -1
  1301. package/dist/stores/error-message-store.d.ts +3 -1
  1302. package/dist/stores/error-message-store.js +5 -3
  1303. package/dist/stores/error-message-store.js.map +1 -1
  1304. package/dist/stores/files-tab-store.cjs +1 -1
  1305. package/dist/stores/files-tab-store.cjs.map +1 -1
  1306. package/dist/stores/files-tab-store.d.ts +13 -0
  1307. package/dist/stores/files-tab-store.js +49 -5
  1308. package/dist/stores/files-tab-store.js.map +1 -1
  1309. package/dist/stores/use-event-store.cjs +1 -1
  1310. package/dist/stores/use-event-store.cjs.map +1 -1
  1311. package/dist/stores/use-event-store.js +11 -11
  1312. package/dist/stores/use-event-store.js.map +1 -1
  1313. package/dist/types/agent-server/core/events/message-event.d.ts +2 -2
  1314. package/dist/types/automation.cjs +2 -0
  1315. package/dist/types/automation.cjs.map +1 -0
  1316. package/dist/types/automation.js +8 -0
  1317. package/dist/types/automation.js.map +1 -0
  1318. package/dist/types/git-sync.d.ts +51 -0
  1319. package/dist/utils/automation-catalog.cjs +1 -1
  1320. package/dist/utils/automation-catalog.cjs.map +1 -1
  1321. package/dist/utils/automation-catalog.d.ts +12 -0
  1322. package/dist/utils/automation-catalog.js +20 -1
  1323. package/dist/utils/automation-catalog.js.map +1 -1
  1324. package/dist/utils/automation-schedule.cjs +2 -0
  1325. package/dist/utils/automation-schedule.cjs.map +1 -0
  1326. package/dist/utils/automation-schedule.js +8 -0
  1327. package/dist/utils/automation-schedule.js.map +1 -0
  1328. package/dist/utils/automation-stack-section.cjs +2 -0
  1329. package/dist/utils/automation-stack-section.cjs.map +1 -0
  1330. package/dist/utils/automation-stack-section.d.ts +2 -0
  1331. package/dist/utils/automation-stack-section.js +6 -0
  1332. package/dist/utils/automation-stack-section.js.map +1 -0
  1333. package/dist/utils/constants.cjs +1 -1
  1334. package/dist/utils/constants.cjs.map +1 -1
  1335. package/dist/utils/constants.js +4 -0
  1336. package/dist/utils/constants.js.map +1 -1
  1337. package/dist/utils/conversation-local-storage.cjs +1 -1
  1338. package/dist/utils/conversation-local-storage.cjs.map +1 -1
  1339. package/dist/utils/conversation-local-storage.d.ts +17 -4
  1340. package/dist/utils/conversation-local-storage.js +111 -63
  1341. package/dist/utils/conversation-local-storage.js.map +1 -1
  1342. package/dist/utils/conversation-metrics.cjs +1 -1
  1343. package/dist/utils/conversation-metrics.cjs.map +1 -1
  1344. package/dist/utils/conversation-metrics.d.ts +3 -2
  1345. package/dist/utils/conversation-metrics.js +16 -14
  1346. package/dist/utils/conversation-metrics.js.map +1 -1
  1347. package/dist/utils/conversation-overview-project-scope.cjs +2 -0
  1348. package/dist/utils/conversation-overview-project-scope.cjs.map +1 -0
  1349. package/dist/utils/conversation-overview-project-scope.d.ts +16 -0
  1350. package/dist/utils/conversation-overview-project-scope.js +22 -0
  1351. package/dist/utils/conversation-overview-project-scope.js.map +1 -0
  1352. package/dist/utils/error-handler.cjs +1 -1
  1353. package/dist/utils/error-handler.cjs.map +1 -1
  1354. package/dist/utils/error-handler.d.ts +3 -2
  1355. package/dist/utils/error-handler.js +18 -5
  1356. package/dist/utils/error-handler.js.map +1 -1
  1357. package/dist/utils/extension-module-card-classes.cjs +1 -1
  1358. package/dist/utils/extension-module-card-classes.cjs.map +1 -1
  1359. package/dist/utils/extension-module-card-classes.d.ts +1 -1
  1360. package/dist/utils/extension-module-card-classes.js +2 -2
  1361. package/dist/utils/extension-module-card-classes.js.map +1 -1
  1362. package/dist/utils/format-model-name.cjs +1 -1
  1363. package/dist/utils/format-model-name.cjs.map +1 -1
  1364. package/dist/utils/format-model-name.d.ts +1 -0
  1365. package/dist/utils/format-model-name.js +1 -0
  1366. package/dist/utils/format-model-name.js.map +1 -1
  1367. package/dist/utils/format-relative-time.cjs +2 -0
  1368. package/dist/utils/format-relative-time.cjs.map +1 -0
  1369. package/dist/utils/format-relative-time.js +17 -0
  1370. package/dist/utils/format-relative-time.js.map +1 -0
  1371. package/dist/utils/git-diff-stats.cjs +5 -0
  1372. package/dist/utils/git-diff-stats.cjs.map +1 -0
  1373. package/dist/utils/git-diff-stats.d.ts +9 -0
  1374. package/dist/utils/git-diff-stats.js +53 -0
  1375. package/dist/utils/git-diff-stats.js.map +1 -0
  1376. package/dist/utils/handle-event-for-ui.cjs +1 -1
  1377. package/dist/utils/handle-event-for-ui.cjs.map +1 -1
  1378. package/dist/utils/handle-event-for-ui.js +13 -11
  1379. package/dist/utils/handle-event-for-ui.js.map +1 -1
  1380. package/dist/utils/mcp-credential-validation.cjs +1 -1
  1381. package/dist/utils/mcp-credential-validation.js +3 -3
  1382. package/dist/utils/mcp-marketplace-utils.cjs +1 -1
  1383. package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
  1384. package/dist/utils/mcp-marketplace-utils.js +22 -9
  1385. package/dist/utils/mcp-marketplace-utils.js.map +1 -1
  1386. package/dist/utils/parse-git-remote-url.cjs +1 -1
  1387. package/dist/utils/parse-git-remote-url.cjs.map +1 -1
  1388. package/dist/utils/parse-git-remote-url.js +6 -7
  1389. package/dist/utils/parse-git-remote-url.js.map +1 -1
  1390. package/dist/utils/recommended-automation-rail.cjs +2 -0
  1391. package/dist/utils/recommended-automation-rail.cjs.map +1 -0
  1392. package/dist/utils/recommended-automation-rail.d.ts +22 -0
  1393. package/dist/utils/recommended-automation-rail.js +44 -0
  1394. package/dist/utils/recommended-automation-rail.js.map +1 -0
  1395. package/dist/utils/responder-deployment.cjs +2 -0
  1396. package/dist/utils/responder-deployment.cjs.map +1 -0
  1397. package/dist/utils/responder-deployment.js +42 -0
  1398. package/dist/utils/responder-deployment.js.map +1 -0
  1399. package/dist/utils/scroll-fade-state.cjs +2 -0
  1400. package/dist/utils/scroll-fade-state.cjs.map +1 -0
  1401. package/dist/utils/scroll-fade-state.d.ts +6 -0
  1402. package/dist/utils/scroll-fade-state.js +13 -0
  1403. package/dist/utils/scroll-fade-state.js.map +1 -0
  1404. package/dist/utils/skill-category.cjs +2 -0
  1405. package/dist/utils/skill-category.cjs.map +1 -0
  1406. package/dist/utils/skill-category.js +51 -0
  1407. package/dist/utils/skill-category.js.map +1 -0
  1408. package/dist/utils/skill-scope.cjs +1 -1
  1409. package/dist/utils/skill-scope.cjs.map +1 -1
  1410. package/dist/utils/skill-scope.js +1 -1
  1411. package/dist/utils/skill-scope.js.map +1 -1
  1412. package/dist/utils/streaming-delta-batcher.cjs +2 -0
  1413. package/dist/utils/streaming-delta-batcher.cjs.map +1 -0
  1414. package/dist/utils/streaming-delta-batcher.d.ts +21 -0
  1415. package/dist/utils/streaming-delta-batcher.js +31 -0
  1416. package/dist/utils/streaming-delta-batcher.js.map +1 -0
  1417. package/dist/utils/tar-gzip.d.ts +26 -0
  1418. package/dist/utils/transcript-export/load-complete-events.cjs +1 -1
  1419. package/dist/utils/transcript-export/load-complete-events.cjs.map +1 -1
  1420. package/dist/utils/transcript-export/load-complete-events.js +24 -16
  1421. package/dist/utils/transcript-export/load-complete-events.js.map +1 -1
  1422. package/dist/utils/utils.cjs +1 -1
  1423. package/dist/utils/utils.cjs.map +1 -1
  1424. package/dist/utils/utils.d.ts +1 -41
  1425. package/dist/utils/utils.js +27 -6
  1426. package/dist/utils/utils.js.map +1 -1
  1427. package/dist/utils/websocket-handshake.cjs +2 -0
  1428. package/dist/utils/websocket-handshake.cjs.map +1 -0
  1429. package/dist/utils/websocket-handshake.d.ts +11 -0
  1430. package/dist/utils/websocket-handshake.js +12 -0
  1431. package/dist/utils/websocket-handshake.js.map +1 -0
  1432. package/package.json +3 -3
  1433. package/scripts/check-translation-completeness.cjs +7 -0
  1434. package/scripts/dev-static.mjs +49 -43
  1435. package/scripts/dev-with-automation.mjs +111 -14
  1436. package/scripts/seed-automation-ux-data.mjs +810 -0
  1437. package/build/assets/acp-providers-D1PORKc0.js +0 -1
  1438. package/build/assets/active-backend-context-IqOjobNK.js +0 -2
  1439. package/build/assets/agent-context-settings-DMrObcIS.js +0 -1
  1440. package/build/assets/agent-profiles-settings-DororXN5.js +0 -1
  1441. package/build/assets/agent-server-conversation-service.api-DWBe0rbX.js +0 -86
  1442. package/build/assets/agent-settings-BJVk92PU.js +0 -2
  1443. package/build/assets/agent-settings-COfJsQ1d.js +0 -1
  1444. package/build/assets/alert-banner-CzZsm7ms.js +0 -1
  1445. package/build/assets/api-key-entry-screen-D8Fade_-.js +0 -1
  1446. package/build/assets/app-settings-CpyGB3AT.js +0 -1
  1447. package/build/assets/automation-detail-B-jQ39Mm.js +0 -3
  1448. package/build/assets/automation-export-B1dywoqk.js +0 -2
  1449. package/build/assets/automation-setup-route-C-bWUZBi.js +0 -1
  1450. package/build/assets/automation-templates-DgpCGOJV.js +0 -1
  1451. package/build/assets/automations-list-DnMxlxsL.js +0 -1
  1452. package/build/assets/back-nav-button-HHEneWMw.js +0 -1
  1453. package/build/assets/backend-form-modal-DiVrD4Cm.js +0 -1
  1454. package/build/assets/backend-synced-settings-badge-7MIjpr8M.js +0 -1
  1455. package/build/assets/badge-CpYmcVZV.js +0 -1
  1456. package/build/assets/base-modal-Fnh6Uln9.js +0 -1
  1457. package/build/assets/bot-BQZx8e2i.js +0 -1
  1458. package/build/assets/brand-button-swT1RyO0.js +0 -1
  1459. package/build/assets/browser-B9AbV6kG.js +0 -7
  1460. package/build/assets/browser-tab-zAY12m_i.js +0 -1
  1461. package/build/assets/chat-send-button-DsJtivmL.js +0 -1
  1462. package/build/assets/check-WAFXrrs_.js +0 -1
  1463. package/build/assets/chevron-down-CifNWzme.js +0 -1
  1464. package/build/assets/circle-check-CtnimJa8.js +0 -1
  1465. package/build/assets/circle-plus-check-toggle-Cuzx55bo.js +0 -1
  1466. package/build/assets/cloud-funnel-analytics-86CwNdSh.js +0 -1
  1467. package/build/assets/combobox-caret-D0fRotFi.js +0 -1
  1468. package/build/assets/command-menu-BXy03FBl.js +0 -1
  1469. package/build/assets/condenser-settings-BmZa0ui_.js +0 -1
  1470. package/build/assets/confirmation-modal-BgoN6lbN.js +0 -1
  1471. package/build/assets/context-menu-list-item-Bq02tc-P.js +0 -1
  1472. package/build/assets/conversation-BPo8SvLN.js +0 -1
  1473. package/build/assets/conversation-CPCVsCUY.js +0 -90
  1474. package/build/assets/conversation-panel-BPo8SvLN.js +0 -1
  1475. package/build/assets/conversation-state-store-C5YpjMNy.js +0 -1
  1476. package/build/assets/conversation-store-Blc5xysY.js +0 -6
  1477. package/build/assets/conversation-tab-empty-state-CMqo_0Bd.js +0 -1
  1478. package/build/assets/copy-to-clipboard-button-Cg1pF0xn.js +0 -1
  1479. package/build/assets/device-verify-BfQLgNyq.js +0 -1
  1480. package/build/assets/dropdown-classes-BIqQr5mx.js +0 -1
  1481. package/build/assets/entry.client-CxFjRYqH.js +0 -2
  1482. package/build/assets/enum-filter-dropdown-C_yV4_bo.js +0 -1
  1483. package/build/assets/environment-switch-overlay-Bi4qbh2g.js +0 -1
  1484. package/build/assets/extension-module-card-classes-Bo43vY5V.js +0 -1
  1485. package/build/assets/extensions-hub-BqUINAhp.js +0 -1
  1486. package/build/assets/extensions-navigation-lraj88Wk.js +0 -1
  1487. package/build/assets/external-link-CgtpA_a1.js +0 -1
  1488. package/build/assets/file-text-DEK4LSVw.js +0 -1
  1489. package/build/assets/files-tab-DV0L-lFE.js +0 -1
  1490. package/build/assets/form-control-classes-7yFSQJq_.js +0 -1
  1491. package/build/assets/format-model-name-BN_rx1Y3.js +0 -1
  1492. package/build/assets/format-relative-time-DSErAuVr.js +0 -1
  1493. package/build/assets/git-provider-icon-BvlLAche.js +0 -1
  1494. package/build/assets/git-repo-dropdown-ByMzpNko.js +0 -1
  1495. package/build/assets/git-repo-dropdown-C6R7hgM8.js +0 -1
  1496. package/build/assets/highlighted-source-view-C_sfncLZ.js +0 -1
  1497. package/build/assets/home-BOrlwLqG.js +0 -1
  1498. package/build/assets/home-BvMNC6E-.js +0 -1
  1499. package/build/assets/home-store-CxqsY9Fi.js +0 -1
  1500. package/build/assets/index-home-BvMNC6E-.js +0 -1
  1501. package/build/assets/info-BRVcJAUg.js +0 -1
  1502. package/build/assets/install-server-modal-Bl4G1zF4.js +0 -1
  1503. package/build/assets/kebab-menu-item-content-BGoGFEAg.js +0 -1
  1504. package/build/assets/launch-CkqiSCqi.js +0 -1
  1505. package/build/assets/list-todo-DNWlzfaM.js +0 -1
  1506. package/build/assets/llm-not-configured-banner-DLw_tu-G.js +0 -27
  1507. package/build/assets/llm-settings-B-pkVCrt.js +0 -1
  1508. package/build/assets/llm-settings-DSC0-IQ7.js +0 -1
  1509. package/build/assets/llm-subscription-service-BAdOl5Xx.js +0 -1
  1510. package/build/assets/loader-circle-B47W9XqT.js +0 -1
  1511. package/build/assets/loading-spinner-xhnrGP4Y.js +0 -1
  1512. package/build/assets/manage-backends-modal-DhGk5mJt.js +0 -1
  1513. package/build/assets/manifest-653b89aa.js +0 -1
  1514. package/build/assets/manifest-subpage-layout-CKWvL2ig.js +0 -1
  1515. package/build/assets/map-provider-Mx8mZuE-.js +0 -1
  1516. package/build/assets/markdown-renderer-DUmk7pFc.js +0 -8
  1517. package/build/assets/mcp-DCkvl6K0.js +0 -9
  1518. package/build/assets/mcp-marketplace-utils-DEbMXlQr.js +0 -1
  1519. package/build/assets/messages-DSXvyc21.js +0 -40
  1520. package/build/assets/modal-body-gIe21fDv.js +0 -1
  1521. package/build/assets/modal-classes-D66dlgZ7.js +0 -1
  1522. package/build/assets/modal-close-button-B6iOGYpI.js +0 -1
  1523. package/build/assets/mouse-pointer-click-BYX1Pw5W.js +0 -1
  1524. package/build/assets/npm-DLckoeJc.js +0 -1
  1525. package/build/assets/onboarding-D7WDG66N.js +0 -1
  1526. package/build/assets/onboarding-modal-C_xVrFNv.js +0 -1
  1527. package/build/assets/organization-service.api-D-s9z18a.js +0 -1
  1528. package/build/assets/pencil-BGOCPRyu.js +0 -1
  1529. package/build/assets/planner-tab-AKaXIIfg.js +0 -1
  1530. package/build/assets/plugins-management-service-wtmY4QQw.js +0 -1
  1531. package/build/assets/plus-zNEL8rcX.js +0 -1
  1532. package/build/assets/profiles-service.api-DCMYxHMi.js +0 -1
  1533. package/build/assets/providers-BjrtjX4L.js +0 -1
  1534. package/build/assets/proxy-9Z_WZggZ.js +0 -1
  1535. package/build/assets/puzzle-BWLmN8z4.js +0 -1
  1536. package/build/assets/recommended-automations-launcher-CFlzhu1o.js +0 -1
  1537. package/build/assets/refresh-cw-CXtFWpwv.js +0 -1
  1538. package/build/assets/root-CanxKlNV.css +0 -1
  1539. package/build/assets/root-DkfG_UWR.js +0 -2
  1540. package/build/assets/root-layout-D75LHYhh.js +0 -2
  1541. package/build/assets/schema-field-OnM5Uob_.js +0 -1
  1542. package/build/assets/sdk-section-page-m5WQm2sy.js +0 -1
  1543. package/build/assets/search-CycosyjN.js +0 -1
  1544. package/build/assets/secrets-service-B26R61C1.js +0 -1
  1545. package/build/assets/secrets-settings-CbLYCKOX.js +0 -1
  1546. package/build/assets/segmented-toggle-DCspm2U5.js +0 -1
  1547. package/build/assets/settings-BJQI_iBM.js +0 -1
  1548. package/build/assets/settings-CWFxymAf.js +0 -1
  1549. package/build/assets/settings-dropdown-input-BI8V_Nov.js +0 -1
  1550. package/build/assets/settings-index-BiTqJoH7.js +0 -1
  1551. package/build/assets/settings-input-Cz62hWVW.js +0 -1
  1552. package/build/assets/settings-list-classes-z_3FW5H3.js +0 -1
  1553. package/build/assets/settings-modal-BIrIVn97.js +0 -1
  1554. package/build/assets/settings-service.api--rJmnuLa.js +0 -1
  1555. package/build/assets/settings-switch-BRsSI8Vs.js +0 -1
  1556. package/build/assets/settings-utils-Ba7vel6T.js +0 -1
  1557. package/build/assets/shared-conversation-CQK_PqHx.js +0 -1
  1558. package/build/assets/shield-check-T3JsDJiM.js +0 -1
  1559. package/build/assets/sidebar-layout-Bhi3hVcu.js +0 -1
  1560. package/build/assets/sidebar-mobile-menu-toggle-YWJNRN4p.js +0 -1
  1561. package/build/assets/sidebar-nav-link-BSUlY5Ml.js +0 -1
  1562. package/build/assets/sidebar-store-Cl1cUv_F.js +0 -1
  1563. package/build/assets/skill-card-pill-row-BXz8L8Rn.js +0 -1
  1564. package/build/assets/skill-icon-badge-QgfKv31M.js +0 -1
  1565. package/build/assets/skill-scope-Dc3JPW-8.js +0 -1
  1566. package/build/assets/skills-plugins-CpTV27n3.js +0 -1
  1567. package/build/assets/skills-settings-CSW__IW4.js +0 -2
  1568. package/build/assets/sparkles-TJ0mdECe.js +0 -1
  1569. package/build/assets/styled-tooltip-BUMSbgrF.js +0 -1
  1570. package/build/assets/task-list-tab-mAHMOkUz.js +0 -1
  1571. package/build/assets/terminal-BzxBaHx2.js +0 -3
  1572. package/build/assets/toggle-switch-O5v1FgxW.js +0 -1
  1573. package/build/assets/trash-2-C0xNVp9c.js +0 -1
  1574. package/build/assets/typography-NOKSk9_R.js +0 -1
  1575. package/build/assets/usage-tab-tEmVN0KD.js +0 -1
  1576. package/build/assets/use-acp-credential-form-BPNi0Zbm.js +0 -1
  1577. package/build/assets/use-activate-agent-profile-D9YRQPTF.js +0 -1
  1578. package/build/assets/use-agent-profiles-Cb2zUW3l.js +0 -1
  1579. package/build/assets/use-can-manage-org-profiles-Dxzq2AEd.js +0 -1
  1580. package/build/assets/use-cloud-current-user-id-Co2eJk2A.js +0 -1
  1581. package/build/assets/use-config-DKAMiI5R.js +0 -1
  1582. package/build/assets/use-create-conversation-CoHTiCbI.js +0 -1
  1583. package/build/assets/use-create-secret-2zBlCDsF.js +0 -1
  1584. package/build/assets/use-is-authed-C52-ivnB.js +0 -1
  1585. package/build/assets/use-is-creating-conversation-DdaAE6jV.js +0 -1
  1586. package/build/assets/use-launch-skill-in-chat-COnDpxCQ.js +0 -1
  1587. package/build/assets/use-llm-profiles-C_BHue65.js +0 -1
  1588. package/build/assets/use-manifest-capabilities-DPrQsaPP.js +0 -1
  1589. package/build/assets/use-onboarding-completion-CCE8OQgV.js +0 -1
  1590. package/build/assets/use-plugins-marketplace-CEiak69h.js +0 -1
  1591. package/build/assets/use-save-agent-profile-DK9idD6a.js +0 -1
  1592. package/build/assets/use-save-settings-DNmnbG6f.js +0 -1
  1593. package/build/assets/use-settings-nav-items-BlFL7YhM.js +0 -16
  1594. package/build/assets/use-settings-wCwPaSIv.js +0 -1
  1595. package/build/assets/use-tracking-CVwPmhlX.js +0 -3
  1596. package/build/assets/use-user-conversation-DVtfg0B_.js +0 -1
  1597. package/build/assets/useInfiniteQuery-p1xq35r2.js +0 -1
  1598. package/build/assets/useMutation-BFDQmgk9.js +0 -1
  1599. package/build/assets/useQueries-DF1NAAeC.js +0 -1
  1600. package/build/assets/useQuery-DRv--6bK.js +0 -1
  1601. package/build/assets/utils-zxEjKE70.js +0 -1
  1602. package/build/assets/vendor~browser-B-fae1JU.js +0 -47
  1603. package/build/assets/vendor~entry.client-CgNUwtQL.js +0 -1
  1604. package/build/assets/vendor~entry.client-zSIea5EO.js +0 -9
  1605. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-B8i84bh4.js +0 -186
  1606. package/build/assets/vendor~files-tab-D9wR9yM2.js +0 -11
  1607. package/build/assets/vendor~index-home~home~conversation-panel~conversation-Ipoe6hvY.js +0 -13
  1608. package/build/assets/vendor~root-layout-C-IgVx6e.js +0 -1
  1609. package/build/assets/vendor~root-layout~conversation-panel~conversation-Dhd_I4H4.js +0 -1
  1610. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-Cc0f9kPP.js +0 -1
  1611. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-d7svw-BB.js +0 -1
  1612. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js +0 -1
  1613. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-D5DWZVc7.js +0 -1
  1614. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-4WsUP-tz.js +0 -48
  1615. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~9pstowjp-BOVIFA_g.js +0 -73
  1616. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js +0 -7465
  1617. package/build/assets/verification-settings-B8UMQ7MG.js +0 -1
  1618. package/build/assets/wrench-DIka3hCq.js +0 -1
  1619. package/build/assets/x-BWKA2Ver.js +0 -1
  1620. package/build/assets/zap-DHddTPc0.js +0 -1
  1621. package/dist/api/cloud/suggestions-service.api.d.ts +0 -8
  1622. package/dist/api/suggestions-service/suggestions-service.api.d.ts +0 -11
  1623. package/dist/components/conversation-events/chat/event-message-components/observation-pair-event-message.d.ts +0 -7
  1624. package/dist/components/conversation-events/index.d.ts +0 -1
  1625. package/dist/components/features/automations/metadata-chip.d.ts +0 -6
  1626. package/dist/components/features/chat/task-tracking/status-badge.d.ts +0 -5
  1627. package/dist/components/features/chat/task-tracking/status-icon.d.ts +0 -5
  1628. package/dist/components/features/chat/task-tracking/task-list-section.d.ts +0 -10
  1629. package/dist/components/features/controls/tools.d.ts +0 -2
  1630. package/dist/components/features/conversation-panel/new-conversation-button.d.ts +0 -23
  1631. package/dist/components/features/diff-viewer/empty-changes-message.cjs +0 -2
  1632. package/dist/components/features/diff-viewer/empty-changes-message.cjs.map +0 -1
  1633. package/dist/components/features/diff-viewer/empty-changes-message.js +0 -17
  1634. package/dist/components/features/diff-viewer/empty-changes-message.js.map +0 -1
  1635. package/dist/components/features/home/home-header/guide-message.d.ts +0 -1
  1636. package/dist/components/features/home/home-header/home-header.d.ts +0 -1
  1637. package/dist/components/features/home/new-conversation/create-conversation-button.d.ts +0 -1
  1638. package/dist/components/features/home/new-conversation/new-conversation.d.ts +0 -1
  1639. package/dist/components/features/home/new-conversation.d.ts +0 -1
  1640. package/dist/components/features/home/tasks/task-card.d.ts +0 -6
  1641. package/dist/components/features/home/tasks/task-group.d.ts +0 -7
  1642. package/dist/components/features/home/tasks/task-issue-number.d.ts +0 -6
  1643. package/dist/components/features/home/tasks/task-item-title.d.ts +0 -1
  1644. package/dist/components/features/home/tasks/task-suggestions-skeleton.d.ts +0 -1
  1645. package/dist/components/features/home/tasks/task-suggestions.d.ts +0 -6
  1646. package/dist/components/features/settings/agent-server-onboarding.d.ts +0 -10
  1647. package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +0 -6
  1648. package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +0 -8
  1649. package/dist/components/features/tips/random-tip.cjs +0 -2
  1650. package/dist/components/features/tips/random-tip.cjs.map +0 -1
  1651. package/dist/components/features/tips/random-tip.js +0 -41
  1652. package/dist/components/features/tips/random-tip.js.map +0 -1
  1653. package/dist/hooks/query/use-has-git-commits.cjs +0 -2
  1654. package/dist/hooks/query/use-has-git-commits.cjs.map +0 -1
  1655. package/dist/hooks/query/use-has-git-commits.d.ts +0 -25
  1656. package/dist/hooks/query/use-has-git-commits.js +0 -31
  1657. package/dist/hooks/query/use-has-git-commits.js.map +0 -1
  1658. package/dist/hooks/query/use-suggested-tasks.d.ts +0 -1
  1659. package/dist/hooks/use-has-attached-source.cjs +0 -2
  1660. package/dist/hooks/use-has-attached-source.cjs.map +0 -1
  1661. package/dist/hooks/use-has-attached-source.d.ts +0 -18
  1662. package/dist/hooks/use-has-attached-source.js +0 -14
  1663. package/dist/hooks/use-has-attached-source.js.map +0 -1
  1664. package/dist/hooks/use-should-show-user-features.d.ts +0 -1
  1665. package/dist/icons/chveron-up.cjs +0 -2
  1666. package/dist/icons/chveron-up.cjs.map +0 -1
  1667. package/dist/icons/chveron-up.js +0 -21
  1668. package/dist/icons/chveron-up.js.map +0 -1
  1669. package/dist/routes/changes-tab.cjs +0 -2
  1670. package/dist/routes/changes-tab.cjs.map +0 -1
  1671. package/dist/routes/changes-tab.d.ts +0 -3
  1672. package/dist/routes/changes-tab.js +0 -64
  1673. package/dist/routes/changes-tab.js.map +0 -1
  1674. package/dist/ui/card-title.d.ts +0 -16
  1675. package/dist/ui/card.d.ts +0 -14
  1676. package/dist/utils/file-priority.cjs +0 -2
  1677. package/dist/utils/file-priority.cjs.map +0 -1
  1678. package/dist/utils/file-priority.d.ts +0 -27
  1679. package/dist/utils/file-priority.js +0 -61
  1680. package/dist/utils/file-priority.js.map +0 -1
  1681. package/dist/utils/group-suggested-tasks.d.ts +0 -7
  1682. package/dist/utils/table-row-classes.d.ts +0 -9
  1683. package/dist/utils/tips.cjs +0 -2
  1684. package/dist/utils/tips.cjs.map +0 -1
  1685. package/dist/utils/tips.js +0 -45
  1686. package/dist/utils/tips.js.map +0 -1
  1687. /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dh9v73sa-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew3u153i-rfV8mQ9m.js} +0 -0
  1688. /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ox0jfsa0-cHFhpUBq.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"file-content-viewer.js","names":[],"sources":["../../../../src/components/features/files-tab/file-content-viewer.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\n\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useWorkspaceFileContent } from \"#/hooks/query/use-workspace-file-content\";\nimport {\n useWorkspaceMutationCounter,\n withWorkspaceCacheBuster,\n} from \"#/stores/use-workspace-mutation-counter\";\nimport { MarkdownRenderer } from \"#/components/features/markdown/markdown-renderer\";\nimport { isMarkdownFilePath } from \"#/utils/is-markdown-file-path\";\nimport { HighlightedSourceView } from \"./highlighted-source-view\";\nimport type { ViewMode } from \"./view-mode\";\n\ninterface FileContentViewerProps {\n path: string;\n viewMode: ViewMode;\n}\n\nconst HTML_LIKE_EXTS = new Set([\"html\", \"htm\", \"svg\"]);\n\n// Office/document formats we can't preview inline. The label doubles as the\n// allow-list (a present entry => Office doc) and feeds a clear, format-named\n// \"no preview\" message instead of the generic binary fallback.\nconst OFFICE_DOCUMENT_LABELS: Record<string, string> = {\n pptx: \"PowerPoint\",\n ppt: \"PowerPoint\",\n docx: \"Word\",\n doc: \"Word\",\n xlsx: \"Excel\",\n xls: \"Excel\",\n};\n\nfunction getExtension(path: string): string {\n const idx = path.lastIndexOf(\".\");\n return idx === -1 ? \"\" : path.slice(idx + 1).toLowerCase();\n}\n\n/**\n * Fallback shown when a file's bytes aren't previewable. Office documents\n * (.pptx / .docx / .xlsx …) get a clear, format-named message; every other\n * binary keeps the generic \"binary file\" string so the pane is never blank.\n */\nfunction UnpreviewableFallback({ path }: { path: string }) {\n const { t } = useTranslation(\"openhands\");\n const documentLabel = OFFICE_DOCUMENT_LABELS[getExtension(path)];\n return (\n <div\n className=\"flex h-full w-full items-center justify-center text-sm text-[var(--oh-muted)]\"\n data-testid={\n documentLabel\n ? \"file-content-viewer-unsupported-document\"\n : \"file-content-viewer-binary-fallback\"\n }\n >\n {documentLabel\n ? t(I18nKey.FILES$UNSUPPORTED_DOCUMENT, { type: documentLabel })\n : t(I18nKey.FILES$BINARY_FALLBACK)}\n </div>\n );\n}\n\n/**\n * Renders the contents of a single workspace file. In `rich` mode we point\n * an iframe / <img> straight at the agent server's static workspace\n * fileserver for HTML / SVG / images / PDFs, so relative asset references\n * load naturally. In `plain` mode we always show the raw bytes as text (or\n * a fallback message for binaries).\n */\nexport function FileContentViewer({ path, viewMode }: FileContentViewerProps) {\n const { t } = useTranslation(\"openhands\");\n const query = useWorkspaceFileContent(path);\n // Subscribe to the workspace mutation counter so the iframe / <img> src\n // changes after every agent-side edit, forcing a fresh fetch even when\n // the *path* hasn't moved (e.g. agent rewrote `style.css` referenced by\n // the currently-displayed `index.html`).\n const mutationCounter = useWorkspaceMutationCounter((state) => state.count);\n\n if (query.isLoading) {\n return (\n <div className=\"flex h-full w-full items-center justify-center text-sm text-[var(--oh-muted)]\">\n {t(I18nKey.FILES$LOADING_FILES)}\n </div>\n );\n }\n\n if (query.isError || !query.data) {\n // Show a load-error message rather than the binary-fallback string —\n // these are completely different failure modes (couldn't even fetch\n // the file vs. fetched fine but the bytes aren't previewable) and\n // mixing them up hides real backend failures behind a misleading\n // \"Binary file\" label. Prefer the underlying error's own message when\n // we have one; fall back to the generic translated string otherwise.\n return (\n <div\n className=\"flex h-full w-full items-center justify-center text-sm text-[var(--oh-muted)]\"\n data-testid=\"file-content-viewer-error\"\n >\n {(query.error as Error | undefined)?.message ??\n t(I18nKey.FILES$LOAD_ERROR)}\n </div>\n );\n }\n\n const { kind, text, staticUrl, mimeType } = query.data;\n const bustedStaticUrl = withWorkspaceCacheBuster(staticUrl, mutationCounter);\n\n // ----- Plain mode: raw source bytes, syntax-highlighted when we can\n // recognize the grammar (falls through to a `<pre>` otherwise). This\n // includes \"plain\" view of markdown / HTML, where the point is to see\n // the markup behind the rich preview.\n if (viewMode === \"plain\") {\n if (kind === \"text\" && text !== null) {\n return (\n <HighlightedSourceView\n path={path}\n text={text}\n mimeType={mimeType ?? undefined}\n />\n );\n }\n return <UnpreviewableFallback path={path} />;\n }\n\n // ----- Rich mode: render HTML, markdown, images, PDFs from staticUrl. ----\n if (kind === \"image\") {\n return (\n <div\n className=\"flex h-full w-full items-center justify-center bg-[var(--oh-surface)] p-4\"\n data-testid=\"file-content-viewer-image\"\n >\n <img\n src={bustedStaticUrl}\n alt={path}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n );\n }\n\n if (kind === \"pdf\") {\n // PDFs can carry embedded JavaScript (AcroForm, OpenAction…). Even\n // though `staticUrl` lives on the agent server origin, the PDF\n // viewer's scripting capability isn't worth the risk for a file\n // preview, so we sandbox the iframe. `allow-same-origin` lets the\n // browser's built-in PDF viewer load the underlying bytes without\n // tripping cross-origin restrictions; we omit `allow-scripts`\n // because no PDF preview we care about needs to run JS in the\n // parent's origin.\n return (\n <iframe\n title={path}\n src={bustedStaticUrl}\n sandbox=\"allow-same-origin\"\n data-testid=\"file-content-viewer-iframe\"\n className=\"h-full w-full bg-white\"\n />\n );\n }\n\n if (kind === \"binary\") {\n return <UnpreviewableFallback path={path} />;\n }\n\n // Text-like content.\n if (mimeType === \"text/html\" || HTML_LIKE_EXTS.has(getExtension(path))) {\n // Sandbox the preview iframe: `allow-same-origin` keeps the frame on\n // the workspace fileserver's origin so relative `<link href=\"…\">`,\n // `<img src=\"…\">`, etc. continue to resolve, while the absence of\n // `allow-scripts` means any `<script>` (or `onerror=…`, inline event\n // handler, …) inside the previewed file is inert. This is exactly\n // the safe-preview posture we want — users can look at their HTML\n // without it executing in the canvas's context.\n return (\n <iframe\n title={path}\n src={bustedStaticUrl}\n sandbox=\"allow-same-origin\"\n data-testid=\"file-content-viewer-iframe\"\n className=\"h-full w-full bg-white\"\n />\n );\n }\n\n if (kind === \"text\" && isMarkdownFilePath(path)) {\n // Match the right-pane chrome color so the rich-rendered markdown\n // blends with the surrounding files tab instead of painting a stark\n // white card. `--oh-scroll-fade-from` keeps wide-table edge fades on\n // the same surface (otherwise they default to `--oh-color-base`).\n // We use `prose-invert` (typography plugin's dark-theme variant) and\n // then layer arbitrary CSS-variable overrides on top to pin body /\n // bold / quote text to pure white — the user specifically asked for\n // every text element (not just headings) to read as white. The custom\n // heading components in `markdown/headings.tsx` already hard-code\n // `text-white`, so headers stay white through this change.\n return (\n <div\n data-testid=\"file-content-viewer-markdown\"\n className=\"h-full w-full overflow-auto bg-[var(--oh-surface)] text-white custom-scrollbar-always [--oh-scroll-fade-from:var(--oh-surface)]\"\n >\n <div className=\"prose prose-sm prose-invert max-w-none p-6 [--tw-prose-body:#fff] [--tw-prose-bold:#fff] [--tw-prose-headings:#fff] [--tw-prose-lead:#fff] [--tw-prose-counters:#fff] [--tw-prose-quotes:#fff] [--tw-prose-quote-borders:var(--oh-border-subtle)] [--tw-prose-bullets:var(--oh-muted)] [--tw-prose-hr:var(--oh-border-subtle)] [--tw-prose-captions:var(--oh-muted)] [--tw-prose-kbd:#fff]\">\n <MarkdownRenderer\n content={text ?? \"\"}\n includeStandard\n includeHeadings\n />\n </div>\n </div>\n );\n }\n\n // Rich mode for actual source code (.ts, .py, .yaml, .css, …): there\n // is no other \"rich\" rendering to fall back to, so highlighted source\n // IS the rich view. Identical to the plain-mode treatment — keeping\n // both branches reuse `HighlightedSourceView` means the toggle has the\n // same visual identity for source files in both modes (which is the\n // honest answer: source IS rendered code).\n if (kind === \"text\" && text !== null) {\n return (\n <HighlightedSourceView\n path={path}\n text={text}\n mimeType={mimeType ?? undefined}\n />\n );\n }\n\n // Truly unknown / empty payload — show a fallback so the pane is never\n // blank.\n return <UnpreviewableFallback path={path} />;\n}\n"],"mappings":";;;;;;;;;AAkBA,IAAM,IAAiB,IAAI,IAAI;CAAC;CAAQ;CAAO;AAAK,CAAC,GAK/C,IAAiD;CACrD,MAAM;CACN,KAAK;CACL,MAAM;CACN,KAAK;CACL,MAAM;CACN,KAAK;AACP;AAEA,SAAS,EAAa,GAAsB;CAC1C,IAAM,IAAM,EAAK,YAAY,GAAG;CAChC,OAAO,MAAQ,KAAK,KAAK,EAAK,MAAM,IAAM,CAAC,EAAE,YAAY;AAC3D;AAOA,SAAS,EAAsB,EAAE,WAA0B;CACzD,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,IAAgB,EAAuB,EAAa,CAAI;CAC9D,OACE,kBAAC,OAAD;EACE,WAAU;EACV,eACE,IACI,6CACA;YAGL,IACG,EAAE,EAAQ,4BAA4B,EAAE,MAAM,EAAc,CAAC,IAC7D,EAAE,EAAQ,qBAAqB;CAChC,CAAA;AAET;AASA,SAAgB,EAAkB,EAAE,SAAM,eAAoC;CAC5E,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,IAAQ,EAAwB,CAAI,GAKpC,IAAkB,GAA6B,MAAU,EAAM,KAAK;CAE1E,IAAI,EAAM,WACR,OACE,kBAAC,OAAD;EAAK,WAAU;YACZ,EAAE,EAAQ,mBAAmB;CAC3B,CAAA;CAIT,IAAI,EAAM,WAAW,CAAC,EAAM,MAO1B,OACE,kBAAC,OAAD;EACE,WAAU;EACV,eAAY;YAEV,EAAM,OAA6B,WACnC,EAAE,EAAQ,gBAAgB;CACzB,CAAA;CAIT,IAAM,EAAE,SAAM,SAAM,cAAW,gBAAa,EAAM,MAC5C,IAAkB,EAAyB,GAAW,CAAe;CA4H3E,OAtHI,MAAa,UACX,MAAS,UAAU,MAAS,OAE5B,kBAAC,GAAD;EACQ;EACA;EACN,UAAU,KAAY,KAAA;CACvB,CAAA,IAGE,kBAAC,GAAD,EAA6B,QAAO,CAAA,IAIzC,MAAS,UAET,kBAAC,OAAD;EACE,WAAU;EACV,eAAY;YAEZ,kBAAC,OAAD;GACE,KAAK;GACL,KAAK;GACL,WAAU;EACX,CAAA;CACE,CAAA,IAIL,MAAS,QAUT,kBAAC,UAAD;EACE,OAAO;EACP,KAAK;EACL,SAAQ;EACR,eAAY;EACZ,WAAU;CACX,CAAA,IAID,MAAS,WACJ,kBAAC,GAAD,EAA6B,QAAO,CAAA,IAIzC,MAAa,eAAe,EAAe,IAAI,EAAa,CAAI,CAAC,IASjE,kBAAC,UAAD;EACE,OAAO;EACP,KAAK;EACL,SAAQ;EACR,eAAY;EACZ,WAAU;CACX,CAAA,IAID,MAAS,UAAU,EAAmB,CAAI,IAY1C,kBAAC,OAAD;EACE,eAAY;EACZ,WAAU;YAEV,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD;IACE,SAAS,KAAQ;IACjB,iBAAA;IACA,iBAAA;GACD,CAAA;EACE,CAAA;CACF,CAAA,IAUL,MAAS,UAAU,MAAS,OAE5B,kBAAC,GAAD;EACQ;EACA;EACN,UAAU,KAAY,KAAA;CACvB,CAAA,IAME,kBAAC,GAAD,EAA6B,QAAO,CAAA;AAC7C"}
1
+ {"version":3,"file":"file-content-viewer.js","names":[],"sources":["../../../../src/components/features/files-tab/file-content-viewer.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\n\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useWorkspaceFileContent } from \"#/hooks/query/use-workspace-file-content\";\nimport {\n useWorkspaceMutationCounter,\n withWorkspaceCacheBuster,\n} from \"#/stores/use-workspace-mutation-counter\";\nimport { MarkdownRenderer } from \"#/components/features/markdown/markdown-renderer\";\nimport { isMarkdownFilePath } from \"#/utils/is-markdown-file-path\";\nimport { HighlightedSourceView } from \"./highlighted-source-view\";\nimport type { ViewMode } from \"./view-mode\";\n\ninterface FileContentViewerProps {\n path: string;\n viewMode: ViewMode;\n}\n\nconst HTML_LIKE_EXTS = new Set([\"html\", \"htm\", \"svg\"]);\n\n// Office/document formats we can't preview inline. The label doubles as the\n// allow-list (a present entry => Office doc) and feeds a clear, format-named\n// \"no preview\" message instead of the generic binary fallback.\nconst OFFICE_DOCUMENT_LABELS: Record<string, string> = {\n pptx: \"PowerPoint\",\n ppt: \"PowerPoint\",\n docx: \"Word\",\n doc: \"Word\",\n xlsx: \"Excel\",\n xls: \"Excel\",\n};\n\nfunction getExtension(path: string): string {\n const idx = path.lastIndexOf(\".\");\n return idx === -1 ? \"\" : path.slice(idx + 1).toLowerCase();\n}\n\n/**\n * Fallback shown when a file's bytes aren't previewable. Office documents\n * (.pptx / .docx / .xlsx …) get a clear, format-named message; every other\n * binary keeps the generic \"binary file\" string so the pane is never blank.\n */\nfunction UnpreviewableFallback({ path }: { path: string }) {\n const { t } = useTranslation(\"openhands\");\n const documentLabel = OFFICE_DOCUMENT_LABELS[getExtension(path)];\n return (\n <div\n className=\"flex h-full w-full items-center justify-center text-sm text-[var(--oh-muted)]\"\n data-testid={\n documentLabel\n ? \"file-content-viewer-unsupported-document\"\n : \"file-content-viewer-binary-fallback\"\n }\n >\n {documentLabel\n ? t(I18nKey.FILES$UNSUPPORTED_DOCUMENT, { type: documentLabel })\n : t(I18nKey.FILES$BINARY_FALLBACK)}\n </div>\n );\n}\n\n/**\n * Renders the contents of a single workspace file. In `rich` mode we point\n * an iframe / <img> straight at the agent server's static workspace\n * fileserver for HTML / SVG / images / PDFs, so relative asset references\n * load naturally. In `plain` mode we always show the raw bytes as text (or\n * a fallback message for binaries).\n */\nexport function FileContentViewer({ path, viewMode }: FileContentViewerProps) {\n const { t } = useTranslation(\"openhands\");\n const query = useWorkspaceFileContent(path);\n // Subscribe to the workspace mutation counter so the iframe / <img> src\n // changes after every agent-side edit, forcing a fresh fetch even when\n // the *path* hasn't moved (e.g. agent rewrote `style.css` referenced by\n // the currently-displayed `index.html`).\n const mutationCounter = useWorkspaceMutationCounter((state) => state.count);\n\n if (query.isLoading) {\n return (\n <div className=\"flex h-full w-full items-center justify-center text-sm text-[var(--oh-muted)]\">\n {t(I18nKey.FILES$LOADING_FILES)}\n </div>\n );\n }\n\n if (query.isError || !query.data) {\n // Show a load-error message rather than the binary-fallback string —\n // these are completely different failure modes (couldn't even fetch\n // the file vs. fetched fine but the bytes aren't previewable) and\n // mixing them up hides real backend failures behind a misleading\n // \"Binary file\" label. Prefer the underlying error's own message when\n // we have one; fall back to the generic translated string otherwise.\n return (\n <div\n className=\"flex h-full w-full items-center justify-center text-sm text-[var(--oh-muted)]\"\n data-testid=\"file-content-viewer-error\"\n >\n {(query.error as Error | undefined)?.message ??\n t(I18nKey.FILES$LOAD_ERROR)}\n </div>\n );\n }\n\n const { kind, text, staticUrl, mimeType } = query.data;\n const bustedStaticUrl = withWorkspaceCacheBuster(staticUrl, mutationCounter);\n\n // ----- Plain mode: raw source bytes, syntax-highlighted when we can\n // recognize the grammar (falls through to a `<pre>` otherwise). This\n // includes \"plain\" view of markdown / HTML, where the point is to see\n // the markup behind the rich preview.\n if (viewMode === \"plain\") {\n if (kind === \"text\" && text !== null) {\n return (\n <HighlightedSourceView\n path={path}\n text={text}\n mimeType={mimeType ?? undefined}\n />\n );\n }\n return <UnpreviewableFallback path={path} />;\n }\n\n // ----- Rich mode: render HTML, markdown, images, PDFs from staticUrl. ----\n if (kind === \"image\") {\n return (\n <div\n className=\"flex h-full w-full items-center justify-center bg-[var(--oh-surface)] p-4\"\n data-testid=\"file-content-viewer-image\"\n >\n <img\n src={bustedStaticUrl}\n alt={path}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n );\n }\n\n if (kind === \"pdf\") {\n // Deliberately NOT sandboxed: Chromium refuses to instantiate its\n // built-in PDF viewer inside any sandboxed frame (the `sandbox`\n // attribute disables plugins unconditionally — no token re-enables\n // them), rendering \"This page has been blocked by Chrome\" instead of\n // the document. Unsandboxed is safe here: the fileserver declares\n // `Content-Type: application/pdf`, which browsers never sniff into\n // HTML, so the frame can only host the PDF viewer — and PDF-embedded\n // JS (AcroForm, OpenAction…) runs in the viewer's own sandboxed\n // engine with no access to this page's DOM.\n return (\n <iframe\n title={path}\n src={bustedStaticUrl}\n data-testid=\"file-content-viewer-iframe\"\n className=\"h-full w-full bg-white\"\n />\n );\n }\n\n if (kind === \"binary\") {\n return <UnpreviewableFallback path={path} />;\n }\n\n // Text-like content.\n if (mimeType === \"text/html\" || HTML_LIKE_EXTS.has(getExtension(path))) {\n // Sandbox the preview iframe: `allow-same-origin` keeps the frame on\n // the workspace fileserver's origin so relative `<link href=\"…\">`,\n // `<img src=\"…\">`, etc. continue to resolve, while the absence of\n // `allow-scripts` means any `<script>` (or `onerror=…`, inline event\n // handler, …) inside the previewed file is inert. This is exactly\n // the safe-preview posture we want — users can look at their HTML\n // without it executing in the canvas's context.\n return (\n <iframe\n title={path}\n src={bustedStaticUrl}\n sandbox=\"allow-same-origin\"\n data-testid=\"file-content-viewer-iframe\"\n className=\"h-full w-full bg-white\"\n />\n );\n }\n\n if (kind === \"text\" && isMarkdownFilePath(path)) {\n // Match the right-pane chrome color so the rich-rendered markdown\n // blends with the surrounding files tab instead of painting a stark\n // white card. `--oh-scroll-fade-from` keeps wide-table edge fades on\n // the same surface (otherwise they default to `--oh-color-base`).\n // We use `prose-invert` (typography plugin's dark-theme variant) and\n // then layer arbitrary CSS-variable overrides on top to pin body /\n // bold / quote text to pure white — the user specifically asked for\n // every text element (not just headings) to read as white. The custom\n // heading components in `markdown/headings.tsx` already hard-code\n // `text-white`, so headers stay white through this change.\n return (\n <div\n data-testid=\"file-content-viewer-markdown\"\n className=\"h-full w-full overflow-auto bg-[var(--oh-surface)] text-white custom-scrollbar-always [--oh-scroll-fade-from:var(--oh-surface)]\"\n >\n <div className=\"prose prose-sm prose-invert max-w-none p-6 [--tw-prose-body:#fff] [--tw-prose-bold:#fff] [--tw-prose-headings:#fff] [--tw-prose-lead:#fff] [--tw-prose-counters:#fff] [--tw-prose-quotes:#fff] [--tw-prose-quote-borders:var(--oh-border-subtle)] [--tw-prose-bullets:var(--oh-muted)] [--tw-prose-hr:var(--oh-border-subtle)] [--tw-prose-captions:var(--oh-muted)] [--tw-prose-kbd:#fff]\">\n <MarkdownRenderer\n content={text ?? \"\"}\n includeStandard\n includeHeadings\n />\n </div>\n </div>\n );\n }\n\n // Rich mode for actual source code (.ts, .py, .yaml, .css, …): there\n // is no other \"rich\" rendering to fall back to, so highlighted source\n // IS the rich view. Identical to the plain-mode treatment — keeping\n // both branches reuse `HighlightedSourceView` means the toggle has the\n // same visual identity for source files in both modes (which is the\n // honest answer: source IS rendered code).\n if (kind === \"text\" && text !== null) {\n return (\n <HighlightedSourceView\n path={path}\n text={text}\n mimeType={mimeType ?? undefined}\n />\n );\n }\n\n // Truly unknown / empty payload — show a fallback so the pane is never\n // blank.\n return <UnpreviewableFallback path={path} />;\n}\n"],"mappings":";;;;;;;;;AAkBA,IAAM,IAAiB,IAAI,IAAI;CAAC;CAAQ;CAAO;AAAK,CAAC,GAK/C,IAAiD;CACrD,MAAM;CACN,KAAK;CACL,MAAM;CACN,KAAK;CACL,MAAM;CACN,KAAK;AACP;AAEA,SAAS,EAAa,GAAsB;CAC1C,IAAM,IAAM,EAAK,YAAY,GAAG;CAChC,OAAO,MAAQ,KAAK,KAAK,EAAK,MAAM,IAAM,CAAC,EAAE,YAAY;AAC3D;AAOA,SAAS,EAAsB,EAAE,WAA0B;CACzD,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,IAAgB,EAAuB,EAAa,CAAI;CAC9D,OACE,kBAAC,OAAD;EACE,WAAU;EACV,eACE,IACI,6CACA;YAGL,IACG,EAAE,EAAQ,4BAA4B,EAAE,MAAM,EAAc,CAAC,IAC7D,EAAE,EAAQ,qBAAqB;CAChC,CAAA;AAET;AASA,SAAgB,EAAkB,EAAE,SAAM,eAAoC;CAC5E,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,IAAQ,EAAwB,CAAI,GAKpC,IAAkB,GAA6B,MAAU,EAAM,KAAK;CAE1E,IAAI,EAAM,WACR,OACE,kBAAC,OAAD;EAAK,WAAU;YACZ,EAAE,EAAQ,mBAAmB;CAC3B,CAAA;CAIT,IAAI,EAAM,WAAW,CAAC,EAAM,MAO1B,OACE,kBAAC,OAAD;EACE,WAAU;EACV,eAAY;YAEV,EAAM,OAA6B,WACnC,EAAE,EAAQ,gBAAgB;CACzB,CAAA;CAIT,IAAM,EAAE,SAAM,SAAM,cAAW,gBAAa,EAAM,MAC5C,IAAkB,EAAyB,GAAW,CAAe;CA4H3E,OAtHI,MAAa,UACX,MAAS,UAAU,MAAS,OAE5B,kBAAC,GAAD;EACQ;EACA;EACN,UAAU,KAAY,KAAA;CACvB,CAAA,IAGE,kBAAC,GAAD,EAA6B,QAAO,CAAA,IAIzC,MAAS,UAET,kBAAC,OAAD;EACE,WAAU;EACV,eAAY;YAEZ,kBAAC,OAAD;GACE,KAAK;GACL,KAAK;GACL,WAAU;EACX,CAAA;CACE,CAAA,IAIL,MAAS,QAWT,kBAAC,UAAD;EACE,OAAO;EACP,KAAK;EACL,eAAY;EACZ,WAAU;CACX,CAAA,IAID,MAAS,WACJ,kBAAC,GAAD,EAA6B,QAAO,CAAA,IAIzC,MAAa,eAAe,EAAe,IAAI,EAAa,CAAI,CAAC,IASjE,kBAAC,UAAD;EACE,OAAO;EACP,KAAK;EACL,SAAQ;EACR,eAAY;EACZ,WAAU;CACX,CAAA,IAID,MAAS,UAAU,EAAmB,CAAI,IAY1C,kBAAC,OAAD;EACE,eAAY;EACZ,WAAU;YAEV,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD;IACE,SAAS,KAAQ;IACjB,iBAAA;IACA,iBAAA;GACD,CAAA;EACE,CAAA;CACF,CAAA,IAUL,MAAS,UAAU,MAAS,OAE5B,kBAAC,GAAD;EACQ;EACA;EACN,UAAU,KAAY,KAAA;CACvB,CAAA,IAME,kBAAC,GAAD,EAA6B,QAAO,CAAA;AAC7C"}
@@ -1,2 +1,2 @@
1
- require("../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),t=require("../../../i18n/declaration.cjs"),n=require("../../../node_modules/lucide-react/dist/esm/icons/list-tree.cjs"),r=require("../../../utils/utils.cjs"),i=require("../../../utils/file-priority.cjs");let a=require("react"),o=require("react/jsx-runtime");function s({paths:s,selectedPath:c,onSelectFile:l,isTreeVisible:u,onToggleTree:d}){let{t:f}=e.useTranslation(`openhands`),p=(0,a.useMemo)(()=>i.sortFilesByPriority(s),[s]);return(0,o.jsxs)(`div`,{className:`flex items-center gap-1.5 border-b border-[var(--oh-border)] px-2 py-1.5 min-h-[34px]`,"data-testid":`file-quick-row`,children:[(0,o.jsx)(`button`,{type:`button`,onClick:d,"data-testid":`file-quick-row-tree-toggle`,"aria-pressed":u,"aria-label":f(u?t.I18nKey.FILES$HIDE_FILE_TREE:t.I18nKey.FILES$SHOW_FILE_TREE),title:f(u?t.I18nKey.FILES$HIDE_FILE_TREE:t.I18nKey.FILES$SHOW_FILE_TREE),className:r.cn(`shrink-0 inline-flex items-center justify-center w-6 h-6 rounded-md cursor-pointer`,`text-[var(--oh-text-tertiary)] hover:bg-tertiary`,u&&`bg-[var(--oh-surface-raised)]`),children:(0,o.jsx)(n.ListTree,{className:`w-3 h-3`,"aria-hidden":!0,strokeWidth:2})}),p.length>0&&(0,o.jsx)(`div`,{className:`flex flex-nowrap items-center gap-1.5 overflow-hidden flex-1 min-w-0`,children:p.map(e=>{let t=c===e;return(0,o.jsx)(`button`,{type:`button`,onClick:()=>l(e),title:e,"data-testid":`file-quick-row-item-${e}`,className:r.cn(`inline-flex items-center px-2 py-0.5 text-xs whitespace-nowrap rounded-md cursor-pointer`,t?`bg-[var(--oh-interactive-hover)] text-white`:`bg-[var(--oh-surface-raised)] text-[var(--oh-text-tertiary)] hover:bg-tertiary`),children:e},e)})})]})}exports.FileQuickRow=s;
1
+ require("../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),t=require("../../../i18n/declaration.cjs"),n=require("../../../node_modules/lucide-react/dist/esm/icons/list-tree.cjs"),r=require("../../../utils/utils.cjs"),i=require("../../../icons/u-close.cjs");let a=require("react/jsx-runtime");var o=`[scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden`;function s({openPaths:s,selectedPath:c,onSelectFile:l,onCloseFile:u,isTreeVisible:d,onToggleTree:f,actions:p}){let{t:m}=e.useTranslation(`openhands`);return(0,a.jsxs)(`div`,{className:`flex h-[34px] shrink-0 items-stretch gap-1.5 overflow-y-hidden border-b border-[var(--oh-border)] px-2`,"data-testid":`file-quick-row`,children:[(0,a.jsx)(`button`,{type:`button`,onClick:f,"data-testid":`file-quick-row-tree-toggle`,"aria-pressed":d,"aria-label":m(d?t.I18nKey.FILES$HIDE_FILE_TREE:t.I18nKey.FILES$SHOW_FILE_TREE),title:m(d?t.I18nKey.FILES$HIDE_FILE_TREE:t.I18nKey.FILES$SHOW_FILE_TREE),className:r.cn(`shrink-0 self-center inline-flex items-center justify-center w-6 h-6 rounded-md cursor-pointer`,`text-[var(--oh-text-tertiary)] hover:bg-tertiary`,d&&`bg-[var(--oh-surface-raised)]`),children:(0,a.jsx)(n.ListTree,{className:`w-3 h-3`,"aria-hidden":!0,strokeWidth:2})}),s.length>0?(0,a.jsx)(`div`,{role:`tablist`,"aria-label":m(t.I18nKey.COMMON$FILES),className:r.cn(`flex min-h-0 min-w-0 flex-1 flex-nowrap items-stretch overflow-x-auto overflow-y-hidden overscroll-y-none`,o),children:s.map((e,n)=>{let o=c===e,s=e.split(`/`).pop()||e;return(0,a.jsxs)(`div`,{className:r.cn(`group/file-tab relative flex shrink-0 items-stretch`,`border-r border-r-[var(--oh-border)]`,n===0&&`border-l border-l-[var(--oh-border)]`,`border-b-2 -mb-px transition-colors`,o?`border-b-white text-white`:`border-b-transparent text-[var(--oh-muted)] hover:text-white hover:border-b-white/25`),children:[(0,a.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":o,onClick:()=>l(e),title:e,"data-testid":`file-quick-row-item-${e}`,className:`flex min-w-0 max-w-[160px] items-center pl-2.5 pr-1 text-xs cursor-pointer text-inherit`,children:(0,a.jsx)(`span`,{className:`truncate`,children:s})}),(0,a.jsx)(`button`,{type:`button`,"data-testid":`file-quick-row-close-${e}`,"aria-label":m(t.I18nKey.FILES$CLOSE_TAB,{path:e}),title:m(t.I18nKey.FILES$CLOSE_TAB,{path:e}),className:r.cn(`inline-flex items-center justify-center size-5 self-center mr-1 rounded-sm shrink-0 cursor-pointer`,`text-inherit hover:bg-white/10`,`opacity-100 transition-opacity`,`md:opacity-0 md:group-hover/file-tab:opacity-100 md:group-focus-within/file-tab:opacity-100`),onClick:()=>u(e),children:(0,a.jsx)(i.default,{width:10,height:10,"aria-hidden":!0})})]},e)})}):(0,a.jsx)(`div`,{className:`flex-1 min-w-0`}),p?(0,a.jsx)(`div`,{className:`ml-auto shrink-0 self-center flex items-center gap-1`,children:p}):null]})}exports.FileQuickRow=s;
2
2
  //# sourceMappingURL=file-quick-row.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-quick-row.cjs","names":[],"sources":["../../../../src/components/features/files-tab/file-quick-row.tsx"],"sourcesContent":["import { ListTree } from \"lucide-react\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { sortFilesByPriority } from \"#/utils/file-priority\";\nimport { cn } from \"#/utils/utils\";\n\ninterface FileQuickRowProps {\n paths: string[];\n selectedPath: string | null;\n onSelectFile: (path: string) => void;\n /** Whether the left-hand file tree is currently visible. */\n isTreeVisible: boolean;\n /** Toggle the visibility of the left-hand file tree. */\n onToggleTree: () => void;\n}\n\n/**\n * Horizontal \"quick access\" row of files at the top of the file viewer.\n * Important entrypoints (index.html, README.md, package.json, …) appear\n * first. A file-tree toggle on the leading edge shows or hides the full\n * tree on the left there is no overflow dropdown, so anything that doesn't fit\n * here is reachable by opening the tree.\n */\nexport function FileQuickRow({\n paths,\n selectedPath,\n onSelectFile,\n isTreeVisible,\n onToggleTree,\n}: FileQuickRowProps) {\n const { t } = useTranslation(\"openhands\");\n\n const sortedByPriority = useMemo(() => sortFilesByPriority(paths), [paths]);\n\n return (\n <div\n className=\"flex items-center gap-1.5 border-b border-[var(--oh-border)] px-2 py-1.5 min-h-[34px]\"\n data-testid=\"file-quick-row\"\n >\n <button\n type=\"button\"\n onClick={onToggleTree}\n data-testid=\"file-quick-row-tree-toggle\"\n aria-pressed={isTreeVisible}\n aria-label={t(\n isTreeVisible\n ? I18nKey.FILES$HIDE_FILE_TREE\n : I18nKey.FILES$SHOW_FILE_TREE,\n )}\n title={t(\n isTreeVisible\n ? I18nKey.FILES$HIDE_FILE_TREE\n : I18nKey.FILES$SHOW_FILE_TREE,\n )}\n className={cn(\n \"shrink-0 inline-flex items-center justify-center w-6 h-6 rounded-md cursor-pointer\",\n \"text-[var(--oh-text-tertiary)] hover:bg-tertiary\",\n isTreeVisible && \"bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ListTree className=\"w-3 h-3\" aria-hidden strokeWidth={2} />\n </button>\n\n {sortedByPriority.length > 0 && (\n <div className=\"flex flex-nowrap items-center gap-1.5 overflow-hidden flex-1 min-w-0\">\n {sortedByPriority.map((path) => {\n const isSelected = selectedPath === path;\n return (\n <button\n key={path}\n type=\"button\"\n onClick={() => onSelectFile(path)}\n title={path}\n data-testid={`file-quick-row-item-${path}`}\n className={cn(\n \"inline-flex items-center px-2 py-0.5 text-xs whitespace-nowrap rounded-md cursor-pointer\",\n isSelected\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"bg-[var(--oh-surface-raised)] text-[var(--oh-text-tertiary)] hover:bg-tertiary\",\n )}\n >\n {path}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"uYAwBA,SAAgB,EAAa,CAC3B,QACA,eACA,eACA,gBACA,gBACoB,CACpB,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAElC,GAAA,EAAA,EAAA,aAAiC,EAAA,oBAAoB,CAAK,EAAG,CAAC,CAAK,CAAC,EAE1E,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,wFACV,cAAY,0BAFd,EAIE,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,QAAS,EACT,cAAY,6BACZ,eAAc,EACd,aAAY,EACV,EACI,EAAA,QAAQ,qBACR,EAAA,QAAQ,oBACd,EACA,MAAO,EACL,EACI,EAAA,QAAQ,qBACR,EAAA,QAAQ,oBACd,EACA,UAAW,EAAA,GACT,qFACA,mDACA,GAAiB,+BACnB,YAEA,EAAA,EAAA,KAAC,EAAA,SAAD,CAAU,UAAU,UAAU,cAAA,GAAY,YAAa,CAAI,CAAA,CACrD,CAAA,EAEP,EAAiB,OAAS,IACzB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gFACZ,EAAiB,IAAK,GAAS,CAC9B,IAAM,EAAa,IAAiB,EACpC,OACE,EAAA,EAAA,KAAC,SAAD,CAEE,KAAK,SACL,YAAe,EAAa,CAAI,EAChC,MAAO,EACP,cAAa,uBAAuB,IACpC,UAAW,EAAA,GACT,2FACA,EACI,8CACA,gFACN,WAEC,CACK,EAbD,CAaC,CAEZ,CAAC,CACE,CAAA,CAEJ,GAET"}
1
+ {"version":3,"file":"file-quick-row.cjs","names":[],"sources":["../../../../src/components/features/files-tab/file-quick-row.tsx"],"sourcesContent":["import { ListTree } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport CloseIcon from \"#/icons/u-close.svg?react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\n\ninterface FileQuickRowProps {\n /** Open file tabs only (paths the user or agent has opened). */\n openPaths: string[];\n selectedPath: string | null;\n onSelectFile: (path: string) => void;\n onCloseFile: (path: string) => void;\n /** Whether the left-hand file tree is currently visible. */\n isTreeVisible: boolean;\n /** Toggle the visibility of the left-hand file tree. */\n onToggleTree: () => void;\n /** Trailing actions (e.g. refresh), pinned to the right. */\n actions?: ReactNode;\n}\n\nconst HIDDEN_SCROLLBAR_CLASSNAME =\n \"[scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\";\n\n/**\n * Horizontal strip of open-file tabs. A path only appears after the user or\n * agent opens it. Overflow scrolls horizontally without a visible scrollbar.\n */\nexport function FileQuickRow({\n openPaths,\n selectedPath,\n onSelectFile,\n onCloseFile,\n isTreeVisible,\n onToggleTree,\n actions,\n}: FileQuickRowProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <div\n className=\"flex h-[34px] shrink-0 items-stretch gap-1.5 overflow-y-hidden border-b border-[var(--oh-border)] px-2\"\n data-testid=\"file-quick-row\"\n >\n <button\n type=\"button\"\n onClick={onToggleTree}\n data-testid=\"file-quick-row-tree-toggle\"\n aria-pressed={isTreeVisible}\n aria-label={t(\n isTreeVisible\n ? I18nKey.FILES$HIDE_FILE_TREE\n : I18nKey.FILES$SHOW_FILE_TREE,\n )}\n title={t(\n isTreeVisible\n ? I18nKey.FILES$HIDE_FILE_TREE\n : I18nKey.FILES$SHOW_FILE_TREE,\n )}\n className={cn(\n \"shrink-0 self-center inline-flex items-center justify-center w-6 h-6 rounded-md cursor-pointer\",\n \"text-[var(--oh-text-tertiary)] hover:bg-tertiary\",\n isTreeVisible && \"bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ListTree className=\"w-3 h-3\" aria-hidden strokeWidth={2} />\n </button>\n\n {openPaths.length > 0 ? (\n <div\n role=\"tablist\"\n aria-label={t(I18nKey.COMMON$FILES)}\n className={cn(\n \"flex min-h-0 min-w-0 flex-1 flex-nowrap items-stretch overflow-x-auto overflow-y-hidden overscroll-y-none\",\n HIDDEN_SCROLLBAR_CLASSNAME,\n )}\n >\n {openPaths.map((path, index) => {\n const isSelected = selectedPath === path;\n const fileName = path.split(\"/\").pop() || path;\n return (\n <div\n key={path}\n className={cn(\n \"group/file-tab relative flex shrink-0 items-stretch\",\n // Vertical edges on every tab (left on the first, right on all).\n \"border-r border-r-[var(--oh-border)]\",\n index === 0 && \"border-l border-l-[var(--oh-border)]\",\n \"border-b-2 -mb-px transition-colors\",\n isSelected\n ? \"border-b-white text-white\"\n : \"border-b-transparent text-[var(--oh-muted)] hover:text-white hover:border-b-white/25\",\n )}\n >\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => onSelectFile(path)}\n title={path}\n data-testid={`file-quick-row-item-${path}`}\n className=\"flex min-w-0 max-w-[160px] items-center pl-2.5 pr-1 text-xs cursor-pointer text-inherit\"\n >\n <span className=\"truncate\">{fileName}</span>\n </button>\n <button\n type=\"button\"\n data-testid={`file-quick-row-close-${path}`}\n aria-label={t(I18nKey.FILES$CLOSE_TAB, { path })}\n title={t(I18nKey.FILES$CLOSE_TAB, { path })}\n className={cn(\n \"inline-flex items-center justify-center size-5 self-center mr-1 rounded-sm shrink-0 cursor-pointer\",\n \"text-inherit hover:bg-white/10\",\n // Always visible on small / touch-first viewports; hover to\n // reveal on fine pointers (desktop).\n \"opacity-100 transition-opacity\",\n \"md:opacity-0 md:group-hover/file-tab:opacity-100 md:group-focus-within/file-tab:opacity-100\",\n )}\n onClick={() => onCloseFile(path)}\n >\n <CloseIcon width={10} height={10} aria-hidden />\n </button>\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"flex-1 min-w-0\" />\n )}\n\n {actions ? (\n <div className=\"ml-auto shrink-0 self-center flex items-center gap-1\">\n {actions}\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":"8WAqBA,IAAM,EACJ,iFAMF,SAAgB,EAAa,CAC3B,YACA,eACA,eACA,cACA,gBACA,eACA,WACoB,CACpB,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAExC,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,yGACV,cAAY,0BAFd,EAIE,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,QAAS,EACT,cAAY,6BACZ,eAAc,EACd,aAAY,EACV,EACI,EAAA,QAAQ,qBACR,EAAA,QAAQ,oBACd,EACA,MAAO,EACL,EACI,EAAA,QAAQ,qBACR,EAAA,QAAQ,oBACd,EACA,UAAW,EAAA,GACT,iGACA,mDACA,GAAiB,+BACnB,YAEA,EAAA,EAAA,KAAC,EAAA,SAAD,CAAU,UAAU,UAAU,cAAA,GAAY,YAAa,CAAI,CAAA,CACrD,CAAA,EAEP,EAAU,OAAS,GAClB,EAAA,EAAA,KAAC,MAAD,CACE,KAAK,UACL,aAAY,EAAE,EAAA,QAAQ,YAAY,EAClC,UAAW,EAAA,GACT,4GACA,CACF,WAEC,EAAU,KAAK,EAAM,IAAU,CAC9B,IAAM,EAAa,IAAiB,EAC9B,EAAW,EAAK,MAAM,GAAG,EAAE,IAAI,GAAK,EAC1C,OACE,EAAA,EAAA,MAAC,MAAD,CAEE,UAAW,EAAA,GACT,sDAEA,uCACA,IAAU,GAAK,uCACf,sCACA,EACI,4BACA,sFACN,WAXF,EAaE,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,KAAK,MACL,gBAAe,EACf,YAAe,EAAa,CAAI,EAChC,MAAO,EACP,cAAa,uBAAuB,IACpC,UAAU,oGAEV,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,CAAe,CAAA,CACrC,CAAA,GACR,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,cAAa,wBAAwB,IACrC,aAAY,EAAE,EAAA,QAAQ,gBAAiB,CAAE,MAAK,CAAC,EAC/C,MAAO,EAAE,EAAA,QAAQ,gBAAiB,CAAE,MAAK,CAAC,EAC1C,UAAW,EAAA,GACT,qGACA,iCAGA,iCACA,6FACF,EACA,YAAe,EAAY,CAAI,YAE/B,EAAA,EAAA,KAAC,EAAA,QAAD,CAAW,MAAO,GAAI,OAAQ,GAAI,cAAA,EAAa,CAAA,CACzC,CAAA,CACL,GAxCE,CAwCF,CAET,CAAC,CACE,CAAA,GAEL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gBAAkB,CAAA,EAGlC,GACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gEACZ,CACE,CAAA,EACH,IACD,GAET"}
@@ -1,18 +1,20 @@
1
+ import type { ReactNode } from "react";
1
2
  interface FileQuickRowProps {
2
- paths: string[];
3
+ /** Open file tabs only (paths the user or agent has opened). */
4
+ openPaths: string[];
3
5
  selectedPath: string | null;
4
6
  onSelectFile: (path: string) => void;
7
+ onCloseFile: (path: string) => void;
5
8
  /** Whether the left-hand file tree is currently visible. */
6
9
  isTreeVisible: boolean;
7
10
  /** Toggle the visibility of the left-hand file tree. */
8
11
  onToggleTree: () => void;
12
+ /** Trailing actions (e.g. refresh), pinned to the right. */
13
+ actions?: ReactNode;
9
14
  }
10
15
  /**
11
- * Horizontal "quick access" row of files at the top of the file viewer.
12
- * Important entrypoints (index.html, README.md, package.json, …) appear
13
- * first. A file-tree toggle on the leading edge shows or hides the full
14
- * tree on the left — there is no overflow dropdown, so anything that doesn't fit
15
- * here is reachable by opening the tree.
16
+ * Horizontal strip of open-file tabs. A path only appears after the user or
17
+ * agent opens it. Overflow scrolls horizontally without a visible scrollbar.
16
18
  */
17
- export declare function FileQuickRow({ paths, selectedPath, onSelectFile, isTreeVisible, onToggleTree, }: FileQuickRowProps): import("react").JSX.Element;
19
+ export declare function FileQuickRow({ openPaths, selectedPath, onSelectFile, onCloseFile, isTreeVisible, onToggleTree, actions, }: FileQuickRowProps): import("react").JSX.Element;
18
20
  export {};
@@ -2,42 +2,71 @@ import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es
2
2
  import { I18nKey as t } from "../../../i18n/declaration.js";
3
3
  import { ListTree as n } from "../../../node_modules/lucide-react/dist/esm/icons/list-tree.js";
4
4
  import { cn as r } from "../../../utils/utils.js";
5
- import { sortFilesByPriority as i } from "../../../utils/file-priority.js";
6
- import { useMemo as a } from "react";
7
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
+ import i from "../../../icons/u-close.js";
6
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
8
7
  //#region src/components/features/files-tab/file-quick-row.tsx
9
- function c({ paths: c, selectedPath: l, onSelectFile: u, isTreeVisible: d, onToggleTree: f }) {
10
- let { t: p } = e("openhands"), m = a(() => i(c), [c]);
11
- return /* @__PURE__ */ s("div", {
12
- className: "flex items-center gap-1.5 border-b border-[var(--oh-border)] px-2 py-1.5 min-h-[34px]",
8
+ var s = "[scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden";
9
+ function c({ openPaths: c, selectedPath: l, onSelectFile: u, onCloseFile: d, isTreeVisible: f, onToggleTree: p, actions: m }) {
10
+ let { t: h } = e("openhands");
11
+ return /* @__PURE__ */ o("div", {
12
+ className: "flex h-[34px] shrink-0 items-stretch gap-1.5 overflow-y-hidden border-b border-[var(--oh-border)] px-2",
13
13
  "data-testid": "file-quick-row",
14
- children: [/* @__PURE__ */ o("button", {
15
- type: "button",
16
- onClick: f,
17
- "data-testid": "file-quick-row-tree-toggle",
18
- "aria-pressed": d,
19
- "aria-label": p(d ? t.FILES$HIDE_FILE_TREE : t.FILES$SHOW_FILE_TREE),
20
- title: p(d ? t.FILES$HIDE_FILE_TREE : t.FILES$SHOW_FILE_TREE),
21
- className: r("shrink-0 inline-flex items-center justify-center w-6 h-6 rounded-md cursor-pointer", "text-[var(--oh-text-tertiary)] hover:bg-tertiary", d && "bg-[var(--oh-surface-raised)]"),
22
- children: /* @__PURE__ */ o(n, {
23
- className: "w-3 h-3",
24
- "aria-hidden": !0,
25
- strokeWidth: 2
26
- })
27
- }), m.length > 0 && /* @__PURE__ */ o("div", {
28
- className: "flex flex-nowrap items-center gap-1.5 overflow-hidden flex-1 min-w-0",
29
- children: m.map((e) => {
30
- let t = l === e;
31
- return /* @__PURE__ */ o("button", {
32
- type: "button",
33
- onClick: () => u(e),
34
- title: e,
35
- "data-testid": `file-quick-row-item-${e}`,
36
- className: r("inline-flex items-center px-2 py-0.5 text-xs whitespace-nowrap rounded-md cursor-pointer", t ? "bg-[var(--oh-interactive-hover)] text-white" : "bg-[var(--oh-surface-raised)] text-[var(--oh-text-tertiary)] hover:bg-tertiary"),
37
- children: e
38
- }, e);
39
- })
40
- })]
14
+ children: [
15
+ /* @__PURE__ */ a("button", {
16
+ type: "button",
17
+ onClick: p,
18
+ "data-testid": "file-quick-row-tree-toggle",
19
+ "aria-pressed": f,
20
+ "aria-label": h(f ? t.FILES$HIDE_FILE_TREE : t.FILES$SHOW_FILE_TREE),
21
+ title: h(f ? t.FILES$HIDE_FILE_TREE : t.FILES$SHOW_FILE_TREE),
22
+ className: r("shrink-0 self-center inline-flex items-center justify-center w-6 h-6 rounded-md cursor-pointer", "text-[var(--oh-text-tertiary)] hover:bg-tertiary", f && "bg-[var(--oh-surface-raised)]"),
23
+ children: /* @__PURE__ */ a(n, {
24
+ className: "w-3 h-3",
25
+ "aria-hidden": !0,
26
+ strokeWidth: 2
27
+ })
28
+ }),
29
+ c.length > 0 ? /* @__PURE__ */ a("div", {
30
+ role: "tablist",
31
+ "aria-label": h(t.COMMON$FILES),
32
+ className: r("flex min-h-0 min-w-0 flex-1 flex-nowrap items-stretch overflow-x-auto overflow-y-hidden overscroll-y-none", s),
33
+ children: c.map((e, n) => {
34
+ let s = l === e, c = e.split("/").pop() || e;
35
+ return /* @__PURE__ */ o("div", {
36
+ className: r("group/file-tab relative flex shrink-0 items-stretch", "border-r border-r-[var(--oh-border)]", n === 0 && "border-l border-l-[var(--oh-border)]", "border-b-2 -mb-px transition-colors", s ? "border-b-white text-white" : "border-b-transparent text-[var(--oh-muted)] hover:text-white hover:border-b-white/25"),
37
+ children: [/* @__PURE__ */ a("button", {
38
+ type: "button",
39
+ role: "tab",
40
+ "aria-selected": s,
41
+ onClick: () => u(e),
42
+ title: e,
43
+ "data-testid": `file-quick-row-item-${e}`,
44
+ className: "flex min-w-0 max-w-[160px] items-center pl-2.5 pr-1 text-xs cursor-pointer text-inherit",
45
+ children: /* @__PURE__ */ a("span", {
46
+ className: "truncate",
47
+ children: c
48
+ })
49
+ }), /* @__PURE__ */ a("button", {
50
+ type: "button",
51
+ "data-testid": `file-quick-row-close-${e}`,
52
+ "aria-label": h(t.FILES$CLOSE_TAB, { path: e }),
53
+ title: h(t.FILES$CLOSE_TAB, { path: e }),
54
+ className: r("inline-flex items-center justify-center size-5 self-center mr-1 rounded-sm shrink-0 cursor-pointer", "text-inherit hover:bg-white/10", "opacity-100 transition-opacity", "md:opacity-0 md:group-hover/file-tab:opacity-100 md:group-focus-within/file-tab:opacity-100"),
55
+ onClick: () => d(e),
56
+ children: /* @__PURE__ */ a(i, {
57
+ width: 10,
58
+ height: 10,
59
+ "aria-hidden": !0
60
+ })
61
+ })]
62
+ }, e);
63
+ })
64
+ }) : /* @__PURE__ */ a("div", { className: "flex-1 min-w-0" }),
65
+ m ? /* @__PURE__ */ a("div", {
66
+ className: "ml-auto shrink-0 self-center flex items-center gap-1",
67
+ children: m
68
+ }) : null
69
+ ]
41
70
  });
42
71
  }
43
72
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"file-quick-row.js","names":[],"sources":["../../../../src/components/features/files-tab/file-quick-row.tsx"],"sourcesContent":["import { ListTree } from \"lucide-react\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { sortFilesByPriority } from \"#/utils/file-priority\";\nimport { cn } from \"#/utils/utils\";\n\ninterface FileQuickRowProps {\n paths: string[];\n selectedPath: string | null;\n onSelectFile: (path: string) => void;\n /** Whether the left-hand file tree is currently visible. */\n isTreeVisible: boolean;\n /** Toggle the visibility of the left-hand file tree. */\n onToggleTree: () => void;\n}\n\n/**\n * Horizontal \"quick access\" row of files at the top of the file viewer.\n * Important entrypoints (index.html, README.md, package.json, …) appear\n * first. A file-tree toggle on the leading edge shows or hides the full\n * tree on the left there is no overflow dropdown, so anything that doesn't fit\n * here is reachable by opening the tree.\n */\nexport function FileQuickRow({\n paths,\n selectedPath,\n onSelectFile,\n isTreeVisible,\n onToggleTree,\n}: FileQuickRowProps) {\n const { t } = useTranslation(\"openhands\");\n\n const sortedByPriority = useMemo(() => sortFilesByPriority(paths), [paths]);\n\n return (\n <div\n className=\"flex items-center gap-1.5 border-b border-[var(--oh-border)] px-2 py-1.5 min-h-[34px]\"\n data-testid=\"file-quick-row\"\n >\n <button\n type=\"button\"\n onClick={onToggleTree}\n data-testid=\"file-quick-row-tree-toggle\"\n aria-pressed={isTreeVisible}\n aria-label={t(\n isTreeVisible\n ? I18nKey.FILES$HIDE_FILE_TREE\n : I18nKey.FILES$SHOW_FILE_TREE,\n )}\n title={t(\n isTreeVisible\n ? I18nKey.FILES$HIDE_FILE_TREE\n : I18nKey.FILES$SHOW_FILE_TREE,\n )}\n className={cn(\n \"shrink-0 inline-flex items-center justify-center w-6 h-6 rounded-md cursor-pointer\",\n \"text-[var(--oh-text-tertiary)] hover:bg-tertiary\",\n isTreeVisible && \"bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ListTree className=\"w-3 h-3\" aria-hidden strokeWidth={2} />\n </button>\n\n {sortedByPriority.length > 0 && (\n <div className=\"flex flex-nowrap items-center gap-1.5 overflow-hidden flex-1 min-w-0\">\n {sortedByPriority.map((path) => {\n const isSelected = selectedPath === path;\n return (\n <button\n key={path}\n type=\"button\"\n onClick={() => onSelectFile(path)}\n title={path}\n data-testid={`file-quick-row-item-${path}`}\n className={cn(\n \"inline-flex items-center px-2 py-0.5 text-xs whitespace-nowrap rounded-md cursor-pointer\",\n isSelected\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"bg-[var(--oh-surface-raised)] text-[var(--oh-text-tertiary)] hover:bg-tertiary\",\n )}\n >\n {path}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAwBA,SAAgB,EAAa,EAC3B,UACA,iBACA,iBACA,kBACA,mBACoB;CACpB,IAAM,EAAE,SAAM,EAAe,WAAW,GAElC,IAAmB,QAAc,EAAoB,CAAK,GAAG,CAAC,CAAK,CAAC;CAE1E,OACE,kBAAC,OAAD;EACE,WAAU;EACV,eAAY;YAFd,CAIE,kBAAC,UAAD;GACE,MAAK;GACL,SAAS;GACT,eAAY;GACZ,gBAAc;GACd,cAAY,EACV,IACI,EAAQ,uBACR,EAAQ,oBACd;GACA,OAAO,EACL,IACI,EAAQ,uBACR,EAAQ,oBACd;GACA,WAAW,EACT,sFACA,oDACA,KAAiB,+BACnB;aAEA,kBAAC,GAAD;IAAU,WAAU;IAAU,eAAA;IAAY,aAAa;GAAI,CAAA;EACrD,CAAA,GAEP,EAAiB,SAAS,KACzB,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAiB,KAAK,MAAS;IAC9B,IAAM,IAAa,MAAiB;IACpC,OACE,kBAAC,UAAD;KAEE,MAAK;KACL,eAAe,EAAa,CAAI;KAChC,OAAO;KACP,eAAa,uBAAuB;KACpC,WAAW,EACT,4FACA,IACI,gDACA,gFACN;eAEC;IACK,GAbD,CAaC;GAEZ,CAAC;EACE,CAAA,CAEJ;;AAET"}
1
+ {"version":3,"file":"file-quick-row.js","names":[],"sources":["../../../../src/components/features/files-tab/file-quick-row.tsx"],"sourcesContent":["import { ListTree } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport CloseIcon from \"#/icons/u-close.svg?react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\n\ninterface FileQuickRowProps {\n /** Open file tabs only (paths the user or agent has opened). */\n openPaths: string[];\n selectedPath: string | null;\n onSelectFile: (path: string) => void;\n onCloseFile: (path: string) => void;\n /** Whether the left-hand file tree is currently visible. */\n isTreeVisible: boolean;\n /** Toggle the visibility of the left-hand file tree. */\n onToggleTree: () => void;\n /** Trailing actions (e.g. refresh), pinned to the right. */\n actions?: ReactNode;\n}\n\nconst HIDDEN_SCROLLBAR_CLASSNAME =\n \"[scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\";\n\n/**\n * Horizontal strip of open-file tabs. A path only appears after the user or\n * agent opens it. Overflow scrolls horizontally without a visible scrollbar.\n */\nexport function FileQuickRow({\n openPaths,\n selectedPath,\n onSelectFile,\n onCloseFile,\n isTreeVisible,\n onToggleTree,\n actions,\n}: FileQuickRowProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <div\n className=\"flex h-[34px] shrink-0 items-stretch gap-1.5 overflow-y-hidden border-b border-[var(--oh-border)] px-2\"\n data-testid=\"file-quick-row\"\n >\n <button\n type=\"button\"\n onClick={onToggleTree}\n data-testid=\"file-quick-row-tree-toggle\"\n aria-pressed={isTreeVisible}\n aria-label={t(\n isTreeVisible\n ? I18nKey.FILES$HIDE_FILE_TREE\n : I18nKey.FILES$SHOW_FILE_TREE,\n )}\n title={t(\n isTreeVisible\n ? I18nKey.FILES$HIDE_FILE_TREE\n : I18nKey.FILES$SHOW_FILE_TREE,\n )}\n className={cn(\n \"shrink-0 self-center inline-flex items-center justify-center w-6 h-6 rounded-md cursor-pointer\",\n \"text-[var(--oh-text-tertiary)] hover:bg-tertiary\",\n isTreeVisible && \"bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ListTree className=\"w-3 h-3\" aria-hidden strokeWidth={2} />\n </button>\n\n {openPaths.length > 0 ? (\n <div\n role=\"tablist\"\n aria-label={t(I18nKey.COMMON$FILES)}\n className={cn(\n \"flex min-h-0 min-w-0 flex-1 flex-nowrap items-stretch overflow-x-auto overflow-y-hidden overscroll-y-none\",\n HIDDEN_SCROLLBAR_CLASSNAME,\n )}\n >\n {openPaths.map((path, index) => {\n const isSelected = selectedPath === path;\n const fileName = path.split(\"/\").pop() || path;\n return (\n <div\n key={path}\n className={cn(\n \"group/file-tab relative flex shrink-0 items-stretch\",\n // Vertical edges on every tab (left on the first, right on all).\n \"border-r border-r-[var(--oh-border)]\",\n index === 0 && \"border-l border-l-[var(--oh-border)]\",\n \"border-b-2 -mb-px transition-colors\",\n isSelected\n ? \"border-b-white text-white\"\n : \"border-b-transparent text-[var(--oh-muted)] hover:text-white hover:border-b-white/25\",\n )}\n >\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => onSelectFile(path)}\n title={path}\n data-testid={`file-quick-row-item-${path}`}\n className=\"flex min-w-0 max-w-[160px] items-center pl-2.5 pr-1 text-xs cursor-pointer text-inherit\"\n >\n <span className=\"truncate\">{fileName}</span>\n </button>\n <button\n type=\"button\"\n data-testid={`file-quick-row-close-${path}`}\n aria-label={t(I18nKey.FILES$CLOSE_TAB, { path })}\n title={t(I18nKey.FILES$CLOSE_TAB, { path })}\n className={cn(\n \"inline-flex items-center justify-center size-5 self-center mr-1 rounded-sm shrink-0 cursor-pointer\",\n \"text-inherit hover:bg-white/10\",\n // Always visible on small / touch-first viewports; hover to\n // reveal on fine pointers (desktop).\n \"opacity-100 transition-opacity\",\n \"md:opacity-0 md:group-hover/file-tab:opacity-100 md:group-focus-within/file-tab:opacity-100\",\n )}\n onClick={() => onCloseFile(path)}\n >\n <CloseIcon width={10} height={10} aria-hidden />\n </button>\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"flex-1 min-w-0\" />\n )}\n\n {actions ? (\n <div className=\"ml-auto shrink-0 self-center flex items-center gap-1\">\n {actions}\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;;;AAqBA,IAAM,IACJ;AAMF,SAAgB,EAAa,EAC3B,cACA,iBACA,iBACA,gBACA,kBACA,iBACA,cACoB;CACpB,IAAM,EAAE,SAAM,EAAe,WAAW;CAExC,OACE,kBAAC,OAAD;EACE,WAAU;EACV,eAAY;YAFd;GAIE,kBAAC,UAAD;IACE,MAAK;IACL,SAAS;IACT,eAAY;IACZ,gBAAc;IACd,cAAY,EACV,IACI,EAAQ,uBACR,EAAQ,oBACd;IACA,OAAO,EACL,IACI,EAAQ,uBACR,EAAQ,oBACd;IACA,WAAW,EACT,kGACA,oDACA,KAAiB,+BACnB;cAEA,kBAAC,GAAD;KAAU,WAAU;KAAU,eAAA;KAAY,aAAa;IAAI,CAAA;GACrD,CAAA;GAEP,EAAU,SAAS,IAClB,kBAAC,OAAD;IACE,MAAK;IACL,cAAY,EAAE,EAAQ,YAAY;IAClC,WAAW,EACT,6GACA,CACF;cAEC,EAAU,KAAK,GAAM,MAAU;KAC9B,IAAM,IAAa,MAAiB,GAC9B,IAAW,EAAK,MAAM,GAAG,EAAE,IAAI,KAAK;KAC1C,OACE,kBAAC,OAAD;MAEE,WAAW,EACT,uDAEA,wCACA,MAAU,KAAK,wCACf,uCACA,IACI,8BACA,sFACN;gBAXF,CAaE,kBAAC,UAAD;OACE,MAAK;OACL,MAAK;OACL,iBAAe;OACf,eAAe,EAAa,CAAI;OAChC,OAAO;OACP,eAAa,uBAAuB;OACpC,WAAU;iBAEV,kBAAC,QAAD;QAAM,WAAU;kBAAY;OAAe,CAAA;MACrC,CAAA,GACR,kBAAC,UAAD;OACE,MAAK;OACL,eAAa,wBAAwB;OACrC,cAAY,EAAE,EAAQ,iBAAiB,EAAE,QAAK,CAAC;OAC/C,OAAO,EAAE,EAAQ,iBAAiB,EAAE,QAAK,CAAC;OAC1C,WAAW,EACT,sGACA,kCAGA,kCACA,6FACF;OACA,eAAe,EAAY,CAAI;iBAE/B,kBAAC,GAAD;QAAW,OAAO;QAAI,QAAQ;QAAI,eAAA;OAAa,CAAA;MACzC,CAAA,CACL;QAxCE,CAwCF;IAET,CAAC;GACE,CAAA,IAEL,kBAAC,OAAD,EAAK,WAAU,iBAAkB,CAAA;GAGlC,IACC,kBAAC,OAAD;IAAK,WAAU;cACZ;GACE,CAAA,IACH;EACD;;AAET"}
@@ -0,0 +1,2 @@
1
+ require("../../../_virtual/_rolldown/runtime.cjs");var e=`files-tab-tree-width`,t=`files-tab-tree-resize-handle`;exports.FILES_TAB_TREE_RESIZE_HANDLE_TEST_ID=t,exports.FILES_TAB_TREE_WIDTH_STORAGE_KEY=e;
2
+ //# sourceMappingURL=files-tab-tree.constants.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files-tab-tree.constants.cjs","names":[],"sources":["../../../../src/components/features/files-tab/files-tab-tree.constants.ts"],"sourcesContent":["/** Persisted pixel width of the Files tab tree sidebar. */\nexport const FILES_TAB_TREE_WIDTH_STORAGE_KEY = \"files-tab-tree-width\";\n\n/** Matches the previous fixed `w-56` (14rem) tree width. */\nexport const FILES_TAB_TREE_DEFAULT_WIDTH_PX = 224;\nexport const FILES_TAB_TREE_MIN_WIDTH_PX = 160;\nexport const FILES_TAB_TREE_MAX_WIDTH_PX = 480;\n\nexport const FILES_TAB_TREE_RESIZE_HANDLE_TEST_ID =\n \"files-tab-tree-resize-handle\";\n"],"mappings":"mDACA,IAAa,EAAmC,uBAOnC,EACX"}
@@ -0,0 +1,7 @@
1
+ /** Persisted pixel width of the Files tab tree sidebar. */
2
+ export declare const FILES_TAB_TREE_WIDTH_STORAGE_KEY = "files-tab-tree-width";
3
+ /** Matches the previous fixed `w-56` (14rem) tree width. */
4
+ export declare const FILES_TAB_TREE_DEFAULT_WIDTH_PX = 224;
5
+ export declare const FILES_TAB_TREE_MIN_WIDTH_PX = 160;
6
+ export declare const FILES_TAB_TREE_MAX_WIDTH_PX = 480;
7
+ export declare const FILES_TAB_TREE_RESIZE_HANDLE_TEST_ID = "files-tab-tree-resize-handle";
@@ -0,0 +1,6 @@
1
+ //#region src/components/features/files-tab/files-tab-tree.constants.ts
2
+ var e = "files-tab-tree-width", t = "files-tab-tree-resize-handle";
3
+ //#endregion
4
+ export { t as FILES_TAB_TREE_RESIZE_HANDLE_TEST_ID, e as FILES_TAB_TREE_WIDTH_STORAGE_KEY };
5
+
6
+ //# sourceMappingURL=files-tab-tree.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files-tab-tree.constants.js","names":[],"sources":["../../../../src/components/features/files-tab/files-tab-tree.constants.ts"],"sourcesContent":["/** Persisted pixel width of the Files tab tree sidebar. */\nexport const FILES_TAB_TREE_WIDTH_STORAGE_KEY = \"files-tab-tree-width\";\n\n/** Matches the previous fixed `w-56` (14rem) tree width. */\nexport const FILES_TAB_TREE_DEFAULT_WIDTH_PX = 224;\nexport const FILES_TAB_TREE_MIN_WIDTH_PX = 160;\nexport const FILES_TAB_TREE_MAX_WIDTH_PX = 480;\n\nexport const FILES_TAB_TREE_RESIZE_HANDLE_TEST_ID =\n \"files-tab-tree-resize-handle\";\n"],"mappings":";AACA,IAAa,IAAmC,wBAOnC,IACX"}
@@ -1,2 +1,2 @@
1
- require("../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../utils/utils.cjs");let t=require("react/jsx-runtime");function n({value:n,options:r,onChange:i,ariaLabel:a,testId:o}){return(0,t.jsx)(`div`,{role:`radiogroup`,"aria-label":a,"data-testid":o,className:`inline-flex items-center rounded-md bg-[var(--oh-surface-raised)] p-0.5 text-xs`,children:r.map(r=>{let a=r.value===n;return(0,t.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":a,"data-testid":o?`${o}-option-${r.value}`:void 0,onClick:()=>i(r.value),className:e.cn(`inline-flex items-center gap-1.5 px-2.5 py-1 rounded cursor-pointer transition-colors`,a?`bg-[var(--oh-interactive-hover)] text-white`:`text-[var(--oh-muted)] hover:text-white`),children:[r.icon?(0,t.jsx)(`span`,{className:`inline-flex size-3.5 shrink-0 items-center justify-center [&_svg]:size-3.5`,children:r.icon}):null,r.label]},r.value)})})}exports.SegmentedToggle=n;
1
+ require("../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../utils/utils.cjs");let t=require("react/jsx-runtime");function n({value:n,options:r,onChange:i,ariaLabel:a,testId:o,className:s,equalWidth:c=!1}){return(0,t.jsx)(`div`,{role:`radiogroup`,"aria-label":a,"data-testid":o,className:e.cn(c?`flex w-full`:`inline-flex`,`items-center rounded-md bg-[var(--oh-surface-raised)] p-0.5 text-xs`,s),children:r.map(r=>{let a=r.value===n;return(0,t.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":a,"data-testid":o?`${o}-option-${r.value}`:void 0,onClick:()=>i(r.value),className:e.cn(`inline-flex items-center gap-1.5 px-2 py-0.5 rounded cursor-pointer transition-colors`,c&&`flex-1 justify-center text-center`,a?`bg-[var(--oh-interactive-hover)] text-white`:`text-[var(--oh-muted)] hover:text-white`),children:[r.icon,r.label]},r.value)})})}exports.SegmentedToggle=n;
2
2
  //# sourceMappingURL=segmented-toggle.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"segmented-toggle.cjs","names":[],"sources":["../../../../src/components/features/files-tab/segmented-toggle.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"#/utils/utils\";\n\ninterface SegmentedToggleOption<T extends string> {\n value: T;\n label: string;\n icon?: ReactNode;\n}\n\ninterface SegmentedToggleProps<T extends string> {\n value: T;\n options: SegmentedToggleOption<T>[];\n onChange: (value: T) => void;\n ariaLabel: string;\n testId?: string;\n}\n\n/**\n * Lightweight 2-state segmented control used for the files-tab toggles\n * (\"Diff view\" on/off, \"Rich\"/\"Plain\"). Kept local because the existing\n * shared switch components are heavier than what we need here.\n */\nexport function SegmentedToggle<T extends string>({\n value,\n options,\n onChange,\n ariaLabel,\n testId,\n}: SegmentedToggleProps<T>) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n data-testid={testId}\n className=\"inline-flex items-center rounded-md bg-[var(--oh-surface-raised)] p-0.5 text-xs\"\n >\n {options.map((option) => {\n const isActive = option.value === value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n data-testid={\n testId ? `${testId}-option-${option.value}` : undefined\n }\n onClick={() => onChange(option.value)}\n className={cn(\n \"inline-flex items-center gap-1.5 px-2.5 py-1 rounded cursor-pointer transition-colors\",\n isActive\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"text-[var(--oh-muted)] hover:text-white\",\n )}\n >\n {option.icon ? (\n <span className=\"inline-flex size-3.5 shrink-0 items-center justify-center [&_svg]:size-3.5\">\n {option.icon}\n </span>\n ) : null}\n {option.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":"kIAsBA,SAAgB,EAAkC,CAChD,QACA,UACA,WACA,YACA,UAC0B,CAC1B,OACE,EAAA,EAAA,KAAC,MAAD,CACE,KAAK,aACL,aAAY,EACZ,cAAa,EACb,UAAU,2FAET,EAAQ,IAAK,GAAW,CACvB,IAAM,EAAW,EAAO,QAAU,EAClC,OACE,EAAA,EAAA,MAAC,SAAD,CAEE,KAAK,SACL,KAAK,QACL,eAAc,EACd,cACE,EAAS,GAAG,EAAO,UAAU,EAAO,QAAU,IAAA,GAEhD,YAAe,EAAS,EAAO,KAAK,EACpC,UAAW,EAAA,GACT,wFACA,EACI,8CACA,yCACN,WAdF,CAgBG,EAAO,MACN,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sFACb,EAAO,IACJ,CAAA,EACJ,KACH,EAAO,KACF,GArBD,EAAO,KAqBN,CAEZ,CAAC,CACE,CAAA,CAET"}
1
+ {"version":3,"file":"segmented-toggle.cjs","names":[],"sources":["../../../../src/components/features/files-tab/segmented-toggle.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"#/utils/utils\";\n\ninterface SegmentedToggleOption<T extends string> {\n value: T;\n label: string;\n icon?: ReactNode;\n}\n\ninterface SegmentedToggleProps<T extends string> {\n value: T;\n options: SegmentedToggleOption<T>[];\n onChange: (value: T) => void;\n ariaLabel: string;\n testId?: string;\n className?: string;\n /** Stretch the control and give each option an equal share of the width. */\n equalWidth?: boolean;\n}\n\n/**\n * Lightweight 2-state segmented control used for the files-tab toggles\n * (\"Rich\"/\"Plain\") and a few other compact two-way choices.\n */\nexport function SegmentedToggle<T extends string>({\n value,\n options,\n onChange,\n ariaLabel,\n testId,\n className,\n equalWidth = false,\n}: SegmentedToggleProps<T>) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n data-testid={testId}\n className={cn(\n equalWidth ? \"flex w-full\" : \"inline-flex\",\n \"items-center rounded-md bg-[var(--oh-surface-raised)] p-0.5 text-xs\",\n className,\n )}\n >\n {options.map((option) => {\n const isActive = option.value === value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n data-testid={\n testId ? `${testId}-option-${option.value}` : undefined\n }\n onClick={() => onChange(option.value)}\n className={cn(\n \"inline-flex items-center gap-1.5 px-2 py-0.5 rounded cursor-pointer transition-colors\",\n equalWidth && \"flex-1 justify-center text-center\",\n isActive\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"text-[var(--oh-muted)] hover:text-white\",\n )}\n >\n {option.icon}\n {option.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":"kIAwBA,SAAgB,EAAkC,CAChD,QACA,UACA,WACA,YACA,SACA,YACA,aAAa,IACa,CAC1B,OACE,EAAA,EAAA,KAAC,MAAD,CACE,KAAK,aACL,aAAY,EACZ,cAAa,EACb,UAAW,EAAA,GACT,EAAa,cAAgB,cAC7B,sEACA,CACF,WAEC,EAAQ,IAAK,GAAW,CACvB,IAAM,EAAW,EAAO,QAAU,EAClC,OACE,EAAA,EAAA,MAAC,SAAD,CAEE,KAAK,SACL,KAAK,QACL,eAAc,EACd,cACE,EAAS,GAAG,EAAO,UAAU,EAAO,QAAU,IAAA,GAEhD,YAAe,EAAS,EAAO,KAAK,EACpC,UAAW,EAAA,GACT,wFACA,GAAc,oCACd,EACI,8CACA,yCACN,WAfF,CAiBG,EAAO,KACP,EAAO,KACF,GAlBD,EAAO,KAkBN,CAEZ,CAAC,CACE,CAAA,CAET"}
@@ -10,11 +10,13 @@ interface SegmentedToggleProps<T extends string> {
10
10
  onChange: (value: T) => void;
11
11
  ariaLabel: string;
12
12
  testId?: string;
13
+ className?: string;
14
+ /** Stretch the control and give each option an equal share of the width. */
15
+ equalWidth?: boolean;
13
16
  }
14
17
  /**
15
18
  * Lightweight 2-state segmented control used for the files-tab toggles
16
- * ("Diff view" on/off, "Rich"/"Plain"). Kept local because the existing
17
- * shared switch components are heavier than what we need here.
19
+ * ("Rich"/"Plain") and a few other compact two-way choices.
18
20
  */
19
- export declare function SegmentedToggle<T extends string>({ value, options, onChange, ariaLabel, testId, }: SegmentedToggleProps<T>): import("react").JSX.Element;
21
+ export declare function SegmentedToggle<T extends string>({ value, options, onChange, ariaLabel, testId, className, equalWidth, }: SegmentedToggleProps<T>): import("react").JSX.Element;
20
22
  export {};
@@ -1,26 +1,23 @@
1
1
  import { cn as e } from "../../../utils/utils.js";
2
2
  import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
3
  //#region src/components/features/files-tab/segmented-toggle.tsx
4
- function r({ value: r, options: i, onChange: a, ariaLabel: o, testId: s }) {
4
+ function r({ value: r, options: i, onChange: a, ariaLabel: o, testId: s, className: c, equalWidth: l = !1 }) {
5
5
  return /* @__PURE__ */ t("div", {
6
6
  role: "radiogroup",
7
7
  "aria-label": o,
8
8
  "data-testid": s,
9
- className: "inline-flex items-center rounded-md bg-[var(--oh-surface-raised)] p-0.5 text-xs",
10
- children: i.map((i) => {
11
- let o = i.value === r;
9
+ className: e(l ? "flex w-full" : "inline-flex", "items-center rounded-md bg-[var(--oh-surface-raised)] p-0.5 text-xs", c),
10
+ children: i.map((t) => {
11
+ let i = t.value === r;
12
12
  return /* @__PURE__ */ n("button", {
13
13
  type: "button",
14
14
  role: "radio",
15
- "aria-checked": o,
16
- "data-testid": s ? `${s}-option-${i.value}` : void 0,
17
- onClick: () => a(i.value),
18
- className: e("inline-flex items-center gap-1.5 px-2.5 py-1 rounded cursor-pointer transition-colors", o ? "bg-[var(--oh-interactive-hover)] text-white" : "text-[var(--oh-muted)] hover:text-white"),
19
- children: [i.icon ? /* @__PURE__ */ t("span", {
20
- className: "inline-flex size-3.5 shrink-0 items-center justify-center [&_svg]:size-3.5",
21
- children: i.icon
22
- }) : null, i.label]
23
- }, i.value);
15
+ "aria-checked": i,
16
+ "data-testid": s ? `${s}-option-${t.value}` : void 0,
17
+ onClick: () => a(t.value),
18
+ className: e("inline-flex items-center gap-1.5 px-2 py-0.5 rounded cursor-pointer transition-colors", l && "flex-1 justify-center text-center", i ? "bg-[var(--oh-interactive-hover)] text-white" : "text-[var(--oh-muted)] hover:text-white"),
19
+ children: [t.icon, t.label]
20
+ }, t.value);
24
21
  })
25
22
  });
26
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"segmented-toggle.js","names":[],"sources":["../../../../src/components/features/files-tab/segmented-toggle.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"#/utils/utils\";\n\ninterface SegmentedToggleOption<T extends string> {\n value: T;\n label: string;\n icon?: ReactNode;\n}\n\ninterface SegmentedToggleProps<T extends string> {\n value: T;\n options: SegmentedToggleOption<T>[];\n onChange: (value: T) => void;\n ariaLabel: string;\n testId?: string;\n}\n\n/**\n * Lightweight 2-state segmented control used for the files-tab toggles\n * (\"Diff view\" on/off, \"Rich\"/\"Plain\"). Kept local because the existing\n * shared switch components are heavier than what we need here.\n */\nexport function SegmentedToggle<T extends string>({\n value,\n options,\n onChange,\n ariaLabel,\n testId,\n}: SegmentedToggleProps<T>) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n data-testid={testId}\n className=\"inline-flex items-center rounded-md bg-[var(--oh-surface-raised)] p-0.5 text-xs\"\n >\n {options.map((option) => {\n const isActive = option.value === value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n data-testid={\n testId ? `${testId}-option-${option.value}` : undefined\n }\n onClick={() => onChange(option.value)}\n className={cn(\n \"inline-flex items-center gap-1.5 px-2.5 py-1 rounded cursor-pointer transition-colors\",\n isActive\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"text-[var(--oh-muted)] hover:text-white\",\n )}\n >\n {option.icon ? (\n <span className=\"inline-flex size-3.5 shrink-0 items-center justify-center [&_svg]:size-3.5\">\n {option.icon}\n </span>\n ) : null}\n {option.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;AAsBA,SAAgB,EAAkC,EAChD,UACA,YACA,aACA,cACA,aAC0B;CAC1B,OACE,kBAAC,OAAD;EACE,MAAK;EACL,cAAY;EACZ,eAAa;EACb,WAAU;YAET,EAAQ,KAAK,MAAW;GACvB,IAAM,IAAW,EAAO,UAAU;GAClC,OACE,kBAAC,UAAD;IAEE,MAAK;IACL,MAAK;IACL,gBAAc;IACd,eACE,IAAS,GAAG,EAAO,UAAU,EAAO,UAAU,KAAA;IAEhD,eAAe,EAAS,EAAO,KAAK;IACpC,WAAW,EACT,yFACA,IACI,gDACA,yCACN;cAdF,CAgBG,EAAO,OACN,kBAAC,QAAD;KAAM,WAAU;eACb,EAAO;IACJ,CAAA,IACJ,MACH,EAAO,KACF;MArBD,EAAO,KAqBN;EAEZ,CAAC;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"segmented-toggle.js","names":[],"sources":["../../../../src/components/features/files-tab/segmented-toggle.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"#/utils/utils\";\n\ninterface SegmentedToggleOption<T extends string> {\n value: T;\n label: string;\n icon?: ReactNode;\n}\n\ninterface SegmentedToggleProps<T extends string> {\n value: T;\n options: SegmentedToggleOption<T>[];\n onChange: (value: T) => void;\n ariaLabel: string;\n testId?: string;\n className?: string;\n /** Stretch the control and give each option an equal share of the width. */\n equalWidth?: boolean;\n}\n\n/**\n * Lightweight 2-state segmented control used for the files-tab toggles\n * (\"Rich\"/\"Plain\") and a few other compact two-way choices.\n */\nexport function SegmentedToggle<T extends string>({\n value,\n options,\n onChange,\n ariaLabel,\n testId,\n className,\n equalWidth = false,\n}: SegmentedToggleProps<T>) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n data-testid={testId}\n className={cn(\n equalWidth ? \"flex w-full\" : \"inline-flex\",\n \"items-center rounded-md bg-[var(--oh-surface-raised)] p-0.5 text-xs\",\n className,\n )}\n >\n {options.map((option) => {\n const isActive = option.value === value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n data-testid={\n testId ? `${testId}-option-${option.value}` : undefined\n }\n onClick={() => onChange(option.value)}\n className={cn(\n \"inline-flex items-center gap-1.5 px-2 py-0.5 rounded cursor-pointer transition-colors\",\n equalWidth && \"flex-1 justify-center text-center\",\n isActive\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"text-[var(--oh-muted)] hover:text-white\",\n )}\n >\n {option.icon}\n {option.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;AAwBA,SAAgB,EAAkC,EAChD,UACA,YACA,aACA,cACA,WACA,cACA,gBAAa,MACa;CAC1B,OACE,kBAAC,OAAD;EACE,MAAK;EACL,cAAY;EACZ,eAAa;EACb,WAAW,EACT,IAAa,gBAAgB,eAC7B,uEACA,CACF;YAEC,EAAQ,KAAK,MAAW;GACvB,IAAM,IAAW,EAAO,UAAU;GAClC,OACE,kBAAC,UAAD;IAEE,MAAK;IACL,MAAK;IACL,gBAAc;IACd,eACE,IAAS,GAAG,EAAO,UAAU,EAAO,UAAU,KAAA;IAEhD,eAAe,EAAS,EAAO,KAAK;IACpC,WAAW,EACT,yFACA,KAAc,qCACd,IACI,gDACA,yCACN;cAfF,CAiBG,EAAO,MACP,EAAO,KACF;MAlBD,EAAO,KAkBN;EAEZ,CAAC;CACE,CAAA;AAET"}
@@ -1,2 +1,2 @@
1
- require("../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../utils/utils.cjs"),t=require("../../../icons/file.cjs"),n=require("../../../icons/folder.cjs");let r=require("react"),i=require("react/jsx-runtime");function a({node:o,depth:s,selectedPath:c,onSelectFile:l}){let[u,d]=(0,r.useState)(!1),f=8+s*12;if(o.isDirectory)return(0,i.jsxs)(`li`,{children:[(0,i.jsxs)(`button`,{type:`button`,onClick:()=>d(e=>!e),"aria-expanded":u,"data-testid":`file-tree-dir-${o.path}`,className:e.cn(`flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm text-white`,`hover:bg-tertiary cursor-pointer`),style:{paddingLeft:`${f}px`},children:[(0,i.jsx)(`span`,{"aria-hidden":!0,className:e.cn(`inline-block w-3 text-[10px] text-[var(--oh-muted)] transition-transform`,u?`rotate-90`:`rotate-0`),children:`▶`}),(0,i.jsx)(n.default,{className:`w-3.5 h-3.5 shrink-0`}),(0,i.jsx)(`span`,{className:`truncate`,children:o.name})]}),u&&o.children.length>0&&(0,i.jsx)(`ul`,{children:o.children.map(e=>(0,i.jsx)(a,{node:e,depth:s+1,selectedPath:c,onSelectFile:l},e.path))})]});let p=c===o.path;return(0,i.jsx)(`li`,{children:(0,i.jsxs)(`button`,{type:`button`,onClick:()=>l(o.path),"data-testid":`file-tree-file-${o.path}`,className:e.cn(`flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm`,`hover:bg-tertiary cursor-pointer`,p?`bg-[var(--oh-interactive-hover)] text-white`:`text-[var(--oh-text-tertiary)]`),style:{paddingLeft:`${f+16}px`},children:[(0,i.jsx)(t.default,{className:`w-3.5 h-3.5 shrink-0`}),(0,i.jsx)(`span`,{className:`truncate`,children:o.name})]})})}exports.TreeNode=a;
1
+ require("../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../node_modules/lucide-react/dist/esm/icons/chevron-down.cjs"),t=require("../../../node_modules/lucide-react/dist/esm/icons/chevron-right.cjs"),n=require("../../../utils/utils.cjs"),r=require("../../../icons/file.cjs"),i=require("../../../icons/folder.cjs");let a=require("react"),o=require("react/jsx-runtime");function s({node:c,depth:l,selectedPath:u,onSelectFile:d}){let[f,p]=(0,a.useState)(!1),m=8+l*12;if(c.isDirectory)return(0,o.jsxs)(`li`,{children:[(0,o.jsxs)(`button`,{type:`button`,onClick:()=>p(e=>!e),"aria-expanded":f,"data-testid":`file-tree-dir-${c.path}`,className:n.cn(`flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm text-white`,`hover:bg-tertiary cursor-pointer`),style:{paddingLeft:`${m}px`},children:[(0,o.jsx)(`span`,{"aria-hidden":!0,className:`inline-flex w-3.5 shrink-0 items-center justify-center text-[var(--oh-muted)]`,children:f?(0,o.jsx)(e.ChevronDown,{className:`w-3.5 h-3.5`}):(0,o.jsx)(t.ChevronRight,{className:`w-3.5 h-3.5`})}),(0,o.jsx)(i.default,{className:`w-3.5 h-3.5 shrink-0`}),(0,o.jsx)(`span`,{className:`truncate`,children:c.name})]}),f&&c.children.length>0&&(0,o.jsx)(`ul`,{children:c.children.map(e=>(0,o.jsx)(s,{node:e,depth:l+1,selectedPath:u,onSelectFile:d},e.path))})]});let h=u===c.path;return(0,o.jsx)(`li`,{children:(0,o.jsxs)(`button`,{type:`button`,onClick:()=>d(c.path),"data-testid":`file-tree-file-${c.path}`,className:n.cn(`flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm`,`hover:bg-tertiary cursor-pointer`,h?`bg-[var(--oh-interactive-hover)] text-white`:`text-[var(--oh-text-tertiary)]`),style:{paddingLeft:`${m+16}px`},children:[(0,o.jsx)(r.default,{className:`w-3.5 h-3.5 shrink-0`}),(0,o.jsx)(`span`,{className:`truncate`,children:c.name})]})})}exports.TreeNode=s;
2
2
  //# sourceMappingURL=tree-node.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-node.cjs","names":[],"sources":["../../../../src/components/features/files-tab/tree-node.tsx"],"sourcesContent":["import { useState } from \"react\";\n\nimport FileIcon from \"#/icons/file.svg?react\";\nimport FolderIcon from \"#/icons/folder.svg?react\";\nimport { FileTreeNode } from \"#/utils/file-tree\";\nimport { cn } from \"#/utils/utils\";\n\ninterface TreeNodeProps {\n node: FileTreeNode;\n depth: number;\n selectedPath: string | null;\n onSelectFile: (path: string) => void;\n}\n\nexport function TreeNode({\n node,\n depth,\n selectedPath,\n onSelectFile,\n}: TreeNodeProps) {\n const [isOpen, setIsOpen] = useState(false);\n const indentPx = 8 + depth * 12;\n\n if (node.isDirectory) {\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => setIsOpen((prev) => !prev)}\n aria-expanded={isOpen}\n data-testid={`file-tree-dir-${node.path}`}\n className={cn(\n \"flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm text-white\",\n \"hover:bg-tertiary cursor-pointer\",\n )}\n // per-row indentation computed from tree depth at runtime\n style={{ paddingLeft: `${indentPx}px` }}\n >\n <span\n aria-hidden\n className={cn(\n \"inline-block w-3 text-[10px] text-[var(--oh-muted)] transition-transform\",\n isOpen ? \"rotate-90\" : \"rotate-0\",\n )}\n >\n ▶\n </span>\n <FolderIcon className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{node.name}</span>\n </button>\n {isOpen && node.children.length > 0 && (\n <ul>\n {node.children.map((child) => (\n <TreeNode\n key={child.path}\n node={child}\n depth={depth + 1}\n selectedPath={selectedPath}\n onSelectFile={onSelectFile}\n />\n ))}\n </ul>\n )}\n </li>\n );\n }\n\n const isSelected = selectedPath === node.path;\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => onSelectFile(node.path)}\n data-testid={`file-tree-file-${node.path}`}\n className={cn(\n \"flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm\",\n \"hover:bg-tertiary cursor-pointer\",\n isSelected\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"text-[var(--oh-text-tertiary)]\",\n )}\n // per-row indentation computed from tree depth at runtime\n style={{ paddingLeft: `${indentPx + 16}px` }}\n >\n <FileIcon className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{node.name}</span>\n </button>\n </li>\n );\n}\n"],"mappings":"iOAcA,SAAgB,EAAS,CACvB,OACA,QACA,eACA,gBACgB,CAChB,GAAM,CAAC,EAAQ,IAAA,EAAA,EAAA,UAAsB,EAAK,EACpC,EAAW,EAAI,EAAQ,GAE7B,GAAI,EAAK,YACP,OACE,EAAA,EAAA,MAAC,KAAD,CAAA,SAAA,EACE,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,YAAe,EAAW,GAAS,CAAC,CAAI,EACxC,gBAAe,EACf,cAAa,iBAAiB,EAAK,OACnC,UAAW,EAAA,GACT,0EACA,kCACF,EAEA,MAAO,CAAE,YAAa,GAAG,EAAS,GAAI,WAVxC,EAYE,EAAA,EAAA,KAAC,OAAD,CACE,cAAA,GACA,UAAW,EAAA,GACT,2EACA,EAAS,YAAc,UACzB,WACD,GAEK,CAAA,GACN,EAAA,EAAA,KAAC,EAAA,QAAD,CAAY,UAAU,sBAAwB,CAAA,GAC9C,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAK,IAAW,CAAA,CACtC,IACP,GAAU,EAAK,SAAS,OAAS,IAChC,EAAA,EAAA,KAAC,KAAD,CAAA,SACG,EAAK,SAAS,IAAK,IAClB,EAAA,EAAA,KAAC,EAAD,CAEE,KAAM,EACN,MAAO,EAAQ,EACD,eACA,cACf,EALM,EAAM,IAKZ,CACF,CACC,CAAA,CAEJ,CAAA,CAAA,EAIR,IAAM,EAAa,IAAiB,EAAK,KACzC,OACE,EAAA,EAAA,KAAC,KAAD,CAAA,UACE,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,YAAe,EAAa,EAAK,IAAI,EACrC,cAAa,kBAAkB,EAAK,OACpC,UAAW,EAAA,GACT,+DACA,mCACA,EACI,8CACA,gCACN,EAEA,MAAO,CAAE,YAAa,GAAG,EAAW,GAAG,GAAI,WAZ7C,EAcE,EAAA,EAAA,KAAC,EAAA,QAAD,CAAU,UAAU,sBAAwB,CAAA,GAC5C,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAK,IAAW,CAAA,CACtC,GACN,CAAA,CAER"}
1
+ {"version":3,"file":"tree-node.cjs","names":[],"sources":["../../../../src/components/features/files-tab/tree-node.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\n\nimport FileIcon from \"#/icons/file.svg?react\";\nimport FolderIcon from \"#/icons/folder.svg?react\";\nimport { FileTreeNode } from \"#/utils/file-tree\";\nimport { cn } from \"#/utils/utils\";\n\ninterface TreeNodeProps {\n node: FileTreeNode;\n depth: number;\n selectedPath: string | null;\n onSelectFile: (path: string) => void;\n}\n\nexport function TreeNode({\n node,\n depth,\n selectedPath,\n onSelectFile,\n}: TreeNodeProps) {\n const [isOpen, setIsOpen] = useState(false);\n const indentPx = 8 + depth * 12;\n\n if (node.isDirectory) {\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => setIsOpen((prev) => !prev)}\n aria-expanded={isOpen}\n data-testid={`file-tree-dir-${node.path}`}\n className={cn(\n \"flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm text-white\",\n \"hover:bg-tertiary cursor-pointer\",\n )}\n // per-row indentation computed from tree depth at runtime\n style={{ paddingLeft: `${indentPx}px` }}\n >\n <span\n aria-hidden\n className=\"inline-flex w-3.5 shrink-0 items-center justify-center text-[var(--oh-muted)]\"\n >\n {isOpen ? (\n <ChevronDown className=\"w-3.5 h-3.5\" />\n ) : (\n <ChevronRight className=\"w-3.5 h-3.5\" />\n )}\n </span>\n <FolderIcon className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{node.name}</span>\n </button>\n {isOpen && node.children.length > 0 && (\n <ul>\n {node.children.map((child) => (\n <TreeNode\n key={child.path}\n node={child}\n depth={depth + 1}\n selectedPath={selectedPath}\n onSelectFile={onSelectFile}\n />\n ))}\n </ul>\n )}\n </li>\n );\n }\n\n const isSelected = selectedPath === node.path;\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => onSelectFile(node.path)}\n data-testid={`file-tree-file-${node.path}`}\n className={cn(\n \"flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm\",\n \"hover:bg-tertiary cursor-pointer\",\n isSelected\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"text-[var(--oh-text-tertiary)]\",\n )}\n // per-row indentation computed from tree depth at runtime\n style={{ paddingLeft: `${indentPx + 16}px` }}\n >\n <FileIcon className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{node.name}</span>\n </button>\n </li>\n );\n}\n"],"mappings":"kYAeA,SAAgB,EAAS,CACvB,OACA,QACA,eACA,gBACgB,CAChB,GAAM,CAAC,EAAQ,IAAA,EAAA,EAAA,UAAsB,EAAK,EACpC,EAAW,EAAI,EAAQ,GAE7B,GAAI,EAAK,YACP,OACE,EAAA,EAAA,MAAC,KAAD,CAAA,SAAA,EACE,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,YAAe,EAAW,GAAS,CAAC,CAAI,EACxC,gBAAe,EACf,cAAa,iBAAiB,EAAK,OACnC,UAAW,EAAA,GACT,0EACA,kCACF,EAEA,MAAO,CAAE,YAAa,GAAG,EAAS,GAAI,WAVxC,EAYE,EAAA,EAAA,KAAC,OAAD,CACE,cAAA,GACA,UAAU,yFAET,GACC,EAAA,EAAA,KAAC,EAAA,YAAD,CAAa,UAAU,aAAe,CAAA,GAEtC,EAAA,EAAA,KAAC,EAAA,aAAD,CAAc,UAAU,aAAe,CAAA,CAErC,CAAA,GACN,EAAA,EAAA,KAAC,EAAA,QAAD,CAAY,UAAU,sBAAwB,CAAA,GAC9C,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAK,IAAW,CAAA,CACtC,IACP,GAAU,EAAK,SAAS,OAAS,IAChC,EAAA,EAAA,KAAC,KAAD,CAAA,SACG,EAAK,SAAS,IAAK,IAClB,EAAA,EAAA,KAAC,EAAD,CAEE,KAAM,EACN,MAAO,EAAQ,EACD,eACA,cACf,EALM,EAAM,IAKZ,CACF,CACC,CAAA,CAEJ,CAAA,CAAA,EAIR,IAAM,EAAa,IAAiB,EAAK,KACzC,OACE,EAAA,EAAA,KAAC,KAAD,CAAA,UACE,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,YAAe,EAAa,EAAK,IAAI,EACrC,cAAa,kBAAkB,EAAK,OACpC,UAAW,EAAA,GACT,+DACA,mCACA,EACI,8CACA,gCACN,EAEA,MAAO,CAAE,YAAa,GAAG,EAAW,GAAG,GAAI,WAZ7C,EAcE,EAAA,EAAA,KAAC,EAAA,QAAD,CAAU,UAAU,sBAAwB,CAAA,GAC5C,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAK,IAAW,CAAA,CACtC,GACN,CAAA,CAER"}
@@ -1,50 +1,52 @@
1
- import { cn as e } from "../../../utils/utils.js";
2
- import t from "../../../icons/file.js";
3
- import n from "../../../icons/folder.js";
4
- import { useState as r } from "react";
5
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
1
+ import { ChevronDown as e } from "../../../node_modules/lucide-react/dist/esm/icons/chevron-down.js";
2
+ import { ChevronRight as t } from "../../../node_modules/lucide-react/dist/esm/icons/chevron-right.js";
3
+ import { cn as n } from "../../../utils/utils.js";
4
+ import r from "../../../icons/file.js";
5
+ import i from "../../../icons/folder.js";
6
+ import { useState as a } from "react";
7
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
8
  //#region src/components/features/files-tab/tree-node.tsx
7
- function o({ node: s, depth: c, selectedPath: l, onSelectFile: u }) {
8
- let [d, f] = r(!1), p = 8 + c * 12;
9
- if (s.isDirectory) return /* @__PURE__ */ a("li", { children: [/* @__PURE__ */ a("button", {
9
+ function c({ node: l, depth: u, selectedPath: d, onSelectFile: f }) {
10
+ let [p, m] = a(!1), h = 8 + u * 12;
11
+ if (l.isDirectory) return /* @__PURE__ */ s("li", { children: [/* @__PURE__ */ s("button", {
10
12
  type: "button",
11
- onClick: () => f((e) => !e),
12
- "aria-expanded": d,
13
- "data-testid": `file-tree-dir-${s.path}`,
14
- className: e("flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm text-white", "hover:bg-tertiary cursor-pointer"),
15
- style: { paddingLeft: `${p}px` },
13
+ onClick: () => m((e) => !e),
14
+ "aria-expanded": p,
15
+ "data-testid": `file-tree-dir-${l.path}`,
16
+ className: n("flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm text-white", "hover:bg-tertiary cursor-pointer"),
17
+ style: { paddingLeft: `${h}px` },
16
18
  children: [
17
- /* @__PURE__ */ i("span", {
19
+ /* @__PURE__ */ o("span", {
18
20
  "aria-hidden": !0,
19
- className: e("inline-block w-3 text-[10px] text-[var(--oh-muted)] transition-transform", d ? "rotate-90" : "rotate-0"),
20
- children: ""
21
+ className: "inline-flex w-3.5 shrink-0 items-center justify-center text-[var(--oh-muted)]",
22
+ children: o(p ? e : t, { className: "w-3.5 h-3.5" })
21
23
  }),
22
- /* @__PURE__ */ i(n, { className: "w-3.5 h-3.5 shrink-0" }),
23
- /* @__PURE__ */ i("span", {
24
+ /* @__PURE__ */ o(i, { className: "w-3.5 h-3.5 shrink-0" }),
25
+ /* @__PURE__ */ o("span", {
24
26
  className: "truncate",
25
- children: s.name
27
+ children: l.name
26
28
  })
27
29
  ]
28
- }), d && s.children.length > 0 && /* @__PURE__ */ i("ul", { children: s.children.map((e) => /* @__PURE__ */ i(o, {
30
+ }), p && l.children.length > 0 && /* @__PURE__ */ o("ul", { children: l.children.map((e) => /* @__PURE__ */ o(c, {
29
31
  node: e,
30
- depth: c + 1,
31
- selectedPath: l,
32
- onSelectFile: u
32
+ depth: u + 1,
33
+ selectedPath: d,
34
+ onSelectFile: f
33
35
  }, e.path)) })] });
34
- let m = l === s.path;
35
- return /* @__PURE__ */ i("li", { children: /* @__PURE__ */ a("button", {
36
+ let g = d === l.path;
37
+ return /* @__PURE__ */ o("li", { children: /* @__PURE__ */ s("button", {
36
38
  type: "button",
37
- onClick: () => u(s.path),
38
- "data-testid": `file-tree-file-${s.path}`,
39
- className: e("flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm", "hover:bg-tertiary cursor-pointer", m ? "bg-[var(--oh-interactive-hover)] text-white" : "text-[var(--oh-text-tertiary)]"),
40
- style: { paddingLeft: `${p + 16}px` },
41
- children: [/* @__PURE__ */ i(t, { className: "w-3.5 h-3.5 shrink-0" }), /* @__PURE__ */ i("span", {
39
+ onClick: () => f(l.path),
40
+ "data-testid": `file-tree-file-${l.path}`,
41
+ className: n("flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm", "hover:bg-tertiary cursor-pointer", g ? "bg-[var(--oh-interactive-hover)] text-white" : "text-[var(--oh-text-tertiary)]"),
42
+ style: { paddingLeft: `${h + 16}px` },
43
+ children: [/* @__PURE__ */ o(r, { className: "w-3.5 h-3.5 shrink-0" }), /* @__PURE__ */ o("span", {
42
44
  className: "truncate",
43
- children: s.name
45
+ children: l.name
44
46
  })]
45
47
  }) });
46
48
  }
47
49
  //#endregion
48
- export { o as TreeNode };
50
+ export { c as TreeNode };
49
51
 
50
52
  //# sourceMappingURL=tree-node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-node.js","names":[],"sources":["../../../../src/components/features/files-tab/tree-node.tsx"],"sourcesContent":["import { useState } from \"react\";\n\nimport FileIcon from \"#/icons/file.svg?react\";\nimport FolderIcon from \"#/icons/folder.svg?react\";\nimport { FileTreeNode } from \"#/utils/file-tree\";\nimport { cn } from \"#/utils/utils\";\n\ninterface TreeNodeProps {\n node: FileTreeNode;\n depth: number;\n selectedPath: string | null;\n onSelectFile: (path: string) => void;\n}\n\nexport function TreeNode({\n node,\n depth,\n selectedPath,\n onSelectFile,\n}: TreeNodeProps) {\n const [isOpen, setIsOpen] = useState(false);\n const indentPx = 8 + depth * 12;\n\n if (node.isDirectory) {\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => setIsOpen((prev) => !prev)}\n aria-expanded={isOpen}\n data-testid={`file-tree-dir-${node.path}`}\n className={cn(\n \"flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm text-white\",\n \"hover:bg-tertiary cursor-pointer\",\n )}\n // per-row indentation computed from tree depth at runtime\n style={{ paddingLeft: `${indentPx}px` }}\n >\n <span\n aria-hidden\n className={cn(\n \"inline-block w-3 text-[10px] text-[var(--oh-muted)] transition-transform\",\n isOpen ? \"rotate-90\" : \"rotate-0\",\n )}\n >\n ▶\n </span>\n <FolderIcon className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{node.name}</span>\n </button>\n {isOpen && node.children.length > 0 && (\n <ul>\n {node.children.map((child) => (\n <TreeNode\n key={child.path}\n node={child}\n depth={depth + 1}\n selectedPath={selectedPath}\n onSelectFile={onSelectFile}\n />\n ))}\n </ul>\n )}\n </li>\n );\n }\n\n const isSelected = selectedPath === node.path;\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => onSelectFile(node.path)}\n data-testid={`file-tree-file-${node.path}`}\n className={cn(\n \"flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm\",\n \"hover:bg-tertiary cursor-pointer\",\n isSelected\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"text-[var(--oh-text-tertiary)]\",\n )}\n // per-row indentation computed from tree depth at runtime\n style={{ paddingLeft: `${indentPx + 16}px` }}\n >\n <FileIcon className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{node.name}</span>\n </button>\n </li>\n );\n}\n"],"mappings":";;;;;;AAcA,SAAgB,EAAS,EACvB,SACA,UACA,iBACA,mBACgB;CAChB,IAAM,CAAC,GAAQ,KAAa,EAAS,EAAK,GACpC,IAAW,IAAI,IAAQ;CAE7B,IAAI,EAAK,aACP,OACE,kBAAC,MAAD,EAAA,UAAA,CACE,kBAAC,UAAD;EACE,MAAK;EACL,eAAe,GAAW,MAAS,CAAC,CAAI;EACxC,iBAAe;EACf,eAAa,iBAAiB,EAAK;EACnC,WAAW,EACT,2EACA,kCACF;EAEA,OAAO,EAAE,aAAa,GAAG,EAAS,IAAI;YAVxC;GAYE,kBAAC,QAAD;IACE,eAAA;IACA,WAAW,EACT,4EACA,IAAS,cAAc,UACzB;cACD;GAEK,CAAA;GACN,kBAAC,GAAD,EAAY,WAAU,uBAAwB,CAAA;GAC9C,kBAAC,QAAD;IAAM,WAAU;cAAY,EAAK;GAAW,CAAA;EACtC;KACP,KAAU,EAAK,SAAS,SAAS,KAChC,kBAAC,MAAD,EAAA,UACG,EAAK,SAAS,KAAK,MAClB,kBAAC,GAAD;EAEE,MAAM;EACN,OAAO,IAAQ;EACD;EACA;CACf,GALM,EAAM,IAKZ,CACF,EACC,CAAA,CAEJ,EAAA,CAAA;CAIR,IAAM,IAAa,MAAiB,EAAK;CACzC,OACE,kBAAC,MAAD,EAAA,UACE,kBAAC,UAAD;EACE,MAAK;EACL,eAAe,EAAa,EAAK,IAAI;EACrC,eAAa,kBAAkB,EAAK;EACpC,WAAW,EACT,gEACA,oCACA,IACI,gDACA,gCACN;EAEA,OAAO,EAAE,aAAa,GAAG,IAAW,GAAG,IAAI;YAZ7C,CAcE,kBAAC,GAAD,EAAU,WAAU,uBAAwB,CAAA,GAC5C,kBAAC,QAAD;GAAM,WAAU;aAAY,EAAK;EAAW,CAAA,CACtC;IACN,CAAA;AAER"}
1
+ {"version":3,"file":"tree-node.js","names":[],"sources":["../../../../src/components/features/files-tab/tree-node.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\n\nimport FileIcon from \"#/icons/file.svg?react\";\nimport FolderIcon from \"#/icons/folder.svg?react\";\nimport { FileTreeNode } from \"#/utils/file-tree\";\nimport { cn } from \"#/utils/utils\";\n\ninterface TreeNodeProps {\n node: FileTreeNode;\n depth: number;\n selectedPath: string | null;\n onSelectFile: (path: string) => void;\n}\n\nexport function TreeNode({\n node,\n depth,\n selectedPath,\n onSelectFile,\n}: TreeNodeProps) {\n const [isOpen, setIsOpen] = useState(false);\n const indentPx = 8 + depth * 12;\n\n if (node.isDirectory) {\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => setIsOpen((prev) => !prev)}\n aria-expanded={isOpen}\n data-testid={`file-tree-dir-${node.path}`}\n className={cn(\n \"flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm text-white\",\n \"hover:bg-tertiary cursor-pointer\",\n )}\n // per-row indentation computed from tree depth at runtime\n style={{ paddingLeft: `${indentPx}px` }}\n >\n <span\n aria-hidden\n className=\"inline-flex w-3.5 shrink-0 items-center justify-center text-[var(--oh-muted)]\"\n >\n {isOpen ? (\n <ChevronDown className=\"w-3.5 h-3.5\" />\n ) : (\n <ChevronRight className=\"w-3.5 h-3.5\" />\n )}\n </span>\n <FolderIcon className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{node.name}</span>\n </button>\n {isOpen && node.children.length > 0 && (\n <ul>\n {node.children.map((child) => (\n <TreeNode\n key={child.path}\n node={child}\n depth={depth + 1}\n selectedPath={selectedPath}\n onSelectFile={onSelectFile}\n />\n ))}\n </ul>\n )}\n </li>\n );\n }\n\n const isSelected = selectedPath === node.path;\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => onSelectFile(node.path)}\n data-testid={`file-tree-file-${node.path}`}\n className={cn(\n \"flex w-full items-center gap-1.5 py-1 pr-2 text-left text-sm\",\n \"hover:bg-tertiary cursor-pointer\",\n isSelected\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"text-[var(--oh-text-tertiary)]\",\n )}\n // per-row indentation computed from tree depth at runtime\n style={{ paddingLeft: `${indentPx + 16}px` }}\n >\n <FileIcon className=\"w-3.5 h-3.5 shrink-0\" />\n <span className=\"truncate\">{node.name}</span>\n </button>\n </li>\n );\n}\n"],"mappings":";;;;;;;;AAeA,SAAgB,EAAS,EACvB,SACA,UACA,iBACA,mBACgB;CAChB,IAAM,CAAC,GAAQ,KAAa,EAAS,EAAK,GACpC,IAAW,IAAI,IAAQ;CAE7B,IAAI,EAAK,aACP,OACE,kBAAC,MAAD,EAAA,UAAA,CACE,kBAAC,UAAD;EACE,MAAK;EACL,eAAe,GAAW,MAAS,CAAC,CAAI;EACxC,iBAAe;EACf,eAAa,iBAAiB,EAAK;EACnC,WAAW,EACT,2EACA,kCACF;EAEA,OAAO,EAAE,aAAa,GAAG,EAAS,IAAI;YAVxC;GAYE,kBAAC,QAAD;IACE,eAAA;IACA,WAAU;cAGR,EADD,IACE,IAEA,GAFD,EAAa,WAAU,cAAe,CAEC;GAErC,CAAA;GACN,kBAAC,GAAD,EAAY,WAAU,uBAAwB,CAAA;GAC9C,kBAAC,QAAD;IAAM,WAAU;cAAY,EAAK;GAAW,CAAA;EACtC;KACP,KAAU,EAAK,SAAS,SAAS,KAChC,kBAAC,MAAD,EAAA,UACG,EAAK,SAAS,KAAK,MAClB,kBAAC,GAAD;EAEE,MAAM;EACN,OAAO,IAAQ;EACD;EACA;CACf,GALM,EAAM,IAKZ,CACF,EACC,CAAA,CAEJ,EAAA,CAAA;CAIR,IAAM,IAAa,MAAiB,EAAK;CACzC,OACE,kBAAC,MAAD,EAAA,UACE,kBAAC,UAAD;EACE,MAAK;EACL,eAAe,EAAa,EAAK,IAAI;EACrC,eAAa,kBAAkB,EAAK;EACpC,WAAW,EACT,gEACA,oCACA,IACI,gDACA,gCACN;EAEA,OAAO,EAAE,aAAa,GAAG,IAAW,GAAG,IAAI;YAZ7C,CAcE,kBAAC,GAAD,EAAU,WAAU,uBAAwB,CAAA,GAC5C,kBAAC,QAAD;GAAM,WAAU;aAAY,EAAK;EAAW,CAAA,CACtC;IACN,CAAA;AAER"}
@@ -0,0 +1,2 @@
1
+ const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../../../i18n/declaration.cjs"),r=require("../../shared/buttons/copy-to-clipboard-button.cjs");let i=require("react");i=e.__toESM(i,1);let a=require("react/jsx-runtime");function o({path:e}){let{t:o}=t.useTranslation(`openhands`),[s,c]=i.default.useState(!1),l=e?.trim();return i.default.useEffect(()=>{if(!s)return;let e=window.setTimeout(()=>c(!1),2e3);return()=>window.clearTimeout(e)},[s]),l?(0,a.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 border-b border-[var(--oh-border)] px-3 py-1.5 text-xs`,"data-testid":`files-tab-workspace-path`,children:[(0,a.jsxs)(`span`,{className:`shrink-0 text-[var(--oh-muted)]`,children:[o(n.I18nKey.WORKSPACE$TITLE),`:`]}),(0,a.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono`,"data-testid":`files-tab-workspace-path-value`,title:l,children:l}),(0,a.jsx)(r.CopyToClipboardButton,{isHidden:!1,isDisabled:s,onClick:async()=>{await navigator.clipboard.writeText(l),c(!0)},mode:s?`copied`:`copy`})]}):null}exports.WorkspacePath=o;
2
+ //# sourceMappingURL=workspace-path.cjs.map