@huyooo/ai-chat-storage 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.
@@ -0,0 +1,1378 @@
1
+ import * as drizzle_orm_sqlite_core from 'drizzle-orm/sqlite-core';
2
+
3
+ /**
4
+ * 存储层类型定义
5
+ */
6
+ interface StorageContext {
7
+ /** 租户 ID(多租户模式) */
8
+ appId?: string;
9
+ /** 用户 ID(多用户模式) */
10
+ userId?: string;
11
+ }
12
+ interface SessionRecord {
13
+ id: string;
14
+ appId: string | null;
15
+ userId: string | null;
16
+ title: string;
17
+ model: string;
18
+ mode: 'agent' | 'plan' | 'ask';
19
+ createdAt: Date;
20
+ updatedAt: Date;
21
+ }
22
+ type CreateSessionInput = Omit<SessionRecord, 'createdAt' | 'updatedAt' | 'appId' | 'userId'>;
23
+ type UpdateSessionInput = Partial<Pick<SessionRecord, 'title' | 'model' | 'mode'>>;
24
+ interface MessageRecord {
25
+ id: string;
26
+ sessionId: string;
27
+ appId: string | null;
28
+ userId: string | null;
29
+ role: 'user' | 'assistant';
30
+ content: string;
31
+ thinking: string | null;
32
+ toolCalls: string | null;
33
+ searchResults: string | null;
34
+ operationIds: string | null;
35
+ timestamp: Date;
36
+ }
37
+ type CreateMessageInput = Omit<MessageRecord, 'timestamp' | 'appId' | 'userId'>;
38
+ type OperationStatus = 'pending' | 'confirmed' | 'executed' | 'reverted' | 'failed';
39
+ interface OperationRecord {
40
+ id: string;
41
+ sessionId: string;
42
+ messageId: string | null;
43
+ appId: string | null;
44
+ userId: string | null;
45
+ command: string;
46
+ operationType: string;
47
+ affectedFiles: string;
48
+ backupPath: string | null;
49
+ status: OperationStatus;
50
+ errorMessage: string | null;
51
+ timestamp: Date;
52
+ }
53
+ type CreateOperationInput = Omit<OperationRecord, 'timestamp' | 'appId' | 'userId' | 'status' | 'errorMessage'> & {
54
+ status?: OperationStatus;
55
+ };
56
+ interface BackupRecord {
57
+ id: string;
58
+ operationId: string;
59
+ originalPath: string;
60
+ backupPath: string;
61
+ fileSize: number;
62
+ fileHash: string;
63
+ createdAt: Date;
64
+ expiresAt: Date;
65
+ }
66
+ interface TrashRecord {
67
+ id: string;
68
+ sessionId: string;
69
+ appId: string | null;
70
+ userId: string | null;
71
+ originalPath: string;
72
+ trashPath: string;
73
+ deletedAt: Date;
74
+ autoDeleteAt: Date;
75
+ }
76
+ interface EmbeddingRecord {
77
+ id: string;
78
+ sessionId: string;
79
+ messageId: string | null;
80
+ appId: string | null;
81
+ userId: string | null;
82
+ content: string;
83
+ contentType: 'message' | 'file' | 'summary';
84
+ embedding: number[];
85
+ metadata: string | null;
86
+ createdAt: Date;
87
+ }
88
+ interface VectorSearchResult {
89
+ id: string;
90
+ content: string;
91
+ contentType: string;
92
+ similarity: number;
93
+ metadata?: Record<string, unknown>;
94
+ }
95
+ interface VectorSearchOptions {
96
+ limit?: number;
97
+ threshold?: number;
98
+ sessionId?: string;
99
+ }
100
+ interface StorageAdapter {
101
+ getSessions(ctx: StorageContext): Promise<SessionRecord[]>;
102
+ getSession(id: string, ctx: StorageContext): Promise<SessionRecord | null>;
103
+ createSession(session: CreateSessionInput, ctx: StorageContext): Promise<SessionRecord>;
104
+ updateSession(id: string, data: UpdateSessionInput, ctx: StorageContext): Promise<void>;
105
+ deleteSession(id: string, ctx: StorageContext): Promise<void>;
106
+ getMessages(sessionId: string, ctx: StorageContext): Promise<MessageRecord[]>;
107
+ getMessage(id: string, ctx: StorageContext): Promise<MessageRecord | null>;
108
+ saveMessage(message: CreateMessageInput, ctx: StorageContext): Promise<MessageRecord>;
109
+ deleteMessagesAfter(sessionId: string, timestamp: Date, ctx: StorageContext): Promise<void>;
110
+ getOperations(sessionId: string, ctx: StorageContext): Promise<OperationRecord[]>;
111
+ getOperationsByMessage(messageId: string, ctx: StorageContext): Promise<OperationRecord[]>;
112
+ saveOperation(operation: CreateOperationInput, ctx: StorageContext): Promise<OperationRecord>;
113
+ updateOperationStatus(id: string, status: OperationStatus, errorMessage?: string): Promise<void>;
114
+ getBackups?(operationId: string): Promise<BackupRecord[]>;
115
+ saveBackup?(backup: Omit<BackupRecord, 'createdAt'>): Promise<BackupRecord>;
116
+ deleteExpiredBackups?(): Promise<number>;
117
+ getTrashItems?(ctx: StorageContext): Promise<TrashRecord[]>;
118
+ moveToTrash?(item: Omit<TrashRecord, 'deletedAt' | 'autoDeleteAt' | 'appId' | 'userId'>, ctx: StorageContext): Promise<TrashRecord>;
119
+ restoreFromTrash?(id: string, ctx: StorageContext): Promise<TrashRecord>;
120
+ emptyExpiredTrash?(): Promise<number>;
121
+ saveEmbedding?(id: string, content: string, embedding: number[], metadata: {
122
+ sessionId: string;
123
+ messageId?: string;
124
+ contentType: EmbeddingRecord['contentType'];
125
+ }, ctx: StorageContext): Promise<void>;
126
+ searchSimilar?(embedding: number[], options: VectorSearchOptions, ctx: StorageContext): Promise<VectorSearchResult[]>;
127
+ close(): Promise<void>;
128
+ }
129
+ interface StorageConfig {
130
+ type: 'sqlite' | 'postgres';
131
+ sqlitePath?: string;
132
+ postgresUrl?: string;
133
+ backupRetentionDays?: number;
134
+ trashRetentionDays?: number;
135
+ }
136
+
137
+ /**
138
+ * Drizzle ORM Schema 定义
139
+ * 支持 SQLite 和 PostgreSQL
140
+ */
141
+ /** 会话表 */
142
+ declare const sessions: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
143
+ name: "sessions";
144
+ schema: undefined;
145
+ columns: {
146
+ id: drizzle_orm_sqlite_core.SQLiteColumn<{
147
+ name: "id";
148
+ tableName: "sessions";
149
+ dataType: "string";
150
+ columnType: "SQLiteText";
151
+ data: string;
152
+ driverParam: string;
153
+ notNull: true;
154
+ hasDefault: false;
155
+ isPrimaryKey: true;
156
+ isAutoincrement: false;
157
+ hasRuntimeDefault: false;
158
+ enumValues: [string, ...string[]];
159
+ baseColumn: never;
160
+ identity: undefined;
161
+ generated: undefined;
162
+ }, {}, {
163
+ length: number | undefined;
164
+ }>;
165
+ appId: drizzle_orm_sqlite_core.SQLiteColumn<{
166
+ name: "app_id";
167
+ tableName: "sessions";
168
+ dataType: "string";
169
+ columnType: "SQLiteText";
170
+ data: string;
171
+ driverParam: string;
172
+ notNull: false;
173
+ hasDefault: false;
174
+ isPrimaryKey: false;
175
+ isAutoincrement: false;
176
+ hasRuntimeDefault: false;
177
+ enumValues: [string, ...string[]];
178
+ baseColumn: never;
179
+ identity: undefined;
180
+ generated: undefined;
181
+ }, {}, {
182
+ length: number | undefined;
183
+ }>;
184
+ userId: drizzle_orm_sqlite_core.SQLiteColumn<{
185
+ name: "user_id";
186
+ tableName: "sessions";
187
+ dataType: "string";
188
+ columnType: "SQLiteText";
189
+ data: string;
190
+ driverParam: string;
191
+ notNull: false;
192
+ hasDefault: false;
193
+ isPrimaryKey: false;
194
+ isAutoincrement: false;
195
+ hasRuntimeDefault: false;
196
+ enumValues: [string, ...string[]];
197
+ baseColumn: never;
198
+ identity: undefined;
199
+ generated: undefined;
200
+ }, {}, {
201
+ length: number | undefined;
202
+ }>;
203
+ title: drizzle_orm_sqlite_core.SQLiteColumn<{
204
+ name: "title";
205
+ tableName: "sessions";
206
+ dataType: "string";
207
+ columnType: "SQLiteText";
208
+ data: string;
209
+ driverParam: string;
210
+ notNull: true;
211
+ hasDefault: false;
212
+ isPrimaryKey: false;
213
+ isAutoincrement: false;
214
+ hasRuntimeDefault: false;
215
+ enumValues: [string, ...string[]];
216
+ baseColumn: never;
217
+ identity: undefined;
218
+ generated: undefined;
219
+ }, {}, {
220
+ length: number | undefined;
221
+ }>;
222
+ model: drizzle_orm_sqlite_core.SQLiteColumn<{
223
+ name: "model";
224
+ tableName: "sessions";
225
+ dataType: "string";
226
+ columnType: "SQLiteText";
227
+ data: string;
228
+ driverParam: string;
229
+ notNull: true;
230
+ hasDefault: false;
231
+ isPrimaryKey: false;
232
+ isAutoincrement: false;
233
+ hasRuntimeDefault: false;
234
+ enumValues: [string, ...string[]];
235
+ baseColumn: never;
236
+ identity: undefined;
237
+ generated: undefined;
238
+ }, {}, {
239
+ length: number | undefined;
240
+ }>;
241
+ mode: drizzle_orm_sqlite_core.SQLiteColumn<{
242
+ name: "mode";
243
+ tableName: "sessions";
244
+ dataType: "string";
245
+ columnType: "SQLiteText";
246
+ data: string;
247
+ driverParam: string;
248
+ notNull: true;
249
+ hasDefault: false;
250
+ isPrimaryKey: false;
251
+ isAutoincrement: false;
252
+ hasRuntimeDefault: false;
253
+ enumValues: [string, ...string[]];
254
+ baseColumn: never;
255
+ identity: undefined;
256
+ generated: undefined;
257
+ }, {}, {
258
+ length: number | undefined;
259
+ }>;
260
+ createdAt: drizzle_orm_sqlite_core.SQLiteColumn<{
261
+ name: "created_at";
262
+ tableName: "sessions";
263
+ dataType: "date";
264
+ columnType: "SQLiteTimestamp";
265
+ data: Date;
266
+ driverParam: number;
267
+ notNull: true;
268
+ hasDefault: false;
269
+ isPrimaryKey: false;
270
+ isAutoincrement: false;
271
+ hasRuntimeDefault: false;
272
+ enumValues: undefined;
273
+ baseColumn: never;
274
+ identity: undefined;
275
+ generated: undefined;
276
+ }, {}, {}>;
277
+ updatedAt: drizzle_orm_sqlite_core.SQLiteColumn<{
278
+ name: "updated_at";
279
+ tableName: "sessions";
280
+ dataType: "date";
281
+ columnType: "SQLiteTimestamp";
282
+ data: Date;
283
+ driverParam: number;
284
+ notNull: true;
285
+ hasDefault: false;
286
+ isPrimaryKey: false;
287
+ isAutoincrement: false;
288
+ hasRuntimeDefault: false;
289
+ enumValues: undefined;
290
+ baseColumn: never;
291
+ identity: undefined;
292
+ generated: undefined;
293
+ }, {}, {}>;
294
+ };
295
+ dialect: "sqlite";
296
+ }>;
297
+ /** 消息表 */
298
+ declare const messages: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
299
+ name: "messages";
300
+ schema: undefined;
301
+ columns: {
302
+ id: drizzle_orm_sqlite_core.SQLiteColumn<{
303
+ name: "id";
304
+ tableName: "messages";
305
+ dataType: "string";
306
+ columnType: "SQLiteText";
307
+ data: string;
308
+ driverParam: string;
309
+ notNull: true;
310
+ hasDefault: false;
311
+ isPrimaryKey: true;
312
+ isAutoincrement: false;
313
+ hasRuntimeDefault: false;
314
+ enumValues: [string, ...string[]];
315
+ baseColumn: never;
316
+ identity: undefined;
317
+ generated: undefined;
318
+ }, {}, {
319
+ length: number | undefined;
320
+ }>;
321
+ sessionId: drizzle_orm_sqlite_core.SQLiteColumn<{
322
+ name: "session_id";
323
+ tableName: "messages";
324
+ dataType: "string";
325
+ columnType: "SQLiteText";
326
+ data: string;
327
+ driverParam: string;
328
+ notNull: true;
329
+ hasDefault: false;
330
+ isPrimaryKey: false;
331
+ isAutoincrement: false;
332
+ hasRuntimeDefault: false;
333
+ enumValues: [string, ...string[]];
334
+ baseColumn: never;
335
+ identity: undefined;
336
+ generated: undefined;
337
+ }, {}, {
338
+ length: number | undefined;
339
+ }>;
340
+ appId: drizzle_orm_sqlite_core.SQLiteColumn<{
341
+ name: "app_id";
342
+ tableName: "messages";
343
+ dataType: "string";
344
+ columnType: "SQLiteText";
345
+ data: string;
346
+ driverParam: string;
347
+ notNull: false;
348
+ hasDefault: false;
349
+ isPrimaryKey: false;
350
+ isAutoincrement: false;
351
+ hasRuntimeDefault: false;
352
+ enumValues: [string, ...string[]];
353
+ baseColumn: never;
354
+ identity: undefined;
355
+ generated: undefined;
356
+ }, {}, {
357
+ length: number | undefined;
358
+ }>;
359
+ userId: drizzle_orm_sqlite_core.SQLiteColumn<{
360
+ name: "user_id";
361
+ tableName: "messages";
362
+ dataType: "string";
363
+ columnType: "SQLiteText";
364
+ data: string;
365
+ driverParam: string;
366
+ notNull: false;
367
+ hasDefault: false;
368
+ isPrimaryKey: false;
369
+ isAutoincrement: false;
370
+ hasRuntimeDefault: false;
371
+ enumValues: [string, ...string[]];
372
+ baseColumn: never;
373
+ identity: undefined;
374
+ generated: undefined;
375
+ }, {}, {
376
+ length: number | undefined;
377
+ }>;
378
+ role: drizzle_orm_sqlite_core.SQLiteColumn<{
379
+ name: "role";
380
+ tableName: "messages";
381
+ dataType: "string";
382
+ columnType: "SQLiteText";
383
+ data: string;
384
+ driverParam: string;
385
+ notNull: true;
386
+ hasDefault: false;
387
+ isPrimaryKey: false;
388
+ isAutoincrement: false;
389
+ hasRuntimeDefault: false;
390
+ enumValues: [string, ...string[]];
391
+ baseColumn: never;
392
+ identity: undefined;
393
+ generated: undefined;
394
+ }, {}, {
395
+ length: number | undefined;
396
+ }>;
397
+ content: drizzle_orm_sqlite_core.SQLiteColumn<{
398
+ name: "content";
399
+ tableName: "messages";
400
+ dataType: "string";
401
+ columnType: "SQLiteText";
402
+ data: string;
403
+ driverParam: string;
404
+ notNull: true;
405
+ hasDefault: false;
406
+ isPrimaryKey: false;
407
+ isAutoincrement: false;
408
+ hasRuntimeDefault: false;
409
+ enumValues: [string, ...string[]];
410
+ baseColumn: never;
411
+ identity: undefined;
412
+ generated: undefined;
413
+ }, {}, {
414
+ length: number | undefined;
415
+ }>;
416
+ thinking: drizzle_orm_sqlite_core.SQLiteColumn<{
417
+ name: "thinking";
418
+ tableName: "messages";
419
+ dataType: "string";
420
+ columnType: "SQLiteText";
421
+ data: string;
422
+ driverParam: string;
423
+ notNull: false;
424
+ hasDefault: false;
425
+ isPrimaryKey: false;
426
+ isAutoincrement: false;
427
+ hasRuntimeDefault: false;
428
+ enumValues: [string, ...string[]];
429
+ baseColumn: never;
430
+ identity: undefined;
431
+ generated: undefined;
432
+ }, {}, {
433
+ length: number | undefined;
434
+ }>;
435
+ toolCalls: drizzle_orm_sqlite_core.SQLiteColumn<{
436
+ name: "tool_calls";
437
+ tableName: "messages";
438
+ dataType: "string";
439
+ columnType: "SQLiteText";
440
+ data: string;
441
+ driverParam: string;
442
+ notNull: false;
443
+ hasDefault: false;
444
+ isPrimaryKey: false;
445
+ isAutoincrement: false;
446
+ hasRuntimeDefault: false;
447
+ enumValues: [string, ...string[]];
448
+ baseColumn: never;
449
+ identity: undefined;
450
+ generated: undefined;
451
+ }, {}, {
452
+ length: number | undefined;
453
+ }>;
454
+ searchResults: drizzle_orm_sqlite_core.SQLiteColumn<{
455
+ name: "search_results";
456
+ tableName: "messages";
457
+ dataType: "string";
458
+ columnType: "SQLiteText";
459
+ data: string;
460
+ driverParam: string;
461
+ notNull: false;
462
+ hasDefault: false;
463
+ isPrimaryKey: false;
464
+ isAutoincrement: false;
465
+ hasRuntimeDefault: false;
466
+ enumValues: [string, ...string[]];
467
+ baseColumn: never;
468
+ identity: undefined;
469
+ generated: undefined;
470
+ }, {}, {
471
+ length: number | undefined;
472
+ }>;
473
+ operationIds: drizzle_orm_sqlite_core.SQLiteColumn<{
474
+ name: "operation_ids";
475
+ tableName: "messages";
476
+ dataType: "string";
477
+ columnType: "SQLiteText";
478
+ data: string;
479
+ driverParam: string;
480
+ notNull: false;
481
+ hasDefault: false;
482
+ isPrimaryKey: false;
483
+ isAutoincrement: false;
484
+ hasRuntimeDefault: false;
485
+ enumValues: [string, ...string[]];
486
+ baseColumn: never;
487
+ identity: undefined;
488
+ generated: undefined;
489
+ }, {}, {
490
+ length: number | undefined;
491
+ }>;
492
+ timestamp: drizzle_orm_sqlite_core.SQLiteColumn<{
493
+ name: "timestamp";
494
+ tableName: "messages";
495
+ dataType: "date";
496
+ columnType: "SQLiteTimestamp";
497
+ data: Date;
498
+ driverParam: number;
499
+ notNull: true;
500
+ hasDefault: false;
501
+ isPrimaryKey: false;
502
+ isAutoincrement: false;
503
+ hasRuntimeDefault: false;
504
+ enumValues: undefined;
505
+ baseColumn: never;
506
+ identity: undefined;
507
+ generated: undefined;
508
+ }, {}, {}>;
509
+ };
510
+ dialect: "sqlite";
511
+ }>;
512
+ /** 操作日志表 */
513
+ declare const operations: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
514
+ name: "operations";
515
+ schema: undefined;
516
+ columns: {
517
+ id: drizzle_orm_sqlite_core.SQLiteColumn<{
518
+ name: "id";
519
+ tableName: "operations";
520
+ dataType: "string";
521
+ columnType: "SQLiteText";
522
+ data: string;
523
+ driverParam: string;
524
+ notNull: true;
525
+ hasDefault: false;
526
+ isPrimaryKey: true;
527
+ isAutoincrement: false;
528
+ hasRuntimeDefault: false;
529
+ enumValues: [string, ...string[]];
530
+ baseColumn: never;
531
+ identity: undefined;
532
+ generated: undefined;
533
+ }, {}, {
534
+ length: number | undefined;
535
+ }>;
536
+ sessionId: drizzle_orm_sqlite_core.SQLiteColumn<{
537
+ name: "session_id";
538
+ tableName: "operations";
539
+ dataType: "string";
540
+ columnType: "SQLiteText";
541
+ data: string;
542
+ driverParam: string;
543
+ notNull: true;
544
+ hasDefault: false;
545
+ isPrimaryKey: false;
546
+ isAutoincrement: false;
547
+ hasRuntimeDefault: false;
548
+ enumValues: [string, ...string[]];
549
+ baseColumn: never;
550
+ identity: undefined;
551
+ generated: undefined;
552
+ }, {}, {
553
+ length: number | undefined;
554
+ }>;
555
+ messageId: drizzle_orm_sqlite_core.SQLiteColumn<{
556
+ name: "message_id";
557
+ tableName: "operations";
558
+ dataType: "string";
559
+ columnType: "SQLiteText";
560
+ data: string;
561
+ driverParam: string;
562
+ notNull: false;
563
+ hasDefault: false;
564
+ isPrimaryKey: false;
565
+ isAutoincrement: false;
566
+ hasRuntimeDefault: false;
567
+ enumValues: [string, ...string[]];
568
+ baseColumn: never;
569
+ identity: undefined;
570
+ generated: undefined;
571
+ }, {}, {
572
+ length: number | undefined;
573
+ }>;
574
+ appId: drizzle_orm_sqlite_core.SQLiteColumn<{
575
+ name: "app_id";
576
+ tableName: "operations";
577
+ dataType: "string";
578
+ columnType: "SQLiteText";
579
+ data: string;
580
+ driverParam: string;
581
+ notNull: false;
582
+ hasDefault: false;
583
+ isPrimaryKey: false;
584
+ isAutoincrement: false;
585
+ hasRuntimeDefault: false;
586
+ enumValues: [string, ...string[]];
587
+ baseColumn: never;
588
+ identity: undefined;
589
+ generated: undefined;
590
+ }, {}, {
591
+ length: number | undefined;
592
+ }>;
593
+ userId: drizzle_orm_sqlite_core.SQLiteColumn<{
594
+ name: "user_id";
595
+ tableName: "operations";
596
+ dataType: "string";
597
+ columnType: "SQLiteText";
598
+ data: string;
599
+ driverParam: string;
600
+ notNull: false;
601
+ hasDefault: false;
602
+ isPrimaryKey: false;
603
+ isAutoincrement: false;
604
+ hasRuntimeDefault: false;
605
+ enumValues: [string, ...string[]];
606
+ baseColumn: never;
607
+ identity: undefined;
608
+ generated: undefined;
609
+ }, {}, {
610
+ length: number | undefined;
611
+ }>;
612
+ command: drizzle_orm_sqlite_core.SQLiteColumn<{
613
+ name: "command";
614
+ tableName: "operations";
615
+ dataType: "string";
616
+ columnType: "SQLiteText";
617
+ data: string;
618
+ driverParam: string;
619
+ notNull: true;
620
+ hasDefault: false;
621
+ isPrimaryKey: false;
622
+ isAutoincrement: false;
623
+ hasRuntimeDefault: false;
624
+ enumValues: [string, ...string[]];
625
+ baseColumn: never;
626
+ identity: undefined;
627
+ generated: undefined;
628
+ }, {}, {
629
+ length: number | undefined;
630
+ }>;
631
+ operationType: drizzle_orm_sqlite_core.SQLiteColumn<{
632
+ name: "operation_type";
633
+ tableName: "operations";
634
+ dataType: "string";
635
+ columnType: "SQLiteText";
636
+ data: string;
637
+ driverParam: string;
638
+ notNull: true;
639
+ hasDefault: false;
640
+ isPrimaryKey: false;
641
+ isAutoincrement: false;
642
+ hasRuntimeDefault: false;
643
+ enumValues: [string, ...string[]];
644
+ baseColumn: never;
645
+ identity: undefined;
646
+ generated: undefined;
647
+ }, {}, {
648
+ length: number | undefined;
649
+ }>;
650
+ affectedFiles: drizzle_orm_sqlite_core.SQLiteColumn<{
651
+ name: "affected_files";
652
+ tableName: "operations";
653
+ dataType: "string";
654
+ columnType: "SQLiteText";
655
+ data: string;
656
+ driverParam: string;
657
+ notNull: true;
658
+ hasDefault: false;
659
+ isPrimaryKey: false;
660
+ isAutoincrement: false;
661
+ hasRuntimeDefault: false;
662
+ enumValues: [string, ...string[]];
663
+ baseColumn: never;
664
+ identity: undefined;
665
+ generated: undefined;
666
+ }, {}, {
667
+ length: number | undefined;
668
+ }>;
669
+ backupPath: drizzle_orm_sqlite_core.SQLiteColumn<{
670
+ name: "backup_path";
671
+ tableName: "operations";
672
+ dataType: "string";
673
+ columnType: "SQLiteText";
674
+ data: string;
675
+ driverParam: string;
676
+ notNull: false;
677
+ hasDefault: false;
678
+ isPrimaryKey: false;
679
+ isAutoincrement: false;
680
+ hasRuntimeDefault: false;
681
+ enumValues: [string, ...string[]];
682
+ baseColumn: never;
683
+ identity: undefined;
684
+ generated: undefined;
685
+ }, {}, {
686
+ length: number | undefined;
687
+ }>;
688
+ status: drizzle_orm_sqlite_core.SQLiteColumn<{
689
+ name: "status";
690
+ tableName: "operations";
691
+ dataType: "string";
692
+ columnType: "SQLiteText";
693
+ data: string;
694
+ driverParam: string;
695
+ notNull: true;
696
+ hasDefault: true;
697
+ isPrimaryKey: false;
698
+ isAutoincrement: false;
699
+ hasRuntimeDefault: false;
700
+ enumValues: [string, ...string[]];
701
+ baseColumn: never;
702
+ identity: undefined;
703
+ generated: undefined;
704
+ }, {}, {
705
+ length: number | undefined;
706
+ }>;
707
+ errorMessage: drizzle_orm_sqlite_core.SQLiteColumn<{
708
+ name: "error_message";
709
+ tableName: "operations";
710
+ dataType: "string";
711
+ columnType: "SQLiteText";
712
+ data: string;
713
+ driverParam: string;
714
+ notNull: false;
715
+ hasDefault: false;
716
+ isPrimaryKey: false;
717
+ isAutoincrement: false;
718
+ hasRuntimeDefault: false;
719
+ enumValues: [string, ...string[]];
720
+ baseColumn: never;
721
+ identity: undefined;
722
+ generated: undefined;
723
+ }, {}, {
724
+ length: number | undefined;
725
+ }>;
726
+ timestamp: drizzle_orm_sqlite_core.SQLiteColumn<{
727
+ name: "timestamp";
728
+ tableName: "operations";
729
+ dataType: "date";
730
+ columnType: "SQLiteTimestamp";
731
+ data: Date;
732
+ driverParam: number;
733
+ notNull: true;
734
+ hasDefault: false;
735
+ isPrimaryKey: false;
736
+ isAutoincrement: false;
737
+ hasRuntimeDefault: false;
738
+ enumValues: undefined;
739
+ baseColumn: never;
740
+ identity: undefined;
741
+ generated: undefined;
742
+ }, {}, {}>;
743
+ };
744
+ dialect: "sqlite";
745
+ }>;
746
+ /** 备份记录表 */
747
+ declare const backups: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
748
+ name: "backups";
749
+ schema: undefined;
750
+ columns: {
751
+ id: drizzle_orm_sqlite_core.SQLiteColumn<{
752
+ name: "id";
753
+ tableName: "backups";
754
+ dataType: "string";
755
+ columnType: "SQLiteText";
756
+ data: string;
757
+ driverParam: string;
758
+ notNull: true;
759
+ hasDefault: false;
760
+ isPrimaryKey: true;
761
+ isAutoincrement: false;
762
+ hasRuntimeDefault: false;
763
+ enumValues: [string, ...string[]];
764
+ baseColumn: never;
765
+ identity: undefined;
766
+ generated: undefined;
767
+ }, {}, {
768
+ length: number | undefined;
769
+ }>;
770
+ operationId: drizzle_orm_sqlite_core.SQLiteColumn<{
771
+ name: "operation_id";
772
+ tableName: "backups";
773
+ dataType: "string";
774
+ columnType: "SQLiteText";
775
+ data: string;
776
+ driverParam: string;
777
+ notNull: true;
778
+ hasDefault: false;
779
+ isPrimaryKey: false;
780
+ isAutoincrement: false;
781
+ hasRuntimeDefault: false;
782
+ enumValues: [string, ...string[]];
783
+ baseColumn: never;
784
+ identity: undefined;
785
+ generated: undefined;
786
+ }, {}, {
787
+ length: number | undefined;
788
+ }>;
789
+ originalPath: drizzle_orm_sqlite_core.SQLiteColumn<{
790
+ name: "original_path";
791
+ tableName: "backups";
792
+ dataType: "string";
793
+ columnType: "SQLiteText";
794
+ data: string;
795
+ driverParam: string;
796
+ notNull: true;
797
+ hasDefault: false;
798
+ isPrimaryKey: false;
799
+ isAutoincrement: false;
800
+ hasRuntimeDefault: false;
801
+ enumValues: [string, ...string[]];
802
+ baseColumn: never;
803
+ identity: undefined;
804
+ generated: undefined;
805
+ }, {}, {
806
+ length: number | undefined;
807
+ }>;
808
+ backupPath: drizzle_orm_sqlite_core.SQLiteColumn<{
809
+ name: "backup_path";
810
+ tableName: "backups";
811
+ dataType: "string";
812
+ columnType: "SQLiteText";
813
+ data: string;
814
+ driverParam: string;
815
+ notNull: true;
816
+ hasDefault: false;
817
+ isPrimaryKey: false;
818
+ isAutoincrement: false;
819
+ hasRuntimeDefault: false;
820
+ enumValues: [string, ...string[]];
821
+ baseColumn: never;
822
+ identity: undefined;
823
+ generated: undefined;
824
+ }, {}, {
825
+ length: number | undefined;
826
+ }>;
827
+ fileSize: drizzle_orm_sqlite_core.SQLiteColumn<{
828
+ name: "file_size";
829
+ tableName: "backups";
830
+ dataType: "number";
831
+ columnType: "SQLiteInteger";
832
+ data: number;
833
+ driverParam: number;
834
+ notNull: true;
835
+ hasDefault: false;
836
+ isPrimaryKey: false;
837
+ isAutoincrement: false;
838
+ hasRuntimeDefault: false;
839
+ enumValues: undefined;
840
+ baseColumn: never;
841
+ identity: undefined;
842
+ generated: undefined;
843
+ }, {}, {}>;
844
+ fileHash: drizzle_orm_sqlite_core.SQLiteColumn<{
845
+ name: "file_hash";
846
+ tableName: "backups";
847
+ dataType: "string";
848
+ columnType: "SQLiteText";
849
+ data: string;
850
+ driverParam: string;
851
+ notNull: true;
852
+ hasDefault: false;
853
+ isPrimaryKey: false;
854
+ isAutoincrement: false;
855
+ hasRuntimeDefault: false;
856
+ enumValues: [string, ...string[]];
857
+ baseColumn: never;
858
+ identity: undefined;
859
+ generated: undefined;
860
+ }, {}, {
861
+ length: number | undefined;
862
+ }>;
863
+ createdAt: drizzle_orm_sqlite_core.SQLiteColumn<{
864
+ name: "created_at";
865
+ tableName: "backups";
866
+ dataType: "date";
867
+ columnType: "SQLiteTimestamp";
868
+ data: Date;
869
+ driverParam: number;
870
+ notNull: true;
871
+ hasDefault: false;
872
+ isPrimaryKey: false;
873
+ isAutoincrement: false;
874
+ hasRuntimeDefault: false;
875
+ enumValues: undefined;
876
+ baseColumn: never;
877
+ identity: undefined;
878
+ generated: undefined;
879
+ }, {}, {}>;
880
+ expiresAt: drizzle_orm_sqlite_core.SQLiteColumn<{
881
+ name: "expires_at";
882
+ tableName: "backups";
883
+ dataType: "date";
884
+ columnType: "SQLiteTimestamp";
885
+ data: Date;
886
+ driverParam: number;
887
+ notNull: true;
888
+ hasDefault: false;
889
+ isPrimaryKey: false;
890
+ isAutoincrement: false;
891
+ hasRuntimeDefault: false;
892
+ enumValues: undefined;
893
+ baseColumn: never;
894
+ identity: undefined;
895
+ generated: undefined;
896
+ }, {}, {}>;
897
+ };
898
+ dialect: "sqlite";
899
+ }>;
900
+ /** 回收站表 */
901
+ declare const trash: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
902
+ name: "trash";
903
+ schema: undefined;
904
+ columns: {
905
+ id: drizzle_orm_sqlite_core.SQLiteColumn<{
906
+ name: "id";
907
+ tableName: "trash";
908
+ dataType: "string";
909
+ columnType: "SQLiteText";
910
+ data: string;
911
+ driverParam: string;
912
+ notNull: true;
913
+ hasDefault: false;
914
+ isPrimaryKey: true;
915
+ isAutoincrement: false;
916
+ hasRuntimeDefault: false;
917
+ enumValues: [string, ...string[]];
918
+ baseColumn: never;
919
+ identity: undefined;
920
+ generated: undefined;
921
+ }, {}, {
922
+ length: number | undefined;
923
+ }>;
924
+ sessionId: drizzle_orm_sqlite_core.SQLiteColumn<{
925
+ name: "session_id";
926
+ tableName: "trash";
927
+ dataType: "string";
928
+ columnType: "SQLiteText";
929
+ data: string;
930
+ driverParam: string;
931
+ notNull: true;
932
+ hasDefault: false;
933
+ isPrimaryKey: false;
934
+ isAutoincrement: false;
935
+ hasRuntimeDefault: false;
936
+ enumValues: [string, ...string[]];
937
+ baseColumn: never;
938
+ identity: undefined;
939
+ generated: undefined;
940
+ }, {}, {
941
+ length: number | undefined;
942
+ }>;
943
+ appId: drizzle_orm_sqlite_core.SQLiteColumn<{
944
+ name: "app_id";
945
+ tableName: "trash";
946
+ dataType: "string";
947
+ columnType: "SQLiteText";
948
+ data: string;
949
+ driverParam: string;
950
+ notNull: false;
951
+ hasDefault: false;
952
+ isPrimaryKey: false;
953
+ isAutoincrement: false;
954
+ hasRuntimeDefault: false;
955
+ enumValues: [string, ...string[]];
956
+ baseColumn: never;
957
+ identity: undefined;
958
+ generated: undefined;
959
+ }, {}, {
960
+ length: number | undefined;
961
+ }>;
962
+ userId: drizzle_orm_sqlite_core.SQLiteColumn<{
963
+ name: "user_id";
964
+ tableName: "trash";
965
+ dataType: "string";
966
+ columnType: "SQLiteText";
967
+ data: string;
968
+ driverParam: string;
969
+ notNull: false;
970
+ hasDefault: false;
971
+ isPrimaryKey: false;
972
+ isAutoincrement: false;
973
+ hasRuntimeDefault: false;
974
+ enumValues: [string, ...string[]];
975
+ baseColumn: never;
976
+ identity: undefined;
977
+ generated: undefined;
978
+ }, {}, {
979
+ length: number | undefined;
980
+ }>;
981
+ originalPath: drizzle_orm_sqlite_core.SQLiteColumn<{
982
+ name: "original_path";
983
+ tableName: "trash";
984
+ dataType: "string";
985
+ columnType: "SQLiteText";
986
+ data: string;
987
+ driverParam: string;
988
+ notNull: true;
989
+ hasDefault: false;
990
+ isPrimaryKey: false;
991
+ isAutoincrement: false;
992
+ hasRuntimeDefault: false;
993
+ enumValues: [string, ...string[]];
994
+ baseColumn: never;
995
+ identity: undefined;
996
+ generated: undefined;
997
+ }, {}, {
998
+ length: number | undefined;
999
+ }>;
1000
+ trashPath: drizzle_orm_sqlite_core.SQLiteColumn<{
1001
+ name: "trash_path";
1002
+ tableName: "trash";
1003
+ dataType: "string";
1004
+ columnType: "SQLiteText";
1005
+ data: string;
1006
+ driverParam: string;
1007
+ notNull: true;
1008
+ hasDefault: false;
1009
+ isPrimaryKey: false;
1010
+ isAutoincrement: false;
1011
+ hasRuntimeDefault: false;
1012
+ enumValues: [string, ...string[]];
1013
+ baseColumn: never;
1014
+ identity: undefined;
1015
+ generated: undefined;
1016
+ }, {}, {
1017
+ length: number | undefined;
1018
+ }>;
1019
+ deletedAt: drizzle_orm_sqlite_core.SQLiteColumn<{
1020
+ name: "deleted_at";
1021
+ tableName: "trash";
1022
+ dataType: "date";
1023
+ columnType: "SQLiteTimestamp";
1024
+ data: Date;
1025
+ driverParam: number;
1026
+ notNull: true;
1027
+ hasDefault: false;
1028
+ isPrimaryKey: false;
1029
+ isAutoincrement: false;
1030
+ hasRuntimeDefault: false;
1031
+ enumValues: undefined;
1032
+ baseColumn: never;
1033
+ identity: undefined;
1034
+ generated: undefined;
1035
+ }, {}, {}>;
1036
+ autoDeleteAt: drizzle_orm_sqlite_core.SQLiteColumn<{
1037
+ name: "auto_delete_at";
1038
+ tableName: "trash";
1039
+ dataType: "date";
1040
+ columnType: "SQLiteTimestamp";
1041
+ data: Date;
1042
+ driverParam: number;
1043
+ notNull: true;
1044
+ hasDefault: false;
1045
+ isPrimaryKey: false;
1046
+ isAutoincrement: false;
1047
+ hasRuntimeDefault: false;
1048
+ enumValues: undefined;
1049
+ baseColumn: never;
1050
+ identity: undefined;
1051
+ generated: undefined;
1052
+ }, {}, {}>;
1053
+ };
1054
+ dialect: "sqlite";
1055
+ }>;
1056
+ /** 向量嵌入表(SQLite 简单存储,无索引加速) */
1057
+ declare const embeddings: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1058
+ name: "embeddings";
1059
+ schema: undefined;
1060
+ columns: {
1061
+ id: drizzle_orm_sqlite_core.SQLiteColumn<{
1062
+ name: "id";
1063
+ tableName: "embeddings";
1064
+ dataType: "string";
1065
+ columnType: "SQLiteText";
1066
+ data: string;
1067
+ driverParam: string;
1068
+ notNull: true;
1069
+ hasDefault: false;
1070
+ isPrimaryKey: true;
1071
+ isAutoincrement: false;
1072
+ hasRuntimeDefault: false;
1073
+ enumValues: [string, ...string[]];
1074
+ baseColumn: never;
1075
+ identity: undefined;
1076
+ generated: undefined;
1077
+ }, {}, {
1078
+ length: number | undefined;
1079
+ }>;
1080
+ sessionId: drizzle_orm_sqlite_core.SQLiteColumn<{
1081
+ name: "session_id";
1082
+ tableName: "embeddings";
1083
+ dataType: "string";
1084
+ columnType: "SQLiteText";
1085
+ data: string;
1086
+ driverParam: string;
1087
+ notNull: true;
1088
+ hasDefault: false;
1089
+ isPrimaryKey: false;
1090
+ isAutoincrement: false;
1091
+ hasRuntimeDefault: false;
1092
+ enumValues: [string, ...string[]];
1093
+ baseColumn: never;
1094
+ identity: undefined;
1095
+ generated: undefined;
1096
+ }, {}, {
1097
+ length: number | undefined;
1098
+ }>;
1099
+ messageId: drizzle_orm_sqlite_core.SQLiteColumn<{
1100
+ name: "message_id";
1101
+ tableName: "embeddings";
1102
+ dataType: "string";
1103
+ columnType: "SQLiteText";
1104
+ data: string;
1105
+ driverParam: string;
1106
+ notNull: false;
1107
+ hasDefault: false;
1108
+ isPrimaryKey: false;
1109
+ isAutoincrement: false;
1110
+ hasRuntimeDefault: false;
1111
+ enumValues: [string, ...string[]];
1112
+ baseColumn: never;
1113
+ identity: undefined;
1114
+ generated: undefined;
1115
+ }, {}, {
1116
+ length: number | undefined;
1117
+ }>;
1118
+ appId: drizzle_orm_sqlite_core.SQLiteColumn<{
1119
+ name: "app_id";
1120
+ tableName: "embeddings";
1121
+ dataType: "string";
1122
+ columnType: "SQLiteText";
1123
+ data: string;
1124
+ driverParam: string;
1125
+ notNull: false;
1126
+ hasDefault: false;
1127
+ isPrimaryKey: false;
1128
+ isAutoincrement: false;
1129
+ hasRuntimeDefault: false;
1130
+ enumValues: [string, ...string[]];
1131
+ baseColumn: never;
1132
+ identity: undefined;
1133
+ generated: undefined;
1134
+ }, {}, {
1135
+ length: number | undefined;
1136
+ }>;
1137
+ userId: drizzle_orm_sqlite_core.SQLiteColumn<{
1138
+ name: "user_id";
1139
+ tableName: "embeddings";
1140
+ dataType: "string";
1141
+ columnType: "SQLiteText";
1142
+ data: string;
1143
+ driverParam: string;
1144
+ notNull: false;
1145
+ hasDefault: false;
1146
+ isPrimaryKey: false;
1147
+ isAutoincrement: false;
1148
+ hasRuntimeDefault: false;
1149
+ enumValues: [string, ...string[]];
1150
+ baseColumn: never;
1151
+ identity: undefined;
1152
+ generated: undefined;
1153
+ }, {}, {
1154
+ length: number | undefined;
1155
+ }>;
1156
+ content: drizzle_orm_sqlite_core.SQLiteColumn<{
1157
+ name: "content";
1158
+ tableName: "embeddings";
1159
+ dataType: "string";
1160
+ columnType: "SQLiteText";
1161
+ data: string;
1162
+ driverParam: string;
1163
+ notNull: true;
1164
+ hasDefault: false;
1165
+ isPrimaryKey: false;
1166
+ isAutoincrement: false;
1167
+ hasRuntimeDefault: false;
1168
+ enumValues: [string, ...string[]];
1169
+ baseColumn: never;
1170
+ identity: undefined;
1171
+ generated: undefined;
1172
+ }, {}, {
1173
+ length: number | undefined;
1174
+ }>;
1175
+ contentType: drizzle_orm_sqlite_core.SQLiteColumn<{
1176
+ name: "content_type";
1177
+ tableName: "embeddings";
1178
+ dataType: "string";
1179
+ columnType: "SQLiteText";
1180
+ data: string;
1181
+ driverParam: string;
1182
+ notNull: true;
1183
+ hasDefault: false;
1184
+ isPrimaryKey: false;
1185
+ isAutoincrement: false;
1186
+ hasRuntimeDefault: false;
1187
+ enumValues: [string, ...string[]];
1188
+ baseColumn: never;
1189
+ identity: undefined;
1190
+ generated: undefined;
1191
+ }, {}, {
1192
+ length: number | undefined;
1193
+ }>;
1194
+ embedding: drizzle_orm_sqlite_core.SQLiteColumn<{
1195
+ name: "embedding";
1196
+ tableName: "embeddings";
1197
+ dataType: "string";
1198
+ columnType: "SQLiteText";
1199
+ data: string;
1200
+ driverParam: string;
1201
+ notNull: false;
1202
+ hasDefault: false;
1203
+ isPrimaryKey: false;
1204
+ isAutoincrement: false;
1205
+ hasRuntimeDefault: false;
1206
+ enumValues: [string, ...string[]];
1207
+ baseColumn: never;
1208
+ identity: undefined;
1209
+ generated: undefined;
1210
+ }, {}, {
1211
+ length: number | undefined;
1212
+ }>;
1213
+ metadata: drizzle_orm_sqlite_core.SQLiteColumn<{
1214
+ name: "metadata";
1215
+ tableName: "embeddings";
1216
+ dataType: "string";
1217
+ columnType: "SQLiteText";
1218
+ data: string;
1219
+ driverParam: string;
1220
+ notNull: false;
1221
+ hasDefault: false;
1222
+ isPrimaryKey: false;
1223
+ isAutoincrement: false;
1224
+ hasRuntimeDefault: false;
1225
+ enumValues: [string, ...string[]];
1226
+ baseColumn: never;
1227
+ identity: undefined;
1228
+ generated: undefined;
1229
+ }, {}, {
1230
+ length: number | undefined;
1231
+ }>;
1232
+ createdAt: drizzle_orm_sqlite_core.SQLiteColumn<{
1233
+ name: "created_at";
1234
+ tableName: "embeddings";
1235
+ dataType: "date";
1236
+ columnType: "SQLiteTimestamp";
1237
+ data: Date;
1238
+ driverParam: number;
1239
+ notNull: true;
1240
+ hasDefault: false;
1241
+ isPrimaryKey: false;
1242
+ isAutoincrement: false;
1243
+ hasRuntimeDefault: false;
1244
+ enumValues: undefined;
1245
+ baseColumn: never;
1246
+ identity: undefined;
1247
+ generated: undefined;
1248
+ }, {}, {}>;
1249
+ };
1250
+ dialect: "sqlite";
1251
+ }>;
1252
+
1253
+ /**
1254
+ * SQLite 存储适配器
1255
+ * 使用 Drizzle ORM + better-sqlite3
1256
+ */
1257
+
1258
+ declare class SqliteAdapter implements StorageAdapter {
1259
+ private sqlite;
1260
+ private db;
1261
+ private config;
1262
+ constructor(dbPath: string, config?: StorageConfig);
1263
+ getSessions(ctx: StorageContext): Promise<SessionRecord[]>;
1264
+ getSession(id: string, ctx: StorageContext): Promise<SessionRecord | null>;
1265
+ createSession(input: CreateSessionInput, ctx: StorageContext): Promise<SessionRecord>;
1266
+ updateSession(id: string, data: UpdateSessionInput, ctx: StorageContext): Promise<void>;
1267
+ deleteSession(id: string, ctx: StorageContext): Promise<void>;
1268
+ getMessages(sessionId: string, ctx: StorageContext): Promise<MessageRecord[]>;
1269
+ getMessage(id: string, ctx: StorageContext): Promise<MessageRecord | null>;
1270
+ saveMessage(input: CreateMessageInput, ctx: StorageContext): Promise<MessageRecord>;
1271
+ deleteMessagesAfter(sessionId: string, timestamp: Date, ctx: StorageContext): Promise<void>;
1272
+ getOperations(sessionId: string, ctx: StorageContext): Promise<OperationRecord[]>;
1273
+ getOperationsByMessage(messageId: string, ctx: StorageContext): Promise<OperationRecord[]>;
1274
+ saveOperation(input: CreateOperationInput, ctx: StorageContext): Promise<OperationRecord>;
1275
+ updateOperationStatus(id: string, status: OperationStatus, errorMessage?: string): Promise<void>;
1276
+ getBackups(operationId: string): Promise<BackupRecord[]>;
1277
+ saveBackup(input: Omit<BackupRecord, 'createdAt'>): Promise<BackupRecord>;
1278
+ deleteExpiredBackups(): Promise<number>;
1279
+ getTrashItems(ctx: StorageContext): Promise<TrashRecord[]>;
1280
+ moveToTrash(input: Omit<TrashRecord, 'deletedAt' | 'autoDeleteAt' | 'appId' | 'userId'>, ctx: StorageContext): Promise<TrashRecord>;
1281
+ restoreFromTrash(id: string, ctx: StorageContext): Promise<TrashRecord>;
1282
+ emptyExpiredTrash(): Promise<number>;
1283
+ saveEmbedding(id: string, content: string, embedding: number[], metadata: {
1284
+ sessionId: string;
1285
+ messageId?: string;
1286
+ contentType: EmbeddingRecord['contentType'];
1287
+ }, ctx: StorageContext): Promise<void>;
1288
+ searchSimilar(queryEmbedding: number[], options: VectorSearchOptions, ctx: StorageContext): Promise<VectorSearchResult[]>;
1289
+ close(): Promise<void>;
1290
+ }
1291
+
1292
+ /**
1293
+ * PostgreSQL 存储适配器
1294
+ * 使用 postgres.js 驱动,支持 pgvector
1295
+ */
1296
+
1297
+ declare class PostgresAdapter implements StorageAdapter {
1298
+ private sql;
1299
+ private config;
1300
+ private initialized;
1301
+ constructor(connectionString: string, config?: StorageConfig);
1302
+ /** 确保表结构已初始化 */
1303
+ private ensureInitialized;
1304
+ getSessions(ctx: StorageContext): Promise<SessionRecord[]>;
1305
+ getSession(id: string, ctx: StorageContext): Promise<SessionRecord | null>;
1306
+ createSession(input: CreateSessionInput, ctx: StorageContext): Promise<SessionRecord>;
1307
+ updateSession(id: string, data: UpdateSessionInput, ctx: StorageContext): Promise<void>;
1308
+ deleteSession(id: string, ctx: StorageContext): Promise<void>;
1309
+ getMessages(sessionId: string, ctx: StorageContext): Promise<MessageRecord[]>;
1310
+ getMessage(id: string, ctx: StorageContext): Promise<MessageRecord | null>;
1311
+ saveMessage(input: CreateMessageInput, ctx: StorageContext): Promise<MessageRecord>;
1312
+ deleteMessagesAfter(sessionId: string, timestamp: Date, ctx: StorageContext): Promise<void>;
1313
+ getOperations(sessionId: string, ctx: StorageContext): Promise<OperationRecord[]>;
1314
+ getOperationsByMessage(messageId: string, ctx: StorageContext): Promise<OperationRecord[]>;
1315
+ saveOperation(input: CreateOperationInput, ctx: StorageContext): Promise<OperationRecord>;
1316
+ updateOperationStatus(id: string, status: OperationStatus, errorMessage?: string): Promise<void>;
1317
+ getBackups(operationId: string): Promise<BackupRecord[]>;
1318
+ saveBackup(input: Omit<BackupRecord, 'createdAt'>): Promise<BackupRecord>;
1319
+ deleteExpiredBackups(): Promise<number>;
1320
+ getTrashItems(ctx: StorageContext): Promise<TrashRecord[]>;
1321
+ moveToTrash(input: Omit<TrashRecord, 'deletedAt' | 'autoDeleteAt' | 'appId' | 'userId'>, ctx: StorageContext): Promise<TrashRecord>;
1322
+ restoreFromTrash(id: string, ctx: StorageContext): Promise<TrashRecord>;
1323
+ emptyExpiredTrash(): Promise<number>;
1324
+ saveEmbedding(id: string, content: string, embedding: number[], metadata: {
1325
+ sessionId: string;
1326
+ messageId?: string;
1327
+ contentType: EmbeddingRecord['contentType'];
1328
+ }, ctx: StorageContext): Promise<void>;
1329
+ searchSimilar(queryEmbedding: number[], options: VectorSearchOptions, ctx: StorageContext): Promise<VectorSearchResult[]>;
1330
+ close(): Promise<void>;
1331
+ }
1332
+
1333
+ /**
1334
+ * AI Chat 统一存储层
1335
+ *
1336
+ * 支持:
1337
+ * - SQLite(本地/Electron)
1338
+ * - PostgreSQL(云端/多用户,支持 pgvector)
1339
+ *
1340
+ * 特性:
1341
+ * - 多租户支持(appId + userId)
1342
+ * - 会话/消息/操作日志管理
1343
+ * - 备份和回收站
1344
+ * - 向量搜索(PostgreSQL 使用 pgvector,SQLite 内存计算)
1345
+ */
1346
+
1347
+ /**
1348
+ * 创建存储适配器
1349
+ *
1350
+ * @example
1351
+ * // SQLite(Electron 本地)
1352
+ * const storage = await createStorage({
1353
+ * type: 'sqlite',
1354
+ * sqlitePath: '~/.ai-chat/db.sqlite',
1355
+ * });
1356
+ *
1357
+ * @example
1358
+ * // PostgreSQL(Web 服务/多用户)
1359
+ * const storage = await createStorage({
1360
+ * type: 'postgres',
1361
+ * postgresUrl: 'postgres://user:pass@localhost:5432/ai_chat',
1362
+ * });
1363
+ */
1364
+ declare function createStorage(config: StorageConfig): Promise<StorageAdapter>;
1365
+ /**
1366
+ * 默认存储路径(SQLite)
1367
+ */
1368
+ declare function getDefaultStoragePath(): string;
1369
+ /**
1370
+ * 获取默认备份目录
1371
+ */
1372
+ declare function getDefaultBackupDir(): string;
1373
+ /**
1374
+ * 获取默认回收站目录
1375
+ */
1376
+ declare function getDefaultTrashDir(): string;
1377
+
1378
+ export { type BackupRecord, type CreateMessageInput, type CreateOperationInput, type CreateSessionInput, type EmbeddingRecord, type MessageRecord, type OperationRecord, type OperationStatus, PostgresAdapter, type SessionRecord, SqliteAdapter, type StorageAdapter, type StorageConfig, type StorageContext, type TrashRecord, type UpdateSessionInput, type VectorSearchOptions, type VectorSearchResult, backups, createStorage, embeddings, getDefaultBackupDir, getDefaultStoragePath, getDefaultTrashDir, messages, operations, sessions, trash };