@cicctencent/agent-server 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +93 -16
  2. package/dist/cjs/agent/agent-server.d.ts.map +1 -1
  3. package/dist/cjs/agent/agent-server.js +50 -15
  4. package/dist/cjs/agent/agent-server.js.map +1 -1
  5. package/dist/cjs/index.d.ts +2 -0
  6. package/dist/cjs/index.d.ts.map +1 -1
  7. package/dist/cjs/index.js +23 -1
  8. package/dist/cjs/index.js.map +1 -1
  9. package/dist/cjs/service/cache.service.d.ts +69 -0
  10. package/dist/cjs/service/cache.service.d.ts.map +1 -0
  11. package/dist/cjs/service/cache.service.js +243 -0
  12. package/dist/cjs/service/cache.service.js.map +1 -0
  13. package/dist/cjs/service/engine-pool.d.ts +15 -2
  14. package/dist/cjs/service/engine-pool.d.ts.map +1 -1
  15. package/dist/cjs/service/engine-pool.js +15 -4
  16. package/dist/cjs/service/engine-pool.js.map +1 -1
  17. package/dist/cjs/spi/adapters.d.ts +163 -0
  18. package/dist/cjs/spi/adapters.d.ts.map +1 -0
  19. package/dist/cjs/spi/adapters.js +341 -0
  20. package/dist/cjs/spi/adapters.js.map +1 -0
  21. package/dist/cjs/spi/examples/typeorm-example.d.ts +208 -0
  22. package/dist/cjs/spi/examples/typeorm-example.d.ts.map +1 -0
  23. package/dist/cjs/spi/examples/typeorm-example.js +274 -0
  24. package/dist/cjs/spi/examples/typeorm-example.js.map +1 -0
  25. package/dist/cjs/spi/index.d.ts +194 -0
  26. package/dist/cjs/spi/index.d.ts.map +1 -0
  27. package/dist/cjs/spi/index.js +227 -0
  28. package/dist/cjs/spi/index.js.map +1 -0
  29. package/dist/cjs/spi/storage.d.ts +109 -0
  30. package/dist/cjs/spi/storage.d.ts.map +1 -0
  31. package/dist/cjs/spi/storage.js +344 -0
  32. package/dist/cjs/spi/storage.js.map +1 -0
  33. package/dist/cjs/spi/types.d.ts +317 -0
  34. package/dist/cjs/spi/types.d.ts.map +1 -0
  35. package/dist/cjs/spi/types.js +6 -0
  36. package/dist/cjs/spi/types.js.map +1 -0
  37. package/dist/cjs/types.d.ts +63 -8
  38. package/dist/cjs/types.d.ts.map +1 -1
  39. package/dist/esm/agent/agent-server.d.ts.map +1 -1
  40. package/dist/esm/agent/agent-server.js +50 -15
  41. package/dist/esm/agent/agent-server.js.map +1 -1
  42. package/dist/esm/index.d.ts +2 -0
  43. package/dist/esm/index.d.ts.map +1 -1
  44. package/dist/esm/index.js +8 -0
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/service/cache.service.d.ts +69 -0
  47. package/dist/esm/service/cache.service.d.ts.map +1 -0
  48. package/dist/esm/service/cache.service.js +237 -0
  49. package/dist/esm/service/cache.service.js.map +1 -0
  50. package/dist/esm/service/engine-pool.d.ts +15 -2
  51. package/dist/esm/service/engine-pool.d.ts.map +1 -1
  52. package/dist/esm/service/engine-pool.js +15 -4
  53. package/dist/esm/service/engine-pool.js.map +1 -1
  54. package/dist/esm/spi/adapters.d.ts +163 -0
  55. package/dist/esm/spi/adapters.d.ts.map +1 -0
  56. package/dist/esm/spi/adapters.js +329 -0
  57. package/dist/esm/spi/adapters.js.map +1 -0
  58. package/dist/esm/spi/examples/typeorm-example.d.ts +208 -0
  59. package/dist/esm/spi/examples/typeorm-example.d.ts.map +1 -0
  60. package/dist/esm/spi/examples/typeorm-example.js +315 -0
  61. package/dist/esm/spi/examples/typeorm-example.js.map +1 -0
  62. package/dist/esm/spi/index.d.ts +194 -0
  63. package/dist/esm/spi/index.d.ts.map +1 -0
  64. package/dist/esm/spi/index.js +215 -0
  65. package/dist/esm/spi/index.js.map +1 -0
  66. package/dist/esm/spi/storage.d.ts +109 -0
  67. package/dist/esm/spi/storage.d.ts.map +1 -0
  68. package/dist/esm/spi/storage.js +301 -0
  69. package/dist/esm/spi/storage.js.map +1 -0
  70. package/dist/esm/spi/types.d.ts +317 -0
  71. package/dist/esm/spi/types.d.ts.map +1 -0
  72. package/dist/esm/spi/types.js +5 -0
  73. package/dist/esm/spi/types.js.map +1 -0
  74. package/dist/esm/types.d.ts +63 -8
  75. package/dist/esm/types.d.ts.map +1 -1
  76. package/package.json +1 -1
@@ -0,0 +1,194 @@
1
+ /**
2
+ * # agent-server SPI (Service Provider Interface)
3
+ *
4
+ * ## 核心设计原则
5
+ *
6
+ * 1. **接口优先**:agent-server 核心只定义能力接口,不依赖具体实现
7
+ * 2. **参考实现可选**:提供常见框架的参考实现,业务层可选择使用或自己实现
8
+ * 3. **业务层自主**:完全控制实现细节,不受 agent-server 限制
9
+ *
10
+ * ## 使用方式
11
+ *
12
+ * ### 方式 1:直接使用参考实现(最简单)
13
+ *
14
+ * ```typescript
15
+ * import { KoaSSEAdapter, createAgentServer } from '@cicctencent/agent-server';
16
+ *
17
+ * const server = createAgentServer({ llmProvider: myProvider });
18
+ *
19
+ * // MidwayJS/Koa 项目
20
+ * @Get('/chat/stream')
21
+ * async chatStream(@Ctx() ctx: Context) {
22
+ * const adapter = new KoaSSEAdapter(ctx);
23
+ * await server.runAgentStream(adapter, { content: 'Hello' });
24
+ * }
25
+ * ```
26
+ *
27
+ * ### 方式 2:实现 SPI 接口(自定义存储)
28
+ *
29
+ * ```typescript
30
+ * import {
31
+ * createAgentServer,
32
+ * type ChatStoreProvider,
33
+ * type BaseThreadEntity,
34
+ * type BaseMessageEntity,
35
+ * } from '@cicctencent/agent-server';
36
+ *
37
+ * // 定义你的实体类型(可以自定义字段)
38
+ * interface MyThread extends BaseThreadEntity {
39
+ * userId: string;
40
+ * applicationId: number;
41
+ * }
42
+ *
43
+ * // 实现 ChatStoreProvider 接口
44
+ * class MyChatStore implements ChatStoreProvider<MyThread, MyMessage> {
45
+ * async getThreads(userId?: string): Promise<MyThread[]> {
46
+ * // 使用任意存储技术:TypeORM / Prisma / Mongoose / ...
47
+ * return this.database.query('SELECT * FROM threads WHERE userId = ?', [userId]);
48
+ * }
49
+ *
50
+ * // ... 实现其他方法
51
+ * }
52
+ *
53
+ * // 注入自定义实现
54
+ * const server = createAgentServer({
55
+ * llmProvider: myProvider,
56
+ * chatStoreProvider: new MyChatStore(),
57
+ * });
58
+ * ```
59
+ *
60
+ * ### 方式 3:只使用组件(不使用工厂)
61
+ *
62
+ * ```typescript
63
+ * import {
64
+ * KoaSSEAdapter,
65
+ * writeSSE,
66
+ * createBuiltinTools,
67
+ * MemoryService,
68
+ * } from '@cicctencent/agent-server';
69
+ *
70
+ * // 只使用需要的组件,不依赖 createAgentServer
71
+ * const tools = createBuiltinTools();
72
+ * const memoryService = new MemoryService('./data');
73
+ *
74
+ * @Get('/stream')
75
+ * async stream(@Ctx() ctx: Context) {
76
+ * const adapter = new KoaSSEAdapter(ctx);
77
+ * writeSSE(adapter, 'start', { message: 'Hello' });
78
+ * }
79
+ * ```
80
+ *
81
+ * ## 完整文档
82
+ *
83
+ * 详见 [README.md](./README.md)
84
+ */
85
+ export type { BaseThreadEntity, BaseMessageEntity, BaseWorkspaceEntity, BaseAgentProfileEntity, BaseSettingsEntity, KVStorageAdapter, ListStorageAdapter, QueryOptions, SettingsProvider, ChatStoreProvider, AgentProfileProvider, PromptBuilderProvider, ModelConfigResolver, SSEResponseAdapter, RequestContextAdapter, AgentServerSPIOptions, ThreadEntity, MessageEntity, WorkspaceEntity, AgentProfileEntity, SettingsEntity, } from './types.js';
86
+ export { JsonFileKVStorage, JsonFileListStorage, InMemoryKVStorage, InMemoryListStorage, DatabaseListStorage, createJsonFileStorage, createInMemoryStorage, } from './storage.js';
87
+ export { ExpressSSEAdapter, KoaSSEAdapter, FastifySSEAdapter, NativeHttpSSEAdapter, adaptSSE, ExpressRequestAdapter, KoaRequestAdapter, adaptRequest, CustomSSEAdapter, } from './adapters.js';
88
+ /**
89
+ * ## SPI 使用示例
90
+ *
91
+ * ### 1. 使用默认 JSON 文件存储
92
+ *
93
+ * ```typescript
94
+ * import { createAgentServer } from '@cicctencent/agent-server';
95
+ *
96
+ * const server = createAgentServer({
97
+ * llmProvider: myProvider,
98
+ * dataDir: './data', // 使用默认 JSON 文件存储
99
+ * });
100
+ * ```
101
+ *
102
+ * ### 2. 自定义存储(数据库)
103
+ *
104
+ * ```typescript
105
+ * import { createAgentServer, DatabaseListStorage, type ChatStoreProvider } from '@cicctencent/agent-server';
106
+ *
107
+ * // 实现数据库存储
108
+ * class TypeORMThreadStorage extends DatabaseListStorage<ThreadEntity> {
109
+ * constructor(private repository: Repository<ThreadEntity>) {
110
+ * super();
111
+ * }
112
+ * async list() { return this.repository.find(); }
113
+ * async findById(id) { return this.repository.findOne({ where: { id } }); }
114
+ * async add(entity) { return this.repository.save(entity); }
115
+ * // ...
116
+ * }
117
+ *
118
+ * // 实现 ChatStoreProvider
119
+ * class TypeORMChatStoreProvider implements ChatStoreProvider {
120
+ * constructor(private threadRepo: Repository<ThreadEntity>, private msgRepo: Repository<MessageEntity>) {}
121
+ * getThreads() { return this.threadRepo.find(); }
122
+ * // ...
123
+ * }
124
+ *
125
+ * const server = createAgentServer({
126
+ * llmProvider: myProvider,
127
+ * chatStoreProvider: new TypeORMChatStoreProvider(threadRepo, msgRepo),
128
+ * });
129
+ * ```
130
+ *
131
+ * ### 3. 自定义框架适配(MidwayJS)
132
+ *
133
+ * ```typescript
134
+ * import { createAgentServer, KoaSSEAdapter } from '@cicctencent/agent-server';
135
+ *
136
+ * @Provide()
137
+ * @Scope(ScopeEnum.Singleton)
138
+ * export class AgentService {
139
+ * private server: AgentServer;
140
+ *
141
+ * @Init()
142
+ * async init() {
143
+ * this.server = createAgentServer({
144
+ * llmProvider: await this.createProvider(),
145
+ * // 使用 Koa 适配器
146
+ * createSSEResponseAdapter: (ctx) => new KoaSSEAdapter(ctx),
147
+ * });
148
+ * }
149
+ *
150
+ * @Get('/chat/stream')
151
+ * async chatStream(@Ctx() ctx: Context) {
152
+ * const adapter = new KoaSSEAdapter(ctx);
153
+ * await this.server.runAgentStream(adapter, { content: ctx.query.message });
154
+ * }
155
+ * }
156
+ * ```
157
+ *
158
+ * ### 4. 自定义 Prompt 构建
159
+ *
160
+ * ```typescript
161
+ * import { createAgentServer, type PromptBuilderProvider } from '@cicctencent/agent-server';
162
+ *
163
+ * class CustomPromptBuilder implements PromptBuilderProvider {
164
+ * buildDefaultPrompt(profile, tools, memory) {
165
+ * // 自定义 Prompt 构建逻辑
166
+ * return `你是一个专业的 BI 分析助手...\n${memory || ''}`;
167
+ * }
168
+ * // ...
169
+ * }
170
+ *
171
+ * const server = createAgentServer({
172
+ * llmProvider: myProvider,
173
+ * promptBuilder: new CustomPromptBuilder(),
174
+ * });
175
+ * ```
176
+ *
177
+ * ### 5. 组件级使用(不使用工厂)
178
+ *
179
+ * ```typescript
180
+ * import { MemoryService, writeSSE, createBuiltinTools, KoaSSEAdapter } from '@cicctencent/agent-server';
181
+ *
182
+ * // 只使用需要的组件,不依赖 createAgentServer
183
+ * const memoryService = new MemoryService('./data');
184
+ * const tools = createBuiltinTools();
185
+ *
186
+ * // 在 MidwayJS 中使用 SSE
187
+ * @Get('/stream')
188
+ * async stream(@Ctx() ctx: Context) {
189
+ * const adapter = new KoaSSEAdapter(ctx);
190
+ * writeSSE(adapter, 'start', { message: 'Hello' });
191
+ * }
192
+ * ```
193
+ */
194
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spi/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AAGH,YAAY,EAEV,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAGlB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EAGZ,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EAGnB,kBAAkB,EAClB,qBAAqB,EAGrB,qBAAqB,EAGrB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAEL,iBAAiB,EACjB,mBAAmB,EAGnB,iBAAiB,EACjB,mBAAmB,EAGnB,mBAAmB,EAGnB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EAGR,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EAGZ,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAMvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGG"}
@@ -0,0 +1,215 @@
1
+ // ============================================================
2
+ // SPI 模块导出
3
+ // ============================================================
4
+ /**
5
+ * # agent-server SPI (Service Provider Interface)
6
+ *
7
+ * ## 核心设计原则
8
+ *
9
+ * 1. **接口优先**:agent-server 核心只定义能力接口,不依赖具体实现
10
+ * 2. **参考实现可选**:提供常见框架的参考实现,业务层可选择使用或自己实现
11
+ * 3. **业务层自主**:完全控制实现细节,不受 agent-server 限制
12
+ *
13
+ * ## 使用方式
14
+ *
15
+ * ### 方式 1:直接使用参考实现(最简单)
16
+ *
17
+ * ```typescript
18
+ * import { KoaSSEAdapter, createAgentServer } from '@cicctencent/agent-server';
19
+ *
20
+ * const server = createAgentServer({ llmProvider: myProvider });
21
+ *
22
+ * // MidwayJS/Koa 项目
23
+ * @Get('/chat/stream')
24
+ * async chatStream(@Ctx() ctx: Context) {
25
+ * const adapter = new KoaSSEAdapter(ctx);
26
+ * await server.runAgentStream(adapter, { content: 'Hello' });
27
+ * }
28
+ * ```
29
+ *
30
+ * ### 方式 2:实现 SPI 接口(自定义存储)
31
+ *
32
+ * ```typescript
33
+ * import {
34
+ * createAgentServer,
35
+ * type ChatStoreProvider,
36
+ * type BaseThreadEntity,
37
+ * type BaseMessageEntity,
38
+ * } from '@cicctencent/agent-server';
39
+ *
40
+ * // 定义你的实体类型(可以自定义字段)
41
+ * interface MyThread extends BaseThreadEntity {
42
+ * userId: string;
43
+ * applicationId: number;
44
+ * }
45
+ *
46
+ * // 实现 ChatStoreProvider 接口
47
+ * class MyChatStore implements ChatStoreProvider<MyThread, MyMessage> {
48
+ * async getThreads(userId?: string): Promise<MyThread[]> {
49
+ * // 使用任意存储技术:TypeORM / Prisma / Mongoose / ...
50
+ * return this.database.query('SELECT * FROM threads WHERE userId = ?', [userId]);
51
+ * }
52
+ *
53
+ * // ... 实现其他方法
54
+ * }
55
+ *
56
+ * // 注入自定义实现
57
+ * const server = createAgentServer({
58
+ * llmProvider: myProvider,
59
+ * chatStoreProvider: new MyChatStore(),
60
+ * });
61
+ * ```
62
+ *
63
+ * ### 方式 3:只使用组件(不使用工厂)
64
+ *
65
+ * ```typescript
66
+ * import {
67
+ * KoaSSEAdapter,
68
+ * writeSSE,
69
+ * createBuiltinTools,
70
+ * MemoryService,
71
+ * } from '@cicctencent/agent-server';
72
+ *
73
+ * // 只使用需要的组件,不依赖 createAgentServer
74
+ * const tools = createBuiltinTools();
75
+ * const memoryService = new MemoryService('./data');
76
+ *
77
+ * @Get('/stream')
78
+ * async stream(@Ctx() ctx: Context) {
79
+ * const adapter = new KoaSSEAdapter(ctx);
80
+ * writeSSE(adapter, 'start', { message: 'Hello' });
81
+ * }
82
+ * ```
83
+ *
84
+ * ## 完整文档
85
+ *
86
+ * 详见 [README.md](./README.md)
87
+ */
88
+ // ---- 存储适配器(参考实现) ----
89
+ export {
90
+ // JSON 文件存储(默认实现)
91
+ JsonFileKVStorage, JsonFileListStorage,
92
+ // 内存存储(测试用)
93
+ InMemoryKVStorage, InMemoryListStorage,
94
+ // 数据库存储基类(业务层继承)
95
+ DatabaseListStorage,
96
+ // 工厂函数
97
+ createJsonFileStorage, createInMemoryStorage, } from "./storage.js";
98
+ // ---- 框架适配器(参考实现) ----
99
+ export {
100
+ // SSE 适配器
101
+ ExpressSSEAdapter, KoaSSEAdapter, FastifySSEAdapter, NativeHttpSSEAdapter, adaptSSE,
102
+ // 请求适配器
103
+ ExpressRequestAdapter, KoaRequestAdapter, adaptRequest,
104
+ // 自定义适配器基类
105
+ CustomSSEAdapter, } from "./adapters.js";
106
+ // ============================================================
107
+ // SPI 使用指南
108
+ // ============================================================
109
+ /**
110
+ * ## SPI 使用示例
111
+ *
112
+ * ### 1. 使用默认 JSON 文件存储
113
+ *
114
+ * ```typescript
115
+ * import { createAgentServer } from '@cicctencent/agent-server';
116
+ *
117
+ * const server = createAgentServer({
118
+ * llmProvider: myProvider,
119
+ * dataDir: './data', // 使用默认 JSON 文件存储
120
+ * });
121
+ * ```
122
+ *
123
+ * ### 2. 自定义存储(数据库)
124
+ *
125
+ * ```typescript
126
+ * import { createAgentServer, DatabaseListStorage, type ChatStoreProvider } from '@cicctencent/agent-server';
127
+ *
128
+ * // 实现数据库存储
129
+ * class TypeORMThreadStorage extends DatabaseListStorage<ThreadEntity> {
130
+ * constructor(private repository: Repository<ThreadEntity>) {
131
+ * super();
132
+ * }
133
+ * async list() { return this.repository.find(); }
134
+ * async findById(id) { return this.repository.findOne({ where: { id } }); }
135
+ * async add(entity) { return this.repository.save(entity); }
136
+ * // ...
137
+ * }
138
+ *
139
+ * // 实现 ChatStoreProvider
140
+ * class TypeORMChatStoreProvider implements ChatStoreProvider {
141
+ * constructor(private threadRepo: Repository<ThreadEntity>, private msgRepo: Repository<MessageEntity>) {}
142
+ * getThreads() { return this.threadRepo.find(); }
143
+ * // ...
144
+ * }
145
+ *
146
+ * const server = createAgentServer({
147
+ * llmProvider: myProvider,
148
+ * chatStoreProvider: new TypeORMChatStoreProvider(threadRepo, msgRepo),
149
+ * });
150
+ * ```
151
+ *
152
+ * ### 3. 自定义框架适配(MidwayJS)
153
+ *
154
+ * ```typescript
155
+ * import { createAgentServer, KoaSSEAdapter } from '@cicctencent/agent-server';
156
+ *
157
+ * @Provide()
158
+ * @Scope(ScopeEnum.Singleton)
159
+ * export class AgentService {
160
+ * private server: AgentServer;
161
+ *
162
+ * @Init()
163
+ * async init() {
164
+ * this.server = createAgentServer({
165
+ * llmProvider: await this.createProvider(),
166
+ * // 使用 Koa 适配器
167
+ * createSSEResponseAdapter: (ctx) => new KoaSSEAdapter(ctx),
168
+ * });
169
+ * }
170
+ *
171
+ * @Get('/chat/stream')
172
+ * async chatStream(@Ctx() ctx: Context) {
173
+ * const adapter = new KoaSSEAdapter(ctx);
174
+ * await this.server.runAgentStream(adapter, { content: ctx.query.message });
175
+ * }
176
+ * }
177
+ * ```
178
+ *
179
+ * ### 4. 自定义 Prompt 构建
180
+ *
181
+ * ```typescript
182
+ * import { createAgentServer, type PromptBuilderProvider } from '@cicctencent/agent-server';
183
+ *
184
+ * class CustomPromptBuilder implements PromptBuilderProvider {
185
+ * buildDefaultPrompt(profile, tools, memory) {
186
+ * // 自定义 Prompt 构建逻辑
187
+ * return `你是一个专业的 BI 分析助手...\n${memory || ''}`;
188
+ * }
189
+ * // ...
190
+ * }
191
+ *
192
+ * const server = createAgentServer({
193
+ * llmProvider: myProvider,
194
+ * promptBuilder: new CustomPromptBuilder(),
195
+ * });
196
+ * ```
197
+ *
198
+ * ### 5. 组件级使用(不使用工厂)
199
+ *
200
+ * ```typescript
201
+ * import { MemoryService, writeSSE, createBuiltinTools, KoaSSEAdapter } from '@cicctencent/agent-server';
202
+ *
203
+ * // 只使用需要的组件,不依赖 createAgentServer
204
+ * const memoryService = new MemoryService('./data');
205
+ * const tools = createBuiltinTools();
206
+ *
207
+ * // 在 MidwayJS 中使用 SSE
208
+ * @Get('/stream')
209
+ * async stream(@Ctx() ctx: Context) {
210
+ * const adapter = new KoaSSEAdapter(ctx);
211
+ * writeSSE(adapter, 'start', { message: 'Hello' });
212
+ * }
213
+ * ```
214
+ */
215
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/spi/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,WAAW;AACX,+DAA+D;AAC/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AAsCH,wBAAwB;AACxB,OAAO;AACL,kBAAkB;AAClB,iBAAiB,EACjB,mBAAmB;AAEnB,YAAY;AACZ,iBAAiB,EACjB,mBAAmB;AAEnB,iBAAiB;AACjB,mBAAmB;AAEnB,OAAO;AACP,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,wBAAwB;AACxB,OAAO;AACL,UAAU;AACV,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ;AAER,QAAQ;AACR,qBAAqB,EACrB,iBAAiB,EACjB,YAAY;AAEZ,WAAW;AACX,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,+DAA+D;AAC/D,WAAW;AACX,+DAA+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGG"}
@@ -0,0 +1,109 @@
1
+ import type { KVStorageAdapter, ListStorageAdapter, QueryOptions } from './types.js';
2
+ /**
3
+ * JSON 文件键值存储
4
+ * 适用于小型应用、本地开发
5
+ */
6
+ export declare class JsonFileKVStorage implements KVStorageAdapter {
7
+ private filePath;
8
+ private cache;
9
+ constructor(filePath: string);
10
+ private load;
11
+ private save;
12
+ get<T>(key: string): Promise<T | null>;
13
+ set<T>(key: string, value: T): Promise<void>;
14
+ delete(key: string): Promise<void>;
15
+ exists(key: string): Promise<boolean>;
16
+ keys(prefix?: string): Promise<string[]>;
17
+ /** 清除缓存(用于重新加载) */
18
+ clearCache(): void;
19
+ }
20
+ /**
21
+ * JSON 文件列表存储
22
+ * 支持实体 CRUD 操作
23
+ */
24
+ export declare class JsonFileListStorage<T extends {
25
+ id: number | string;
26
+ }> implements ListStorageAdapter<T> {
27
+ private filePath;
28
+ private data;
29
+ constructor(filePath: string);
30
+ private load;
31
+ private save;
32
+ list(): Promise<T[]>;
33
+ findById(id: number | string): Promise<T | null>;
34
+ add(entity: T): Promise<T>;
35
+ update(id: number | string, data: Partial<T>): Promise<T | null>;
36
+ remove(id: number | string): Promise<boolean>;
37
+ batch(operations: Array<{
38
+ type: 'add' | 'update' | 'delete';
39
+ data: T | Partial<T>;
40
+ id?: number | string;
41
+ }>): Promise<void>;
42
+ /** 获取最大 ID */
43
+ maxId(): number;
44
+ /** 清除缓存 */
45
+ clearCache(): void;
46
+ /** 获取文件路径 */
47
+ getPath(): string;
48
+ }
49
+ /**
50
+ * 内存键值存储
51
+ * 适用于测试、临时数据
52
+ */
53
+ export declare class InMemoryKVStorage implements KVStorageAdapter {
54
+ private data;
55
+ get<T>(key: string): Promise<T | null>;
56
+ set<T>(key: string, value: T): Promise<void>;
57
+ delete(key: string): Promise<void>;
58
+ exists(key: string): Promise<boolean>;
59
+ keys(prefix?: string): Promise<string[]>;
60
+ /** 清空所有数据 */
61
+ clear(): void;
62
+ }
63
+ /**
64
+ * 内存列表存储
65
+ */
66
+ export declare class InMemoryListStorage<T extends {
67
+ id: number | string;
68
+ }> implements ListStorageAdapter<T> {
69
+ private data;
70
+ list(): Promise<T[]>;
71
+ findById(id: number | string): Promise<T | null>;
72
+ add(entity: T): Promise<T>;
73
+ update(id: number | string, data: Partial<T>): Promise<T | null>;
74
+ remove(id: number | string): Promise<boolean>;
75
+ /** 清空所有数据 */
76
+ clear(): void;
77
+ }
78
+ /**
79
+ * 数据库存储基类
80
+ * 应用层继承并实现具体的数据库操作(TypeORM / Prisma / Sequelize 等)
81
+ */
82
+ export declare abstract class DatabaseListStorage<T extends {
83
+ id: number | string;
84
+ }> implements ListStorageAdapter<T> {
85
+ abstract list(): Promise<T[]>;
86
+ abstract findById(id: number | string): Promise<T | null>;
87
+ abstract add(entity: T): Promise<T>;
88
+ abstract update(id: number | string, data: Partial<T>): Promise<T | null>;
89
+ abstract remove(id: number | string): Promise<boolean>;
90
+ /** 扩展:带查询条件的列表 */
91
+ query(options: QueryOptions): Promise<{
92
+ items: T[];
93
+ total: number;
94
+ hasMore: boolean;
95
+ }>;
96
+ }
97
+ /**
98
+ * 创建 JSON 文件存储
99
+ */
100
+ export declare function createJsonFileStorage(filePath: string, type: 'kv' | 'list'): KVStorageAdapter | ListStorageAdapter<{
101
+ id: number | string;
102
+ }>;
103
+ /**
104
+ * 创建内存存储
105
+ */
106
+ export declare function createInMemoryStorage(type: 'kv' | 'list'): KVStorageAdapter | ListStorageAdapter<{
107
+ id: number | string;
108
+ }>;
109
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/spi/storage.ts"],"names":[],"mappings":"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"}