@agi-cli/web-sdk 0.1.61

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 (266) hide show
  1. package/README.md +187 -0
  2. package/dist/components/chat/ChatInput.d.ts +10 -0
  3. package/dist/components/chat/ChatInput.d.ts.map +1 -0
  4. package/dist/components/chat/ChatInput.js +53 -0
  5. package/dist/components/chat/ChatInput.js.map +1 -0
  6. package/dist/components/chat/ChatInputContainer.d.ts +9 -0
  7. package/dist/components/chat/ChatInputContainer.d.ts.map +1 -0
  8. package/dist/components/chat/ChatInputContainer.js +52 -0
  9. package/dist/components/chat/ChatInputContainer.js.map +1 -0
  10. package/dist/components/chat/ConfigModal.d.ts +13 -0
  11. package/dist/components/chat/ConfigModal.d.ts.map +1 -0
  12. package/dist/components/chat/ConfigModal.js +51 -0
  13. package/dist/components/chat/ConfigModal.js.map +1 -0
  14. package/dist/components/chat/ConfigSelector.d.ts +11 -0
  15. package/dist/components/chat/ConfigSelector.d.ts.map +1 -0
  16. package/dist/components/chat/ConfigSelector.js +47 -0
  17. package/dist/components/chat/ConfigSelector.js.map +1 -0
  18. package/dist/components/chat/StopButton.d.ts +8 -0
  19. package/dist/components/chat/StopButton.d.ts.map +1 -0
  20. package/dist/components/chat/StopButton.js +25 -0
  21. package/dist/components/chat/StopButton.js.map +1 -0
  22. package/dist/components/git/GitCommitModal.d.ts +2 -0
  23. package/dist/components/git/GitCommitModal.d.ts.map +1 -0
  24. package/dist/components/git/GitCommitModal.js +44 -0
  25. package/dist/components/git/GitCommitModal.js.map +1 -0
  26. package/dist/components/git/GitDiffPanel.d.ts +2 -0
  27. package/dist/components/git/GitDiffPanel.d.ts.map +1 -0
  28. package/dist/components/git/GitDiffPanel.js +69 -0
  29. package/dist/components/git/GitDiffPanel.js.map +1 -0
  30. package/dist/components/git/GitDiffViewer.d.ts +7 -0
  31. package/dist/components/git/GitDiffViewer.d.ts.map +1 -0
  32. package/dist/components/git/GitDiffViewer.js +136 -0
  33. package/dist/components/git/GitDiffViewer.js.map +1 -0
  34. package/dist/components/git/GitFileItem.d.ts +9 -0
  35. package/dist/components/git/GitFileItem.d.ts.map +1 -0
  36. package/dist/components/git/GitFileItem.js +90 -0
  37. package/dist/components/git/GitFileItem.js.map +1 -0
  38. package/dist/components/git/GitFileList.d.ts +7 -0
  39. package/dist/components/git/GitFileList.d.ts.map +1 -0
  40. package/dist/components/git/GitFileList.js +24 -0
  41. package/dist/components/git/GitFileList.js.map +1 -0
  42. package/dist/components/git/GitSidebar.d.ts +2 -0
  43. package/dist/components/git/GitSidebar.d.ts.map +1 -0
  44. package/dist/components/git/GitSidebar.js +38 -0
  45. package/dist/components/git/GitSidebar.js.map +1 -0
  46. package/dist/components/git/GitSidebarToggle.d.ts +2 -0
  47. package/dist/components/git/GitSidebarToggle.d.ts.map +1 -0
  48. package/dist/components/git/GitSidebarToggle.js +18 -0
  49. package/dist/components/git/GitSidebarToggle.js.map +1 -0
  50. package/dist/components/index.d.ts +28 -0
  51. package/dist/components/index.d.ts.map +1 -0
  52. package/dist/components/index.js +34 -0
  53. package/dist/components/index.js.map +1 -0
  54. package/dist/components/messages/AssistantMessageGroup.d.ts +10 -0
  55. package/dist/components/messages/AssistantMessageGroup.d.ts.map +1 -0
  56. package/dist/components/messages/AssistantMessageGroup.js +85 -0
  57. package/dist/components/messages/AssistantMessageGroup.js.map +1 -0
  58. package/dist/components/messages/MessagePartItem.d.ts +11 -0
  59. package/dist/components/messages/MessagePartItem.d.ts.map +1 -0
  60. package/dist/components/messages/MessagePartItem.js +290 -0
  61. package/dist/components/messages/MessagePartItem.js.map +1 -0
  62. package/dist/components/messages/MessageThread.d.ts +9 -0
  63. package/dist/components/messages/MessageThread.d.ts.map +1 -0
  64. package/dist/components/messages/MessageThread.js +88 -0
  65. package/dist/components/messages/MessageThread.js.map +1 -0
  66. package/dist/components/messages/MessageThreadContainer.d.ts +6 -0
  67. package/dist/components/messages/MessageThreadContainer.d.ts.map +1 -0
  68. package/dist/components/messages/MessageThreadContainer.js +18 -0
  69. package/dist/components/messages/MessageThreadContainer.js.map +1 -0
  70. package/dist/components/messages/UserMessageGroup.d.ts +8 -0
  71. package/dist/components/messages/UserMessageGroup.d.ts.map +1 -0
  72. package/dist/components/messages/UserMessageGroup.js +43 -0
  73. package/dist/components/messages/UserMessageGroup.js.map +1 -0
  74. package/dist/components/messages/renderers/ApplyPatchRenderer.d.ts +3 -0
  75. package/dist/components/messages/renderers/ApplyPatchRenderer.d.ts.map +1 -0
  76. package/dist/components/messages/renderers/ApplyPatchRenderer.js +36 -0
  77. package/dist/components/messages/renderers/ApplyPatchRenderer.js.map +1 -0
  78. package/dist/components/messages/renderers/BashRenderer.d.ts +3 -0
  79. package/dist/components/messages/renderers/BashRenderer.d.ts.map +1 -0
  80. package/dist/components/messages/renderers/BashRenderer.js +48 -0
  81. package/dist/components/messages/renderers/BashRenderer.js.map +1 -0
  82. package/dist/components/messages/renderers/DebugRenderer.d.ts +5 -0
  83. package/dist/components/messages/renderers/DebugRenderer.d.ts.map +1 -0
  84. package/dist/components/messages/renderers/DebugRenderer.js +5 -0
  85. package/dist/components/messages/renderers/DebugRenderer.js.map +1 -0
  86. package/dist/components/messages/renderers/DiffView.d.ts +6 -0
  87. package/dist/components/messages/renderers/DiffView.d.ts.map +1 -0
  88. package/dist/components/messages/renderers/DiffView.js +186 -0
  89. package/dist/components/messages/renderers/DiffView.js.map +1 -0
  90. package/dist/components/messages/renderers/EditRenderer.d.ts +3 -0
  91. package/dist/components/messages/renderers/EditRenderer.d.ts.map +1 -0
  92. package/dist/components/messages/renderers/EditRenderer.js +15 -0
  93. package/dist/components/messages/renderers/EditRenderer.js.map +1 -0
  94. package/dist/components/messages/renderers/ErrorRenderer.d.ts +8 -0
  95. package/dist/components/messages/renderers/ErrorRenderer.d.ts.map +1 -0
  96. package/dist/components/messages/renderers/ErrorRenderer.js +118 -0
  97. package/dist/components/messages/renderers/ErrorRenderer.js.map +1 -0
  98. package/dist/components/messages/renderers/FinishRenderer.d.ts +3 -0
  99. package/dist/components/messages/renderers/FinishRenderer.d.ts.map +1 -0
  100. package/dist/components/messages/renderers/FinishRenderer.js +7 -0
  101. package/dist/components/messages/renderers/FinishRenderer.js.map +1 -0
  102. package/dist/components/messages/renderers/GenericRenderer.d.ts +3 -0
  103. package/dist/components/messages/renderers/GenericRenderer.d.ts.map +1 -0
  104. package/dist/components/messages/renderers/GenericRenderer.js +42 -0
  105. package/dist/components/messages/renderers/GenericRenderer.js.map +1 -0
  106. package/dist/components/messages/renderers/GitCommitRenderer.d.ts +3 -0
  107. package/dist/components/messages/renderers/GitCommitRenderer.d.ts.map +1 -0
  108. package/dist/components/messages/renderers/GitCommitRenderer.js +18 -0
  109. package/dist/components/messages/renderers/GitCommitRenderer.js.map +1 -0
  110. package/dist/components/messages/renderers/GitDiffRenderer.d.ts +3 -0
  111. package/dist/components/messages/renderers/GitDiffRenderer.d.ts.map +1 -0
  112. package/dist/components/messages/renderers/GitDiffRenderer.js +25 -0
  113. package/dist/components/messages/renderers/GitDiffRenderer.js.map +1 -0
  114. package/dist/components/messages/renderers/GitStatusRenderer.d.ts +3 -0
  115. package/dist/components/messages/renderers/GitStatusRenderer.d.ts.map +1 -0
  116. package/dist/components/messages/renderers/GitStatusRenderer.js +56 -0
  117. package/dist/components/messages/renderers/GitStatusRenderer.js.map +1 -0
  118. package/dist/components/messages/renderers/ListRenderer.d.ts +3 -0
  119. package/dist/components/messages/renderers/ListRenderer.d.ts.map +1 -0
  120. package/dist/components/messages/renderers/ListRenderer.js +14 -0
  121. package/dist/components/messages/renderers/ListRenderer.js.map +1 -0
  122. package/dist/components/messages/renderers/ProgressUpdateRenderer.d.ts +3 -0
  123. package/dist/components/messages/renderers/ProgressUpdateRenderer.d.ts.map +1 -0
  124. package/dist/components/messages/renderers/ProgressUpdateRenderer.js +9 -0
  125. package/dist/components/messages/renderers/ProgressUpdateRenderer.js.map +1 -0
  126. package/dist/components/messages/renderers/ReadRenderer.d.ts +3 -0
  127. package/dist/components/messages/renderers/ReadRenderer.d.ts.map +1 -0
  128. package/dist/components/messages/renderers/ReadRenderer.js +59 -0
  129. package/dist/components/messages/renderers/ReadRenderer.js.map +1 -0
  130. package/dist/components/messages/renderers/SearchRenderer.d.ts +3 -0
  131. package/dist/components/messages/renderers/SearchRenderer.d.ts.map +1 -0
  132. package/dist/components/messages/renderers/SearchRenderer.js +62 -0
  133. package/dist/components/messages/renderers/SearchRenderer.js.map +1 -0
  134. package/dist/components/messages/renderers/ToolErrorDisplay.d.ts +12 -0
  135. package/dist/components/messages/renderers/ToolErrorDisplay.d.ts.map +1 -0
  136. package/dist/components/messages/renderers/ToolErrorDisplay.js +10 -0
  137. package/dist/components/messages/renderers/ToolErrorDisplay.js.map +1 -0
  138. package/dist/components/messages/renderers/TreeRenderer.d.ts +3 -0
  139. package/dist/components/messages/renderers/TreeRenderer.d.ts.map +1 -0
  140. package/dist/components/messages/renderers/TreeRenderer.js +20 -0
  141. package/dist/components/messages/renderers/TreeRenderer.js.map +1 -0
  142. package/dist/components/messages/renderers/UpdatePlanRenderer.d.ts +3 -0
  143. package/dist/components/messages/renderers/UpdatePlanRenderer.d.ts.map +1 -0
  144. package/dist/components/messages/renderers/UpdatePlanRenderer.js +13 -0
  145. package/dist/components/messages/renderers/UpdatePlanRenderer.js.map +1 -0
  146. package/dist/components/messages/renderers/WebSearchRenderer.d.ts +3 -0
  147. package/dist/components/messages/renderers/WebSearchRenderer.d.ts.map +1 -0
  148. package/dist/components/messages/renderers/WebSearchRenderer.js +35 -0
  149. package/dist/components/messages/renderers/WebSearchRenderer.js.map +1 -0
  150. package/dist/components/messages/renderers/WriteRenderer.d.ts +3 -0
  151. package/dist/components/messages/renderers/WriteRenderer.d.ts.map +1 -0
  152. package/dist/components/messages/renderers/WriteRenderer.js +18 -0
  153. package/dist/components/messages/renderers/WriteRenderer.js.map +1 -0
  154. package/dist/components/messages/renderers/index.d.ts +10 -0
  155. package/dist/components/messages/renderers/index.d.ts.map +1 -0
  156. package/dist/components/messages/renderers/index.js +72 -0
  157. package/dist/components/messages/renderers/index.js.map +1 -0
  158. package/dist/components/messages/renderers/types.d.ts +77 -0
  159. package/dist/components/messages/renderers/types.d.ts.map +1 -0
  160. package/dist/components/messages/renderers/types.js +2 -0
  161. package/dist/components/messages/renderers/types.js.map +1 -0
  162. package/dist/components/messages/renderers/utils.d.ts +11 -0
  163. package/dist/components/messages/renderers/utils.d.ts.map +1 -0
  164. package/dist/components/messages/renderers/utils.js +18 -0
  165. package/dist/components/messages/renderers/utils.js.map +1 -0
  166. package/dist/components/sessions/LeanHeader.d.ts +9 -0
  167. package/dist/components/sessions/LeanHeader.d.ts.map +1 -0
  168. package/dist/components/sessions/LeanHeader.js +28 -0
  169. package/dist/components/sessions/LeanHeader.js.map +1 -0
  170. package/dist/components/sessions/SessionHeader.d.ts +7 -0
  171. package/dist/components/sessions/SessionHeader.d.ts.map +1 -0
  172. package/dist/components/sessions/SessionHeader.js +49 -0
  173. package/dist/components/sessions/SessionHeader.js.map +1 -0
  174. package/dist/components/sessions/SessionItem.d.ts +9 -0
  175. package/dist/components/sessions/SessionItem.d.ts.map +1 -0
  176. package/dist/components/sessions/SessionItem.js +27 -0
  177. package/dist/components/sessions/SessionItem.js.map +1 -0
  178. package/dist/components/sessions/SessionListContainer.d.ts +7 -0
  179. package/dist/components/sessions/SessionListContainer.d.ts.map +1 -0
  180. package/dist/components/sessions/SessionListContainer.js +32 -0
  181. package/dist/components/sessions/SessionListContainer.js.map +1 -0
  182. package/dist/components/ui/Button.d.ts +8 -0
  183. package/dist/components/ui/Button.d.ts.map +1 -0
  184. package/dist/components/ui/Button.js +19 -0
  185. package/dist/components/ui/Button.js.map +1 -0
  186. package/dist/components/ui/Card.d.ts +6 -0
  187. package/dist/components/ui/Card.d.ts.map +1 -0
  188. package/dist/components/ui/Card.js +7 -0
  189. package/dist/components/ui/Card.js.map +1 -0
  190. package/dist/components/ui/Input.d.ts +6 -0
  191. package/dist/components/ui/Input.d.ts.map +1 -0
  192. package/dist/components/ui/Input.js +7 -0
  193. package/dist/components/ui/Input.js.map +1 -0
  194. package/dist/components/ui/Textarea.d.ts +6 -0
  195. package/dist/components/ui/Textarea.d.ts.map +1 -0
  196. package/dist/components/ui/Textarea.js +7 -0
  197. package/dist/components/ui/Textarea.js.map +1 -0
  198. package/dist/hooks/index.d.ts +8 -0
  199. package/dist/hooks/index.d.ts.map +1 -0
  200. package/dist/hooks/index.js +9 -0
  201. package/dist/hooks/index.js.map +1 -0
  202. package/dist/hooks/useConfig.d.ts +18 -0
  203. package/dist/hooks/useConfig.d.ts.map +1 -0
  204. package/dist/hooks/useConfig.js +16 -0
  205. package/dist/hooks/useConfig.js.map +1 -0
  206. package/dist/hooks/useGit.d.ts +8 -0
  207. package/dist/hooks/useGit.d.ts.map +1 -0
  208. package/dist/hooks/useGit.js +71 -0
  209. package/dist/hooks/useGit.js.map +1 -0
  210. package/dist/hooks/useMessages.d.ts +4 -0
  211. package/dist/hooks/useMessages.d.ts.map +1 -0
  212. package/dist/hooks/useMessages.js +25 -0
  213. package/dist/hooks/useMessages.js.map +1 -0
  214. package/dist/hooks/useSessionStream.d.ts +2 -0
  215. package/dist/hooks/useSessionStream.d.ts.map +1 -0
  216. package/dist/hooks/useSessionStream.js +332 -0
  217. package/dist/hooks/useSessionStream.js.map +1 -0
  218. package/dist/hooks/useSessions.d.ts +4 -0
  219. package/dist/hooks/useSessions.d.ts.map +1 -0
  220. package/dist/hooks/useSessions.js +19 -0
  221. package/dist/hooks/useSessions.js.map +1 -0
  222. package/dist/hooks/useTheme.d.ts +8 -0
  223. package/dist/hooks/useTheme.d.ts.map +1 -0
  224. package/dist/hooks/useTheme.js +40 -0
  225. package/dist/hooks/useTheme.js.map +1 -0
  226. package/dist/hooks/useWorkingDirectory.d.ts +2 -0
  227. package/dist/hooks/useWorkingDirectory.d.ts.map +1 -0
  228. package/dist/hooks/useWorkingDirectory.js +34 -0
  229. package/dist/hooks/useWorkingDirectory.js.map +1 -0
  230. package/dist/index.d.ts +6 -0
  231. package/dist/index.d.ts.map +1 -0
  232. package/dist/index.js +7 -0
  233. package/dist/index.js.map +1 -0
  234. package/dist/lib/api-client.d.ts +44 -0
  235. package/dist/lib/api-client.d.ts.map +1 -0
  236. package/dist/lib/api-client.js +195 -0
  237. package/dist/lib/api-client.js.map +1 -0
  238. package/dist/lib/config.d.ts +5 -0
  239. package/dist/lib/config.d.ts.map +1 -0
  240. package/dist/lib/config.js +22 -0
  241. package/dist/lib/config.js.map +1 -0
  242. package/dist/lib/index.d.ts +4 -0
  243. package/dist/lib/index.d.ts.map +1 -0
  244. package/dist/lib/index.js +5 -0
  245. package/dist/lib/index.js.map +1 -0
  246. package/dist/lib/sse-client.d.ts +13 -0
  247. package/dist/lib/sse-client.d.ts.map +1 -0
  248. package/dist/lib/sse-client.js +111 -0
  249. package/dist/lib/sse-client.js.map +1 -0
  250. package/dist/stores/gitStore.d.ts +20 -0
  251. package/dist/stores/gitStore.d.ts.map +1 -0
  252. package/dist/stores/gitStore.js +35 -0
  253. package/dist/stores/gitStore.js.map +1 -0
  254. package/dist/stores/index.d.ts +3 -0
  255. package/dist/stores/index.d.ts.map +1 -0
  256. package/dist/stores/index.js +3 -0
  257. package/dist/stores/index.js.map +1 -0
  258. package/dist/stores/sidebarStore.d.ts +26 -0
  259. package/dist/stores/sidebarStore.d.ts.map +1 -0
  260. package/dist/stores/sidebarStore.js +16 -0
  261. package/dist/stores/sidebarStore.js.map +1 -0
  262. package/dist/types/api.d.ts +128 -0
  263. package/dist/types/api.d.ts.map +1 -0
  264. package/dist/types/api.js +2 -0
  265. package/dist/types/api.js.map +1 -0
  266. package/package.json +90 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Input.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAEjD,UAAU,UAAW,SAAQ,mBAAmB,CAAC,gBAAgB,CAAC;CAAG;AAErE,eAAO,MAAM,KAAK,yGAUjB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ export const Input = forwardRef(({ className = '', ...props }, ref) => {
4
+ return (_jsx("input", { ref: ref, className: `w-full px-3 py-2 bg-muted border border-border rounded text-foreground placeholder-muted-foreground outline-none ${className}`, ...props }));
5
+ });
6
+ Input.displayName = 'Input';
7
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../src/components/ui/Input.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAKnC,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAC9B,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACrC,OAAO,CACN,gBACC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,oHAAoH,SAAS,EAAE,KACtI,KAAK,GACR,CACF,CAAC;AACH,CAAC,CACD,CAAC;AAEF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { TextareaHTMLAttributes } from 'react';
2
+ interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
3
+ }
4
+ export declare const Textarea: import("react").ForwardRefExoticComponent<TextareaProps & import("react").RefAttributes<HTMLTextAreaElement>>;
5
+ export {};
6
+ //# sourceMappingURL=Textarea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Textarea.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAEpD,UAAU,aAAc,SAAQ,sBAAsB,CAAC,mBAAmB,CAAC;CAAG;AAE9E,eAAO,MAAM,QAAQ,+GAUpB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ export const Textarea = forwardRef(({ className = '', ...props }, ref) => {
4
+ return (_jsx("textarea", { ref: ref, className: `w-full px-3 py-2 bg-muted border border-border rounded text-foreground placeholder-muted-foreground outline-none resize-none ${className}`, ...props }));
5
+ });
6
+ Textarea.displayName = 'Textarea';
7
+ //# sourceMappingURL=Textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../../../src/components/ui/Textarea.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAKnC,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CACjC,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACrC,OAAO,CACN,mBACC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,gIAAgI,SAAS,EAAE,KAClJ,KAAK,GACR,CACF,CAAC;AACH,CAAC,CACD,CAAC;AAEF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from './useConfig';
2
+ export * from './useGit';
3
+ export * from './useMessages';
4
+ export * from './useSessions';
5
+ export * from './useSessionStream';
6
+ export * from './useTheme';
7
+ export * from './useWorkingDirectory';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Export all hooks
2
+ export * from './useConfig';
3
+ export * from './useGit';
4
+ export * from './useMessages';
5
+ export * from './useSessions';
6
+ export * from './useSessionStream';
7
+ export * from './useTheme';
8
+ export * from './useWorkingDirectory';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare function useConfig(): import("@tanstack/react-query").UseQueryResult<{
2
+ agents: string[];
3
+ providers: string[];
4
+ defaults: {
5
+ agent: string;
6
+ provider: string;
7
+ model: string;
8
+ };
9
+ }, Error>;
10
+ export declare function useModels(provider?: string): import("@tanstack/react-query").UseQueryResult<{
11
+ models: Array<{
12
+ id: string;
13
+ label: string;
14
+ toolCall?: boolean;
15
+ }>;
16
+ default: string;
17
+ }, Error>;
18
+ //# sourceMappingURL=useConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/useConfig.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS;;;;;;;;UAKxB;AAED,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM;;;;gBAO6wI,CAAC;;;UADxzI"}
@@ -0,0 +1,16 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { apiClient } from '../lib/api-client';
3
+ export function useConfig() {
4
+ return useQuery({
5
+ queryKey: ['config'],
6
+ queryFn: () => apiClient.getConfig(),
7
+ });
8
+ }
9
+ export function useModels(provider) {
10
+ return useQuery({
11
+ queryKey: ['models', provider],
12
+ queryFn: () => (provider ? apiClient.getModels(provider) : null),
13
+ enabled: !!provider,
14
+ });
15
+ }
16
+ //# sourceMappingURL=useConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConfig.js","sourceRoot":"","sources":["../../src/hooks/useConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,UAAU,SAAS;IACxB,OAAO,QAAQ,CAAC;QACf,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE;KACpC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAiB;IAC1C,OAAO,QAAQ,CAAC;QACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,OAAO,EAAE,CAAC,CAAC,QAAQ;KACnB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function useGitStatus(): import("@tanstack/react-query").UseQueryResult<import("..").GitStatusResponse, Error>;
2
+ export declare function useGitDiff(file: string | null, staged?: boolean): import("@tanstack/react-query").UseQueryResult<import("..").GitDiffResponse, Error>;
3
+ export declare function useGitBranch(): import("@tanstack/react-query").UseQueryResult<import("..").GitBranchInfo, Error>;
4
+ export declare function useGenerateCommitMessage(): import("@tanstack/react-query").UseMutationResult<import("..").GitGenerateCommitMessageResponse, Error, void, unknown>;
5
+ export declare function useStageFiles(): import("@tanstack/react-query").UseMutationResult<import("..").GitStageResponse, Error, string[], unknown>;
6
+ export declare function useUnstageFiles(): import("@tanstack/react-query").UseMutationResult<import("..").GitUnstageResponse, Error, string[], unknown>;
7
+ export declare function useCommitChanges(): import("@tanstack/react-query").UseMutationResult<import("..").GitCommitResponse, Error, string, unknown>;
8
+ //# sourceMappingURL=useGit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGit.d.ts","sourceRoot":"","sources":["../../src/hooks/useGit.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,0FAa3B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,UAAQ,uFAS7D;AAED,wBAAgB,YAAY,sFAW3B;AAED,wBAAgB,wBAAwB,2HAIvC;AAED,wBAAgB,aAAa,+GAS5B;AAED,wBAAgB,eAAe,iHAS9B;AAED,wBAAgB,gBAAgB,8GAU/B"}
@@ -0,0 +1,71 @@
1
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import { apiClient } from '../lib/api-client';
3
+ import { useGitStore } from '../stores/gitStore';
4
+ export function useGitStatus() {
5
+ const isExpanded = useGitStore((state) => state.isExpanded);
6
+ return useQuery({
7
+ queryKey: ['git', 'status'],
8
+ queryFn: () => apiClient.getGitStatus(),
9
+ // Only poll when sidebar is expanded to reduce unnecessary requests
10
+ // Disabled during active generation to prevent interference
11
+ refetchInterval: isExpanded ? 5000 : false, // Poll every 5 seconds when expanded
12
+ retry: 1,
13
+ // Keep data fresh but don't spam the server
14
+ staleTime: 3000,
15
+ });
16
+ }
17
+ export function useGitDiff(file, staged = false) {
18
+ return useQuery({
19
+ queryKey: ['git', 'diff', file, staged],
20
+ queryFn: () => (file ? apiClient.getGitDiff(file, staged) : null),
21
+ enabled: !!file,
22
+ retry: 1,
23
+ // Don't refetch automatically for diff views
24
+ refetchInterval: false,
25
+ });
26
+ }
27
+ export function useGitBranch() {
28
+ const isExpanded = useGitStore((state) => state.isExpanded);
29
+ return useQuery({
30
+ queryKey: ['git', 'branch'],
31
+ queryFn: () => apiClient.getGitBranch(),
32
+ // Only poll when sidebar is expanded
33
+ refetchInterval: isExpanded ? 10000 : false, // Poll every 10 seconds
34
+ retry: 1,
35
+ staleTime: 5000,
36
+ });
37
+ }
38
+ export function useGenerateCommitMessage() {
39
+ return useMutation({
40
+ mutationFn: () => apiClient.generateCommitMessage(),
41
+ });
42
+ }
43
+ export function useStageFiles() {
44
+ const queryClient = useQueryClient();
45
+ return useMutation({
46
+ mutationFn: (files) => apiClient.stageFiles(files),
47
+ onSuccess: () => {
48
+ queryClient.invalidateQueries({ queryKey: ['git', 'status'] });
49
+ },
50
+ });
51
+ }
52
+ export function useUnstageFiles() {
53
+ const queryClient = useQueryClient();
54
+ return useMutation({
55
+ mutationFn: (files) => apiClient.unstageFiles(files),
56
+ onSuccess: () => {
57
+ queryClient.invalidateQueries({ queryKey: ['git', 'status'] });
58
+ },
59
+ });
60
+ }
61
+ export function useCommitChanges() {
62
+ const queryClient = useQueryClient();
63
+ return useMutation({
64
+ mutationFn: (message) => apiClient.commitChanges(message),
65
+ onSuccess: () => {
66
+ queryClient.invalidateQueries({ queryKey: ['git', 'status'] });
67
+ queryClient.invalidateQueries({ queryKey: ['git', 'branch'] });
68
+ },
69
+ });
70
+ }
71
+ //# sourceMappingURL=useGit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGit.js","sourceRoot":"","sources":["../../src/hooks/useGit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SendMessageRequest } from '../types/api';
2
+ export declare function useMessages(sessionId: string | undefined): import("@tanstack/react-query").UseQueryResult<import("..").Message[], Error>;
3
+ export declare function useSendMessage(sessionId: string): import("@tanstack/react-query").UseMutationResult<import("..").SendMessageResponse, Error, SendMessageRequest, unknown>;
4
+ //# sourceMappingURL=useMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMessages.d.ts","sourceRoot":"","sources":["../../src/hooks/useMessages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,iFAWxD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,2HAW/C"}
@@ -0,0 +1,25 @@
1
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import { apiClient } from '../lib/api-client';
3
+ export function useMessages(sessionId) {
4
+ return useQuery({
5
+ queryKey: ['messages', sessionId],
6
+ queryFn: () => {
7
+ if (!sessionId) {
8
+ throw new Error('Session ID is required');
9
+ }
10
+ return apiClient.getMessages(sessionId);
11
+ },
12
+ enabled: !!sessionId,
13
+ });
14
+ }
15
+ export function useSendMessage(sessionId) {
16
+ const queryClient = useQueryClient();
17
+ return useMutation({
18
+ mutationFn: (data) => apiClient.sendMessage(sessionId, data),
19
+ onSuccess: () => {
20
+ queryClient.invalidateQueries({ queryKey: ['messages', sessionId] });
21
+ queryClient.invalidateQueries({ queryKey: ['sessions'] });
22
+ },
23
+ });
24
+ }
25
+ //# sourceMappingURL=useMessages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMessages.js","sourceRoot":"","sources":["../../src/hooks/useMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,MAAM,UAAU,WAAW,CAAC,SAA6B;IACxD,OAAO,QAAQ,CAAC;QACf,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;QACjC,OAAO,EAAE,GAAG,EAAE;YACb,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,SAAS;KACpB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC/C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,WAAW,CAAC;QAClB,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CACxC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC;QACvC,SAAS,EAAE,GAAG,EAAE;YACf,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YACrE,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function useSessionStream(sessionId: string | undefined): void;
2
+ //# sourceMappingURL=useSessionStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionStream.d.ts","sourceRoot":"","sources":["../../src/hooks/useSessionStream.ts"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,QA2W7D"}
@@ -0,0 +1,332 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { useQueryClient } from '@tanstack/react-query';
3
+ import { SSEClient } from '../lib/sse-client';
4
+ import { apiClient } from '../lib/api-client';
5
+ export function useSessionStream(sessionId) {
6
+ const queryClient = useQueryClient();
7
+ const clientRef = useRef(null);
8
+ const assistantMessageIdRef = useRef(null);
9
+ const lastInvalidationRef = useRef(0);
10
+ useEffect(() => {
11
+ console.log('[useSessionStream] Hook called with sessionId:', sessionId);
12
+ if (!sessionId) {
13
+ console.log('[useSessionStream] No sessionId, skipping');
14
+ return;
15
+ }
16
+ assistantMessageIdRef.current = null;
17
+ const client = new SSEClient();
18
+ clientRef.current = client;
19
+ const url = apiClient.getStreamUrl(sessionId);
20
+ console.log('[useSessionStream] Connecting to stream:', url);
21
+ client.connect(url);
22
+ const resolveAssistantTargetIndex = (messages) => {
23
+ if (assistantMessageIdRef.current) {
24
+ const byId = messages.findIndex((message) => message.id === assistantMessageIdRef.current);
25
+ if (byId !== -1)
26
+ return byId;
27
+ }
28
+ for (let i = messages.length - 1; i >= 0; i -= 1) {
29
+ const candidate = messages[i];
30
+ if (candidate.role === 'assistant' && candidate.status !== 'complete') {
31
+ return i;
32
+ }
33
+ }
34
+ return -1;
35
+ };
36
+ const extractText = (part) => {
37
+ if (part.contentJson &&
38
+ typeof part.contentJson === 'object' &&
39
+ !Array.isArray(part.contentJson) &&
40
+ 'text' in part.contentJson) {
41
+ return String(part.contentJson.text ?? '');
42
+ }
43
+ if (typeof part.content === 'string') {
44
+ try {
45
+ const parsed = JSON.parse(part.content);
46
+ if (parsed && typeof parsed.text === 'string')
47
+ return parsed.text;
48
+ }
49
+ catch { }
50
+ return part.content;
51
+ }
52
+ return '';
53
+ };
54
+ const applyMessageDelta = (payload) => {
55
+ const messageId = typeof payload?.messageId === 'string' ? payload.messageId : null;
56
+ const partId = typeof payload?.partId === 'string' ? payload.partId : null;
57
+ const delta = typeof payload?.delta === 'string' ? payload.delta : null;
58
+ if (!messageId || !partId || delta === null)
59
+ return;
60
+ queryClient.setQueryData(['messages', sessionId], (oldMessages) => {
61
+ if (!oldMessages)
62
+ return oldMessages;
63
+ const nextMessages = [...oldMessages];
64
+ const messageIndex = nextMessages.findIndex((message) => message.id === messageId);
65
+ if (messageIndex === -1)
66
+ return oldMessages;
67
+ const targetMessage = nextMessages[messageIndex];
68
+ const parts = targetMessage.parts ? [...targetMessage.parts] : [];
69
+ let partIndex = parts.findIndex((part) => part.id === partId);
70
+ const stepIndex = typeof payload?.stepIndex === 'number' ? payload.stepIndex : null;
71
+ if (partIndex === -1) {
72
+ const newPart = {
73
+ id: partId,
74
+ messageId,
75
+ index: parts.length,
76
+ stepIndex,
77
+ type: 'text',
78
+ content: JSON.stringify({ text: delta }),
79
+ contentJson: { text: delta },
80
+ agent: targetMessage.agent,
81
+ provider: targetMessage.provider,
82
+ model: targetMessage.model,
83
+ startedAt: Date.now(),
84
+ completedAt: null,
85
+ toolName: null,
86
+ toolCallId: null,
87
+ toolDurationMs: null,
88
+ };
89
+ parts.push(newPart);
90
+ partIndex = parts.length - 1;
91
+ }
92
+ else {
93
+ const existing = parts[partIndex];
94
+ const previous = extractText(existing);
95
+ const nextText = `${previous}${delta}`;
96
+ parts[partIndex] = {
97
+ ...existing,
98
+ content: JSON.stringify({ text: nextText }),
99
+ contentJson: { text: nextText },
100
+ stepIndex: stepIndex ?? existing.stepIndex ?? null,
101
+ completedAt: null,
102
+ };
103
+ }
104
+ nextMessages[messageIndex] = { ...targetMessage, parts };
105
+ return nextMessages;
106
+ });
107
+ };
108
+ const upsertEphemeralToolCall = (payload) => {
109
+ if (!payload)
110
+ return;
111
+ const callId = typeof payload.callId === 'string' ? payload.callId : null;
112
+ const name = typeof payload.name === 'string' ? payload.name : null;
113
+ if (!name)
114
+ return;
115
+ queryClient.setQueryData(['messages', sessionId], (oldMessages) => {
116
+ if (!oldMessages)
117
+ return oldMessages;
118
+ const nextMessages = [...oldMessages];
119
+ let targetIndex = resolveAssistantTargetIndex(nextMessages);
120
+ if (typeof payload.messageId === 'string') {
121
+ const explicitIndex = nextMessages.findIndex((message) => message.id === payload.messageId);
122
+ if (explicitIndex !== -1)
123
+ targetIndex = explicitIndex;
124
+ }
125
+ if (targetIndex === -1)
126
+ return oldMessages;
127
+ const targetMessage = nextMessages[targetIndex];
128
+ const parts = targetMessage.parts ? [...targetMessage.parts] : [];
129
+ let partIndex = -1;
130
+ if (callId) {
131
+ partIndex = parts.findIndex((part) => part.toolCallId === callId && part.ephemeral);
132
+ }
133
+ if (partIndex === -1) {
134
+ partIndex = parts.findIndex((part) => part.ephemeral && part.toolName === name);
135
+ }
136
+ const args = payload.args;
137
+ const stepIndex = typeof payload.stepIndex === 'number' ? payload.stepIndex : null;
138
+ const contentJsonBase = { name };
139
+ if (callId)
140
+ contentJsonBase.callId = callId;
141
+ if (args !== undefined)
142
+ contentJsonBase.args = args;
143
+ if (partIndex === -1) {
144
+ const newPart = {
145
+ id: callId
146
+ ? `ephemeral-tool-call-${callId}`
147
+ : `ephemeral-tool-call-${name}-${Date.now()}`,
148
+ messageId: targetMessage.id,
149
+ index: parts.length,
150
+ stepIndex,
151
+ type: 'tool_call',
152
+ content: JSON.stringify(contentJsonBase),
153
+ contentJson: contentJsonBase,
154
+ agent: targetMessage.agent,
155
+ provider: targetMessage.provider,
156
+ model: targetMessage.model,
157
+ startedAt: Date.now(),
158
+ completedAt: null,
159
+ toolName: name,
160
+ toolCallId: callId,
161
+ toolDurationMs: null,
162
+ ephemeral: true,
163
+ };
164
+ parts.push(newPart);
165
+ }
166
+ else {
167
+ const existing = parts[partIndex];
168
+ const nextContentJson = {
169
+ ...(typeof existing.contentJson === 'object' &&
170
+ !Array.isArray(existing.contentJson)
171
+ ? existing.contentJson
172
+ : {}),
173
+ name,
174
+ };
175
+ if (callId)
176
+ nextContentJson.callId = callId;
177
+ if (args !== undefined)
178
+ nextContentJson.args = args;
179
+ parts[partIndex] = {
180
+ ...existing,
181
+ content: JSON.stringify(nextContentJson),
182
+ contentJson: nextContentJson,
183
+ stepIndex: stepIndex ?? existing.stepIndex ?? null,
184
+ toolCallId: callId ?? existing.toolCallId,
185
+ toolName: name,
186
+ };
187
+ }
188
+ nextMessages[targetIndex] = { ...targetMessage, parts };
189
+ return nextMessages;
190
+ });
191
+ };
192
+ const removeEphemeralToolCall = (payload) => {
193
+ const callId = typeof payload?.callId === 'string' ? payload.callId : null;
194
+ if (!callId)
195
+ return;
196
+ queryClient.setQueryData(['messages', sessionId], (oldMessages) => {
197
+ if (!oldMessages)
198
+ return oldMessages;
199
+ let changed = false;
200
+ const nextMessages = oldMessages.map((message) => {
201
+ if (!message.parts?.length)
202
+ return message;
203
+ const filtered = message.parts.filter((part) => !(part.ephemeral && part.toolCallId === callId));
204
+ if (filtered.length === message.parts.length)
205
+ return message;
206
+ changed = true;
207
+ return { ...message, parts: filtered };
208
+ });
209
+ return changed ? nextMessages : oldMessages;
210
+ });
211
+ };
212
+ const clearEphemeralForMessage = (messageId) => {
213
+ if (!messageId)
214
+ return;
215
+ queryClient.setQueryData(['messages', sessionId], (oldMessages) => {
216
+ if (!oldMessages)
217
+ return oldMessages;
218
+ const targetIndex = oldMessages.findIndex((message) => message.id === messageId);
219
+ if (targetIndex === -1)
220
+ return oldMessages;
221
+ const target = oldMessages[targetIndex];
222
+ if (!target.parts?.some((part) => part.ephemeral))
223
+ return oldMessages;
224
+ const nextMessages = [...oldMessages];
225
+ nextMessages[targetIndex] = {
226
+ ...target,
227
+ parts: target.parts?.filter((part) => !part.ephemeral) ?? [],
228
+ };
229
+ return nextMessages;
230
+ });
231
+ };
232
+ const markMessageCompleted = (payload) => {
233
+ const id = typeof payload?.id === 'string' ? payload.id : null;
234
+ if (!id)
235
+ return;
236
+ queryClient.setQueryData(['messages', sessionId], (oldMessages) => {
237
+ if (!oldMessages)
238
+ return oldMessages;
239
+ const nextMessages = [...oldMessages];
240
+ const messageIndex = nextMessages.findIndex((message) => message.id === id);
241
+ if (messageIndex === -1)
242
+ return oldMessages;
243
+ const existing = nextMessages[messageIndex];
244
+ nextMessages[messageIndex] = {
245
+ ...existing,
246
+ status: 'complete',
247
+ completedAt: Date.now(),
248
+ };
249
+ return nextMessages;
250
+ });
251
+ };
252
+ // Throttle invalidations to prevent excessive re-renders
253
+ // Only invalidate at most once every 500ms during streaming
254
+ const throttledInvalidate = () => {
255
+ const now = Date.now();
256
+ if (now - lastInvalidationRef.current < 500) {
257
+ return; // Skip if we invalidated less than 500ms ago
258
+ }
259
+ lastInvalidationRef.current = now;
260
+ console.log('[useSessionStream] Invalidating messages query (throttled)');
261
+ queryClient.invalidateQueries({ queryKey: ['messages', sessionId] });
262
+ };
263
+ const invalidatingEvents = new Set([
264
+ 'message.completed',
265
+ 'tool.result',
266
+ 'finish-step',
267
+ 'error', // Add error to invalidate and reload from DB
268
+ ]);
269
+ const unsubscribe = client.on('*', (event) => {
270
+ console.log('[useSessionStream] Event received:', event);
271
+ const payload = event.payload;
272
+ switch (event.type) {
273
+ case 'message.created': {
274
+ const role = typeof payload?.role === 'string' ? payload.role : null;
275
+ const id = typeof payload?.id === 'string' ? payload.id : null;
276
+ if (role === 'assistant' && id) {
277
+ assistantMessageIdRef.current = id;
278
+ }
279
+ break;
280
+ }
281
+ case 'message.part.delta': {
282
+ applyMessageDelta(payload);
283
+ break;
284
+ }
285
+ case 'message.completed': {
286
+ const id = typeof payload?.id === 'string' ? payload.id : null;
287
+ if (id && assistantMessageIdRef.current === id) {
288
+ assistantMessageIdRef.current = null;
289
+ }
290
+ markMessageCompleted(payload);
291
+ clearEphemeralForMessage(id);
292
+ break;
293
+ }
294
+ case 'tool.delta': {
295
+ const channel = typeof payload?.channel === 'string' ? payload.channel : null;
296
+ if (channel === 'input') {
297
+ upsertEphemeralToolCall(payload);
298
+ }
299
+ break;
300
+ }
301
+ case 'tool.call': {
302
+ upsertEphemeralToolCall(payload);
303
+ break;
304
+ }
305
+ case 'tool.result': {
306
+ removeEphemeralToolCall(payload);
307
+ break;
308
+ }
309
+ case 'error': {
310
+ removeEphemeralToolCall(payload);
311
+ const messageId = typeof payload?.messageId === 'string' ? payload.messageId : null;
312
+ if (messageId) {
313
+ clearEphemeralForMessage(messageId);
314
+ }
315
+ // Error parts are created by the server and will be loaded via query invalidation
316
+ break;
317
+ }
318
+ default:
319
+ break;
320
+ }
321
+ if (invalidatingEvents.has(event.type)) {
322
+ // Use throttled invalidation instead of immediate
323
+ throttledInvalidate();
324
+ }
325
+ });
326
+ return () => {
327
+ unsubscribe();
328
+ client.disconnect();
329
+ };
330
+ }, [sessionId, queryClient]);
331
+ }
332
+ //# sourceMappingURL=useSessionStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionStream.js","sourceRoot":"","sources":["../../src/hooks/useSessionStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CreateSessionRequest } from '../types/api';
2
+ export declare function useSessions(): import("@tanstack/react-query").UseQueryResult<import("..").Session[], Error>;
3
+ export declare function useCreateSession(): import("@tanstack/react-query").UseMutationResult<import("..").Session, Error, CreateSessionRequest, unknown>;
4
+ //# sourceMappingURL=useSessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessions.d.ts","sourceRoot":"","sources":["../../src/hooks/useSessions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,wBAAgB,WAAW,kFAM1B;AAED,wBAAgB,gBAAgB,kHAS/B"}
@@ -0,0 +1,19 @@
1
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import { apiClient } from '../lib/api-client';
3
+ export function useSessions() {
4
+ return useQuery({
5
+ queryKey: ['sessions'],
6
+ queryFn: () => apiClient.getSessions(),
7
+ refetchInterval: 5000,
8
+ });
9
+ }
10
+ export function useCreateSession() {
11
+ const queryClient = useQueryClient();
12
+ return useMutation({
13
+ mutationFn: (data) => apiClient.createSession(data),
14
+ onSuccess: () => {
15
+ queryClient.invalidateQueries({ queryKey: ['sessions'] });
16
+ },
17
+ });
18
+ }
19
+ //# sourceMappingURL=useSessions.js.map