@openhands/agent-canvas 1.14.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 (1590) 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/get-git-path-DlAJa_i6.js +1 -0
  64. package/build/assets/git-repo-dropdown-DGMEhz7d.js +1 -0
  65. package/build/assets/git-repo-dropdown-ai8qaNkD.js +1 -0
  66. package/build/assets/highlighted-source-view-C3sxykQi.js +1 -0
  67. package/build/assets/home-BCGlNJCA.js +1 -0
  68. package/build/assets/home-DB1pRqTC.js +1 -0
  69. package/build/assets/home-automation-run-tooltip-CooFQRIG.js +1 -0
  70. package/build/assets/home-store-Dl1dPE58.js +1 -0
  71. package/build/assets/index-home-DB1pRqTC.js +1 -0
  72. package/build/assets/info-uYSVzX86.js +1 -0
  73. package/build/assets/install-server-modal-BbJdhzet.js +1 -0
  74. package/build/assets/kebab-menu-item-content-BYokkRHi.js +1 -0
  75. package/build/assets/key-Cn5za3rg.js +1 -0
  76. package/build/assets/launch-C1ieiOGe.js +1 -0
  77. package/build/assets/list-filter-OFkpRrmi.js +1 -0
  78. package/build/assets/list-todo-Cuu-STFc.js +1 -0
  79. package/build/assets/llm-not-configured-banner-BqqYnJ1t.js +27 -0
  80. package/build/assets/llm-settings-CnDbbmVW.js +1 -0
  81. package/build/assets/llm-settings-S8Yjg__1.js +1 -0
  82. package/build/assets/llm-subscription-service-BpPfzW4x.js +1 -0
  83. package/build/assets/loader-circle-nvrwthvj.js +1 -0
  84. package/build/assets/loading-spinner-0L3ZTToZ.js +1 -0
  85. package/build/assets/manage-backends-modal-BCUPswyl.js +1 -0
  86. package/build/assets/manifest-58597dde.js +1 -0
  87. package/build/assets/manifest-subpage-layout-BGhiUQbA.js +1 -0
  88. package/build/assets/map-provider-B9LTm23I.js +1 -0
  89. package/build/assets/markdown-renderer-Cb2sBWtV.js +8 -0
  90. package/build/assets/mcp-CKbR4Vft.js +1 -0
  91. package/build/assets/mcp-marketplace-utils-C13fFccR.js +1 -0
  92. package/build/assets/mcp-page-Bm4K2NQq.js +9 -0
  93. package/build/assets/messages-BTN5thLe.js +40 -0
  94. package/build/assets/modal-body-CMOc2tLl.js +1 -0
  95. package/build/assets/modal-classes-BAb4Y_BG.js +1 -0
  96. package/build/assets/modal-close-button-CkJ0Ktjj.js +1 -0
  97. package/build/assets/mouse-pointer-click-CsgRs_-r.js +1 -0
  98. package/build/assets/onboarding-Cx_kaiD1.js +1 -0
  99. package/build/assets/onboarding-modal-vMwn7ihv.js +1 -0
  100. package/build/assets/organization-service.api-C8XpQ0pM.js +1 -0
  101. package/build/assets/parse-git-remote-url-DpDM9bK6.js +1 -0
  102. package/build/assets/pencil-Clh1Wjvh.js +1 -0
  103. package/build/assets/planner-tab-DQvDU3ap.js +1 -0
  104. package/build/assets/plug-BuQhHSSG.js +1 -0
  105. package/build/assets/plugins-management-service-BjYeF0b0.js +1 -0
  106. package/build/assets/plus-CEKne-Yp.js +1 -0
  107. package/build/assets/profiles-service.api-QB-T_u-g.js +1 -0
  108. package/build/assets/providers-FfSZ5TXP.js +1 -0
  109. package/build/assets/proxy-tcFL2yTQ.js +1 -0
  110. package/build/assets/puzzle-A9pGxxai.js +1 -0
  111. package/build/assets/recommended-automations-launcher-Bw8uC4V6.js +1 -0
  112. package/build/assets/refresh-cw-Bh69DyYO.js +1 -0
  113. package/build/assets/root-BLeQfBEq.css +1 -0
  114. package/build/assets/root-ZKKYPR1Z.js +2 -0
  115. package/build/assets/root-layout-luJoE9IG.js +2 -0
  116. package/build/assets/schema-field-Csw5fhtN.js +1 -0
  117. package/build/assets/scroll-fade-state-Dw-i4SGq.js +1 -0
  118. package/build/assets/sdk-section-page-HTffvm7Q.js +1 -0
  119. package/build/assets/secret-form-HTUbYw5o.js +1 -0
  120. package/build/assets/secrets-service-BTor9uAU.js +1 -0
  121. package/build/assets/secrets-settings-BizaTEr1.js +1 -0
  122. package/build/assets/server-process-C9RKzd1x.js +1 -0
  123. package/build/assets/settings-BlmrkwRi.js +1 -0
  124. package/build/assets/settings-dropdown-input-tM0A0ipy.js +1 -0
  125. package/build/assets/settings-index-CKq0b0Vg.js +1 -0
  126. package/build/assets/settings-input-C03KUoSC.js +1 -0
  127. package/build/assets/settings-list-classes-BJ0g8rWj.js +1 -0
  128. package/build/assets/settings-modal-AzEF1QPP.js +1 -0
  129. package/build/assets/settings-service.api-B2agVfjL.js +1 -0
  130. package/build/assets/settings-switch-CQE0EGC-.js +1 -0
  131. package/build/assets/settings-utils-ClYOkbbI.js +1 -0
  132. package/build/assets/shared-conversation-B55pCyBG.js +1 -0
  133. package/build/assets/shield-check-CFDViW82.js +1 -0
  134. package/build/assets/sidebar-layout-D3hE08wK.js +1 -0
  135. package/build/assets/sidebar-mobile-menu-toggle-BOtyJHwE.js +1 -0
  136. package/build/assets/sidebar-nav-link-CPzhyHQg.js +1 -0
  137. package/build/assets/sidebar-onboarding-checklist-storage-3qYflszY.js +1 -0
  138. package/build/assets/sidebar-store-DtpU7zaI.js +1 -0
  139. package/build/assets/skill-card-pill-row-CFxjoqxn.js +1 -0
  140. package/build/assets/skill-filter-CWZ5kjcg.js +2 -0
  141. package/build/assets/skill-icon-badge-CPQJ6A-I.js +1 -0
  142. package/build/assets/skill-scope-CV1dkAbW.js +1 -0
  143. package/build/assets/skills-plugins-DGHULTq6.js +1 -0
  144. package/build/assets/skills-settings-CM1lFv3e.js +1 -0
  145. package/build/assets/styled-tooltip-Dl06rkpY.js +1 -0
  146. package/build/assets/task-list-tab-04GNQuii.js +1 -0
  147. package/build/assets/terminal-Cj0iHIW7.js +3 -0
  148. package/build/assets/toggle-switch-Fd_QGz0r.js +1 -0
  149. package/build/assets/trash-2-Dl8_RGz0.js +1 -0
  150. package/build/assets/trash-_RMt7Ayc.js +1 -0
  151. package/build/assets/triangle-alert-SM-q4NU_.js +1 -0
  152. package/build/assets/typography-SgFy466J.js +1 -0
  153. package/build/assets/usage-tab-BcfWV6db.js +1 -0
  154. package/build/assets/use-acp-credential-form-BsSW5NHG.js +1 -0
  155. package/build/assets/use-activate-agent-profile-B2NS8nA5.js +1 -0
  156. package/build/assets/use-agent-profiles-DWBPC0Si.js +1 -0
  157. package/build/assets/use-automation-health-BxXdzZMP.js +1 -0
  158. package/build/assets/use-automations-zYb0dUny.js +1 -0
  159. package/build/assets/use-can-manage-org-profiles-BWMahtUh.js +1 -0
  160. package/build/assets/use-cloud-current-user-id-CPHMDG-C.js +1 -0
  161. package/build/assets/use-config-Bft35DOK.js +1 -0
  162. package/build/assets/use-create-conversation-DwN5vv2f.js +1 -0
  163. package/build/assets/use-create-secret-BSxJMxHp.js +1 -0
  164. package/build/assets/use-get-secrets-BT4ihRwj.js +1 -0
  165. package/build/assets/use-has-permission-B3C8rQmR.js +1 -0
  166. package/build/assets/use-is-authed-CFGkY3-Z.js +1 -0
  167. package/build/assets/use-launch-skill-in-chat-BYjYihBP.js +1 -0
  168. package/build/assets/use-llm-configured-BI6obxsc.js +1 -0
  169. package/build/assets/use-llm-profiles-djGAhTWL.js +1 -0
  170. package/build/assets/use-manifest-capabilities-3z0-1G59.js +1 -0
  171. package/build/assets/use-onboarding-completion-BXpyUSsJ.js +1 -0
  172. package/build/assets/use-plugins-marketplace-DI4_pK56.js +1 -0
  173. package/build/assets/use-save-agent-profile-DdBSTdpN.js +1 -0
  174. package/build/assets/use-save-settings-CUZW6yXP.js +1 -0
  175. package/build/assets/use-settings-C5VhGpqd.js +1 -0
  176. package/build/assets/use-settings-nav-items-DHaUu1Dg.js +16 -0
  177. package/build/assets/use-tracking-D5t9otIF.js +3 -0
  178. package/build/assets/use-user-conversation-DT0_QCnL.js +1 -0
  179. package/build/assets/useInfiniteQuery-CgeUQPfs.js +1 -0
  180. package/build/assets/useMutation-DFnzkf6f.js +1 -0
  181. package/build/assets/useQueries-BhbrGEf1.js +1 -0
  182. package/build/assets/useQuery-BXWbZBZl.js +1 -0
  183. package/build/assets/utils-DaCIEEQP.js +1 -0
  184. package/build/assets/vendor~browser-hbU4u2Ag.js +47 -0
  185. package/build/assets/vendor~commits-tab-BaO2Ce3e.js +11 -0
  186. package/build/assets/vendor~conversation-panel~conversation-CTvDDiXg.js +1 -0
  187. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-ZixYGy6E.js +186 -0
  188. package/build/assets/vendor~index-home~home~conversation-panel~conversation-BTyukeM-.js +13 -0
  189. package/build/assets/vendor~root-layout-BlUaZ18v.js +1 -0
  190. package/build/assets/vendor~root-layout~conversation-panel~conversation-BYAWJwQX.js +1 -0
  191. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-CHaLEBVR.js +1 -0
  192. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-B2OLKL7N.js +1 -0
  193. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-DXqM7vqB.js +1 -0
  194. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-Dtu7BpYk.js +48 -0
  195. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz-MAyNb.js +1 -0
  196. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-DonTKfQD.js +4949 -0
  197. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-BgxDvUcf.js +8420 -0
  198. package/build/assets/verification-settings-Bj6bo097.js +1 -0
  199. package/build/assets/wrench-hi7Q13dF.js +1 -0
  200. package/build/assets/x-DkgltWa0.js +1 -0
  201. package/build/index.html +4 -4
  202. package/build/locales/ar/openhands.json +124 -43
  203. package/build/locales/ca/openhands.json +124 -43
  204. package/build/locales/de/openhands.json +124 -43
  205. package/build/locales/en/openhands.json +124 -43
  206. package/build/locales/es/openhands.json +124 -43
  207. package/build/locales/fr/openhands.json +124 -43
  208. package/build/locales/it/openhands.json +124 -43
  209. package/build/locales/ja/openhands.json +124 -43
  210. package/build/locales/ko-KR/openhands.json +124 -43
  211. package/build/locales/no/openhands.json +124 -43
  212. package/build/locales/pt/openhands.json +124 -43
  213. package/build/locales/tr/openhands.json +124 -43
  214. package/build/locales/uk/openhands.json +124 -43
  215. package/build/locales/zh-CN/openhands.json +124 -43
  216. package/build/locales/zh-TW/openhands.json +124 -43
  217. package/config/defaults.json +2 -2
  218. package/dist/api/agent-server-adapter.cjs +3 -3
  219. package/dist/api/agent-server-adapter.cjs.map +1 -1
  220. package/dist/api/agent-server-adapter.d.ts +10 -1
  221. package/dist/api/agent-server-adapter.js +115 -110
  222. package/dist/api/agent-server-adapter.js.map +1 -1
  223. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  224. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  225. package/dist/api/automation-service/automation-service.api.d.ts +13 -2
  226. package/dist/api/automation-service/automation-service.api.js +99 -84
  227. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  228. package/dist/api/backend-registry/url-selection.cjs +1 -1
  229. package/dist/api/backend-registry/url-selection.cjs.map +1 -1
  230. package/dist/api/backend-registry/url-selection.d.ts +2 -1
  231. package/dist/api/backend-registry/url-selection.js +2 -2
  232. package/dist/api/backend-registry/url-selection.js.map +1 -1
  233. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  234. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  235. package/dist/api/conversation-service/agent-server-conversation-service.api.js +29 -24
  236. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  237. package/dist/api/git-provider-items-service.cjs +2 -0
  238. package/dist/api/git-provider-items-service.cjs.map +1 -0
  239. package/dist/api/git-provider-items-service.d.ts +25 -0
  240. package/dist/api/git-provider-items-service.js +127 -0
  241. package/dist/api/git-provider-items-service.js.map +1 -0
  242. package/dist/api/mcp-health/probe-mcp-server-health.cjs +1 -1
  243. package/dist/api/mcp-health/probe-mcp-server-health.js +31 -31
  244. package/dist/api/open-hands.types.d.ts +0 -19
  245. package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
  246. package/dist/api/profiles-service/profiles-service.api.d.ts +16 -2
  247. package/dist/api/profiles-service/profiles-service.api.js.map +1 -1
  248. package/dist/api/provider-connections-service/provider-connections-service.api.cjs +2 -0
  249. package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -0
  250. package/dist/api/provider-connections-service/provider-connections-service.api.d.ts +34 -0
  251. package/dist/api/provider-connections-service/provider-connections-service.api.js +50 -0
  252. package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -0
  253. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs +1 -1
  254. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs.map +1 -1
  255. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js +1 -1
  256. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js.map +1 -1
  257. package/dist/components/conversation-events/chat/event-message.cjs +1 -1
  258. package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
  259. package/dist/components/conversation-events/chat/event-message.js +1 -1
  260. package/dist/components/conversation-events/chat/event-message.js.map +1 -1
  261. package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
  262. package/dist/components/conversation-events/chat/messages.js.map +1 -1
  263. package/dist/components/features/automations/add-automation-menu.d.ts +7 -0
  264. package/dist/components/features/automations/add-automation-modal.cjs +2 -0
  265. package/dist/components/features/automations/add-automation-modal.cjs.map +1 -0
  266. package/dist/components/features/automations/add-automation-modal.js +42 -0
  267. package/dist/components/features/automations/add-automation-modal.js.map +1 -0
  268. package/dist/components/features/automations/automation-action-button-classes.cjs +2 -0
  269. package/dist/components/features/automations/automation-action-button-classes.cjs.map +1 -0
  270. package/dist/components/features/automations/automation-action-button-classes.d.ts +0 -2
  271. package/dist/components/features/automations/automation-action-button-classes.js +8 -0
  272. package/dist/components/features/automations/automation-action-button-classes.js.map +1 -0
  273. package/dist/components/features/automations/automation-card-skeleton.cjs +2 -0
  274. package/dist/components/features/automations/automation-card-skeleton.cjs.map +1 -0
  275. package/dist/components/features/automations/automation-card-skeleton.js +33 -0
  276. package/dist/components/features/automations/automation-card-skeleton.js.map +1 -0
  277. package/dist/components/features/automations/automation-card.cjs +2 -0
  278. package/dist/components/features/automations/automation-card.cjs.map +1 -0
  279. package/dist/components/features/automations/automation-card.d.ts +1 -1
  280. package/dist/components/features/automations/automation-card.js +160 -0
  281. package/dist/components/features/automations/automation-card.js.map +1 -0
  282. package/dist/components/features/automations/automation-group.cjs +2 -0
  283. package/dist/components/features/automations/automation-group.cjs.map +1 -0
  284. package/dist/components/features/automations/automation-group.js +54 -0
  285. package/dist/components/features/automations/automation-group.js.map +1 -0
  286. package/dist/components/features/automations/automation-list-row.cjs +2 -0
  287. package/dist/components/features/automations/automation-list-row.cjs.map +1 -0
  288. package/dist/components/features/automations/automation-list-row.js +152 -0
  289. package/dist/components/features/automations/automation-list-row.js.map +1 -0
  290. package/dist/components/features/automations/automation-run-insights.cjs +2 -0
  291. package/dist/components/features/automations/automation-run-insights.cjs.map +1 -0
  292. package/dist/components/features/automations/automation-run-insights.js +46 -0
  293. package/dist/components/features/automations/automation-run-insights.js.map +1 -0
  294. package/dist/components/features/automations/automation-view-mode.cjs +2 -0
  295. package/dist/components/features/automations/automation-view-mode.cjs.map +1 -0
  296. package/dist/components/features/automations/automation-view-mode.d.ts +5 -1
  297. package/dist/components/features/automations/automation-view-mode.js +6 -0
  298. package/dist/components/features/automations/automation-view-mode.js.map +1 -0
  299. package/dist/components/features/automations/backend-not-configured.cjs +2 -0
  300. package/dist/components/features/automations/backend-not-configured.cjs.map +1 -0
  301. package/dist/components/features/automations/backend-not-configured.js +34 -0
  302. package/dist/components/features/automations/backend-not-configured.js.map +1 -0
  303. package/dist/components/features/automations/build-automation-menu-items.cjs +2 -0
  304. package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -0
  305. package/dist/components/features/automations/build-automation-menu-items.js +53 -0
  306. package/dist/components/features/automations/build-automation-menu-items.js.map +1 -0
  307. package/dist/components/features/automations/build-automation-pills.cjs +2 -0
  308. package/dist/components/features/automations/build-automation-pills.cjs.map +1 -0
  309. package/dist/components/features/automations/build-automation-pills.js +71 -0
  310. package/dist/components/features/automations/build-automation-pills.js.map +1 -0
  311. package/dist/components/features/automations/create-instructions.cjs +2 -0
  312. package/dist/components/features/automations/create-instructions.cjs.map +1 -0
  313. package/dist/components/features/automations/create-instructions.js +102 -0
  314. package/dist/components/features/automations/create-instructions.js.map +1 -0
  315. package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +4 -3
  316. package/dist/components/features/automations/detail/run-status-badge.cjs +2 -0
  317. package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -0
  318. package/dist/components/features/automations/detail/run-status-badge.js +102 -0
  319. package/dist/components/features/automations/detail/run-status-badge.js.map +1 -0
  320. package/dist/components/features/automations/empty-state.cjs +2 -0
  321. package/dist/components/features/automations/empty-state.cjs.map +1 -0
  322. package/dist/components/features/automations/empty-state.js +35 -0
  323. package/dist/components/features/automations/empty-state.js.map +1 -0
  324. package/dist/components/features/automations/error-state.cjs +2 -0
  325. package/dist/components/features/automations/error-state.cjs.map +1 -0
  326. package/dist/components/features/automations/error-state.js +28 -0
  327. package/dist/components/features/automations/error-state.js.map +1 -0
  328. package/dist/components/features/automations/import-automation-modal.d.ts +2 -1
  329. package/dist/components/features/automations/kebab-menu-item-content.cjs +2 -0
  330. package/dist/components/features/automations/kebab-menu-item-content.cjs.map +1 -0
  331. package/dist/components/features/automations/kebab-menu-item-content.js +21 -0
  332. package/dist/components/features/automations/kebab-menu-item-content.js.map +1 -0
  333. package/dist/components/features/automations/kebab-menu.cjs +2 -0
  334. package/dist/components/features/automations/kebab-menu.cjs.map +1 -0
  335. package/dist/components/features/automations/kebab-menu.d.ts +2 -1
  336. package/dist/components/features/automations/kebab-menu.js +76 -0
  337. package/dist/components/features/automations/kebab-menu.js.map +1 -0
  338. package/dist/components/features/automations/recommended-automations-launcher.cjs +2 -0
  339. package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -0
  340. package/dist/components/features/automations/recommended-automations-launcher.d.ts +7 -1
  341. package/dist/components/features/automations/recommended-automations-launcher.js +134 -0
  342. package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -0
  343. package/dist/components/features/automations/recommended-automations-rail.cjs +2 -0
  344. package/dist/components/features/automations/recommended-automations-rail.cjs.map +1 -0
  345. package/dist/components/features/automations/recommended-automations-rail.d.ts +9 -0
  346. package/dist/components/features/automations/recommended-automations-rail.js +127 -0
  347. package/dist/components/features/automations/recommended-automations-rail.js.map +1 -0
  348. package/dist/components/features/automations/recommended-automations-section.cjs +2 -0
  349. package/dist/components/features/automations/recommended-automations-section.cjs.map +1 -0
  350. package/dist/components/features/automations/recommended-automations-section.d.ts +2 -2
  351. package/dist/components/features/automations/recommended-automations-section.js +198 -0
  352. package/dist/components/features/automations/recommended-automations-section.js.map +1 -0
  353. package/dist/components/features/automations/responder-deployment-modal.cjs +2 -0
  354. package/dist/components/features/automations/responder-deployment-modal.cjs.map +1 -0
  355. package/dist/components/features/automations/responder-deployment-modal.js +75 -0
  356. package/dist/components/features/automations/responder-deployment-modal.js.map +1 -0
  357. package/dist/components/features/automations/status-badge.cjs +2 -0
  358. package/dist/components/features/automations/status-badge.cjs.map +1 -0
  359. package/dist/components/features/automations/status-badge.js +12 -0
  360. package/dist/components/features/automations/status-badge.js.map +1 -0
  361. package/dist/components/features/automations/to-latest-run-state.cjs +2 -0
  362. package/dist/components/features/automations/to-latest-run-state.cjs.map +1 -0
  363. package/dist/components/features/automations/to-latest-run-state.d.ts +6 -0
  364. package/dist/components/features/automations/to-latest-run-state.js +21 -0
  365. package/dist/components/features/automations/to-latest-run-state.js.map +1 -0
  366. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  367. package/dist/components/features/backends/backend-form-modal.js +10 -10
  368. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  369. package/dist/components/features/backends/manage-backends-modal.js +5 -5
  370. package/dist/components/features/chat/chat-interface.cjs +2 -2
  371. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  372. package/dist/components/features/chat/chat-interface.js +179 -177
  373. package/dist/components/features/chat/chat-interface.js.map +1 -1
  374. package/dist/components/features/command-menu/command-menu-items.d.ts +10 -4
  375. package/dist/components/features/conversation/conversation-git-actions-menu.cjs +2 -0
  376. package/dist/components/features/conversation/conversation-git-actions-menu.cjs.map +1 -0
  377. package/dist/components/features/conversation/conversation-git-actions-menu.d.ts +15 -0
  378. package/dist/components/features/conversation/conversation-git-actions-menu.js +123 -0
  379. package/dist/components/features/conversation/conversation-git-actions-menu.js.map +1 -0
  380. package/dist/components/features/conversation/conversation-git-actions-toggle.cjs +2 -0
  381. package/dist/components/features/conversation/conversation-git-actions-toggle.cjs.map +1 -0
  382. package/dist/components/features/conversation/conversation-git-actions-toggle.d.ts +10 -0
  383. package/dist/components/features/conversation/conversation-git-actions-toggle.js +60 -0
  384. package/dist/components/features/conversation/conversation-git-actions-toggle.js.map +1 -0
  385. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs +1 -1
  386. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs.map +1 -1
  387. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js +46 -10
  388. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js.map +1 -1
  389. package/dist/components/features/conversation/conversation-main/conversation-main.cjs +1 -1
  390. package/dist/components/features/conversation/conversation-main/conversation-main.cjs.map +1 -1
  391. package/dist/components/features/conversation/conversation-main/conversation-main.js +49 -43
  392. package/dist/components/features/conversation/conversation-main/conversation-main.js.map +1 -1
  393. package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
  394. package/dist/components/features/conversation/conversation-name-with-status.cjs.map +1 -1
  395. package/dist/components/features/conversation/conversation-name-with-status.js +49 -40
  396. package/dist/components/features/conversation/conversation-name-with-status.js.map +1 -1
  397. package/dist/components/features/conversation/conversation-name.cjs +1 -1
  398. package/dist/components/features/conversation/conversation-name.js +4 -4
  399. package/dist/components/features/conversation/conversation-overview-automations-panel.cjs +2 -0
  400. package/dist/components/features/conversation/conversation-overview-automations-panel.cjs.map +1 -0
  401. package/dist/components/features/conversation/conversation-overview-automations-panel.d.ts +6 -0
  402. package/dist/components/features/conversation/conversation-overview-automations-panel.js +48 -0
  403. package/dist/components/features/conversation/conversation-overview-automations-panel.js.map +1 -0
  404. package/dist/components/features/conversation/conversation-overview-context-menu.cjs +2 -0
  405. package/dist/components/features/conversation/conversation-overview-context-menu.cjs.map +1 -0
  406. package/dist/components/features/conversation/conversation-overview-context-menu.d.ts +10 -0
  407. package/dist/components/features/conversation/conversation-overview-context-menu.js +221 -0
  408. package/dist/components/features/conversation/conversation-overview-context-menu.js.map +1 -0
  409. package/dist/components/features/conversation/conversation-overview-diffs-row.cjs +2 -0
  410. package/dist/components/features/conversation/conversation-overview-diffs-row.cjs.map +1 -0
  411. package/dist/components/features/conversation/conversation-overview-diffs-row.d.ts +2 -0
  412. package/dist/components/features/conversation/conversation-overview-diffs-row.js +88 -0
  413. package/dist/components/features/conversation/conversation-overview-diffs-row.js.map +1 -0
  414. package/dist/components/features/conversation/conversation-overview-drawer-content.cjs +2 -0
  415. package/dist/components/features/conversation/conversation-overview-drawer-content.cjs.map +1 -0
  416. package/dist/components/features/conversation/conversation-overview-drawer-content.d.ts +6 -0
  417. package/dist/components/features/conversation/conversation-overview-drawer-content.js +138 -0
  418. package/dist/components/features/conversation/conversation-overview-drawer-content.js.map +1 -0
  419. package/dist/components/features/conversation/conversation-overview-drawer-context.cjs +2 -0
  420. package/dist/components/features/conversation/conversation-overview-drawer-context.cjs.map +1 -0
  421. package/dist/components/features/conversation/conversation-overview-drawer-context.d.ts +17 -0
  422. package/dist/components/features/conversation/conversation-overview-drawer-context.js +43 -0
  423. package/dist/components/features/conversation/conversation-overview-drawer-context.js.map +1 -0
  424. package/dist/components/features/conversation/conversation-overview-drawer.cjs +2 -0
  425. package/dist/components/features/conversation/conversation-overview-drawer.cjs.map +1 -0
  426. package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs +2 -0
  427. package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs.map +1 -0
  428. package/dist/components/features/conversation/conversation-overview-drawer.constants.d.ts +6 -0
  429. package/dist/components/features/conversation/conversation-overview-drawer.constants.js +6 -0
  430. package/dist/components/features/conversation/conversation-overview-drawer.constants.js.map +1 -0
  431. package/dist/components/features/conversation/conversation-overview-drawer.d.ts +7 -0
  432. package/dist/components/features/conversation/conversation-overview-drawer.js +45 -0
  433. package/dist/components/features/conversation/conversation-overview-drawer.js.map +1 -0
  434. package/dist/components/features/conversation/conversation-overview-drawer.types.cjs +2 -0
  435. package/dist/components/features/conversation/conversation-overview-drawer.types.cjs.map +1 -0
  436. package/dist/components/features/conversation/conversation-overview-drawer.types.d.ts +12 -0
  437. package/dist/components/features/conversation/conversation-overview-drawer.types.js +13 -0
  438. package/dist/components/features/conversation/conversation-overview-drawer.types.js.map +1 -0
  439. package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs +2 -0
  440. package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs.map +1 -0
  441. package/dist/components/features/conversation/conversation-overview-git-items-panel.d.ts +7 -0
  442. package/dist/components/features/conversation/conversation-overview-git-items-panel.js +81 -0
  443. package/dist/components/features/conversation/conversation-overview-git-items-panel.js.map +1 -0
  444. package/dist/components/features/conversation/conversation-overview-git-section.cjs +2 -0
  445. package/dist/components/features/conversation/conversation-overview-git-section.cjs.map +1 -0
  446. package/dist/components/features/conversation/conversation-overview-git-section.d.ts +6 -0
  447. package/dist/components/features/conversation/conversation-overview-git-section.js +143 -0
  448. package/dist/components/features/conversation/conversation-overview-git-section.js.map +1 -0
  449. package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs +2 -0
  450. package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs.map +1 -0
  451. package/dist/components/features/conversation/conversation-overview-mcp-panel.d.ts +6 -0
  452. package/dist/components/features/conversation/conversation-overview-mcp-panel.js +108 -0
  453. package/dist/components/features/conversation/conversation-overview-mcp-panel.js.map +1 -0
  454. package/dist/components/features/conversation/conversation-overview-panel.cjs +2 -0
  455. package/dist/components/features/conversation/conversation-overview-panel.cjs.map +1 -0
  456. package/dist/components/features/conversation/conversation-overview-panel.constants.cjs +2 -0
  457. package/dist/components/features/conversation/conversation-overview-panel.constants.cjs.map +1 -0
  458. package/dist/components/features/conversation/conversation-overview-panel.constants.d.ts +24 -0
  459. package/dist/components/features/conversation/conversation-overview-panel.constants.js +12 -0
  460. package/dist/components/features/conversation/conversation-overview-panel.constants.js.map +1 -0
  461. package/dist/components/features/conversation/conversation-overview-panel.d.ts +2 -0
  462. package/dist/components/features/conversation/conversation-overview-panel.js +102 -0
  463. package/dist/components/features/conversation/conversation-overview-panel.js.map +1 -0
  464. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs +2 -0
  465. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs.map +1 -0
  466. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.d.ts +8 -0
  467. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js +29 -0
  468. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js.map +1 -0
  469. package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs +2 -0
  470. package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs.map +1 -0
  471. package/dist/components/features/conversation/conversation-overview-secrets-panel.d.ts +6 -0
  472. package/dist/components/features/conversation/conversation-overview-secrets-panel.js +89 -0
  473. package/dist/components/features/conversation/conversation-overview-secrets-panel.js.map +1 -0
  474. package/dist/components/features/conversation/conversation-overview-sections.cjs +2 -0
  475. package/dist/components/features/conversation/conversation-overview-sections.cjs.map +1 -0
  476. package/dist/components/features/conversation/conversation-overview-sections.d.ts +43 -0
  477. package/dist/components/features/conversation/conversation-overview-sections.js +27 -0
  478. package/dist/components/features/conversation/conversation-overview-sections.js.map +1 -0
  479. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +2 -0
  480. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs.map +1 -0
  481. package/dist/components/features/conversation/conversation-overview-skills-panel.d.ts +6 -0
  482. package/dist/components/features/conversation/conversation-overview-skills-panel.js +138 -0
  483. package/dist/components/features/conversation/conversation-overview-skills-panel.js.map +1 -0
  484. package/dist/components/features/conversation/conversation-overview-toggle.cjs +2 -0
  485. package/dist/components/features/conversation/conversation-overview-toggle.cjs.map +1 -0
  486. package/dist/components/features/conversation/conversation-overview-toggle.d.ts +11 -0
  487. package/dist/components/features/conversation/conversation-overview-toggle.js +99 -0
  488. package/dist/components/features/conversation/conversation-overview-toggle.js.map +1 -0
  489. package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs +2 -0
  490. package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs.map +1 -0
  491. package/dist/components/features/conversation/conversation-secondary-drawer.classes.d.ts +4 -0
  492. package/dist/components/features/conversation/conversation-secondary-drawer.classes.js +7 -0
  493. package/dist/components/features/conversation/conversation-secondary-drawer.classes.js.map +1 -0
  494. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs +1 -1
  495. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs.map +1 -1
  496. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js +10 -9
  497. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js.map +1 -1
  498. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  499. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  500. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +68 -62
  501. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  502. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
  503. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
  504. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +98 -88
  505. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
  506. package/dist/components/features/conversation/right-panel-toggle.cjs +1 -1
  507. package/dist/components/features/conversation/right-panel-toggle.cjs.map +1 -1
  508. package/dist/components/features/conversation/right-panel-toggle.d.ts +3 -2
  509. package/dist/components/features/conversation/right-panel-toggle.js +34 -33
  510. package/dist/components/features/conversation/right-panel-toggle.js.map +1 -1
  511. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
  512. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
  513. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +2 -1
  514. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +14 -7
  515. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
  516. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  517. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  518. package/dist/components/features/conversation-panel/conversation-panel.js +252 -225
  519. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  520. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
  521. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
  522. package/dist/components/features/conversation-panel/local-new-conversation-menu.js +4 -4
  523. package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
  524. package/dist/components/features/diff-viewer/accordion-panel.cjs +2 -0
  525. package/dist/components/features/diff-viewer/accordion-panel.cjs.map +1 -0
  526. package/dist/components/features/diff-viewer/accordion-panel.d.ts +13 -0
  527. package/dist/components/features/diff-viewer/accordion-panel.js +41 -0
  528. package/dist/components/features/diff-viewer/accordion-panel.js.map +1 -0
  529. package/dist/components/features/diff-viewer/commit-list.cjs +1 -1
  530. package/dist/components/features/diff-viewer/commit-list.cjs.map +1 -1
  531. package/dist/components/features/diff-viewer/commit-list.d.ts +5 -1
  532. package/dist/components/features/diff-viewer/commit-list.js +30 -16
  533. package/dist/components/features/diff-viewer/commit-list.js.map +1 -1
  534. package/dist/components/features/diff-viewer/commit-row.cjs +1 -1
  535. package/dist/components/features/diff-viewer/commit-row.cjs.map +1 -1
  536. package/dist/components/features/diff-viewer/commit-row.d.ts +1 -2
  537. package/dist/components/features/diff-viewer/commit-row.js +38 -34
  538. package/dist/components/features/diff-viewer/commit-row.js.map +1 -1
  539. package/dist/components/features/diff-viewer/diff-change-list.cjs +2 -0
  540. package/dist/components/features/diff-viewer/diff-change-list.cjs.map +1 -0
  541. package/dist/components/features/diff-viewer/diff-change-list.d.ts +18 -0
  542. package/dist/components/features/diff-viewer/diff-change-list.js +22 -0
  543. package/dist/components/features/diff-viewer/diff-change-list.js.map +1 -0
  544. package/dist/components/features/diff-viewer/editor-container.cjs +1 -1
  545. package/dist/components/features/diff-viewer/editor-container.cjs.map +1 -1
  546. package/dist/components/features/diff-viewer/editor-container.d.ts +2 -1
  547. package/dist/components/features/diff-viewer/editor-container.js +8 -7
  548. package/dist/components/features/diff-viewer/editor-container.js.map +1 -1
  549. package/dist/components/features/diff-viewer/file-diff-viewer.cjs +1 -1
  550. package/dist/components/features/diff-viewer/file-diff-viewer.cjs.map +1 -1
  551. package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +10 -1
  552. package/dist/components/features/diff-viewer/file-diff-viewer.js +138 -112
  553. package/dist/components/features/diff-viewer/file-diff-viewer.js.map +1 -1
  554. package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs +2 -0
  555. package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs.map +1 -0
  556. package/dist/components/features/diff-viewer/uncommitted-changes-row.d.ts +12 -0
  557. package/dist/components/features/diff-viewer/uncommitted-changes-row.js +51 -0
  558. package/dist/components/features/diff-viewer/uncommitted-changes-row.js.map +1 -0
  559. package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
  560. package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
  561. package/dist/components/features/files-tab/file-content-viewer.js +0 -1
  562. package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
  563. package/dist/components/features/files-tab/file-quick-row.cjs +1 -1
  564. package/dist/components/features/files-tab/file-quick-row.cjs.map +1 -1
  565. package/dist/components/features/files-tab/file-quick-row.d.ts +9 -7
  566. package/dist/components/features/files-tab/file-quick-row.js +63 -34
  567. package/dist/components/features/files-tab/file-quick-row.js.map +1 -1
  568. package/dist/components/features/files-tab/files-tab-tree.constants.cjs +2 -0
  569. package/dist/components/features/files-tab/files-tab-tree.constants.cjs.map +1 -0
  570. package/dist/components/features/files-tab/files-tab-tree.constants.d.ts +7 -0
  571. package/dist/components/features/files-tab/files-tab-tree.constants.js +6 -0
  572. package/dist/components/features/files-tab/files-tab-tree.constants.js.map +1 -0
  573. package/dist/components/features/files-tab/segmented-toggle.cjs +1 -1
  574. package/dist/components/features/files-tab/segmented-toggle.cjs.map +1 -1
  575. package/dist/components/features/files-tab/segmented-toggle.d.ts +5 -3
  576. package/dist/components/features/files-tab/segmented-toggle.js +10 -13
  577. package/dist/components/features/files-tab/segmented-toggle.js.map +1 -1
  578. package/dist/components/features/files-tab/tree-node.cjs +1 -1
  579. package/dist/components/features/files-tab/tree-node.cjs.map +1 -1
  580. package/dist/components/features/files-tab/tree-node.js +34 -32
  581. package/dist/components/features/files-tab/tree-node.js.map +1 -1
  582. package/dist/components/features/files-tab/workspace-path.cjs +2 -0
  583. package/dist/components/features/files-tab/workspace-path.cjs.map +1 -0
  584. package/dist/components/features/files-tab/workspace-path.d.ts +6 -0
  585. package/dist/components/features/files-tab/workspace-path.js +41 -0
  586. package/dist/components/features/files-tab/workspace-path.js.map +1 -0
  587. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +2 -0
  588. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -0
  589. package/dist/components/features/home/featured-automations/automation-health-indicator.js +22 -0
  590. package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -0
  591. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +2 -0
  592. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -0
  593. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +45 -0
  594. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -0
  595. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +2 -0
  596. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -0
  597. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +108 -0
  598. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -0
  599. package/dist/components/features/home/featured-automations/automation-run-health.cjs +2 -0
  600. package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -0
  601. package/dist/components/features/home/featured-automations/automation-run-health.js +75 -0
  602. package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -0
  603. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +2 -0
  604. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -0
  605. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +74 -0
  606. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -0
  607. package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +3 -3
  608. package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs +1 -1
  609. package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs.map +1 -1
  610. package/dist/components/features/home/git-repo-dropdown/use-url-search.js +1 -1
  611. package/dist/components/features/home/git-repo-dropdown/use-url-search.js.map +1 -1
  612. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs +1 -1
  613. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js +6 -6
  614. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs +1 -1
  615. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js +6 -6
  616. package/dist/components/features/manifest/manifest-form-field.d.ts +4 -3
  617. package/dist/components/features/manifest/manifest-icons.cjs +2 -0
  618. package/dist/components/features/manifest/manifest-icons.cjs.map +1 -0
  619. package/dist/components/features/manifest/manifest-icons.d.ts +1 -0
  620. package/dist/components/features/manifest/manifest-icons.js +21 -0
  621. package/dist/components/features/manifest/manifest-icons.js.map +1 -0
  622. package/dist/components/features/manifest/manifest-repository-list.d.ts +25 -0
  623. package/dist/components/features/markdown/markdown-table-scroll.cjs +1 -1
  624. package/dist/components/features/markdown/markdown-table-scroll.cjs.map +1 -1
  625. package/dist/components/features/markdown/markdown-table-scroll.d.ts +2 -6
  626. package/dist/components/features/markdown/markdown-table-scroll.js +15 -21
  627. package/dist/components/features/markdown/markdown-table-scroll.js.map +1 -1
  628. package/dist/components/features/mcp-logo-badge.cjs +1 -1
  629. package/dist/components/features/mcp-logo-badge.cjs.map +1 -1
  630. package/dist/components/features/mcp-logo-badge.d.ts +1 -1
  631. package/dist/components/features/mcp-logo-badge.js +1 -0
  632. package/dist/components/features/mcp-logo-badge.js.map +1 -1
  633. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  634. package/dist/components/features/mcp-page/custom-server-editor.js +16 -16
  635. package/dist/components/features/mcp-page/index.cjs +1 -1
  636. package/dist/components/features/mcp-page/index.js +2 -2
  637. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  638. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  639. package/dist/components/features/mcp-page/install-server-modal.js +25 -25
  640. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  641. package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
  642. package/dist/components/features/mcp-page/installed-server-card.js +5 -5
  643. package/dist/components/features/mcp-page/marketplace-card.cjs +1 -1
  644. package/dist/components/features/mcp-page/marketplace-card.js +4 -4
  645. package/dist/components/features/mcp-page/marketplace-section.cjs +1 -1
  646. package/dist/components/features/mcp-page/marketplace-section.js +3 -3
  647. package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs +2 -0
  648. package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs.map +1 -0
  649. package/dist/components/features/mcp-page/mcp-logo-stack-badge.js +60 -0
  650. package/dist/components/features/mcp-page/mcp-logo-stack-badge.js.map +1 -0
  651. package/dist/components/features/mcp-page/mcp-server-health.cjs +1 -1
  652. package/dist/components/features/mcp-page/mcp-server-health.js +18 -18
  653. package/dist/components/features/onboarding/use-onboarding-completion.cjs +2 -0
  654. package/dist/components/features/onboarding/use-onboarding-completion.cjs.map +1 -0
  655. package/dist/components/features/onboarding/use-onboarding-completion.js +32 -0
  656. package/dist/components/features/onboarding/use-onboarding-completion.js.map +1 -0
  657. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs +2 -0
  658. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs.map +1 -0
  659. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.d.ts +1 -0
  660. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js +22 -0
  661. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js.map +1 -0
  662. package/dist/components/features/settings/brand-button.cjs +1 -1
  663. package/dist/components/features/settings/brand-button.cjs.map +1 -1
  664. package/dist/components/features/settings/brand-button.d.ts +2 -0
  665. package/dist/components/features/settings/brand-button.js +4 -2
  666. package/dist/components/features/settings/brand-button.js.map +1 -1
  667. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.cjs +1 -0
  668. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.d.ts +7 -0
  669. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.js +7 -0
  670. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.cjs +1 -1
  671. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.js +3 -0
  672. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  673. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +1 -0
  674. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +20 -1
  675. package/dist/components/features/settings/llm-profiles/provider-connection-modal.cjs +1 -0
  676. package/dist/components/features/settings/llm-profiles/provider-connection-modal.d.ts +19 -0
  677. package/dist/components/features/settings/llm-profiles/provider-connection-modal.js +10 -0
  678. package/dist/components/features/settings/llm-profiles/provider-connection-row.cjs +1 -0
  679. package/dist/components/features/settings/llm-profiles/provider-connection-row.d.ts +10 -0
  680. package/dist/components/features/settings/llm-profiles/provider-connection-row.js +6 -0
  681. package/dist/components/features/settings/llm-profiles/provider-connections-manager.cjs +1 -0
  682. package/dist/components/features/settings/llm-profiles/provider-connections-manager.d.ts +15 -0
  683. package/dist/components/features/settings/llm-profiles/provider-connections-manager.js +8 -0
  684. package/dist/components/features/settings/sdk-settings/schema-field.cjs +1 -1
  685. package/dist/components/features/settings/sdk-settings/schema-field.js +6 -6
  686. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
  687. package/dist/components/features/settings/sdk-settings/sdk-section-page.js +7 -7
  688. package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
  689. package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
  690. package/dist/components/features/settings/secrets-settings/secret-form.js +7 -7
  691. package/dist/components/features/settings/settings-input.cjs +1 -1
  692. package/dist/components/features/settings/settings-input.cjs.map +1 -1
  693. package/dist/components/features/settings/settings-input.d.ts +6 -0
  694. package/dist/components/features/settings/settings-input.js +14 -13
  695. package/dist/components/features/settings/settings-input.js.map +1 -1
  696. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs +2 -0
  697. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs.map +1 -0
  698. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.d.ts +7 -0
  699. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js +102 -0
  700. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js.map +1 -0
  701. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs +2 -0
  702. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs.map +1 -0
  703. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.d.ts +8 -0
  704. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js +66 -0
  705. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js.map +1 -0
  706. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs +2 -0
  707. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs.map +1 -0
  708. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.d.ts +3 -0
  709. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js +15 -0
  710. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js.map +1 -0
  711. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs +2 -0
  712. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs.map +1 -0
  713. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.d.ts +10 -0
  714. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js +39 -0
  715. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js.map +1 -0
  716. package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs +2 -0
  717. package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs.map +1 -0
  718. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs +2 -0
  719. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs.map +1 -0
  720. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.d.ts +26 -0
  721. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js +78 -0
  722. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js.map +1 -0
  723. package/dist/components/features/sidebar/sidebar-onboarding-checklist.d.ts +5 -0
  724. package/dist/components/features/sidebar/sidebar-onboarding-checklist.js +127 -0
  725. package/dist/components/features/sidebar/sidebar-onboarding-checklist.js.map +1 -0
  726. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  727. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  728. package/dist/components/features/sidebar/sidebar-rail-body.js +115 -111
  729. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  730. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs +2 -0
  731. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs.map +1 -0
  732. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.d.ts +1 -0
  733. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js +10 -0
  734. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js.map +1 -0
  735. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +2 -0
  736. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs.map +1 -0
  737. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.d.ts +15 -0
  738. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +75 -0
  739. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js.map +1 -0
  740. package/dist/components/features/skills/add-skill-modal.cjs +2 -0
  741. package/dist/components/features/skills/add-skill-modal.cjs.map +1 -0
  742. package/dist/components/features/skills/add-skill-modal.js +164 -0
  743. package/dist/components/features/skills/add-skill-modal.js.map +1 -0
  744. package/dist/components/features/skills/build-skill-pills.cjs +2 -0
  745. package/dist/components/features/skills/build-skill-pills.cjs.map +1 -0
  746. package/dist/components/features/skills/build-skill-pills.js +88 -0
  747. package/dist/components/features/skills/build-skill-pills.js.map +1 -0
  748. package/dist/components/features/skills/get-skill-card-description.cjs +2 -0
  749. package/dist/components/features/skills/get-skill-card-description.cjs.map +1 -0
  750. package/dist/components/features/skills/get-skill-card-description.js +34 -0
  751. package/dist/components/features/skills/get-skill-card-description.js.map +1 -0
  752. package/dist/components/features/skills/get-skill-chat-launch-message.cjs +2 -0
  753. package/dist/components/features/skills/get-skill-chat-launch-message.cjs.map +1 -0
  754. package/dist/components/features/skills/get-skill-chat-launch-message.js +9 -0
  755. package/dist/components/features/skills/get-skill-chat-launch-message.js.map +1 -0
  756. package/dist/components/features/skills/is-copyable-skill-source.cjs +2 -0
  757. package/dist/components/features/skills/is-copyable-skill-source.cjs.map +1 -0
  758. package/dist/components/features/skills/is-copyable-skill-source.js +9 -0
  759. package/dist/components/features/skills/is-copyable-skill-source.js.map +1 -0
  760. package/dist/components/features/skills/skill-card-pill-row.cjs +2 -0
  761. package/dist/components/features/skills/skill-card-pill-row.cjs.map +1 -0
  762. package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
  763. package/dist/components/features/skills/skill-card-pill-row.js +137 -0
  764. package/dist/components/features/skills/skill-card-pill-row.js.map +1 -0
  765. package/dist/components/features/skills/skill-card.cjs +2 -0
  766. package/dist/components/features/skills/skill-card.cjs.map +1 -0
  767. package/dist/components/features/skills/skill-card.js +93 -0
  768. package/dist/components/features/skills/skill-card.js.map +1 -0
  769. package/dist/components/features/skills/skill-detail-modal.cjs +3 -0
  770. package/dist/components/features/skills/skill-detail-modal.cjs.map +1 -0
  771. package/dist/components/features/skills/skill-detail-modal.js +150 -0
  772. package/dist/components/features/skills/skill-detail-modal.js.map +1 -0
  773. package/dist/components/features/skills/skill-facet-rail.cjs +2 -0
  774. package/dist/components/features/skills/skill-facet-rail.cjs.map +1 -0
  775. package/dist/components/features/skills/skill-facet-rail.js +42 -0
  776. package/dist/components/features/skills/skill-facet-rail.js.map +1 -0
  777. package/dist/components/features/skills/skill-facet-row.cjs +2 -0
  778. package/dist/components/features/skills/skill-facet-row.cjs.map +1 -0
  779. package/dist/components/features/skills/skill-facet-row.js +44 -0
  780. package/dist/components/features/skills/skill-facet-row.js.map +1 -0
  781. package/dist/components/features/skills/skill-filter.cjs +2 -0
  782. package/dist/components/features/skills/skill-filter.cjs.map +1 -0
  783. package/dist/components/features/skills/skill-filter.js +166 -0
  784. package/dist/components/features/skills/skill-filter.js.map +1 -0
  785. package/dist/components/features/skills/skill-filters-modal.cjs +2 -0
  786. package/dist/components/features/skills/skill-filters-modal.cjs.map +1 -0
  787. package/dist/components/features/skills/skill-filters-modal.js +53 -0
  788. package/dist/components/features/skills/skill-filters-modal.js.map +1 -0
  789. package/dist/components/features/skills/skill-icon-badge.cjs +2 -0
  790. package/dist/components/features/skills/skill-icon-badge.cjs.map +1 -0
  791. package/dist/components/features/skills/skill-icon-badge.js +17 -0
  792. package/dist/components/features/skills/skill-icon-badge.js.map +1 -0
  793. package/dist/components/features/skills/skill-type-badge.cjs +2 -0
  794. package/dist/components/features/skills/skill-type-badge.cjs.map +1 -0
  795. package/dist/components/features/skills/skill-type-badge.js +21 -0
  796. package/dist/components/features/skills/skill-type-badge.js.map +1 -0
  797. package/dist/components/features/skills/skills-toolbar.cjs +2 -0
  798. package/dist/components/features/skills/skills-toolbar.cjs.map +1 -0
  799. package/dist/components/features/skills/skills-toolbar.js +63 -0
  800. package/dist/components/features/skills/skills-toolbar.js.map +1 -0
  801. package/dist/components/shared/buttons/circle-plus-check-toggle.cjs +1 -1
  802. package/dist/components/shared/buttons/circle-plus-check-toggle.cjs.map +1 -1
  803. package/dist/components/shared/buttons/circle-plus-check-toggle.js +19 -6
  804. package/dist/components/shared/buttons/circle-plus-check-toggle.js.map +1 -1
  805. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  806. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  807. package/dist/components/shared/filters/enum-filter-dropdown.d.ts +4 -1
  808. package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
  809. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  810. package/dist/components/shared/modals/settings/settings-form.cjs +1 -1
  811. package/dist/components/shared/modals/settings/settings-form.js +4 -4
  812. package/dist/components/ui/resize-handle.cjs +1 -1
  813. package/dist/components/ui/resize-handle.cjs.map +1 -1
  814. package/dist/components/ui/resize-handle.d.ts +2 -1
  815. package/dist/components/ui/resize-handle.js +6 -5
  816. package/dist/components/ui/resize-handle.js.map +1 -1
  817. package/dist/config/defaults.cjs +1 -1
  818. package/dist/config/defaults.cjs.map +1 -1
  819. package/dist/config/defaults.js +2 -2
  820. package/dist/config/defaults.js.map +1 -1
  821. package/dist/constants/skills-docs.cjs +2 -0
  822. package/dist/constants/skills-docs.cjs.map +1 -0
  823. package/dist/constants/skills-docs.js +6 -0
  824. package/dist/constants/skills-docs.js.map +1 -0
  825. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  826. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  827. package/dist/contexts/conversation-websocket-context.js +174 -149
  828. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  829. package/dist/fixtures/home-automations-demo.cjs +2 -0
  830. package/dist/fixtures/home-automations-demo.cjs.map +1 -0
  831. package/dist/fixtures/home-automations-demo.d.ts +1 -3
  832. package/dist/fixtures/home-automations-demo.js +384 -0
  833. package/dist/fixtures/home-automations-demo.js.map +1 -0
  834. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  835. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  836. package/dist/hooks/chat/use-slash-command.d.ts +1 -2
  837. package/dist/hooks/chat/use-slash-command.js +1 -0
  838. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  839. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  840. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  841. package/dist/hooks/mutation/use-create-conversation.js +27 -30
  842. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  843. package/dist/hooks/mutation/use-create-provider-connection.cjs +1 -0
  844. package/dist/hooks/mutation/use-create-provider-connection.d.ts +2 -0
  845. package/dist/hooks/mutation/use-create-provider-connection.js +1 -0
  846. package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
  847. package/dist/hooks/mutation/use-delete-mcp-server.js +3 -3
  848. package/dist/hooks/mutation/use-delete-provider-connection.cjs +1 -0
  849. package/dist/hooks/mutation/use-delete-provider-connection.d.ts +1 -0
  850. package/dist/hooks/mutation/use-delete-provider-connection.js +1 -0
  851. package/dist/hooks/mutation/use-switch-acp-model.cjs +1 -1
  852. package/dist/hooks/mutation/use-switch-acp-model.cjs.map +1 -1
  853. package/dist/hooks/mutation/use-switch-acp-model.d.ts +5 -3
  854. package/dist/hooks/mutation/use-switch-acp-model.js +9 -13
  855. package/dist/hooks/mutation/use-switch-acp-model.js.map +1 -1
  856. package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
  857. package/dist/hooks/mutation/use-update-mcp-server.js +6 -6
  858. package/dist/hooks/mutation/use-update-provider-connection.cjs +1 -0
  859. package/dist/hooks/mutation/use-update-provider-connection.d.ts +7 -0
  860. package/dist/hooks/mutation/use-update-provider-connection.js +1 -0
  861. package/dist/hooks/query/query-keys.cjs +1 -1
  862. package/dist/hooks/query/query-keys.cjs.map +1 -1
  863. package/dist/hooks/query/query-keys.d.ts +3 -0
  864. package/dist/hooks/query/query-keys.js +4 -4
  865. package/dist/hooks/query/query-keys.js.map +1 -1
  866. package/dist/hooks/query/use-automation-detail.cjs +1 -0
  867. package/dist/hooks/query/use-automation-detail.js +2 -0
  868. package/dist/hooks/query/use-automation-health.cjs +2 -0
  869. package/dist/hooks/query/use-automation-health.cjs.map +1 -0
  870. package/dist/hooks/query/use-automation-health.js +22 -0
  871. package/dist/hooks/query/use-automation-health.js.map +1 -0
  872. package/dist/hooks/query/use-automations.cjs +2 -0
  873. package/dist/hooks/query/use-automations.cjs.map +1 -0
  874. package/dist/hooks/query/use-automations.js +28 -0
  875. package/dist/hooks/query/use-automations.js.map +1 -0
  876. package/dist/hooks/query/use-backends-health.cjs +1 -1
  877. package/dist/hooks/query/use-backends-health.cjs.map +1 -1
  878. package/dist/hooks/query/use-backends-health.js +1 -1
  879. package/dist/hooks/query/use-backends-health.js.map +1 -1
  880. package/dist/hooks/query/use-commit-changes.cjs +1 -1
  881. package/dist/hooks/query/use-commit-changes.js +4 -4
  882. package/dist/hooks/query/use-conversation-history.cjs +1 -1
  883. package/dist/hooks/query/use-conversation-history.cjs.map +1 -1
  884. package/dist/hooks/query/use-conversation-history.js +3 -1
  885. package/dist/hooks/query/use-conversation-history.js.map +1 -1
  886. package/dist/hooks/query/use-conversation-metrics.cjs +1 -1
  887. package/dist/hooks/query/use-conversation-metrics.js +3 -3
  888. package/dist/hooks/query/use-latest-automation-runs.cjs +1 -0
  889. package/dist/hooks/query/use-latest-automation-runs.d.ts +2 -0
  890. package/dist/hooks/query/use-latest-automation-runs.js +3 -0
  891. package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
  892. package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
  893. package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
  894. package/dist/hooks/query/use-paginated-conversations.js +1 -1
  895. package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
  896. package/dist/hooks/query/use-provider-connections.cjs +2 -0
  897. package/dist/hooks/query/use-provider-connections.cjs.map +1 -0
  898. package/dist/hooks/query/use-provider-connections.d.ts +8 -0
  899. package/dist/hooks/query/use-provider-connections.js +19 -0
  900. package/dist/hooks/query/use-provider-connections.js.map +1 -0
  901. package/dist/hooks/query/use-repository-git-items.cjs +2 -0
  902. package/dist/hooks/query/use-repository-git-items.cjs.map +1 -0
  903. package/dist/hooks/query/use-repository-git-items.d.ts +3 -0
  904. package/dist/hooks/query/use-repository-git-items.js +33 -0
  905. package/dist/hooks/query/use-repository-git-items.js.map +1 -0
  906. package/dist/hooks/query/use-unified-get-git-changes.cjs +1 -1
  907. package/dist/hooks/query/use-unified-get-git-changes.js +4 -4
  908. package/dist/hooks/query/use-unified-git-commits.cjs +1 -1
  909. package/dist/hooks/query/use-unified-git-commits.js +4 -4
  910. package/dist/hooks/query/use-unified-git-diff.cjs +1 -1
  911. package/dist/hooks/query/use-unified-git-diff.js +4 -4
  912. package/dist/hooks/query/use-workspace-files.cjs +1 -1
  913. package/dist/hooks/query/use-workspace-files.js +6 -6
  914. package/dist/hooks/use-bash-command-runner.cjs +1 -1
  915. package/dist/hooks/use-bash-command-runner.cjs.map +1 -1
  916. package/dist/hooks/use-bash-command-runner.js +45 -42
  917. package/dist/hooks/use-bash-command-runner.js.map +1 -1
  918. package/dist/hooks/use-conversation-overview-column-space.cjs +2 -0
  919. package/dist/hooks/use-conversation-overview-column-space.cjs.map +1 -0
  920. package/dist/hooks/use-conversation-overview-column-space.d.ts +2 -0
  921. package/dist/hooks/use-conversation-overview-column-space.js +25 -0
  922. package/dist/hooks/use-conversation-overview-column-space.js.map +1 -0
  923. package/dist/hooks/use-conversation-overview-git-diff-stats.cjs +2 -0
  924. package/dist/hooks/use-conversation-overview-git-diff-stats.cjs.map +1 -0
  925. package/dist/hooks/use-conversation-overview-git-diff-stats.d.ts +7 -0
  926. package/dist/hooks/use-conversation-overview-git-diff-stats.js +37 -0
  927. package/dist/hooks/use-conversation-overview-git-diff-stats.js.map +1 -0
  928. package/dist/hooks/use-conversation-overview-panel-peek.cjs +2 -0
  929. package/dist/hooks/use-conversation-overview-panel-peek.cjs.map +1 -0
  930. package/dist/hooks/use-conversation-overview-panel-peek.d.ts +9 -0
  931. package/dist/hooks/use-conversation-overview-panel-peek.js +32 -0
  932. package/dist/hooks/use-conversation-overview-panel-peek.js.map +1 -0
  933. package/dist/hooks/use-conversation-overview-stats.cjs +2 -0
  934. package/dist/hooks/use-conversation-overview-stats.cjs.map +1 -0
  935. package/dist/hooks/use-conversation-overview-stats.d.ts +4 -0
  936. package/dist/hooks/use-conversation-overview-stats.js +15 -0
  937. package/dist/hooks/use-conversation-overview-stats.js.map +1 -0
  938. package/dist/hooks/use-conversation-primary-repository.cjs +2 -0
  939. package/dist/hooks/use-conversation-primary-repository.cjs.map +1 -0
  940. package/dist/hooks/use-conversation-primary-repository.d.ts +11 -0
  941. package/dist/hooks/use-conversation-primary-repository.js +17 -0
  942. package/dist/hooks/use-conversation-primary-repository.js.map +1 -0
  943. package/dist/hooks/use-drag-scroll.cjs +2 -0
  944. package/dist/hooks/use-drag-scroll.cjs.map +1 -0
  945. package/dist/hooks/use-drag-scroll.d.ts +12 -0
  946. package/dist/hooks/use-drag-scroll.js +41 -0
  947. package/dist/hooks/use-drag-scroll.js.map +1 -0
  948. package/dist/hooks/use-has-permission.cjs +2 -0
  949. package/dist/hooks/use-has-permission.cjs.map +1 -0
  950. package/dist/hooks/use-has-permission.js +8 -0
  951. package/dist/hooks/use-has-permission.js.map +1 -0
  952. package/dist/hooks/use-home-automation-actions.cjs +2 -0
  953. package/dist/hooks/use-home-automation-actions.cjs.map +1 -0
  954. package/dist/hooks/use-home-automation-actions.js +15 -0
  955. package/dist/hooks/use-home-automation-actions.js.map +1 -0
  956. package/dist/hooks/use-launch-skill-in-chat.cjs +2 -0
  957. package/dist/hooks/use-launch-skill-in-chat.cjs.map +1 -0
  958. package/dist/hooks/use-launch-skill-in-chat.js +16 -0
  959. package/dist/hooks/use-launch-skill-in-chat.js.map +1 -0
  960. package/dist/hooks/use-mcp-server-health.cjs +1 -1
  961. package/dist/hooks/use-mcp-server-health.js +3 -3
  962. package/dist/hooks/use-resizable-drawer-width.cjs +2 -0
  963. package/dist/hooks/use-resizable-drawer-width.cjs.map +1 -0
  964. package/dist/hooks/use-resizable-drawer-width.d.ts +22 -0
  965. package/dist/hooks/use-resizable-drawer-width.js +46 -0
  966. package/dist/hooks/use-resizable-drawer-width.js.map +1 -0
  967. package/dist/hooks/use-responder-url-secret.cjs +2 -0
  968. package/dist/hooks/use-responder-url-secret.cjs.map +1 -0
  969. package/dist/hooks/use-responder-url-secret.js +51 -0
  970. package/dist/hooks/use-responder-url-secret.js.map +1 -0
  971. package/dist/hooks/use-select-conversation-tab.cjs +1 -1
  972. package/dist/hooks/use-select-conversation-tab.cjs.map +1 -1
  973. package/dist/hooks/use-select-conversation-tab.d.ts +2 -0
  974. package/dist/hooks/use-select-conversation-tab.js +15 -7
  975. package/dist/hooks/use-select-conversation-tab.js.map +1 -1
  976. package/dist/hooks/use-tracking.cjs +1 -1
  977. package/dist/hooks/use-tracking.cjs.map +1 -1
  978. package/dist/hooks/use-tracking.d.ts +17 -0
  979. package/dist/hooks/use-tracking.js +10 -0
  980. package/dist/hooks/use-tracking.js.map +1 -1
  981. package/dist/hooks/use-websocket.cjs +1 -1
  982. package/dist/hooks/use-websocket.cjs.map +1 -1
  983. package/dist/hooks/use-websocket.d.ts +1 -2
  984. package/dist/hooks/use-websocket.js +58 -51
  985. package/dist/hooks/use-websocket.js.map +1 -1
  986. package/dist/i18n/declaration.cjs +1 -1
  987. package/dist/i18n/declaration.cjs.map +1 -1
  988. package/dist/i18n/declaration.d.ts +124 -43
  989. package/dist/i18n/declaration.js +1 -1
  990. package/dist/i18n/declaration.js.map +1 -1
  991. package/dist/i18n/translation.cjs +3 -3
  992. package/dist/i18n/translation.cjs.map +1 -1
  993. package/dist/i18n/translation.js +2091 -714
  994. package/dist/i18n/translation.js.map +1 -1
  995. package/dist/icons/check-circle.cjs +2 -0
  996. package/dist/icons/check-circle.cjs.map +1 -0
  997. package/dist/icons/check-circle.js +20 -0
  998. package/dist/icons/check-circle.js.map +1 -0
  999. package/dist/icons/chevron-down.cjs +2 -0
  1000. package/dist/icons/chevron-down.cjs.map +1 -0
  1001. package/dist/icons/chevron-down.js +20 -0
  1002. package/dist/icons/chevron-down.js.map +1 -0
  1003. package/dist/icons/clock.cjs +2 -0
  1004. package/dist/icons/clock.cjs.map +1 -0
  1005. package/dist/icons/clock.js +20 -0
  1006. package/dist/icons/clock.js.map +1 -0
  1007. package/dist/icons/exclamation-circle.cjs +2 -0
  1008. package/dist/icons/exclamation-circle.cjs.map +1 -0
  1009. package/dist/icons/exclamation-circle.js +20 -0
  1010. package/dist/icons/exclamation-circle.js.map +1 -0
  1011. package/dist/icons/kebab-vertical.cjs +2 -0
  1012. package/dist/icons/kebab-vertical.cjs.map +1 -0
  1013. package/dist/icons/kebab-vertical.js +14 -0
  1014. package/dist/icons/kebab-vertical.js.map +1 -0
  1015. package/dist/icons/key.cjs +2 -0
  1016. package/dist/icons/key.cjs.map +1 -0
  1017. package/dist/icons/key.js +21 -0
  1018. package/dist/icons/key.js.map +1 -0
  1019. package/dist/icons/message-square-share.cjs +2 -0
  1020. package/dist/icons/message-square-share.cjs.map +1 -0
  1021. package/dist/icons/message-square-share.js +22 -0
  1022. package/dist/icons/message-square-share.js.map +1 -0
  1023. package/dist/icons/play.cjs +2 -0
  1024. package/dist/icons/play.cjs.map +1 -0
  1025. package/dist/icons/play.js +19 -0
  1026. package/dist/icons/play.js.map +1 -0
  1027. package/dist/icons/power.cjs +2 -0
  1028. package/dist/icons/power.cjs.map +1 -0
  1029. package/dist/icons/power.js +20 -0
  1030. package/dist/icons/power.js.map +1 -0
  1031. package/dist/icons/sparkle.cjs +2 -0
  1032. package/dist/icons/sparkle.cjs.map +1 -0
  1033. package/dist/icons/sparkle.js +20 -0
  1034. package/dist/icons/sparkle.js.map +1 -0
  1035. package/dist/icons/trash.cjs +2 -0
  1036. package/dist/icons/trash.cjs.map +1 -0
  1037. package/dist/icons/trash.js +20 -0
  1038. package/dist/icons/trash.js.map +1 -0
  1039. package/dist/icons/x-circle.cjs +2 -0
  1040. package/dist/icons/x-circle.cjs.map +1 -0
  1041. package/dist/icons/x-circle.js +20 -0
  1042. package/dist/icons/x-circle.js.map +1 -0
  1043. package/dist/locales/ar/openhands.json +124 -43
  1044. package/dist/locales/ca/openhands.json +124 -43
  1045. package/dist/locales/de/openhands.json +124 -43
  1046. package/dist/locales/en/openhands.json +124 -43
  1047. package/dist/locales/es/openhands.json +124 -43
  1048. package/dist/locales/fr/openhands.json +124 -43
  1049. package/dist/locales/it/openhands.json +124 -43
  1050. package/dist/locales/ja/openhands.json +124 -43
  1051. package/dist/locales/ko-KR/openhands.json +124 -43
  1052. package/dist/locales/no/openhands.json +124 -43
  1053. package/dist/locales/pt/openhands.json +124 -43
  1054. package/dist/locales/tr/openhands.json +124 -43
  1055. package/dist/locales/uk/openhands.json +124 -43
  1056. package/dist/locales/zh-CN/openhands.json +124 -43
  1057. package/dist/locales/zh-TW/openhands.json +124 -43
  1058. package/dist/manifests/automation-insights.cjs +2 -0
  1059. package/dist/manifests/automation-insights.cjs.map +1 -0
  1060. package/dist/manifests/automation-insights.d.ts +2 -0
  1061. package/dist/manifests/automation-insights.js +9 -0
  1062. package/dist/manifests/automation-insights.js.map +1 -0
  1063. package/dist/manifests/automation-interface.cjs +1 -1
  1064. package/dist/manifests/automation-interface.cjs.map +1 -1
  1065. package/dist/manifests/automation-interface.d.ts +47 -31
  1066. package/dist/manifests/automation-interface.js +48 -54
  1067. package/dist/manifests/automation-interface.js.map +1 -1
  1068. package/dist/manifests/automation-setup.cjs +1 -1
  1069. package/dist/manifests/automation-setup.cjs.map +1 -1
  1070. package/dist/manifests/automation-setup.d.ts +37 -3
  1071. package/dist/manifests/automation-setup.js +16 -2
  1072. package/dist/manifests/automation-setup.js.map +1 -1
  1073. package/dist/manifests/interface-validation.cjs +1 -1
  1074. package/dist/manifests/interface-validation.cjs.map +1 -1
  1075. package/dist/manifests/interface-validation.js +56 -52
  1076. package/dist/manifests/interface-validation.js.map +1 -1
  1077. package/dist/manifests/manifest-actions.d.ts +5 -0
  1078. package/dist/manifests/manifest-bundle.d.ts +30 -0
  1079. package/dist/manifests/manifest-local-validation.d.ts +10 -1
  1080. package/dist/manifests/manifest-sources.cjs +1 -1
  1081. package/dist/manifests/manifest-sources.cjs.map +1 -1
  1082. package/dist/manifests/manifest-sources.js +3 -3
  1083. package/dist/manifests/manifest-sources.js.map +1 -1
  1084. package/dist/manifests/manifest-template.d.ts +14 -0
  1085. package/dist/manifests/manifest-validation.cjs +1 -1
  1086. package/dist/manifests/manifest-validation.cjs.map +1 -1
  1087. package/dist/manifests/manifest-validation.js +78 -45
  1088. package/dist/manifests/manifest-validation.js.map +1 -1
  1089. package/dist/manifests/types.cjs +1 -1
  1090. package/dist/manifests/types.cjs.map +1 -1
  1091. package/dist/manifests/types.d.ts +64 -3
  1092. package/dist/manifests/types.js +7 -6
  1093. package/dist/manifests/types.js.map +1 -1
  1094. package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.cjs +1 -1
  1095. package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.js +10 -10
  1096. package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.cjs +1 -1
  1097. package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.js +8 -8
  1098. package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.cjs +1 -1
  1099. package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.js +9 -9
  1100. package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs +4843 -0
  1101. package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs.map +1 -0
  1102. package/dist/node_modules/@openhands/extensions/automations/bundle-index.js +11 -0
  1103. package/dist/node_modules/@openhands/extensions/automations/bundle-index.js.map +1 -0
  1104. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs +13 -0
  1105. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs.map +1 -0
  1106. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js +87 -0
  1107. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js.map +1 -0
  1108. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +12 -0
  1109. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -0
  1110. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +98 -0
  1111. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -0
  1112. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +9 -7
  1113. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
  1114. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +32 -13
  1115. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
  1116. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +2 -2
  1117. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -1
  1118. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +29 -34
  1119. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -1
  1120. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs +3 -3
  1121. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs.map +1 -1
  1122. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js +2 -2
  1123. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js.map +1 -1
  1124. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs +14 -0
  1125. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs.map +1 -0
  1126. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js +72 -0
  1127. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js.map +1 -0
  1128. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
  1129. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
  1130. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +16 -10
  1131. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
  1132. package/dist/node_modules/@openhands/extensions/automations/index.cjs +1 -1
  1133. package/dist/node_modules/@openhands/extensions/automations/index.cjs.map +1 -1
  1134. package/dist/node_modules/@openhands/extensions/automations/index.js +18 -13
  1135. package/dist/node_modules/@openhands/extensions/automations/index.js.map +1 -1
  1136. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
  1137. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
  1138. package/dist/node_modules/@openhands/extensions/automations/interface.js +6 -2
  1139. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
  1140. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs +1 -1
  1141. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs.map +1 -1
  1142. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js +36 -3
  1143. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js.map +1 -1
  1144. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs +2 -0
  1145. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs.map +1 -0
  1146. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js +75 -0
  1147. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js.map +1 -0
  1148. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
  1149. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
  1150. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +68 -66
  1151. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
  1152. package/dist/node_modules/@openhands/extensions/skills/index.cjs +1002 -47
  1153. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  1154. package/dist/node_modules/@openhands/extensions/skills/index.js +59 -17
  1155. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  1156. package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs +2 -0
  1157. package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs.map +1 -0
  1158. package/dist/node_modules/lucide-react/dist/esm/icons/activity.js +9 -0
  1159. package/dist/node_modules/lucide-react/dist/esm/icons/activity.js.map +1 -0
  1160. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs +2 -0
  1161. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs.map +1 -0
  1162. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js +12 -0
  1163. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js.map +1 -0
  1164. package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs +2 -0
  1165. package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs.map +1 -0
  1166. package/dist/node_modules/lucide-react/dist/esm/icons/download.js +19 -0
  1167. package/dist/node_modules/lucide-react/dist/esm/icons/download.js.map +1 -0
  1168. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs +2 -0
  1169. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs.map +1 -0
  1170. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +27 -0
  1171. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +1 -0
  1172. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs +2 -0
  1173. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs.map +1 -0
  1174. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js +27 -0
  1175. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js.map +1 -0
  1176. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs +2 -0
  1177. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs.map +1 -0
  1178. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js +12 -0
  1179. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js.map +1 -0
  1180. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs +2 -0
  1181. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs.map +1 -0
  1182. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js +39 -0
  1183. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js.map +1 -0
  1184. package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs +2 -0
  1185. package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs.map +1 -0
  1186. package/dist/node_modules/lucide-react/dist/esm/icons/library.js +23 -0
  1187. package/dist/node_modules/lucide-react/dist/esm/icons/library.js.map +1 -0
  1188. package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs +2 -0
  1189. package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs.map +1 -0
  1190. package/dist/node_modules/lucide-react/dist/esm/icons/package.js +23 -0
  1191. package/dist/node_modules/lucide-react/dist/esm/icons/package.js.map +1 -0
  1192. package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs +2 -0
  1193. package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs.map +1 -0
  1194. package/dist/node_modules/lucide-react/dist/esm/icons/palette.js +39 -0
  1195. package/dist/node_modules/lucide-react/dist/esm/icons/palette.js.map +1 -0
  1196. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs +2 -0
  1197. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs.map +1 -0
  1198. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js +12 -0
  1199. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js.map +1 -0
  1200. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs +2 -0
  1201. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs.map +1 -0
  1202. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js +12 -0
  1203. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js.map +1 -0
  1204. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs +2 -0
  1205. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs.map +1 -0
  1206. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js +25 -0
  1207. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js.map +1 -0
  1208. package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs +2 -0
  1209. package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs.map +1 -0
  1210. package/dist/node_modules/lucide-react/dist/esm/icons/timer.js +27 -0
  1211. package/dist/node_modules/lucide-react/dist/esm/icons/timer.js.map +1 -0
  1212. package/dist/package.cjs +1 -1
  1213. package/dist/package.cjs.map +1 -1
  1214. package/dist/package.js +3 -3
  1215. package/dist/package.js.map +1 -1
  1216. package/dist/routes/app-settings.cjs +1 -1
  1217. package/dist/routes/app-settings.cjs.map +1 -1
  1218. package/dist/routes/app-settings.js +87 -85
  1219. package/dist/routes/app-settings.js.map +1 -1
  1220. package/dist/routes/commits-tab.cjs +1 -1
  1221. package/dist/routes/commits-tab.cjs.map +1 -1
  1222. package/dist/routes/commits-tab.js +27 -21
  1223. package/dist/routes/commits-tab.js.map +1 -1
  1224. package/dist/routes/conversation.cjs +1 -1
  1225. package/dist/routes/conversation.cjs.map +1 -1
  1226. package/dist/routes/conversation.js +56 -55
  1227. package/dist/routes/conversation.js.map +1 -1
  1228. package/dist/routes/files-tab.cjs +1 -1
  1229. package/dist/routes/files-tab.cjs.map +1 -1
  1230. package/dist/routes/files-tab.d.ts +4 -0
  1231. package/dist/routes/files-tab.js +121 -151
  1232. package/dist/routes/files-tab.js.map +1 -1
  1233. package/dist/routes/llm-settings.cjs +1 -1
  1234. package/dist/routes/llm-settings.cjs.map +1 -1
  1235. package/dist/routes/llm-settings.d.ts +9 -1
  1236. package/dist/routes/llm-settings.js +137 -107
  1237. package/dist/routes/llm-settings.js.map +1 -1
  1238. package/dist/routes/mcp.cjs +1 -1
  1239. package/dist/routes/mcp.cjs.map +1 -1
  1240. package/dist/routes/mcp.js +20 -20
  1241. package/dist/routes/secrets-settings.cjs +1 -1
  1242. package/dist/routes/secrets-settings.js +15 -15
  1243. package/dist/stores/conversation-store.cjs +1 -1
  1244. package/dist/stores/conversation-store.cjs.map +1 -1
  1245. package/dist/stores/conversation-store.d.ts +8 -1
  1246. package/dist/stores/conversation-store.js +9 -0
  1247. package/dist/stores/conversation-store.js.map +1 -1
  1248. package/dist/stores/files-tab-store.cjs +1 -1
  1249. package/dist/stores/files-tab-store.cjs.map +1 -1
  1250. package/dist/stores/files-tab-store.d.ts +13 -0
  1251. package/dist/stores/files-tab-store.js +49 -5
  1252. package/dist/stores/files-tab-store.js.map +1 -1
  1253. package/dist/stores/use-event-store.cjs +1 -1
  1254. package/dist/stores/use-event-store.cjs.map +1 -1
  1255. package/dist/stores/use-event-store.js +11 -11
  1256. package/dist/stores/use-event-store.js.map +1 -1
  1257. package/dist/types/agent-server/core/events/message-event.d.ts +2 -2
  1258. package/dist/types/automation.cjs +2 -0
  1259. package/dist/types/automation.cjs.map +1 -0
  1260. package/dist/types/automation.js +8 -0
  1261. package/dist/types/automation.js.map +1 -0
  1262. package/dist/utils/automation-catalog.cjs +1 -1
  1263. package/dist/utils/automation-catalog.cjs.map +1 -1
  1264. package/dist/utils/automation-catalog.d.ts +12 -0
  1265. package/dist/utils/automation-catalog.js +20 -1
  1266. package/dist/utils/automation-catalog.js.map +1 -1
  1267. package/dist/utils/automation-schedule.cjs +2 -0
  1268. package/dist/utils/automation-schedule.cjs.map +1 -0
  1269. package/dist/utils/automation-schedule.js +8 -0
  1270. package/dist/utils/automation-schedule.js.map +1 -0
  1271. package/dist/utils/automation-stack-section.cjs +2 -0
  1272. package/dist/utils/automation-stack-section.cjs.map +1 -0
  1273. package/dist/utils/automation-stack-section.d.ts +2 -0
  1274. package/dist/utils/automation-stack-section.js +6 -0
  1275. package/dist/utils/automation-stack-section.js.map +1 -0
  1276. package/dist/utils/constants.cjs +1 -1
  1277. package/dist/utils/constants.cjs.map +1 -1
  1278. package/dist/utils/constants.js +4 -0
  1279. package/dist/utils/constants.js.map +1 -1
  1280. package/dist/utils/conversation-local-storage.cjs +1 -1
  1281. package/dist/utils/conversation-local-storage.cjs.map +1 -1
  1282. package/dist/utils/conversation-local-storage.d.ts +17 -4
  1283. package/dist/utils/conversation-local-storage.js +111 -63
  1284. package/dist/utils/conversation-local-storage.js.map +1 -1
  1285. package/dist/utils/conversation-metrics.cjs +1 -1
  1286. package/dist/utils/conversation-metrics.cjs.map +1 -1
  1287. package/dist/utils/conversation-metrics.d.ts +3 -2
  1288. package/dist/utils/conversation-metrics.js +16 -14
  1289. package/dist/utils/conversation-metrics.js.map +1 -1
  1290. package/dist/utils/conversation-overview-project-scope.cjs +2 -0
  1291. package/dist/utils/conversation-overview-project-scope.cjs.map +1 -0
  1292. package/dist/utils/conversation-overview-project-scope.d.ts +16 -0
  1293. package/dist/utils/conversation-overview-project-scope.js +22 -0
  1294. package/dist/utils/conversation-overview-project-scope.js.map +1 -0
  1295. package/dist/utils/extension-module-card-classes.cjs +1 -1
  1296. package/dist/utils/extension-module-card-classes.cjs.map +1 -1
  1297. package/dist/utils/extension-module-card-classes.d.ts +1 -1
  1298. package/dist/utils/extension-module-card-classes.js +2 -2
  1299. package/dist/utils/extension-module-card-classes.js.map +1 -1
  1300. package/dist/utils/format-relative-time.cjs +2 -0
  1301. package/dist/utils/format-relative-time.cjs.map +1 -0
  1302. package/dist/utils/format-relative-time.js +17 -0
  1303. package/dist/utils/format-relative-time.js.map +1 -0
  1304. package/dist/utils/git-diff-stats.cjs +5 -0
  1305. package/dist/utils/git-diff-stats.cjs.map +1 -0
  1306. package/dist/utils/git-diff-stats.d.ts +9 -0
  1307. package/dist/utils/git-diff-stats.js +53 -0
  1308. package/dist/utils/git-diff-stats.js.map +1 -0
  1309. package/dist/utils/handle-event-for-ui.cjs +1 -1
  1310. package/dist/utils/handle-event-for-ui.cjs.map +1 -1
  1311. package/dist/utils/handle-event-for-ui.js +13 -11
  1312. package/dist/utils/handle-event-for-ui.js.map +1 -1
  1313. package/dist/utils/mcp-credential-validation.cjs +1 -1
  1314. package/dist/utils/mcp-credential-validation.js +3 -3
  1315. package/dist/utils/mcp-marketplace-utils.cjs +1 -1
  1316. package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
  1317. package/dist/utils/mcp-marketplace-utils.js +22 -9
  1318. package/dist/utils/mcp-marketplace-utils.js.map +1 -1
  1319. package/dist/utils/parse-git-remote-url.cjs +1 -1
  1320. package/dist/utils/parse-git-remote-url.cjs.map +1 -1
  1321. package/dist/utils/parse-git-remote-url.js +6 -7
  1322. package/dist/utils/parse-git-remote-url.js.map +1 -1
  1323. package/dist/utils/recommended-automation-rail.cjs +2 -0
  1324. package/dist/utils/recommended-automation-rail.cjs.map +1 -0
  1325. package/dist/utils/recommended-automation-rail.d.ts +22 -0
  1326. package/dist/utils/recommended-automation-rail.js +44 -0
  1327. package/dist/utils/recommended-automation-rail.js.map +1 -0
  1328. package/dist/utils/responder-deployment.cjs +2 -0
  1329. package/dist/utils/responder-deployment.cjs.map +1 -0
  1330. package/dist/utils/responder-deployment.js +42 -0
  1331. package/dist/utils/responder-deployment.js.map +1 -0
  1332. package/dist/utils/scroll-fade-state.cjs +2 -0
  1333. package/dist/utils/scroll-fade-state.cjs.map +1 -0
  1334. package/dist/utils/scroll-fade-state.d.ts +6 -0
  1335. package/dist/utils/scroll-fade-state.js +13 -0
  1336. package/dist/utils/scroll-fade-state.js.map +1 -0
  1337. package/dist/utils/skill-category.cjs +2 -0
  1338. package/dist/utils/skill-category.cjs.map +1 -0
  1339. package/dist/utils/skill-category.js +51 -0
  1340. package/dist/utils/skill-category.js.map +1 -0
  1341. package/dist/utils/skill-scope.cjs +1 -1
  1342. package/dist/utils/skill-scope.cjs.map +1 -1
  1343. package/dist/utils/skill-scope.js +1 -1
  1344. package/dist/utils/skill-scope.js.map +1 -1
  1345. package/dist/utils/streaming-delta-batcher.cjs +2 -0
  1346. package/dist/utils/streaming-delta-batcher.cjs.map +1 -0
  1347. package/dist/utils/streaming-delta-batcher.d.ts +21 -0
  1348. package/dist/utils/streaming-delta-batcher.js +31 -0
  1349. package/dist/utils/streaming-delta-batcher.js.map +1 -0
  1350. package/dist/utils/tar-gzip.d.ts +26 -0
  1351. package/dist/utils/utils.cjs +1 -1
  1352. package/dist/utils/utils.cjs.map +1 -1
  1353. package/dist/utils/utils.d.ts +1 -41
  1354. package/dist/utils/utils.js +27 -6
  1355. package/dist/utils/utils.js.map +1 -1
  1356. package/dist/utils/websocket-handshake.cjs +2 -0
  1357. package/dist/utils/websocket-handshake.cjs.map +1 -0
  1358. package/dist/utils/websocket-handshake.d.ts +11 -0
  1359. package/dist/utils/websocket-handshake.js +12 -0
  1360. package/dist/utils/websocket-handshake.js.map +1 -0
  1361. package/package.json +3 -3
  1362. package/scripts/check-translation-completeness.cjs +4 -0
  1363. package/scripts/dev-static.mjs +49 -43
  1364. package/scripts/dev-with-automation.mjs +13 -5
  1365. package/scripts/seed-automation-ux-data.mjs +810 -0
  1366. package/build/assets/acp-providers-CYy8qA2z.js +0 -1
  1367. package/build/assets/active-backend-context-BZDG15C0.js +0 -2
  1368. package/build/assets/agent-context-settings-DGWBBbcp.js +0 -1
  1369. package/build/assets/agent-profiles-settings-DrkGdf4_.js +0 -1
  1370. package/build/assets/agent-server-conversation-service.api-DK56YPTs.js +0 -86
  1371. package/build/assets/agent-settings-DfcSgkLD.js +0 -2
  1372. package/build/assets/agent-settings-Lrc5-twS.js +0 -1
  1373. package/build/assets/alert-banner-BgDHhL7b.js +0 -1
  1374. package/build/assets/api-error-message-BEIE_yD1.js +0 -1
  1375. package/build/assets/api-key-entry-screen-DaZnOlVo.js +0 -1
  1376. package/build/assets/app-settings-BG5NAUbC.js +0 -1
  1377. package/build/assets/automation-detail-D4Hs831Z.js +0 -3
  1378. package/build/assets/automation-export-n0X6FB0C.js +0 -2
  1379. package/build/assets/automation-git-sync-CDrm8WV7.js +0 -1
  1380. package/build/assets/automation-setup-route-CZCl4ONs.js +0 -1
  1381. package/build/assets/automation-templates-DFF96AdL.js +0 -1
  1382. package/build/assets/automations-list-Bl-oGOrV.js +0 -1
  1383. package/build/assets/back-nav-button-H_ThtDA0.js +0 -1
  1384. package/build/assets/backend-form-modal-CbCemvHt.js +0 -1
  1385. package/build/assets/backend-not-configured-DP8KLNq_.js +0 -1
  1386. package/build/assets/backend-synced-settings-badge-BBASWqsb.js +0 -1
  1387. package/build/assets/badge-B-51h-SW.js +0 -1
  1388. package/build/assets/base-modal-BbjycA8X.js +0 -1
  1389. package/build/assets/bot-CGPCg03p.js +0 -1
  1390. package/build/assets/brand-button-Blxv5nww.js +0 -1
  1391. package/build/assets/browser-CuW0nWvh.js +0 -7
  1392. package/build/assets/browser-tab-D5G0ORwt.js +0 -1
  1393. package/build/assets/chat-send-button-BD2tii1r.js +0 -1
  1394. package/build/assets/check-DSuS-lyr.js +0 -1
  1395. package/build/assets/chevron-down-CgGcmtE2.js +0 -1
  1396. package/build/assets/circle-check-CG5-NPw7.js +0 -1
  1397. package/build/assets/circle-plus-check-toggle-ASbpB8vN.js +0 -1
  1398. package/build/assets/cloud-funnel-analytics-GlCUG0gk.js +0 -1
  1399. package/build/assets/cog-CZiR80uT.js +0 -1
  1400. package/build/assets/combobox-caret-DvpEsh2O.js +0 -1
  1401. package/build/assets/command-menu-DwUQzjYP.js +0 -1
  1402. package/build/assets/condenser-settings-BptcoiLA.js +0 -1
  1403. package/build/assets/confirmation-modal-CiEwxZAA.js +0 -1
  1404. package/build/assets/context-menu-list-item-CdcamfM1.js +0 -1
  1405. package/build/assets/conversation-DREHj4nT.js +0 -1
  1406. package/build/assets/conversation-DotRfiDz.js +0 -90
  1407. package/build/assets/conversation-panel-DREHj4nT.js +0 -1
  1408. package/build/assets/conversation-state-store-DMLtlHbE.js +0 -1
  1409. package/build/assets/conversation-store-Blc5xysY.js +0 -6
  1410. package/build/assets/conversation-tab-empty-state-D-puECpY.js +0 -1
  1411. package/build/assets/copy-to-clipboard-button-BGxcUbgy.js +0 -1
  1412. package/build/assets/device-verify-CZJfWaJf.js +0 -1
  1413. package/build/assets/dropdown-classes-tLhpwtxS.js +0 -1
  1414. package/build/assets/entry.client-D8GnI6GZ.js +0 -2
  1415. package/build/assets/enum-filter-dropdown-Fk8k60nk.js +0 -1
  1416. package/build/assets/environment-switch-overlay-DeztVYuL.js +0 -1
  1417. package/build/assets/extension-module-card-classes-Bo43vY5V.js +0 -1
  1418. package/build/assets/extensions-hub-Cd6GCYzq.js +0 -1
  1419. package/build/assets/extensions-navigation-C4sgZg-y.js +0 -1
  1420. package/build/assets/external-link-C0UpBgsE.js +0 -1
  1421. package/build/assets/file-text-C6WYtNdV.js +0 -1
  1422. package/build/assets/files-tab-BW_qzyAm.js +0 -1
  1423. package/build/assets/form-control-classes-CGXBLcn1.js +0 -1
  1424. package/build/assets/format-relative-time-ZhQD4rsl.js +0 -1
  1425. package/build/assets/git-provider-icon-CaQ1yLPi.js +0 -1
  1426. package/build/assets/git-repo-dropdown-CgXR6M_E.js +0 -1
  1427. package/build/assets/git-repo-dropdown-D2Uei3CO.js +0 -1
  1428. package/build/assets/highlighted-source-view-C_YOp8Fo.js +0 -1
  1429. package/build/assets/home-DNzzJcMP.js +0 -1
  1430. package/build/assets/home-aCos-5vc.js +0 -1
  1431. package/build/assets/home-store-DgzViC3f.js +0 -1
  1432. package/build/assets/index-home-DNzzJcMP.js +0 -1
  1433. package/build/assets/info-CLoC1LRo.js +0 -1
  1434. package/build/assets/install-server-modal-D7zIqNKz.js +0 -1
  1435. package/build/assets/kebab-menu-item-content-DERMdnDv.js +0 -1
  1436. package/build/assets/launch-5PjKeLak.js +0 -1
  1437. package/build/assets/list-todo-BF049YaY.js +0 -1
  1438. package/build/assets/llm-not-configured-banner-BK9z5eS0.js +0 -27
  1439. package/build/assets/llm-settings-BLAMK2tR.js +0 -1
  1440. package/build/assets/llm-settings-BWsbarGM.js +0 -1
  1441. package/build/assets/llm-subscription-service-SfnEV9Uc.js +0 -1
  1442. package/build/assets/loader-circle-D7IagAyF.js +0 -1
  1443. package/build/assets/loading-spinner-DBgXgra0.js +0 -1
  1444. package/build/assets/manage-backends-modal-BTqNPhzc.js +0 -1
  1445. package/build/assets/manifest-abebca3c.js +0 -1
  1446. package/build/assets/manifest-subpage-layout-Rn-glaxV.js +0 -1
  1447. package/build/assets/map-provider-BK4HnqYz.js +0 -1
  1448. package/build/assets/markdown-renderer-Cp6DlHQN.js +0 -8
  1449. package/build/assets/mcp-BC-Ixn4T.js +0 -9
  1450. package/build/assets/mcp-marketplace-utils-BJWJgbB6.js +0 -1
  1451. package/build/assets/messages-CzFKrzPG.js +0 -40
  1452. package/build/assets/modal-body-BdKfD3Hl.js +0 -1
  1453. package/build/assets/modal-classes-D5_b5vMi.js +0 -1
  1454. package/build/assets/modal-close-button-objukxk_.js +0 -1
  1455. package/build/assets/mouse-pointer-click-C_gXyLyD.js +0 -1
  1456. package/build/assets/npm-CHVHV1MC.js +0 -1
  1457. package/build/assets/onboarding-Diw0V51A.js +0 -1
  1458. package/build/assets/onboarding-modal-Da4yHzsA.js +0 -1
  1459. package/build/assets/organization-service.api-BztSy69u.js +0 -1
  1460. package/build/assets/parse-git-remote-url-BkXN9jzl.js +0 -1
  1461. package/build/assets/pencil-49avMHlD.js +0 -1
  1462. package/build/assets/planner-tab-CJiSpNax.js +0 -1
  1463. package/build/assets/plugins-management-service-lHdNKWNU.js +0 -1
  1464. package/build/assets/plus-C0BagBpV.js +0 -1
  1465. package/build/assets/profiles-service.api-BLr7FXec.js +0 -1
  1466. package/build/assets/providers-CWXnb7S3.js +0 -1
  1467. package/build/assets/proxy-DYDXxtje.js +0 -1
  1468. package/build/assets/puzzle-Bt2B1rzf.js +0 -1
  1469. package/build/assets/recommended-automations-launcher-CcFMfJRR.js +0 -1
  1470. package/build/assets/refresh-cw-nmcesifB.js +0 -1
  1471. package/build/assets/root-CT4t7apy.css +0 -1
  1472. package/build/assets/root-DnRgLKpU.js +0 -2
  1473. package/build/assets/root-layout-2L9tr-BN.js +0 -2
  1474. package/build/assets/schema-field-C59lVZTA.js +0 -1
  1475. package/build/assets/sdk-section-page-BbBEQQjq.js +0 -1
  1476. package/build/assets/search-CYSDBczG.js +0 -1
  1477. package/build/assets/secrets-service-BtsgYSlj.js +0 -1
  1478. package/build/assets/secrets-settings-DJ0OKa4_.js +0 -1
  1479. package/build/assets/segmented-toggle-DiVfTZuN.js +0 -1
  1480. package/build/assets/settings-CDqL_Uqh.js +0 -1
  1481. package/build/assets/settings-dropdown-input-Ba1UN5Du.js +0 -1
  1482. package/build/assets/settings-index-Cz2cKt2K.js +0 -1
  1483. package/build/assets/settings-input-CWUEHHvS.js +0 -1
  1484. package/build/assets/settings-list-classes-DdcLXDGn.js +0 -1
  1485. package/build/assets/settings-modal-nEEK1Kh1.js +0 -1
  1486. package/build/assets/settings-service.api-3yAUFcaP.js +0 -1
  1487. package/build/assets/settings-switch-Dk9hChx1.js +0 -1
  1488. package/build/assets/settings-utils-CxjtCSB3.js +0 -1
  1489. package/build/assets/shared-conversation-DbAcrx3s.js +0 -1
  1490. package/build/assets/shield-check-CiOTXxV2.js +0 -1
  1491. package/build/assets/sidebar-layout-lrfPooIB.js +0 -1
  1492. package/build/assets/sidebar-mobile-menu-toggle-KERXfNu1.js +0 -1
  1493. package/build/assets/sidebar-nav-link-B8lFD6Cb.js +0 -1
  1494. package/build/assets/sidebar-store-u6pUpxJ7.js +0 -1
  1495. package/build/assets/skill-card-pill-row-dGIUzr_b.js +0 -1
  1496. package/build/assets/skill-icon-badge-kkOWZ89w.js +0 -1
  1497. package/build/assets/skill-scope-DWN1PBPH.js +0 -1
  1498. package/build/assets/skills-plugins-DFjH2Nq6.js +0 -1
  1499. package/build/assets/skills-settings-DIHpl3ol.js +0 -2
  1500. package/build/assets/sparkles-ntyMLnbj.js +0 -1
  1501. package/build/assets/styled-tooltip-B6JXcsmL.js +0 -1
  1502. package/build/assets/task-list-tab-aEJzEcHD.js +0 -1
  1503. package/build/assets/terminal-Dch7Ty5K.js +0 -3
  1504. package/build/assets/toggle-switch-B2MLKsgt.js +0 -1
  1505. package/build/assets/trash-2-yZnDM4Ji.js +0 -1
  1506. package/build/assets/typography-DB5HoCk0.js +0 -1
  1507. package/build/assets/usage-tab-DrEtBmBT.js +0 -1
  1508. package/build/assets/use-acp-credential-form-c8KXAa8A.js +0 -1
  1509. package/build/assets/use-activate-agent-profile-B0p34N3q.js +0 -1
  1510. package/build/assets/use-agent-profiles-CPIc6wLH.js +0 -1
  1511. package/build/assets/use-can-manage-org-profiles-Dz_8Eqkv.js +0 -1
  1512. package/build/assets/use-cloud-current-user-id-DvUVqCle.js +0 -1
  1513. package/build/assets/use-config-C3PO4TBw.js +0 -1
  1514. package/build/assets/use-create-conversation-DVrA_uLD.js +0 -1
  1515. package/build/assets/use-create-secret-DbBIpaCR.js +0 -1
  1516. package/build/assets/use-get-secrets-6PBitf54.js +0 -1
  1517. package/build/assets/use-has-permission-CQ31Cl8j.js +0 -1
  1518. package/build/assets/use-is-authed-2UrDIziV.js +0 -1
  1519. package/build/assets/use-is-creating-conversation-BvYpmb3v.js +0 -1
  1520. package/build/assets/use-launch-skill-in-chat-COnDpxCQ.js +0 -1
  1521. package/build/assets/use-llm-profiles-diZS4FiN.js +0 -1
  1522. package/build/assets/use-manifest-capabilities-HIWCtIUm.js +0 -1
  1523. package/build/assets/use-onboarding-completion-Bs8PcXik.js +0 -1
  1524. package/build/assets/use-plugins-marketplace-BCuNLFsr.js +0 -1
  1525. package/build/assets/use-save-agent-profile-BaMNSpBV.js +0 -1
  1526. package/build/assets/use-save-settings-BahvC2Gw.js +0 -1
  1527. package/build/assets/use-settings-C6ZxpBDX.js +0 -1
  1528. package/build/assets/use-settings-nav-items-Bqn69Ggw.js +0 -16
  1529. package/build/assets/use-tracking-Bhu7gk2y.js +0 -3
  1530. package/build/assets/use-user-conversation-BkNXpXrd.js +0 -1
  1531. package/build/assets/useInfiniteQuery-c_OmS3lK.js +0 -1
  1532. package/build/assets/useMutation-6ZsQCqAn.js +0 -1
  1533. package/build/assets/useQueries-xDrGlTO_.js +0 -1
  1534. package/build/assets/useQuery-Bs5NFz2s.js +0 -1
  1535. package/build/assets/utils-DUD5ScdA.js +0 -1
  1536. package/build/assets/vendor~browser-B-fae1JU.js +0 -47
  1537. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-D87mAf6K.js +0 -186
  1538. package/build/assets/vendor~files-tab-B6POTS66.js +0 -11
  1539. package/build/assets/vendor~index-home~home~conversation-panel~conversation-53Q_U6uP.js +0 -13
  1540. package/build/assets/vendor~root-layout-DeQACFVA.js +0 -1
  1541. package/build/assets/vendor~root-layout~conversation-panel~conversation-bv7ooVgH.js +0 -1
  1542. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-e8pX05xf.js +0 -1
  1543. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-BvS6PCK2.js +0 -1
  1544. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js +0 -1
  1545. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-DOPLJMH9.js +0 -48
  1546. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz8NQve5.js +0 -1
  1547. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-BOVIFA_g.js +0 -73
  1548. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-C0JXQb_q.js +0 -7465
  1549. package/build/assets/verification-settings-COueVXmM.js +0 -1
  1550. package/build/assets/wrench-C95ujnYo.js +0 -1
  1551. package/build/assets/x-86ZCfxKY.js +0 -1
  1552. package/build/assets/zap-DRa-r-Tf.js +0 -1
  1553. package/dist/components/features/diff-viewer/empty-changes-message.cjs +0 -2
  1554. package/dist/components/features/diff-viewer/empty-changes-message.cjs.map +0 -1
  1555. package/dist/components/features/diff-viewer/empty-changes-message.js +0 -17
  1556. package/dist/components/features/diff-viewer/empty-changes-message.js.map +0 -1
  1557. package/dist/components/features/tips/random-tip.cjs +0 -2
  1558. package/dist/components/features/tips/random-tip.cjs.map +0 -1
  1559. package/dist/components/features/tips/random-tip.js +0 -41
  1560. package/dist/components/features/tips/random-tip.js.map +0 -1
  1561. package/dist/hooks/query/use-has-git-commits.cjs +0 -2
  1562. package/dist/hooks/query/use-has-git-commits.cjs.map +0 -1
  1563. package/dist/hooks/query/use-has-git-commits.d.ts +0 -25
  1564. package/dist/hooks/query/use-has-git-commits.js +0 -31
  1565. package/dist/hooks/query/use-has-git-commits.js.map +0 -1
  1566. package/dist/hooks/use-has-attached-source.cjs +0 -2
  1567. package/dist/hooks/use-has-attached-source.cjs.map +0 -1
  1568. package/dist/hooks/use-has-attached-source.d.ts +0 -18
  1569. package/dist/hooks/use-has-attached-source.js +0 -14
  1570. package/dist/hooks/use-has-attached-source.js.map +0 -1
  1571. package/dist/icons/chveron-up.cjs +0 -2
  1572. package/dist/icons/chveron-up.cjs.map +0 -1
  1573. package/dist/icons/chveron-up.js +0 -21
  1574. package/dist/icons/chveron-up.js.map +0 -1
  1575. package/dist/routes/changes-tab.cjs +0 -2
  1576. package/dist/routes/changes-tab.cjs.map +0 -1
  1577. package/dist/routes/changes-tab.d.ts +0 -3
  1578. package/dist/routes/changes-tab.js +0 -64
  1579. package/dist/routes/changes-tab.js.map +0 -1
  1580. package/dist/utils/file-priority.cjs +0 -2
  1581. package/dist/utils/file-priority.cjs.map +0 -1
  1582. package/dist/utils/file-priority.d.ts +0 -27
  1583. package/dist/utils/file-priority.js +0 -61
  1584. package/dist/utils/file-priority.js.map +0 -1
  1585. package/dist/utils/table-row-classes.d.ts +0 -9
  1586. package/dist/utils/tips.cjs +0 -2
  1587. package/dist/utils/tips.cjs.map +0 -1
  1588. package/dist/utils/tips.js +0 -45
  1589. package/dist/utils/tips.js.map +0 -1
  1590. /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dcc51rps-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew3u153i-rfV8mQ9m.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"constants.cjs","names":[],"sources":["../../src/utils/constants.ts"],"sourcesContent":["import { SlashCommandItem } from \"#/hooks/chat/use-slash-command\";\n\nexport const JSON_VIEW_THEME = {\n base00: \"transparent\", // background\n base01: \"var(--cool-grey-900)\", // lighter background\n base02: \"var(--cool-grey-700)\", // selection background\n base03: \"var(--cool-grey-600)\", // comments, invisibles\n base04: \"var(--cool-grey-500)\", // dark foreground\n base05: \"var(--cool-grey-200)\", // default foreground\n base06: \"var(--cool-grey-100)\", // light foreground\n base07: \"#ffffff\", // light background\n base08: \"#ff5370\", // variables, red\n base09: \"#f78c6c\", // integers, orange\n base0A: \"#ffcb6b\", // booleans, yellow\n base0B: \"#c3e88d\", // strings, green\n base0C: \"#89ddff\", // support, cyan\n base0D: \"#82aaff\", // functions, blue\n base0E: \"#c792ea\", // keywords, purple\n base0F: \"#ff5370\", // deprecated, red\n};\n\nexport const PRODUCT_URL = {\n PRODUCTION: \"https://app.all-hands.dev\",\n};\n\nexport const SETTINGS_FORM = {\n LABEL_CLASSNAME: \"text-[11px] font-medium leading-4 tracking-[0.11px]\",\n};\n\n// Chat input constants\nexport const CHAT_INPUT = {\n HEIGHT_THRESHOLD: 100, // Height in pixels when suggestions should be hidden\n};\n\n// UI tolerance constants\nexport const EPS = 1.5; // px tolerance for \"near min\" height comparisons\n\n/** The /btw slash command — asks a side question via the ask_agent endpoint. */\nexport const BTW_COMMAND = \"/btw\";\n\n/** The /model slash command — lists or switches the conversation's LLM profile. */\nexport const MODEL_COMMAND = \"/model\";\n\n/** The /goal slash command — drives the agent toward an objective, judging completion each round. */\nexport const GOAL_COMMAND = \"/goal\";\n\n/** Built-in slash commands surfaced in the menu for V1 conversations. */\nexport const BUILT_IN_COMMANDS: SlashCommandItem[] = [\n {\n skill: {\n name: \"new\",\n type: \"agentskills\",\n content: \"Creates a new conversation using the same runtime\",\n triggers: [\"/new\"],\n },\n command: \"/new\",\n },\n {\n skill: {\n name: \"btw\",\n type: \"agentskills\",\n content: \"Ask the agent a side question without derailing the main task\",\n triggers: [BTW_COMMAND],\n },\n command: BTW_COMMAND,\n },\n {\n skill: {\n name: \"model\",\n type: \"agentskills\",\n content:\n \"List saved LLM profiles, or switch the conversation LLM profile with /model <name>\",\n triggers: [MODEL_COMMAND],\n },\n command: MODEL_COMMAND,\n },\n {\n skill: {\n name: \"goal\",\n type: \"agentskills\",\n content:\n \"Drive the agent toward an objective until a judge says it's done — /goal <objective> or /goal --max <n> <objective>\",\n triggers: [GOAL_COMMAND],\n },\n command: GOAL_COMMAND,\n },\n];\n\n// Skill content metadata prefixes\nexport const METADATA_PREFIXES: readonly string[] = [\n \"The following information has been included\",\n \"It may or may not be relevant\",\n \"Skill location:\",\n \"(Use this path to resolve\",\n];\n"],"mappings":"6CAEA,IAAa,EAAkB,CAC7B,OAAQ,cACR,OAAQ,uBACR,OAAQ,uBACR,OAAQ,uBACR,OAAQ,uBACR,OAAQ,uBACR,OAAQ,uBACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,SACV,EAEa,EAAc,CACzB,WAAY,2BACd,EAEa,EAAgB,CAC3B,gBAAiB,qDACnB,EAGa,EAAa,CACxB,iBAAkB,GACpB,EAGa,EAAM,IAGN,EAAc,OAGd,EAAgB,SAGhB,EAAe,QAGf,EAAwC,CACnD,CACE,MAAO,CACL,KAAM,MACN,KAAM,cACN,QAAS,oDACT,SAAU,CAAC,MAAM,CACnB,EACA,QAAS,MACX,EACA,CACE,MAAO,CACL,KAAM,MACN,KAAM,cACN,QAAS,gEACT,SAAU,CAAC,CAAW,CACxB,EACA,QAAS,CACX,EACA,CACE,MAAO,CACL,KAAM,QACN,KAAM,cACN,QACE,qFACF,SAAU,CAAC,CAAa,CAC1B,EACA,QAAS,CACX,EACA,CACE,MAAO,CACL,KAAM,OACN,KAAM,cACN,QACE,sHACF,SAAU,CAAC,CAAY,CACzB,EACA,QAAS,CACX,CACF,EAGa,EAAuC,CAClD,8CACA,gCACA,kBACA,2BACF"}
1
+ {"version":3,"file":"constants.cjs","names":[],"sources":["../../src/utils/constants.ts"],"sourcesContent":["import { SlashCommandItem } from \"#/hooks/chat/use-slash-command\";\n\nexport const JSON_VIEW_THEME = {\n base00: \"transparent\", // background\n base01: \"var(--cool-grey-900)\", // lighter background\n base02: \"var(--cool-grey-700)\", // selection background\n base03: \"var(--cool-grey-600)\", // comments, invisibles\n base04: \"var(--cool-grey-500)\", // dark foreground\n base05: \"var(--cool-grey-200)\", // default foreground\n base06: \"var(--cool-grey-100)\", // light foreground\n base07: \"#ffffff\", // light background\n base08: \"#ff5370\", // variables, red\n base09: \"#f78c6c\", // integers, orange\n base0A: \"#ffcb6b\", // booleans, yellow\n base0B: \"#c3e88d\", // strings, green\n base0C: \"#89ddff\", // support, cyan\n base0D: \"#82aaff\", // functions, blue\n base0E: \"#c792ea\", // keywords, purple\n base0F: \"#ff5370\", // deprecated, red\n};\n\nexport const PRODUCT_URL = {\n PRODUCTION: \"https://app.all-hands.dev\",\n};\n\nexport const SETTINGS_FORM = {\n LABEL_CLASSNAME: \"text-[11px] font-medium leading-4 tracking-[0.11px]\",\n};\n\n// Chat input constants\nexport const CHAT_INPUT = {\n HEIGHT_THRESHOLD: 100, // Height in pixels when suggestions should be hidden\n};\n\n// UI tolerance constants\nexport const EPS = 1.5; // px tolerance for \"near min\" height comparisons\n\n/** The /btw slash command — asks a side question via the ask_agent endpoint. */\nexport const BTW_COMMAND = \"/btw\";\n\n/** The /model slash command — lists or switches the conversation's LLM profile. */\nexport const MODEL_COMMAND = \"/model\";\n\n/** The /goal slash command — drives the agent toward an objective, judging completion each round. */\nexport const GOAL_COMMAND = \"/goal\";\n\n/** Built-in slash commands surfaced in the menu for V1 conversations. */\nexport const BUILT_IN_COMMANDS: SlashCommandItem[] = [\n {\n skill: {\n name: \"new\",\n type: \"agentskills\",\n source: null,\n content: \"Creates a new conversation using the same runtime\",\n triggers: [\"/new\"],\n },\n command: \"/new\",\n },\n {\n skill: {\n name: \"btw\",\n type: \"agentskills\",\n source: null,\n content: \"Ask the agent a side question without derailing the main task\",\n triggers: [BTW_COMMAND],\n },\n command: BTW_COMMAND,\n },\n {\n skill: {\n name: \"model\",\n type: \"agentskills\",\n source: null,\n content:\n \"List saved LLM profiles, or switch the conversation LLM profile with /model <name>\",\n triggers: [MODEL_COMMAND],\n },\n command: MODEL_COMMAND,\n },\n {\n skill: {\n name: \"goal\",\n type: \"agentskills\",\n source: null,\n content:\n \"Drive the agent toward an objective until a judge says it's done — /goal <objective> or /goal --max <n> <objective>\",\n triggers: [GOAL_COMMAND],\n },\n command: GOAL_COMMAND,\n },\n];\n\n// Skill content metadata prefixes\nexport const METADATA_PREFIXES: readonly string[] = [\n \"The following information has been included\",\n \"It may or may not be relevant\",\n \"Skill location:\",\n \"(Use this path to resolve\",\n];\n"],"mappings":"6CAEA,IAAa,EAAkB,CAC7B,OAAQ,cACR,OAAQ,uBACR,OAAQ,uBACR,OAAQ,uBACR,OAAQ,uBACR,OAAQ,uBACR,OAAQ,uBACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,UACR,OAAQ,SACV,EAEa,EAAc,CACzB,WAAY,2BACd,EAEa,EAAgB,CAC3B,gBAAiB,qDACnB,EAGa,EAAa,CACxB,iBAAkB,GACpB,EAGa,EAAM,IAGN,EAAc,OAGd,EAAgB,SAGhB,EAAe,QAGf,EAAwC,CACnD,CACE,MAAO,CACL,KAAM,MACN,KAAM,cACN,OAAQ,KACR,QAAS,oDACT,SAAU,CAAC,MAAM,CACnB,EACA,QAAS,MACX,EACA,CACE,MAAO,CACL,KAAM,MACN,KAAM,cACN,OAAQ,KACR,QAAS,gEACT,SAAU,CAAC,CAAW,CACxB,EACA,QAAS,CACX,EACA,CACE,MAAO,CACL,KAAM,QACN,KAAM,cACN,OAAQ,KACR,QACE,qFACF,SAAU,CAAC,CAAa,CAC1B,EACA,QAAS,CACX,EACA,CACE,MAAO,CACL,KAAM,OACN,KAAM,cACN,OAAQ,KACR,QACE,sHACF,SAAU,CAAC,CAAY,CACzB,EACA,QAAS,CACX,CACF,EAGa,EAAuC,CAClD,8CACA,gCACA,kBACA,2BACF"}
@@ -21,6 +21,7 @@ var e = {
21
21
  skill: {
22
22
  name: "new",
23
23
  type: "agentskills",
24
+ source: null,
24
25
  content: "Creates a new conversation using the same runtime",
25
26
  triggers: ["/new"]
26
27
  },
@@ -30,6 +31,7 @@ var e = {
30
31
  skill: {
31
32
  name: "btw",
32
33
  type: "agentskills",
34
+ source: null,
33
35
  content: "Ask the agent a side question without derailing the main task",
34
36
  triggers: [a]
35
37
  },
@@ -39,6 +41,7 @@ var e = {
39
41
  skill: {
40
42
  name: "model",
41
43
  type: "agentskills",
44
+ source: null,
42
45
  content: "List saved LLM profiles, or switch the conversation LLM profile with /model <name>",
43
46
  triggers: [o]
44
47
  },
@@ -48,6 +51,7 @@ var e = {
48
51
  skill: {
49
52
  name: "goal",
50
53
  type: "agentskills",
54
+ source: null,
51
55
  content: "Drive the agent toward an objective until a judge says it's done — /goal <objective> or /goal --max <n> <objective>",
52
56
  triggers: [s]
53
57
  },
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../../src/utils/constants.ts"],"sourcesContent":["import { SlashCommandItem } from \"#/hooks/chat/use-slash-command\";\n\nexport const JSON_VIEW_THEME = {\n base00: \"transparent\", // background\n base01: \"var(--cool-grey-900)\", // lighter background\n base02: \"var(--cool-grey-700)\", // selection background\n base03: \"var(--cool-grey-600)\", // comments, invisibles\n base04: \"var(--cool-grey-500)\", // dark foreground\n base05: \"var(--cool-grey-200)\", // default foreground\n base06: \"var(--cool-grey-100)\", // light foreground\n base07: \"#ffffff\", // light background\n base08: \"#ff5370\", // variables, red\n base09: \"#f78c6c\", // integers, orange\n base0A: \"#ffcb6b\", // booleans, yellow\n base0B: \"#c3e88d\", // strings, green\n base0C: \"#89ddff\", // support, cyan\n base0D: \"#82aaff\", // functions, blue\n base0E: \"#c792ea\", // keywords, purple\n base0F: \"#ff5370\", // deprecated, red\n};\n\nexport const PRODUCT_URL = {\n PRODUCTION: \"https://app.all-hands.dev\",\n};\n\nexport const SETTINGS_FORM = {\n LABEL_CLASSNAME: \"text-[11px] font-medium leading-4 tracking-[0.11px]\",\n};\n\n// Chat input constants\nexport const CHAT_INPUT = {\n HEIGHT_THRESHOLD: 100, // Height in pixels when suggestions should be hidden\n};\n\n// UI tolerance constants\nexport const EPS = 1.5; // px tolerance for \"near min\" height comparisons\n\n/** The /btw slash command — asks a side question via the ask_agent endpoint. */\nexport const BTW_COMMAND = \"/btw\";\n\n/** The /model slash command — lists or switches the conversation's LLM profile. */\nexport const MODEL_COMMAND = \"/model\";\n\n/** The /goal slash command — drives the agent toward an objective, judging completion each round. */\nexport const GOAL_COMMAND = \"/goal\";\n\n/** Built-in slash commands surfaced in the menu for V1 conversations. */\nexport const BUILT_IN_COMMANDS: SlashCommandItem[] = [\n {\n skill: {\n name: \"new\",\n type: \"agentskills\",\n content: \"Creates a new conversation using the same runtime\",\n triggers: [\"/new\"],\n },\n command: \"/new\",\n },\n {\n skill: {\n name: \"btw\",\n type: \"agentskills\",\n content: \"Ask the agent a side question without derailing the main task\",\n triggers: [BTW_COMMAND],\n },\n command: BTW_COMMAND,\n },\n {\n skill: {\n name: \"model\",\n type: \"agentskills\",\n content:\n \"List saved LLM profiles, or switch the conversation LLM profile with /model <name>\",\n triggers: [MODEL_COMMAND],\n },\n command: MODEL_COMMAND,\n },\n {\n skill: {\n name: \"goal\",\n type: \"agentskills\",\n content:\n \"Drive the agent toward an objective until a judge says it's done — /goal <objective> or /goal --max <n> <objective>\",\n triggers: [GOAL_COMMAND],\n },\n command: GOAL_COMMAND,\n },\n];\n\n// Skill content metadata prefixes\nexport const METADATA_PREFIXES: readonly string[] = [\n \"The following information has been included\",\n \"It may or may not be relevant\",\n \"Skill location:\",\n \"(Use this path to resolve\",\n];\n"],"mappings":";AAEA,IAAa,IAAkB;CAC7B,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;AACV,GAEa,IAAc,EACzB,YAAY,4BACd,GAEa,IAAgB,EAC3B,iBAAiB,sDACnB,GAGa,IAAa,EACxB,kBAAkB,IACpB,GAGa,IAAM,KAGN,IAAc,QAGd,IAAgB,UAGhB,IAAe,SAGf,IAAwC;CACnD;EACE,OAAO;GACL,MAAM;GACN,MAAM;GACN,SAAS;GACT,UAAU,CAAC,MAAM;EACnB;EACA,SAAS;CACX;CACA;EACE,OAAO;GACL,MAAM;GACN,MAAM;GACN,SAAS;GACT,UAAU,CAAC,CAAW;EACxB;EACA,SAAS;CACX;CACA;EACE,OAAO;GACL,MAAM;GACN,MAAM;GACN,SACE;GACF,UAAU,CAAC,CAAa;EAC1B;EACA,SAAS;CACX;CACA;EACE,OAAO;GACL,MAAM;GACN,MAAM;GACN,SACE;GACF,UAAU,CAAC,CAAY;EACzB;EACA,SAAS;CACX;AACF,GAGa,IAAuC;CAClD;CACA;CACA;CACA;AACF"}
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../src/utils/constants.ts"],"sourcesContent":["import { SlashCommandItem } from \"#/hooks/chat/use-slash-command\";\n\nexport const JSON_VIEW_THEME = {\n base00: \"transparent\", // background\n base01: \"var(--cool-grey-900)\", // lighter background\n base02: \"var(--cool-grey-700)\", // selection background\n base03: \"var(--cool-grey-600)\", // comments, invisibles\n base04: \"var(--cool-grey-500)\", // dark foreground\n base05: \"var(--cool-grey-200)\", // default foreground\n base06: \"var(--cool-grey-100)\", // light foreground\n base07: \"#ffffff\", // light background\n base08: \"#ff5370\", // variables, red\n base09: \"#f78c6c\", // integers, orange\n base0A: \"#ffcb6b\", // booleans, yellow\n base0B: \"#c3e88d\", // strings, green\n base0C: \"#89ddff\", // support, cyan\n base0D: \"#82aaff\", // functions, blue\n base0E: \"#c792ea\", // keywords, purple\n base0F: \"#ff5370\", // deprecated, red\n};\n\nexport const PRODUCT_URL = {\n PRODUCTION: \"https://app.all-hands.dev\",\n};\n\nexport const SETTINGS_FORM = {\n LABEL_CLASSNAME: \"text-[11px] font-medium leading-4 tracking-[0.11px]\",\n};\n\n// Chat input constants\nexport const CHAT_INPUT = {\n HEIGHT_THRESHOLD: 100, // Height in pixels when suggestions should be hidden\n};\n\n// UI tolerance constants\nexport const EPS = 1.5; // px tolerance for \"near min\" height comparisons\n\n/** The /btw slash command — asks a side question via the ask_agent endpoint. */\nexport const BTW_COMMAND = \"/btw\";\n\n/** The /model slash command — lists or switches the conversation's LLM profile. */\nexport const MODEL_COMMAND = \"/model\";\n\n/** The /goal slash command — drives the agent toward an objective, judging completion each round. */\nexport const GOAL_COMMAND = \"/goal\";\n\n/** Built-in slash commands surfaced in the menu for V1 conversations. */\nexport const BUILT_IN_COMMANDS: SlashCommandItem[] = [\n {\n skill: {\n name: \"new\",\n type: \"agentskills\",\n source: null,\n content: \"Creates a new conversation using the same runtime\",\n triggers: [\"/new\"],\n },\n command: \"/new\",\n },\n {\n skill: {\n name: \"btw\",\n type: \"agentskills\",\n source: null,\n content: \"Ask the agent a side question without derailing the main task\",\n triggers: [BTW_COMMAND],\n },\n command: BTW_COMMAND,\n },\n {\n skill: {\n name: \"model\",\n type: \"agentskills\",\n source: null,\n content:\n \"List saved LLM profiles, or switch the conversation LLM profile with /model <name>\",\n triggers: [MODEL_COMMAND],\n },\n command: MODEL_COMMAND,\n },\n {\n skill: {\n name: \"goal\",\n type: \"agentskills\",\n source: null,\n content:\n \"Drive the agent toward an objective until a judge says it's done — /goal <objective> or /goal --max <n> <objective>\",\n triggers: [GOAL_COMMAND],\n },\n command: GOAL_COMMAND,\n },\n];\n\n// Skill content metadata prefixes\nexport const METADATA_PREFIXES: readonly string[] = [\n \"The following information has been included\",\n \"It may or may not be relevant\",\n \"Skill location:\",\n \"(Use this path to resolve\",\n];\n"],"mappings":";AAEA,IAAa,IAAkB;CAC7B,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;AACV,GAEa,IAAc,EACzB,YAAY,4BACd,GAEa,IAAgB,EAC3B,iBAAiB,sDACnB,GAGa,IAAa,EACxB,kBAAkB,IACpB,GAGa,IAAM,KAGN,IAAc,QAGd,IAAgB,UAGhB,IAAe,SAGf,IAAwC;CACnD;EACE,OAAO;GACL,MAAM;GACN,MAAM;GACN,QAAQ;GACR,SAAS;GACT,UAAU,CAAC,MAAM;EACnB;EACA,SAAS;CACX;CACA;EACE,OAAO;GACL,MAAM;GACN,MAAM;GACN,QAAQ;GACR,SAAS;GACT,UAAU,CAAC,CAAW;EACxB;EACA,SAAS;CACX;CACA;EACE,OAAO;GACL,MAAM;GACN,MAAM;GACN,QAAQ;GACR,SACE;GACF,UAAU,CAAC,CAAa;EAC1B;EACA,SAAS;CACX;CACA;EACE,OAAO;GACL,MAAM;GACN,MAAM;GACN,QAAQ;GACR,SACE;GACF,UAAU,CAAC,CAAY;EACzB;EACA,SAAS;CACX;AACF,GAGa,IAAuC;CAClD;CACA;CACA;CACA;AACF"}
@@ -1,2 +1,2 @@
1
- require("../_virtual/_rolldown/runtime.cjs");let e=require("react");var t={CONVERSATION_STATE:`conversation-state`,PENDING_TASK_DRAFT:`pending-task-draft`},n=`conversation-state-updated`,r={selectedTab:`files`,unpinnedTabs:[],conversationMode:`code`,subConversationTaskId:null,draftMessage:null,filesTabDiffView:null,filesTabContentViewMode:`rich`},i=new Set([`files`,`browser`,`terminal`,`planner`,`tasklist`,`usage`]),a=new Set([`editor`,`served`,`changes`,`app`,`vscode`]),o=new Set([`rich`,`plain`]);function s(e){let{rightPanelShown:t,...n}=e,r=n;if(r.selectedTab!=null&&(a.has(r.selectedTab)||!i.has(r.selectedTab))&&(r={...r},delete r.selectedTab),r.unpinnedTabs){let e=r.unpinnedTabs.filter(e=>!a.has(e));e.length!==r.unpinnedTabs.length&&(r={...r,unpinnedTabs:e})}return r.filesTabContentViewMode!=null&&!o.has(r.filesTabContentViewMode)&&(r={...r},delete r.filesTabContentViewMode),r}function c(e){return e.startsWith(`task-`)}function l(e){return e===``||c(e)}function u(e){if(l(e))return r;try{let n=`${t.CONVERSATION_STATE}-${e}`,i=localStorage.getItem(n);return i===null?r:{...r,...s(JSON.parse(i))}}catch{return r}}function d(e,r){if(!l(e))try{let i=`${t.CONVERSATION_STATE}-${e}`,a={...u(e),...r};localStorage.setItem(i,JSON.stringify(a)),typeof window<`u`&&window.dispatchEvent(new CustomEvent(n,{detail:{conversationId:e}}))}catch(e){console.warn(`Failed to set conversation localStorage`,e)}}function f(e){return`${t.PENDING_TASK_DRAFT}-${e}`}function p(e){if(!e)return null;try{let t=f(e),n=localStorage.getItem(t);return localStorage.removeItem(t),n}catch(e){return console.warn(`Failed to consume pending task draft`,e),null}}function m(e){try{let r=`${t.CONVERSATION_STATE}-${e}`;localStorage.removeItem(r),typeof window<`u`&&window.dispatchEvent(new CustomEvent(n,{detail:{conversationId:e}}))}catch(t){console.warn(`Failed to clear conversation localStorage`,e,t)}}function h(r){let[i,a]=(0,e.useState)(()=>u(r));(0,e.useEffect)(()=>{if(typeof window>`u`)return;let e=`${t.CONVERSATION_STATE}-${r}`,i=()=>{a(u(r))},o=t=>{t.key===e&&i()},s=e=>{e.detail?.conversationId===r&&i()};return i(),window.addEventListener(`storage`,o),window.addEventListener(n,s),()=>{window.removeEventListener(`storage`,o),window.removeEventListener(n,s)}},[r]);let o=e=>{if(l(r)){a(t=>({...t,...e}));return}d(r,e)};return{state:i,setSelectedTab:e=>o({selectedTab:e}),setUnpinnedTabs:e=>o({unpinnedTabs:e}),setConversationMode:e=>o({conversationMode:e}),setDraftMessage:e=>o({draftMessage:e}),setFilesTabDiffView:e=>o({filesTabDiffView:e}),setFilesTabContentViewMode:e=>o({filesTabContentViewMode:e})}}exports.clearConversationLocalStorage=m,exports.consumePendingTaskDraft=p,exports.getConversationState=u,exports.isTaskConversationId=c,exports.setConversationState=d,exports.useConversationLocalStorageState=h;
1
+ require("../_virtual/_rolldown/runtime.cjs");const e=require("../components/features/conversation/conversation-overview-sections.cjs");let t=require("react");var n={CONVERSATION_STATE:`conversation-state`,PENDING_TASK_DRAFT:`pending-task-draft`},r=`conversation-state-updated`,i={selectedTab:`files`,unpinnedTabs:[],unpinnedOverviewSections:[...e.DEFAULT_UNPINNED_OVERVIEW_SECTIONS],unpinnedOverviewGitParts:[...e.DEFAULT_UNPINNED_OVERVIEW_GIT_PARTS],conversationMode:`code`,subConversationTaskId:null,draftMessage:null,rightPanelShown:!1,filesTabDiffView:null,filesTabContentViewMode:`rich`,filesTabTreeVisible:!0,filesTabOpenPaths:[],filesTabSelectedPath:null},a=new Set([`files`,`commits`,`browser`,`terminal`,`planner`,`tasklist`,`usage`]),o=new Set([`editor`,`served`,`app`,`vscode`]),s=new Set([`rich`,`plain`]);function c(t){let n=t;if(n.selectedTab!=null&&(o.has(n.selectedTab)||n.selectedTab===`changes`||!a.has(n.selectedTab))){let e=n.selectedTab;n={...n},e===`changes`?n.selectedTab=`commits`:delete n.selectedTab}if(n.unpinnedTabs){let e=n.unpinnedTabs.filter(e=>e!==`changes`&&!o.has(e));e.length!==n.unpinnedTabs.length&&(n={...n,unpinnedTabs:e})}if(n.unpinnedOverviewSections){let t=n.unpinnedOverviewSections.filter(t=>e.VALID_CONVERSATION_OVERVIEW_SECTIONS.has(t));t.length!==n.unpinnedOverviewSections.length&&(n={...n,unpinnedOverviewSections:t})}if(n.unpinnedOverviewGitParts){let t=n.unpinnedOverviewGitParts.filter(t=>e.VALID_CONVERSATION_OVERVIEW_GIT_PARTS.has(t));t.length!==n.unpinnedOverviewGitParts.length&&(n={...n,unpinnedOverviewGitParts:t})}if(n.filesTabContentViewMode!=null&&!s.has(n.filesTabContentViewMode)&&(n={...n},delete n.filesTabContentViewMode),n.rightPanelShown!=null&&typeof n.rightPanelShown!=`boolean`&&(n={...n},delete n.rightPanelShown),n.filesTabTreeVisible!=null&&typeof n.filesTabTreeVisible!=`boolean`&&(n={...n},delete n.filesTabTreeVisible),n.filesTabOpenPaths!=null)if(!Array.isArray(n.filesTabOpenPaths))n={...n},delete n.filesTabOpenPaths;else{let e=n.filesTabOpenPaths.filter(e=>typeof e==`string`&&e.length>0);e.length!==n.filesTabOpenPaths.length&&(n={...n,filesTabOpenPaths:e})}return n.filesTabSelectedPath!=null&&typeof n.filesTabSelectedPath!=`string`&&(n={...n},delete n.filesTabSelectedPath),n}function l(e){return e.startsWith(`task-`)}function u(e){return e===``||l(e)}function d(e){if(u(e))return i;try{let t=`${n.CONVERSATION_STATE}-${e}`,r=localStorage.getItem(t);return r===null?i:{...i,...c(JSON.parse(r))}}catch{return i}}function f(e,t){if(!u(e))try{let i=`${n.CONVERSATION_STATE}-${e}`,a={...d(e),...t};localStorage.setItem(i,JSON.stringify(a)),typeof window<`u`&&window.dispatchEvent(new CustomEvent(r,{detail:{conversationId:e}}))}catch(e){console.warn(`Failed to set conversation localStorage`,e)}}function p(e){return`${n.PENDING_TASK_DRAFT}-${e}`}function m(e,t){if(e)try{localStorage.setItem(p(e),t)}catch(e){console.warn(`Failed to store pending task draft`,e)}}function h(e){if(!e)return null;try{let t=p(e),n=localStorage.getItem(t);return localStorage.removeItem(t),n}catch(e){return console.warn(`Failed to consume pending task draft`,e),null}}function g(e){try{let t=`${n.CONVERSATION_STATE}-${e}`;localStorage.removeItem(t),typeof window<`u`&&window.dispatchEvent(new CustomEvent(r,{detail:{conversationId:e}}))}catch(t){console.warn(`Failed to clear conversation localStorage`,e,t)}}function _(e){let[i,a]=(0,t.useState)(()=>d(e));(0,t.useEffect)(()=>{if(typeof window>`u`)return;let t=`${n.CONVERSATION_STATE}-${e}`,i=()=>{a(d(e))},o=e=>{e.key===t&&i()},s=t=>{t.detail?.conversationId===e&&i()};return i(),window.addEventListener(`storage`,o),window.addEventListener(r,s),()=>{window.removeEventListener(`storage`,o),window.removeEventListener(r,s)}},[e]);let o=t=>{if(u(e)){a(e=>({...e,...t}));return}f(e,t)};return{state:i,setSelectedTab:e=>o({selectedTab:e}),setUnpinnedTabs:e=>o({unpinnedTabs:e}),setUnpinnedOverviewSections:e=>o({unpinnedOverviewSections:e}),setUnpinnedOverviewGitParts:e=>o({unpinnedOverviewGitParts:e}),setConversationMode:e=>o({conversationMode:e}),setDraftMessage:e=>o({draftMessage:e}),setRightPanelShown:e=>o({rightPanelShown:e}),setFilesTabDiffView:e=>o({filesTabDiffView:e}),setFilesTabContentViewMode:e=>o({filesTabContentViewMode:e}),setFilesTabTreeVisible:e=>o({filesTabTreeVisible:e}),setFilesTabOpenState:(e,t)=>o({filesTabOpenPaths:e,filesTabSelectedPath:t})}}exports.clearConversationLocalStorage=g,exports.consumePendingTaskDraft=h,exports.getConversationState=d,exports.isTaskConversationId=l,exports.setConversationState=f,exports.setPendingTaskDraft=m,exports.useConversationLocalStorageState=_;
2
2
  //# sourceMappingURL=conversation-local-storage.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-local-storage.cjs","names":[],"sources":["../../src/utils/conversation-local-storage.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type {\n ConversationTab,\n ConversationMode,\n} from \"#/stores/conversation-store\";\nimport type { ViewMode } from \"#/components/features/files-tab/view-mode\";\n\nexport const LOCAL_STORAGE_KEYS = {\n CONVERSATION_STATE: \"conversation-state\",\n PENDING_TASK_DRAFT: \"pending-task-draft\",\n} as const;\n\nconst CONVERSATION_STATE_UPDATED_EVENT = \"conversation-state-updated\";\n\ntype ConversationStateUpdatedDetail = {\n conversationId: string;\n};\n\n/**\n * Consolidated conversation state stored in a single localStorage key.\n *\n * NOTE: the right-drawer open/closed state is intentionally *not* persisted\n * here. Users expect the drawer to start closed every time the app is\n * (re)loaded and only stay open when they opened it themselves during the\n * current session. That state lives in the in-memory Zustand\n * `useConversationStore` (`isRightPanelShown` / `hasRightPanelToggled`)\n * which survives in-app navigation but resets on full reloads. Older\n * builds wrote a `rightPanelShown` field into this blob; we accept and\n * silently ignore that field on read so we don't churn old localStorage.\n */\nexport interface ConversationState {\n selectedTab: ConversationTab | null;\n unpinnedTabs: string[];\n conversationMode: ConversationMode;\n subConversationTaskId: string | null;\n draftMessage: string | null;\n /**\n * User's persisted choice for the Files tab diff-vs-files toggle.\n * `null` means \"no explicit choice yet\" — the Files tab then falls back\n * to its repo-aware default (diff inside a git repo with commits, files\n * otherwise).\n */\n filesTabDiffView: boolean | null;\n /** User's persisted choice for the Files tab Rich/Plain content toggle. */\n filesTabContentViewMode: ViewMode;\n}\n\nconst DEFAULT_CONVERSATION_STATE: ConversationState = {\n selectedTab: \"files\",\n unpinnedTabs: [],\n conversationMode: \"code\",\n subConversationTaskId: null,\n draftMessage: null,\n filesTabDiffView: null,\n filesTabContentViewMode: \"rich\",\n};\n\nconst VALID_CONVERSATION_TABS: ReadonlySet<ConversationTab> = new Set([\n \"files\",\n \"browser\",\n \"terminal\",\n \"planner\",\n \"tasklist\",\n \"usage\",\n]);\n\n// Tab keys that *used to* exist and were removed during the Files tab\n// refactor. We strip these out of any persisted state on read so that\n// returning users don't keep ghost entries (in `selectedTab` or\n// `unpinnedTabs`) forever — the UI has no way to surface them again to\n// be re-pinned or re-selected. We deliberately use an explicit denylist\n// here rather than a strict \"whitelist against VALID_CONVERSATION_TABS\"\n// filter because `unpinnedTabs` is typed `string[]` and other parts of\n// the app legitimately store arbitrary tab keys in it (sub-conversation\n// tab ids etc.).\nconst REMOVED_CONVERSATION_TABS: ReadonlySet<string> = new Set([\n \"editor\",\n \"served\",\n \"changes\",\n \"app\",\n \"vscode\",\n]);\n\nconst VALID_VIEW_MODES: ReadonlySet<ViewMode> = new Set([\"rich\", \"plain\"]);\n\nfunction sanitizeStoredState(\n stored: Record<string, unknown>,\n): Partial<ConversationState> {\n // `rightPanelShown` is no longer part of the schema (the drawer's\n // open state is session-only) but old persisted blobs still carry it.\n // We just drop it on the way in — keeping it in `result` here would\n // pollute the merged `ConversationState` shape that consumers receive.\n const { rightPanelShown: _ignoredRightPanelShown, ...rest } = stored as {\n rightPanelShown?: unknown;\n } & Record<string, unknown>;\n let result: Partial<ConversationState> = rest as Partial<ConversationState>;\n\n if (\n result.selectedTab != null &&\n (REMOVED_CONVERSATION_TABS.has(result.selectedTab) ||\n !VALID_CONVERSATION_TABS.has(result.selectedTab as ConversationTab))\n ) {\n result = { ...result };\n delete result.selectedTab;\n }\n\n if (result.unpinnedTabs) {\n const filtered = result.unpinnedTabs.filter(\n (tab) => !REMOVED_CONVERSATION_TABS.has(tab),\n );\n if (filtered.length !== result.unpinnedTabs.length) {\n result = { ...result, unpinnedTabs: filtered };\n }\n }\n\n // Drop a corrupt/manually-edited `filesTabContentViewMode` so it falls\n // back to the typed default (\"rich\") instead of leaking a junk string\n // into ViewMode-typed consumers. TypeScript can't help us here — the\n // value comes from `JSON.parse(localStorage.getItem(...))` which is\n // unknown at runtime.\n if (\n result.filesTabContentViewMode != null &&\n !VALID_VIEW_MODES.has(result.filesTabContentViewMode)\n ) {\n result = { ...result };\n delete result.filesTabContentViewMode;\n }\n\n return result;\n}\n\n/**\n * Check if a conversation ID is a temporary task ID that should not be persisted.\n * Task IDs have the format \"task-{uuid}\" and are used during V1 conversation initialization.\n */\nexport function isTaskConversationId(conversationId: string): boolean {\n return conversationId.startsWith(\"task-\");\n}\n\n/**\n * Whether persistence should be skipped for this conversation id.\n *\n * Skips:\n * - empty string ids (callers outside of a conversation route, e.g.\n * rendered inside a unit test without a NavigationProvider)\n * - \"task-...\" ids used as placeholders during V1 conversation\n * initialization\n */\nfunction shouldSkipPersistence(conversationId: string): boolean {\n return conversationId === \"\" || isTaskConversationId(conversationId);\n}\n\n/**\n * Get the full conversation state from localStorage.\n */\nexport function getConversationState(\n conversationId: string,\n): ConversationState {\n if (shouldSkipPersistence(conversationId)) {\n return DEFAULT_CONVERSATION_STATE;\n }\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n const item = localStorage.getItem(key);\n if (item !== null) {\n return {\n ...DEFAULT_CONVERSATION_STATE,\n ...sanitizeStoredState(JSON.parse(item)),\n };\n }\n return DEFAULT_CONVERSATION_STATE;\n } catch {\n return DEFAULT_CONVERSATION_STATE;\n }\n}\n\n/**\n * Set the conversation state in localStorage, merging with existing state.\n */\nexport function setConversationState(\n conversationId: string,\n updates: Partial<ConversationState>,\n): void {\n if (shouldSkipPersistence(conversationId)) {\n return;\n }\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n const currentState = getConversationState(conversationId);\n const newState = { ...currentState, ...updates };\n localStorage.setItem(key, JSON.stringify(newState));\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent<ConversationStateUpdatedDetail>(\n CONVERSATION_STATE_UPDATED_EVENT,\n { detail: { conversationId } },\n ),\n );\n }\n } catch (err) {\n console.warn(\"Failed to set conversation localStorage\", err);\n }\n}\n\nfunction getPendingTaskDraftKey(taskId: string): string {\n return `${LOCAL_STORAGE_KEYS.PENDING_TASK_DRAFT}-${taskId}`;\n}\n\nexport function setPendingTaskDraft(\n taskId: string | null | undefined,\n draftMessage: string,\n): void {\n if (!taskId) return;\n try {\n localStorage.setItem(getPendingTaskDraftKey(taskId), draftMessage);\n } catch (err) {\n console.warn(\"Failed to store pending task draft\", err);\n }\n}\n\nexport function consumePendingTaskDraft(\n taskId: string | null | undefined,\n): string | null {\n if (!taskId) return null;\n try {\n const key = getPendingTaskDraftKey(taskId);\n const draft = localStorage.getItem(key);\n localStorage.removeItem(key);\n return draft;\n } catch (err) {\n console.warn(\"Failed to consume pending task draft\", err);\n return null;\n }\n}\n\nexport function clearConversationLocalStorage(conversationId: string) {\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n localStorage.removeItem(key);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent<ConversationStateUpdatedDetail>(\n CONVERSATION_STATE_UPDATED_EVENT,\n { detail: { conversationId } },\n ),\n );\n }\n } catch (err) {\n console.warn(\n \"Failed to clear conversation localStorage\",\n conversationId,\n err,\n );\n }\n}\n\n/**\n * React hook for conversation-scoped localStorage state.\n * Returns the full state and individual setters for each property.\n *\n * The right-drawer open state is deliberately not represented here —\n * see the note on `ConversationState` for the rationale.\n */\nexport function useConversationLocalStorageState(conversationId: string): {\n state: ConversationState;\n setSelectedTab: (tab: ConversationTab | null) => void;\n setUnpinnedTabs: (tabs: string[]) => void;\n setConversationMode: (mode: ConversationMode) => void;\n setDraftMessage: (message: string | null) => void;\n setFilesTabDiffView: (diffView: boolean | null) => void;\n setFilesTabContentViewMode: (mode: ViewMode) => void;\n} {\n const [state, setState] = useState<ConversationState>(() =>\n getConversationState(conversationId),\n );\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n\n const syncState = () => {\n setState(getConversationState(conversationId));\n };\n\n const handleStorage = (event: StorageEvent) => {\n if (event.key === key) {\n syncState();\n }\n };\n\n const handleConversationStateUpdated = (event: Event) => {\n const customEvent = event as CustomEvent<ConversationStateUpdatedDetail>;\n if (customEvent.detail?.conversationId === conversationId) {\n syncState();\n }\n };\n\n // Ensure this hook reflects latest state for the current conversation ID.\n syncState();\n\n window.addEventListener(\"storage\", handleStorage);\n window.addEventListener(\n CONVERSATION_STATE_UPDATED_EVENT,\n handleConversationStateUpdated,\n );\n\n return () => {\n window.removeEventListener(\"storage\", handleStorage);\n window.removeEventListener(\n CONVERSATION_STATE_UPDATED_EVENT,\n handleConversationStateUpdated,\n );\n };\n }, [conversationId]);\n\n const updateState = (updates: Partial<ConversationState>) => {\n if (shouldSkipPersistence(conversationId)) {\n // No durable storage for this id (empty / task placeholder), but the\n // hook is still useful as ephemeral in-memory state — update the\n // local React mirror directly so toggles in the UI behave normally\n // until a real conversation id arrives.\n setState((prev) => ({ ...prev, ...updates }));\n return;\n }\n setConversationState(conversationId, updates);\n };\n\n return {\n state,\n setSelectedTab: (tab) => updateState({ selectedTab: tab }),\n setUnpinnedTabs: (tabs) => updateState({ unpinnedTabs: tabs }),\n setConversationMode: (mode) => updateState({ conversationMode: mode }),\n setDraftMessage: (message) => updateState({ draftMessage: message }),\n setFilesTabDiffView: (diffView) =>\n updateState({ filesTabDiffView: diffView }),\n setFilesTabContentViewMode: (mode) =>\n updateState({ filesTabContentViewMode: mode }),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"conversation-local-storage.cjs","names":[],"sources":["../../src/utils/conversation-local-storage.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type {\n ConversationTab,\n ConversationMode,\n} from \"#/stores/conversation-store\";\nimport type { ViewMode } from \"#/components/features/files-tab/view-mode\";\nimport {\n DEFAULT_UNPINNED_OVERVIEW_GIT_PARTS,\n DEFAULT_UNPINNED_OVERVIEW_SECTIONS,\n VALID_CONVERSATION_OVERVIEW_GIT_PARTS,\n VALID_CONVERSATION_OVERVIEW_SECTIONS,\n} from \"#/components/features/conversation/conversation-overview-sections\";\n\nexport const LOCAL_STORAGE_KEYS = {\n CONVERSATION_STATE: \"conversation-state\",\n PENDING_TASK_DRAFT: \"pending-task-draft\",\n} as const;\n\nconst CONVERSATION_STATE_UPDATED_EVENT = \"conversation-state-updated\";\n\ntype ConversationStateUpdatedDetail = {\n conversationId: string;\n};\n\n/**\n * Consolidated conversation state stored in a single localStorage key.\n *\n * NOTE: the right-drawer open/closed state is intentionally *not* persisted\n * here. Users expect the drawer to start closed every time the app is\n * (re)loaded and only stay open when they opened it themselves during the\n * current session. That state lives in the in-memory Zustand\n * `useConversationStore` (`isRightPanelShown` / `hasRightPanelToggled`)\n * which survives in-app navigation but resets on full reloads. Older\n * builds wrote a `rightPanelShown` field into this blob; we accept and\n * silently ignore that field on read so we don't churn old localStorage.\n */\nexport interface ConversationState {\n selectedTab: ConversationTab | null;\n unpinnedTabs: string[];\n unpinnedOverviewSections?: string[];\n unpinnedOverviewGitParts?: string[];\n conversationMode: ConversationMode;\n subConversationTaskId: string | null;\n draftMessage: string | null;\n rightPanelShown?: boolean;\n /**\n * Legacy Files-tab Diff/Files toggle preference. Kept for blob\n * compatibility; the Files surface no longer hosts Diff/Commits\n * (those live in the sibling Commits conversation tab).\n */\n filesTabDiffView: boolean | null;\n /** User's persisted choice for the Files tab Rich/Plain content toggle. */\n filesTabContentViewMode: ViewMode;\n /** Whether the left-hand file tree is visible in the Files tab. */\n filesTabTreeVisible?: boolean;\n /** Open file tabs in the Files quick-row (basenames, closable). */\n filesTabOpenPaths?: string[];\n /** Currently selected path among `filesTabOpenPaths`, if any. */\n filesTabSelectedPath?: string | null;\n}\n\nconst DEFAULT_CONVERSATION_STATE: ConversationState = {\n selectedTab: \"files\",\n unpinnedTabs: [],\n unpinnedOverviewSections: [...DEFAULT_UNPINNED_OVERVIEW_SECTIONS],\n unpinnedOverviewGitParts: [...DEFAULT_UNPINNED_OVERVIEW_GIT_PARTS],\n conversationMode: \"code\",\n subConversationTaskId: null,\n draftMessage: null,\n rightPanelShown: false,\n filesTabDiffView: null,\n filesTabContentViewMode: \"rich\",\n filesTabTreeVisible: true,\n filesTabOpenPaths: [],\n filesTabSelectedPath: null,\n};\n\nconst VALID_CONVERSATION_TABS: ReadonlySet<ConversationTab> = new Set([\n \"files\",\n \"commits\",\n \"browser\",\n \"terminal\",\n \"planner\",\n \"tasklist\",\n \"usage\",\n]);\n\n// Tab keys that *used to* exist and were removed during the Files tab\n// refactor. We strip these out of any persisted state on read so that\n// returning users don't keep ghost entries (in `selectedTab` or\n// `unpinnedTabs`) forever — the UI has no way to surface them again to\n// be re-pinned or re-selected. We deliberately use an explicit denylist\n// here rather than a strict \"whitelist against VALID_CONVERSATION_TABS\"\n// filter because `unpinnedTabs` is typed `string[]` and other parts of\n// the app legitimately store arbitrary tab keys in it (sub-conversation\n// tab ids etc.).\nconst REMOVED_CONVERSATION_TABS: ReadonlySet<string> = new Set([\n \"editor\",\n \"served\",\n \"app\",\n \"vscode\",\n]);\n\nconst VALID_VIEW_MODES: ReadonlySet<ViewMode> = new Set([\"rich\", \"plain\"]);\n\nfunction sanitizeStoredState(\n stored: Record<string, unknown>,\n): Partial<ConversationState> {\n let result: Partial<ConversationState> = stored as Partial<ConversationState>;\n\n if (\n result.selectedTab != null &&\n (REMOVED_CONVERSATION_TABS.has(result.selectedTab) ||\n (result.selectedTab as string) === \"changes\" ||\n !VALID_CONVERSATION_TABS.has(result.selectedTab as ConversationTab))\n ) {\n const selectedTab = result.selectedTab as string;\n result = { ...result };\n if (selectedTab === \"changes\") {\n result.selectedTab = \"commits\";\n } else {\n delete result.selectedTab;\n }\n }\n\n if (result.unpinnedTabs) {\n const filtered = result.unpinnedTabs.filter(\n (tab) => tab !== \"changes\" && !REMOVED_CONVERSATION_TABS.has(tab),\n );\n if (filtered.length !== result.unpinnedTabs.length) {\n result = { ...result, unpinnedTabs: filtered };\n }\n }\n\n if (result.unpinnedOverviewSections) {\n const filtered = result.unpinnedOverviewSections.filter((section) =>\n VALID_CONVERSATION_OVERVIEW_SECTIONS.has(section),\n );\n if (filtered.length !== result.unpinnedOverviewSections.length) {\n result = { ...result, unpinnedOverviewSections: filtered };\n }\n }\n\n if (result.unpinnedOverviewGitParts) {\n const filtered = result.unpinnedOverviewGitParts.filter((part) =>\n VALID_CONVERSATION_OVERVIEW_GIT_PARTS.has(part),\n );\n if (filtered.length !== result.unpinnedOverviewGitParts.length) {\n result = { ...result, unpinnedOverviewGitParts: filtered };\n }\n }\n\n // Drop a corrupt/manually-edited `filesTabContentViewMode` so it falls\n // back to the typed default (\"rich\") instead of leaking a junk string\n // into ViewMode-typed consumers. TypeScript can't help us here — the\n // value comes from `JSON.parse(localStorage.getItem(...))` which is\n // unknown at runtime.\n if (\n result.filesTabContentViewMode != null &&\n !VALID_VIEW_MODES.has(result.filesTabContentViewMode)\n ) {\n result = { ...result };\n delete result.filesTabContentViewMode;\n }\n\n if (\n result.rightPanelShown != null &&\n typeof result.rightPanelShown !== \"boolean\"\n ) {\n result = { ...result };\n delete result.rightPanelShown;\n }\n\n if (\n result.filesTabTreeVisible != null &&\n typeof result.filesTabTreeVisible !== \"boolean\"\n ) {\n result = { ...result };\n delete result.filesTabTreeVisible;\n }\n\n if (result.filesTabOpenPaths != null) {\n if (!Array.isArray(result.filesTabOpenPaths)) {\n result = { ...result };\n delete result.filesTabOpenPaths;\n } else {\n const filtered = result.filesTabOpenPaths.filter(\n (path): path is string => typeof path === \"string\" && path.length > 0,\n );\n if (filtered.length !== result.filesTabOpenPaths.length) {\n result = { ...result, filesTabOpenPaths: filtered };\n }\n }\n }\n\n if (\n result.filesTabSelectedPath != null &&\n typeof result.filesTabSelectedPath !== \"string\"\n ) {\n result = { ...result };\n delete result.filesTabSelectedPath;\n }\n\n return result;\n}\n\n/**\n * Check if a conversation ID is a temporary task ID that should not be persisted.\n * Task IDs have the format \"task-{uuid}\" and are used during V1 conversation initialization.\n */\nexport function isTaskConversationId(conversationId: string): boolean {\n return conversationId.startsWith(\"task-\");\n}\n\n/**\n * Whether persistence should be skipped for this conversation id.\n *\n * Skips:\n * - empty string ids (callers outside of a conversation route, e.g.\n * rendered inside a unit test without a NavigationProvider)\n * - \"task-...\" ids used as placeholders during V1 conversation\n * initialization\n */\nfunction shouldSkipPersistence(conversationId: string): boolean {\n return conversationId === \"\" || isTaskConversationId(conversationId);\n}\n\n/**\n * Get the full conversation state from localStorage.\n */\nexport function getConversationState(\n conversationId: string,\n): ConversationState {\n if (shouldSkipPersistence(conversationId)) {\n return DEFAULT_CONVERSATION_STATE;\n }\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n const item = localStorage.getItem(key);\n if (item !== null) {\n return {\n ...DEFAULT_CONVERSATION_STATE,\n ...sanitizeStoredState(JSON.parse(item)),\n };\n }\n return DEFAULT_CONVERSATION_STATE;\n } catch {\n return DEFAULT_CONVERSATION_STATE;\n }\n}\n\n/**\n * Set the conversation state in localStorage, merging with existing state.\n */\nexport function setConversationState(\n conversationId: string,\n updates: Partial<ConversationState>,\n): void {\n if (shouldSkipPersistence(conversationId)) {\n return;\n }\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n const currentState = getConversationState(conversationId);\n const newState = { ...currentState, ...updates };\n localStorage.setItem(key, JSON.stringify(newState));\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent<ConversationStateUpdatedDetail>(\n CONVERSATION_STATE_UPDATED_EVENT,\n { detail: { conversationId } },\n ),\n );\n }\n } catch (err) {\n console.warn(\"Failed to set conversation localStorage\", err);\n }\n}\n\nfunction getPendingTaskDraftKey(taskId: string): string {\n return `${LOCAL_STORAGE_KEYS.PENDING_TASK_DRAFT}-${taskId}`;\n}\n\nexport function setPendingTaskDraft(\n taskId: string | null | undefined,\n draftMessage: string,\n): void {\n if (!taskId) return;\n try {\n localStorage.setItem(getPendingTaskDraftKey(taskId), draftMessage);\n } catch (err) {\n console.warn(\"Failed to store pending task draft\", err);\n }\n}\n\nexport function consumePendingTaskDraft(\n taskId: string | null | undefined,\n): string | null {\n if (!taskId) return null;\n try {\n const key = getPendingTaskDraftKey(taskId);\n const draft = localStorage.getItem(key);\n localStorage.removeItem(key);\n return draft;\n } catch (err) {\n console.warn(\"Failed to consume pending task draft\", err);\n return null;\n }\n}\n\nexport function clearConversationLocalStorage(conversationId: string) {\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n localStorage.removeItem(key);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent<ConversationStateUpdatedDetail>(\n CONVERSATION_STATE_UPDATED_EVENT,\n { detail: { conversationId } },\n ),\n );\n }\n } catch (err) {\n console.warn(\n \"Failed to clear conversation localStorage\",\n conversationId,\n err,\n );\n }\n}\n\n/**\n * React hook for conversation-scoped localStorage state.\n * Returns the full state and individual setters for each property.\n *\n * The right-drawer open state is deliberately not represented here —\n * see the note on `ConversationState` for the rationale.\n */\nexport function useConversationLocalStorageState(conversationId: string): {\n state: ConversationState;\n setSelectedTab: (tab: ConversationTab | null) => void;\n setUnpinnedTabs: (tabs: string[]) => void;\n setUnpinnedOverviewSections?: (sections: string[]) => void;\n setUnpinnedOverviewGitParts?: (parts: string[]) => void;\n setConversationMode: (mode: ConversationMode) => void;\n setDraftMessage: (message: string | null) => void;\n setRightPanelShown?: (shown: boolean) => void;\n setFilesTabDiffView: (diffView: boolean | null) => void;\n setFilesTabContentViewMode: (mode: ViewMode) => void;\n setFilesTabTreeVisible?: (visible: boolean) => void;\n setFilesTabOpenState?: (\n openPaths: string[],\n selectedPath: string | null,\n ) => void;\n} {\n const [state, setState] = useState<ConversationState>(() =>\n getConversationState(conversationId),\n );\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n\n const syncState = () => {\n setState(getConversationState(conversationId));\n };\n\n const handleStorage = (event: StorageEvent) => {\n if (event.key === key) {\n syncState();\n }\n };\n\n const handleConversationStateUpdated = (event: Event) => {\n const customEvent = event as CustomEvent<ConversationStateUpdatedDetail>;\n if (customEvent.detail?.conversationId === conversationId) {\n syncState();\n }\n };\n\n // Ensure this hook reflects latest state for the current conversation ID.\n syncState();\n\n window.addEventListener(\"storage\", handleStorage);\n window.addEventListener(\n CONVERSATION_STATE_UPDATED_EVENT,\n handleConversationStateUpdated,\n );\n\n return () => {\n window.removeEventListener(\"storage\", handleStorage);\n window.removeEventListener(\n CONVERSATION_STATE_UPDATED_EVENT,\n handleConversationStateUpdated,\n );\n };\n }, [conversationId]);\n\n const updateState = (updates: Partial<ConversationState>) => {\n if (shouldSkipPersistence(conversationId)) {\n // No durable storage for this id (empty / task placeholder), but the\n // hook is still useful as ephemeral in-memory state — update the\n // local React mirror directly so toggles in the UI behave normally\n // until a real conversation id arrives.\n setState((prev) => ({ ...prev, ...updates }));\n return;\n }\n setConversationState(conversationId, updates);\n };\n\n return {\n state,\n setSelectedTab: (tab) => updateState({ selectedTab: tab }),\n setUnpinnedTabs: (tabs) => updateState({ unpinnedTabs: tabs }),\n setUnpinnedOverviewSections: (sections) =>\n updateState({ unpinnedOverviewSections: sections }),\n setUnpinnedOverviewGitParts: (parts) =>\n updateState({ unpinnedOverviewGitParts: parts }),\n setConversationMode: (mode) => updateState({ conversationMode: mode }),\n setDraftMessage: (message) => updateState({ draftMessage: message }),\n setRightPanelShown: (shown) => updateState({ rightPanelShown: shown }),\n setFilesTabDiffView: (diffView) =>\n updateState({ filesTabDiffView: diffView }),\n setFilesTabContentViewMode: (mode) =>\n updateState({ filesTabContentViewMode: mode }),\n setFilesTabTreeVisible: (visible) =>\n updateState({ filesTabTreeVisible: visible }),\n setFilesTabOpenState: (openPaths, selectedPath) =>\n updateState({\n filesTabOpenPaths: openPaths,\n filesTabSelectedPath: selectedPath,\n }),\n };\n}\n"],"mappings":"8JAaA,IAAa,EAAqB,CAChC,mBAAoB,qBACpB,mBAAoB,oBACtB,EAEM,EAAmC,6BA2CnC,EAAgD,CACpD,YAAa,QACb,aAAc,CAAC,EACf,yBAA0B,CAAC,GAAG,EAAA,kCAAkC,EAChE,yBAA0B,CAAC,GAAG,EAAA,mCAAmC,EACjE,iBAAkB,OAClB,sBAAuB,KACvB,aAAc,KACd,gBAAiB,GACjB,iBAAkB,KAClB,wBAAyB,OACzB,oBAAqB,GACrB,kBAAmB,CAAC,EACpB,qBAAsB,IACxB,EAEM,EAAwD,IAAI,IAAI,CACpE,QACA,UACA,UACA,WACA,UACA,WACA,OACF,CAAC,EAWK,EAAiD,IAAI,IAAI,CAC7D,SACA,SACA,MACA,QACF,CAAC,EAEK,EAA0C,IAAI,IAAI,CAAC,OAAQ,OAAO,CAAC,EAEzE,SAAS,EACP,EAC4B,CAC5B,IAAI,EAAqC,EAEzC,GACE,EAAO,aAAe,OACrB,EAA0B,IAAI,EAAO,WAAW,GAC9C,EAAO,cAA2B,WACnC,CAAC,EAAwB,IAAI,EAAO,WAA8B,GACpE,CACA,IAAM,EAAc,EAAO,YAC3B,EAAS,CAAE,GAAG,CAAO,EACjB,IAAgB,UAClB,EAAO,YAAc,UAErB,OAAO,EAAO,WAElB,CAEA,GAAI,EAAO,aAAc,CACvB,IAAM,EAAW,EAAO,aAAa,OAClC,GAAQ,IAAQ,WAAa,CAAC,EAA0B,IAAI,CAAG,CAClE,EACI,EAAS,SAAW,EAAO,aAAa,SAC1C,EAAS,CAAE,GAAG,EAAQ,aAAc,CAAS,EAEjD,CAEA,GAAI,EAAO,yBAA0B,CACnC,IAAM,EAAW,EAAO,yBAAyB,OAAQ,GACvD,EAAA,qCAAqC,IAAI,CAAO,CAClD,EACI,EAAS,SAAW,EAAO,yBAAyB,SACtD,EAAS,CAAE,GAAG,EAAQ,yBAA0B,CAAS,EAE7D,CAEA,GAAI,EAAO,yBAA0B,CACnC,IAAM,EAAW,EAAO,yBAAyB,OAAQ,GACvD,EAAA,sCAAsC,IAAI,CAAI,CAChD,EACI,EAAS,SAAW,EAAO,yBAAyB,SACtD,EAAS,CAAE,GAAG,EAAQ,yBAA0B,CAAS,EAE7D,CA+BA,GAvBE,EAAO,yBAA2B,MAClC,CAAC,EAAiB,IAAI,EAAO,uBAAuB,IAEpD,EAAS,CAAE,GAAG,CAAO,EACrB,OAAO,EAAO,yBAId,EAAO,iBAAmB,MAC1B,OAAO,EAAO,iBAAoB,YAElC,EAAS,CAAE,GAAG,CAAO,EACrB,OAAO,EAAO,iBAId,EAAO,qBAAuB,MAC9B,OAAO,EAAO,qBAAwB,YAEtC,EAAS,CAAE,GAAG,CAAO,EACrB,OAAO,EAAO,qBAGZ,EAAO,mBAAqB,KAC9B,GAAI,CAAC,MAAM,QAAQ,EAAO,iBAAiB,EACzC,EAAS,CAAE,GAAG,CAAO,EACrB,OAAO,EAAO,sBACT,CACL,IAAM,EAAW,EAAO,kBAAkB,OACvC,GAAyB,OAAO,GAAS,UAAY,EAAK,OAAS,CACtE,EACI,EAAS,SAAW,EAAO,kBAAkB,SAC/C,EAAS,CAAE,GAAG,EAAQ,kBAAmB,CAAS,EAEtD,CAWF,OAPE,EAAO,sBAAwB,MAC/B,OAAO,EAAO,sBAAyB,WAEvC,EAAS,CAAE,GAAG,CAAO,EACrB,OAAO,EAAO,sBAGT,CACT,CAMA,SAAgB,EAAqB,EAAiC,CACpE,OAAO,EAAe,WAAW,OAAO,CAC1C,CAWA,SAAS,EAAsB,EAAiC,CAC9D,OAAO,IAAmB,IAAM,EAAqB,CAAc,CACrE,CAKA,SAAgB,EACd,EACmB,CACnB,GAAI,EAAsB,CAAc,EACtC,OAAO,EAET,GAAI,CACF,IAAM,EAAM,GAAG,EAAmB,mBAAmB,GAAG,IAClD,EAAO,aAAa,QAAQ,CAAG,EAOrC,OANI,IAAS,KAMN,EALE,CACL,GAAG,EACH,GAAG,EAAoB,KAAK,MAAM,CAAI,CAAC,CACzC,CAGJ,MAAQ,CACN,OAAO,CACT,CACF,CAKA,SAAgB,EACd,EACA,EACM,CACF,MAAsB,CAAc,EAGxC,GAAI,CACF,IAAM,EAAM,GAAG,EAAmB,mBAAmB,GAAG,IAElD,EAAW,CAAE,GADE,EAAqB,CACpB,EAAc,GAAG,CAAQ,EAC/C,aAAa,QAAQ,EAAK,KAAK,UAAU,CAAQ,CAAC,EAC9C,OAAO,OAAW,KACpB,OAAO,cACL,IAAI,YACF,EACA,CAAE,OAAQ,CAAE,gBAAe,CAAE,CAC/B,CACF,CAEJ,OAAS,EAAK,CACZ,QAAQ,KAAK,0CAA2C,CAAG,CAC7D,CACF,CAEA,SAAS,EAAuB,EAAwB,CACtD,MAAO,GAAG,EAAmB,mBAAmB,GAAG,GACrD,CAEA,SAAgB,EACd,EACA,EACM,CACD,KACL,GAAI,CACF,aAAa,QAAQ,EAAuB,CAAM,EAAG,CAAY,CACnE,OAAS,EAAK,CACZ,QAAQ,KAAK,qCAAsC,CAAG,CACxD,CACF,CAEA,SAAgB,EACd,EACe,CACf,GAAI,CAAC,EAAQ,OAAO,KACpB,GAAI,CACF,IAAM,EAAM,EAAuB,CAAM,EACnC,EAAQ,aAAa,QAAQ,CAAG,EAEtC,OADA,aAAa,WAAW,CAAG,EACpB,CACT,OAAS,EAAK,CAEZ,OADA,QAAQ,KAAK,uCAAwC,CAAG,EACjD,IACT,CACF,CAEA,SAAgB,EAA8B,EAAwB,CACpE,GAAI,CACF,IAAM,EAAM,GAAG,EAAmB,mBAAmB,GAAG,IACxD,aAAa,WAAW,CAAG,EACvB,OAAO,OAAW,KACpB,OAAO,cACL,IAAI,YACF,EACA,CAAE,OAAQ,CAAE,gBAAe,CAAE,CAC/B,CACF,CAEJ,OAAS,EAAK,CACZ,QAAQ,KACN,4CACA,EACA,CACF,CACF,CACF,CASA,SAAgB,EAAiC,EAgB/C,CACA,GAAM,CAAC,EAAO,IAAA,EAAA,EAAA,cACZ,EAAqB,CAAc,CACrC,GAEA,EAAA,EAAA,eAAgB,CACd,GAAI,OAAO,OAAW,IACpB,OAGF,IAAM,EAAM,GAAG,EAAmB,mBAAmB,GAAG,IAElD,MAAkB,CACtB,EAAS,EAAqB,CAAc,CAAC,CAC/C,EAEM,EAAiB,GAAwB,CACzC,EAAM,MAAQ,GAChB,EAAU,CAEd,EAEM,EAAkC,GAAiB,CAEnD,EAAY,QAAQ,iBAAmB,GACzC,EAAU,CAEd,EAWA,OARA,EAAU,EAEV,OAAO,iBAAiB,UAAW,CAAa,EAChD,OAAO,iBACL,EACA,CACF,MAEa,CACX,OAAO,oBAAoB,UAAW,CAAa,EACnD,OAAO,oBACL,EACA,CACF,CACF,CACF,EAAG,CAAC,CAAc,CAAC,EAEnB,IAAM,EAAe,GAAwC,CAC3D,GAAI,EAAsB,CAAc,EAAG,CAKzC,EAAU,IAAU,CAAE,GAAG,EAAM,GAAG,CAAQ,EAAE,EAC5C,MACF,CACA,EAAqB,EAAgB,CAAO,CAC9C,EAEA,MAAO,CACL,QACA,eAAiB,GAAQ,EAAY,CAAE,YAAa,CAAI,CAAC,EACzD,gBAAkB,GAAS,EAAY,CAAE,aAAc,CAAK,CAAC,EAC7D,4BAA8B,GAC5B,EAAY,CAAE,yBAA0B,CAAS,CAAC,EACpD,4BAA8B,GAC5B,EAAY,CAAE,yBAA0B,CAAM,CAAC,EACjD,oBAAsB,GAAS,EAAY,CAAE,iBAAkB,CAAK,CAAC,EACrE,gBAAkB,GAAY,EAAY,CAAE,aAAc,CAAQ,CAAC,EACnE,mBAAqB,GAAU,EAAY,CAAE,gBAAiB,CAAM,CAAC,EACrE,oBAAsB,GACpB,EAAY,CAAE,iBAAkB,CAAS,CAAC,EAC5C,2BAA6B,GAC3B,EAAY,CAAE,wBAAyB,CAAK,CAAC,EAC/C,uBAAyB,GACvB,EAAY,CAAE,oBAAqB,CAAQ,CAAC,EAC9C,sBAAuB,EAAW,IAChC,EAAY,CACV,kBAAmB,EACnB,qBAAsB,CACxB,CAAC,CACL,CACF"}
@@ -19,18 +19,26 @@ export declare const LOCAL_STORAGE_KEYS: {
19
19
  export interface ConversationState {
20
20
  selectedTab: ConversationTab | null;
21
21
  unpinnedTabs: string[];
22
+ unpinnedOverviewSections?: string[];
23
+ unpinnedOverviewGitParts?: string[];
22
24
  conversationMode: ConversationMode;
23
25
  subConversationTaskId: string | null;
24
26
  draftMessage: string | null;
27
+ rightPanelShown?: boolean;
25
28
  /**
26
- * User's persisted choice for the Files tab diff-vs-files toggle.
27
- * `null` means "no explicit choice yet" — the Files tab then falls back
28
- * to its repo-aware default (diff inside a git repo with commits, files
29
- * otherwise).
29
+ * Legacy Files-tab Diff/Files toggle preference. Kept for blob
30
+ * compatibility; the Files surface no longer hosts Diff/Commits
31
+ * (those live in the sibling Commits conversation tab).
30
32
  */
31
33
  filesTabDiffView: boolean | null;
32
34
  /** User's persisted choice for the Files tab Rich/Plain content toggle. */
33
35
  filesTabContentViewMode: ViewMode;
36
+ /** Whether the left-hand file tree is visible in the Files tab. */
37
+ filesTabTreeVisible?: boolean;
38
+ /** Open file tabs in the Files quick-row (basenames, closable). */
39
+ filesTabOpenPaths?: string[];
40
+ /** Currently selected path among `filesTabOpenPaths`, if any. */
41
+ filesTabSelectedPath?: string | null;
34
42
  }
35
43
  /**
36
44
  * Check if a conversation ID is a temporary task ID that should not be persisted.
@@ -59,8 +67,13 @@ export declare function useConversationLocalStorageState(conversationId: string)
59
67
  state: ConversationState;
60
68
  setSelectedTab: (tab: ConversationTab | null) => void;
61
69
  setUnpinnedTabs: (tabs: string[]) => void;
70
+ setUnpinnedOverviewSections?: (sections: string[]) => void;
71
+ setUnpinnedOverviewGitParts?: (parts: string[]) => void;
62
72
  setConversationMode: (mode: ConversationMode) => void;
63
73
  setDraftMessage: (message: string | null) => void;
74
+ setRightPanelShown?: (shown: boolean) => void;
64
75
  setFilesTabDiffView: (diffView: boolean | null) => void;
65
76
  setFilesTabContentViewMode: (mode: ViewMode) => void;
77
+ setFilesTabTreeVisible?: (visible: boolean) => void;
78
+ setFilesTabOpenState?: (openPaths: string[], selectedPath: string | null) => void;
66
79
  };
@@ -1,126 +1,174 @@
1
- import { useEffect as e, useState as t } from "react";
1
+ import { DEFAULT_UNPINNED_OVERVIEW_GIT_PARTS as e, DEFAULT_UNPINNED_OVERVIEW_SECTIONS as t, VALID_CONVERSATION_OVERVIEW_GIT_PARTS as n, VALID_CONVERSATION_OVERVIEW_SECTIONS as r } from "../components/features/conversation/conversation-overview-sections.js";
2
+ import { useEffect as i, useState as a } from "react";
2
3
  //#region src/utils/conversation-local-storage.ts
3
- var n = {
4
+ var o = {
4
5
  CONVERSATION_STATE: "conversation-state",
5
6
  PENDING_TASK_DRAFT: "pending-task-draft"
6
- }, r = "conversation-state-updated", i = {
7
+ }, s = "conversation-state-updated", c = {
7
8
  selectedTab: "files",
8
9
  unpinnedTabs: [],
10
+ unpinnedOverviewSections: [...t],
11
+ unpinnedOverviewGitParts: [...e],
9
12
  conversationMode: "code",
10
13
  subConversationTaskId: null,
11
14
  draftMessage: null,
15
+ rightPanelShown: !1,
12
16
  filesTabDiffView: null,
13
- filesTabContentViewMode: "rich"
14
- }, a = new Set([
17
+ filesTabContentViewMode: "rich",
18
+ filesTabTreeVisible: !0,
19
+ filesTabOpenPaths: [],
20
+ filesTabSelectedPath: null
21
+ }, l = new Set([
15
22
  "files",
23
+ "commits",
16
24
  "browser",
17
25
  "terminal",
18
26
  "planner",
19
27
  "tasklist",
20
28
  "usage"
21
- ]), o = new Set([
29
+ ]), u = new Set([
22
30
  "editor",
23
31
  "served",
24
- "changes",
25
32
  "app",
26
33
  "vscode"
27
- ]), s = new Set(["rich", "plain"]);
28
- function c(e) {
29
- let { rightPanelShown: t, ...n } = e, r = n;
30
- if (r.selectedTab != null && (o.has(r.selectedTab) || !a.has(r.selectedTab)) && (r = { ...r }, delete r.selectedTab), r.unpinnedTabs) {
31
- let e = r.unpinnedTabs.filter((e) => !o.has(e));
32
- e.length !== r.unpinnedTabs.length && (r = {
33
- ...r,
34
+ ]), d = new Set(["rich", "plain"]);
35
+ function f(e) {
36
+ let t = e;
37
+ if (t.selectedTab != null && (u.has(t.selectedTab) || t.selectedTab === "changes" || !l.has(t.selectedTab))) {
38
+ let e = t.selectedTab;
39
+ t = { ...t }, e === "changes" ? t.selectedTab = "commits" : delete t.selectedTab;
40
+ }
41
+ if (t.unpinnedTabs) {
42
+ let e = t.unpinnedTabs.filter((e) => e !== "changes" && !u.has(e));
43
+ e.length !== t.unpinnedTabs.length && (t = {
44
+ ...t,
34
45
  unpinnedTabs: e
35
46
  });
36
47
  }
37
- return r.filesTabContentViewMode != null && !s.has(r.filesTabContentViewMode) && (r = { ...r }, delete r.filesTabContentViewMode), r;
48
+ if (t.unpinnedOverviewSections) {
49
+ let e = t.unpinnedOverviewSections.filter((e) => r.has(e));
50
+ e.length !== t.unpinnedOverviewSections.length && (t = {
51
+ ...t,
52
+ unpinnedOverviewSections: e
53
+ });
54
+ }
55
+ if (t.unpinnedOverviewGitParts) {
56
+ let e = t.unpinnedOverviewGitParts.filter((e) => n.has(e));
57
+ e.length !== t.unpinnedOverviewGitParts.length && (t = {
58
+ ...t,
59
+ unpinnedOverviewGitParts: e
60
+ });
61
+ }
62
+ if (t.filesTabContentViewMode != null && !d.has(t.filesTabContentViewMode) && (t = { ...t }, delete t.filesTabContentViewMode), t.rightPanelShown != null && typeof t.rightPanelShown != "boolean" && (t = { ...t }, delete t.rightPanelShown), t.filesTabTreeVisible != null && typeof t.filesTabTreeVisible != "boolean" && (t = { ...t }, delete t.filesTabTreeVisible), t.filesTabOpenPaths != null) if (!Array.isArray(t.filesTabOpenPaths)) t = { ...t }, delete t.filesTabOpenPaths;
63
+ else {
64
+ let e = t.filesTabOpenPaths.filter((e) => typeof e == "string" && e.length > 0);
65
+ e.length !== t.filesTabOpenPaths.length && (t = {
66
+ ...t,
67
+ filesTabOpenPaths: e
68
+ });
69
+ }
70
+ return t.filesTabSelectedPath != null && typeof t.filesTabSelectedPath != "string" && (t = { ...t }, delete t.filesTabSelectedPath), t;
38
71
  }
39
- function l(e) {
72
+ function p(e) {
40
73
  return e.startsWith("task-");
41
74
  }
42
- function u(e) {
43
- return e === "" || l(e);
75
+ function m(e) {
76
+ return e === "" || p(e);
44
77
  }
45
- function d(e) {
46
- if (u(e)) return i;
78
+ function h(e) {
79
+ if (m(e)) return c;
47
80
  try {
48
- let t = `${n.CONVERSATION_STATE}-${e}`, r = localStorage.getItem(t);
49
- return r === null ? i : {
50
- ...i,
51
- ...c(JSON.parse(r))
81
+ let t = `${o.CONVERSATION_STATE}-${e}`, n = localStorage.getItem(t);
82
+ return n === null ? c : {
83
+ ...c,
84
+ ...f(JSON.parse(n))
52
85
  };
53
86
  } catch {
54
- return i;
87
+ return c;
55
88
  }
56
89
  }
57
- function f(e, t) {
58
- if (!u(e)) try {
59
- let i = `${n.CONVERSATION_STATE}-${e}`, a = {
60
- ...d(e),
90
+ function g(e, t) {
91
+ if (!m(e)) try {
92
+ let n = `${o.CONVERSATION_STATE}-${e}`, r = {
93
+ ...h(e),
61
94
  ...t
62
95
  };
63
- localStorage.setItem(i, JSON.stringify(a)), typeof window < "u" && window.dispatchEvent(new CustomEvent(r, { detail: { conversationId: e } }));
96
+ localStorage.setItem(n, JSON.stringify(r)), typeof window < "u" && window.dispatchEvent(new CustomEvent(s, { detail: { conversationId: e } }));
64
97
  } catch (e) {
65
98
  console.warn("Failed to set conversation localStorage", e);
66
99
  }
67
100
  }
68
- function p(e) {
69
- return `${n.PENDING_TASK_DRAFT}-${e}`;
101
+ function _(e) {
102
+ return `${o.PENDING_TASK_DRAFT}-${e}`;
70
103
  }
71
- function m(e) {
104
+ function v(e, t) {
105
+ if (e) try {
106
+ localStorage.setItem(_(e), t);
107
+ } catch (e) {
108
+ console.warn("Failed to store pending task draft", e);
109
+ }
110
+ }
111
+ function y(e) {
72
112
  if (!e) return null;
73
113
  try {
74
- let t = p(e), n = localStorage.getItem(t);
114
+ let t = _(e), n = localStorage.getItem(t);
75
115
  return localStorage.removeItem(t), n;
76
116
  } catch (e) {
77
117
  return console.warn("Failed to consume pending task draft", e), null;
78
118
  }
79
119
  }
80
- function h(e) {
120
+ function b(e) {
81
121
  try {
82
- let t = `${n.CONVERSATION_STATE}-${e}`;
83
- localStorage.removeItem(t), typeof window < "u" && window.dispatchEvent(new CustomEvent(r, { detail: { conversationId: e } }));
122
+ let t = `${o.CONVERSATION_STATE}-${e}`;
123
+ localStorage.removeItem(t), typeof window < "u" && window.dispatchEvent(new CustomEvent(s, { detail: { conversationId: e } }));
84
124
  } catch (t) {
85
125
  console.warn("Failed to clear conversation localStorage", e, t);
86
126
  }
87
127
  }
88
- function g(i) {
89
- let [a, o] = t(() => d(i));
90
- e(() => {
128
+ function x(e) {
129
+ let [t, n] = a(() => h(e));
130
+ i(() => {
91
131
  if (typeof window > "u") return;
92
- let e = `${n.CONVERSATION_STATE}-${i}`, t = () => {
93
- o(d(i));
94
- }, a = (n) => {
95
- n.key === e && t();
96
- }, s = (e) => {
97
- e.detail?.conversationId === i && t();
132
+ let t = `${o.CONVERSATION_STATE}-${e}`, r = () => {
133
+ n(h(e));
134
+ }, i = (e) => {
135
+ e.key === t && r();
136
+ }, a = (t) => {
137
+ t.detail?.conversationId === e && r();
98
138
  };
99
- return t(), window.addEventListener("storage", a), window.addEventListener(r, s), () => {
100
- window.removeEventListener("storage", a), window.removeEventListener(r, s);
139
+ return r(), window.addEventListener("storage", i), window.addEventListener(s, a), () => {
140
+ window.removeEventListener("storage", i), window.removeEventListener(s, a);
101
141
  };
102
- }, [i]);
103
- let s = (e) => {
104
- if (u(i)) {
105
- o((t) => ({
106
- ...t,
107
- ...e
142
+ }, [e]);
143
+ let r = (t) => {
144
+ if (m(e)) {
145
+ n((e) => ({
146
+ ...e,
147
+ ...t
108
148
  }));
109
149
  return;
110
150
  }
111
- f(i, e);
151
+ g(e, t);
112
152
  };
113
153
  return {
114
- state: a,
115
- setSelectedTab: (e) => s({ selectedTab: e }),
116
- setUnpinnedTabs: (e) => s({ unpinnedTabs: e }),
117
- setConversationMode: (e) => s({ conversationMode: e }),
118
- setDraftMessage: (e) => s({ draftMessage: e }),
119
- setFilesTabDiffView: (e) => s({ filesTabDiffView: e }),
120
- setFilesTabContentViewMode: (e) => s({ filesTabContentViewMode: e })
154
+ state: t,
155
+ setSelectedTab: (e) => r({ selectedTab: e }),
156
+ setUnpinnedTabs: (e) => r({ unpinnedTabs: e }),
157
+ setUnpinnedOverviewSections: (e) => r({ unpinnedOverviewSections: e }),
158
+ setUnpinnedOverviewGitParts: (e) => r({ unpinnedOverviewGitParts: e }),
159
+ setConversationMode: (e) => r({ conversationMode: e }),
160
+ setDraftMessage: (e) => r({ draftMessage: e }),
161
+ setRightPanelShown: (e) => r({ rightPanelShown: e }),
162
+ setFilesTabDiffView: (e) => r({ filesTabDiffView: e }),
163
+ setFilesTabContentViewMode: (e) => r({ filesTabContentViewMode: e }),
164
+ setFilesTabTreeVisible: (e) => r({ filesTabTreeVisible: e }),
165
+ setFilesTabOpenState: (e, t) => r({
166
+ filesTabOpenPaths: e,
167
+ filesTabSelectedPath: t
168
+ })
121
169
  };
122
170
  }
123
171
  //#endregion
124
- export { h as clearConversationLocalStorage, m as consumePendingTaskDraft, d as getConversationState, l as isTaskConversationId, f as setConversationState, g as useConversationLocalStorageState };
172
+ export { b as clearConversationLocalStorage, y as consumePendingTaskDraft, h as getConversationState, p as isTaskConversationId, g as setConversationState, v as setPendingTaskDraft, x as useConversationLocalStorageState };
125
173
 
126
174
  //# sourceMappingURL=conversation-local-storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-local-storage.js","names":[],"sources":["../../src/utils/conversation-local-storage.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type {\n ConversationTab,\n ConversationMode,\n} from \"#/stores/conversation-store\";\nimport type { ViewMode } from \"#/components/features/files-tab/view-mode\";\n\nexport const LOCAL_STORAGE_KEYS = {\n CONVERSATION_STATE: \"conversation-state\",\n PENDING_TASK_DRAFT: \"pending-task-draft\",\n} as const;\n\nconst CONVERSATION_STATE_UPDATED_EVENT = \"conversation-state-updated\";\n\ntype ConversationStateUpdatedDetail = {\n conversationId: string;\n};\n\n/**\n * Consolidated conversation state stored in a single localStorage key.\n *\n * NOTE: the right-drawer open/closed state is intentionally *not* persisted\n * here. Users expect the drawer to start closed every time the app is\n * (re)loaded and only stay open when they opened it themselves during the\n * current session. That state lives in the in-memory Zustand\n * `useConversationStore` (`isRightPanelShown` / `hasRightPanelToggled`)\n * which survives in-app navigation but resets on full reloads. Older\n * builds wrote a `rightPanelShown` field into this blob; we accept and\n * silently ignore that field on read so we don't churn old localStorage.\n */\nexport interface ConversationState {\n selectedTab: ConversationTab | null;\n unpinnedTabs: string[];\n conversationMode: ConversationMode;\n subConversationTaskId: string | null;\n draftMessage: string | null;\n /**\n * User's persisted choice for the Files tab diff-vs-files toggle.\n * `null` means \"no explicit choice yet\" — the Files tab then falls back\n * to its repo-aware default (diff inside a git repo with commits, files\n * otherwise).\n */\n filesTabDiffView: boolean | null;\n /** User's persisted choice for the Files tab Rich/Plain content toggle. */\n filesTabContentViewMode: ViewMode;\n}\n\nconst DEFAULT_CONVERSATION_STATE: ConversationState = {\n selectedTab: \"files\",\n unpinnedTabs: [],\n conversationMode: \"code\",\n subConversationTaskId: null,\n draftMessage: null,\n filesTabDiffView: null,\n filesTabContentViewMode: \"rich\",\n};\n\nconst VALID_CONVERSATION_TABS: ReadonlySet<ConversationTab> = new Set([\n \"files\",\n \"browser\",\n \"terminal\",\n \"planner\",\n \"tasklist\",\n \"usage\",\n]);\n\n// Tab keys that *used to* exist and were removed during the Files tab\n// refactor. We strip these out of any persisted state on read so that\n// returning users don't keep ghost entries (in `selectedTab` or\n// `unpinnedTabs`) forever — the UI has no way to surface them again to\n// be re-pinned or re-selected. We deliberately use an explicit denylist\n// here rather than a strict \"whitelist against VALID_CONVERSATION_TABS\"\n// filter because `unpinnedTabs` is typed `string[]` and other parts of\n// the app legitimately store arbitrary tab keys in it (sub-conversation\n// tab ids etc.).\nconst REMOVED_CONVERSATION_TABS: ReadonlySet<string> = new Set([\n \"editor\",\n \"served\",\n \"changes\",\n \"app\",\n \"vscode\",\n]);\n\nconst VALID_VIEW_MODES: ReadonlySet<ViewMode> = new Set([\"rich\", \"plain\"]);\n\nfunction sanitizeStoredState(\n stored: Record<string, unknown>,\n): Partial<ConversationState> {\n // `rightPanelShown` is no longer part of the schema (the drawer's\n // open state is session-only) but old persisted blobs still carry it.\n // We just drop it on the way in — keeping it in `result` here would\n // pollute the merged `ConversationState` shape that consumers receive.\n const { rightPanelShown: _ignoredRightPanelShown, ...rest } = stored as {\n rightPanelShown?: unknown;\n } & Record<string, unknown>;\n let result: Partial<ConversationState> = rest as Partial<ConversationState>;\n\n if (\n result.selectedTab != null &&\n (REMOVED_CONVERSATION_TABS.has(result.selectedTab) ||\n !VALID_CONVERSATION_TABS.has(result.selectedTab as ConversationTab))\n ) {\n result = { ...result };\n delete result.selectedTab;\n }\n\n if (result.unpinnedTabs) {\n const filtered = result.unpinnedTabs.filter(\n (tab) => !REMOVED_CONVERSATION_TABS.has(tab),\n );\n if (filtered.length !== result.unpinnedTabs.length) {\n result = { ...result, unpinnedTabs: filtered };\n }\n }\n\n // Drop a corrupt/manually-edited `filesTabContentViewMode` so it falls\n // back to the typed default (\"rich\") instead of leaking a junk string\n // into ViewMode-typed consumers. TypeScript can't help us here — the\n // value comes from `JSON.parse(localStorage.getItem(...))` which is\n // unknown at runtime.\n if (\n result.filesTabContentViewMode != null &&\n !VALID_VIEW_MODES.has(result.filesTabContentViewMode)\n ) {\n result = { ...result };\n delete result.filesTabContentViewMode;\n }\n\n return result;\n}\n\n/**\n * Check if a conversation ID is a temporary task ID that should not be persisted.\n * Task IDs have the format \"task-{uuid}\" and are used during V1 conversation initialization.\n */\nexport function isTaskConversationId(conversationId: string): boolean {\n return conversationId.startsWith(\"task-\");\n}\n\n/**\n * Whether persistence should be skipped for this conversation id.\n *\n * Skips:\n * - empty string ids (callers outside of a conversation route, e.g.\n * rendered inside a unit test without a NavigationProvider)\n * - \"task-...\" ids used as placeholders during V1 conversation\n * initialization\n */\nfunction shouldSkipPersistence(conversationId: string): boolean {\n return conversationId === \"\" || isTaskConversationId(conversationId);\n}\n\n/**\n * Get the full conversation state from localStorage.\n */\nexport function getConversationState(\n conversationId: string,\n): ConversationState {\n if (shouldSkipPersistence(conversationId)) {\n return DEFAULT_CONVERSATION_STATE;\n }\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n const item = localStorage.getItem(key);\n if (item !== null) {\n return {\n ...DEFAULT_CONVERSATION_STATE,\n ...sanitizeStoredState(JSON.parse(item)),\n };\n }\n return DEFAULT_CONVERSATION_STATE;\n } catch {\n return DEFAULT_CONVERSATION_STATE;\n }\n}\n\n/**\n * Set the conversation state in localStorage, merging with existing state.\n */\nexport function setConversationState(\n conversationId: string,\n updates: Partial<ConversationState>,\n): void {\n if (shouldSkipPersistence(conversationId)) {\n return;\n }\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n const currentState = getConversationState(conversationId);\n const newState = { ...currentState, ...updates };\n localStorage.setItem(key, JSON.stringify(newState));\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent<ConversationStateUpdatedDetail>(\n CONVERSATION_STATE_UPDATED_EVENT,\n { detail: { conversationId } },\n ),\n );\n }\n } catch (err) {\n console.warn(\"Failed to set conversation localStorage\", err);\n }\n}\n\nfunction getPendingTaskDraftKey(taskId: string): string {\n return `${LOCAL_STORAGE_KEYS.PENDING_TASK_DRAFT}-${taskId}`;\n}\n\nexport function setPendingTaskDraft(\n taskId: string | null | undefined,\n draftMessage: string,\n): void {\n if (!taskId) return;\n try {\n localStorage.setItem(getPendingTaskDraftKey(taskId), draftMessage);\n } catch (err) {\n console.warn(\"Failed to store pending task draft\", err);\n }\n}\n\nexport function consumePendingTaskDraft(\n taskId: string | null | undefined,\n): string | null {\n if (!taskId) return null;\n try {\n const key = getPendingTaskDraftKey(taskId);\n const draft = localStorage.getItem(key);\n localStorage.removeItem(key);\n return draft;\n } catch (err) {\n console.warn(\"Failed to consume pending task draft\", err);\n return null;\n }\n}\n\nexport function clearConversationLocalStorage(conversationId: string) {\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n localStorage.removeItem(key);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent<ConversationStateUpdatedDetail>(\n CONVERSATION_STATE_UPDATED_EVENT,\n { detail: { conversationId } },\n ),\n );\n }\n } catch (err) {\n console.warn(\n \"Failed to clear conversation localStorage\",\n conversationId,\n err,\n );\n }\n}\n\n/**\n * React hook for conversation-scoped localStorage state.\n * Returns the full state and individual setters for each property.\n *\n * The right-drawer open state is deliberately not represented here —\n * see the note on `ConversationState` for the rationale.\n */\nexport function useConversationLocalStorageState(conversationId: string): {\n state: ConversationState;\n setSelectedTab: (tab: ConversationTab | null) => void;\n setUnpinnedTabs: (tabs: string[]) => void;\n setConversationMode: (mode: ConversationMode) => void;\n setDraftMessage: (message: string | null) => void;\n setFilesTabDiffView: (diffView: boolean | null) => void;\n setFilesTabContentViewMode: (mode: ViewMode) => void;\n} {\n const [state, setState] = useState<ConversationState>(() =>\n getConversationState(conversationId),\n );\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n\n const syncState = () => {\n setState(getConversationState(conversationId));\n };\n\n const handleStorage = (event: StorageEvent) => {\n if (event.key === key) {\n syncState();\n }\n };\n\n const handleConversationStateUpdated = (event: Event) => {\n const customEvent = event as CustomEvent<ConversationStateUpdatedDetail>;\n if (customEvent.detail?.conversationId === conversationId) {\n syncState();\n }\n };\n\n // Ensure this hook reflects latest state for the current conversation ID.\n syncState();\n\n window.addEventListener(\"storage\", handleStorage);\n window.addEventListener(\n CONVERSATION_STATE_UPDATED_EVENT,\n handleConversationStateUpdated,\n );\n\n return () => {\n window.removeEventListener(\"storage\", handleStorage);\n window.removeEventListener(\n CONVERSATION_STATE_UPDATED_EVENT,\n handleConversationStateUpdated,\n );\n };\n }, [conversationId]);\n\n const updateState = (updates: Partial<ConversationState>) => {\n if (shouldSkipPersistence(conversationId)) {\n // No durable storage for this id (empty / task placeholder), but the\n // hook is still useful as ephemeral in-memory state — update the\n // local React mirror directly so toggles in the UI behave normally\n // until a real conversation id arrives.\n setState((prev) => ({ ...prev, ...updates }));\n return;\n }\n setConversationState(conversationId, updates);\n };\n\n return {\n state,\n setSelectedTab: (tab) => updateState({ selectedTab: tab }),\n setUnpinnedTabs: (tabs) => updateState({ unpinnedTabs: tabs }),\n setConversationMode: (mode) => updateState({ conversationMode: mode }),\n setDraftMessage: (message) => updateState({ draftMessage: message }),\n setFilesTabDiffView: (diffView) =>\n updateState({ filesTabDiffView: diffView }),\n setFilesTabContentViewMode: (mode) =>\n updateState({ filesTabContentViewMode: mode }),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"conversation-local-storage.js","names":[],"sources":["../../src/utils/conversation-local-storage.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type {\n ConversationTab,\n ConversationMode,\n} from \"#/stores/conversation-store\";\nimport type { ViewMode } from \"#/components/features/files-tab/view-mode\";\nimport {\n DEFAULT_UNPINNED_OVERVIEW_GIT_PARTS,\n DEFAULT_UNPINNED_OVERVIEW_SECTIONS,\n VALID_CONVERSATION_OVERVIEW_GIT_PARTS,\n VALID_CONVERSATION_OVERVIEW_SECTIONS,\n} from \"#/components/features/conversation/conversation-overview-sections\";\n\nexport const LOCAL_STORAGE_KEYS = {\n CONVERSATION_STATE: \"conversation-state\",\n PENDING_TASK_DRAFT: \"pending-task-draft\",\n} as const;\n\nconst CONVERSATION_STATE_UPDATED_EVENT = \"conversation-state-updated\";\n\ntype ConversationStateUpdatedDetail = {\n conversationId: string;\n};\n\n/**\n * Consolidated conversation state stored in a single localStorage key.\n *\n * NOTE: the right-drawer open/closed state is intentionally *not* persisted\n * here. Users expect the drawer to start closed every time the app is\n * (re)loaded and only stay open when they opened it themselves during the\n * current session. That state lives in the in-memory Zustand\n * `useConversationStore` (`isRightPanelShown` / `hasRightPanelToggled`)\n * which survives in-app navigation but resets on full reloads. Older\n * builds wrote a `rightPanelShown` field into this blob; we accept and\n * silently ignore that field on read so we don't churn old localStorage.\n */\nexport interface ConversationState {\n selectedTab: ConversationTab | null;\n unpinnedTabs: string[];\n unpinnedOverviewSections?: string[];\n unpinnedOverviewGitParts?: string[];\n conversationMode: ConversationMode;\n subConversationTaskId: string | null;\n draftMessage: string | null;\n rightPanelShown?: boolean;\n /**\n * Legacy Files-tab Diff/Files toggle preference. Kept for blob\n * compatibility; the Files surface no longer hosts Diff/Commits\n * (those live in the sibling Commits conversation tab).\n */\n filesTabDiffView: boolean | null;\n /** User's persisted choice for the Files tab Rich/Plain content toggle. */\n filesTabContentViewMode: ViewMode;\n /** Whether the left-hand file tree is visible in the Files tab. */\n filesTabTreeVisible?: boolean;\n /** Open file tabs in the Files quick-row (basenames, closable). */\n filesTabOpenPaths?: string[];\n /** Currently selected path among `filesTabOpenPaths`, if any. */\n filesTabSelectedPath?: string | null;\n}\n\nconst DEFAULT_CONVERSATION_STATE: ConversationState = {\n selectedTab: \"files\",\n unpinnedTabs: [],\n unpinnedOverviewSections: [...DEFAULT_UNPINNED_OVERVIEW_SECTIONS],\n unpinnedOverviewGitParts: [...DEFAULT_UNPINNED_OVERVIEW_GIT_PARTS],\n conversationMode: \"code\",\n subConversationTaskId: null,\n draftMessage: null,\n rightPanelShown: false,\n filesTabDiffView: null,\n filesTabContentViewMode: \"rich\",\n filesTabTreeVisible: true,\n filesTabOpenPaths: [],\n filesTabSelectedPath: null,\n};\n\nconst VALID_CONVERSATION_TABS: ReadonlySet<ConversationTab> = new Set([\n \"files\",\n \"commits\",\n \"browser\",\n \"terminal\",\n \"planner\",\n \"tasklist\",\n \"usage\",\n]);\n\n// Tab keys that *used to* exist and were removed during the Files tab\n// refactor. We strip these out of any persisted state on read so that\n// returning users don't keep ghost entries (in `selectedTab` or\n// `unpinnedTabs`) forever — the UI has no way to surface them again to\n// be re-pinned or re-selected. We deliberately use an explicit denylist\n// here rather than a strict \"whitelist against VALID_CONVERSATION_TABS\"\n// filter because `unpinnedTabs` is typed `string[]` and other parts of\n// the app legitimately store arbitrary tab keys in it (sub-conversation\n// tab ids etc.).\nconst REMOVED_CONVERSATION_TABS: ReadonlySet<string> = new Set([\n \"editor\",\n \"served\",\n \"app\",\n \"vscode\",\n]);\n\nconst VALID_VIEW_MODES: ReadonlySet<ViewMode> = new Set([\"rich\", \"plain\"]);\n\nfunction sanitizeStoredState(\n stored: Record<string, unknown>,\n): Partial<ConversationState> {\n let result: Partial<ConversationState> = stored as Partial<ConversationState>;\n\n if (\n result.selectedTab != null &&\n (REMOVED_CONVERSATION_TABS.has(result.selectedTab) ||\n (result.selectedTab as string) === \"changes\" ||\n !VALID_CONVERSATION_TABS.has(result.selectedTab as ConversationTab))\n ) {\n const selectedTab = result.selectedTab as string;\n result = { ...result };\n if (selectedTab === \"changes\") {\n result.selectedTab = \"commits\";\n } else {\n delete result.selectedTab;\n }\n }\n\n if (result.unpinnedTabs) {\n const filtered = result.unpinnedTabs.filter(\n (tab) => tab !== \"changes\" && !REMOVED_CONVERSATION_TABS.has(tab),\n );\n if (filtered.length !== result.unpinnedTabs.length) {\n result = { ...result, unpinnedTabs: filtered };\n }\n }\n\n if (result.unpinnedOverviewSections) {\n const filtered = result.unpinnedOverviewSections.filter((section) =>\n VALID_CONVERSATION_OVERVIEW_SECTIONS.has(section),\n );\n if (filtered.length !== result.unpinnedOverviewSections.length) {\n result = { ...result, unpinnedOverviewSections: filtered };\n }\n }\n\n if (result.unpinnedOverviewGitParts) {\n const filtered = result.unpinnedOverviewGitParts.filter((part) =>\n VALID_CONVERSATION_OVERVIEW_GIT_PARTS.has(part),\n );\n if (filtered.length !== result.unpinnedOverviewGitParts.length) {\n result = { ...result, unpinnedOverviewGitParts: filtered };\n }\n }\n\n // Drop a corrupt/manually-edited `filesTabContentViewMode` so it falls\n // back to the typed default (\"rich\") instead of leaking a junk string\n // into ViewMode-typed consumers. TypeScript can't help us here — the\n // value comes from `JSON.parse(localStorage.getItem(...))` which is\n // unknown at runtime.\n if (\n result.filesTabContentViewMode != null &&\n !VALID_VIEW_MODES.has(result.filesTabContentViewMode)\n ) {\n result = { ...result };\n delete result.filesTabContentViewMode;\n }\n\n if (\n result.rightPanelShown != null &&\n typeof result.rightPanelShown !== \"boolean\"\n ) {\n result = { ...result };\n delete result.rightPanelShown;\n }\n\n if (\n result.filesTabTreeVisible != null &&\n typeof result.filesTabTreeVisible !== \"boolean\"\n ) {\n result = { ...result };\n delete result.filesTabTreeVisible;\n }\n\n if (result.filesTabOpenPaths != null) {\n if (!Array.isArray(result.filesTabOpenPaths)) {\n result = { ...result };\n delete result.filesTabOpenPaths;\n } else {\n const filtered = result.filesTabOpenPaths.filter(\n (path): path is string => typeof path === \"string\" && path.length > 0,\n );\n if (filtered.length !== result.filesTabOpenPaths.length) {\n result = { ...result, filesTabOpenPaths: filtered };\n }\n }\n }\n\n if (\n result.filesTabSelectedPath != null &&\n typeof result.filesTabSelectedPath !== \"string\"\n ) {\n result = { ...result };\n delete result.filesTabSelectedPath;\n }\n\n return result;\n}\n\n/**\n * Check if a conversation ID is a temporary task ID that should not be persisted.\n * Task IDs have the format \"task-{uuid}\" and are used during V1 conversation initialization.\n */\nexport function isTaskConversationId(conversationId: string): boolean {\n return conversationId.startsWith(\"task-\");\n}\n\n/**\n * Whether persistence should be skipped for this conversation id.\n *\n * Skips:\n * - empty string ids (callers outside of a conversation route, e.g.\n * rendered inside a unit test without a NavigationProvider)\n * - \"task-...\" ids used as placeholders during V1 conversation\n * initialization\n */\nfunction shouldSkipPersistence(conversationId: string): boolean {\n return conversationId === \"\" || isTaskConversationId(conversationId);\n}\n\n/**\n * Get the full conversation state from localStorage.\n */\nexport function getConversationState(\n conversationId: string,\n): ConversationState {\n if (shouldSkipPersistence(conversationId)) {\n return DEFAULT_CONVERSATION_STATE;\n }\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n const item = localStorage.getItem(key);\n if (item !== null) {\n return {\n ...DEFAULT_CONVERSATION_STATE,\n ...sanitizeStoredState(JSON.parse(item)),\n };\n }\n return DEFAULT_CONVERSATION_STATE;\n } catch {\n return DEFAULT_CONVERSATION_STATE;\n }\n}\n\n/**\n * Set the conversation state in localStorage, merging with existing state.\n */\nexport function setConversationState(\n conversationId: string,\n updates: Partial<ConversationState>,\n): void {\n if (shouldSkipPersistence(conversationId)) {\n return;\n }\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n const currentState = getConversationState(conversationId);\n const newState = { ...currentState, ...updates };\n localStorage.setItem(key, JSON.stringify(newState));\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent<ConversationStateUpdatedDetail>(\n CONVERSATION_STATE_UPDATED_EVENT,\n { detail: { conversationId } },\n ),\n );\n }\n } catch (err) {\n console.warn(\"Failed to set conversation localStorage\", err);\n }\n}\n\nfunction getPendingTaskDraftKey(taskId: string): string {\n return `${LOCAL_STORAGE_KEYS.PENDING_TASK_DRAFT}-${taskId}`;\n}\n\nexport function setPendingTaskDraft(\n taskId: string | null | undefined,\n draftMessage: string,\n): void {\n if (!taskId) return;\n try {\n localStorage.setItem(getPendingTaskDraftKey(taskId), draftMessage);\n } catch (err) {\n console.warn(\"Failed to store pending task draft\", err);\n }\n}\n\nexport function consumePendingTaskDraft(\n taskId: string | null | undefined,\n): string | null {\n if (!taskId) return null;\n try {\n const key = getPendingTaskDraftKey(taskId);\n const draft = localStorage.getItem(key);\n localStorage.removeItem(key);\n return draft;\n } catch (err) {\n console.warn(\"Failed to consume pending task draft\", err);\n return null;\n }\n}\n\nexport function clearConversationLocalStorage(conversationId: string) {\n try {\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n localStorage.removeItem(key);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent<ConversationStateUpdatedDetail>(\n CONVERSATION_STATE_UPDATED_EVENT,\n { detail: { conversationId } },\n ),\n );\n }\n } catch (err) {\n console.warn(\n \"Failed to clear conversation localStorage\",\n conversationId,\n err,\n );\n }\n}\n\n/**\n * React hook for conversation-scoped localStorage state.\n * Returns the full state and individual setters for each property.\n *\n * The right-drawer open state is deliberately not represented here —\n * see the note on `ConversationState` for the rationale.\n */\nexport function useConversationLocalStorageState(conversationId: string): {\n state: ConversationState;\n setSelectedTab: (tab: ConversationTab | null) => void;\n setUnpinnedTabs: (tabs: string[]) => void;\n setUnpinnedOverviewSections?: (sections: string[]) => void;\n setUnpinnedOverviewGitParts?: (parts: string[]) => void;\n setConversationMode: (mode: ConversationMode) => void;\n setDraftMessage: (message: string | null) => void;\n setRightPanelShown?: (shown: boolean) => void;\n setFilesTabDiffView: (diffView: boolean | null) => void;\n setFilesTabContentViewMode: (mode: ViewMode) => void;\n setFilesTabTreeVisible?: (visible: boolean) => void;\n setFilesTabOpenState?: (\n openPaths: string[],\n selectedPath: string | null,\n ) => void;\n} {\n const [state, setState] = useState<ConversationState>(() =>\n getConversationState(conversationId),\n );\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n const key = `${LOCAL_STORAGE_KEYS.CONVERSATION_STATE}-${conversationId}`;\n\n const syncState = () => {\n setState(getConversationState(conversationId));\n };\n\n const handleStorage = (event: StorageEvent) => {\n if (event.key === key) {\n syncState();\n }\n };\n\n const handleConversationStateUpdated = (event: Event) => {\n const customEvent = event as CustomEvent<ConversationStateUpdatedDetail>;\n if (customEvent.detail?.conversationId === conversationId) {\n syncState();\n }\n };\n\n // Ensure this hook reflects latest state for the current conversation ID.\n syncState();\n\n window.addEventListener(\"storage\", handleStorage);\n window.addEventListener(\n CONVERSATION_STATE_UPDATED_EVENT,\n handleConversationStateUpdated,\n );\n\n return () => {\n window.removeEventListener(\"storage\", handleStorage);\n window.removeEventListener(\n CONVERSATION_STATE_UPDATED_EVENT,\n handleConversationStateUpdated,\n );\n };\n }, [conversationId]);\n\n const updateState = (updates: Partial<ConversationState>) => {\n if (shouldSkipPersistence(conversationId)) {\n // No durable storage for this id (empty / task placeholder), but the\n // hook is still useful as ephemeral in-memory state — update the\n // local React mirror directly so toggles in the UI behave normally\n // until a real conversation id arrives.\n setState((prev) => ({ ...prev, ...updates }));\n return;\n }\n setConversationState(conversationId, updates);\n };\n\n return {\n state,\n setSelectedTab: (tab) => updateState({ selectedTab: tab }),\n setUnpinnedTabs: (tabs) => updateState({ unpinnedTabs: tabs }),\n setUnpinnedOverviewSections: (sections) =>\n updateState({ unpinnedOverviewSections: sections }),\n setUnpinnedOverviewGitParts: (parts) =>\n updateState({ unpinnedOverviewGitParts: parts }),\n setConversationMode: (mode) => updateState({ conversationMode: mode }),\n setDraftMessage: (message) => updateState({ draftMessage: message }),\n setRightPanelShown: (shown) => updateState({ rightPanelShown: shown }),\n setFilesTabDiffView: (diffView) =>\n updateState({ filesTabDiffView: diffView }),\n setFilesTabContentViewMode: (mode) =>\n updateState({ filesTabContentViewMode: mode }),\n setFilesTabTreeVisible: (visible) =>\n updateState({ filesTabTreeVisible: visible }),\n setFilesTabOpenState: (openPaths, selectedPath) =>\n updateState({\n filesTabOpenPaths: openPaths,\n filesTabSelectedPath: selectedPath,\n }),\n };\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- require("../_virtual/_rolldown/runtime.cjs");function e(e){let{stats:t}=e;if(!t?.usage_to_metrics)return{accumulated_cost:0,max_budget_per_task:null,accumulated_token_usage:null};let n=0,r=null,i=null;for(let e of Object.values(t.usage_to_metrics))n+=e.accumulated_cost,r===null&&e.max_budget_per_task!==null&&(r=e.max_budget_per_task),e.accumulated_token_usage&&(i=i===null?{...e.accumulated_token_usage}:{prompt_tokens:i.prompt_tokens+e.accumulated_token_usage.prompt_tokens,completion_tokens:i.completion_tokens+e.accumulated_token_usage.completion_tokens,cache_read_tokens:i.cache_read_tokens+e.accumulated_token_usage.cache_read_tokens,cache_write_tokens:i.cache_write_tokens+e.accumulated_token_usage.cache_write_tokens,context_window:Math.max(i.context_window,e.accumulated_token_usage.context_window),per_turn_token:Math.max(i.per_turn_token,e.accumulated_token_usage.per_turn_token)});return{accumulated_cost:n,max_budget_per_task:r,accumulated_token_usage:i}}exports.getCombinedMetrics=e;
1
+ require("../_virtual/_rolldown/runtime.cjs");function e(e){if(!e?.usage_to_metrics)return{accumulated_cost:0,max_budget_per_task:null,accumulated_token_usage:null};let t=0,n=null,r=null;for(let i of Object.values(e.usage_to_metrics))t+=i.accumulated_cost,n===null&&i.max_budget_per_task!==null&&(n=i.max_budget_per_task),i.accumulated_token_usage&&(r=r===null?{...i.accumulated_token_usage}:{prompt_tokens:r.prompt_tokens+i.accumulated_token_usage.prompt_tokens,completion_tokens:r.completion_tokens+i.accumulated_token_usage.completion_tokens,cache_read_tokens:r.cache_read_tokens+i.accumulated_token_usage.cache_read_tokens,cache_write_tokens:r.cache_write_tokens+i.accumulated_token_usage.cache_write_tokens,context_window:Math.max(r.context_window,i.accumulated_token_usage.context_window),per_turn_token:Math.max(r.per_turn_token,i.accumulated_token_usage.per_turn_token)});return{accumulated_cost:t,max_budget_per_task:n,accumulated_token_usage:r}}function t(t){return e(t.stats)}exports.combineUsageMetrics=e,exports.getCombinedMetrics=t;
2
2
  //# sourceMappingURL=conversation-metrics.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-metrics.cjs","names":[],"sources":["../../src/utils/conversation-metrics.ts"],"sourcesContent":["import type {\n MetricsSnapshot,\n RuntimeConversationInfo,\n TokenUsage,\n} from \"#/api/conversation-service/agent-server-conversation-service.types\";\n\n/**\n * TypeScript equivalent of the get_combined_metrics method from the Python SDK\n * Combines metrics from all LLM usage IDs in the conversation stats\n */\nexport function getCombinedMetrics(\n conversationInfo: RuntimeConversationInfo,\n): MetricsSnapshot {\n const { stats } = conversationInfo;\n\n if (!stats?.usage_to_metrics) {\n return {\n accumulated_cost: 0,\n max_budget_per_task: null,\n accumulated_token_usage: null,\n };\n }\n\n let totalCost = 0;\n let maxBudgetPerTask: number | null = null;\n let combinedTokenUsage: TokenUsage | null = null;\n\n // Iterate through all metrics and combine them\n for (const metrics of Object.values(stats.usage_to_metrics)) {\n // Add up costs\n totalCost += metrics.accumulated_cost;\n\n // Keep the max budget per task if any is set\n if (maxBudgetPerTask === null && metrics.max_budget_per_task !== null) {\n maxBudgetPerTask = metrics.max_budget_per_task;\n }\n\n // Combine token usage\n if (metrics.accumulated_token_usage) {\n if (combinedTokenUsage === null) {\n combinedTokenUsage = { ...metrics.accumulated_token_usage };\n } else {\n combinedTokenUsage = {\n prompt_tokens:\n combinedTokenUsage.prompt_tokens +\n metrics.accumulated_token_usage.prompt_tokens,\n completion_tokens:\n combinedTokenUsage.completion_tokens +\n metrics.accumulated_token_usage.completion_tokens,\n cache_read_tokens:\n combinedTokenUsage.cache_read_tokens +\n metrics.accumulated_token_usage.cache_read_tokens,\n cache_write_tokens:\n combinedTokenUsage.cache_write_tokens +\n metrics.accumulated_token_usage.cache_write_tokens,\n context_window: Math.max(\n combinedTokenUsage.context_window,\n metrics.accumulated_token_usage.context_window,\n ),\n per_turn_token: Math.max(\n combinedTokenUsage.per_turn_token,\n metrics.accumulated_token_usage.per_turn_token,\n ),\n };\n }\n }\n }\n\n return {\n accumulated_cost: totalCost,\n max_budget_per_task: maxBudgetPerTask,\n accumulated_token_usage: combinedTokenUsage,\n };\n}\n"],"mappings":"6CAUA,SAAgB,EACd,EACiB,CACjB,GAAM,CAAE,SAAU,EAElB,GAAI,CAAC,GAAO,iBACV,MAAO,CACL,iBAAkB,EAClB,oBAAqB,KACrB,wBAAyB,IAC3B,EAGF,IAAI,EAAY,EACZ,EAAkC,KAClC,EAAwC,KAG5C,IAAK,IAAM,KAAW,OAAO,OAAO,EAAM,gBAAgB,EAExD,GAAa,EAAQ,iBAGjB,IAAqB,MAAQ,EAAQ,sBAAwB,OAC/D,EAAmB,EAAQ,qBAIzB,EAAQ,0BACV,AAGE,EAHE,IAAuB,KACJ,CAAE,GAAG,EAAQ,uBAAwB,EAErC,CACnB,cACE,EAAmB,cACnB,EAAQ,wBAAwB,cAClC,kBACE,EAAmB,kBACnB,EAAQ,wBAAwB,kBAClC,kBACE,EAAmB,kBACnB,EAAQ,wBAAwB,kBAClC,mBACE,EAAmB,mBACnB,EAAQ,wBAAwB,mBAClC,eAAgB,KAAK,IACnB,EAAmB,eACnB,EAAQ,wBAAwB,cAClC,EACA,eAAgB,KAAK,IACnB,EAAmB,eACnB,EAAQ,wBAAwB,cAClC,CACF,GAKN,MAAO,CACL,iBAAkB,EAClB,oBAAqB,EACrB,wBAAyB,CAC3B,CACF"}
1
+ {"version":3,"file":"conversation-metrics.cjs","names":[],"sources":["../../src/utils/conversation-metrics.ts"],"sourcesContent":["import type {\n MetricsSnapshot,\n RuntimeConversationInfo,\n RuntimeConversationStats,\n TokenUsage,\n} from \"#/api/conversation-service/agent-server-conversation-service.types\";\n\n/**\n * TypeScript equivalent of the get_combined_metrics method from the Python SDK\n * Combines metrics from all LLM usage IDs in a conversation's stats\n */\nexport function combineUsageMetrics(\n stats: RuntimeConversationStats | null | undefined,\n): MetricsSnapshot {\n if (!stats?.usage_to_metrics) {\n return {\n accumulated_cost: 0,\n max_budget_per_task: null,\n accumulated_token_usage: null,\n };\n }\n\n let totalCost = 0;\n let maxBudgetPerTask: number | null = null;\n let combinedTokenUsage: TokenUsage | null = null;\n\n // Iterate through all metrics and combine them\n for (const metrics of Object.values(stats.usage_to_metrics)) {\n // Add up costs\n totalCost += metrics.accumulated_cost;\n\n // Keep the max budget per task if any is set\n if (maxBudgetPerTask === null && metrics.max_budget_per_task !== null) {\n maxBudgetPerTask = metrics.max_budget_per_task;\n }\n\n // Combine token usage\n if (metrics.accumulated_token_usage) {\n if (combinedTokenUsage === null) {\n combinedTokenUsage = { ...metrics.accumulated_token_usage };\n } else {\n combinedTokenUsage = {\n prompt_tokens:\n combinedTokenUsage.prompt_tokens +\n metrics.accumulated_token_usage.prompt_tokens,\n completion_tokens:\n combinedTokenUsage.completion_tokens +\n metrics.accumulated_token_usage.completion_tokens,\n cache_read_tokens:\n combinedTokenUsage.cache_read_tokens +\n metrics.accumulated_token_usage.cache_read_tokens,\n cache_write_tokens:\n combinedTokenUsage.cache_write_tokens +\n metrics.accumulated_token_usage.cache_write_tokens,\n context_window: Math.max(\n combinedTokenUsage.context_window,\n metrics.accumulated_token_usage.context_window,\n ),\n per_turn_token: Math.max(\n combinedTokenUsage.per_turn_token,\n metrics.accumulated_token_usage.per_turn_token,\n ),\n };\n }\n }\n }\n\n return {\n accumulated_cost: totalCost,\n max_budget_per_task: maxBudgetPerTask,\n accumulated_token_usage: combinedTokenUsage,\n };\n}\n\nexport function getCombinedMetrics(\n conversationInfo: RuntimeConversationInfo,\n): MetricsSnapshot {\n return combineUsageMetrics(conversationInfo.stats);\n}\n"],"mappings":"6CAWA,SAAgB,EACd,EACiB,CACjB,GAAI,CAAC,GAAO,iBACV,MAAO,CACL,iBAAkB,EAClB,oBAAqB,KACrB,wBAAyB,IAC3B,EAGF,IAAI,EAAY,EACZ,EAAkC,KAClC,EAAwC,KAG5C,IAAK,IAAM,KAAW,OAAO,OAAO,EAAM,gBAAgB,EAExD,GAAa,EAAQ,iBAGjB,IAAqB,MAAQ,EAAQ,sBAAwB,OAC/D,EAAmB,EAAQ,qBAIzB,EAAQ,0BACV,AAGE,EAHE,IAAuB,KACJ,CAAE,GAAG,EAAQ,uBAAwB,EAErC,CACnB,cACE,EAAmB,cACnB,EAAQ,wBAAwB,cAClC,kBACE,EAAmB,kBACnB,EAAQ,wBAAwB,kBAClC,kBACE,EAAmB,kBACnB,EAAQ,wBAAwB,kBAClC,mBACE,EAAmB,mBACnB,EAAQ,wBAAwB,mBAClC,eAAgB,KAAK,IACnB,EAAmB,eACnB,EAAQ,wBAAwB,cAClC,EACA,eAAgB,KAAK,IACnB,EAAmB,eACnB,EAAQ,wBAAwB,cAClC,CACF,GAKN,MAAO,CACL,iBAAkB,EAClB,oBAAqB,EACrB,wBAAyB,CAC3B,CACF,CAEA,SAAgB,EACd,EACiB,CACjB,OAAO,EAAoB,EAAiB,KAAK,CACnD"}
@@ -1,6 +1,7 @@
1
- import type { MetricsSnapshot, RuntimeConversationInfo } from "#/api/conversation-service/agent-server-conversation-service.types";
1
+ import type { MetricsSnapshot, RuntimeConversationInfo, RuntimeConversationStats } from "#/api/conversation-service/agent-server-conversation-service.types";
2
2
  /**
3
3
  * TypeScript equivalent of the get_combined_metrics method from the Python SDK
4
- * Combines metrics from all LLM usage IDs in the conversation stats
4
+ * Combines metrics from all LLM usage IDs in a conversation's stats
5
5
  */
6
+ export declare function combineUsageMetrics(stats: RuntimeConversationStats | null | undefined): MetricsSnapshot;
6
7
  export declare function getCombinedMetrics(conversationInfo: RuntimeConversationInfo): MetricsSnapshot;