@townco/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/README.md +175 -0
  2. package/dist/core/hooks/index.d.ts +6 -0
  3. package/dist/core/hooks/index.d.ts.map +1 -0
  4. package/dist/core/hooks/index.js +6 -0
  5. package/dist/core/hooks/index.js.map +1 -0
  6. package/dist/core/hooks/use-chat-input.d.ts +23 -0
  7. package/dist/core/hooks/use-chat-input.d.ts.map +1 -0
  8. package/dist/core/hooks/use-chat-input.js +63 -0
  9. package/dist/core/hooks/use-chat-input.js.map +1 -0
  10. package/dist/core/hooks/use-chat-messages.d.ts +17 -0
  11. package/dist/core/hooks/use-chat-messages.d.ts.map +1 -0
  12. package/dist/core/hooks/use-chat-messages.js +121 -0
  13. package/dist/core/hooks/use-chat-messages.js.map +1 -0
  14. package/dist/core/hooks/use-chat-session.d.ts +11 -0
  15. package/dist/core/hooks/use-chat-session.d.ts.map +1 -0
  16. package/dist/core/hooks/use-chat-session.js +87 -0
  17. package/dist/core/hooks/use-chat-session.js.map +1 -0
  18. package/dist/core/hooks/use-media-query.d.ts +39 -0
  19. package/dist/core/hooks/use-media-query.js +80 -0
  20. package/dist/core/index.d.ts +9 -0
  21. package/dist/core/index.d.ts.map +1 -0
  22. package/dist/core/index.js +9 -0
  23. package/dist/core/index.js.map +1 -0
  24. package/dist/core/schemas/chat.d.ts +78 -0
  25. package/dist/core/schemas/chat.d.ts.map +1 -0
  26. package/dist/core/schemas/chat.js +49 -0
  27. package/dist/core/schemas/chat.js.map +1 -0
  28. package/dist/core/schemas/index.d.ts +4 -0
  29. package/dist/core/schemas/index.d.ts.map +1 -0
  30. package/dist/core/schemas/index.js +4 -0
  31. package/dist/core/schemas/index.js.map +1 -0
  32. package/dist/core/store/chat-store.d.ts +30 -0
  33. package/dist/core/store/chat-store.d.ts.map +1 -0
  34. package/dist/core/store/chat-store.js +56 -0
  35. package/dist/core/store/chat-store.js.map +1 -0
  36. package/dist/gui/components/Button.d.ts +11 -0
  37. package/dist/gui/components/Button.d.ts.map +1 -0
  38. package/dist/gui/components/Button.js +33 -0
  39. package/dist/gui/components/Button.js.map +1 -0
  40. package/dist/gui/components/Card.d.ts +8 -0
  41. package/dist/gui/components/Card.d.ts.map +1 -0
  42. package/dist/gui/components/Card.js +16 -0
  43. package/dist/gui/components/Card.js.map +1 -0
  44. package/dist/gui/components/ChatHeader.d.ts +38 -0
  45. package/dist/gui/components/ChatHeader.js +84 -0
  46. package/dist/gui/components/ChatInput.d.ts +42 -0
  47. package/dist/gui/components/ChatInput.d.ts.map +1 -0
  48. package/dist/gui/components/ChatInput.js +137 -0
  49. package/dist/gui/components/ChatInput.js.map +1 -0
  50. package/dist/gui/components/ChatInterface.d.ts +9 -0
  51. package/dist/gui/components/ChatInterface.d.ts.map +1 -0
  52. package/dist/gui/components/ChatInterface.js +132 -0
  53. package/dist/gui/components/ChatInterface.js.map +1 -0
  54. package/dist/gui/components/ChatLayout.d.ts +52 -0
  55. package/dist/gui/components/ChatLayout.js +105 -0
  56. package/dist/gui/components/ChatPanelTabContent.d.ts +18 -0
  57. package/dist/gui/components/ChatPanelTabContent.js +15 -0
  58. package/dist/gui/components/ChatPreview.d.ts +9 -0
  59. package/dist/gui/components/ChatPreview.d.ts.map +1 -0
  60. package/dist/gui/components/ChatPreview.js +164 -0
  61. package/dist/gui/components/ChatPreview.js.map +1 -0
  62. package/dist/gui/components/ChatSecondaryPanel.d.ts +20 -0
  63. package/dist/gui/components/ChatSecondaryPanel.d.ts.map +1 -0
  64. package/dist/gui/components/ChatSecondaryPanel.js +44 -0
  65. package/dist/gui/components/ChatSecondaryPanel.js.map +1 -0
  66. package/dist/gui/components/ChatSidebar.d.ts +14 -0
  67. package/dist/gui/components/ChatSidebar.js +23 -0
  68. package/dist/gui/components/ChatStatus.d.ts +6 -0
  69. package/dist/gui/components/ChatStatus.d.ts.map +1 -0
  70. package/dist/gui/components/ChatStatus.js +38 -0
  71. package/dist/gui/components/ChatStatus.js.map +1 -0
  72. package/dist/gui/components/ChatView.d.ts +6 -0
  73. package/dist/gui/components/ChatView.d.ts.map +1 -0
  74. package/dist/gui/components/ChatView.js +13 -0
  75. package/dist/gui/components/ChatView.js.map +1 -0
  76. package/dist/gui/components/ConfigPanel.d.ts +16 -0
  77. package/dist/gui/components/ConfigPanel.d.ts.map +1 -0
  78. package/dist/gui/components/ConfigPanel.js +48 -0
  79. package/dist/gui/components/ConfigPanel.js.map +1 -0
  80. package/dist/gui/components/Conversation.d.ts +20 -0
  81. package/dist/gui/components/Conversation.d.ts.map +1 -0
  82. package/dist/gui/components/Conversation.js +87 -0
  83. package/dist/gui/components/Conversation.js.map +1 -0
  84. package/dist/gui/components/Dialog.d.ts +19 -0
  85. package/dist/gui/components/Dialog.d.ts.map +1 -0
  86. package/dist/gui/components/Dialog.js +22 -0
  87. package/dist/gui/components/Dialog.js.map +1 -0
  88. package/dist/gui/components/DropdownMenu.d.ts +27 -0
  89. package/dist/gui/components/DropdownMenu.js +68 -0
  90. package/dist/gui/components/HeightTransition.d.ts +10 -0
  91. package/dist/gui/components/HeightTransition.d.ts.map +1 -0
  92. package/dist/gui/components/HeightTransition.js +80 -0
  93. package/dist/gui/components/HeightTransition.js.map +1 -0
  94. package/dist/gui/components/Input.d.ts +9 -0
  95. package/dist/gui/components/Input.d.ts.map +1 -0
  96. package/dist/gui/components/Input.js +21 -0
  97. package/dist/gui/components/Input.js.map +1 -0
  98. package/dist/gui/components/InputBox.d.ts +14 -0
  99. package/dist/gui/components/InputBox.d.ts.map +1 -0
  100. package/dist/gui/components/InputBox.js +18 -0
  101. package/dist/gui/components/InputBox.js.map +1 -0
  102. package/dist/gui/components/Label.d.ts +4 -0
  103. package/dist/gui/components/Label.d.ts.map +1 -0
  104. package/dist/gui/components/Label.js +7 -0
  105. package/dist/gui/components/Label.js.map +1 -0
  106. package/dist/gui/components/MarkdownRenderer.d.ts +6 -0
  107. package/dist/gui/components/MarkdownRenderer.d.ts.map +1 -0
  108. package/dist/gui/components/MarkdownRenderer.js +86 -0
  109. package/dist/gui/components/MarkdownRenderer.js.map +1 -0
  110. package/dist/gui/components/Message.d.ts +26 -0
  111. package/dist/gui/components/Message.d.ts.map +1 -0
  112. package/dist/gui/components/Message.js +33 -0
  113. package/dist/gui/components/Message.js.map +1 -0
  114. package/dist/gui/components/MessageContent.d.ts +26 -0
  115. package/dist/gui/components/MessageContent.d.ts.map +1 -0
  116. package/dist/gui/components/MessageContent.js +104 -0
  117. package/dist/gui/components/MessageContent.js.map +1 -0
  118. package/dist/gui/components/MessageList.d.ts +6 -0
  119. package/dist/gui/components/MessageList.d.ts.map +1 -0
  120. package/dist/gui/components/MessageList.js +1 -0
  121. package/dist/gui/components/MessageList.js.map +1 -0
  122. package/dist/gui/components/PlaygroundLayout.d.ts +10 -0
  123. package/dist/gui/components/PlaygroundLayout.d.ts.map +1 -0
  124. package/dist/gui/components/PlaygroundLayout.js +18 -0
  125. package/dist/gui/components/PlaygroundLayout.js.map +1 -0
  126. package/dist/gui/components/Reasoning.d.ts +31 -0
  127. package/dist/gui/components/Reasoning.d.ts.map +1 -0
  128. package/dist/gui/components/Reasoning.js +70 -0
  129. package/dist/gui/components/Reasoning.js.map +1 -0
  130. package/dist/gui/components/Response.d.ts +16 -0
  131. package/dist/gui/components/Response.d.ts.map +1 -0
  132. package/dist/gui/components/Response.js +95 -0
  133. package/dist/gui/components/Response.js.map +1 -0
  134. package/dist/gui/components/Select.d.ts +13 -0
  135. package/dist/gui/components/Select.d.ts.map +1 -0
  136. package/dist/gui/components/Select.js +26 -0
  137. package/dist/gui/components/Select.js.map +1 -0
  138. package/dist/gui/components/Sonner.d.ts +5 -0
  139. package/dist/gui/components/Sonner.js +23 -0
  140. package/dist/gui/components/StatusBar.d.ts +8 -0
  141. package/dist/gui/components/StatusBar.d.ts.map +1 -0
  142. package/dist/gui/components/StatusBar.js +11 -0
  143. package/dist/gui/components/StatusBar.js.map +1 -0
  144. package/dist/gui/components/Tabs.d.ts +7 -0
  145. package/dist/gui/components/Tabs.d.ts.map +1 -0
  146. package/dist/gui/components/Tabs.js +12 -0
  147. package/dist/gui/components/Tabs.js.map +1 -0
  148. package/dist/gui/components/Task.d.ts +35 -0
  149. package/dist/gui/components/Task.d.ts.map +1 -0
  150. package/dist/gui/components/Task.js +37 -0
  151. package/dist/gui/components/Task.js.map +1 -0
  152. package/dist/gui/components/Textarea.d.ts +11 -0
  153. package/dist/gui/components/Textarea.d.ts.map +1 -0
  154. package/dist/gui/components/Textarea.js +51 -0
  155. package/dist/gui/components/Textarea.js.map +1 -0
  156. package/dist/gui/components/ThinkingBlock.d.ts +12 -0
  157. package/dist/gui/components/ThinkingBlock.d.ts.map +1 -0
  158. package/dist/gui/components/ThinkingBlock.js +40 -0
  159. package/dist/gui/components/ThinkingBlock.js.map +1 -0
  160. package/dist/gui/components/TodoList.d.ts +20 -0
  161. package/dist/gui/components/TodoList.d.ts.map +1 -0
  162. package/dist/gui/components/TodoList.js +11 -0
  163. package/dist/gui/components/TodoList.js.map +1 -0
  164. package/dist/gui/components/TodoListItem.d.ts +10 -0
  165. package/dist/gui/components/TodoListItem.d.ts.map +1 -0
  166. package/dist/gui/components/TodoListItem.js +7 -0
  167. package/dist/gui/components/TodoListItem.js.map +1 -0
  168. package/dist/gui/components/index.d.ts +23 -0
  169. package/dist/gui/components/index.d.ts.map +1 -0
  170. package/dist/gui/components/index.js +28 -0
  171. package/dist/gui/components/index.js.map +1 -0
  172. package/dist/gui/index.d.ts +2 -0
  173. package/dist/gui/index.d.ts.map +1 -0
  174. package/dist/gui/index.js +4 -0
  175. package/dist/gui/index.js.map +1 -0
  176. package/dist/gui/lib/utils.d.ts +2 -0
  177. package/dist/gui/lib/utils.d.ts.map +1 -0
  178. package/dist/gui/lib/utils.js +5 -0
  179. package/dist/gui/lib/utils.js.map +1 -0
  180. package/dist/index.d.ts +11 -0
  181. package/dist/index.d.ts.map +1 -0
  182. package/dist/index.js +12 -0
  183. package/dist/index.js.map +1 -0
  184. package/dist/index.test.d.ts +0 -0
  185. package/dist/index.test.js +1 -0
  186. package/dist/sdk/client/acp-client.d.ts +84 -0
  187. package/dist/sdk/client/acp-client.d.ts.map +1 -0
  188. package/dist/sdk/client/acp-client.js +225 -0
  189. package/dist/sdk/client/acp-client.js.map +1 -0
  190. package/dist/sdk/client/index.d.ts +4 -0
  191. package/dist/sdk/client/index.d.ts.map +1 -0
  192. package/dist/sdk/client/index.js +4 -0
  193. package/dist/sdk/client/index.js.map +1 -0
  194. package/dist/sdk/index.d.ts +9 -0
  195. package/dist/sdk/index.d.ts.map +1 -0
  196. package/dist/sdk/index.js +9 -0
  197. package/dist/sdk/index.js.map +1 -0
  198. package/dist/sdk/schemas/agent.d.ts +87 -0
  199. package/dist/sdk/schemas/agent.d.ts.map +1 -0
  200. package/dist/sdk/schemas/agent.js +50 -0
  201. package/dist/sdk/schemas/agent.js.map +1 -0
  202. package/dist/sdk/schemas/index.d.ts +6 -0
  203. package/dist/sdk/schemas/index.d.ts.map +1 -0
  204. package/dist/sdk/schemas/index.js +6 -0
  205. package/dist/sdk/schemas/index.js.map +1 -0
  206. package/dist/sdk/schemas/message.d.ts +195 -0
  207. package/dist/sdk/schemas/message.d.ts.map +1 -0
  208. package/dist/sdk/schemas/message.js +95 -0
  209. package/dist/sdk/schemas/message.js.map +1 -0
  210. package/dist/sdk/schemas/session.d.ts +158 -0
  211. package/dist/sdk/schemas/session.d.ts.map +1 -0
  212. package/dist/sdk/schemas/session.js +54 -0
  213. package/dist/sdk/schemas/session.js.map +1 -0
  214. package/dist/sdk/transports/http.d.ts +63 -0
  215. package/dist/sdk/transports/http.d.ts.map +1 -0
  216. package/dist/sdk/transports/http.js +476 -0
  217. package/dist/sdk/transports/http.js.map +1 -0
  218. package/dist/sdk/transports/index.d.ts +7 -0
  219. package/dist/sdk/transports/index.d.ts.map +1 -0
  220. package/dist/sdk/transports/index.js +7 -0
  221. package/dist/sdk/transports/index.js.map +1 -0
  222. package/dist/sdk/transports/stdio.d.ts +28 -0
  223. package/dist/sdk/transports/stdio.d.ts.map +1 -0
  224. package/dist/sdk/transports/stdio.js +294 -0
  225. package/dist/sdk/transports/stdio.js.map +1 -0
  226. package/dist/sdk/transports/types.d.ts +63 -0
  227. package/dist/sdk/transports/types.d.ts.map +1 -0
  228. package/dist/sdk/transports/types.js +1 -0
  229. package/dist/sdk/transports/types.js.map +1 -0
  230. package/dist/sdk/transports/websocket.d.ts +20 -0
  231. package/dist/sdk/transports/websocket.d.ts.map +1 -0
  232. package/dist/sdk/transports/websocket.js +52 -0
  233. package/dist/sdk/transports/websocket.js.map +1 -0
  234. package/dist/tui/components/ChatView.d.ts +5 -0
  235. package/dist/tui/components/ChatView.d.ts.map +1 -0
  236. package/dist/tui/components/ChatView.js +24 -0
  237. package/dist/tui/components/ChatView.js.map +1 -0
  238. package/dist/tui/components/GameOfLife.d.ts +1 -0
  239. package/dist/tui/components/GameOfLife.d.ts.map +1 -0
  240. package/dist/tui/components/GameOfLife.js +50 -0
  241. package/dist/tui/components/GameOfLife.js.map +1 -0
  242. package/dist/tui/components/InputBox.d.ts +13 -0
  243. package/dist/tui/components/InputBox.d.ts.map +1 -0
  244. package/dist/tui/components/InputBox.js +15 -0
  245. package/dist/tui/components/InputBox.js.map +1 -0
  246. package/dist/tui/components/MessageList.d.ts +5 -0
  247. package/dist/tui/components/MessageList.d.ts.map +1 -0
  248. package/dist/tui/components/MessageList.js +16 -0
  249. package/dist/tui/components/MessageList.js.map +1 -0
  250. package/dist/tui/components/MultiSelect.d.ts +13 -0
  251. package/dist/tui/components/MultiSelect.js +72 -0
  252. package/dist/tui/components/ReadlineInput.d.ts +8 -0
  253. package/dist/tui/components/ReadlineInput.d.ts.map +1 -0
  254. package/dist/tui/components/ReadlineInput.js +240 -0
  255. package/dist/tui/components/ReadlineInput.js.map +1 -0
  256. package/dist/tui/components/SingleSelect.d.ts +13 -0
  257. package/dist/tui/components/SingleSelect.js +46 -0
  258. package/dist/tui/components/StatusBar.d.ts +9 -0
  259. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  260. package/dist/tui/components/StatusBar.js +82 -0
  261. package/dist/tui/components/StatusBar.js.map +1 -0
  262. package/dist/tui/components/index.d.ts +11 -0
  263. package/dist/tui/components/index.d.ts.map +1 -0
  264. package/dist/tui/components/index.js +11 -0
  265. package/dist/tui/components/index.js.map +1 -0
  266. package/dist/tui/index.d.ts +7 -0
  267. package/dist/tui/index.d.ts.map +1 -0
  268. package/dist/tui/index.js +7 -0
  269. package/dist/tui/index.js.map +1 -0
  270. package/package.json +86 -0
  271. package/src/styles/global.css +152 -0
@@ -0,0 +1,476 @@
1
+ import * as acp from "@agentclientprotocol/sdk";
2
+ /**
3
+ * HTTP transport implementation using ACP over HTTP + SSE
4
+ * Uses POST /rpc for client->agent messages and GET /events (SSE) for agent->client
5
+ */
6
+ export class HttpTransport {
7
+ connected = false;
8
+ sessionUpdateCallbacks = new Set();
9
+ errorCallbacks = new Set();
10
+ messageQueue = [];
11
+ currentSessionId = null;
12
+ chunkResolvers = [];
13
+ streamComplete = false;
14
+ sseAbortController = null;
15
+ reconnectAttempts = 0;
16
+ maxReconnectAttempts = 5;
17
+ reconnectDelay = 1000; // Start with 1 second
18
+ reconnecting = false;
19
+ abortController = null;
20
+ options;
21
+ constructor(options) {
22
+ // Ensure baseUrl doesn't end with a slash
23
+ this.options = { ...options, baseUrl: options.baseUrl.replace(/\/$/, "") };
24
+ }
25
+ async connect() {
26
+ if (this.connected) {
27
+ return;
28
+ }
29
+ try {
30
+ this.abortController = new AbortController();
31
+ // Step 1: Initialize the ACP connection
32
+ const initRequest = {
33
+ protocolVersion: acp.PROTOCOL_VERSION,
34
+ clientCapabilities: {
35
+ fs: {
36
+ readTextFile: true,
37
+ writeTextFile: true,
38
+ },
39
+ },
40
+ };
41
+ const initResponse = await this.sendRpcRequest("initialize", initRequest);
42
+ console.log("ACP connection initialized:", initResponse);
43
+ // Step 2: Create a new session
44
+ const sessionRequest = {
45
+ cwd: "/",
46
+ mcpServers: [],
47
+ };
48
+ const sessionResponse = await this.sendRpcRequest("session/new", sessionRequest);
49
+ this.currentSessionId = sessionResponse.sessionId;
50
+ console.log("Session created:", this.currentSessionId);
51
+ // Step 3: Open SSE connection for receiving messages
52
+ await this.connectSSE();
53
+ this.connected = true;
54
+ this.reconnectAttempts = 0; // Reset on successful connection
55
+ }
56
+ catch (error) {
57
+ this.connected = false;
58
+ const err = error instanceof Error ? error : new Error(String(error));
59
+ this.notifyError(err);
60
+ throw err;
61
+ }
62
+ }
63
+ async disconnect() {
64
+ if (!this.connected) {
65
+ return;
66
+ }
67
+ try {
68
+ // Abort any ongoing requests
69
+ if (this.abortController) {
70
+ this.abortController.abort();
71
+ this.abortController = null;
72
+ }
73
+ // Abort SSE connection
74
+ if (this.sseAbortController) {
75
+ this.sseAbortController.abort();
76
+ this.sseAbortController = null;
77
+ }
78
+ // Clear state
79
+ this.connected = false;
80
+ this.currentSessionId = null;
81
+ this.messageQueue = [];
82
+ this.chunkResolvers = [];
83
+ this.streamComplete = false;
84
+ this.reconnecting = false;
85
+ this.reconnectAttempts = 0;
86
+ }
87
+ catch (error) {
88
+ const err = error instanceof Error ? error : new Error(String(error));
89
+ this.notifyError(err);
90
+ throw err;
91
+ }
92
+ }
93
+ async send(message) {
94
+ if (!this.connected || !this.currentSessionId) {
95
+ throw new Error("Transport not connected");
96
+ }
97
+ try {
98
+ // Reset stream state for new message
99
+ this.streamComplete = false;
100
+ this.messageQueue = [];
101
+ // Convert our message format to ACP prompt format
102
+ const textContent = message.content
103
+ .filter((c) => c.type === "text")
104
+ .map((c) => c.text)
105
+ .join("\n");
106
+ // Create ACP prompt request
107
+ const promptRequest = {
108
+ sessionId: this.currentSessionId,
109
+ prompt: [
110
+ {
111
+ type: "text",
112
+ text: textContent,
113
+ },
114
+ ],
115
+ };
116
+ // Send the prompt - this will trigger streaming responses via SSE
117
+ const promptResponse = await this.sendRpcRequest("session/prompt", promptRequest);
118
+ console.log("Prompt sent:", promptResponse);
119
+ // Mark stream as complete after prompt finishes
120
+ this.streamComplete = true;
121
+ // Send completion chunk
122
+ const resolver = this.chunkResolvers.shift();
123
+ if (resolver) {
124
+ resolver({
125
+ id: this.currentSessionId || "unknown",
126
+ role: "assistant",
127
+ contentDelta: { type: "text", text: "" },
128
+ isComplete: true,
129
+ });
130
+ }
131
+ else {
132
+ this.messageQueue.push({
133
+ id: this.currentSessionId || "unknown",
134
+ role: "assistant",
135
+ contentDelta: { type: "text", text: "" },
136
+ isComplete: true,
137
+ });
138
+ }
139
+ }
140
+ catch (error) {
141
+ this.streamComplete = true;
142
+ const err = error instanceof Error ? error : new Error(String(error));
143
+ this.notifyError(err);
144
+ throw err;
145
+ }
146
+ }
147
+ async *receive() {
148
+ // Keep yielding chunks until stream is complete
149
+ while (!this.streamComplete) {
150
+ // Check if there are queued messages
151
+ if (this.messageQueue.length > 0) {
152
+ const chunk = this.messageQueue.shift();
153
+ if (chunk) {
154
+ yield chunk;
155
+ if (chunk.isComplete) {
156
+ return;
157
+ }
158
+ }
159
+ }
160
+ else {
161
+ // Wait for next chunk to arrive
162
+ const chunk = await new Promise((resolve) => {
163
+ this.chunkResolvers.push(resolve);
164
+ });
165
+ if (chunk.isComplete) {
166
+ yield chunk;
167
+ return;
168
+ }
169
+ else {
170
+ yield chunk;
171
+ }
172
+ }
173
+ }
174
+ // Yield any remaining queued messages
175
+ while (this.messageQueue.length > 0) {
176
+ const chunk = this.messageQueue.shift();
177
+ if (chunk) {
178
+ yield chunk;
179
+ }
180
+ }
181
+ // Mark the stream as complete
182
+ yield {
183
+ id: this.currentSessionId || "unknown",
184
+ role: "assistant",
185
+ contentDelta: { type: "text", text: "" },
186
+ isComplete: true,
187
+ };
188
+ }
189
+ isConnected() {
190
+ return this.connected;
191
+ }
192
+ onSessionUpdate(callback) {
193
+ this.sessionUpdateCallbacks.add(callback);
194
+ return () => {
195
+ this.sessionUpdateCallbacks.delete(callback);
196
+ };
197
+ }
198
+ onError(callback) {
199
+ this.errorCallbacks.add(callback);
200
+ return () => {
201
+ this.errorCallbacks.delete(callback);
202
+ };
203
+ }
204
+ /**
205
+ * Send an ACP RPC request to the server
206
+ */
207
+ async sendRpcRequest(method, params) {
208
+ const requestId = this.generateRequestId();
209
+ // Construct ACP request message
210
+ const request = {
211
+ jsonrpc: "2.0",
212
+ id: requestId,
213
+ method,
214
+ params,
215
+ };
216
+ const headers = {
217
+ "Content-Type": "application/json",
218
+ ...this.options.headers,
219
+ };
220
+ const timeout = this.options.timeout || 30000;
221
+ const controller = new AbortController();
222
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
223
+ try {
224
+ const response = await fetch(`${this.options.baseUrl}/rpc`, {
225
+ method: "POST",
226
+ headers,
227
+ body: JSON.stringify(request),
228
+ signal: controller.signal,
229
+ });
230
+ clearTimeout(timeoutId);
231
+ if (!response.ok) {
232
+ const errorText = await response.text();
233
+ throw new Error(`HTTP ${response.status}: ${errorText}`);
234
+ }
235
+ const result = await response.json();
236
+ // Check for JSON-RPC error
237
+ if (result.error) {
238
+ throw new Error(`ACP error: ${result.error.message || JSON.stringify(result.error)}`);
239
+ }
240
+ return result.result || result;
241
+ }
242
+ catch (error) {
243
+ clearTimeout(timeoutId);
244
+ if (error instanceof Error && error.name === "AbortError") {
245
+ throw new Error(`Request timeout after ${timeout}ms`);
246
+ }
247
+ throw error;
248
+ }
249
+ }
250
+ /**
251
+ * Connect to the SSE event stream
252
+ * Uses fetch-based SSE to support custom headers (X-Session-ID)
253
+ */
254
+ async connectSSE() {
255
+ if (!this.currentSessionId) {
256
+ throw new Error("Cannot connect SSE without a session ID");
257
+ }
258
+ const url = `${this.options.baseUrl}/events`;
259
+ const headers = {
260
+ "X-Session-ID": this.currentSessionId,
261
+ ...this.options.headers,
262
+ };
263
+ // Create a new abort controller for this SSE connection
264
+ this.sseAbortController = new AbortController();
265
+ try {
266
+ const response = await fetch(url, {
267
+ method: "GET",
268
+ headers,
269
+ signal: this.sseAbortController.signal,
270
+ });
271
+ if (!response.ok) {
272
+ throw new Error(`SSE connection failed: HTTP ${response.status}`);
273
+ }
274
+ if (!response.body) {
275
+ throw new Error("Response body is null");
276
+ }
277
+ console.log("SSE connection opened");
278
+ this.reconnectAttempts = 0;
279
+ this.reconnectDelay = 1000;
280
+ // Read the SSE stream
281
+ const reader = response.body.getReader();
282
+ const decoder = new TextDecoder();
283
+ let buffer = "";
284
+ // Process the stream in the background
285
+ (async () => {
286
+ try {
287
+ while (true) {
288
+ const { done, value } = await reader.read();
289
+ if (done) {
290
+ console.log("SSE stream closed by server");
291
+ if (this.connected) {
292
+ await this.handleSSEDisconnect();
293
+ }
294
+ break;
295
+ }
296
+ // Decode the chunk and add to buffer
297
+ buffer += decoder.decode(value, { stream: true });
298
+ // Process complete SSE messages
299
+ const lines = buffer.split("\n");
300
+ buffer = lines.pop() || ""; // Keep incomplete line in buffer
301
+ let currentEvent = { event: "message", data: "" };
302
+ for (const line of lines) {
303
+ if (line.startsWith("event:")) {
304
+ currentEvent.event = line.substring(6).trim();
305
+ }
306
+ else if (line.startsWith("data:")) {
307
+ currentEvent.data = line.substring(5).trim();
308
+ }
309
+ else if (line === "") {
310
+ // Empty line signals end of event
311
+ if (currentEvent.event === "message" && currentEvent.data) {
312
+ this.handleSSEMessage(currentEvent.data);
313
+ }
314
+ // Reset for next event
315
+ currentEvent = { event: "message", data: "" };
316
+ }
317
+ }
318
+ }
319
+ }
320
+ catch (error) {
321
+ if (error instanceof Error && error.name === "AbortError") {
322
+ console.log("SSE stream aborted");
323
+ return;
324
+ }
325
+ console.error("Error reading SSE stream:", error);
326
+ if (this.connected && !this.reconnecting) {
327
+ await this.handleSSEDisconnect();
328
+ }
329
+ }
330
+ })();
331
+ }
332
+ catch (error) {
333
+ console.error("SSE connection error:", error);
334
+ throw error;
335
+ }
336
+ }
337
+ /**
338
+ * Handle SSE disconnection with automatic reconnection
339
+ */
340
+ async handleSSEDisconnect() {
341
+ if (this.reconnecting || !this.connected) {
342
+ return;
343
+ }
344
+ this.reconnecting = true;
345
+ // Abort the current SSE connection
346
+ if (this.sseAbortController) {
347
+ this.sseAbortController.abort();
348
+ this.sseAbortController = null;
349
+ }
350
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
351
+ const error = new Error(`SSE reconnection failed after ${this.maxReconnectAttempts} attempts`);
352
+ this.notifyError(error);
353
+ this.connected = false;
354
+ this.reconnecting = false;
355
+ return;
356
+ }
357
+ this.reconnectAttempts++;
358
+ const delay = Math.min(this.reconnectDelay * 2 ** (this.reconnectAttempts - 1), 32000);
359
+ console.log(`SSE reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
360
+ await new Promise((resolve) => setTimeout(resolve, delay));
361
+ try {
362
+ await this.connectSSE();
363
+ console.log("SSE reconnected successfully");
364
+ this.reconnecting = false;
365
+ }
366
+ catch (error) {
367
+ console.error("SSE reconnection failed:", error);
368
+ this.reconnecting = false;
369
+ // Will try again on next error event
370
+ }
371
+ }
372
+ /**
373
+ * Handle an incoming SSE message
374
+ */
375
+ handleSSEMessage(data) {
376
+ try {
377
+ const message = JSON.parse(data);
378
+ // Validate the message is an ACP agent outgoing message
379
+ const parseResult = acp.agentOutgoingMessageSchema.safeParse(message);
380
+ if (!parseResult.success) {
381
+ console.error("Invalid ACP message from SSE:", parseResult.error.issues);
382
+ return;
383
+ }
384
+ const acpMessage = parseResult.data;
385
+ // Check if this is a notification (has method but not a response)
386
+ if ("method" in acpMessage && acpMessage.method === "session/update") {
387
+ // Type narrowing: we know it has method and params
388
+ if ("params" in acpMessage && acpMessage.params) {
389
+ this.handleSessionNotification(acpMessage.params);
390
+ }
391
+ }
392
+ }
393
+ catch (error) {
394
+ console.error("Error parsing SSE message:", error);
395
+ this.notifyError(error instanceof Error ? error : new Error(String(error)));
396
+ }
397
+ }
398
+ /**
399
+ * Handle a session notification from the agent
400
+ */
401
+ handleSessionNotification(params) {
402
+ // Extract content from the update
403
+ const paramsExtended = params;
404
+ const update = paramsExtended.update;
405
+ const sessionUpdate = {
406
+ sessionId: this.currentSessionId || params.sessionId,
407
+ status: "active",
408
+ };
409
+ // Queue message chunks if present
410
+ if (update?.content) {
411
+ const content = update.content;
412
+ let chunk = null;
413
+ if (content.type === "text" && content.text) {
414
+ chunk = {
415
+ id: params.sessionId,
416
+ role: "assistant",
417
+ contentDelta: { type: "text", text: content.text },
418
+ isComplete: false,
419
+ };
420
+ }
421
+ else if (content.type === "tool_call") {
422
+ chunk = {
423
+ id: params.sessionId,
424
+ role: "assistant",
425
+ // biome-ignore lint/suspicious/noExplicitAny: hopefully assume that the server is sending the right stuff
426
+ contentDelta: content,
427
+ isComplete: false,
428
+ };
429
+ }
430
+ if (chunk) {
431
+ // Resolve any waiting receive() calls immediately
432
+ const resolver = this.chunkResolvers.shift();
433
+ if (resolver) {
434
+ resolver(chunk);
435
+ }
436
+ else {
437
+ // Only queue if no resolver is waiting
438
+ this.messageQueue.push(chunk);
439
+ }
440
+ }
441
+ }
442
+ this.notifySessionUpdate(sessionUpdate);
443
+ }
444
+ /**
445
+ * Generate a unique request ID
446
+ */
447
+ generateRequestId() {
448
+ return `req-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
449
+ }
450
+ /**
451
+ * Notify all session update callbacks
452
+ */
453
+ notifySessionUpdate(update) {
454
+ for (const callback of this.sessionUpdateCallbacks) {
455
+ try {
456
+ callback(update);
457
+ }
458
+ catch (error) {
459
+ console.error("Error in session update callback:", error);
460
+ }
461
+ }
462
+ }
463
+ /**
464
+ * Notify all error callbacks
465
+ */
466
+ notifyError(error) {
467
+ for (const callback of this.errorCallbacks) {
468
+ try {
469
+ callback(error);
470
+ }
471
+ catch (err) {
472
+ console.error("Error in error callback:", err);
473
+ }
474
+ }
475
+ }
476
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/sdk/transports/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Export all transport implementations
3
+ */
4
+ export * from "./http.js";
5
+ export * from "./stdio.js";
6
+ export * from "./types.js";
7
+ export * from "./websocket.js";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdk/transports/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Export all transport implementations
3
+ */
4
+ export * from "./http.js";
5
+ export * from "./stdio.js";
6
+ export * from "./types.js";
7
+ export * from "./websocket.js";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sdk/transports/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { Message, MessageChunk, SessionUpdate } from "../schemas/index.js";
2
+ import type { StdioTransportOptions, Transport } from "./types.js";
3
+ /**
4
+ * Stdio transport implementation using Agent Client Protocol SDK
5
+ * Uses JSON-RPC 2.0 over stdio to communicate with agents
6
+ */
7
+ export declare class StdioTransport implements Transport {
8
+ private options;
9
+ private agentProcess;
10
+ private connection;
11
+ private connected;
12
+ private sessionUpdateCallbacks;
13
+ private errorCallbacks;
14
+ private messageQueue;
15
+ private currentSessionId;
16
+ private chunkResolvers;
17
+ private streamComplete;
18
+ constructor(options: StdioTransportOptions);
19
+ connect(): Promise<void>;
20
+ disconnect(): Promise<void>;
21
+ send(message: Message): Promise<void>;
22
+ receive(): AsyncIterableIterator<MessageChunk>;
23
+ isConnected(): boolean;
24
+ onSessionUpdate(callback: (update: SessionUpdate) => void): () => void;
25
+ onError(callback: (error: Error) => void): () => void;
26
+ private notifySessionUpdate;
27
+ private notifyError;
28
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/sdk/transports/stdio.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEnE;;;GAGG;AACH,qBAAa,cAAe,YAAW,SAAS;IAYlC,OAAO,CAAC,OAAO;IAX3B,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,sBAAsB,CAClB;IACZ,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,cAAc,CAAS;gBAEX,OAAO,EAAE,qBAAqB;IAE5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+JxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DpC,OAAO,IAAI,qBAAqB,CAAC,YAAY,CAAC;IAyCrD,WAAW,IAAI,OAAO;IAItB,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAOtE,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI;IAOrD,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,WAAW;CASpB"}