@ottocode/web-sdk 0.1.226 → 0.1.228

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 (406) hide show
  1. package/dist/components/chat/FileMentionPopup.d.ts.map +1 -1
  2. package/dist/components/index.js +25158 -80
  3. package/dist/components/index.js.map +180 -1
  4. package/dist/components/messages/AssistantMessageGroup.d.ts.map +1 -1
  5. package/dist/components/messages/CompactActivityGroup.d.ts +10 -0
  6. package/dist/components/messages/CompactActivityGroup.d.ts.map +1 -0
  7. package/dist/components/messages/MessagePartItem.d.ts.map +1 -1
  8. package/dist/components/messages/MessageThread.d.ts +1 -0
  9. package/dist/components/messages/MessageThread.d.ts.map +1 -1
  10. package/dist/components/messages/MessageThreadContainer.d.ts.map +1 -1
  11. package/dist/components/messages/compactActivity.d.ts +34 -0
  12. package/dist/components/messages/compactActivity.d.ts.map +1 -0
  13. package/dist/components/messages/renderers/EditRenderer.d.ts +1 -1
  14. package/dist/components/messages/renderers/EditRenderer.d.ts.map +1 -1
  15. package/dist/components/messages/renderers/index.d.ts.map +1 -1
  16. package/dist/components/messages/renderers/types.d.ts +3 -1
  17. package/dist/components/messages/renderers/types.d.ts.map +1 -1
  18. package/dist/components/settings/SettingsSidebar.d.ts.map +1 -1
  19. package/dist/components/settings/SetuTopupModal.d.ts.map +1 -1
  20. package/dist/hooks/index.js +4821 -29
  21. package/dist/hooks/index.js.map +67 -1
  22. package/dist/hooks/useAuthStatus.d.ts.map +1 -1
  23. package/dist/hooks/useMCP.d.ts +9 -0
  24. package/dist/hooks/useMCP.d.ts.map +1 -1
  25. package/dist/hooks/usePreferences.d.ts +1 -0
  26. package/dist/hooks/usePreferences.d.ts.map +1 -1
  27. package/dist/hooks/useSessionStream.d.ts.map +1 -1
  28. package/dist/index.js +25928 -7
  29. package/dist/index.js.map +185 -1
  30. package/dist/lib/api-client/approval.d.ts.map +1 -1
  31. package/dist/lib/api-client/utils.d.ts.map +1 -1
  32. package/dist/lib/index.js +1016 -5
  33. package/dist/lib/index.js.map +22 -1
  34. package/dist/stores/index.js +693 -22
  35. package/dist/stores/index.js.map +30 -1
  36. package/dist/stores/toastStore.d.ts +1 -0
  37. package/dist/stores/toastStore.d.ts.map +1 -1
  38. package/dist/types/api.js +2 -2
  39. package/dist/types/api.js.map +9 -1
  40. package/package.json +4 -4
  41. package/dist/assets/provider-logos.js +0 -43
  42. package/dist/assets/provider-logos.js.map +0 -1
  43. package/dist/components/branch/BranchModal.js +0 -45
  44. package/dist/components/branch/BranchModal.js.map +0 -1
  45. package/dist/components/chat/ChatInput.js +0 -267
  46. package/dist/components/chat/ChatInput.js.map +0 -1
  47. package/dist/components/chat/ChatInputContainer.js +0 -295
  48. package/dist/components/chat/ChatInputContainer.js.map +0 -1
  49. package/dist/components/chat/ChatInputKeyHandler.js +0 -75
  50. package/dist/components/chat/ChatInputKeyHandler.js.map +0 -1
  51. package/dist/components/chat/CommandSuggestionsPopup.js +0 -45
  52. package/dist/components/chat/CommandSuggestionsPopup.js.map +0 -1
  53. package/dist/components/chat/ConfigModal.js +0 -46
  54. package/dist/components/chat/ConfigModal.js.map +0 -1
  55. package/dist/components/chat/ConfigSelector.js +0 -47
  56. package/dist/components/chat/ConfigSelector.js.map +0 -1
  57. package/dist/components/chat/FileMentionPopup.js +0 -138
  58. package/dist/components/chat/FileMentionPopup.js.map +0 -1
  59. package/dist/components/chat/ShortcutsModal.js +0 -275
  60. package/dist/components/chat/ShortcutsModal.js.map +0 -1
  61. package/dist/components/chat/StopButton.js +0 -25
  62. package/dist/components/chat/StopButton.js.map +0 -1
  63. package/dist/components/chat/UnifiedAgentSelector.js +0 -107
  64. package/dist/components/chat/UnifiedAgentSelector.js.map +0 -1
  65. package/dist/components/chat/UnifiedModelSelector.js +0 -209
  66. package/dist/components/chat/UnifiedModelSelector.js.map +0 -1
  67. package/dist/components/common/ProviderLogo.js +0 -30
  68. package/dist/components/common/ProviderLogo.js.map +0 -1
  69. package/dist/components/common/StatusIndicator.js +0 -54
  70. package/dist/components/common/StatusIndicator.js.map +0 -1
  71. package/dist/components/common/UsageModal.js +0 -55
  72. package/dist/components/common/UsageModal.js.map +0 -1
  73. package/dist/components/common/UsageRing.js +0 -22
  74. package/dist/components/common/UsageRing.js.map +0 -1
  75. package/dist/components/file-browser/FileBrowserSidebar.js +0 -50
  76. package/dist/components/file-browser/FileBrowserSidebar.js.map +0 -1
  77. package/dist/components/file-browser/FileBrowserSidebarToggle.js +0 -12
  78. package/dist/components/file-browser/FileBrowserSidebarToggle.js.map +0 -1
  79. package/dist/components/file-browser/FileViewerPanel.js +0 -85
  80. package/dist/components/file-browser/FileViewerPanel.js.map +0 -1
  81. package/dist/components/file-browser/QuickFilePicker.js +0 -118
  82. package/dist/components/file-browser/QuickFilePicker.js.map +0 -1
  83. package/dist/components/git/GitCommitModal.js +0 -70
  84. package/dist/components/git/GitCommitModal.js.map +0 -1
  85. package/dist/components/git/GitDiffPanel.js +0 -60
  86. package/dist/components/git/GitDiffPanel.js.map +0 -1
  87. package/dist/components/git/GitDiffViewer.js +0 -224
  88. package/dist/components/git/GitDiffViewer.js.map +0 -1
  89. package/dist/components/git/GitFileItem.js +0 -145
  90. package/dist/components/git/GitFileItem.js.map +0 -1
  91. package/dist/components/git/GitFileList.js +0 -108
  92. package/dist/components/git/GitFileList.js.map +0 -1
  93. package/dist/components/git/GitSidebar.js +0 -156
  94. package/dist/components/git/GitSidebar.js.map +0 -1
  95. package/dist/components/git/GitSidebarToggle.js +0 -18
  96. package/dist/components/git/GitSidebarToggle.js.map +0 -1
  97. package/dist/components/mcp/AddMCPServerModal.js +0 -166
  98. package/dist/components/mcp/AddMCPServerModal.js.map +0 -1
  99. package/dist/components/mcp/MCPSidebar.js +0 -192
  100. package/dist/components/mcp/MCPSidebar.js.map +0 -1
  101. package/dist/components/mcp/MCPSidebarToggle.js +0 -14
  102. package/dist/components/mcp/MCPSidebarToggle.js.map +0 -1
  103. package/dist/components/mcp/index.js +0 -4
  104. package/dist/components/mcp/index.js.map +0 -1
  105. package/dist/components/messages/AssistantMessageGroup.js +0 -176
  106. package/dist/components/messages/AssistantMessageGroup.js.map +0 -1
  107. package/dist/components/messages/MessagePartItem.js +0 -362
  108. package/dist/components/messages/MessagePartItem.js.map +0 -1
  109. package/dist/components/messages/MessageThread.js +0 -239
  110. package/dist/components/messages/MessageThread.js.map +0 -1
  111. package/dist/components/messages/MessageThreadContainer.js +0 -22
  112. package/dist/components/messages/MessageThreadContainer.js.map +0 -1
  113. package/dist/components/messages/ToolApprovalCard.js +0 -143
  114. package/dist/components/messages/ToolApprovalCard.js.map +0 -1
  115. package/dist/components/messages/TopupApprovalCard.js +0 -52
  116. package/dist/components/messages/TopupApprovalCard.js.map +0 -1
  117. package/dist/components/messages/UserMessageGroup.js +0 -132
  118. package/dist/components/messages/UserMessageGroup.js.map +0 -1
  119. package/dist/components/messages/renderers/ApplyPatchRenderer.js +0 -55
  120. package/dist/components/messages/renderers/ApplyPatchRenderer.js.map +0 -1
  121. package/dist/components/messages/renderers/BashRenderer.js +0 -55
  122. package/dist/components/messages/renderers/BashRenderer.js.map +0 -1
  123. package/dist/components/messages/renderers/DatabaseToolRenderer.js +0 -151
  124. package/dist/components/messages/renderers/DatabaseToolRenderer.js.map +0 -1
  125. package/dist/components/messages/renderers/DebugRenderer.js +0 -5
  126. package/dist/components/messages/renderers/DebugRenderer.js.map +0 -1
  127. package/dist/components/messages/renderers/DiffView.js +0 -206
  128. package/dist/components/messages/renderers/DiffView.js.map +0 -1
  129. package/dist/components/messages/renderers/EditRenderer.js +0 -25
  130. package/dist/components/messages/renderers/EditRenderer.js.map +0 -1
  131. package/dist/components/messages/renderers/ErrorRenderer.js +0 -162
  132. package/dist/components/messages/renderers/ErrorRenderer.js.map +0 -1
  133. package/dist/components/messages/renderers/FinishRenderer.js +0 -7
  134. package/dist/components/messages/renderers/FinishRenderer.js.map +0 -1
  135. package/dist/components/messages/renderers/GenericRenderer.js +0 -50
  136. package/dist/components/messages/renderers/GenericRenderer.js.map +0 -1
  137. package/dist/components/messages/renderers/GitCommitRenderer.js +0 -21
  138. package/dist/components/messages/renderers/GitCommitRenderer.js.map +0 -1
  139. package/dist/components/messages/renderers/GitDiffRenderer.js +0 -34
  140. package/dist/components/messages/renderers/GitDiffRenderer.js.map +0 -1
  141. package/dist/components/messages/renderers/GitStatusRenderer.js +0 -60
  142. package/dist/components/messages/renderers/GitStatusRenderer.js.map +0 -1
  143. package/dist/components/messages/renderers/ListRenderer.js +0 -28
  144. package/dist/components/messages/renderers/ListRenderer.js.map +0 -1
  145. package/dist/components/messages/renderers/LoadMcpToolsRenderer.js +0 -20
  146. package/dist/components/messages/renderers/LoadMcpToolsRenderer.js.map +0 -1
  147. package/dist/components/messages/renderers/McpToolRenderer.js +0 -68
  148. package/dist/components/messages/renderers/McpToolRenderer.js.map +0 -1
  149. package/dist/components/messages/renderers/ProgressUpdateRenderer.js +0 -9
  150. package/dist/components/messages/renderers/ProgressUpdateRenderer.js.map +0 -1
  151. package/dist/components/messages/renderers/ReadRenderer.js +0 -87
  152. package/dist/components/messages/renderers/ReadRenderer.js.map +0 -1
  153. package/dist/components/messages/renderers/ReasoningRenderer.js +0 -34
  154. package/dist/components/messages/renderers/ReasoningRenderer.js.map +0 -1
  155. package/dist/components/messages/renderers/SearchRenderer.js +0 -52
  156. package/dist/components/messages/renderers/SearchRenderer.js.map +0 -1
  157. package/dist/components/messages/renderers/SkillRenderer.js +0 -36
  158. package/dist/components/messages/renderers/SkillRenderer.js.map +0 -1
  159. package/dist/components/messages/renderers/TerminalRenderer.js +0 -84
  160. package/dist/components/messages/renderers/TerminalRenderer.js.map +0 -1
  161. package/dist/components/messages/renderers/TodosRenderer.js +0 -15
  162. package/dist/components/messages/renderers/TodosRenderer.js.map +0 -1
  163. package/dist/components/messages/renderers/ToolErrorDisplay.js +0 -10
  164. package/dist/components/messages/renderers/ToolErrorDisplay.js.map +0 -1
  165. package/dist/components/messages/renderers/TreeRenderer.js +0 -33
  166. package/dist/components/messages/renderers/TreeRenderer.js.map +0 -1
  167. package/dist/components/messages/renderers/WebSearchRenderer.js +0 -29
  168. package/dist/components/messages/renderers/WebSearchRenderer.js.map +0 -1
  169. package/dist/components/messages/renderers/WriteRenderer.js +0 -28
  170. package/dist/components/messages/renderers/WriteRenderer.js.map +0 -1
  171. package/dist/components/messages/renderers/index.js +0 -129
  172. package/dist/components/messages/renderers/index.js.map +0 -1
  173. package/dist/components/messages/renderers/shared/CopyButton.js +0 -27
  174. package/dist/components/messages/renderers/shared/CopyButton.js.map +0 -1
  175. package/dist/components/messages/renderers/shared/ImagePreview.js +0 -14
  176. package/dist/components/messages/renderers/shared/ImagePreview.js.map +0 -1
  177. package/dist/components/messages/renderers/shared/ToolContentBox.js +0 -9
  178. package/dist/components/messages/renderers/shared/ToolContentBox.js.map +0 -1
  179. package/dist/components/messages/renderers/shared/ToolHeader.js +0 -69
  180. package/dist/components/messages/renderers/shared/ToolHeader.js.map +0 -1
  181. package/dist/components/messages/renderers/shared/index.js +0 -5
  182. package/dist/components/messages/renderers/shared/index.js.map +0 -1
  183. package/dist/components/messages/renderers/types.js +0 -2
  184. package/dist/components/messages/renderers/types.js.map +0 -1
  185. package/dist/components/messages/renderers/utils.js +0 -60
  186. package/dist/components/messages/renderers/utils.js.map +0 -1
  187. package/dist/components/onboarding/OnboardingModal.js +0 -22
  188. package/dist/components/onboarding/OnboardingModal.js.map +0 -1
  189. package/dist/components/onboarding/index.js +0 -4
  190. package/dist/components/onboarding/index.js.map +0 -1
  191. package/dist/components/onboarding/steps/DefaultsStep.js +0 -104
  192. package/dist/components/onboarding/steps/DefaultsStep.js.map +0 -1
  193. package/dist/components/onboarding/steps/ProviderSetupStep.js +0 -398
  194. package/dist/components/onboarding/steps/ProviderSetupStep.js.map +0 -1
  195. package/dist/components/research/ResearchSidebar.js +0 -288
  196. package/dist/components/research/ResearchSidebar.js.map +0 -1
  197. package/dist/components/research/ResearchSidebarToggle.js +0 -15
  198. package/dist/components/research/ResearchSidebarToggle.js.map +0 -1
  199. package/dist/components/research/index.js +0 -3
  200. package/dist/components/research/index.js.map +0 -1
  201. package/dist/components/session-files/SessionFilesDiffPanel.js +0 -345
  202. package/dist/components/session-files/SessionFilesDiffPanel.js.map +0 -1
  203. package/dist/components/session-files/SessionFilesSidebar.js +0 -87
  204. package/dist/components/session-files/SessionFilesSidebar.js.map +0 -1
  205. package/dist/components/session-files/SessionFilesSidebarToggle.js +0 -15
  206. package/dist/components/session-files/SessionFilesSidebarToggle.js.map +0 -1
  207. package/dist/components/session-files/index.js +0 -4
  208. package/dist/components/session-files/index.js.map +0 -1
  209. package/dist/components/sessions/EditableTitle.js +0 -40
  210. package/dist/components/sessions/EditableTitle.js.map +0 -1
  211. package/dist/components/sessions/LeanHeader.js +0 -70
  212. package/dist/components/sessions/LeanHeader.js.map +0 -1
  213. package/dist/components/sessions/SessionHeader.js +0 -75
  214. package/dist/components/sessions/SessionHeader.js.map +0 -1
  215. package/dist/components/sessions/SessionItem.js +0 -28
  216. package/dist/components/sessions/SessionItem.js.map +0 -1
  217. package/dist/components/sessions/SessionListContainer.js +0 -86
  218. package/dist/components/sessions/SessionListContainer.js.map +0 -1
  219. package/dist/components/settings/SettingsSidebar.js +0 -212
  220. package/dist/components/settings/SettingsSidebar.js.map +0 -1
  221. package/dist/components/settings/SettingsSidebarToggle.js +0 -12
  222. package/dist/components/settings/SettingsSidebarToggle.js.map +0 -1
  223. package/dist/components/settings/SetuTopupModal.js +0 -306
  224. package/dist/components/settings/SetuTopupModal.js.map +0 -1
  225. package/dist/components/skills/SkillViewerPanel.js +0 -89
  226. package/dist/components/skills/SkillViewerPanel.js.map +0 -1
  227. package/dist/components/skills/SkillsSidebar.js +0 -59
  228. package/dist/components/skills/SkillsSidebar.js.map +0 -1
  229. package/dist/components/skills/SkillsSidebarToggle.js +0 -12
  230. package/dist/components/skills/SkillsSidebarToggle.js.map +0 -1
  231. package/dist/components/skills/index.js +0 -4
  232. package/dist/components/skills/index.js.map +0 -1
  233. package/dist/components/terminals/TerminalPanelToggle.js +0 -13
  234. package/dist/components/terminals/TerminalPanelToggle.js.map +0 -1
  235. package/dist/components/terminals/TerminalTabBar.js +0 -22
  236. package/dist/components/terminals/TerminalTabBar.js.map +0 -1
  237. package/dist/components/terminals/TerminalViewer.js +0 -371
  238. package/dist/components/terminals/TerminalViewer.js.map +0 -1
  239. package/dist/components/terminals/TerminalsPanel.js +0 -134
  240. package/dist/components/terminals/TerminalsPanel.js.map +0 -1
  241. package/dist/components/terminals/index.js +0 -11
  242. package/dist/components/terminals/index.js.map +0 -1
  243. package/dist/components/tunnel/TunnelSidebar.js +0 -55
  244. package/dist/components/tunnel/TunnelSidebar.js.map +0 -1
  245. package/dist/components/tunnel/TunnelSidebarToggle.js +0 -14
  246. package/dist/components/tunnel/TunnelSidebarToggle.js.map +0 -1
  247. package/dist/components/tunnel/index.js +0 -3
  248. package/dist/components/tunnel/index.js.map +0 -1
  249. package/dist/components/ui/Button.js +0 -19
  250. package/dist/components/ui/Button.js.map +0 -1
  251. package/dist/components/ui/Card.js +0 -7
  252. package/dist/components/ui/Card.js.map +0 -1
  253. package/dist/components/ui/ConfirmationDialog.js +0 -72
  254. package/dist/components/ui/ConfirmationDialog.js.map +0 -1
  255. package/dist/components/ui/Input.js +0 -7
  256. package/dist/components/ui/Input.js.map +0 -1
  257. package/dist/components/ui/Modal.js +0 -51
  258. package/dist/components/ui/Modal.js.map +0 -1
  259. package/dist/components/ui/ResizeHandle.js +0 -39
  260. package/dist/components/ui/ResizeHandle.js.map +0 -1
  261. package/dist/components/ui/Textarea.js +0 -7
  262. package/dist/components/ui/Textarea.js.map +0 -1
  263. package/dist/components/ui/Toaster.js +0 -41
  264. package/dist/components/ui/Toaster.js.map +0 -1
  265. package/dist/components/ui/ToolApprovalDialog.js +0 -57
  266. package/dist/components/ui/ToolApprovalDialog.js.map +0 -1
  267. package/dist/hooks/useAuthStatus.js +0 -287
  268. package/dist/hooks/useAuthStatus.js.map +0 -1
  269. package/dist/hooks/useBranch.js +0 -44
  270. package/dist/hooks/useBranch.js.map +0 -1
  271. package/dist/hooks/useCommandSuggestions.js +0 -86
  272. package/dist/hooks/useCommandSuggestions.js.map +0 -1
  273. package/dist/hooks/useConfig.js +0 -32
  274. package/dist/hooks/useConfig.js.map +0 -1
  275. package/dist/hooks/useFileBrowser.js +0 -30
  276. package/dist/hooks/useFileBrowser.js.map +0 -1
  277. package/dist/hooks/useFileMention.js +0 -56
  278. package/dist/hooks/useFileMention.js.map +0 -1
  279. package/dist/hooks/useFileUpload.js +0 -317
  280. package/dist/hooks/useFileUpload.js.map +0 -1
  281. package/dist/hooks/useFiles.js +0 -15
  282. package/dist/hooks/useFiles.js.map +0 -1
  283. package/dist/hooks/useGit.js +0 -149
  284. package/dist/hooks/useGit.js.map +0 -1
  285. package/dist/hooks/useImageUpload.js +0 -197
  286. package/dist/hooks/useImageUpload.js.map +0 -1
  287. package/dist/hooks/useKeyboardShortcuts.js +0 -249
  288. package/dist/hooks/useKeyboardShortcuts.js.map +0 -1
  289. package/dist/hooks/useMCP.js +0 -202
  290. package/dist/hooks/useMCP.js.map +0 -1
  291. package/dist/hooks/useMessages.js +0 -26
  292. package/dist/hooks/useMessages.js.map +0 -1
  293. package/dist/hooks/usePreferences.js +0 -61
  294. package/dist/hooks/usePreferences.js.map +0 -1
  295. package/dist/hooks/useProviderUsage.js +0 -44
  296. package/dist/hooks/useProviderUsage.js.map +0 -1
  297. package/dist/hooks/useQueueState.js +0 -31
  298. package/dist/hooks/useQueueState.js.map +0 -1
  299. package/dist/hooks/useResearch.js +0 -139
  300. package/dist/hooks/useResearch.js.map +0 -1
  301. package/dist/hooks/useSessionFiles.js +0 -15
  302. package/dist/hooks/useSessionFiles.js.map +0 -1
  303. package/dist/hooks/useSessionStream.js +0 -572
  304. package/dist/hooks/useSessionStream.js.map +0 -1
  305. package/dist/hooks/useSessions.js +0 -83
  306. package/dist/hooks/useSessions.js.map +0 -1
  307. package/dist/hooks/useSetuBalance.js +0 -71
  308. package/dist/hooks/useSetuBalance.js.map +0 -1
  309. package/dist/hooks/useSetuPayments.js +0 -171
  310. package/dist/hooks/useSetuPayments.js.map +0 -1
  311. package/dist/hooks/useShareStatus.js +0 -12
  312. package/dist/hooks/useShareStatus.js.map +0 -1
  313. package/dist/hooks/useSkills.js +0 -54
  314. package/dist/hooks/useSkills.js.map +0 -1
  315. package/dist/hooks/useTerminals.js +0 -67
  316. package/dist/hooks/useTerminals.js.map +0 -1
  317. package/dist/hooks/useTheme.js +0 -57
  318. package/dist/hooks/useTheme.js.map +0 -1
  319. package/dist/hooks/useToolApprovalShortcuts.js +0 -88
  320. package/dist/hooks/useToolApprovalShortcuts.js.map +0 -1
  321. package/dist/hooks/useTopupCallback.js +0 -74
  322. package/dist/hooks/useTopupCallback.js.map +0 -1
  323. package/dist/hooks/useTunnel.js +0 -158
  324. package/dist/hooks/useTunnel.js.map +0 -1
  325. package/dist/hooks/useVimMode.js +0 -298
  326. package/dist/hooks/useVimMode.js.map +0 -1
  327. package/dist/hooks/useWorkingDirectory.js +0 -34
  328. package/dist/hooks/useWorkingDirectory.js.map +0 -1
  329. package/dist/lib/api-client/approval.js +0 -25
  330. package/dist/lib/api-client/approval.js.map +0 -1
  331. package/dist/lib/api-client/auth.js +0 -139
  332. package/dist/lib/api-client/auth.js.map +0 -1
  333. package/dist/lib/api-client/branches.js +0 -45
  334. package/dist/lib/api-client/branches.js.map +0 -1
  335. package/dist/lib/api-client/config.js +0 -38
  336. package/dist/lib/api-client/config.js.map +0 -1
  337. package/dist/lib/api-client/files.js +0 -35
  338. package/dist/lib/api-client/files.js.map +0 -1
  339. package/dist/lib/api-client/git.js +0 -154
  340. package/dist/lib/api-client/git.js.map +0 -1
  341. package/dist/lib/api-client/index.js +0 -92
  342. package/dist/lib/api-client/index.js.map +0 -1
  343. package/dist/lib/api-client/sessions.js +0 -106
  344. package/dist/lib/api-client/sessions.js.map +0 -1
  345. package/dist/lib/api-client/setu.js +0 -144
  346. package/dist/lib/api-client/setu.js.map +0 -1
  347. package/dist/lib/api-client/skills.js +0 -31
  348. package/dist/lib/api-client/skills.js.map +0 -1
  349. package/dist/lib/api-client/utils.js +0 -65
  350. package/dist/lib/api-client/utils.js.map +0 -1
  351. package/dist/lib/commands.js +0 -124
  352. package/dist/lib/commands.js.map +0 -1
  353. package/dist/lib/config.js +0 -28
  354. package/dist/lib/config.js.map +0 -1
  355. package/dist/lib/nerd-font.js +0 -55
  356. package/dist/lib/nerd-font.js.map +0 -1
  357. package/dist/lib/open-url.js +0 -9
  358. package/dist/lib/open-url.js.map +0 -1
  359. package/dist/lib/parseResearchContext.js +0 -30
  360. package/dist/lib/parseResearchContext.js.map +0 -1
  361. package/dist/lib/sse-client.js +0 -113
  362. package/dist/lib/sse-client.js.map +0 -1
  363. package/dist/stores/confirmationStore.js +0 -27
  364. package/dist/stores/confirmationStore.js.map +0 -1
  365. package/dist/stores/fileBrowserStore.js +0 -63
  366. package/dist/stores/fileBrowserStore.js.map +0 -1
  367. package/dist/stores/filePickerStore.js +0 -8
  368. package/dist/stores/filePickerStore.js.map +0 -1
  369. package/dist/stores/focusStore.js +0 -12
  370. package/dist/stores/focusStore.js.map +0 -1
  371. package/dist/stores/gitStore.js +0 -63
  372. package/dist/stores/gitStore.js.map +0 -1
  373. package/dist/stores/mcpStore.js +0 -63
  374. package/dist/stores/mcpStore.js.map +0 -1
  375. package/dist/stores/onboardingStore.js +0 -38
  376. package/dist/stores/onboardingStore.js.map +0 -1
  377. package/dist/stores/panelWidthStore.js +0 -12
  378. package/dist/stores/panelWidthStore.js.map +0 -1
  379. package/dist/stores/pendingResearchStore.js +0 -38
  380. package/dist/stores/pendingResearchStore.js.map +0 -1
  381. package/dist/stores/queueStore.js +0 -11
  382. package/dist/stores/queueStore.js.map +0 -1
  383. package/dist/stores/researchStore.js +0 -54
  384. package/dist/stores/researchStore.js.map +0 -1
  385. package/dist/stores/sessionFilesStore.js +0 -62
  386. package/dist/stores/sessionFilesStore.js.map +0 -1
  387. package/dist/stores/settingsStore.js +0 -29
  388. package/dist/stores/settingsStore.js.map +0 -1
  389. package/dist/stores/setuStore.js +0 -29
  390. package/dist/stores/setuStore.js.map +0 -1
  391. package/dist/stores/sidebarStore.js +0 -10
  392. package/dist/stores/sidebarStore.js.map +0 -1
  393. package/dist/stores/skillsStore.js +0 -46
  394. package/dist/stores/skillsStore.js.map +0 -1
  395. package/dist/stores/terminalStore.js +0 -32
  396. package/dist/stores/terminalStore.js.map +0 -1
  397. package/dist/stores/toastStore.js +0 -46
  398. package/dist/stores/toastStore.js.map +0 -1
  399. package/dist/stores/toolApprovalStore.js +0 -16
  400. package/dist/stores/toolApprovalStore.js.map +0 -1
  401. package/dist/stores/topupApprovalStore.js +0 -11
  402. package/dist/stores/topupApprovalStore.js.map +0 -1
  403. package/dist/stores/tunnelStore.js +0 -55
  404. package/dist/stores/tunnelStore.js.map +0 -1
  405. package/dist/stores/usageStore.js +0 -14
  406. package/dist/stores/usageStore.js.map +0 -1
@@ -1,275 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useRef } from 'react';
3
- import { Modal } from '../ui/Modal';
4
- import { Keyboard, Command } from 'lucide-react';
5
- const SHORTCUTS = [
6
- {
7
- keys: ['Ctrl', 'H'],
8
- description: 'Navigate to left sidebar (sessions)',
9
- category: 'Navigation',
10
- },
11
- {
12
- keys: ['Ctrl', 'L'],
13
- description: 'Navigate to right sidebar (git)',
14
- category: 'Navigation',
15
- },
16
- {
17
- keys: ['Ctrl', '/'],
18
- description: 'Toggle left sidebar collapse/expand',
19
- category: 'Navigation',
20
- },
21
- {
22
- keys: ['Ctrl', '\\'],
23
- description: 'Toggle right sidebar collapse/expand',
24
- category: 'Navigation',
25
- },
26
- {
27
- keys: ['Ctrl', 'N'],
28
- description: 'Create new session',
29
- category: 'Navigation',
30
- },
31
- {
32
- keys: ['ESC'],
33
- description: 'Close sidebar and return to center',
34
- category: 'Navigation',
35
- },
36
- {
37
- keys: ['J'],
38
- description: 'Navigate to next item (in focused list)',
39
- category: 'List Navigation',
40
- },
41
- {
42
- keys: ['K'],
43
- description: 'Navigate to previous item (in focused list)',
44
- category: 'List Navigation',
45
- },
46
- {
47
- keys: ['Enter'],
48
- description: 'Select focused item and return to input',
49
- category: 'List Navigation',
50
- },
51
- {
52
- keys: ['Space'],
53
- description: 'Toggle stage/unstage for focused file (git panel)',
54
- category: 'Git Operations',
55
- },
56
- {
57
- keys: ['A'],
58
- description: 'Stage all unstaged files',
59
- category: 'Git Operations',
60
- },
61
- {
62
- keys: ['U'],
63
- description: 'Unstage all staged files',
64
- category: 'Git Operations',
65
- },
66
- {
67
- keys: ['C'],
68
- description: 'Open commit modal (if files are staged)',
69
- category: 'Git Operations',
70
- },
71
- {
72
- keys: ['Tab'],
73
- description: 'Toggle plan mode',
74
- category: 'Chat',
75
- },
76
- {
77
- keys: ['Enter'],
78
- description: 'Send message',
79
- category: 'Chat',
80
- },
81
- {
82
- keys: ['Shift', 'Enter'],
83
- description: 'New line in message',
84
- category: 'Chat',
85
- },
86
- {
87
- keys: ['@'],
88
- description: 'Mention file (opens file picker)',
89
- category: 'Chat',
90
- },
91
- {
92
- keys: ['/'],
93
- description: 'Slash command (opens command menu)',
94
- category: 'Chat',
95
- },
96
- ];
97
- const VIM_MODE_SHORTCUTS = [
98
- {
99
- keys: ['i'],
100
- description: 'Enter insert mode at cursor (vim mode)',
101
- category: 'Vim Mode',
102
- },
103
- {
104
- keys: ['a'],
105
- description: 'Enter insert mode after cursor (vim mode)',
106
- category: 'Vim Mode',
107
- },
108
- {
109
- keys: ['I'],
110
- description: 'Enter insert mode at line start (vim mode)',
111
- category: 'Vim Mode',
112
- },
113
- {
114
- keys: ['A'],
115
- description: 'Enter insert mode at line end (vim mode)',
116
- category: 'Vim Mode',
117
- },
118
- {
119
- keys: ['o'],
120
- description: 'New line below and enter insert mode (vim mode)',
121
- category: 'Vim Mode',
122
- },
123
- {
124
- keys: ['O'],
125
- description: 'New line above and enter insert mode (vim mode)',
126
- category: 'Vim Mode',
127
- },
128
- {
129
- keys: ['ESC'],
130
- description: 'Return to normal mode (vim mode)',
131
- category: 'Vim Mode',
132
- },
133
- {
134
- keys: ['Enter'],
135
- description: 'Send message in normal mode (vim mode)',
136
- category: 'Vim Mode',
137
- },
138
- {
139
- keys: ['w'],
140
- description: 'Jump to next word start (vim mode)',
141
- category: 'Vim Mode',
142
- },
143
- {
144
- keys: ['e'],
145
- description: 'Jump to next word end (vim mode)',
146
- category: 'Vim Mode',
147
- },
148
- {
149
- keys: ['b'],
150
- description: 'Jump to previous word start (vim mode)',
151
- category: 'Vim Mode',
152
- },
153
- {
154
- keys: ['x'],
155
- description: 'Delete character under cursor (vim mode)',
156
- category: 'Vim Mode',
157
- },
158
- {
159
- keys: ['s'],
160
- description: 'Delete character and enter insert mode (vim mode)',
161
- category: 'Vim Mode',
162
- },
163
- {
164
- keys: ['S'],
165
- description: 'Delete line and enter insert mode (vim mode)',
166
- category: 'Vim Mode',
167
- },
168
- {
169
- keys: ['f', '{char}'],
170
- description: 'Find and jump to next character on line (vim mode)',
171
- category: 'Vim Mode',
172
- },
173
- {
174
- keys: ['d', 'd'],
175
- description: 'Delete current line (vim mode)',
176
- category: 'Vim Mode',
177
- },
178
- {
179
- keys: ['0'],
180
- description: 'Jump to line start (vim mode)',
181
- category: 'Vim Mode',
182
- },
183
- {
184
- keys: ['$'],
185
- description: 'Jump to line end (vim mode)',
186
- category: 'Vim Mode',
187
- },
188
- ];
189
- const SLASH_COMMANDS = [
190
- {
191
- command: '/models',
192
- description: 'Open model selector',
193
- },
194
- {
195
- command: '/agents',
196
- description: 'Open agent selector',
197
- },
198
- {
199
- command: '/new',
200
- description: 'Create new session',
201
- },
202
- {
203
- command: '/help',
204
- description: 'Show keyboard shortcuts and help (this modal)',
205
- },
206
- {
207
- command: '/compact',
208
- description: 'Compact conversation to reduce context size',
209
- },
210
- ];
211
- function groupShortcutsByCategory(shortcuts) {
212
- const grouped = {};
213
- for (const shortcut of shortcuts) {
214
- if (!grouped[shortcut.category]) {
215
- grouped[shortcut.category] = [];
216
- }
217
- grouped[shortcut.category].push(shortcut);
218
- }
219
- return grouped;
220
- }
221
- export function ShortcutsModal({ isOpen, onClose }) {
222
- const allShortcuts = [...SHORTCUTS, ...VIM_MODE_SHORTCUTS];
223
- const groupedShortcuts = groupShortcutsByCategory(allShortcuts);
224
- const modalContentRef = useRef(null);
225
- const previousActiveElement = useRef(null);
226
- useEffect(() => {
227
- if (isOpen) {
228
- previousActiveElement.current = document.activeElement;
229
- if (previousActiveElement.current) {
230
- previousActiveElement.current.blur();
231
- }
232
- }
233
- else {
234
- if (previousActiveElement.current) {
235
- previousActiveElement.current.focus();
236
- previousActiveElement.current = null;
237
- }
238
- }
239
- }, [isOpen]);
240
- useEffect(() => {
241
- if (!isOpen)
242
- return;
243
- const handleKeyDown = (e) => {
244
- const target = e.target;
245
- const isInputField = target.tagName === 'INPUT' ||
246
- target.tagName === 'TEXTAREA' ||
247
- target.isContentEditable;
248
- if (isInputField)
249
- return;
250
- if (e.key === 'j') {
251
- e.preventDefault();
252
- const container = modalContentRef.current;
253
- if (container) {
254
- container.scrollBy({ top: 100, behavior: 'smooth' });
255
- }
256
- }
257
- else if (e.key === 'k') {
258
- e.preventDefault();
259
- const container = modalContentRef.current;
260
- if (container) {
261
- container.scrollBy({ top: -100, behavior: 'smooth' });
262
- }
263
- }
264
- else if (e.key === 'Enter') {
265
- e.preventDefault();
266
- onClose();
267
- }
268
- };
269
- document.addEventListener('keydown', handleKeyDown);
270
- return () => document.removeEventListener('keydown', handleKeyDown);
271
- }, [isOpen, onClose]);
272
- return (_jsx(Modal, { isOpen: isOpen, onClose: onClose, title: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Keyboard, { className: "w-5 h-5" }), _jsx("span", { children: "Keyboard Shortcuts & Help" })] }), maxWidth: "2xl", closeOnEscape: true, closeOnBackdropClick: true, children: _jsxs("div", { ref: modalContentRef, className: "space-y-6 max-h-[70vh] overflow-y-auto", children: [Object.entries(groupedShortcuts).map(([category, shortcuts]) => (_jsxs("div", { children: [_jsxs("h3", { className: "text-sm font-semibold text-foreground mb-3 flex items-center gap-2", children: [_jsx(Command, { className: "w-4 h-4" }), category] }), _jsx("div", { className: "space-y-2", children: shortcuts.map((shortcut, _index) => (_jsxs("div", { className: "flex items-center justify-between py-2 px-3 rounded-lg bg-accent/50 hover:bg-accent transition-colors", children: [_jsx("span", { className: "text-sm text-foreground", children: shortcut.description }), _jsx("div", { className: "flex items-center gap-1", children: shortcut.keys.map((key) => (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx("kbd", { className: "px-2 py-1 text-xs font-mono bg-background border border-border rounded shadow-sm", children: key }), shortcut.keys.indexOf(key) <
273
- shortcut.keys.length - 1 && (_jsx("span", { className: "text-muted-foreground", children: "+" }))] }, key))) })] }, `${category}-${shortcut.description}`))) })] }, category))), _jsxs("div", { children: [_jsxs("h3", { className: "text-sm font-semibold text-foreground mb-3 flex items-center gap-2", children: [_jsx(Command, { className: "w-4 h-4" }), "Slash Commands"] }), _jsx("div", { className: "space-y-2", children: SLASH_COMMANDS.map((cmd, _index) => (_jsxs("div", { className: "flex items-center justify-between py-2 px-3 rounded-lg bg-accent/50 hover:bg-accent transition-colors", children: [_jsx("span", { className: "text-sm text-foreground", children: cmd.description }), _jsx("kbd", { className: "px-2 py-1 text-xs font-mono bg-background border border-border rounded shadow-sm", children: cmd.command })] }, cmd.command))) })] }), _jsx("div", { className: "pt-4 border-t border-border", children: _jsxs("p", { className: "text-xs text-muted-foreground", children: [_jsx("strong", { children: "Tip:" }), " Shortcuts are disabled when typing in input fields. Press ", _jsx("kbd", { className: "text-xs", children: "ESC" }), " to close popups and return focus to chat input."] }) })] }) }));
274
- }
275
- //# sourceMappingURL=ShortcutsModal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShortcutsModal.js","sourceRoot":"","sources":["../../../src/components/chat/ShortcutsModal.tsx"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { StopCircle } from 'lucide-react';
3
- import { useState } from 'react';
4
- import { apiClient } from '../../lib/api-client';
5
- export function StopButton({ sessionId, onStop, disabled }) {
6
- const [isAborting, setIsAborting] = useState(false);
7
- const handleStop = async () => {
8
- if (isAborting)
9
- return;
10
- setIsAborting(true);
11
- try {
12
- await apiClient.abortSession(sessionId);
13
- onStop?.();
14
- }
15
- catch (error) {
16
- console.error('Failed to abort stream:', error);
17
- }
18
- finally {
19
- // Keep button disabled for a bit to prevent double-clicks
20
- setTimeout(() => setIsAborting(false), 1000);
21
- }
22
- };
23
- return (_jsxs("button", { type: "button", onClick: handleStop, disabled: disabled || isAborting, className: "flex items-center gap-1.5 text-sm text-destructive hover:text-destructive/80 disabled:opacity-50 disabled:cursor-not-allowed transition-colors", title: "Stop generation", children: [_jsx(StopCircle, { className: "w-4 h-4" }), _jsx("span", { className: "font-medium", children: isAborting ? 'Stopping...' : 'Stop' })] }));
24
- }
25
- //# sourceMappingURL=StopButton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StopButton.js","sourceRoot":"","sources":["../../../src/components/chat/StopButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAQjD,MAAM,UAAU,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAmB;IAC1E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC7B,IAAI,UAAU;YAAE,OAAO;QACvB,aAAa,CAAC,IAAI,CAAC,CAAC;QAEpB,IAAI,CAAC;YACJ,MAAM,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,EAAE,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;gBAAS,CAAC;YACV,0DAA0D;YAC1D,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC,CAAC;IAEF,OAAO,CACN,kBACC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,QAAQ,IAAI,UAAU,EAChC,SAAS,EAAC,gJAAgJ,EAC1J,KAAK,EAAC,iBAAiB,aAEvB,KAAC,UAAU,IAAC,SAAS,EAAC,SAAS,GAAG,EAClC,eAAM,SAAS,EAAC,aAAa,YAAE,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,GAAQ,IAClE,CACT,CAAC;AACH,CAAC"}
@@ -1,107 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect, useRef, useMemo, useImperativeHandle, forwardRef, } from 'react';
3
- import { ChevronDown, Search } from 'lucide-react';
4
- import Fuse from 'fuse.js';
5
- export const UnifiedAgentSelector = forwardRef(function UnifiedAgentSelector({ agent, agents, onChange, disabled = false }, ref) {
6
- const [isOpen, setIsOpen] = useState(false);
7
- const [searchQuery, setSearchQuery] = useState('');
8
- const [highlightedIndex, setHighlightedIndex] = useState(0);
9
- const dropdownRef = useRef(null);
10
- const searchInputRef = useRef(null);
11
- const itemRefs = useRef([]);
12
- useImperativeHandle(ref, () => ({
13
- openAndFocus: () => {
14
- setIsOpen(true);
15
- },
16
- }));
17
- const fuse = useMemo(() => {
18
- return new Fuse(agents, {
19
- threshold: 0.4,
20
- ignoreLocation: true,
21
- });
22
- }, [agents]);
23
- const filteredAgents = useMemo(() => {
24
- if (!searchQuery.trim())
25
- return agents;
26
- const results = fuse.search(searchQuery);
27
- return results.map((result) => result.item);
28
- }, [agents, searchQuery, fuse]);
29
- useEffect(() => {
30
- if (isOpen) {
31
- setHighlightedIndex(0);
32
- }
33
- }, [isOpen]);
34
- useEffect(() => {
35
- if (isOpen &&
36
- highlightedIndex >= 0 &&
37
- highlightedIndex < itemRefs.current.length) {
38
- itemRefs.current[highlightedIndex]?.scrollIntoView({
39
- block: 'nearest',
40
- behavior: 'smooth',
41
- });
42
- }
43
- }, [highlightedIndex, isOpen]);
44
- useEffect(() => {
45
- const handleClickOutside = (event) => {
46
- if (dropdownRef.current &&
47
- !dropdownRef.current.contains(event.target)) {
48
- setIsOpen(false);
49
- }
50
- };
51
- const handleEscape = (event) => {
52
- const target = event.target;
53
- const isInInput = target.tagName === 'INPUT' ||
54
- target.tagName === 'TEXTAREA' ||
55
- target.isContentEditable;
56
- if (event.key === 'Escape' || (event.key === 'q' && !isInInput)) {
57
- setIsOpen(false);
58
- }
59
- };
60
- if (isOpen) {
61
- document.addEventListener('mousedown', handleClickOutside);
62
- document.addEventListener('keydown', handleEscape);
63
- setTimeout(() => searchInputRef.current?.focus(), 0);
64
- }
65
- return () => {
66
- document.removeEventListener('mousedown', handleClickOutside);
67
- document.removeEventListener('keydown', handleEscape);
68
- };
69
- }, [isOpen]);
70
- const handleSelect = (selectedAgent) => {
71
- onChange(selectedAgent);
72
- setIsOpen(false);
73
- setSearchQuery('');
74
- };
75
- const handleSearchKeyDown = (event) => {
76
- if (filteredAgents.length === 0)
77
- return;
78
- if (event.key === 'ArrowDown' || (event.ctrlKey && event.key === 'j')) {
79
- event.preventDefault();
80
- setHighlightedIndex((prev) => prev < filteredAgents.length - 1 ? prev + 1 : 0);
81
- }
82
- else if (event.key === 'ArrowUp' ||
83
- (event.ctrlKey && event.key === 'k')) {
84
- event.preventDefault();
85
- setHighlightedIndex((prev) => prev > 0 ? prev - 1 : filteredAgents.length - 1);
86
- }
87
- else if (event.key === 'Enter') {
88
- event.preventDefault();
89
- const highlighted = filteredAgents[highlightedIndex];
90
- if (highlighted) {
91
- handleSelect(highlighted);
92
- }
93
- }
94
- };
95
- return (_jsxs("div", { ref: dropdownRef, className: "relative w-full", children: [_jsxs("button", { type: "button", onClick: () => !disabled && setIsOpen(!isOpen), disabled: disabled, className: "w-full flex items-center justify-between px-3 py-2 bg-[hsl(var(--secondary))] border border-[hsl(var(--border))] rounded-md hover:bg-[hsl(var(--accent))] focus:outline-none focus:ring-2 focus:ring-[hsl(var(--ring))] disabled:opacity-50 disabled:cursor-not-allowed transition-colors", children: [_jsx("span", { className: "text-sm text-[hsl(var(--foreground))] truncate", children: agent }), _jsx(ChevronDown, { className: `w-4 h-4 text-[hsl(var(--muted-foreground))] transition-transform ${isOpen ? 'rotate-180' : ''}` })] }), isOpen && (_jsxs("div", { className: "absolute z-50 mt-1 w-full bg-[hsl(var(--popover))] border border-[hsl(var(--border))] rounded-md shadow-lg max-h-80 overflow-hidden flex flex-col", children: [_jsx("div", { className: "p-2 border-b border-[hsl(var(--border))]", children: _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[hsl(var(--muted-foreground))]" }), _jsx("input", { ref: searchInputRef, type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onKeyDown: handleSearchKeyDown, placeholder: "Search agents...", className: "w-full pl-9 pr-3 py-2 bg-[hsl(var(--secondary))] border border-[hsl(var(--border))] rounded text-sm text-[hsl(var(--foreground))] placeholder-[hsl(var(--muted-foreground))] focus:outline-none focus:ring-2 focus:ring-[hsl(var(--ring))]" })] }) }), _jsx("div", { className: "overflow-y-auto", children: filteredAgents.length === 0 ? (_jsx("div", { className: "p-4 text-center text-[hsl(var(--muted-foreground))] text-sm", children: "No agents found" })) : (filteredAgents.map((agentItem, index) => {
96
- const isSelected = agentItem === agent;
97
- const isHighlighted = index === highlightedIndex;
98
- return (_jsx("button", { ref: (el) => {
99
- itemRefs.current[index] = el;
100
- }, type: "button", onClick: () => handleSelect(agentItem), onMouseEnter: () => setHighlightedIndex(index), className: `w-full text-left px-4 py-2 text-sm transition-colors ${isHighlighted
101
- ? 'bg-[hsl(var(--accent))]'
102
- : 'hover:bg-[hsl(var(--accent))]'} ${isSelected
103
- ? 'text-[hsl(var(--accent-foreground))] font-medium'
104
- : 'text-[hsl(var(--foreground))]'}`, children: _jsx("span", { className: "truncate", children: agentItem }) }, agentItem));
105
- })) })] }))] }));
106
- });
107
- //# sourceMappingURL=UnifiedAgentSelector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UnifiedAgentSelector.js","sourceRoot":"","sources":["../../../src/components/chat/UnifiedAgentSelector.tsx"],"names":[],"mappings":"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"}
@@ -1,209 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect, useRef, useMemo, useImperativeHandle, forwardRef, } from 'react';
3
- import { ChevronDown, Search } from 'lucide-react';
4
- import Fuse from 'fuse.js';
5
- import { useAllModels } from '../../hooks/useConfig';
6
- export const UnifiedModelSelector = forwardRef(function UnifiedModelSelector({ provider, model, onChange, disabled = false }, ref) {
7
- const { data: allModels, isLoading } = useAllModels();
8
- const [isOpen, setIsOpen] = useState(false);
9
- const [searchQuery, setSearchQuery] = useState('');
10
- const [highlightedIndex, setHighlightedIndex] = useState(0);
11
- const dropdownRef = useRef(null);
12
- const searchInputRef = useRef(null);
13
- const itemRefs = useRef([]);
14
- useImperativeHandle(ref, () => ({
15
- openAndFocus: () => {
16
- setIsOpen(true);
17
- },
18
- }));
19
- const flattenedModels = useMemo(() => {
20
- if (!allModels)
21
- return [];
22
- const flattened = [];
23
- for (const [providerKey, providerData] of Object.entries(allModels)) {
24
- for (const modelItem of providerData.models) {
25
- flattened.push({
26
- providerKey,
27
- providerLabel: providerData.label,
28
- modelId: modelItem.id,
29
- modelLabel: modelItem.label,
30
- toolCall: modelItem.toolCall,
31
- reasoningText: modelItem.reasoningText,
32
- available: modelItem.available,
33
- unavailableReason: modelItem.unavailableReason,
34
- });
35
- }
36
- }
37
- return flattened;
38
- }, [allModels]);
39
- const fuse = useMemo(() => {
40
- return new Fuse(flattenedModels, {
41
- keys: [
42
- { name: 'modelLabel', weight: 2 },
43
- { name: 'modelId', weight: 1 },
44
- { name: 'providerLabel', weight: 0.5 },
45
- ],
46
- threshold: 0.3,
47
- ignoreLocation: true,
48
- includeScore: true,
49
- distance: 100,
50
- minMatchCharLength: 1,
51
- });
52
- }, [flattenedModels]);
53
- const filteredModels = useMemo(() => {
54
- if (!allModels)
55
- return {};
56
- if (!searchQuery.trim())
57
- return allModels;
58
- const results = fuse.search(searchQuery);
59
- const sortedResults = results.sort((a, b) => {
60
- const scoreA = a.score ?? 1;
61
- const scoreB = b.score ?? 1;
62
- if (Math.abs(scoreA - scoreB) < 0.001) {
63
- const labelA = a.item.modelLabel.toLowerCase();
64
- const labelB = b.item.modelLabel.toLowerCase();
65
- const query = searchQuery.toLowerCase();
66
- const indexA = labelA.indexOf(query);
67
- const indexB = labelB.indexOf(query);
68
- if (indexA >= 0 && indexB < 0)
69
- return -1;
70
- if (indexB >= 0 && indexA < 0)
71
- return 1;
72
- if (indexA >= 0 && indexB >= 0)
73
- return indexA - indexB;
74
- }
75
- return scoreA - scoreB;
76
- });
77
- const filtered = {};
78
- for (const result of sortedResults) {
79
- const item = result.item;
80
- if (!filtered[item.providerKey]) {
81
- filtered[item.providerKey] = {
82
- label: item.providerLabel,
83
- models: [],
84
- };
85
- }
86
- const existingModel = filtered[item.providerKey].models.find((m) => m.id === item.modelId);
87
- if (!existingModel) {
88
- filtered[item.providerKey].models.push({
89
- id: item.modelId,
90
- label: item.modelLabel,
91
- toolCall: item.toolCall,
92
- reasoningText: item.reasoningText,
93
- available: item.available,
94
- unavailableReason: item.unavailableReason,
95
- });
96
- }
97
- }
98
- return filtered;
99
- }, [allModels, searchQuery, fuse]);
100
- const filteredFlatList = useMemo(() => {
101
- const list = [];
102
- for (const [providerKey, providerData] of Object.entries(filteredModels)) {
103
- for (const modelItem of providerData.models) {
104
- list.push({
105
- providerKey,
106
- providerLabel: providerData.label,
107
- modelId: modelItem.id,
108
- modelLabel: modelItem.label,
109
- toolCall: modelItem.toolCall,
110
- reasoningText: modelItem.reasoningText,
111
- available: modelItem.available,
112
- unavailableReason: modelItem.unavailableReason,
113
- });
114
- }
115
- }
116
- return list;
117
- }, [filteredModels]);
118
- useEffect(() => {
119
- if (isOpen) {
120
- setHighlightedIndex(0);
121
- }
122
- }, [isOpen]);
123
- useEffect(() => {
124
- if (isOpen &&
125
- highlightedIndex >= 0 &&
126
- highlightedIndex < itemRefs.current.length) {
127
- itemRefs.current[highlightedIndex]?.scrollIntoView({
128
- block: 'nearest',
129
- behavior: 'smooth',
130
- });
131
- }
132
- }, [highlightedIndex, isOpen]);
133
- useEffect(() => {
134
- const handleClickOutside = (event) => {
135
- if (dropdownRef.current &&
136
- !dropdownRef.current.contains(event.target)) {
137
- setIsOpen(false);
138
- }
139
- };
140
- const handleEscape = (event) => {
141
- const target = event.target;
142
- const isInInput = target.tagName === 'INPUT' ||
143
- target.tagName === 'TEXTAREA' ||
144
- target.isContentEditable;
145
- if (event.key === 'Escape' || (event.key === 'q' && !isInInput)) {
146
- setIsOpen(false);
147
- }
148
- };
149
- if (isOpen) {
150
- document.addEventListener('mousedown', handleClickOutside);
151
- document.addEventListener('keydown', handleEscape);
152
- setTimeout(() => searchInputRef.current?.focus(), 0);
153
- }
154
- return () => {
155
- document.removeEventListener('mousedown', handleClickOutside);
156
- document.removeEventListener('keydown', handleEscape);
157
- };
158
- }, [isOpen]);
159
- const handleSelect = (selectedProvider, selectedModel, available) => {
160
- if (available === false)
161
- return;
162
- onChange(selectedProvider, selectedModel);
163
- setIsOpen(false);
164
- setSearchQuery('');
165
- };
166
- const handleSearchKeyDown = (event) => {
167
- if (filteredFlatList.length === 0)
168
- return;
169
- if (event.key === 'ArrowDown' || (event.ctrlKey && event.key === 'j')) {
170
- event.preventDefault();
171
- setHighlightedIndex((prev) => prev < filteredFlatList.length - 1 ? prev + 1 : 0);
172
- }
173
- else if (event.key === 'ArrowUp' ||
174
- (event.ctrlKey && event.key === 'k')) {
175
- event.preventDefault();
176
- setHighlightedIndex((prev) => prev > 0 ? prev - 1 : filteredFlatList.length - 1);
177
- }
178
- else if (event.key === 'Enter') {
179
- event.preventDefault();
180
- const highlighted = filteredFlatList[highlightedIndex];
181
- if (highlighted && highlighted.available !== false) {
182
- handleSelect(highlighted.providerKey, highlighted.modelId, highlighted.available);
183
- }
184
- }
185
- };
186
- const currentProviderLabel = allModels?.[provider]?.label || provider;
187
- const currentModelLabel = allModels?.[provider]?.models.find((m) => m.id === model)?.label || model;
188
- return (_jsxs("div", { ref: dropdownRef, className: "relative w-full", children: [_jsxs("button", { type: "button", onClick: () => !disabled && setIsOpen(!isOpen), disabled: disabled || isLoading, className: "w-full flex items-center justify-between px-3 py-2 bg-[hsl(var(--secondary))] border border-[hsl(var(--border))] rounded-md hover:bg-[hsl(var(--accent))] focus:outline-none focus:ring-2 focus:ring-[hsl(var(--ring))] disabled:opacity-50 disabled:cursor-not-allowed transition-colors", children: [_jsxs("span", { className: "flex items-center gap-2 text-sm truncate", children: [_jsx("span", { className: "text-[hsl(var(--muted-foreground))]", children: currentProviderLabel }), _jsx("span", { className: "text-[hsl(var(--muted-foreground))]/50", children: "/" }), _jsx("span", { className: "text-[hsl(var(--foreground))]", children: currentModelLabel })] }), _jsx(ChevronDown, { className: `w-4 h-4 text-[hsl(var(--muted-foreground))] transition-transform ${isOpen ? 'rotate-180' : ''}` })] }), isOpen && !isLoading && allModels && (_jsxs("div", { className: "absolute z-50 mt-1 w-full bg-[hsl(var(--popover))] border border-[hsl(var(--border))] rounded-md shadow-lg max-h-80 overflow-hidden flex flex-col", children: [_jsx("div", { className: "p-2 border-b border-[hsl(var(--border))]", children: _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[hsl(var(--muted-foreground))]" }), _jsx("input", { ref: searchInputRef, type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onKeyDown: handleSearchKeyDown, placeholder: "Search providers and models...", className: "w-full pl-9 pr-3 py-2 bg-[hsl(var(--secondary))] border border-[hsl(var(--border))] rounded text-sm text-[hsl(var(--foreground))] placeholder-[hsl(var(--muted-foreground))] focus:outline-none focus:ring-2 focus:ring-[hsl(var(--ring))]" })] }) }), _jsx("div", { className: "overflow-y-auto", children: Object.keys(filteredModels).length === 0 ? (_jsx("div", { className: "p-4 text-center text-[hsl(var(--muted-foreground))] text-sm", children: "No models found" })) : (Object.entries(filteredModels).map(([providerKey, providerData]) => (_jsxs("div", { className: "border-b border-[hsl(var(--border))] last:border-0", children: [_jsx("div", { className: "sticky top-0 px-3 py-2 text-xs font-semibold text-[hsl(var(--muted-foreground))] uppercase tracking-wider bg-[hsl(var(--muted))] z-10", children: providerData.label }), _jsx("div", { children: providerData.models.map((modelItem) => {
189
- const isSelected = providerKey === provider && modelItem.id === model;
190
- const flatIndex = filteredFlatList.findIndex((item) => item.providerKey === providerKey &&
191
- item.modelId === modelItem.id);
192
- const isHighlighted = flatIndex === highlightedIndex;
193
- const isAvailable = modelItem.available !== false;
194
- return (_jsxs("button", { ref: (el) => {
195
- if (flatIndex >= 0) {
196
- itemRefs.current[flatIndex] = el;
197
- }
198
- }, type: "button", disabled: !isAvailable, title: modelItem.unavailableReason, onClick: () => handleSelect(providerKey, modelItem.id, modelItem.available), onMouseEnter: () => setHighlightedIndex(flatIndex), className: `w-full text-left px-4 py-2 text-sm flex items-center justify-between transition-colors ${isHighlighted
199
- ? 'bg-[hsl(var(--accent))]'
200
- : 'hover:bg-[hsl(var(--accent))]'} ${isSelected
201
- ? 'text-[hsl(var(--accent-foreground))] font-medium'
202
- : 'text-[hsl(var(--foreground))]'} ${!isAvailable
203
- ? 'opacity-60 cursor-not-allowed'
204
- : ''}`, children: [_jsx("span", { className: "truncate", children: modelItem.label }), (!isAvailable ||
205
- modelItem.toolCall ||
206
- modelItem.reasoningText) && (_jsxs("div", { className: "flex gap-1 ml-2 flex-shrink-0", children: [!isAvailable && (_jsx("span", { className: "text-[10px] px-1.5 py-0.5 bg-red-600/20 text-red-400 rounded", children: "Unavailable" })), modelItem.toolCall && (_jsx("span", { className: "text-[10px] px-1.5 py-0.5 bg-green-600/20 text-green-400 rounded", children: "Tools" })), modelItem.reasoningText && (_jsx("span", { className: "text-[10px] px-1.5 py-0.5 bg-purple-600/20 text-purple-400 rounded", children: "Reasoning" }))] }))] }, modelItem.id));
207
- }) })] }, providerKey)))) })] }))] }));
208
- });
209
- //# sourceMappingURL=UnifiedModelSelector.js.map