@yourgpt/copilot-sdk 2.0.1 → 2.0.2-beta.2

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 (215) hide show
  1. package/README.md +42 -0
  2. package/dist/{ThreadManager-JT0sqSSD.d.ts → ThreadManager-Dkp_eLty.d.ts} +1 -1
  3. package/dist/{ThreadManager-CUq5Ocu2.d.cts → ThreadManager-LfFRhr4e.d.cts} +1 -1
  4. package/dist/anthropic-6F5GRE3B.js +4 -0
  5. package/dist/anthropic-6F5GRE3B.js.map +1 -0
  6. package/dist/anthropic-DGalr_Fw.d.cts +17 -0
  7. package/dist/anthropic-DkCEDYOt.d.ts +17 -0
  8. package/dist/anthropic-NMTRABEH.cjs +21 -0
  9. package/dist/anthropic-NMTRABEH.cjs.map +1 -0
  10. package/dist/brave-DdnWb7Gb.d.cts +17 -0
  11. package/dist/brave-DsI9n7Wr.d.ts +17 -0
  12. package/dist/brave-OYKCOZEM.cjs +21 -0
  13. package/dist/brave-OYKCOZEM.cjs.map +1 -0
  14. package/dist/brave-XSASGGH2.js +4 -0
  15. package/dist/brave-XSASGGH2.js.map +1 -0
  16. package/dist/chunk-2FAWEBZS.cjs +88 -0
  17. package/dist/chunk-2FAWEBZS.cjs.map +1 -0
  18. package/dist/chunk-53UGJNHN.js +92 -0
  19. package/dist/chunk-53UGJNHN.js.map +1 -0
  20. package/dist/chunk-6T5XXJEP.cjs +80 -0
  21. package/dist/chunk-6T5XXJEP.cjs.map +1 -0
  22. package/dist/chunk-7K7HZMP4.cjs +1170 -0
  23. package/dist/chunk-7K7HZMP4.cjs.map +1 -0
  24. package/dist/chunk-7W7QLZNC.js +72 -0
  25. package/dist/chunk-7W7QLZNC.js.map +1 -0
  26. package/dist/{chunk-JM7PB2LP.js → chunk-7XFFRV7D.js} +10 -66
  27. package/dist/chunk-7XFFRV7D.js.map +1 -0
  28. package/dist/chunk-ASV6JLYG.cjs +99 -0
  29. package/dist/chunk-ASV6JLYG.cjs.map +1 -0
  30. package/dist/chunk-BH7MNDWW.js +1152 -0
  31. package/dist/chunk-BH7MNDWW.js.map +1 -0
  32. package/dist/chunk-BKO7DSPU.js +67 -0
  33. package/dist/chunk-BKO7DSPU.js.map +1 -0
  34. package/dist/chunk-CBAHCI4R.cjs +76 -0
  35. package/dist/chunk-CBAHCI4R.cjs.map +1 -0
  36. package/dist/chunk-CEKAYA2Q.cjs +74 -0
  37. package/dist/chunk-CEKAYA2Q.cjs.map +1 -0
  38. package/dist/chunk-CEOMTQTP.js +85 -0
  39. package/dist/chunk-CEOMTQTP.js.map +1 -0
  40. package/dist/chunk-DABZYCVX.js +84 -0
  41. package/dist/chunk-DABZYCVX.js.map +1 -0
  42. package/dist/chunk-DGUM43GV.js +10 -0
  43. package/dist/chunk-DGUM43GV.js.map +1 -0
  44. package/dist/chunk-G4SF2PNQ.js +33 -0
  45. package/dist/chunk-G4SF2PNQ.js.map +1 -0
  46. package/dist/chunk-GANCV72Z.cjs +110 -0
  47. package/dist/chunk-GANCV72Z.cjs.map +1 -0
  48. package/dist/{chunk-BLSI67J6.cjs → chunk-H5XMKBBA.cjs} +425 -30
  49. package/dist/chunk-H5XMKBBA.cjs.map +1 -0
  50. package/dist/{chunk-CJ7UWN2Y.js → chunk-IXFV6AW6.js} +397 -7
  51. package/dist/chunk-IXFV6AW6.js.map +1 -0
  52. package/dist/chunk-JEQ2X3Z6.cjs +12 -0
  53. package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
  54. package/dist/chunk-JO4BHPAD.cjs +40 -0
  55. package/dist/chunk-JO4BHPAD.cjs.map +1 -0
  56. package/dist/chunk-MEBXW75C.cjs +89 -0
  57. package/dist/chunk-MEBXW75C.cjs.map +1 -0
  58. package/dist/chunk-MNDGIW47.js +76 -0
  59. package/dist/chunk-MNDGIW47.js.map +1 -0
  60. package/dist/chunk-PPFHA6IL.js +83 -0
  61. package/dist/chunk-PPFHA6IL.js.map +1 -0
  62. package/dist/chunk-RQ74USYU.js +128 -0
  63. package/dist/chunk-RQ74USYU.js.map +1 -0
  64. package/dist/chunk-TXLIY7GF.cjs +132 -0
  65. package/dist/chunk-TXLIY7GF.cjs.map +1 -0
  66. package/dist/chunk-UIWFYMAO.cjs +82 -0
  67. package/dist/chunk-UIWFYMAO.cjs.map +1 -0
  68. package/dist/{chunk-4PRWNAXQ.cjs → chunk-UOWLKFXK.cjs} +27 -89
  69. package/dist/chunk-UOWLKFXK.cjs.map +1 -0
  70. package/dist/chunk-VD74IPKB.js +106 -0
  71. package/dist/chunk-VD74IPKB.js.map +1 -0
  72. package/dist/chunk-W73FBYIH.cjs +87 -0
  73. package/dist/chunk-W73FBYIH.cjs.map +1 -0
  74. package/dist/chunk-XGITAEXU.js +93 -0
  75. package/dist/chunk-XGITAEXU.js.map +1 -0
  76. package/dist/chunk-XWOHNY3F.cjs +96 -0
  77. package/dist/chunk-XWOHNY3F.cjs.map +1 -0
  78. package/dist/chunk-ZPYQDMUX.js +79 -0
  79. package/dist/chunk-ZPYQDMUX.js.map +1 -0
  80. package/dist/core/index.cjs +156 -84
  81. package/dist/core/index.d.cts +16 -4
  82. package/dist/core/index.d.ts +16 -4
  83. package/dist/core/index.js +13 -1
  84. package/dist/exa-72KFY5A7.cjs +21 -0
  85. package/dist/exa-72KFY5A7.cjs.map +1 -0
  86. package/dist/exa-Dp9U-WTc.d.ts +17 -0
  87. package/dist/exa-NNVPBC2M.js +4 -0
  88. package/dist/exa-NNVPBC2M.js.map +1 -0
  89. package/dist/exa-jJSPhyUW.d.cts +17 -0
  90. package/dist/google-CHU2yycE.d.cts +17 -0
  91. package/dist/google-CTEK6SV2.js +4 -0
  92. package/dist/google-CTEK6SV2.js.map +1 -0
  93. package/dist/google-Da8IQxaI.d.ts +17 -0
  94. package/dist/google-IIUXFFVF.cjs +21 -0
  95. package/dist/google-IIUXFFVF.cjs.map +1 -0
  96. package/dist/index-2VtgKM8S.d.cts +206 -0
  97. package/dist/index-pWEH7pUE.d.ts +206 -0
  98. package/dist/mcp/index.cjs +670 -0
  99. package/dist/mcp/index.cjs.map +1 -0
  100. package/dist/mcp/index.d.cts +779 -0
  101. package/dist/mcp/index.d.ts +779 -0
  102. package/dist/mcp/index.js +574 -0
  103. package/dist/mcp/index.js.map +1 -0
  104. package/dist/openai-6KTCQ7PZ.cjs +21 -0
  105. package/dist/openai-6KTCQ7PZ.cjs.map +1 -0
  106. package/dist/openai-7W2PCNW5.js +4 -0
  107. package/dist/openai-7W2PCNW5.js.map +1 -0
  108. package/dist/openai-Cam8hF4f.d.ts +17 -0
  109. package/dist/openai-HVSCuXgO.d.cts +17 -0
  110. package/dist/react/index.cjs +75 -42
  111. package/dist/react/index.d.cts +270 -45
  112. package/dist/react/index.d.ts +270 -45
  113. package/dist/react/index.js +15 -2
  114. package/dist/searxng-AXLVGY7Z.js +4 -0
  115. package/dist/searxng-AXLVGY7Z.js.map +1 -0
  116. package/dist/searxng-EJKNY236.cjs +21 -0
  117. package/dist/searxng-EJKNY236.cjs.map +1 -0
  118. package/dist/searxng-K0qtY9vp.d.ts +17 -0
  119. package/dist/searxng-QGOte_Gq.d.cts +17 -0
  120. package/dist/serper-3JYJHJX6.js +4 -0
  121. package/dist/serper-3JYJHJX6.js.map +1 -0
  122. package/dist/serper-63FT4AOL.cjs +21 -0
  123. package/dist/serper-63FT4AOL.cjs.map +1 -0
  124. package/dist/serper-7Czya3PW.d.ts +17 -0
  125. package/dist/serper-JzdaSnS9.d.cts +17 -0
  126. package/dist/styles.css +38 -0
  127. package/dist/tavily-AWFP4RM7.cjs +21 -0
  128. package/dist/tavily-AWFP4RM7.cjs.map +1 -0
  129. package/dist/tavily-C8cXXojE.d.cts +17 -0
  130. package/dist/tavily-CIWAAZPH.js +4 -0
  131. package/dist/tavily-CIWAAZPH.js.map +1 -0
  132. package/dist/tavily-DdSGVgkE.d.ts +17 -0
  133. package/dist/themes/catppuccin.css +2 -0
  134. package/dist/themes/claude.css +2 -0
  135. package/dist/themes/linear.css +2 -0
  136. package/dist/themes/modern-minimal.css +2 -0
  137. package/dist/themes/posthog.css +2 -0
  138. package/dist/themes/supabase.css +2 -0
  139. package/dist/themes/twitter.css +2 -0
  140. package/dist/themes/vercel.css +2 -0
  141. package/dist/tools/anthropic/index.cjs +61 -0
  142. package/dist/tools/anthropic/index.cjs.map +1 -0
  143. package/dist/tools/anthropic/index.d.cts +67 -0
  144. package/dist/tools/anthropic/index.d.ts +67 -0
  145. package/dist/tools/anthropic/index.js +56 -0
  146. package/dist/tools/anthropic/index.js.map +1 -0
  147. package/dist/tools/brave/index.cjs +85 -0
  148. package/dist/tools/brave/index.cjs.map +1 -0
  149. package/dist/tools/brave/index.d.cts +91 -0
  150. package/dist/tools/brave/index.d.ts +91 -0
  151. package/dist/tools/brave/index.js +80 -0
  152. package/dist/tools/brave/index.js.map +1 -0
  153. package/dist/tools/exa/index.cjs +90 -0
  154. package/dist/tools/exa/index.cjs.map +1 -0
  155. package/dist/tools/exa/index.d.cts +92 -0
  156. package/dist/tools/exa/index.d.ts +92 -0
  157. package/dist/tools/exa/index.js +85 -0
  158. package/dist/tools/exa/index.js.map +1 -0
  159. package/dist/tools/google/index.cjs +81 -0
  160. package/dist/tools/google/index.cjs.map +1 -0
  161. package/dist/tools/google/index.d.cts +81 -0
  162. package/dist/tools/google/index.d.ts +81 -0
  163. package/dist/tools/google/index.js +76 -0
  164. package/dist/tools/google/index.js.map +1 -0
  165. package/dist/tools/openai/index.cjs +83 -0
  166. package/dist/tools/openai/index.cjs.map +1 -0
  167. package/dist/tools/openai/index.d.cts +84 -0
  168. package/dist/tools/openai/index.d.ts +84 -0
  169. package/dist/tools/openai/index.js +78 -0
  170. package/dist/tools/openai/index.js.map +1 -0
  171. package/dist/tools/searxng/index.cjs +85 -0
  172. package/dist/tools/searxng/index.cjs.map +1 -0
  173. package/dist/tools/searxng/index.d.cts +91 -0
  174. package/dist/tools/searxng/index.d.ts +91 -0
  175. package/dist/tools/searxng/index.js +80 -0
  176. package/dist/tools/searxng/index.js.map +1 -0
  177. package/dist/tools/serper/index.cjs +85 -0
  178. package/dist/tools/serper/index.cjs.map +1 -0
  179. package/dist/tools/serper/index.d.cts +91 -0
  180. package/dist/tools/serper/index.d.ts +91 -0
  181. package/dist/tools/serper/index.js +80 -0
  182. package/dist/tools/serper/index.js.map +1 -0
  183. package/dist/tools/tavily/index.cjs +91 -0
  184. package/dist/tools/tavily/index.cjs.map +1 -0
  185. package/dist/tools/tavily/index.d.cts +95 -0
  186. package/dist/tools/tavily/index.d.ts +95 -0
  187. package/dist/tools/tavily/index.js +86 -0
  188. package/dist/tools/tavily/index.js.map +1 -0
  189. package/dist/tools/web-search/index.cjs +31 -0
  190. package/dist/tools/web-search/index.cjs.map +1 -0
  191. package/dist/tools/web-search/index.d.cts +3 -0
  192. package/dist/tools/web-search/index.d.ts +3 -0
  193. package/dist/tools/web-search/index.js +14 -0
  194. package/dist/tools/web-search/index.js.map +1 -0
  195. package/dist/{types-BtAaOV07.d.cts → tools-DDWrco4h.d.cts} +43 -367
  196. package/dist/{types-BtAaOV07.d.ts → tools-DDWrco4h.d.ts} +43 -367
  197. package/dist/types-B20VCJXL.d.cts +347 -0
  198. package/dist/types-B20VCJXL.d.ts +347 -0
  199. package/dist/types-Cizh9K_f.d.ts +441 -0
  200. package/dist/types-DG2ya08y.d.cts +367 -0
  201. package/dist/types-DG2ya08y.d.ts +367 -0
  202. package/dist/types-DjSfYNKj.d.cts +441 -0
  203. package/dist/types-ZguuKEs_.d.cts +127 -0
  204. package/dist/types-ZguuKEs_.d.ts +127 -0
  205. package/dist/ui/index.cjs +1075 -148
  206. package/dist/ui/index.cjs.map +1 -1
  207. package/dist/ui/index.d.cts +410 -4
  208. package/dist/ui/index.d.ts +410 -4
  209. package/dist/ui/index.js +1007 -96
  210. package/dist/ui/index.js.map +1 -1
  211. package/package.json +52 -2
  212. package/dist/chunk-4PRWNAXQ.cjs.map +0 -1
  213. package/dist/chunk-BLSI67J6.cjs.map +0 -1
  214. package/dist/chunk-CJ7UWN2Y.js.map +0 -1
  215. package/dist/chunk-JM7PB2LP.js.map +0 -1
@@ -0,0 +1,367 @@
1
+ /**
2
+ * Message roles in a conversation (OpenAI format)
3
+ */
4
+ type MessageRole = "user" | "assistant" | "system" | "tool";
5
+ /**
6
+ * A source document from knowledge base
7
+ */
8
+ interface Source {
9
+ /** Unique identifier */
10
+ id: string;
11
+ /** Source title or filename */
12
+ title: string;
13
+ /** Relevant content snippet */
14
+ content: string;
15
+ /** URL if available */
16
+ url?: string;
17
+ /** Relevance score (0-1) */
18
+ score?: number;
19
+ /** Additional metadata */
20
+ metadata?: Record<string, unknown>;
21
+ }
22
+ /**
23
+ * Tool/function call in OpenAI format
24
+ * Used in assistant messages when AI wants to call tools
25
+ */
26
+ interface ToolCall {
27
+ /** Unique identifier for this call */
28
+ id: string;
29
+ /** Always "function" for OpenAI compatibility */
30
+ type: "function";
31
+ /** Function details */
32
+ function: {
33
+ /** Name of the function/tool */
34
+ name: string;
35
+ /** Arguments as JSON string (OpenAI format) */
36
+ arguments: string;
37
+ };
38
+ }
39
+ /**
40
+ * Attachment in a message (images, files, etc.)
41
+ *
42
+ * Attachments can be stored as:
43
+ * - Base64 data (free tier, embedded in message)
44
+ * - URL (premium cloud storage, lighter payload)
45
+ */
46
+ interface MessageAttachment {
47
+ /** Type of attachment */
48
+ type: "image" | "file" | "audio" | "video";
49
+ /** Base64 data (for embedded attachments) */
50
+ data?: string;
51
+ /** URL for cloud-stored attachments (managed cloud storage) */
52
+ url?: string;
53
+ /** MIME type */
54
+ mimeType: string;
55
+ /** Optional filename */
56
+ filename?: string;
57
+ }
58
+ /**
59
+ * Token usage information
60
+ */
61
+ interface TokenUsage {
62
+ prompt_tokens: number;
63
+ completion_tokens: number;
64
+ total_tokens?: number;
65
+ }
66
+ /**
67
+ * Message metadata (flexible container for provider-specific data)
68
+ */
69
+ interface MessageMetadata {
70
+ /** Extended thinking/reasoning (Claude, DeepSeek) */
71
+ thinking?: string;
72
+ /** Knowledge base sources */
73
+ sources?: Source[];
74
+ /** Attachments (images, files) */
75
+ attachments?: MessageAttachment[];
76
+ /** Model used to generate this message */
77
+ model?: string;
78
+ /** Token usage */
79
+ usage?: TokenUsage;
80
+ /** Any additional data */
81
+ [key: string]: unknown;
82
+ }
83
+ /**
84
+ * A message in the conversation (OpenAI format)
85
+ *
86
+ * This format is compatible with OpenAI's Chat Completions API
87
+ * and can be stored directly in a database (1 row per message).
88
+ *
89
+ * Message types:
90
+ * - user: User's input message
91
+ * - assistant: AI's response (may include tool_calls)
92
+ * - tool: Result of a tool execution (has tool_call_id)
93
+ * - system: System prompt (usually first message)
94
+ *
95
+ * @example
96
+ * // User message
97
+ * { role: "user", content: "What's the weather?" }
98
+ *
99
+ * // Assistant requesting tool
100
+ * { role: "assistant", content: null, tool_calls: [{...}] }
101
+ *
102
+ * // Tool result
103
+ * { role: "tool", content: '{"temp": 72}', tool_call_id: "call_abc" }
104
+ *
105
+ * // Final assistant response
106
+ * { role: "assistant", content: "The temperature is 72°F" }
107
+ */
108
+ interface Message {
109
+ /** Unique identifier */
110
+ id: string;
111
+ /** Thread/conversation ID (for multi-session apps) */
112
+ thread_id?: string;
113
+ /** Role of the message sender */
114
+ role: MessageRole;
115
+ /** Text content (null for tool-calling assistant messages) */
116
+ content: string | null;
117
+ /**
118
+ * Tool calls made by assistant (OpenAI format)
119
+ * Only present when role is "assistant" and AI wants to call tools
120
+ */
121
+ tool_calls?: ToolCall[];
122
+ /**
123
+ * Tool call ID this message is responding to
124
+ * Only present when role is "tool"
125
+ */
126
+ tool_call_id?: string;
127
+ /**
128
+ * Flexible metadata container
129
+ * Contains: thinking, sources, attachments, model, usage, etc.
130
+ */
131
+ metadata?: MessageMetadata;
132
+ /** When the message was created */
133
+ created_at: Date;
134
+ }
135
+ /**
136
+ * Helper to parse tool call arguments
137
+ */
138
+ declare function parseToolCallArgs<T = Record<string, unknown>>(toolCall: ToolCall): T;
139
+ /**
140
+ * Helper to create a tool call
141
+ */
142
+ declare function createToolCall(id: string, name: string, args: Record<string, unknown>): ToolCall;
143
+ /**
144
+ * Create a new message with defaults
145
+ */
146
+ declare function createMessage(partial: Partial<Message> & Pick<Message, "role"> & {
147
+ content?: string | null;
148
+ }): Message;
149
+ /**
150
+ * Create a user message
151
+ */
152
+ declare function createUserMessage(content: string, options?: {
153
+ id?: string;
154
+ thread_id?: string;
155
+ attachments?: MessageAttachment[];
156
+ }): Message;
157
+ /**
158
+ * Create an assistant message
159
+ */
160
+ declare function createAssistantMessage(content: string | null, options?: {
161
+ id?: string;
162
+ thread_id?: string;
163
+ tool_calls?: ToolCall[];
164
+ thinking?: string;
165
+ sources?: Source[];
166
+ model?: string;
167
+ }): Message;
168
+ /**
169
+ * Create a tool result message
170
+ */
171
+ declare function createToolMessage(toolCallId: string, result: {
172
+ success: boolean;
173
+ data?: unknown;
174
+ error?: string;
175
+ message?: string;
176
+ }, options?: {
177
+ id?: string;
178
+ thread_id?: string;
179
+ }): Message;
180
+ /**
181
+ * Check if a message has tool calls
182
+ */
183
+ declare function hasToolCalls(message: Message): boolean;
184
+ /**
185
+ * Check if a message is a tool result
186
+ */
187
+ declare function isToolResult(message: Message): boolean;
188
+
189
+ /**
190
+ * Thread metadata (for listing threads)
191
+ */
192
+ interface Thread {
193
+ /** Unique thread identifier */
194
+ id: string;
195
+ /** Thread title (auto-generated from first message or manual) */
196
+ title?: string;
197
+ /** Preview of the first message (for thread lists) */
198
+ preview?: string;
199
+ /** Number of messages in this thread */
200
+ messageCount?: number;
201
+ /** When thread was created */
202
+ createdAt: Date;
203
+ /** When thread was last updated */
204
+ updatedAt: Date;
205
+ }
206
+ /**
207
+ * Full thread data including messages
208
+ */
209
+ interface ThreadData extends Thread {
210
+ /** Messages in this thread */
211
+ messages: Message[];
212
+ /** Sources from knowledge base for this thread */
213
+ sources: Source[];
214
+ }
215
+ /**
216
+ * Persistence storage interface for custom adapters
217
+ */
218
+ interface ThreadStorageAdapter$1 {
219
+ /** Save threads to storage */
220
+ save: (threads: ThreadData[]) => Promise<void>;
221
+ /** Load threads from storage */
222
+ load: () => Promise<ThreadData[]>;
223
+ /** Clear all threads from storage */
224
+ clear: () => Promise<void>;
225
+ }
226
+ /**
227
+ * Persistence configuration
228
+ */
229
+ interface PersistenceConfig {
230
+ /** Enable persistence (default: false) */
231
+ enabled: boolean;
232
+ /** Storage type */
233
+ storage?: "localStorage" | "custom";
234
+ /** Custom storage adapter (required if storage is 'custom') */
235
+ customStorage?: ThreadStorageAdapter$1;
236
+ }
237
+ /**
238
+ * Generate a thread title from message content
239
+ */
240
+ declare function generateThreadTitle(content: string): string;
241
+
242
+ /**
243
+ * Thread Storage Adapter Types
244
+ *
245
+ * Interfaces for thread persistence adapters.
246
+ */
247
+
248
+ /**
249
+ * Basic thread storage adapter interface
250
+ * Used by ThreadManager for persistence
251
+ */
252
+ interface ThreadStorageAdapter {
253
+ /** Save all threads to storage */
254
+ save: (threads: ThreadData[]) => Promise<void>;
255
+ /** Load all threads from storage */
256
+ load: () => Promise<ThreadData[]>;
257
+ /** Clear all threads from storage */
258
+ clear: () => Promise<void>;
259
+ /**
260
+ * Get the last active thread ID
261
+ * Optional - used for session persistence
262
+ */
263
+ getLastActiveThreadId?: () => Promise<string | null>;
264
+ /**
265
+ * Set the last active thread ID
266
+ * Optional - used for session persistence
267
+ */
268
+ setLastActiveThreadId?: (threadId: string | null) => Promise<void>;
269
+ }
270
+ /**
271
+ * Pagination options for listing threads
272
+ */
273
+ interface ListThreadsOptions {
274
+ /** Maximum number of threads to return */
275
+ limit?: number;
276
+ /** Number of threads to skip */
277
+ offset?: number;
278
+ /** Sort order (default: updatedAt desc) */
279
+ orderBy?: "createdAt" | "updatedAt";
280
+ /** Sort direction */
281
+ orderDir?: "asc" | "desc";
282
+ }
283
+ /**
284
+ * Paginated response for thread listing
285
+ */
286
+ interface ListThreadsResult {
287
+ /** Threads for current page */
288
+ threads: Thread[];
289
+ /** Total number of threads */
290
+ total: number;
291
+ /** Whether there are more threads */
292
+ hasMore: boolean;
293
+ }
294
+ /**
295
+ * Async thread storage adapter with optimized single-thread operations
296
+ *
297
+ * Use this interface when implementing database backends (Supabase, Firebase, etc.)
298
+ * These methods are optional - if not provided, ThreadManager falls back to
299
+ * full save/load operations.
300
+ *
301
+ * @example Supabase adapter
302
+ * ```typescript
303
+ * const supabaseAdapter: AsyncThreadStorageAdapter = {
304
+ * save: async (threads) => { /* batch upsert *\/ },
305
+ * load: async () => { /* select all *\/ },
306
+ * clear: async () => { /* delete all *\/ },
307
+ *
308
+ * // Optimized operations
309
+ * getThread: async (id) => {
310
+ * const { data } = await supabase
311
+ * .from('threads')
312
+ * .select('*, messages(*)')
313
+ * .eq('id', id)
314
+ * .single();
315
+ * return data;
316
+ * },
317
+ * createThread: async (thread) => {
318
+ * const { data } = await supabase.from('threads').insert(thread).select().single();
319
+ * return data;
320
+ * },
321
+ * updateThread: async (id, updates) => {
322
+ * const { data } = await supabase.from('threads').update(updates).eq('id', id).select().single();
323
+ * return data;
324
+ * },
325
+ * deleteThread: async (id) => {
326
+ * await supabase.from('threads').delete().eq('id', id);
327
+ * },
328
+ * listThreads: async ({ limit, offset }) => {
329
+ * const { data, count } = await supabase
330
+ * .from('threads')
331
+ * .select('*', { count: 'exact' })
332
+ * .order('updatedAt', { ascending: false })
333
+ * .range(offset, offset + limit - 1);
334
+ * return { threads: data, total: count, hasMore: (offset + limit) < count };
335
+ * },
336
+ * };
337
+ * ```
338
+ */
339
+ interface AsyncThreadStorageAdapter extends ThreadStorageAdapter {
340
+ /**
341
+ * Get a single thread by ID
342
+ * If provided, used instead of loading all threads
343
+ */
344
+ getThread?: (id: string) => Promise<ThreadData | null>;
345
+ /**
346
+ * Create a new thread
347
+ * If provided, used instead of saving all threads
348
+ */
349
+ createThread?: (thread: ThreadData) => Promise<ThreadData>;
350
+ /**
351
+ * Update an existing thread
352
+ * If provided, used instead of saving all threads
353
+ */
354
+ updateThread?: (id: string, updates: Partial<ThreadData>) => Promise<ThreadData>;
355
+ /**
356
+ * Delete a thread by ID
357
+ * If provided, used instead of saving all threads
358
+ */
359
+ deleteThread?: (id: string) => Promise<void>;
360
+ /**
361
+ * List threads with pagination
362
+ * If provided, used for efficient thread listing
363
+ */
364
+ listThreads?: (options?: ListThreadsOptions) => Promise<ListThreadsResult>;
365
+ }
366
+
367
+ export { type AsyncThreadStorageAdapter as A, type ListThreadsOptions as L, type Message as M, type PersistenceConfig as P, type Source as S, type Thread as T, type ThreadData as a, type ThreadStorageAdapter as b, type MessageAttachment as c, type MessageRole as d, type MessageMetadata as e, type ToolCall as f, type TokenUsage as g, type ThreadStorageAdapter$1 as h, generateThreadTitle as i, createMessage as j, createUserMessage as k, createAssistantMessage as l, createToolMessage as m, createToolCall as n, hasToolCalls as o, parseToolCallArgs as p, isToolResult as q, type ListThreadsResult as r };