@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.
- package/README.md +93 -16
- package/dist/cjs/agent/agent-server.d.ts.map +1 -1
- package/dist/cjs/agent/agent-server.js +50 -15
- package/dist/cjs/agent/agent-server.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +23 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/service/cache.service.d.ts +69 -0
- package/dist/cjs/service/cache.service.d.ts.map +1 -0
- package/dist/cjs/service/cache.service.js +243 -0
- package/dist/cjs/service/cache.service.js.map +1 -0
- package/dist/cjs/service/engine-pool.d.ts +15 -2
- package/dist/cjs/service/engine-pool.d.ts.map +1 -1
- package/dist/cjs/service/engine-pool.js +15 -4
- package/dist/cjs/service/engine-pool.js.map +1 -1
- package/dist/cjs/spi/adapters.d.ts +163 -0
- package/dist/cjs/spi/adapters.d.ts.map +1 -0
- package/dist/cjs/spi/adapters.js +341 -0
- package/dist/cjs/spi/adapters.js.map +1 -0
- package/dist/cjs/spi/examples/typeorm-example.d.ts +208 -0
- package/dist/cjs/spi/examples/typeorm-example.d.ts.map +1 -0
- package/dist/cjs/spi/examples/typeorm-example.js +274 -0
- package/dist/cjs/spi/examples/typeorm-example.js.map +1 -0
- package/dist/cjs/spi/index.d.ts +194 -0
- package/dist/cjs/spi/index.d.ts.map +1 -0
- package/dist/cjs/spi/index.js +227 -0
- package/dist/cjs/spi/index.js.map +1 -0
- package/dist/cjs/spi/storage.d.ts +109 -0
- package/dist/cjs/spi/storage.d.ts.map +1 -0
- package/dist/cjs/spi/storage.js +344 -0
- package/dist/cjs/spi/storage.js.map +1 -0
- package/dist/cjs/spi/types.d.ts +317 -0
- package/dist/cjs/spi/types.d.ts.map +1 -0
- package/dist/cjs/spi/types.js +6 -0
- package/dist/cjs/spi/types.js.map +1 -0
- package/dist/cjs/types.d.ts +63 -8
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/agent/agent-server.d.ts.map +1 -1
- package/dist/esm/agent/agent-server.js +50 -15
- package/dist/esm/agent/agent-server.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/service/cache.service.d.ts +69 -0
- package/dist/esm/service/cache.service.d.ts.map +1 -0
- package/dist/esm/service/cache.service.js +237 -0
- package/dist/esm/service/cache.service.js.map +1 -0
- package/dist/esm/service/engine-pool.d.ts +15 -2
- package/dist/esm/service/engine-pool.d.ts.map +1 -1
- package/dist/esm/service/engine-pool.js +15 -4
- package/dist/esm/service/engine-pool.js.map +1 -1
- package/dist/esm/spi/adapters.d.ts +163 -0
- package/dist/esm/spi/adapters.d.ts.map +1 -0
- package/dist/esm/spi/adapters.js +329 -0
- package/dist/esm/spi/adapters.js.map +1 -0
- package/dist/esm/spi/examples/typeorm-example.d.ts +208 -0
- package/dist/esm/spi/examples/typeorm-example.d.ts.map +1 -0
- package/dist/esm/spi/examples/typeorm-example.js +315 -0
- package/dist/esm/spi/examples/typeorm-example.js.map +1 -0
- package/dist/esm/spi/index.d.ts +194 -0
- package/dist/esm/spi/index.d.ts.map +1 -0
- package/dist/esm/spi/index.js +215 -0
- package/dist/esm/spi/index.js.map +1 -0
- package/dist/esm/spi/storage.d.ts +109 -0
- package/dist/esm/spi/storage.d.ts.map +1 -0
- package/dist/esm/spi/storage.js +301 -0
- package/dist/esm/spi/storage.js.map +1 -0
- package/dist/esm/spi/types.d.ts +317 -0
- package/dist/esm/spi/types.d.ts.map +1 -0
- package/dist/esm/spi/types.js +5 -0
- package/dist/esm/spi/types.js.map +1 -0
- package/dist/esm/types.d.ts +63 -8
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// 框架适配器 — 支持不同 Web 框架
|
|
4
|
+
// ============================================================
|
|
5
|
+
/**
|
|
6
|
+
* ## 设计原则
|
|
7
|
+
*
|
|
8
|
+
* agent-server 核心只定义**接口**(能力契约),不依赖具体框架。
|
|
9
|
+
*
|
|
10
|
+
* 以下适配器实现是**可选参考实现**,业务层可以:
|
|
11
|
+
* 1. 直接使用(如果满足需求)
|
|
12
|
+
* 2. 参考实现自己定制(如果有特殊需求)
|
|
13
|
+
* 3. 完全自己实现(如果框架不同)
|
|
14
|
+
*
|
|
15
|
+
* ### 使用示例
|
|
16
|
+
*
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // 方式 1:直接使用提供的适配器
|
|
19
|
+
* import { KoaSSEAdapter } from '@cicctencent/agent-server';
|
|
20
|
+
* const adapter = new KoaSSEAdapter(ctx);
|
|
21
|
+
*
|
|
22
|
+
* // 方式 2:继承并扩展
|
|
23
|
+
* class MySSEAdapter extends KoaSSEAdapter {
|
|
24
|
+
* write(data: string) {
|
|
25
|
+
* // 添加自定义逻辑(如日志、监控)
|
|
26
|
+
* console.log('[SSE]', data.length, 'bytes');
|
|
27
|
+
* super.write(data);
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
*
|
|
31
|
+
* // 方式 3:完全自己实现
|
|
32
|
+
* class CustomSSEAdapter implements SSEResponseAdapter {
|
|
33
|
+
* // 完全自定义实现
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.CustomSSEAdapter = exports.KoaRequestAdapter = exports.ExpressRequestAdapter = exports.NativeHttpSSEAdapter = exports.FastifySSEAdapter = exports.KoaSSEAdapter = exports.ExpressSSEAdapter = void 0;
|
|
39
|
+
exports.adaptSSE = adaptSSE;
|
|
40
|
+
exports.adaptRequest = adaptRequest;
|
|
41
|
+
// ============================================================
|
|
42
|
+
// SSE 响应适配器(参考实现)
|
|
43
|
+
// ============================================================
|
|
44
|
+
/**
|
|
45
|
+
* Express SSE 适配器(参考实现)
|
|
46
|
+
*
|
|
47
|
+
* 业务层可以:
|
|
48
|
+
* - 直接使用
|
|
49
|
+
* - 继承扩展
|
|
50
|
+
* - 参考 implementation 自己实现
|
|
51
|
+
*/
|
|
52
|
+
class ExpressSSEAdapter {
|
|
53
|
+
res;
|
|
54
|
+
constructor(res) {
|
|
55
|
+
this.res = res;
|
|
56
|
+
}
|
|
57
|
+
write(data) {
|
|
58
|
+
this.res.write(data);
|
|
59
|
+
}
|
|
60
|
+
end() {
|
|
61
|
+
this.res.end();
|
|
62
|
+
}
|
|
63
|
+
get writableEnded() {
|
|
64
|
+
return this.res.writableEnded;
|
|
65
|
+
}
|
|
66
|
+
setHeader(name, value) {
|
|
67
|
+
this.res.setHeader(name, value);
|
|
68
|
+
}
|
|
69
|
+
flushHeaders() {
|
|
70
|
+
this.res.flushHeaders?.();
|
|
71
|
+
}
|
|
72
|
+
status(code) {
|
|
73
|
+
this.res.status(code);
|
|
74
|
+
}
|
|
75
|
+
json(data) {
|
|
76
|
+
this.res.json(data);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.ExpressSSEAdapter = ExpressSSEAdapter;
|
|
80
|
+
/**
|
|
81
|
+
* Koa/MidwayJS SSE 适配器(参考实现)
|
|
82
|
+
*/
|
|
83
|
+
class KoaSSEAdapter {
|
|
84
|
+
ctx;
|
|
85
|
+
constructor(ctx) {
|
|
86
|
+
this.ctx = ctx;
|
|
87
|
+
// 禁止 Koa 框架自行处理响应,让 SSE 流完全由适配器控制
|
|
88
|
+
if (this.ctx && 'respond' in this.ctx) {
|
|
89
|
+
this.ctx.respond = false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
write(data) {
|
|
93
|
+
this.ctx.res.write(data);
|
|
94
|
+
}
|
|
95
|
+
end() {
|
|
96
|
+
this.ctx.res.end();
|
|
97
|
+
}
|
|
98
|
+
get writableEnded() {
|
|
99
|
+
return this.ctx.res.writableEnded;
|
|
100
|
+
}
|
|
101
|
+
setHeader(name, value) {
|
|
102
|
+
this.ctx.set(name, String(value));
|
|
103
|
+
}
|
|
104
|
+
flushHeaders() {
|
|
105
|
+
this.ctx.res.flushHeaders?.();
|
|
106
|
+
}
|
|
107
|
+
status(code) {
|
|
108
|
+
this.ctx.status = code;
|
|
109
|
+
}
|
|
110
|
+
json(data) {
|
|
111
|
+
this.ctx.body = data;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.KoaSSEAdapter = KoaSSEAdapter;
|
|
115
|
+
/**
|
|
116
|
+
* Fastify SSE 适配器(参考实现)
|
|
117
|
+
*/
|
|
118
|
+
class FastifySSEAdapter {
|
|
119
|
+
reply;
|
|
120
|
+
constructor(reply) {
|
|
121
|
+
this.reply = reply;
|
|
122
|
+
}
|
|
123
|
+
write(data) {
|
|
124
|
+
this.reply.raw.write(data);
|
|
125
|
+
}
|
|
126
|
+
end() {
|
|
127
|
+
this.reply.raw.end();
|
|
128
|
+
}
|
|
129
|
+
get writableEnded() {
|
|
130
|
+
return this.reply.raw.writableEnded;
|
|
131
|
+
}
|
|
132
|
+
setHeader(name, value) {
|
|
133
|
+
this.reply.header(name, value);
|
|
134
|
+
}
|
|
135
|
+
flushHeaders() {
|
|
136
|
+
this.reply.raw.flushHeaders?.();
|
|
137
|
+
}
|
|
138
|
+
status(code) {
|
|
139
|
+
this.reply.code(code);
|
|
140
|
+
}
|
|
141
|
+
json(data) {
|
|
142
|
+
this.reply.send(data);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.FastifySSEAdapter = FastifySSEAdapter;
|
|
146
|
+
/**
|
|
147
|
+
* 原生 HTTP SSE 适配器
|
|
148
|
+
*/
|
|
149
|
+
class NativeHttpSSEAdapter {
|
|
150
|
+
res;
|
|
151
|
+
constructor(res) {
|
|
152
|
+
this.res = res;
|
|
153
|
+
}
|
|
154
|
+
write(data) {
|
|
155
|
+
this.res.write(data);
|
|
156
|
+
}
|
|
157
|
+
end() {
|
|
158
|
+
this.res.end();
|
|
159
|
+
}
|
|
160
|
+
get writableEnded() {
|
|
161
|
+
return this.res.writableEnded;
|
|
162
|
+
}
|
|
163
|
+
setHeader(name, value) {
|
|
164
|
+
this.res.setHeader(name, value);
|
|
165
|
+
}
|
|
166
|
+
flushHeaders() {
|
|
167
|
+
this.res.flushHeaders?.();
|
|
168
|
+
}
|
|
169
|
+
status(code) {
|
|
170
|
+
this.res.statusCode = code;
|
|
171
|
+
}
|
|
172
|
+
json(data) {
|
|
173
|
+
this.res.setHeader('Content-Type', 'application/json');
|
|
174
|
+
this.res.end(JSON.stringify(data));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.NativeHttpSSEAdapter = NativeHttpSSEAdapter;
|
|
178
|
+
/**
|
|
179
|
+
* 自动检测框架类型并创建适配器
|
|
180
|
+
*
|
|
181
|
+
* ⚠️ 注意:此函数是便捷工具,但建议业务层显式创建适配器:
|
|
182
|
+
*
|
|
183
|
+
* ```typescript
|
|
184
|
+
* // 推荐:显式创建(更可控)
|
|
185
|
+
* const adapter = new KoaSSEAdapter(ctx);
|
|
186
|
+
*
|
|
187
|
+
* // 不推荐:自动检测(可能误判)
|
|
188
|
+
* const adapter = adaptSSE(ctx);
|
|
189
|
+
* ```
|
|
190
|
+
*
|
|
191
|
+
* 自动检测可能存在的问题:
|
|
192
|
+
* - 框架版本差异导致误判
|
|
193
|
+
* - 自定义响应对象无法识别
|
|
194
|
+
* - 难以调试
|
|
195
|
+
*/
|
|
196
|
+
function adaptSSE(res) {
|
|
197
|
+
// Express: res.setHeader, res.write, res.end
|
|
198
|
+
if (res && typeof res === 'object' && 'setHeader' in res && 'write' in res) {
|
|
199
|
+
// 检查是否是 Koa Context (有 ctx.res 且 ctx.set)
|
|
200
|
+
if ('ctx' in res || ('req' in res && 'socket' in res.req)) {
|
|
201
|
+
return new KoaSSEAdapter(res);
|
|
202
|
+
}
|
|
203
|
+
// 检查是否是 Fastify Reply (有 .raw)
|
|
204
|
+
if ('raw' in res && 'header' in res) {
|
|
205
|
+
return new FastifySSEAdapter(res);
|
|
206
|
+
}
|
|
207
|
+
// Express 或原生 HTTP
|
|
208
|
+
return new ExpressSSEAdapter(res);
|
|
209
|
+
}
|
|
210
|
+
// Koa Context
|
|
211
|
+
if (res && typeof res === 'object' && 'res' in res && 'set' in res) {
|
|
212
|
+
return new KoaSSEAdapter(res);
|
|
213
|
+
}
|
|
214
|
+
// Fastify Reply
|
|
215
|
+
if (res && typeof res === 'object' && 'raw' in res && 'header' in res) {
|
|
216
|
+
return new FastifySSEAdapter(res);
|
|
217
|
+
}
|
|
218
|
+
// 原生 HTTP Response
|
|
219
|
+
if (res && typeof res === 'object' && 'write' in res && 'end' in res) {
|
|
220
|
+
return new NativeHttpSSEAdapter(res);
|
|
221
|
+
}
|
|
222
|
+
throw new Error('Unsupported response type. Please provide a custom SSE adapter.');
|
|
223
|
+
}
|
|
224
|
+
// ============================================================
|
|
225
|
+
// 请求上下文适配器
|
|
226
|
+
// ============================================================
|
|
227
|
+
/**
|
|
228
|
+
* Express 请求上下文适配器
|
|
229
|
+
*/
|
|
230
|
+
class ExpressRequestAdapter {
|
|
231
|
+
req;
|
|
232
|
+
constructor(req) {
|
|
233
|
+
this.req = req;
|
|
234
|
+
}
|
|
235
|
+
getUserId() {
|
|
236
|
+
return this.req.user?.id ?? this.req.headers['x-user-id'];
|
|
237
|
+
}
|
|
238
|
+
getWorkspaceId() {
|
|
239
|
+
const ws = this.req.headers['x-workspace-id'] ?? this.req.query.workspaceId;
|
|
240
|
+
return ws ? Number(ws) : undefined;
|
|
241
|
+
}
|
|
242
|
+
getHeader(name) {
|
|
243
|
+
return this.req.headers[name.toLowerCase()];
|
|
244
|
+
}
|
|
245
|
+
hasPermission(permission) {
|
|
246
|
+
return this.req.user?.permissions?.includes(permission) ?? false;
|
|
247
|
+
}
|
|
248
|
+
getRawRequest() {
|
|
249
|
+
return this.req;
|
|
250
|
+
}
|
|
251
|
+
getRawResponse() {
|
|
252
|
+
return this.req.res;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
exports.ExpressRequestAdapter = ExpressRequestAdapter;
|
|
256
|
+
/**
|
|
257
|
+
* Koa/MidwayJS 请求上下文适配器
|
|
258
|
+
*/
|
|
259
|
+
class KoaRequestAdapter {
|
|
260
|
+
ctx;
|
|
261
|
+
constructor(ctx) {
|
|
262
|
+
this.ctx = ctx;
|
|
263
|
+
}
|
|
264
|
+
getUserId() {
|
|
265
|
+
return this.ctx.state?.user?.id ?? this.ctx.get('x-user-id');
|
|
266
|
+
}
|
|
267
|
+
getWorkspaceId() {
|
|
268
|
+
const ws = this.ctx.get('x-workspace-id') ?? this.ctx.query.workspaceId;
|
|
269
|
+
return ws ? Number(ws) : undefined;
|
|
270
|
+
}
|
|
271
|
+
getHeader(name) {
|
|
272
|
+
return this.ctx.get(name);
|
|
273
|
+
}
|
|
274
|
+
hasPermission(permission) {
|
|
275
|
+
return this.ctx.state?.user?.permissions?.includes(permission) ?? false;
|
|
276
|
+
}
|
|
277
|
+
getRawRequest() {
|
|
278
|
+
return this.ctx.req;
|
|
279
|
+
}
|
|
280
|
+
getRawResponse() {
|
|
281
|
+
return this.ctx.res;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
exports.KoaRequestAdapter = KoaRequestAdapter;
|
|
285
|
+
/**
|
|
286
|
+
* 自动检测框架类型并创建请求适配器
|
|
287
|
+
*/
|
|
288
|
+
function adaptRequest(req) {
|
|
289
|
+
// Koa Context
|
|
290
|
+
if (req && typeof req === 'object' && 'state' in req && 'get' in req) {
|
|
291
|
+
return new KoaRequestAdapter(req);
|
|
292
|
+
}
|
|
293
|
+
// Express Request
|
|
294
|
+
if (req && typeof req === 'object' && 'headers' in req && 'query' in req) {
|
|
295
|
+
return new ExpressRequestAdapter(req);
|
|
296
|
+
}
|
|
297
|
+
throw new Error('Unsupported request type. Please provide a custom request adapter.');
|
|
298
|
+
}
|
|
299
|
+
// ============================================================
|
|
300
|
+
// 自定义适配器示例
|
|
301
|
+
// ============================================================
|
|
302
|
+
/**
|
|
303
|
+
* 自定义 SSE 适配器示例
|
|
304
|
+
* 应用层可参考此实现创建自己的适配器
|
|
305
|
+
*/
|
|
306
|
+
class CustomSSEAdapter {
|
|
307
|
+
onWrite;
|
|
308
|
+
onEnd;
|
|
309
|
+
onFlush;
|
|
310
|
+
_writableEnded = false;
|
|
311
|
+
headers = new Map();
|
|
312
|
+
constructor(onWrite, onEnd, onFlush) {
|
|
313
|
+
this.onWrite = onWrite;
|
|
314
|
+
this.onEnd = onEnd;
|
|
315
|
+
this.onFlush = onFlush;
|
|
316
|
+
}
|
|
317
|
+
write(data) {
|
|
318
|
+
if (this._writableEnded)
|
|
319
|
+
return;
|
|
320
|
+
this.onWrite(data);
|
|
321
|
+
}
|
|
322
|
+
end() {
|
|
323
|
+
this._writableEnded = true;
|
|
324
|
+
this.onEnd();
|
|
325
|
+
}
|
|
326
|
+
get writableEnded() {
|
|
327
|
+
return this._writableEnded;
|
|
328
|
+
}
|
|
329
|
+
setHeader(name, value) {
|
|
330
|
+
this.headers.set(name, String(value));
|
|
331
|
+
}
|
|
332
|
+
flushHeaders() {
|
|
333
|
+
this.onFlush?.();
|
|
334
|
+
}
|
|
335
|
+
/** 获取已设置的响应头 */
|
|
336
|
+
getHeaders() {
|
|
337
|
+
return Object.fromEntries(this.headers);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
exports.CustomSSEAdapter = CustomSSEAdapter;
|
|
341
|
+
//# sourceMappingURL=adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/spi/adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import type { ChatStoreProvider, BaseThreadEntity, BaseMessageEntity, BaseSettingsEntity, ListStorageAdapter } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* BI 项目的 Thread 实体(TypeORM)
|
|
4
|
+
* 注意:字段可能与 agent-server 默认实体不同
|
|
5
|
+
*/
|
|
6
|
+
interface BIThreadEntity extends BaseThreadEntity {
|
|
7
|
+
id: number;
|
|
8
|
+
workspaceId?: number;
|
|
9
|
+
userId?: number;
|
|
10
|
+
agentType?: string;
|
|
11
|
+
modelConfig?: string;
|
|
12
|
+
createdAt: Date;
|
|
13
|
+
updatedAt: Date;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* BI 项目的 Message 实体(TypeORM)
|
|
17
|
+
*/
|
|
18
|
+
interface BIMessageEntity extends BaseMessageEntity {
|
|
19
|
+
id: number;
|
|
20
|
+
threadId: number;
|
|
21
|
+
tokens?: number;
|
|
22
|
+
latency?: number;
|
|
23
|
+
model?: string;
|
|
24
|
+
createdAt: Date;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* BI 项目的 Settings 实体
|
|
28
|
+
*/
|
|
29
|
+
interface BISettingsEntity extends BaseSettingsEntity {
|
|
30
|
+
id: number;
|
|
31
|
+
userId: number;
|
|
32
|
+
theme: string;
|
|
33
|
+
language: string;
|
|
34
|
+
modelProviders: Array<{
|
|
35
|
+
id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
provider: string;
|
|
38
|
+
model: string;
|
|
39
|
+
apiKey?: string;
|
|
40
|
+
baseUrl?: string;
|
|
41
|
+
}>;
|
|
42
|
+
createdAt: Date;
|
|
43
|
+
updatedAt: Date;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* TypeORM 列表存储适配器
|
|
47
|
+
* 将 TypeORM Repository 包装为 ListStorageAdapter
|
|
48
|
+
*/
|
|
49
|
+
declare class TypeORMListStorage<T extends {
|
|
50
|
+
id: number | string;
|
|
51
|
+
}> implements ListStorageAdapter<T> {
|
|
52
|
+
private data;
|
|
53
|
+
list(): Promise<T[]>;
|
|
54
|
+
findById(id: number | string): Promise<T | null>;
|
|
55
|
+
add(entity: T): Promise<T>;
|
|
56
|
+
update(id: number | string, data: Partial<T>): Promise<T | null>;
|
|
57
|
+
remove(id: number | string): Promise<boolean>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* BI 项目的 ChatStoreProvider 实现
|
|
61
|
+
* 使用 TypeORM Repository 作为底层存储
|
|
62
|
+
*/
|
|
63
|
+
declare class TypeORMChatStoreProvider implements ChatStoreProvider<BIThreadEntity, BIMessageEntity> {
|
|
64
|
+
private threadStorage;
|
|
65
|
+
private messageStorages;
|
|
66
|
+
constructor();
|
|
67
|
+
private getMessageStorage;
|
|
68
|
+
getThreads(workspaceId?: number | string): Promise<BIThreadEntity[]>;
|
|
69
|
+
getThread(id: number | string): Promise<BIThreadEntity | undefined>;
|
|
70
|
+
createThread(data: Partial<BIThreadEntity>): Promise<BIThreadEntity>;
|
|
71
|
+
updateThread(id: number | string, data: Partial<BIThreadEntity>): Promise<BIThreadEntity | undefined>;
|
|
72
|
+
deleteThread(id: number | string): Promise<boolean>;
|
|
73
|
+
getMessages(threadId: number | string, options?: {
|
|
74
|
+
limit?: number;
|
|
75
|
+
offset?: number;
|
|
76
|
+
}): Promise<{
|
|
77
|
+
items: BIMessageEntity[];
|
|
78
|
+
total: number;
|
|
79
|
+
hasMore: boolean;
|
|
80
|
+
}>;
|
|
81
|
+
addMessage(data: Partial<BIMessageEntity> & {
|
|
82
|
+
threadId: number | string;
|
|
83
|
+
role: string;
|
|
84
|
+
content: string;
|
|
85
|
+
}): Promise<BIMessageEntity>;
|
|
86
|
+
updateMessage(threadId: number | string, id: number | string, data: Partial<BIMessageEntity>): Promise<BIMessageEntity | undefined>;
|
|
87
|
+
deleteMessage(threadId: number | string, id: number | string): Promise<boolean>;
|
|
88
|
+
clearThreadMessages(threadId: number | string): Promise<void>;
|
|
89
|
+
buildThreadHistory(threadId: number | string, limit?: number): Promise<any[]>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* MidwayJS Agent 服务示例
|
|
93
|
+
* 使用 SPI 适配到 MidwayJS + TypeORM
|
|
94
|
+
*
|
|
95
|
+
* 在实际项目中,这会是:
|
|
96
|
+
*
|
|
97
|
+
* @Provide()
|
|
98
|
+
* @Scope(ScopeEnum.Singleton)
|
|
99
|
+
* export class AgentService {
|
|
100
|
+
* @Inject()
|
|
101
|
+
* threadRepository: Repository<BIThreadEntity>;
|
|
102
|
+
*
|
|
103
|
+
* @Inject()
|
|
104
|
+
* messageRepository: Repository<BIMessageEntity>;
|
|
105
|
+
*
|
|
106
|
+
* private server: AgentServer;
|
|
107
|
+
*
|
|
108
|
+
* @Init()
|
|
109
|
+
* async init() {
|
|
110
|
+
* const chatStoreProvider = new TypeORMChatStoreProvider(
|
|
111
|
+
* this.threadRepository,
|
|
112
|
+
* this.messageRepository
|
|
113
|
+
* );
|
|
114
|
+
*
|
|
115
|
+
* this.server = createAgentServer({
|
|
116
|
+
* llmProvider: await this.createLLMProvider(),
|
|
117
|
+
* chatStoreProvider,
|
|
118
|
+
* // 使用 Koa 适配器
|
|
119
|
+
* createSSEResponseAdapter: (ctx) => new KoaSSEAdapter(ctx),
|
|
120
|
+
* });
|
|
121
|
+
* }
|
|
122
|
+
*
|
|
123
|
+
* @Get('/chat/stream')
|
|
124
|
+
* async chatStream(@Ctx() ctx: Context, @Query() query: { message: string }) {
|
|
125
|
+
* const adapter = new KoaSSEAdapter(ctx);
|
|
126
|
+
* await this.server.runAgentStream(adapter, { content: query.message });
|
|
127
|
+
* }
|
|
128
|
+
* }
|
|
129
|
+
*/
|
|
130
|
+
export { TypeORMListStorage, TypeORMChatStoreProvider, BIThreadEntity, BIMessageEntity, BISettingsEntity, };
|
|
131
|
+
/**
|
|
132
|
+
* ## 使用说明
|
|
133
|
+
*
|
|
134
|
+
* ### 1. 在 MidwayJS 项目中使用 agent-server
|
|
135
|
+
*
|
|
136
|
+
* ```typescript
|
|
137
|
+
* // src/service/agent.service.ts
|
|
138
|
+
* import { Provide, Scope, ScopeEnum, Inject, Init, Get, Ctx, Query } from '@midwayjs/core';
|
|
139
|
+
* import { Context } from '@midwayjs/koa';
|
|
140
|
+
* import { createAgentServer, KoaSSEAdapter, type AgentServer } from '@cicctencent/agent-server';
|
|
141
|
+
* import { TypeORMChatStoreProvider } from './spi/typeorm-chat-provider';
|
|
142
|
+
*
|
|
143
|
+
* @Provide()
|
|
144
|
+
* @Scope(ScopeEnum.Singleton)
|
|
145
|
+
* export class AgentService {
|
|
146
|
+
* @Inject()
|
|
147
|
+
* threadRepository: Repository<ThreadEntity>;
|
|
148
|
+
*
|
|
149
|
+
* @Inject()
|
|
150
|
+
* messageRepository: Repository<MessageEntity>;
|
|
151
|
+
*
|
|
152
|
+
* private server: AgentServer;
|
|
153
|
+
*
|
|
154
|
+
* @Init()
|
|
155
|
+
* async init() {
|
|
156
|
+
* // 使用 TypeORM 存储适配器
|
|
157
|
+
* const chatStoreProvider = new TypeORMChatStoreProvider(
|
|
158
|
+
* this.threadRepository,
|
|
159
|
+
* this.messageRepository
|
|
160
|
+
* );
|
|
161
|
+
*
|
|
162
|
+
* this.server = createAgentServer({
|
|
163
|
+
* llmProvider: await this.createLLMProvider(),
|
|
164
|
+
* chatStoreProvider, // 替换默认 JSON 文件存储
|
|
165
|
+
* });
|
|
166
|
+
* }
|
|
167
|
+
*
|
|
168
|
+
* @Get('/chat/stream')
|
|
169
|
+
* async chatStream(@Ctx() ctx: Context, @Query() query: { message: string }) {
|
|
170
|
+
* // 使用 Koa/MidwayJS SSE 适配器
|
|
171
|
+
* const adapter = new KoaSSEAdapter(ctx);
|
|
172
|
+
* await this.server.runAgentStream(adapter, { content: query.message });
|
|
173
|
+
* }
|
|
174
|
+
* }
|
|
175
|
+
* ```
|
|
176
|
+
*
|
|
177
|
+
* ### 2. 自定义实体字段
|
|
178
|
+
*
|
|
179
|
+
* agent-server 现在支持泛型实体类型,你可以:
|
|
180
|
+
* - 使用自己的实体结构(如 TypeORM 实体)
|
|
181
|
+
* - 自定义字段(如 userId, modelConfig 等)
|
|
182
|
+
* - 使用不同的 ID 类型(number / string / UUID)
|
|
183
|
+
*
|
|
184
|
+
* ### 3. 组件级使用(不依赖工厂)
|
|
185
|
+
*
|
|
186
|
+
* 如果不想使用 createAgentServer 工厂,可以只导入需要的组件:
|
|
187
|
+
*
|
|
188
|
+
* ```typescript
|
|
189
|
+
* import {
|
|
190
|
+
* MemoryService,
|
|
191
|
+
* writeSSE,
|
|
192
|
+
* createBuiltinTools,
|
|
193
|
+
* KoaSSEAdapter
|
|
194
|
+
* } from '@cicctencent/agent-server';
|
|
195
|
+
*
|
|
196
|
+
* // 只使用需要的组件
|
|
197
|
+
* const memoryService = new MemoryService('./data');
|
|
198
|
+
* const tools = createBuiltinTools();
|
|
199
|
+
*
|
|
200
|
+
* // 在 MidwayJS 中使用 SSE
|
|
201
|
+
* @Get('/stream')
|
|
202
|
+
* async stream(@Ctx() ctx: Context) {
|
|
203
|
+
* const adapter = new KoaSSEAdapter(ctx);
|
|
204
|
+
* writeSSE(adapter, 'start', { message: 'Hello' });
|
|
205
|
+
* }
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
//# sourceMappingURL=typeorm-example.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeorm-example.d.ts","sourceRoot":"","sources":["../../../../src/spi/examples/typeorm-example.ts"],"names":[],"mappings":"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"}
|