@ottocode/web-sdk 0.1.173

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 (574) hide show
  1. package/README.md +187 -0
  2. package/dist/assets/fonts/JetBrainsMonoNerdFontMono-Bold.woff2 +0 -0
  3. package/dist/assets/fonts/JetBrainsMonoNerdFontMono-BoldItalic.woff2 +0 -0
  4. package/dist/assets/fonts/JetBrainsMonoNerdFontMono-Italic.woff2 +0 -0
  5. package/dist/assets/fonts/JetBrainsMonoNerdFontMono-Regular.woff2 +0 -0
  6. package/dist/assets/provider-logos.d.ts +12 -0
  7. package/dist/assets/provider-logos.d.ts.map +1 -0
  8. package/dist/assets/provider-logos.js +40 -0
  9. package/dist/assets/provider-logos.js.map +1 -0
  10. package/dist/components/branch/BranchModal.d.ts +11 -0
  11. package/dist/components/branch/BranchModal.d.ts.map +1 -0
  12. package/dist/components/branch/BranchModal.js +45 -0
  13. package/dist/components/branch/BranchModal.js.map +1 -0
  14. package/dist/components/chat/ChatInput.d.ts +35 -0
  15. package/dist/components/chat/ChatInput.d.ts.map +1 -0
  16. package/dist/components/chat/ChatInput.js +210 -0
  17. package/dist/components/chat/ChatInput.js.map +1 -0
  18. package/dist/components/chat/ChatInputContainer.d.ts +12 -0
  19. package/dist/components/chat/ChatInputContainer.d.ts.map +1 -0
  20. package/dist/components/chat/ChatInputContainer.js +295 -0
  21. package/dist/components/chat/ChatInputContainer.js.map +1 -0
  22. package/dist/components/chat/ChatInputKeyHandler.d.ts +27 -0
  23. package/dist/components/chat/ChatInputKeyHandler.d.ts.map +1 -0
  24. package/dist/components/chat/ChatInputKeyHandler.js +75 -0
  25. package/dist/components/chat/ChatInputKeyHandler.js.map +1 -0
  26. package/dist/components/chat/CommandSuggestionsPopup.d.ts +11 -0
  27. package/dist/components/chat/CommandSuggestionsPopup.d.ts.map +1 -0
  28. package/dist/components/chat/CommandSuggestionsPopup.js +43 -0
  29. package/dist/components/chat/CommandSuggestionsPopup.js.map +1 -0
  30. package/dist/components/chat/ConfigModal.d.ts +19 -0
  31. package/dist/components/chat/ConfigModal.d.ts.map +1 -0
  32. package/dist/components/chat/ConfigModal.js +47 -0
  33. package/dist/components/chat/ConfigModal.js.map +1 -0
  34. package/dist/components/chat/ConfigSelector.d.ts +11 -0
  35. package/dist/components/chat/ConfigSelector.d.ts.map +1 -0
  36. package/dist/components/chat/ConfigSelector.js +47 -0
  37. package/dist/components/chat/ConfigSelector.js.map +1 -0
  38. package/dist/components/chat/FileMentionPopup.d.ts +15 -0
  39. package/dist/components/chat/FileMentionPopup.d.ts.map +1 -0
  40. package/dist/components/chat/FileMentionPopup.js +123 -0
  41. package/dist/components/chat/FileMentionPopup.js.map +1 -0
  42. package/dist/components/chat/ShortcutsModal.d.ts +7 -0
  43. package/dist/components/chat/ShortcutsModal.d.ts.map +1 -0
  44. package/dist/components/chat/ShortcutsModal.js +275 -0
  45. package/dist/components/chat/ShortcutsModal.js.map +1 -0
  46. package/dist/components/chat/StopButton.d.ts +8 -0
  47. package/dist/components/chat/StopButton.d.ts.map +1 -0
  48. package/dist/components/chat/StopButton.js +25 -0
  49. package/dist/components/chat/StopButton.js.map +1 -0
  50. package/dist/components/chat/UnifiedAgentSelector.d.ts +12 -0
  51. package/dist/components/chat/UnifiedAgentSelector.d.ts.map +1 -0
  52. package/dist/components/chat/UnifiedAgentSelector.js +107 -0
  53. package/dist/components/chat/UnifiedAgentSelector.js.map +1 -0
  54. package/dist/components/chat/UnifiedModelSelector.d.ts +12 -0
  55. package/dist/components/chat/UnifiedModelSelector.d.ts.map +1 -0
  56. package/dist/components/chat/UnifiedModelSelector.js +198 -0
  57. package/dist/components/chat/UnifiedModelSelector.js.map +1 -0
  58. package/dist/components/common/ProviderLogo.d.ts +8 -0
  59. package/dist/components/common/ProviderLogo.d.ts.map +1 -0
  60. package/dist/components/common/ProviderLogo.js +29 -0
  61. package/dist/components/common/ProviderLogo.js.map +1 -0
  62. package/dist/components/common/StatusIndicator.d.ts +10 -0
  63. package/dist/components/common/StatusIndicator.d.ts.map +1 -0
  64. package/dist/components/common/StatusIndicator.js +57 -0
  65. package/dist/components/common/StatusIndicator.js.map +1 -0
  66. package/dist/components/git/GitCommitModal.d.ts +2 -0
  67. package/dist/components/git/GitCommitModal.d.ts.map +1 -0
  68. package/dist/components/git/GitCommitModal.js +70 -0
  69. package/dist/components/git/GitCommitModal.js.map +1 -0
  70. package/dist/components/git/GitDiffPanel.d.ts +2 -0
  71. package/dist/components/git/GitDiffPanel.d.ts.map +1 -0
  72. package/dist/components/git/GitDiffPanel.js +54 -0
  73. package/dist/components/git/GitDiffPanel.js.map +1 -0
  74. package/dist/components/git/GitDiffViewer.d.ts +7 -0
  75. package/dist/components/git/GitDiffViewer.d.ts.map +1 -0
  76. package/dist/components/git/GitDiffViewer.js +203 -0
  77. package/dist/components/git/GitDiffViewer.js.map +1 -0
  78. package/dist/components/git/GitFileItem.d.ts +9 -0
  79. package/dist/components/git/GitFileItem.d.ts.map +1 -0
  80. package/dist/components/git/GitFileItem.js +145 -0
  81. package/dist/components/git/GitFileItem.js.map +1 -0
  82. package/dist/components/git/GitFileList.d.ts +7 -0
  83. package/dist/components/git/GitFileList.d.ts.map +1 -0
  84. package/dist/components/git/GitFileList.js +108 -0
  85. package/dist/components/git/GitFileList.js.map +1 -0
  86. package/dist/components/git/GitSidebar.d.ts +2 -0
  87. package/dist/components/git/GitSidebar.d.ts.map +1 -0
  88. package/dist/components/git/GitSidebar.js +52 -0
  89. package/dist/components/git/GitSidebar.js.map +1 -0
  90. package/dist/components/git/GitSidebarToggle.d.ts +2 -0
  91. package/dist/components/git/GitSidebarToggle.d.ts.map +1 -0
  92. package/dist/components/git/GitSidebarToggle.js +16 -0
  93. package/dist/components/git/GitSidebarToggle.js.map +1 -0
  94. package/dist/components/index.d.ts +47 -0
  95. package/dist/components/index.d.ts.map +1 -0
  96. package/dist/components/index.js +60 -0
  97. package/dist/components/index.js.map +1 -0
  98. package/dist/components/messages/AssistantMessageGroup.d.ts +17 -0
  99. package/dist/components/messages/AssistantMessageGroup.d.ts.map +1 -0
  100. package/dist/components/messages/AssistantMessageGroup.js +176 -0
  101. package/dist/components/messages/AssistantMessageGroup.js.map +1 -0
  102. package/dist/components/messages/MessagePartItem.d.ts +20 -0
  103. package/dist/components/messages/MessagePartItem.d.ts.map +1 -0
  104. package/dist/components/messages/MessagePartItem.js +353 -0
  105. package/dist/components/messages/MessagePartItem.js.map +1 -0
  106. package/dist/components/messages/MessageThread.d.ts +12 -0
  107. package/dist/components/messages/MessageThread.d.ts.map +1 -0
  108. package/dist/components/messages/MessageThread.js +239 -0
  109. package/dist/components/messages/MessageThread.js.map +1 -0
  110. package/dist/components/messages/MessageThreadContainer.d.ts +7 -0
  111. package/dist/components/messages/MessageThreadContainer.d.ts.map +1 -0
  112. package/dist/components/messages/MessageThreadContainer.js +22 -0
  113. package/dist/components/messages/MessageThreadContainer.js.map +1 -0
  114. package/dist/components/messages/ToolApprovalCard.d.ts +11 -0
  115. package/dist/components/messages/ToolApprovalCard.d.ts.map +1 -0
  116. package/dist/components/messages/ToolApprovalCard.js +139 -0
  117. package/dist/components/messages/ToolApprovalCard.js.map +1 -0
  118. package/dist/components/messages/TopupApprovalCard.d.ts +9 -0
  119. package/dist/components/messages/TopupApprovalCard.d.ts.map +1 -0
  120. package/dist/components/messages/TopupApprovalCard.js +51 -0
  121. package/dist/components/messages/TopupApprovalCard.js.map +1 -0
  122. package/dist/components/messages/UserMessageGroup.d.ts +10 -0
  123. package/dist/components/messages/UserMessageGroup.d.ts.map +1 -0
  124. package/dist/components/messages/UserMessageGroup.js +132 -0
  125. package/dist/components/messages/UserMessageGroup.js.map +1 -0
  126. package/dist/components/messages/renderers/ApplyPatchRenderer.d.ts +3 -0
  127. package/dist/components/messages/renderers/ApplyPatchRenderer.d.ts.map +1 -0
  128. package/dist/components/messages/renderers/ApplyPatchRenderer.js +55 -0
  129. package/dist/components/messages/renderers/ApplyPatchRenderer.js.map +1 -0
  130. package/dist/components/messages/renderers/BashRenderer.d.ts +3 -0
  131. package/dist/components/messages/renderers/BashRenderer.d.ts.map +1 -0
  132. package/dist/components/messages/renderers/BashRenderer.js +55 -0
  133. package/dist/components/messages/renderers/BashRenderer.js.map +1 -0
  134. package/dist/components/messages/renderers/DatabaseToolRenderer.d.ts +8 -0
  135. package/dist/components/messages/renderers/DatabaseToolRenderer.d.ts.map +1 -0
  136. package/dist/components/messages/renderers/DatabaseToolRenderer.js +151 -0
  137. package/dist/components/messages/renderers/DatabaseToolRenderer.js.map +1 -0
  138. package/dist/components/messages/renderers/DebugRenderer.d.ts +5 -0
  139. package/dist/components/messages/renderers/DebugRenderer.d.ts.map +1 -0
  140. package/dist/components/messages/renderers/DebugRenderer.js +5 -0
  141. package/dist/components/messages/renderers/DebugRenderer.js.map +1 -0
  142. package/dist/components/messages/renderers/DiffView.d.ts +6 -0
  143. package/dist/components/messages/renderers/DiffView.d.ts.map +1 -0
  144. package/dist/components/messages/renderers/DiffView.js +206 -0
  145. package/dist/components/messages/renderers/DiffView.js.map +1 -0
  146. package/dist/components/messages/renderers/EditRenderer.d.ts +3 -0
  147. package/dist/components/messages/renderers/EditRenderer.d.ts.map +1 -0
  148. package/dist/components/messages/renderers/EditRenderer.js +25 -0
  149. package/dist/components/messages/renderers/EditRenderer.js.map +1 -0
  150. package/dist/components/messages/renderers/ErrorRenderer.d.ts +11 -0
  151. package/dist/components/messages/renderers/ErrorRenderer.d.ts.map +1 -0
  152. package/dist/components/messages/renderers/ErrorRenderer.js +157 -0
  153. package/dist/components/messages/renderers/ErrorRenderer.js.map +1 -0
  154. package/dist/components/messages/renderers/FinishRenderer.d.ts +3 -0
  155. package/dist/components/messages/renderers/FinishRenderer.d.ts.map +1 -0
  156. package/dist/components/messages/renderers/FinishRenderer.js +7 -0
  157. package/dist/components/messages/renderers/FinishRenderer.js.map +1 -0
  158. package/dist/components/messages/renderers/GenericRenderer.d.ts +3 -0
  159. package/dist/components/messages/renderers/GenericRenderer.d.ts.map +1 -0
  160. package/dist/components/messages/renderers/GenericRenderer.js +45 -0
  161. package/dist/components/messages/renderers/GenericRenderer.js.map +1 -0
  162. package/dist/components/messages/renderers/GitCommitRenderer.d.ts +3 -0
  163. package/dist/components/messages/renderers/GitCommitRenderer.d.ts.map +1 -0
  164. package/dist/components/messages/renderers/GitCommitRenderer.js +21 -0
  165. package/dist/components/messages/renderers/GitCommitRenderer.js.map +1 -0
  166. package/dist/components/messages/renderers/GitDiffRenderer.d.ts +3 -0
  167. package/dist/components/messages/renderers/GitDiffRenderer.d.ts.map +1 -0
  168. package/dist/components/messages/renderers/GitDiffRenderer.js +34 -0
  169. package/dist/components/messages/renderers/GitDiffRenderer.js.map +1 -0
  170. package/dist/components/messages/renderers/GitStatusRenderer.d.ts +3 -0
  171. package/dist/components/messages/renderers/GitStatusRenderer.d.ts.map +1 -0
  172. package/dist/components/messages/renderers/GitStatusRenderer.js +60 -0
  173. package/dist/components/messages/renderers/GitStatusRenderer.js.map +1 -0
  174. package/dist/components/messages/renderers/ListRenderer.d.ts +3 -0
  175. package/dist/components/messages/renderers/ListRenderer.d.ts.map +1 -0
  176. package/dist/components/messages/renderers/ListRenderer.js +28 -0
  177. package/dist/components/messages/renderers/ListRenderer.js.map +1 -0
  178. package/dist/components/messages/renderers/ProgressUpdateRenderer.d.ts +3 -0
  179. package/dist/components/messages/renderers/ProgressUpdateRenderer.d.ts.map +1 -0
  180. package/dist/components/messages/renderers/ProgressUpdateRenderer.js +9 -0
  181. package/dist/components/messages/renderers/ProgressUpdateRenderer.js.map +1 -0
  182. package/dist/components/messages/renderers/ReadRenderer.d.ts +3 -0
  183. package/dist/components/messages/renderers/ReadRenderer.d.ts.map +1 -0
  184. package/dist/components/messages/renderers/ReadRenderer.js +87 -0
  185. package/dist/components/messages/renderers/ReadRenderer.js.map +1 -0
  186. package/dist/components/messages/renderers/ReasoningRenderer.d.ts +7 -0
  187. package/dist/components/messages/renderers/ReasoningRenderer.d.ts.map +1 -0
  188. package/dist/components/messages/renderers/ReasoningRenderer.js +34 -0
  189. package/dist/components/messages/renderers/ReasoningRenderer.js.map +1 -0
  190. package/dist/components/messages/renderers/SearchRenderer.d.ts +3 -0
  191. package/dist/components/messages/renderers/SearchRenderer.d.ts.map +1 -0
  192. package/dist/components/messages/renderers/SearchRenderer.js +52 -0
  193. package/dist/components/messages/renderers/SearchRenderer.js.map +1 -0
  194. package/dist/components/messages/renderers/TodosRenderer.d.ts +3 -0
  195. package/dist/components/messages/renderers/TodosRenderer.d.ts.map +1 -0
  196. package/dist/components/messages/renderers/TodosRenderer.js +15 -0
  197. package/dist/components/messages/renderers/TodosRenderer.js.map +1 -0
  198. package/dist/components/messages/renderers/ToolErrorDisplay.d.ts +12 -0
  199. package/dist/components/messages/renderers/ToolErrorDisplay.d.ts.map +1 -0
  200. package/dist/components/messages/renderers/ToolErrorDisplay.js +10 -0
  201. package/dist/components/messages/renderers/ToolErrorDisplay.js.map +1 -0
  202. package/dist/components/messages/renderers/TreeRenderer.d.ts +3 -0
  203. package/dist/components/messages/renderers/TreeRenderer.d.ts.map +1 -0
  204. package/dist/components/messages/renderers/TreeRenderer.js +33 -0
  205. package/dist/components/messages/renderers/TreeRenderer.js.map +1 -0
  206. package/dist/components/messages/renderers/WebSearchRenderer.d.ts +3 -0
  207. package/dist/components/messages/renderers/WebSearchRenderer.d.ts.map +1 -0
  208. package/dist/components/messages/renderers/WebSearchRenderer.js +29 -0
  209. package/dist/components/messages/renderers/WebSearchRenderer.js.map +1 -0
  210. package/dist/components/messages/renderers/WriteRenderer.d.ts +3 -0
  211. package/dist/components/messages/renderers/WriteRenderer.d.ts.map +1 -0
  212. package/dist/components/messages/renderers/WriteRenderer.js +28 -0
  213. package/dist/components/messages/renderers/WriteRenderer.js.map +1 -0
  214. package/dist/components/messages/renderers/index.d.ts +16 -0
  215. package/dist/components/messages/renderers/index.d.ts.map +1 -0
  216. package/dist/components/messages/renderers/index.js +114 -0
  217. package/dist/components/messages/renderers/index.js.map +1 -0
  218. package/dist/components/messages/renderers/shared/CopyButton.d.ts +8 -0
  219. package/dist/components/messages/renderers/shared/CopyButton.d.ts.map +1 -0
  220. package/dist/components/messages/renderers/shared/CopyButton.js +27 -0
  221. package/dist/components/messages/renderers/shared/CopyButton.js.map +1 -0
  222. package/dist/components/messages/renderers/shared/ToolContentBox.d.ts +13 -0
  223. package/dist/components/messages/renderers/shared/ToolContentBox.d.ts.map +1 -0
  224. package/dist/components/messages/renderers/shared/ToolContentBox.js +9 -0
  225. package/dist/components/messages/renderers/shared/ToolContentBox.js.map +1 -0
  226. package/dist/components/messages/renderers/shared/ToolHeader.d.ts +29 -0
  227. package/dist/components/messages/renderers/shared/ToolHeader.d.ts.map +1 -0
  228. package/dist/components/messages/renderers/shared/ToolHeader.js +69 -0
  229. package/dist/components/messages/renderers/shared/ToolHeader.js.map +1 -0
  230. package/dist/components/messages/renderers/shared/index.d.ts +4 -0
  231. package/dist/components/messages/renderers/shared/index.d.ts.map +1 -0
  232. package/dist/components/messages/renderers/shared/index.js +4 -0
  233. package/dist/components/messages/renderers/shared/index.js.map +1 -0
  234. package/dist/components/messages/renderers/types.d.ts +118 -0
  235. package/dist/components/messages/renderers/types.d.ts.map +1 -0
  236. package/dist/components/messages/renderers/types.js +2 -0
  237. package/dist/components/messages/renderers/types.js.map +1 -0
  238. package/dist/components/messages/renderers/utils.d.ts +26 -0
  239. package/dist/components/messages/renderers/utils.d.ts.map +1 -0
  240. package/dist/components/messages/renderers/utils.js +60 -0
  241. package/dist/components/messages/renderers/utils.js.map +1 -0
  242. package/dist/components/onboarding/OnboardingModal.d.ts +6 -0
  243. package/dist/components/onboarding/OnboardingModal.d.ts.map +1 -0
  244. package/dist/components/onboarding/OnboardingModal.js +22 -0
  245. package/dist/components/onboarding/OnboardingModal.js.map +1 -0
  246. package/dist/components/onboarding/index.d.ts +4 -0
  247. package/dist/components/onboarding/index.d.ts.map +1 -0
  248. package/dist/components/onboarding/index.js +4 -0
  249. package/dist/components/onboarding/index.js.map +1 -0
  250. package/dist/components/onboarding/steps/DefaultsStep.d.ts +10 -0
  251. package/dist/components/onboarding/steps/DefaultsStep.d.ts.map +1 -0
  252. package/dist/components/onboarding/steps/DefaultsStep.js +99 -0
  253. package/dist/components/onboarding/steps/DefaultsStep.js.map +1 -0
  254. package/dist/components/onboarding/steps/ProviderSetupStep.d.ts +31 -0
  255. package/dist/components/onboarding/steps/ProviderSetupStep.d.ts.map +1 -0
  256. package/dist/components/onboarding/steps/ProviderSetupStep.js +253 -0
  257. package/dist/components/onboarding/steps/ProviderSetupStep.js.map +1 -0
  258. package/dist/components/research/ResearchSidebar.d.ts +7 -0
  259. package/dist/components/research/ResearchSidebar.d.ts.map +1 -0
  260. package/dist/components/research/ResearchSidebar.js +271 -0
  261. package/dist/components/research/ResearchSidebar.js.map +1 -0
  262. package/dist/components/research/ResearchSidebarToggle.d.ts +6 -0
  263. package/dist/components/research/ResearchSidebarToggle.d.ts.map +1 -0
  264. package/dist/components/research/ResearchSidebarToggle.js +13 -0
  265. package/dist/components/research/ResearchSidebarToggle.js.map +1 -0
  266. package/dist/components/research/index.d.ts +3 -0
  267. package/dist/components/research/index.d.ts.map +1 -0
  268. package/dist/components/research/index.js +3 -0
  269. package/dist/components/research/index.js.map +1 -0
  270. package/dist/components/session-files/SessionFilesDiffPanel.d.ts +2 -0
  271. package/dist/components/session-files/SessionFilesDiffPanel.d.ts.map +1 -0
  272. package/dist/components/session-files/SessionFilesDiffPanel.js +345 -0
  273. package/dist/components/session-files/SessionFilesDiffPanel.js.map +1 -0
  274. package/dist/components/session-files/SessionFilesSidebar.d.ts +6 -0
  275. package/dist/components/session-files/SessionFilesSidebar.d.ts.map +1 -0
  276. package/dist/components/session-files/SessionFilesSidebar.js +80 -0
  277. package/dist/components/session-files/SessionFilesSidebar.js.map +1 -0
  278. package/dist/components/session-files/SessionFilesSidebarToggle.d.ts +6 -0
  279. package/dist/components/session-files/SessionFilesSidebarToggle.d.ts.map +1 -0
  280. package/dist/components/session-files/SessionFilesSidebarToggle.js +15 -0
  281. package/dist/components/session-files/SessionFilesSidebarToggle.js.map +1 -0
  282. package/dist/components/session-files/index.d.ts +4 -0
  283. package/dist/components/session-files/index.d.ts.map +1 -0
  284. package/dist/components/session-files/index.js +4 -0
  285. package/dist/components/session-files/index.js.map +1 -0
  286. package/dist/components/sessions/LeanHeader.d.ts +10 -0
  287. package/dist/components/sessions/LeanHeader.d.ts.map +1 -0
  288. package/dist/components/sessions/LeanHeader.js +62 -0
  289. package/dist/components/sessions/LeanHeader.js.map +1 -0
  290. package/dist/components/sessions/SessionHeader.d.ts +8 -0
  291. package/dist/components/sessions/SessionHeader.d.ts.map +1 -0
  292. package/dist/components/sessions/SessionHeader.js +74 -0
  293. package/dist/components/sessions/SessionHeader.js.map +1 -0
  294. package/dist/components/sessions/SessionItem.d.ts +9 -0
  295. package/dist/components/sessions/SessionItem.d.ts.map +1 -0
  296. package/dist/components/sessions/SessionItem.js +28 -0
  297. package/dist/components/sessions/SessionItem.js.map +1 -0
  298. package/dist/components/sessions/SessionListContainer.d.ts +7 -0
  299. package/dist/components/sessions/SessionListContainer.d.ts.map +1 -0
  300. package/dist/components/sessions/SessionListContainer.js +47 -0
  301. package/dist/components/sessions/SessionListContainer.js.map +1 -0
  302. package/dist/components/settings/SettingsSidebar.d.ts +2 -0
  303. package/dist/components/settings/SettingsSidebar.d.ts.map +1 -0
  304. package/dist/components/settings/SettingsSidebar.js +134 -0
  305. package/dist/components/settings/SettingsSidebar.js.map +1 -0
  306. package/dist/components/settings/SettingsSidebarToggle.d.ts +2 -0
  307. package/dist/components/settings/SettingsSidebarToggle.d.ts.map +1 -0
  308. package/dist/components/settings/SettingsSidebarToggle.js +10 -0
  309. package/dist/components/settings/SettingsSidebarToggle.js.map +1 -0
  310. package/dist/components/settings/SetuTopupModal.d.ts +2 -0
  311. package/dist/components/settings/SetuTopupModal.d.ts.map +1 -0
  312. package/dist/components/settings/SetuTopupModal.js +196 -0
  313. package/dist/components/settings/SetuTopupModal.js.map +1 -0
  314. package/dist/components/terminals/TerminalList.d.ts +8 -0
  315. package/dist/components/terminals/TerminalList.d.ts.map +1 -0
  316. package/dist/components/terminals/TerminalList.js +32 -0
  317. package/dist/components/terminals/TerminalList.js.map +1 -0
  318. package/dist/components/terminals/TerminalViewer.d.ts +6 -0
  319. package/dist/components/terminals/TerminalViewer.d.ts.map +1 -0
  320. package/dist/components/terminals/TerminalViewer.js +263 -0
  321. package/dist/components/terminals/TerminalViewer.js.map +1 -0
  322. package/dist/components/terminals/TerminalsSidebar.d.ts +2 -0
  323. package/dist/components/terminals/TerminalsSidebar.d.ts.map +1 -0
  324. package/dist/components/terminals/TerminalsSidebar.js +34 -0
  325. package/dist/components/terminals/TerminalsSidebar.js.map +1 -0
  326. package/dist/components/terminals/TerminalsSidebarToggle.d.ts +2 -0
  327. package/dist/components/terminals/TerminalsSidebarToggle.d.ts.map +1 -0
  328. package/dist/components/terminals/TerminalsSidebarToggle.js +13 -0
  329. package/dist/components/terminals/TerminalsSidebarToggle.js.map +1 -0
  330. package/dist/components/terminals/index.d.ts +5 -0
  331. package/dist/components/terminals/index.d.ts.map +1 -0
  332. package/dist/components/terminals/index.js +5 -0
  333. package/dist/components/terminals/index.js.map +1 -0
  334. package/dist/components/ui/Button.d.ts +8 -0
  335. package/dist/components/ui/Button.d.ts.map +1 -0
  336. package/dist/components/ui/Button.js +19 -0
  337. package/dist/components/ui/Button.js.map +1 -0
  338. package/dist/components/ui/Card.d.ts +6 -0
  339. package/dist/components/ui/Card.d.ts.map +1 -0
  340. package/dist/components/ui/Card.js +7 -0
  341. package/dist/components/ui/Card.js.map +1 -0
  342. package/dist/components/ui/ConfirmationDialog.d.ts +2 -0
  343. package/dist/components/ui/ConfirmationDialog.d.ts.map +1 -0
  344. package/dist/components/ui/ConfirmationDialog.js +72 -0
  345. package/dist/components/ui/ConfirmationDialog.js.map +1 -0
  346. package/dist/components/ui/Input.d.ts +6 -0
  347. package/dist/components/ui/Input.d.ts.map +1 -0
  348. package/dist/components/ui/Input.js +7 -0
  349. package/dist/components/ui/Input.js.map +1 -0
  350. package/dist/components/ui/Modal.d.ts +14 -0
  351. package/dist/components/ui/Modal.d.ts.map +1 -0
  352. package/dist/components/ui/Modal.js +51 -0
  353. package/dist/components/ui/Modal.js.map +1 -0
  354. package/dist/components/ui/Textarea.d.ts +6 -0
  355. package/dist/components/ui/Textarea.d.ts.map +1 -0
  356. package/dist/components/ui/Textarea.js +7 -0
  357. package/dist/components/ui/Textarea.js.map +1 -0
  358. package/dist/components/ui/Toaster.d.ts +2 -0
  359. package/dist/components/ui/Toaster.d.ts.map +1 -0
  360. package/dist/components/ui/Toaster.js +41 -0
  361. package/dist/components/ui/Toaster.js.map +1 -0
  362. package/dist/components/ui/ToolApprovalDialog.d.ts +7 -0
  363. package/dist/components/ui/ToolApprovalDialog.d.ts.map +1 -0
  364. package/dist/components/ui/ToolApprovalDialog.js +57 -0
  365. package/dist/components/ui/ToolApprovalDialog.js.map +1 -0
  366. package/dist/hooks/index.d.ts +23 -0
  367. package/dist/hooks/index.d.ts.map +1 -0
  368. package/dist/hooks/index.js +24 -0
  369. package/dist/hooks/index.js.map +1 -0
  370. package/dist/hooks/useAuthStatus.d.ts +60 -0
  371. package/dist/hooks/useAuthStatus.d.ts.map +1 -0
  372. package/dist/hooks/useAuthStatus.js +247 -0
  373. package/dist/hooks/useAuthStatus.js.map +1 -0
  374. package/dist/hooks/useBranch.d.ts +5 -0
  375. package/dist/hooks/useBranch.d.ts.map +1 -0
  376. package/dist/hooks/useBranch.js +43 -0
  377. package/dist/hooks/useBranch.js.map +1 -0
  378. package/dist/hooks/useCommandSuggestions.d.ts +29 -0
  379. package/dist/hooks/useCommandSuggestions.d.ts.map +1 -0
  380. package/dist/hooks/useCommandSuggestions.js +85 -0
  381. package/dist/hooks/useCommandSuggestions.js.map +1 -0
  382. package/dist/hooks/useConfig.d.ts +35 -0
  383. package/dist/hooks/useConfig.d.ts.map +1 -0
  384. package/dist/hooks/useConfig.js +32 -0
  385. package/dist/hooks/useConfig.js.map +1 -0
  386. package/dist/hooks/useFileMention.d.ts +16 -0
  387. package/dist/hooks/useFileMention.d.ts.map +1 -0
  388. package/dist/hooks/useFileMention.js +56 -0
  389. package/dist/hooks/useFileMention.js.map +1 -0
  390. package/dist/hooks/useFileUpload.d.ts +34 -0
  391. package/dist/hooks/useFileUpload.d.ts.map +1 -0
  392. package/dist/hooks/useFileUpload.js +258 -0
  393. package/dist/hooks/useFileUpload.js.map +1 -0
  394. package/dist/hooks/useFiles.d.ts +9 -0
  395. package/dist/hooks/useFiles.d.ts.map +1 -0
  396. package/dist/hooks/useFiles.js +15 -0
  397. package/dist/hooks/useFiles.js.map +1 -0
  398. package/dist/hooks/useGit.d.ts +15 -0
  399. package/dist/hooks/useGit.d.ts.map +1 -0
  400. package/dist/hooks/useGit.js +99 -0
  401. package/dist/hooks/useGit.js.map +1 -0
  402. package/dist/hooks/useImageUpload.d.ts +28 -0
  403. package/dist/hooks/useImageUpload.d.ts.map +1 -0
  404. package/dist/hooks/useImageUpload.js +197 -0
  405. package/dist/hooks/useImageUpload.js.map +1 -0
  406. package/dist/hooks/useKeyboardShortcuts.d.ts +27 -0
  407. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  408. package/dist/hooks/useKeyboardShortcuts.js +242 -0
  409. package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
  410. package/dist/hooks/useMessages.d.ts +4 -0
  411. package/dist/hooks/useMessages.d.ts.map +1 -0
  412. package/dist/hooks/useMessages.js +25 -0
  413. package/dist/hooks/useMessages.js.map +1 -0
  414. package/dist/hooks/usePreferences.d.ts +10 -0
  415. package/dist/hooks/usePreferences.d.ts.map +1 -0
  416. package/dist/hooks/usePreferences.js +62 -0
  417. package/dist/hooks/usePreferences.js.map +1 -0
  418. package/dist/hooks/useQueueState.d.ts +15 -0
  419. package/dist/hooks/useQueueState.d.ts.map +1 -0
  420. package/dist/hooks/useQueueState.js +30 -0
  421. package/dist/hooks/useQueueState.js.map +1 -0
  422. package/dist/hooks/useResearch.d.ts +59 -0
  423. package/dist/hooks/useResearch.d.ts.map +1 -0
  424. package/dist/hooks/useResearch.js +138 -0
  425. package/dist/hooks/useResearch.js.map +1 -0
  426. package/dist/hooks/useSessionFiles.d.ts +2 -0
  427. package/dist/hooks/useSessionFiles.d.ts.map +1 -0
  428. package/dist/hooks/useSessionFiles.js +15 -0
  429. package/dist/hooks/useSessionFiles.js.map +1 -0
  430. package/dist/hooks/useSessionStream.d.ts +2 -0
  431. package/dist/hooks/useSessionStream.d.ts.map +1 -0
  432. package/dist/hooks/useSessionStream.js +455 -0
  433. package/dist/hooks/useSessionStream.js.map +1 -0
  434. package/dist/hooks/useSessions.d.ts +9 -0
  435. package/dist/hooks/useSessions.d.ts.map +1 -0
  436. package/dist/hooks/useSessions.js +43 -0
  437. package/dist/hooks/useSessions.js.map +1 -0
  438. package/dist/hooks/useSetuBalance.d.ts +4 -0
  439. package/dist/hooks/useSetuBalance.d.ts.map +1 -0
  440. package/dist/hooks/useSetuBalance.js +59 -0
  441. package/dist/hooks/useSetuBalance.js.map +1 -0
  442. package/dist/hooks/useSetuPayments.d.ts +2 -0
  443. package/dist/hooks/useSetuPayments.d.ts.map +1 -0
  444. package/dist/hooks/useSetuPayments.js +159 -0
  445. package/dist/hooks/useSetuPayments.js.map +1 -0
  446. package/dist/hooks/useShareStatus.d.ts +7 -0
  447. package/dist/hooks/useShareStatus.d.ts.map +1 -0
  448. package/dist/hooks/useShareStatus.js +12 -0
  449. package/dist/hooks/useShareStatus.js.map +1 -0
  450. package/dist/hooks/useTerminals.d.ts +37 -0
  451. package/dist/hooks/useTerminals.d.ts.map +1 -0
  452. package/dist/hooks/useTerminals.js +67 -0
  453. package/dist/hooks/useTerminals.js.map +1 -0
  454. package/dist/hooks/useTheme.d.ts +8 -0
  455. package/dist/hooks/useTheme.d.ts.map +1 -0
  456. package/dist/hooks/useTheme.js +57 -0
  457. package/dist/hooks/useTheme.js.map +1 -0
  458. package/dist/hooks/useToolApprovalShortcuts.d.ts +11 -0
  459. package/dist/hooks/useToolApprovalShortcuts.d.ts.map +1 -0
  460. package/dist/hooks/useToolApprovalShortcuts.js +88 -0
  461. package/dist/hooks/useToolApprovalShortcuts.js.map +1 -0
  462. package/dist/hooks/useTopupCallback.d.ts +2 -0
  463. package/dist/hooks/useTopupCallback.d.ts.map +1 -0
  464. package/dist/hooks/useTopupCallback.js +74 -0
  465. package/dist/hooks/useTopupCallback.js.map +1 -0
  466. package/dist/hooks/useVimMode.d.ts +16 -0
  467. package/dist/hooks/useVimMode.d.ts.map +1 -0
  468. package/dist/hooks/useVimMode.js +298 -0
  469. package/dist/hooks/useVimMode.js.map +1 -0
  470. package/dist/hooks/useWorkingDirectory.d.ts +2 -0
  471. package/dist/hooks/useWorkingDirectory.d.ts.map +1 -0
  472. package/dist/hooks/useWorkingDirectory.js +34 -0
  473. package/dist/hooks/useWorkingDirectory.js.map +1 -0
  474. package/dist/index.d.ts +7 -0
  475. package/dist/index.d.ts.map +1 -0
  476. package/dist/index.js +9 -0
  477. package/dist/index.js.map +1 -0
  478. package/dist/lib/api-client.d.ts +245 -0
  479. package/dist/lib/api-client.d.ts.map +1 -0
  480. package/dist/lib/api-client.js +783 -0
  481. package/dist/lib/api-client.js.map +1 -0
  482. package/dist/lib/commands.d.ts +16 -0
  483. package/dist/lib/commands.d.ts.map +1 -0
  484. package/dist/lib/commands.js +124 -0
  485. package/dist/lib/commands.js.map +1 -0
  486. package/dist/lib/config.d.ts +6 -0
  487. package/dist/lib/config.d.ts.map +1 -0
  488. package/dist/lib/config.js +28 -0
  489. package/dist/lib/config.js.map +1 -0
  490. package/dist/lib/index.d.ts +4 -0
  491. package/dist/lib/index.d.ts.map +1 -0
  492. package/dist/lib/index.js +5 -0
  493. package/dist/lib/index.js.map +1 -0
  494. package/dist/lib/open-url.d.ts +2 -0
  495. package/dist/lib/open-url.d.ts.map +1 -0
  496. package/dist/lib/open-url.js +9 -0
  497. package/dist/lib/open-url.js.map +1 -0
  498. package/dist/lib/parseResearchContext.d.ts +17 -0
  499. package/dist/lib/parseResearchContext.d.ts.map +1 -0
  500. package/dist/lib/parseResearchContext.js +30 -0
  501. package/dist/lib/parseResearchContext.js.map +1 -0
  502. package/dist/lib/sse-client.d.ts +13 -0
  503. package/dist/lib/sse-client.d.ts.map +1 -0
  504. package/dist/lib/sse-client.js +111 -0
  505. package/dist/lib/sse-client.js.map +1 -0
  506. package/dist/stores/confirmationStore.d.ts +23 -0
  507. package/dist/stores/confirmationStore.d.ts.map +1 -0
  508. package/dist/stores/confirmationStore.js +27 -0
  509. package/dist/stores/confirmationStore.js.map +1 -0
  510. package/dist/stores/focusStore.d.ts +14 -0
  511. package/dist/stores/focusStore.d.ts.map +1 -0
  512. package/dist/stores/focusStore.js +12 -0
  513. package/dist/stores/focusStore.js.map +1 -0
  514. package/dist/stores/gitStore.d.ts +24 -0
  515. package/dist/stores/gitStore.d.ts.map +1 -0
  516. package/dist/stores/gitStore.js +57 -0
  517. package/dist/stores/gitStore.js.map +1 -0
  518. package/dist/stores/index.d.ts +15 -0
  519. package/dist/stores/index.d.ts.map +1 -0
  520. package/dist/stores/index.js +15 -0
  521. package/dist/stores/index.js.map +1 -0
  522. package/dist/stores/onboardingStore.d.ts +46 -0
  523. package/dist/stores/onboardingStore.d.ts.map +1 -0
  524. package/dist/stores/onboardingStore.js +38 -0
  525. package/dist/stores/onboardingStore.js.map +1 -0
  526. package/dist/stores/pendingResearchStore.d.ts +17 -0
  527. package/dist/stores/pendingResearchStore.d.ts.map +1 -0
  528. package/dist/stores/pendingResearchStore.js +38 -0
  529. package/dist/stores/pendingResearchStore.js.map +1 -0
  530. package/dist/stores/queueStore.d.ts +8 -0
  531. package/dist/stores/queueStore.d.ts.map +1 -0
  532. package/dist/stores/queueStore.js +11 -0
  533. package/dist/stores/queueStore.js.map +1 -0
  534. package/dist/stores/researchStore.d.ts +14 -0
  535. package/dist/stores/researchStore.d.ts.map +1 -0
  536. package/dist/stores/researchStore.js +45 -0
  537. package/dist/stores/researchStore.js.map +1 -0
  538. package/dist/stores/sessionFilesStore.d.ts +17 -0
  539. package/dist/stores/sessionFilesStore.d.ts.map +1 -0
  540. package/dist/stores/sessionFilesStore.js +53 -0
  541. package/dist/stores/sessionFilesStore.js.map +1 -0
  542. package/dist/stores/settingsStore.d.ts +9 -0
  543. package/dist/stores/settingsStore.d.ts.map +1 -0
  544. package/dist/stores/settingsStore.js +23 -0
  545. package/dist/stores/settingsStore.js.map +1 -0
  546. package/dist/stores/setuStore.d.ts +22 -0
  547. package/dist/stores/setuStore.d.ts.map +1 -0
  548. package/dist/stores/setuStore.js +21 -0
  549. package/dist/stores/setuStore.js.map +1 -0
  550. package/dist/stores/sidebarStore.d.ts +20 -0
  551. package/dist/stores/sidebarStore.d.ts.map +1 -0
  552. package/dist/stores/sidebarStore.js +10 -0
  553. package/dist/stores/sidebarStore.js.map +1 -0
  554. package/dist/stores/terminalStore.d.ts +11 -0
  555. package/dist/stores/terminalStore.d.ts.map +1 -0
  556. package/dist/stores/terminalStore.js +25 -0
  557. package/dist/stores/terminalStore.js.map +1 -0
  558. package/dist/stores/toastStore.d.ts +32 -0
  559. package/dist/stores/toastStore.d.ts.map +1 -0
  560. package/dist/stores/toastStore.js +46 -0
  561. package/dist/stores/toastStore.js.map +1 -0
  562. package/dist/stores/toolApprovalStore.d.ts +18 -0
  563. package/dist/stores/toolApprovalStore.d.ts.map +1 -0
  564. package/dist/stores/toolApprovalStore.js +16 -0
  565. package/dist/stores/toolApprovalStore.js.map +1 -0
  566. package/dist/stores/topupApprovalStore.d.ts +20 -0
  567. package/dist/stores/topupApprovalStore.d.ts.map +1 -0
  568. package/dist/stores/topupApprovalStore.js +11 -0
  569. package/dist/stores/topupApprovalStore.js.map +1 -0
  570. package/dist/types/api.d.ts +269 -0
  571. package/dist/types/api.d.ts.map +1 -0
  572. package/dist/types/api.js +2 -0
  573. package/dist/types/api.js.map +1 -0
  574. package/package.json +94 -0
@@ -0,0 +1,196 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo, useState, useEffect, useCallback, useRef } from 'react';
3
+ import { CreditCard, Wallet, Loader2, ExternalLink, RefreshCw, } from 'lucide-react';
4
+ import { Modal } from '../ui/Modal';
5
+ import { useSetuStore } from '../../stores/setuStore';
6
+ import { apiClient } from '../../lib/api-client';
7
+ import { toast } from '../../stores/toastStore';
8
+ import { StatusIndicator } from '../common/StatusIndicator';
9
+ const PRESET_AMOUNTS = [10, 25, 50, 100];
10
+ const MIN_AMOUNT = 5;
11
+ const MAX_AMOUNT = 500;
12
+ const POLL_INTERVAL = 5000;
13
+ const SUCCESS_PAGE_URL = 'https://share.ottocode.io/checkout/success';
14
+ export const SetuTopupModal = memo(function SetuTopupModal() {
15
+ const isOpen = useSetuStore((s) => s.isTopupModalOpen);
16
+ const closeModal = useSetuStore((s) => s.closeTopupModal);
17
+ const balance = useSetuStore((s) => s.balance);
18
+ const setBalance = useSetuStore((s) => s.setBalance);
19
+ const usdcBalance = useSetuStore((s) => s.usdcBalance);
20
+ const [view, setView] = useState('amount');
21
+ const [amount, setAmount] = useState(25);
22
+ const [customAmount, setCustomAmount] = useState('');
23
+ const [isCustom, setIsCustom] = useState(false);
24
+ const [estimate, setEstimate] = useState(null);
25
+ const [isLoadingEstimate, setIsLoadingEstimate] = useState(false);
26
+ const [isCreatingCheckout, setIsCreatingCheckout] = useState(false);
27
+ const [checkoutInfo, setCheckoutInfo] = useState(null);
28
+ const [isPolling, setIsPolling] = useState(false);
29
+ const [confirmedAmount, setConfirmedAmount] = useState(null);
30
+ const [pollCount, setPollCount] = useState(0);
31
+ const [isManualChecking, setIsManualChecking] = useState(false);
32
+ const pollRef = useRef(null);
33
+ const effectiveAmount = isCustom ? parseFloat(customAmount) || 0 : amount;
34
+ const fetchEstimate = useCallback(async (amt) => {
35
+ if (amt < MIN_AMOUNT || amt > MAX_AMOUNT) {
36
+ setEstimate(null);
37
+ return;
38
+ }
39
+ setIsLoadingEstimate(true);
40
+ try {
41
+ const result = await apiClient.getPolarTopupEstimate(amt);
42
+ setEstimate(result);
43
+ }
44
+ catch {
45
+ setEstimate(null);
46
+ }
47
+ finally {
48
+ setIsLoadingEstimate(false);
49
+ }
50
+ }, []);
51
+ useEffect(() => {
52
+ if (isOpen && effectiveAmount >= MIN_AMOUNT && view === 'amount') {
53
+ const timeout = setTimeout(() => fetchEstimate(effectiveAmount), 300);
54
+ return () => clearTimeout(timeout);
55
+ }
56
+ }, [isOpen, effectiveAmount, fetchEstimate, view]);
57
+ const stopPolling = useCallback(() => {
58
+ if (pollRef.current) {
59
+ clearInterval(pollRef.current);
60
+ pollRef.current = null;
61
+ }
62
+ setIsPolling(false);
63
+ }, []);
64
+ useEffect(() => {
65
+ if (!isOpen) {
66
+ stopPolling();
67
+ setView('amount');
68
+ setCheckoutInfo(null);
69
+ setConfirmedAmount(null);
70
+ setPollCount(0);
71
+ }
72
+ }, [isOpen, stopPolling]);
73
+ useEffect(() => {
74
+ return () => stopPolling();
75
+ }, [stopPolling]);
76
+ const startPolling = useCallback((checkoutId) => {
77
+ if (pollRef.current)
78
+ return;
79
+ setIsPolling(true);
80
+ setPollCount(0);
81
+ const check = async () => {
82
+ try {
83
+ const status = await apiClient.getPolarTopupStatus(checkoutId);
84
+ console.log('[SetuTopupModal] Poll status:', status);
85
+ setPollCount((c) => c + 1);
86
+ if (status?.confirmed) {
87
+ stopPolling();
88
+ setConfirmedAmount(status.amountUsd);
89
+ localStorage.removeItem('pendingPolarCheckout');
90
+ const balanceData = await apiClient.getSetuBalance();
91
+ if (balanceData?.balance !== undefined) {
92
+ setBalance(balanceData.balance);
93
+ }
94
+ setView('confirmed');
95
+ }
96
+ }
97
+ catch {
98
+ setPollCount((c) => c + 1);
99
+ }
100
+ };
101
+ check();
102
+ pollRef.current = setInterval(check, POLL_INTERVAL);
103
+ }, [stopPolling, setBalance]);
104
+ const handlePresetClick = (preset) => {
105
+ setAmount(preset);
106
+ setIsCustom(false);
107
+ setCustomAmount('');
108
+ };
109
+ const handleCustomAmountChange = (value) => {
110
+ setCustomAmount(value);
111
+ setIsCustom(true);
112
+ };
113
+ const openCheckoutUrl = useCallback((url) => {
114
+ if (window.self !== window.top) {
115
+ window.parent.postMessage({ type: 'otto-open-url', url }, '*');
116
+ }
117
+ else {
118
+ window.open(url, '_blank');
119
+ }
120
+ }, []);
121
+ const handlePolarCheckout = async () => {
122
+ if (effectiveAmount < MIN_AMOUNT || effectiveAmount > MAX_AMOUNT) {
123
+ toast.error(`Amount must be between $${MIN_AMOUNT} and $${MAX_AMOUNT}`);
124
+ return;
125
+ }
126
+ setIsCreatingCheckout(true);
127
+ try {
128
+ const result = await apiClient.createPolarCheckout(effectiveAmount, SUCCESS_PAGE_URL);
129
+ if (result.checkoutUrl && result.checkoutId) {
130
+ const info = {
131
+ url: result.checkoutUrl,
132
+ checkoutId: result.checkoutId,
133
+ creditAmount: result.creditAmount,
134
+ chargeAmount: result.chargeAmount,
135
+ };
136
+ setCheckoutInfo(info);
137
+ localStorage.setItem('pendingPolarCheckout', result.checkoutId);
138
+ setView('checkout');
139
+ openCheckoutUrl(result.checkoutUrl);
140
+ startPolling(result.checkoutId);
141
+ }
142
+ }
143
+ catch (error) {
144
+ toast.error(error instanceof Error ? error.message : 'Failed to create checkout');
145
+ }
146
+ finally {
147
+ setIsCreatingCheckout(false);
148
+ }
149
+ };
150
+ const handleCheckNow = async () => {
151
+ if (!checkoutInfo)
152
+ return;
153
+ setIsManualChecking(true);
154
+ try {
155
+ const status = await apiClient.getPolarTopupStatus(checkoutInfo.checkoutId);
156
+ console.log('[SetuTopupModal] Manual check status:', status);
157
+ if (status?.confirmed) {
158
+ stopPolling();
159
+ setConfirmedAmount(status.amountUsd);
160
+ localStorage.removeItem('pendingPolarCheckout');
161
+ const balanceData = await apiClient.getSetuBalance();
162
+ if (balanceData?.balance !== undefined) {
163
+ setBalance(balanceData.balance);
164
+ }
165
+ setView('confirmed');
166
+ }
167
+ else {
168
+ toast.error('Payment not confirmed yet. Keep waiting or try again.');
169
+ }
170
+ }
171
+ catch (err) {
172
+ console.error('[SetuTopupModal] Check failed:', err);
173
+ toast.error('Failed to check payment status');
174
+ }
175
+ finally {
176
+ setIsManualChecking(false);
177
+ }
178
+ };
179
+ const handleDone = () => {
180
+ closeModal();
181
+ };
182
+ const isValidAmount = effectiveAmount >= MIN_AMOUNT && effectiveAmount <= MAX_AMOUNT;
183
+ const modalTitle = view === 'confirmed'
184
+ ? 'Payment Confirmed'
185
+ : view === 'checkout'
186
+ ? 'Waiting for Payment'
187
+ : 'Add Credits';
188
+ return (_jsx(Modal, { isOpen: isOpen, onClose: closeModal, title: modalTitle, maxWidth: "md", children: _jsxs("div", { className: "space-y-6", children: [view === 'confirmed' && (_jsxs(_Fragment, { children: [_jsx("div", { className: "py-4", children: _jsx(StatusIndicator, { status: "success", label: `+$${confirmedAmount?.toFixed(2) ?? checkoutInfo?.creditAmount.toFixed(2)}`, sublabel: "Credits added to your balance" }) }), _jsx("button", { type: "button", onClick: handleDone, className: "w-full h-12 bg-foreground text-background rounded-lg font-medium hover:bg-foreground/90 transition-colors flex items-center justify-center gap-2", children: "Done" })] })), view === 'checkout' && checkoutInfo && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "py-4", children: [_jsx(StatusIndicator, { status: "loading", label: "Complete your payment", sublabel: "A checkout window has been opened" }), _jsxs("div", { className: "flex items-center justify-center gap-2 mt-4 px-3 py-1.5 bg-muted/40 rounded-full w-fit mx-auto", children: [_jsx("div", { className: "w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse" }), _jsx("span", { className: "text-xs text-muted-foreground font-mono", children: isPolling ? `Checking... (${pollCount})` : 'Paused' })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsxs("button", { type: "button", onClick: handleCheckNow, disabled: isManualChecking, className: "w-full h-12 bg-foreground text-background rounded-lg font-medium hover:bg-foreground/90 transition-colors disabled:opacity-50 flex items-center justify-center gap-2", children: [isManualChecking ? (_jsx(Loader2, { className: "w-4 h-4 animate-spin" })) : (_jsx(RefreshCw, { className: "w-4 h-4" })), isManualChecking ? 'Checking...' : 'Check Now'] }), _jsxs("button", { type: "button", onClick: () => openCheckoutUrl(checkoutInfo.url), className: "w-full h-11 bg-transparent border border-border text-foreground rounded-lg font-medium hover:bg-muted/50 transition-colors flex items-center justify-center gap-2", children: [_jsx(ExternalLink, { className: "w-4 h-4" }), "Open Checkout Again"] })] }), _jsx("p", { className: "text-xs text-muted-foreground text-center", children: "Status checks automatically every 5 seconds. You can close this and it will keep checking." })] })), view === 'amount' && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between py-3 px-4 bg-muted/40 rounded-lg", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: "Current Balance" }), _jsxs("span", { className: "text-lg font-mono font-semibold", children: ["$", balance?.toFixed(2) ?? '0.00'] })] }), _jsxs("div", { className: "space-y-4", children: [_jsx("div", { className: "grid grid-cols-4 gap-2", children: PRESET_AMOUNTS.map((preset) => (_jsxs("button", { type: "button", onClick: () => handlePresetClick(preset), className: `h-12 text-base font-mono rounded-lg border-2 transition-all ${!isCustom && amount === preset
189
+ ? 'bg-foreground text-background border-foreground'
190
+ : 'bg-transparent border-border text-foreground hover:border-foreground/40'}`, children: ["$", preset] }, preset))) }), _jsxs("div", { className: "relative", children: [_jsx("span", { className: "absolute left-4 top-1/2 -translate-y-1/2 text-muted-foreground text-lg", children: "$" }), _jsx("input", { type: "number", placeholder: "Custom", value: customAmount, onChange: (e) => handleCustomAmountChange(e.target.value), onFocus: () => setIsCustom(true), min: MIN_AMOUNT, max: MAX_AMOUNT, step: "1", className: `w-full h-12 pl-8 pr-4 text-base font-mono bg-transparent border-2 rounded-lg outline-none transition-all ${isCustom
191
+ ? 'border-foreground'
192
+ : 'border-border focus:border-foreground/40'}` })] })] }), _jsx("div", { className: `grid transition-all duration-200 ease-out ${isValidAmount
193
+ ? 'grid-rows-[1fr] opacity-100'
194
+ : 'grid-rows-[0fr] opacity-0'}`, children: _jsx("div", { className: "overflow-hidden", children: _jsx("div", { className: "space-y-3 py-4 border-t border-border", children: isLoadingEstimate ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: "Credits" }), _jsx("div", { className: "h-6 w-16 bg-muted/60 rounded animate-pulse" })] }), _jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: "Fee" }), _jsx("div", { className: "h-4 w-12 bg-muted/60 rounded animate-pulse" })] }), _jsxs("div", { className: "flex justify-between items-center pt-3 border-t border-border", children: [_jsx("span", { className: "font-medium", children: "Total" }), _jsx("div", { className: "h-7 w-20 bg-muted/60 rounded animate-pulse" })] })] })) : estimate ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: "Credits" }), _jsxs("span", { className: "font-mono text-lg", children: ["$", estimate.creditAmount.toFixed(2)] })] }), _jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: "Fee" }), _jsxs("span", { className: "font-mono text-sm text-muted-foreground", children: ["+$", estimate.feeAmount.toFixed(2)] })] }), _jsxs("div", { className: "flex justify-between items-center pt-3 border-t border-border", children: [_jsx("span", { className: "font-medium", children: "Total" }), _jsxs("span", { className: "font-mono text-xl font-semibold", children: ["$", estimate.chargeAmount.toFixed(2)] })] })] })) : null }) }) }), _jsxs("button", { type: "button", onClick: handlePolarCheckout, disabled: !isValidAmount || isCreatingCheckout, className: "w-full h-12 bg-foreground text-background rounded-lg font-medium hover:bg-foreground/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2", children: [isCreatingCheckout ? (_jsx(Loader2, { className: "w-4 h-4 animate-spin" })) : (_jsx(CreditCard, { className: "w-4 h-4" })), "Pay with Card"] }), _jsxs("div", { className: "relative pt-6", children: [_jsxs("div", { className: "absolute inset-x-0 top-0 flex items-center", children: [_jsx("div", { className: "flex-1 h-px bg-border" }), _jsx("span", { className: "px-3 text-xs text-muted-foreground", children: "OR" }), _jsx("div", { className: "flex-1 h-px bg-border" })] }), _jsxs("div", { className: "flex items-start gap-3 p-4 bg-muted/30 rounded-lg", children: [_jsx(Wallet, { className: "w-5 h-5 text-muted-foreground mt-0.5" }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "font-medium text-sm", children: "Pay with USDC" }), usdcBalance !== null && (_jsxs("span", { className: "text-xs font-mono text-muted-foreground", children: [usdcBalance.toFixed(2), " USDC"] }))] }), _jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "Send USDC to your Setu wallet. Auto top-up when balance is low." })] })] })] })] }))] }) }));
195
+ });
196
+ //# sourceMappingURL=SetuTopupModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetuTopupModal.js","sourceRoot":"","sources":["../../../src/components/settings/SetuTopupModal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Terminal } from '../../hooks/useTerminals';
2
+ interface TerminalListProps {
3
+ terminals: Terminal[];
4
+ isLoading: boolean;
5
+ }
6
+ export declare const TerminalList: import("react").NamedExoticComponent<TerminalListProps>;
7
+ export {};
8
+ //# sourceMappingURL=TerminalList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalList.d.ts","sourceRoot":"","sources":["../../../src/components/terminals/TerminalList.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,UAAU,iBAAiB;IAC1B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,YAAY,yDA2EvB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from '../ui/Button';
3
+ import { memo } from 'react';
4
+ import { Terminal as TerminalIcon, User, Bot } from 'lucide-react';
5
+ import { useTerminalStore } from '../../stores/terminalStore';
6
+ export const TerminalList = memo(function TerminalList({ terminals, isLoading, }) {
7
+ const selectTerminal = useTerminalStore((state) => state.selectTerminal);
8
+ if (isLoading) {
9
+ return (_jsx("div", { className: "flex items-center justify-center h-full text-muted-foreground", children: _jsx("div", { className: "text-sm", children: "Loading terminals..." }) }));
10
+ }
11
+ if (terminals.length === 0) {
12
+ return (_jsxs("div", { className: "flex flex-col items-center justify-center h-full text-muted-foreground px-4 text-center", children: [_jsx(TerminalIcon, { className: "w-12 h-12 mb-3 opacity-50" }), _jsx("div", { className: "text-sm font-medium mb-1", children: "No active terminals" }), _jsx("div", { className: "text-xs", children: "Click the + button to create a new terminal" })] }));
13
+ }
14
+ return (_jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx("div", { className: "p-2 space-y-1", children: terminals.map((terminal) => (_jsx(Button, { variant: "ghost", className: "w-full justify-start h-auto py-3 px-3", onClick: () => selectTerminal(terminal.id), children: _jsxs("div", { className: "flex items-start gap-3 w-full", children: [_jsx("div", { className: "shrink-0 mt-0.5", children: terminal.createdBy === 'llm' ? (_jsx(Bot, { className: "w-4 h-4 text-blue-500" })) : (_jsx(User, { className: "w-4 h-4 text-green-500" })) }), _jsxs("div", { className: "flex-1 min-w-0 text-left", children: [_jsx("div", { className: "text-sm font-medium truncate", children: terminal.title }), _jsxs("div", { className: "text-xs text-muted-foreground truncate", children: [terminal.command, ' ', terminal.args.length > 0 && terminal.args.join(' ')] }), _jsxs("div", { className: "flex items-center gap-2 mt-1", children: [_jsx("span", { className: `text-xs ${terminal.status === 'running'
15
+ ? 'text-green-600'
16
+ : 'text-orange-600'}`, children: terminal.status === 'running'
17
+ ? 'Running'
18
+ : `Exited (${terminal.exitCode})` }), _jsxs("span", { className: "text-xs text-muted-foreground", children: ["\u2022 ", formatUptime(terminal.uptime)] })] })] })] }) }, terminal.id))) }) }));
19
+ });
20
+ function formatUptime(ms) {
21
+ const seconds = Math.floor(ms / 1000);
22
+ const minutes = Math.floor(seconds / 60);
23
+ const hours = Math.floor(minutes / 60);
24
+ if (hours > 0) {
25
+ return `${hours}h ${minutes % 60}m`;
26
+ }
27
+ if (minutes > 0) {
28
+ return `${minutes}m`;
29
+ }
30
+ return `${seconds}s`;
31
+ }
32
+ //# sourceMappingURL=TerminalList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalList.js","sourceRoot":"","sources":["../../../src/components/terminals/TerminalList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface TerminalViewerProps {
2
+ terminalId: string;
3
+ }
4
+ export declare function TerminalViewer({ terminalId }: TerminalViewerProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
6
+ //# sourceMappingURL=TerminalViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalViewer.d.ts","sourceRoot":"","sources":["../../../src/components/terminals/TerminalViewer.tsx"],"names":[],"mappings":"AA4FA,UAAU,mBAAmB;IAC5B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,EAAE,mBAAmB,2CAqQjE"}
@@ -0,0 +1,263 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { init, Terminal, FitAddon } from 'ghostty-web';
4
+ import { ArrowLeft, X } from 'lucide-react';
5
+ import { Button } from '../ui/Button';
6
+ import { useTerminals } from '../../hooks/useTerminals';
7
+ import { useTerminalStore } from '../../stores/terminalStore';
8
+ import { getRuntimeApiBaseUrl } from '../../lib/config';
9
+ import { client } from '@ottocode/api';
10
+ const FONT_FAMILY = '"JetBrainsMono NFM", monospace';
11
+ function resolveBackgroundColor() {
12
+ if (typeof document === 'undefined')
13
+ return '#121216';
14
+ const el = document.createElement('div');
15
+ el.style.display = 'none';
16
+ el.className = 'bg-background';
17
+ document.body.appendChild(el);
18
+ const computed = getComputedStyle(el).backgroundColor;
19
+ document.body.removeChild(el);
20
+ const match = computed.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
21
+ if (match) {
22
+ const r = Number(match[1]);
23
+ const g = Number(match[2]);
24
+ const b = Number(match[3]);
25
+ return `#${((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1)}`;
26
+ }
27
+ return '#121216';
28
+ }
29
+ let fontsLoaded = false;
30
+ async function loadEmbeddedFont() {
31
+ if (fontsLoaded)
32
+ return;
33
+ if (typeof document === 'undefined' || !('FontFace' in window))
34
+ return;
35
+ const variants = [
36
+ {
37
+ file: 'JetBrainsMonoNerdFontMono-Regular.woff2',
38
+ weight: '400',
39
+ style: 'normal',
40
+ },
41
+ {
42
+ file: 'JetBrainsMonoNerdFontMono-Bold.woff2',
43
+ weight: '700',
44
+ style: 'normal',
45
+ },
46
+ {
47
+ file: 'JetBrainsMonoNerdFontMono-Italic.woff2',
48
+ weight: '400',
49
+ style: 'italic',
50
+ },
51
+ {
52
+ file: 'JetBrainsMonoNerdFontMono-BoldItalic.woff2',
53
+ weight: '700',
54
+ style: 'italic',
55
+ },
56
+ ];
57
+ const loads = variants.map(async (v) => {
58
+ try {
59
+ const url = new URL(`../../assets/fonts/${v.file}`, import.meta.url).href;
60
+ const face = new FontFace('JetBrainsMono NFM', `url("${url}") format("woff2")`, {
61
+ weight: v.weight,
62
+ style: v.style,
63
+ });
64
+ const loaded = await face.load();
65
+ document.fonts.add(loaded);
66
+ }
67
+ catch {
68
+ // variant not available
69
+ }
70
+ });
71
+ await Promise.allSettled(loads);
72
+ fontsLoaded = true;
73
+ }
74
+ function resolveApiBaseUrl() {
75
+ const config = client.getConfig?.();
76
+ if (config &&
77
+ typeof config.baseURL === 'string' &&
78
+ config.baseURL.length > 0) {
79
+ return config.baseURL;
80
+ }
81
+ return getRuntimeApiBaseUrl();
82
+ }
83
+ export function TerminalViewer({ terminalId }) {
84
+ const termRef = useRef(null);
85
+ const xtermRef = useRef(null);
86
+ const fitAddonRef = useRef(null);
87
+ const eventSourceRef = useRef(null);
88
+ const [ready, setReady] = useState(false);
89
+ const { data: terminals } = useTerminals();
90
+ const { selectTerminal } = useTerminalStore();
91
+ const terminal = terminals?.terminals.find((t) => t.id === terminalId);
92
+ const handleKill = async () => {
93
+ try {
94
+ const baseUrl = resolveApiBaseUrl();
95
+ await fetch(`${baseUrl}/v1/terminals/${terminalId}`, {
96
+ method: 'DELETE',
97
+ });
98
+ selectTerminal(null);
99
+ }
100
+ catch (error) {
101
+ console.error('Failed to kill terminal:', error);
102
+ }
103
+ };
104
+ useEffect(() => {
105
+ if (!termRef.current || !terminalId)
106
+ return;
107
+ let disposed = false;
108
+ let xterm = null;
109
+ let fitAddon = null;
110
+ let handleResize = null;
111
+ setReady(false);
112
+ if (eventSourceRef.current) {
113
+ eventSourceRef.current.close();
114
+ eventSourceRef.current = null;
115
+ }
116
+ const setup = async () => {
117
+ await init();
118
+ if (disposed || !termRef.current)
119
+ return;
120
+ await loadEmbeddedFont();
121
+ await document.fonts.ready;
122
+ const bg = resolveBackgroundColor();
123
+ xterm = new Terminal({
124
+ theme: {
125
+ background: bg,
126
+ foreground: '#d4d4d4',
127
+ cursor: '#ffffff',
128
+ cursorAccent: '#000000',
129
+ selectionBackground: '#264f78',
130
+ black: '#000000',
131
+ red: '#cd3131',
132
+ green: '#0dbc79',
133
+ yellow: '#e5e510',
134
+ blue: '#2472c8',
135
+ magenta: '#bc3fbc',
136
+ cyan: '#11a8cd',
137
+ white: '#e5e5e5',
138
+ brightBlack: '#666666',
139
+ brightRed: '#f14c4c',
140
+ brightGreen: '#23d18b',
141
+ brightYellow: '#f5f543',
142
+ brightBlue: '#3b8eea',
143
+ brightMagenta: '#d670d6',
144
+ brightCyan: '#29b8db',
145
+ brightWhite: '#e5e5e5',
146
+ },
147
+ fontSize: 13,
148
+ fontFamily: FONT_FAMILY,
149
+ cursorBlink: true,
150
+ convertEol: true,
151
+ scrollback: 1000,
152
+ });
153
+ fitAddon = new FitAddon();
154
+ xterm.loadAddon(fitAddon);
155
+ xterm.open(termRef.current);
156
+ xterm.focus();
157
+ await new Promise((resolve) => {
158
+ requestAnimationFrame(() => {
159
+ try {
160
+ fitAddon?.fit();
161
+ }
162
+ catch (error) {
163
+ console.error('Failed to fit terminal:', error);
164
+ }
165
+ resolve();
166
+ });
167
+ });
168
+ if (disposed)
169
+ return;
170
+ const baseUrl = resolveApiBaseUrl();
171
+ const sendResize = (cols, rows) => {
172
+ fetch(`${baseUrl}/v1/terminals/${terminalId}/resize`, {
173
+ method: 'POST',
174
+ headers: { 'Content-Type': 'application/json' },
175
+ body: JSON.stringify({ cols, rows }),
176
+ }).catch(() => { });
177
+ };
178
+ if (xterm) {
179
+ sendResize(xterm.cols, xterm.rows);
180
+ }
181
+ const eventSource = new EventSource(`${baseUrl}/v1/terminals/${terminalId}/output`);
182
+ eventSourceRef.current = eventSource;
183
+ let gotFirstData = false;
184
+ eventSource.onmessage = (event) => {
185
+ try {
186
+ const data = JSON.parse(event.data);
187
+ if (data.type === 'data') {
188
+ xterm?.write(data.line);
189
+ if (!gotFirstData) {
190
+ gotFirstData = true;
191
+ setTimeout(() => {
192
+ if (!disposed)
193
+ setReady(true);
194
+ }, 350);
195
+ }
196
+ }
197
+ else if (data.type === 'exit') {
198
+ xterm?.write(`\r\n\x1b[33m[Process exited with code ${data.exitCode}]\x1b[0m\r\n`);
199
+ }
200
+ }
201
+ catch (error) {
202
+ console.error('Failed to parse terminal output:', error);
203
+ }
204
+ };
205
+ eventSource.onerror = (error) => {
206
+ if (eventSource.readyState !== EventSource.CLOSED) {
207
+ console.error('[TerminalViewer] SSE error:', error);
208
+ }
209
+ eventSource.close();
210
+ if (eventSourceRef.current === eventSource) {
211
+ eventSourceRef.current = null;
212
+ }
213
+ };
214
+ xterm.onData((data) => {
215
+ fetch(`${baseUrl}/v1/terminals/${terminalId}/input`, {
216
+ method: 'POST',
217
+ headers: { 'Content-Type': 'application/json' },
218
+ body: JSON.stringify({ input: data }),
219
+ }).catch((error) => {
220
+ console.error('Failed to send terminal input:', error);
221
+ });
222
+ });
223
+ xterm.onResize(({ cols, rows }) => {
224
+ sendResize(cols, rows);
225
+ });
226
+ xtermRef.current = xterm;
227
+ fitAddonRef.current = fitAddon;
228
+ handleResize = () => {
229
+ if (fitAddonRef.current) {
230
+ try {
231
+ fitAddonRef.current.fit();
232
+ }
233
+ catch (error) {
234
+ console.error('Failed to fit terminal on resize:', error);
235
+ }
236
+ }
237
+ };
238
+ window.addEventListener('resize', handleResize);
239
+ setTimeout(() => {
240
+ if (!disposed && !gotFirstData)
241
+ setReady(true);
242
+ }, 2000);
243
+ };
244
+ setup().catch((error) => {
245
+ console.error('[TerminalViewer] Failed to initialize:', error);
246
+ });
247
+ return () => {
248
+ disposed = true;
249
+ if (eventSourceRef.current) {
250
+ eventSourceRef.current.close();
251
+ eventSourceRef.current = null;
252
+ }
253
+ if (handleResize) {
254
+ window.removeEventListener('resize', handleResize);
255
+ }
256
+ if (xterm) {
257
+ xterm.dispose();
258
+ }
259
+ };
260
+ }, [terminalId]);
261
+ return (_jsxs("div", { className: "flex h-full flex-col overflow-hidden bg-background", children: [_jsxs("div", { className: "h-10 border-b border-border px-3 flex items-center justify-between shrink-0 bg-background", children: [_jsxs("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: () => selectTerminal(null), title: "Back to terminal list", className: "h-6 w-6 shrink-0", children: _jsx(ArrowLeft, { className: "w-3.5 h-3.5" }) }), _jsx("span", { className: "text-xs font-medium text-muted-foreground truncate", children: terminal?.title || terminal?.purpose || terminalId })] }), _jsx(Button, { variant: "ghost", size: "icon", onClick: handleKill, title: "Kill terminal", className: "h-6 w-6 shrink-0 text-destructive hover:text-destructive", children: _jsx(X, { className: "w-3.5 h-3.5" }) })] }), _jsxs("div", { className: "relative flex-1 min-h-0 overflow-hidden", children: [_jsx("div", { ref: termRef, className: "absolute inset-0 bg-background" }), _jsx("div", { className: "absolute inset-0 bg-background flex items-center justify-center pointer-events-none transition-opacity duration-300", style: { opacity: ready ? 0 : 1 }, children: _jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsxs("svg", { className: "animate-spin h-4 w-4", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [_jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), _jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" })] }), _jsx("span", { className: "text-xs", children: "Loading terminal\u2026" })] }) })] })] }));
262
+ }
263
+ //# sourceMappingURL=TerminalViewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalViewer.js","sourceRoot":"","sources":["../../../src/components/terminals/TerminalViewer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const TerminalsSidebar: import("react").NamedExoticComponent<object>;
2
+ //# sourceMappingURL=TerminalsSidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalsSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/terminals/TerminalsSidebar.tsx"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,8CAoE3B,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo } from 'react';
3
+ import { Terminal, ChevronRight, Plus } from 'lucide-react';
4
+ import { Button } from '../ui/Button';
5
+ import { useTerminalStore } from '../../stores/terminalStore';
6
+ import { useTerminals, useCreateTerminal } from '../../hooks/useTerminals';
7
+ import { TerminalList } from './TerminalList';
8
+ import { TerminalViewer } from './TerminalViewer';
9
+ export const TerminalsSidebar = memo(function TerminalsSidebar() {
10
+ const isExpanded = useTerminalStore((state) => state.isExpanded);
11
+ const collapseSidebar = useTerminalStore((state) => state.collapseSidebar);
12
+ const selectedTerminalId = useTerminalStore((state) => state.selectedTerminalId);
13
+ const selectTerminal = useTerminalStore((state) => state.selectTerminal);
14
+ const expandSidebar = useTerminalStore((state) => state.expandSidebar);
15
+ const { data: terminals, isLoading } = useTerminals();
16
+ const createTerminal = useCreateTerminal();
17
+ const handleNewTerminal = async () => {
18
+ try {
19
+ const result = await createTerminal.mutateAsync({
20
+ command: 'bash',
21
+ purpose: 'Manual shell',
22
+ });
23
+ selectTerminal(result.terminalId);
24
+ expandSidebar();
25
+ }
26
+ catch (error) {
27
+ console.error('Failed to create terminal:', error);
28
+ }
29
+ };
30
+ if (!isExpanded)
31
+ return null;
32
+ return (_jsxs("div", { className: "w-80 border-l border-border bg-background flex flex-col h-full", children: [_jsxs("div", { className: "h-14 border-b border-border px-4 flex items-center justify-between shrink-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Terminal, { className: "w-4 h-4" }), _jsx("span", { className: "font-medium", children: "Terminals" }), terminals && terminals.count > 0 && (_jsxs("span", { className: "text-xs text-muted-foreground", children: ["(", terminals.count, ")"] }))] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: handleNewTerminal, title: "New terminal", disabled: createTerminal.isPending, children: _jsx(Plus, { className: "w-4 h-4" }) }), _jsx(Button, { variant: "ghost", size: "icon", onClick: collapseSidebar, children: _jsx(ChevronRight, { className: "w-4 h-4" }) })] })] }), _jsx("div", { className: "flex-1 overflow-hidden flex flex-col", children: selectedTerminalId ? (_jsx(TerminalViewer, { terminalId: selectedTerminalId })) : (_jsx(TerminalList, { terminals: terminals?.terminals ?? [], isLoading: isLoading })) })] }));
33
+ });
34
+ //# sourceMappingURL=TerminalsSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalsSidebar.js","sourceRoot":"","sources":["../../../src/components/terminals/TerminalsSidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const TerminalsSidebarToggle: import("react").NamedExoticComponent<object>;
2
+ //# sourceMappingURL=TerminalsSidebarToggle.d.ts.map