paprflare-sdk 0.0.13 → 0.0.15

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.
package/dist/index.d.mts CHANGED
@@ -7,12 +7,35 @@ import EventEmitter from 'eventemitter3';
7
7
  interface DatabaseAdapter {
8
8
  createConversation(userId: string, metadata?: Record<string, unknown>): Promise<string>;
9
9
  getConversation(conversationId: string): Promise<Conversation | null>;
10
- listConversations(userId: string, limit?: number): Promise<Conversation[]>;
10
+ listConversations(userId: string, limit?: number, offset?: number): Promise<Conversation[]>;
11
+ updateConversation(conversationId: string, updates: Partial<Conversation>): Promise<void>;
11
12
  deleteConversation(conversationId: string): Promise<void>;
13
+ deleteAllConversations(userId: string): Promise<void>;
14
+ countConversations(userId: string): Promise<number>;
15
+ conversationExists(conversationId: string): Promise<boolean>;
16
+ searchConversations(userId: string, query: string): Promise<Conversation[]>;
12
17
  saveMessage(conversationId: string, message: Message): Promise<void>;
13
- getMessages(conversationId: string, limit?: number): Promise<Message[]>;
18
+ saveManyMessages(conversationId: string, messages: Message[]): Promise<void>;
19
+ getMessage(messageId: string): Promise<Message | null>;
20
+ getMessages(conversationId: string, limit?: number, offset?: number): Promise<Message[]>;
21
+ getMessagesByRole(conversationId: string, role: Message['role']): Promise<Message[]>;
14
22
  updateMessage(messageId: string, updates: Partial<Message>): Promise<void>;
23
+ deleteMessage(messageId: string): Promise<void>;
24
+ deleteAllMessages(conversationId: string): Promise<void>;
25
+ countMessages(conversationId: string): Promise<number>;
26
+ getLastMessage(conversationId: string): Promise<Message | null>;
27
+ searchMessages(conversationId: string, query: string): Promise<Message[]>;
15
28
  updateConversationMetadata(conversationId: string, metadata: Record<string, unknown>): Promise<void>;
29
+ getConversationMetadata(conversationId: string): Promise<Record<string, unknown> | null>;
30
+ deleteConversationMetadata(conversationId: string, keys: string[]): Promise<void>;
31
+ userExists(userId: string): Promise<boolean>;
32
+ deleteUser(userId: string): Promise<void>;
33
+ exportConversation(conversationId: string): Promise<ConversationExport>;
34
+ importConversation(userId: string, data: ConversationExport): Promise<string>;
35
+ connect(): Promise<void>;
36
+ disconnect(): Promise<void>;
37
+ healthCheck(): Promise<boolean>;
38
+ purge(): Promise<void>;
16
39
  }
17
40
  interface Conversation {
18
41
  id: string;
@@ -22,6 +45,11 @@ interface Conversation {
22
45
  createdAt: Date;
23
46
  updatedAt: Date;
24
47
  }
48
+ interface ConversationExport {
49
+ conversation: Conversation;
50
+ messages: Message[];
51
+ exportedAt: Date;
52
+ }
25
53
 
26
54
  /**
27
55
  * Drizzle ORM adapter
@@ -30,14 +58,37 @@ declare class DrizzleAdapter implements DatabaseAdapter {
30
58
  private db;
31
59
  private schema;
32
60
  constructor(db: any, schema: any);
61
+ connect(): Promise<void>;
62
+ disconnect(): Promise<void>;
63
+ healthCheck(): Promise<boolean>;
64
+ purge(): Promise<void>;
33
65
  createConversation(userId: string, metadata?: Record<string, unknown>): Promise<string>;
34
66
  getConversation(conversationId: string): Promise<Conversation | null>;
35
- listConversations(userId: string, limit?: number): Promise<Conversation[]>;
67
+ listConversations(userId: string, limit?: number, offset?: number): Promise<Conversation[]>;
68
+ updateConversation(conversationId: string, updates: Partial<Conversation>): Promise<void>;
36
69
  deleteConversation(conversationId: string): Promise<void>;
70
+ deleteAllConversations(userId: string): Promise<void>;
71
+ countConversations(userId: string): Promise<number>;
72
+ conversationExists(conversationId: string): Promise<boolean>;
73
+ searchConversations(userId: string, query: string): Promise<Conversation[]>;
37
74
  saveMessage(conversationId: string, message: Message): Promise<void>;
38
- getMessages(conversationId: string, limit?: number): Promise<Message[]>;
75
+ saveManyMessages(conversationId: string, messages: Message[]): Promise<void>;
76
+ getMessage(messageId: string): Promise<Message | null>;
77
+ getMessages(conversationId: string, limit?: number, offset?: number): Promise<Message[]>;
78
+ getMessagesByRole(conversationId: string, role: Message['role']): Promise<Message[]>;
39
79
  updateMessage(messageId: string, updates: Partial<Message>): Promise<void>;
80
+ deleteMessage(messageId: string): Promise<void>;
81
+ deleteAllMessages(conversationId: string): Promise<void>;
82
+ countMessages(conversationId: string): Promise<number>;
83
+ getLastMessage(conversationId: string): Promise<Message | null>;
84
+ searchMessages(conversationId: string, query: string): Promise<Message[]>;
40
85
  updateConversationMetadata(conversationId: string, metadata: Record<string, unknown>): Promise<void>;
86
+ getConversationMetadata(conversationId: string): Promise<Record<string, unknown> | null>;
87
+ deleteConversationMetadata(conversationId: string, keys: string[]): Promise<void>;
88
+ userExists(userId: string): Promise<boolean>;
89
+ deleteUser(userId: string): Promise<void>;
90
+ exportConversation(conversationId: string): Promise<ConversationExport>;
91
+ importConversation(userId: string, data: ConversationExport): Promise<string>;
41
92
  }
42
93
 
43
94
  /**
@@ -46,11 +97,37 @@ declare class DrizzleAdapter implements DatabaseAdapter {
46
97
  declare class DatabaseManager {
47
98
  private adapter;
48
99
  constructor(adapter: DatabaseAdapter);
49
- startConversation(userId: string, systemPrompt?: string): Promise<string>;
50
- addMessage(conversationId: string, message: Message): Promise<void>;
51
- getConversationHistory(conversationId: string, limit?: number): Promise<Message[]>;
100
+ connect(): Promise<void>;
101
+ disconnect(): Promise<void>;
102
+ healthCheck(): Promise<boolean>;
103
+ purge(): Promise<void>;
104
+ create(userId: string, systemPrompt?: string): Promise<string>;
105
+ getConversation(conversationId: string): Promise<Conversation | null>;
106
+ listConversations(userId: string, limit?: number, offset?: number): Promise<Conversation[]>;
107
+ updateConversation(conversationId: string, updates: Partial<Conversation>): Promise<void>;
52
108
  deleteConversation(conversationId: string): Promise<void>;
53
- getUserConversations(userId: string): Promise<Conversation[]>;
109
+ deleteAllConversations(userId: string): Promise<void>;
110
+ countConversations(userId: string): Promise<number>;
111
+ conversationExists(conversationId: string): Promise<boolean>;
112
+ searchConversations(userId: string, query: string): Promise<Conversation[]>;
113
+ addMessage(conversationId: string, message: Message): Promise<void>;
114
+ addManyMessages(conversationId: string, messages: Message[]): Promise<void>;
115
+ getMessage(messageId: string): Promise<Message | null>;
116
+ getConversationHistory(conversationId: string, limit?: number, offset?: number): Promise<Message[]>;
117
+ getMessagesByRole(conversationId: string, role: Message['role']): Promise<Message[]>;
118
+ updateMessage(messageId: string, updates: Partial<Message>): Promise<void>;
119
+ deleteMessage(messageId: string): Promise<void>;
120
+ deleteAllMessages(conversationId: string): Promise<void>;
121
+ countMessages(conversationId: string): Promise<number>;
122
+ getLastMessage(conversationId: string): Promise<Message | null>;
123
+ searchMessages(conversationId: string, query: string): Promise<Message[]>;
124
+ updateConversationMetadata(conversationId: string, metadata: Record<string, unknown>): Promise<void>;
125
+ getConversationMetadata(conversationId: string): Promise<Record<string, unknown> | null>;
126
+ deleteConversationMetadata(conversationId: string, keys: string[]): Promise<void>;
127
+ userExists(userId: string): Promise<boolean>;
128
+ deleteUser(userId: string): Promise<void>;
129
+ exportConversation(conversationId: string): Promise<ConversationExport>;
130
+ importConversation(userId: string, data: ConversationExport): Promise<string>;
54
131
  }
55
132
 
56
133
  /**
@@ -59,14 +136,37 @@ declare class DatabaseManager {
59
136
  declare class MemoryAdapter implements DatabaseAdapter {
60
137
  private conversations;
61
138
  private messages;
139
+ connect(): Promise<void>;
140
+ disconnect(): Promise<void>;
141
+ healthCheck(): Promise<boolean>;
142
+ purge(): Promise<void>;
62
143
  createConversation(userId: string, metadata?: Record<string, unknown>): Promise<string>;
63
144
  getConversation(conversationId: string): Promise<Conversation | null>;
64
- listConversations(userId: string, limit?: number): Promise<Conversation[]>;
145
+ listConversations(userId: string, limit?: number, offset?: number): Promise<Conversation[]>;
146
+ updateConversation(conversationId: string, updates: Partial<Conversation>): Promise<void>;
65
147
  deleteConversation(conversationId: string): Promise<void>;
148
+ deleteAllConversations(userId: string): Promise<void>;
149
+ countConversations(userId: string): Promise<number>;
150
+ conversationExists(conversationId: string): Promise<boolean>;
151
+ searchConversations(userId: string, query: string): Promise<Conversation[]>;
66
152
  saveMessage(conversationId: string, message: Message): Promise<void>;
67
- getMessages(conversationId: string, limit?: number): Promise<Message[]>;
153
+ saveManyMessages(conversationId: string, messages: Message[]): Promise<void>;
154
+ getMessage(messageId: string): Promise<Message | null>;
155
+ getMessages(conversationId: string, limit?: number, offset?: number): Promise<Message[]>;
156
+ getMessagesByRole(conversationId: string, role: Message['role']): Promise<Message[]>;
68
157
  updateMessage(messageId: string, updates: Partial<Message>): Promise<void>;
158
+ deleteMessage(messageId: string): Promise<void>;
159
+ deleteAllMessages(conversationId: string): Promise<void>;
160
+ countMessages(conversationId: string): Promise<number>;
161
+ getLastMessage(conversationId: string): Promise<Message | null>;
162
+ searchMessages(conversationId: string, query: string): Promise<Message[]>;
69
163
  updateConversationMetadata(conversationId: string, metadata: Record<string, unknown>): Promise<void>;
164
+ getConversationMetadata(conversationId: string): Promise<Record<string, unknown> | null>;
165
+ deleteConversationMetadata(conversationId: string, keys: string[]): Promise<void>;
166
+ userExists(userId: string): Promise<boolean>;
167
+ deleteUser(userId: string): Promise<void>;
168
+ exportConversation(conversationId: string): Promise<ConversationExport>;
169
+ importConversation(userId: string, data: ConversationExport): Promise<string>;
70
170
  }
71
171
 
72
172
  /**
@@ -75,14 +175,38 @@ declare class MemoryAdapter implements DatabaseAdapter {
75
175
  declare class PrismaAdapter implements DatabaseAdapter {
76
176
  private prisma;
77
177
  constructor(prisma: any);
178
+ connect(): Promise<void>;
179
+ disconnect(): Promise<void>;
180
+ healthCheck(): Promise<boolean>;
181
+ purge(): Promise<void>;
78
182
  createConversation(userId: string, metadata?: Record<string, unknown>): Promise<string>;
79
183
  getConversation(conversationId: string): Promise<Conversation | null>;
80
- listConversations(userId: string, limit?: number): Promise<Conversation[]>;
184
+ listConversations(userId: string, limit?: number, offset?: number): Promise<Conversation[]>;
185
+ updateConversation(conversationId: string, updates: Partial<Conversation>): Promise<void>;
81
186
  deleteConversation(conversationId: string): Promise<void>;
187
+ deleteAllConversations(userId: string): Promise<void>;
188
+ countConversations(userId: string): Promise<number>;
189
+ conversationExists(conversationId: string): Promise<boolean>;
190
+ searchConversations(userId: string, query: string): Promise<Conversation[]>;
191
+ private toMessage;
82
192
  saveMessage(conversationId: string, message: Message): Promise<void>;
83
- getMessages(conversationId: string, limit?: number): Promise<Message[]>;
193
+ saveManyMessages(conversationId: string, messages: Message[]): Promise<void>;
194
+ getMessage(messageId: string): Promise<Message | null>;
195
+ getMessages(conversationId: string, limit?: number, offset?: number): Promise<Message[]>;
196
+ getMessagesByRole(conversationId: string, role: Message['role']): Promise<Message[]>;
84
197
  updateMessage(messageId: string, updates: Partial<Message>): Promise<void>;
198
+ deleteMessage(messageId: string): Promise<void>;
199
+ deleteAllMessages(conversationId: string): Promise<void>;
200
+ countMessages(conversationId: string): Promise<number>;
201
+ getLastMessage(conversationId: string): Promise<Message | null>;
202
+ searchMessages(conversationId: string, query: string): Promise<Message[]>;
85
203
  updateConversationMetadata(conversationId: string, metadata: Record<string, unknown>): Promise<void>;
204
+ getConversationMetadata(conversationId: string): Promise<Record<string, unknown> | null>;
205
+ deleteConversationMetadata(conversationId: string, keys: string[]): Promise<void>;
206
+ userExists(userId: string): Promise<boolean>;
207
+ deleteUser(userId: string): Promise<void>;
208
+ exportConversation(conversationId: string): Promise<ConversationExport>;
209
+ importConversation(userId: string, data: ConversationExport): Promise<string>;
86
210
  }
87
211
 
88
212
  interface Message {
@@ -341,9 +465,7 @@ interface ChatState {
341
465
  */
342
466
  interface UsePaprFlareConfig {
343
467
  apiEndpoint: string;
344
- apiKey?: string;
345
468
  headers?: Record<string, string>;
346
- defaultConfig?: Partial<ChatConfig>;
347
469
  onError?: (error: Error) => void;
348
470
  onComplete?: (message: Message) => void;
349
471
  onArtifact?: (artifact: Artifact) => void;
@@ -451,29 +573,163 @@ interface Thread {
451
573
  messages: Message[];
452
574
  config?: ChatConfig;
453
575
  metadata: Record<string, unknown>;
576
+ tags: string[];
577
+ title?: string;
454
578
  createdAt: number;
455
579
  updatedAt: number;
456
- status: 'active' | 'paused' | 'completed' | 'error';
580
+ lastActiveAt: number;
581
+ status: 'active' | 'paused' | 'completed' | 'error' | 'archived';
582
+ priority: 'low' | 'normal' | 'high';
583
+ messageCount: number;
584
+ tokenCount?: number;
585
+ errorCount: number;
586
+ lastError?: string;
587
+ }
588
+ /**
589
+ * Thread filter options
590
+ */
591
+ interface ThreadFilter {
592
+ status?: Thread['status'] | Thread['status'][];
593
+ priority?: Thread['priority'];
594
+ tags?: string[];
595
+ createdAfter?: number;
596
+ createdBefore?: number;
597
+ updatedAfter?: number;
598
+ search?: string;
599
+ }
600
+ /**
601
+ * Thread sort options
602
+ */
603
+ interface ThreadSortOptions {
604
+ field: 'createdAt' | 'updatedAt' | 'lastActiveAt' | 'messageCount' | 'priority';
605
+ direction: 'asc' | 'desc';
606
+ }
607
+ /**
608
+ * Thread pagination options
609
+ */
610
+ interface ThreadPaginationOptions {
611
+ limit?: number;
612
+ offset?: number;
613
+ sort?: ThreadSortOptions;
614
+ }
615
+ /**
616
+ * Thread statistics
617
+ */
618
+ interface ThreadStats {
619
+ total: number;
620
+ active: number;
621
+ paused: number;
622
+ completed: number;
623
+ error: number;
624
+ archived: number;
625
+ totalMessages: number;
626
+ totalTokens: number;
627
+ averageMessagesPerThread: number;
628
+ oldestThread?: number;
629
+ newestThread?: number;
630
+ }
631
+ /**
632
+ * Thread export format
633
+ */
634
+ interface ThreadExport {
635
+ thread: Thread;
636
+ messages: Message[];
637
+ exportedAt: number;
638
+ version: string;
457
639
  }
458
640
  /**
459
641
  * Thread events
460
642
  */
461
643
  type ThreadEvent = {
644
+ type: 'thread-created';
645
+ threadId: string;
646
+ thread: Thread;
647
+ } | {
648
+ type: 'thread-deleted';
649
+ threadId: string;
650
+ } | {
651
+ type: 'thread-archived';
652
+ threadId: string;
653
+ } | {
654
+ type: 'thread-restored';
655
+ threadId: string;
656
+ } | {
657
+ type: 'thread-cleared';
658
+ threadId: string;
659
+ } | {
660
+ type: 'thread-merged';
661
+ threadId: string;
662
+ sourceThreadId: string;
663
+ } | {
664
+ type: 'thread-forked';
665
+ threadId: string;
666
+ parentThreadId: string;
667
+ } | {
462
668
  type: 'message-added';
463
669
  threadId: string;
464
670
  message: Message;
671
+ } | {
672
+ type: 'message-updated';
673
+ threadId: string;
674
+ messageId: string;
675
+ updates: Partial<Message>;
676
+ } | {
677
+ type: 'message-deleted';
678
+ threadId: string;
679
+ messageId: string;
680
+ } | {
681
+ type: 'messages-cleared';
682
+ threadId: string;
683
+ } | {
684
+ type: 'stream-started';
685
+ threadId: string;
465
686
  } | {
466
687
  type: 'stream-event';
467
688
  threadId: string;
468
689
  event: StreamEvent;
690
+ } | {
691
+ type: 'stream-completed';
692
+ threadId: string;
693
+ message: Message;
694
+ } | {
695
+ type: 'stream-error';
696
+ threadId: string;
697
+ error: Error;
469
698
  } | {
470
699
  type: 'status-changed';
471
700
  threadId: string;
472
701
  status: Thread['status'];
702
+ previousStatus: Thread['status'];
703
+ } | {
704
+ type: 'priority-changed';
705
+ threadId: string;
706
+ priority: Thread['priority'];
707
+ } | {
708
+ type: 'metadata-updated';
709
+ threadId: string;
710
+ metadata: Record<string, unknown>;
711
+ } | {
712
+ type: 'tags-updated';
713
+ threadId: string;
714
+ tags: string[];
715
+ } | {
716
+ type: 'title-updated';
717
+ threadId: string;
718
+ title: string;
719
+ } | {
720
+ type: 'config-updated';
721
+ threadId: string;
722
+ config: ChatConfig;
473
723
  } | {
474
724
  type: 'error';
475
725
  threadId: string;
476
726
  error: Error;
727
+ } | {
728
+ type: 'cleanup';
729
+ deletedCount: number;
730
+ } | {
731
+ type: 'pool-stats';
732
+ stats: ThreadStats;
477
733
  };
478
734
 
479
735
  /**
@@ -482,79 +738,157 @@ type ThreadEvent = {
482
738
  */
483
739
  declare class ThreadManager extends EventEmitter {
484
740
  private client;
485
- private threads;
741
+ threads: Map<string, Thread>;
486
742
  constructor(client: PaprFlare);
743
+ createThread(userId: string, config?: ChatConfig, metadata?: Record<string, unknown>, options?: {
744
+ title?: string;
745
+ tags?: string[];
746
+ priority?: Thread['priority'];
747
+ }): Promise<string>;
487
748
  /**
488
- * Create a new thread
749
+ * Fork a thread — creates a new thread with a copy of messages up to a given point
489
750
  */
490
- createThread(userId: string, config?: ChatConfig, metadata?: Record<string, unknown>): Promise<string>;
751
+ forkThread(threadId: string, upToMessageId?: string): Promise<string>;
491
752
  /**
492
- * Get thread by ID
753
+ * Merge another thread's messages into this thread
493
754
  */
755
+ mergeThread(targetThreadId: string, sourceThreadId: string): Promise<void>;
494
756
  getThread(threadId: string): Thread | null;
757
+ threadExists(threadId: string): boolean;
758
+ getUserThreads(userId: string, options?: ThreadPaginationOptions): Thread[];
759
+ filterThreads(userId: string, filter: ThreadFilter, options?: ThreadPaginationOptions): Thread[];
760
+ countThreads(userId: string, filter?: ThreadFilter): number;
761
+ updateThreadStatus(threadId: string, status: Thread['status']): void;
762
+ updateThreadPriority(threadId: string, priority: Thread['priority']): void;
763
+ updateThreadMetadata(threadId: string, metadata: Record<string, unknown>): void;
764
+ setThreadTitle(threadId: string, title: string): void;
765
+ updateThreadConfig(threadId: string, config: Partial<ChatConfig>): void;
766
+ addTags(threadId: string, tags: string[]): void;
767
+ removeTags(threadId: string, tags: string[]): void;
768
+ setTags(threadId: string, tags: string[]): void;
769
+ addMessage(threadId: string, message: Message): Promise<void>;
770
+ addManyMessages(threadId: string, messages: Message[]): Promise<void>;
771
+ getMessage(threadId: string, messageId: string): Message | null;
772
+ getMessages(threadId: string, options?: {
773
+ limit?: number;
774
+ offset?: number;
775
+ role?: Message['role'];
776
+ }): Message[];
777
+ getLastMessage(threadId: string): Message | null;
778
+ updateMessage(threadId: string, messageId: string, updates: Partial<Message>): void;
779
+ deleteMessage(threadId: string, messageId: string): void;
780
+ searchMessages(threadId: string, query: string): Message[];
781
+ clearThread(threadId: string): void;
782
+ trimThread(threadId: string, keepLast: number): void;
783
+ archiveThread(threadId: string): void;
784
+ restoreThread(threadId: string): void;
785
+ pauseThread(threadId: string): void;
786
+ resumeThread(threadId: string): void;
787
+ completeThread(threadId: string): void;
788
+ markThreadError(threadId: string, error: Error): void;
789
+ deleteThread(threadId: string): void;
790
+ deleteAllThreads(userId: string): void;
791
+ getStats(userId?: string): ThreadStats;
792
+ exportThread(threadId: string): ThreadExport;
793
+ importThread(userId: string, data: ThreadExport): string;
794
+ cleanup(maxAge?: number): void;
795
+ private requireThread;
796
+ private sortThreads;
797
+ }
798
+
799
+ /**
800
+ * Thread pool for managing multiple threads across multiple users efficiently
801
+ */
802
+ declare class ThreadPool {
803
+ private client;
804
+ private managers;
805
+ constructor(client: PaprFlare);
495
806
  /**
496
- * List all threads for a user
807
+ * Get or create a thread manager for a user
497
808
  */
498
- getUserThreads(userId: string): Thread[];
809
+ getManager(userId: string): ThreadManager;
499
810
  /**
500
- * Add message to thread
811
+ * Check if a manager exists for a user
501
812
  */
502
- addMessage(threadId: string, message: Message): Promise<void>;
813
+ hasManager(userId: string): boolean;
503
814
  /**
504
- * Delete a thread
815
+ * Remove and destroy a user's thread manager
505
816
  */
506
- deleteThread(threadId: string): void;
817
+ removeManager(userId: string): void;
507
818
  /**
508
- * Clear all messages in a thread
819
+ * List all user IDs that have active managers
509
820
  */
510
- clearThread(threadId: string): void;
821
+ listUsers(): string[];
511
822
  /**
512
- * Update thread status
823
+ * Total number of managers (users) in the pool
513
824
  */
514
- private updateThreadStatus;
825
+ managerCount(): number;
515
826
  /**
516
- * Update thread metadata
827
+ * Get all threads across all users
517
828
  */
518
- updateThreadMetadata(threadId: string, metadata: Record<string, unknown>): void;
829
+ getAllThreads(): Thread[];
519
830
  /**
520
- * Get thread statistics
831
+ * Get all active threads across all users
521
832
  */
522
- getStats(): {
523
- total: number;
524
- active: number;
525
- paused: number;
526
- completed: number;
527
- error: number;
528
- };
833
+ getAllActiveThreads(): Thread[];
529
834
  /**
530
- * Cleanup inactive threads
835
+ * Get all threads matching a filter across all users
531
836
  */
532
- cleanup(maxAge?: number): void;
533
- }
534
-
535
- /**
536
- * Thread pool for managing multiple threads efficiently
537
- */
538
- declare class ThreadPool {
539
- private client;
540
- private managers;
541
- constructor(client: PaprFlare);
837
+ findThreads(filter: ThreadFilter, options?: ThreadPaginationOptions): Thread[];
542
838
  /**
543
- * Get or create thread manager for a user
839
+ * Find a specific thread by ID across all users
544
840
  */
545
- getManager(userId: string): ThreadManager;
841
+ findThread(threadId: string): Thread | null;
546
842
  /**
547
- * Remove thread manager for a user
843
+ * Find which user owns a thread
548
844
  */
549
- removeManager(userId: string): void;
845
+ findThreadOwner(threadId: string): string | null;
550
846
  /**
551
- * Get all active threads across all users
847
+ * Aggregate stats across all users
552
848
  */
553
- getAllActiveThreads(): Thread[];
849
+ getGlobalStats(): ThreadStats & {
850
+ userCount: number;
851
+ };
852
+ /**
853
+ * Get per-user stats summary
854
+ */
855
+ getUserStats(): Record<string, ThreadStats>;
554
856
  /**
555
- * Cleanup all inactive threads
857
+ * Total thread count across all users
858
+ */
859
+ totalThreadCount(): number;
860
+ /**
861
+ * Cleanup inactive threads across all managers
556
862
  */
557
863
  cleanupAll(maxAge?: number): void;
864
+ /**
865
+ * Archive all completed or errored threads older than maxAge
866
+ */
867
+ archiveStale(maxAge?: number): number;
868
+ /**
869
+ * Delete all threads and managers for a user
870
+ */
871
+ deleteUser(userId: string): void;
872
+ /**
873
+ * Delete all threads and managers across the entire pool
874
+ */
875
+ purge(): void;
876
+ /**
877
+ * Export a thread by ID, searching across all managers
878
+ */
879
+ exportThread(threadId: string): ThreadExport | null;
880
+ /**
881
+ * Import a thread for a user
882
+ */
883
+ importThread(userId: string, data: ThreadExport): string;
884
+ /**
885
+ * Export all threads for a user
886
+ */
887
+ exportUserThreads(userId: string): ThreadExport[];
888
+ /**
889
+ * Import multiple threads for a user
890
+ */
891
+ importUserThreads(userId: string, exports: ThreadExport[]): string[];
558
892
  }
559
893
 
560
894
  /**
@@ -771,7 +1105,6 @@ declare function createOpenAIProvider(config: OpenAIConfig): ProviderCallback;
771
1105
 
772
1106
  interface SarvamConfig extends ProviderConfig {
773
1107
  model?: string;
774
- language?: 'hi' | 'en' | 'ta' | 'te' | 'ml' | 'kn' | 'mr' | 'gu' | 'bn' | 'pa';
775
1108
  }
776
1109
  /**
777
1110
  * Sarvam AI provider - Indian multilingual LLM
@@ -1158,4 +1491,4 @@ declare function streamToConsole(stream: AsyncGenerator<StreamEvent>, options?:
1158
1491
  */
1159
1492
  declare function toHTTPResponse(stream: AsyncGenerator<StreamEvent>, target?: any): Promise<Response | void>;
1160
1493
 
1161
- export { type AnthropicConfig, AnthropicProvider, type Artifact, type ArtifactMetadata, type CacheConfig, CacheManager, type CacheOptions, type ChatConfig, type ChatOptions, type ChatResponse, type ChatState, type CloudModeConfig, type CommonConfig, type Conversation, type DatabaseAdapter, DatabaseManager, DrizzleAdapter, type GoogleConfig, GoogleProvider, type ICache, MemoryAdapter, MemoryCache, type Message, type OpenAIConfig, OpenAIProvider, PaprFlare, type PaprFlareConfig, PaprFlareError, PrismaAdapter, type ProviderCallback, type ProviderConfig, ProviderError, RateLimitError, RedisCache, type SarvamConfig, SarvamProvider, type SelfManagedConfig, type StreamEvent, type StreamHandlers, StreamWriter, type StreamingChatResponse, type Thread, type ThreadEvent, ThreadManager, ThreadPool, type TokenUsage, type Tool, type ToolCall, type ToolResult, type UIMessage, type UIStreamEvent, type UsePaprFlareConfig, ValidationError, batchStream, chunk, collectStream, collectText, createAnthropicProvider, createCacheKey, createGoogleProvider, createOpenAIProvider, createSarvamProvider, createStreamWriter, createUIMessageStream, debounce, deepMerge, filterStream, formatMessages, generateId, isPlainObject, measureTime, mergeStreams, parseSSEStream, pipeToResponse, processStream, retry, safeJsonParse, sleep, streamToArray, streamToConsole, structuredOutput, takeStream, throttle, toHTTPResponse, toReadableStream, toUIStream, transformStream };
1494
+ export { type AnthropicConfig, AnthropicProvider, type Artifact, type ArtifactMetadata, type CacheConfig, CacheManager, type CacheOptions, type ChatConfig, type ChatOptions, type ChatResponse, type ChatState, type CloudModeConfig, type CommonConfig, type Conversation, type ConversationExport, type DatabaseAdapter, DatabaseManager, DrizzleAdapter, type GoogleConfig, GoogleProvider, type ICache, MemoryAdapter, MemoryCache, type Message, type OpenAIConfig, OpenAIProvider, PaprFlare, type PaprFlareConfig, PaprFlareError, PrismaAdapter, type ProviderCallback, type ProviderConfig, ProviderError, RateLimitError, RedisCache, type SarvamConfig, SarvamProvider, type SelfManagedConfig, type StreamEvent, type StreamHandlers, StreamWriter, type StreamingChatResponse, type Thread, type ThreadEvent, type ThreadExport, type ThreadFilter, ThreadManager, type ThreadPaginationOptions, ThreadPool, type ThreadSortOptions, type ThreadStats, type TokenUsage, type Tool, type ToolCall, type ToolResult, type UIMessage, type UIStreamEvent, type UsePaprFlareConfig, ValidationError, batchStream, chunk, collectStream, collectText, createAnthropicProvider, createCacheKey, createGoogleProvider, createOpenAIProvider, createSarvamProvider, createStreamWriter, createUIMessageStream, debounce, deepMerge, filterStream, formatMessages, generateId, isPlainObject, measureTime, mergeStreams, parseSSEStream, pipeToResponse, processStream, retry, safeJsonParse, sleep, streamToArray, streamToConsole, structuredOutput, takeStream, throttle, toHTTPResponse, toReadableStream, toUIStream, transformStream };