@townco/ui 0.1.8 → 0.1.9

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 (217) hide show
  1. package/dist/core/hooks/index.d.ts.map +1 -0
  2. package/dist/core/hooks/index.js.map +1 -0
  3. package/dist/core/hooks/use-chat-input.d.ts +17 -17
  4. package/dist/core/hooks/use-chat-input.d.ts.map +1 -0
  5. package/dist/core/hooks/use-chat-input.js +64 -55
  6. package/dist/core/hooks/use-chat-input.js.map +1 -0
  7. package/dist/core/hooks/use-chat-messages.d.ts +11 -11
  8. package/dist/core/hooks/use-chat-messages.d.ts.map +1 -0
  9. package/dist/core/hooks/use-chat-messages.js +121 -114
  10. package/dist/core/hooks/use-chat-messages.js.map +1 -0
  11. package/dist/core/hooks/use-chat-session.d.ts +5 -5
  12. package/dist/core/hooks/use-chat-session.d.ts.map +1 -0
  13. package/dist/core/hooks/use-chat-session.js +78 -80
  14. package/dist/core/hooks/use-chat-session.js.map +1 -0
  15. package/dist/core/index.d.ts.map +1 -0
  16. package/dist/core/index.js.map +1 -0
  17. package/dist/core/schemas/chat.d.ts +83 -56
  18. package/dist/core/schemas/chat.d.ts.map +1 -0
  19. package/dist/core/schemas/chat.js +27 -25
  20. package/dist/core/schemas/chat.js.map +1 -0
  21. package/dist/core/schemas/index.d.ts.map +1 -0
  22. package/dist/core/schemas/index.js.map +1 -0
  23. package/dist/core/store/chat-store.d.ts +28 -22
  24. package/dist/core/store/chat-store.d.ts.map +1 -0
  25. package/dist/core/store/chat-store.js +59 -50
  26. package/dist/core/store/chat-store.js.map +1 -0
  27. package/dist/gui/components/Button.d.ts +23 -7
  28. package/dist/gui/components/Button.d.ts.map +1 -0
  29. package/dist/gui/components/Button.js +40 -27
  30. package/dist/gui/components/Button.js.map +1 -0
  31. package/dist/gui/components/Card.d.ts +26 -7
  32. package/dist/gui/components/Card.d.ts.map +1 -0
  33. package/dist/gui/components/Card.js +54 -8
  34. package/dist/gui/components/Card.js.map +1 -0
  35. package/dist/gui/components/ChatInput.d.ts.map +1 -0
  36. package/dist/gui/components/ChatInput.js.map +1 -0
  37. package/dist/gui/components/ChatInterface.d.ts +12 -0
  38. package/dist/gui/components/ChatInterface.d.ts.map +1 -0
  39. package/dist/gui/components/ChatInterface.js +204 -0
  40. package/dist/gui/components/ChatInterface.js.map +1 -0
  41. package/dist/gui/components/ChatPreview.d.ts +12 -0
  42. package/dist/gui/components/ChatPreview.d.ts.map +1 -0
  43. package/dist/gui/components/ChatPreview.js +214 -0
  44. package/dist/gui/components/ChatPreview.js.map +1 -0
  45. package/dist/gui/components/ChatSecondaryPanel.d.ts +14 -11
  46. package/dist/gui/components/ChatSecondaryPanel.d.ts.map +1 -0
  47. package/dist/gui/components/ChatSecondaryPanel.js +115 -38
  48. package/dist/gui/components/ChatSecondaryPanel.js.map +1 -0
  49. package/dist/gui/components/ChatStatus.d.ts +4 -2
  50. package/dist/gui/components/ChatStatus.d.ts.map +1 -0
  51. package/dist/gui/components/ChatStatus.js +45 -34
  52. package/dist/gui/components/ChatStatus.js.map +1 -0
  53. package/dist/gui/components/ChatView.d.ts +8 -0
  54. package/dist/gui/components/ChatView.d.ts.map +1 -0
  55. package/dist/gui/components/ChatView.js +42 -0
  56. package/dist/gui/components/ChatView.js.map +1 -0
  57. package/dist/gui/components/ConfigPanel.d.ts +20 -0
  58. package/dist/gui/components/ConfigPanel.d.ts.map +1 -0
  59. package/dist/gui/components/ConfigPanel.js +225 -0
  60. package/dist/gui/components/ConfigPanel.js.map +1 -0
  61. package/dist/gui/components/Conversation.d.ts +17 -14
  62. package/dist/gui/components/Conversation.d.ts.map +1 -0
  63. package/dist/gui/components/Conversation.js +143 -83
  64. package/dist/gui/components/Conversation.js.map +1 -0
  65. package/dist/gui/components/Dialog.d.ts +57 -11
  66. package/dist/gui/components/Dialog.d.ts.map +1 -0
  67. package/dist/gui/components/Dialog.js +84 -8
  68. package/dist/gui/components/Dialog.js.map +1 -0
  69. package/dist/gui/components/HeightTransition.d.ts +12 -7
  70. package/dist/gui/components/HeightTransition.d.ts.map +1 -0
  71. package/dist/gui/components/HeightTransition.js +88 -77
  72. package/dist/gui/components/HeightTransition.js.map +1 -0
  73. package/dist/gui/components/Input.d.ts +13 -6
  74. package/dist/gui/components/Input.d.ts.map +1 -0
  75. package/dist/gui/components/Input.js +27 -16
  76. package/dist/gui/components/Input.js.map +1 -0
  77. package/dist/gui/components/InputBox.d.ts +21 -0
  78. package/dist/gui/components/InputBox.d.ts.map +1 -0
  79. package/dist/gui/components/InputBox.js +90 -0
  80. package/dist/gui/components/InputBox.js.map +1 -0
  81. package/dist/gui/components/Label.d.ts +7 -1
  82. package/dist/gui/components/Label.d.ts.map +1 -0
  83. package/dist/gui/components/Label.js +12 -2
  84. package/dist/gui/components/Label.js.map +1 -0
  85. package/dist/gui/components/MarkdownRenderer.d.ts +6 -4
  86. package/dist/gui/components/MarkdownRenderer.d.ts.map +1 -0
  87. package/dist/gui/components/MarkdownRenderer.js +178 -81
  88. package/dist/gui/components/MarkdownRenderer.js.map +1 -0
  89. package/dist/gui/components/Message.d.ts.map +1 -0
  90. package/dist/gui/components/Message.js.map +1 -0
  91. package/dist/gui/components/MessageContent.d.ts +29 -22
  92. package/dist/gui/components/MessageContent.d.ts.map +1 -0
  93. package/dist/gui/components/MessageContent.js.map +1 -0
  94. package/dist/gui/components/MessageList.d.ts.map +1 -0
  95. package/dist/gui/components/MessageList.js.map +1 -0
  96. package/dist/gui/components/PlaygroundLayout.d.ts +14 -0
  97. package/dist/gui/components/PlaygroundLayout.d.ts.map +1 -0
  98. package/dist/gui/components/PlaygroundLayout.js +49 -0
  99. package/dist/gui/components/PlaygroundLayout.js.map +1 -0
  100. package/dist/gui/components/Reasoning.d.ts +30 -24
  101. package/dist/gui/components/Reasoning.d.ts.map +1 -0
  102. package/dist/gui/components/Reasoning.js +187 -60
  103. package/dist/gui/components/Reasoning.js.map +1 -0
  104. package/dist/gui/components/Response.d.ts +11 -9
  105. package/dist/gui/components/Response.d.ts.map +1 -0
  106. package/dist/gui/components/Response.js +229 -90
  107. package/dist/gui/components/Response.js.map +1 -0
  108. package/dist/gui/components/Select.d.ts +69 -10
  109. package/dist/gui/components/Select.d.ts.map +1 -0
  110. package/dist/gui/components/Select.js +118 -12
  111. package/dist/gui/components/Select.js.map +1 -0
  112. package/dist/gui/components/StatusBar.d.ts +12 -0
  113. package/dist/gui/components/StatusBar.d.ts.map +1 -0
  114. package/dist/gui/components/StatusBar.js +58 -0
  115. package/dist/gui/components/StatusBar.js.map +1 -0
  116. package/dist/gui/components/Tabs.d.ts +24 -4
  117. package/dist/gui/components/Tabs.d.ts.map +1 -0
  118. package/dist/gui/components/Tabs.js +32 -4
  119. package/dist/gui/components/Tabs.js.map +1 -0
  120. package/dist/gui/components/Task.d.ts +28 -24
  121. package/dist/gui/components/Task.d.ts.map +1 -0
  122. package/dist/gui/components/Task.js +164 -31
  123. package/dist/gui/components/Task.js.map +1 -0
  124. package/dist/gui/components/Textarea.d.ts +15 -7
  125. package/dist/gui/components/Textarea.d.ts.map +1 -0
  126. package/dist/gui/components/Textarea.js +63 -46
  127. package/dist/gui/components/Textarea.js.map +1 -0
  128. package/dist/gui/components/ThinkingBlock.d.ts +20 -10
  129. package/dist/gui/components/ThinkingBlock.d.ts.map +1 -0
  130. package/dist/gui/components/ThinkingBlock.js +134 -35
  131. package/dist/gui/components/ThinkingBlock.js.map +1 -0
  132. package/dist/gui/components/TodoList.d.ts +12 -10
  133. package/dist/gui/components/TodoList.d.ts.map +1 -0
  134. package/dist/gui/components/TodoList.js +22 -7
  135. package/dist/gui/components/TodoList.js.map +1 -0
  136. package/dist/gui/components/TodoListItem.d.ts +9 -6
  137. package/dist/gui/components/TodoListItem.d.ts.map +1 -0
  138. package/dist/gui/components/TodoListItem.js +18 -4
  139. package/dist/gui/components/TodoListItem.js.map +1 -0
  140. package/dist/gui/components/index.d.ts.map +1 -0
  141. package/dist/gui/components/index.js.map +1 -0
  142. package/dist/gui/index.d.ts.map +1 -0
  143. package/dist/gui/index.js.map +1 -0
  144. package/dist/gui/lib/utils.d.ts.map +1 -0
  145. package/dist/gui/lib/utils.js +1 -1
  146. package/dist/gui/lib/utils.js.map +1 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/index.test.js +0 -1
  150. package/dist/sdk/client/acp-client.d.ts +88 -76
  151. package/dist/sdk/client/acp-client.d.ts.map +1 -0
  152. package/dist/sdk/client/acp-client.js +215 -217
  153. package/dist/sdk/client/acp-client.js.map +1 -0
  154. package/dist/sdk/client/index.d.ts.map +1 -0
  155. package/dist/sdk/client/index.js.map +1 -0
  156. package/dist/sdk/index.d.ts.map +1 -0
  157. package/dist/sdk/index.js.map +1 -0
  158. package/dist/sdk/schemas/agent.d.ts +111 -64
  159. package/dist/sdk/schemas/agent.d.ts.map +1 -0
  160. package/dist/sdk/schemas/agent.js +24 -24
  161. package/dist/sdk/schemas/agent.js.map +1 -0
  162. package/dist/sdk/schemas/index.d.ts.map +1 -0
  163. package/dist/sdk/schemas/index.js.map +1 -0
  164. package/dist/sdk/schemas/message.d.ts +245 -147
  165. package/dist/sdk/schemas/message.d.ts.map +1 -0
  166. package/dist/sdk/schemas/message.js +40 -40
  167. package/dist/sdk/schemas/message.js.map +1 -0
  168. package/dist/sdk/schemas/session.d.ts +219 -135
  169. package/dist/sdk/schemas/session.d.ts.map +1 -0
  170. package/dist/sdk/schemas/session.js +27 -27
  171. package/dist/sdk/schemas/session.js.map +1 -0
  172. package/dist/sdk/transports/http.d.ts +55 -55
  173. package/dist/sdk/transports/http.d.ts.map +1 -0
  174. package/dist/sdk/transports/http.js +472 -469
  175. package/dist/sdk/transports/http.js.map +1 -0
  176. package/dist/sdk/transports/index.d.ts.map +1 -0
  177. package/dist/sdk/transports/index.js.map +1 -0
  178. package/dist/sdk/transports/stdio.d.ts +20 -20
  179. package/dist/sdk/transports/stdio.d.ts.map +1 -0
  180. package/dist/sdk/transports/stdio.js.map +1 -0
  181. package/dist/sdk/transports/types.d.ts +42 -42
  182. package/dist/sdk/transports/types.d.ts.map +1 -0
  183. package/dist/sdk/transports/types.js.map +1 -0
  184. package/dist/sdk/transports/websocket.d.ts +12 -12
  185. package/dist/sdk/transports/websocket.d.ts.map +1 -0
  186. package/dist/sdk/transports/websocket.js +52 -46
  187. package/dist/sdk/transports/websocket.js.map +1 -0
  188. package/dist/tui/components/ChatView.d.ts +4 -2
  189. package/dist/tui/components/ChatView.d.ts.map +1 -0
  190. package/dist/tui/components/ChatView.js +51 -18
  191. package/dist/tui/components/ChatView.js.map +1 -0
  192. package/dist/tui/components/GameOfLife.d.ts.map +1 -0
  193. package/dist/tui/components/GameOfLife.js +64 -35
  194. package/dist/tui/components/GameOfLife.js.map +1 -0
  195. package/dist/tui/components/InputBox.d.ts +18 -11
  196. package/dist/tui/components/InputBox.d.ts.map +1 -0
  197. package/dist/tui/components/InputBox.js +70 -10
  198. package/dist/tui/components/InputBox.js.map +1 -0
  199. package/dist/tui/components/MessageList.d.ts +4 -2
  200. package/dist/tui/components/MessageList.d.ts.map +1 -0
  201. package/dist/tui/components/MessageList.js +37 -10
  202. package/dist/tui/components/MessageList.js.map +1 -0
  203. package/dist/tui/components/ReadlineInput.d.ts +12 -6
  204. package/dist/tui/components/ReadlineInput.d.ts.map +1 -0
  205. package/dist/tui/components/ReadlineInput.js +252 -237
  206. package/dist/tui/components/ReadlineInput.js.map +1 -0
  207. package/dist/tui/components/SingleSelect.d.ts +15 -9
  208. package/dist/tui/components/SingleSelect.js +84 -43
  209. package/dist/tui/components/StatusBar.d.ts +11 -6
  210. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  211. package/dist/tui/components/StatusBar.js +102 -67
  212. package/dist/tui/components/StatusBar.js.map +1 -0
  213. package/dist/tui/components/index.d.ts.map +1 -0
  214. package/dist/tui/components/index.js.map +1 -0
  215. package/dist/tui/index.d.ts.map +1 -0
  216. package/dist/tui/index.js.map +1 -0
  217. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
@@ -3,21 +3,21 @@ import type { AcpClient } from "../../sdk/client/index.js";
3
3
  * Hook for managing chat input
4
4
  */
5
5
  export declare function useChatInput(client: AcpClient | null): {
6
- value: string;
7
- isSubmitting: boolean;
8
- attachedFiles: {
9
- name: string;
10
- path: string;
11
- size: number;
12
- mimeType: string;
13
- }[];
14
- onChange: (value: string) => void;
15
- onSubmit: () => Promise<void>;
16
- onAttachFile: (file: {
17
- name: string;
18
- path: string;
19
- size: number;
20
- mimeType: string;
21
- }) => void;
22
- onRemoveFile: (index: number) => void;
6
+ value: string;
7
+ isSubmitting: boolean;
8
+ attachedFiles: {
9
+ name: string;
10
+ path: string;
11
+ size: number;
12
+ mimeType: string;
13
+ }[];
14
+ onChange: (value: string) => void;
15
+ onSubmit: () => Promise<void>;
16
+ onAttachFile: (file: {
17
+ name: string;
18
+ path: string;
19
+ size: number;
20
+ mimeType: string;
21
+ }) => void;
22
+ onRemoveFile: (index: number) => void;
23
23
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-input.d.ts","sourceRoot":"","sources":["../../../src/core/hooks/use-chat-input.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI3D;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;;;;;;;;;sBAezC,MAAM;;yBAkCP;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;0BAU7D,MAAM;EAejB"}
@@ -5,59 +5,68 @@ import { useChatMessages } from "./use-chat-messages.js";
5
5
  * Hook for managing chat input
6
6
  */
7
7
  export function useChatInput(client) {
8
- const input = useChatStore((state) => state.input);
9
- const setInputValue = useChatStore((state) => state.setInputValue);
10
- const setInputSubmitting = useChatStore((state) => state.setInputSubmitting);
11
- const addFileAttachment = useChatStore((state) => state.addFileAttachment);
12
- const removeFileAttachment = useChatStore((state) => state.removeFileAttachment);
13
- const { sendMessage } = useChatMessages(client);
14
- /**
15
- * Handle input value change
16
- */
17
- const handleInputChange = useCallback((value) => {
18
- setInputValue(value);
19
- }, [setInputValue]);
20
- /**
21
- * Handle input submission
22
- */
23
- const handleSubmit = useCallback(async () => {
24
- if (!input.value.trim() || input.isSubmitting) {
25
- return;
26
- }
27
- const message = input.value;
28
- // Clear input immediately for better UX
29
- setInputValue("");
30
- setInputSubmitting(true);
31
- try {
32
- await sendMessage(message);
33
- }
34
- catch (error) {
35
- // Error is handled in useChatMessages
36
- console.error("Failed to send message:", error);
37
- }
38
- finally {
39
- setInputSubmitting(false);
40
- }
41
- }, [input, setInputValue, setInputSubmitting, sendMessage]);
42
- /**
43
- * Handle file attachment
44
- */
45
- const handleAttachFile = useCallback((file) => {
46
- addFileAttachment(file);
47
- }, [addFileAttachment]);
48
- /**
49
- * Handle file removal
50
- */
51
- const handleRemoveFile = useCallback((index) => {
52
- removeFileAttachment(index);
53
- }, [removeFileAttachment]);
54
- return {
55
- value: input.value,
56
- isSubmitting: input.isSubmitting,
57
- attachedFiles: input.attachedFiles,
58
- onChange: handleInputChange,
59
- onSubmit: handleSubmit,
60
- onAttachFile: handleAttachFile,
61
- onRemoveFile: handleRemoveFile,
62
- };
8
+ const input = useChatStore((state) => state.input);
9
+ const setInputValue = useChatStore((state) => state.setInputValue);
10
+ const setInputSubmitting = useChatStore((state) => state.setInputSubmitting);
11
+ const addFileAttachment = useChatStore((state) => state.addFileAttachment);
12
+ const removeFileAttachment = useChatStore(
13
+ (state) => state.removeFileAttachment,
14
+ );
15
+ const { sendMessage } = useChatMessages(client);
16
+ /**
17
+ * Handle input value change
18
+ */
19
+ const handleInputChange = useCallback(
20
+ (value) => {
21
+ setInputValue(value);
22
+ },
23
+ [setInputValue],
24
+ );
25
+ /**
26
+ * Handle input submission
27
+ */
28
+ const handleSubmit = useCallback(async () => {
29
+ if (!input.value.trim() || input.isSubmitting) {
30
+ return;
31
+ }
32
+ const message = input.value;
33
+ // Clear input immediately for better UX
34
+ setInputValue("");
35
+ setInputSubmitting(true);
36
+ try {
37
+ await sendMessage(message);
38
+ } catch (error) {
39
+ // Error is handled in useChatMessages
40
+ console.error("Failed to send message:", error);
41
+ } finally {
42
+ setInputSubmitting(false);
43
+ }
44
+ }, [input, setInputValue, setInputSubmitting, sendMessage]);
45
+ /**
46
+ * Handle file attachment
47
+ */
48
+ const handleAttachFile = useCallback(
49
+ (file) => {
50
+ addFileAttachment(file);
51
+ },
52
+ [addFileAttachment],
53
+ );
54
+ /**
55
+ * Handle file removal
56
+ */
57
+ const handleRemoveFile = useCallback(
58
+ (index) => {
59
+ removeFileAttachment(index);
60
+ },
61
+ [removeFileAttachment],
62
+ );
63
+ return {
64
+ value: input.value,
65
+ isSubmitting: input.isSubmitting,
66
+ attachedFiles: input.attachedFiles,
67
+ onChange: handleInputChange,
68
+ onSubmit: handleSubmit,
69
+ onAttachFile: handleAttachFile,
70
+ onRemoveFile: handleRemoveFile,
71
+ };
63
72
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-input.js","sourceRoot":"","sources":["../../../src/core/hooks/use-chat-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAwB;IACnD,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACnE,MAAM,kBAAkB,GAAG,YAAY,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC7E,MAAM,iBAAiB,GAAG,YAAY,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC3E,MAAM,oBAAoB,GAAG,YAAY,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CACtC,CAAC;IAEF,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEhD;;OAEG;IACH,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,KAAa,EAAE,EAAE;QAChB,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF;;OAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;QAE5B,wCAAwC;QACxC,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;gBAAS,CAAC;YACT,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC;IAE5D;;OAEG;IACH,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,IAAoE,EAAE,EAAE;QACvE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEF;;OAEG;IACH,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,KAAa,EAAE,EAAE;QAChB,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,EACD,CAAC,oBAAoB,CAAC,CACvB,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,QAAQ,EAAE,iBAAiB;QAC3B,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,gBAAgB;QAC9B,YAAY,EAAE,gBAAgB;KAC/B,CAAC;AACJ,CAAC"}
@@ -3,15 +3,15 @@ import type { AcpClient } from "../../sdk/client/index.js";
3
3
  * Hook for managing chat messages
4
4
  */
5
5
  export declare function useChatMessages(client: AcpClient | null): {
6
- messages: {
7
- id: string;
8
- role: "user" | "assistant" | "system";
9
- content: string;
10
- timestamp: string;
11
- isStreaming: boolean;
12
- streamingStartTime?: number | undefined;
13
- metadata?: Record<string, unknown> | undefined;
14
- }[];
15
- isStreaming: boolean;
16
- sendMessage: (content: string) => Promise<void>;
6
+ messages: {
7
+ id: string;
8
+ role: "user" | "assistant" | "system";
9
+ content: string;
10
+ timestamp: string;
11
+ isStreaming: boolean;
12
+ streamingStartTime?: number | undefined;
13
+ metadata?: Record<string, unknown> | undefined;
14
+ }[];
15
+ isStreaming: boolean;
16
+ sendMessage: (content: string) => Promise<void>;
17
17
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-messages.d.ts","sourceRoot":"","sources":["../../../src/core/hooks/use-chat-messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI3D;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;;;;;;;;;;;2BAgBpC,MAAM;EAsHzB"}
@@ -4,118 +4,125 @@ import { useChatStore } from "../store/chat-store.js";
4
4
  * Hook for managing chat messages
5
5
  */
6
6
  export function useChatMessages(client) {
7
- const messages = useChatStore((state) => state.messages);
8
- const isStreaming = useChatStore((state) => state.isStreaming);
9
- const sessionId = useChatStore((state) => state.sessionId);
10
- const setIsStreaming = useChatStore((state) => state.setIsStreaming);
11
- const setStreamingStartTime = useChatStore((state) => state.setStreamingStartTime);
12
- const addMessage = useChatStore((state) => state.addMessage);
13
- const updateMessage = useChatStore((state) => state.updateMessage);
14
- const setError = useChatStore((state) => state.setError);
15
- /**
16
- * Send a message to the agent
17
- */
18
- const sendMessage = useCallback(async (content) => {
19
- if (!client) {
20
- console.error("❌ No client available");
21
- setError("No client available");
22
- return;
23
- }
24
- if (!sessionId) {
25
- console.error("❌ No active session");
26
- setError("No active session");
27
- return;
28
- }
29
- try {
30
- // Start streaming and track time immediately
31
- const startTime = Date.now();
32
- setIsStreaming(true);
33
- setStreamingStartTime(startTime);
34
- // Add user message to UI
35
- const userMessage = {
36
- id: `msg_${Date.now()}_user`,
37
- role: "user",
38
- content,
39
- timestamp: new Date().toISOString(),
40
- isStreaming: false,
41
- };
42
- addMessage(userMessage);
43
- // Create placeholder for assistant message BEFORE sending
44
- const assistantMessageId = `msg_${Date.now()}_assistant`;
45
- const assistantMessage = {
46
- id: assistantMessageId,
47
- role: "assistant",
48
- content: "",
49
- timestamp: new Date().toISOString(),
50
- isStreaming: true,
51
- streamingStartTime: startTime, // Use the same start time from when user sent message
52
- };
53
- addMessage(assistantMessage);
54
- // Build full conversation history (excluding system messages)
55
- const conversationHistory = messages
56
- .filter((msg) => msg.role !== "system")
57
- .map((msg) => `${msg.role === "user" ? "Human" : "Assistant"}: ${msg.content}`)
58
- .join("\n\n");
59
- // Combine history with new message
60
- const fullPrompt = conversationHistory
61
- ? `${conversationHistory}\n\nHuman: ${content}`
62
- : content;
63
- // Start receiving chunks (async iterator)
64
- const messageStream = client.receiveMessages();
65
- // Send full conversation without awaiting (fire and forget)
66
- // This allows chunks to start arriving while we're listening
67
- client.sendMessage(fullPrompt, sessionId).catch((error) => {
68
- const message = error instanceof Error ? error.message : String(error);
69
- setError(message);
70
- setIsStreaming(false);
71
- setStreamingStartTime(null);
72
- });
73
- // Listen for streaming chunks
74
- let accumulatedContent = "";
75
- for await (const chunk of messageStream) {
76
- if (chunk.isComplete) {
77
- // Update final message
78
- updateMessage(assistantMessageId, {
79
- content: accumulatedContent,
80
- isStreaming: false,
81
- streamingStartTime: undefined, // Clear streaming start time
82
- });
83
- setIsStreaming(false);
84
- setStreamingStartTime(null); // Clear global streaming start time
85
- break;
86
- }
87
- else {
88
- // Update streaming content
89
- if (chunk.contentDelta.type === "text") {
90
- accumulatedContent += chunk.contentDelta.text;
91
- updateMessage(assistantMessageId, {
92
- content: accumulatedContent,
93
- });
94
- // Small delay to allow Ink to render between chunks (~60fps)
95
- await new Promise((resolve) => setTimeout(resolve, 16));
96
- }
97
- }
98
- }
99
- }
100
- catch (error) {
101
- const message = error instanceof Error ? error.message : String(error);
102
- setError(message);
103
- setIsStreaming(false);
104
- setStreamingStartTime(null); // Clear streaming start time on error
105
- }
106
- }, [
107
- client,
108
- sessionId,
109
- messages,
110
- addMessage,
111
- updateMessage,
112
- setIsStreaming,
113
- setStreamingStartTime,
114
- setError,
115
- ]);
116
- return {
117
- messages,
118
- isStreaming,
119
- sendMessage,
120
- };
7
+ const messages = useChatStore((state) => state.messages);
8
+ const isStreaming = useChatStore((state) => state.isStreaming);
9
+ const sessionId = useChatStore((state) => state.sessionId);
10
+ const setIsStreaming = useChatStore((state) => state.setIsStreaming);
11
+ const setStreamingStartTime = useChatStore(
12
+ (state) => state.setStreamingStartTime,
13
+ );
14
+ const addMessage = useChatStore((state) => state.addMessage);
15
+ const updateMessage = useChatStore((state) => state.updateMessage);
16
+ const setError = useChatStore((state) => state.setError);
17
+ /**
18
+ * Send a message to the agent
19
+ */
20
+ const sendMessage = useCallback(
21
+ async (content) => {
22
+ if (!client) {
23
+ console.error("❌ No client available");
24
+ setError("No client available");
25
+ return;
26
+ }
27
+ if (!sessionId) {
28
+ console.error("❌ No active session");
29
+ setError("No active session");
30
+ return;
31
+ }
32
+ try {
33
+ // Start streaming and track time immediately
34
+ const startTime = Date.now();
35
+ setIsStreaming(true);
36
+ setStreamingStartTime(startTime);
37
+ // Add user message to UI
38
+ const userMessage = {
39
+ id: `msg_${Date.now()}_user`,
40
+ role: "user",
41
+ content,
42
+ timestamp: new Date().toISOString(),
43
+ isStreaming: false,
44
+ };
45
+ addMessage(userMessage);
46
+ // Create placeholder for assistant message BEFORE sending
47
+ const assistantMessageId = `msg_${Date.now()}_assistant`;
48
+ const assistantMessage = {
49
+ id: assistantMessageId,
50
+ role: "assistant",
51
+ content: "",
52
+ timestamp: new Date().toISOString(),
53
+ isStreaming: true,
54
+ streamingStartTime: startTime, // Use the same start time from when user sent message
55
+ };
56
+ addMessage(assistantMessage);
57
+ // Build full conversation history (excluding system messages)
58
+ const conversationHistory = messages
59
+ .filter((msg) => msg.role !== "system")
60
+ .map(
61
+ (msg) =>
62
+ `${msg.role === "user" ? "Human" : "Assistant"}: ${msg.content}`,
63
+ )
64
+ .join("\n\n");
65
+ // Combine history with new message
66
+ const fullPrompt = conversationHistory
67
+ ? `${conversationHistory}\n\nHuman: ${content}`
68
+ : content;
69
+ // Start receiving chunks (async iterator)
70
+ const messageStream = client.receiveMessages();
71
+ // Send full conversation without awaiting (fire and forget)
72
+ // This allows chunks to start arriving while we're listening
73
+ client.sendMessage(fullPrompt, sessionId).catch((error) => {
74
+ const message =
75
+ error instanceof Error ? error.message : String(error);
76
+ setError(message);
77
+ setIsStreaming(false);
78
+ setStreamingStartTime(null);
79
+ });
80
+ // Listen for streaming chunks
81
+ let accumulatedContent = "";
82
+ for await (const chunk of messageStream) {
83
+ if (chunk.isComplete) {
84
+ // Update final message
85
+ updateMessage(assistantMessageId, {
86
+ content: accumulatedContent,
87
+ isStreaming: false,
88
+ streamingStartTime: undefined, // Clear streaming start time
89
+ });
90
+ setIsStreaming(false);
91
+ setStreamingStartTime(null); // Clear global streaming start time
92
+ break;
93
+ } else {
94
+ // Update streaming content
95
+ if (chunk.contentDelta.type === "text") {
96
+ accumulatedContent += chunk.contentDelta.text;
97
+ updateMessage(assistantMessageId, {
98
+ content: accumulatedContent,
99
+ });
100
+ // Small delay to allow Ink to render between chunks (~60fps)
101
+ await new Promise((resolve) => setTimeout(resolve, 16));
102
+ }
103
+ }
104
+ }
105
+ } catch (error) {
106
+ const message = error instanceof Error ? error.message : String(error);
107
+ setError(message);
108
+ setIsStreaming(false);
109
+ setStreamingStartTime(null); // Clear streaming start time on error
110
+ }
111
+ },
112
+ [
113
+ client,
114
+ sessionId,
115
+ messages,
116
+ addMessage,
117
+ updateMessage,
118
+ setIsStreaming,
119
+ setStreamingStartTime,
120
+ setError,
121
+ ],
122
+ );
123
+ return {
124
+ messages,
125
+ isStreaming,
126
+ sendMessage,
127
+ };
121
128
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-messages.js","sourceRoot":"","sources":["../../../src/core/hooks/use-chat-messages.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,9 @@ import type { AcpClient } from "../../sdk/client/index.js";
3
3
  * Hook for managing chat session lifecycle
4
4
  */
5
5
  export declare function useChatSession(client: AcpClient | null): {
6
- connectionStatus: "error" | "connecting" | "connected" | "disconnected";
7
- sessionId: string | null;
8
- connect: () => Promise<void>;
9
- startSession: () => Promise<void>;
10
- disconnect: () => Promise<void>;
6
+ connectionStatus: "error" | "connecting" | "connected" | "disconnected";
7
+ sessionId: string | null;
8
+ connect: () => Promise<void>;
9
+ startSession: () => Promise<void>;
10
+ disconnect: () => Promise<void>;
11
11
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-session.d.ts","sourceRoot":"","sources":["../../../src/core/hooks/use-chat-session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAG3D;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;;;;;;EAuFtD"}