@cicctencent/agent-server 0.1.2 → 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/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 +55 -3
- package/dist/cjs/spi/adapters.d.ts.map +1 -1
- package/dist/cjs/spi/adapters.js +61 -5
- package/dist/cjs/spi/adapters.js.map +1 -1
- package/dist/cjs/spi/index.d.ts +84 -0
- package/dist/cjs/spi/index.d.ts.map +1 -1
- package/dist/cjs/spi/index.js +90 -6
- package/dist/cjs/spi/index.js.map +1 -1
- package/dist/cjs/spi/types.d.ts +7 -7
- package/dist/cjs/spi/types.d.ts.map +1 -1
- 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/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 +55 -3
- package/dist/esm/spi/adapters.d.ts.map +1 -1
- package/dist/esm/spi/adapters.js +61 -5
- package/dist/esm/spi/adapters.js.map +1 -1
- package/dist/esm/spi/index.d.ts +84 -0
- package/dist/esm/spi/index.d.ts.map +1 -1
- package/dist/esm/spi/index.js +90 -6
- package/dist/esm/spi/index.js.map +1 -1
- package/dist/esm/spi/types.d.ts +7 -7
- package/dist/esm/spi/types.d.ts.map +1 -1
- 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,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// CacheService — TTL 缓存包装器(多进程/多实例场景)
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// 问题:上层 Web 项目多进程部署时,每次 getSettings() / getProfile() 都查 DB 会产生大量重复查询。
|
|
7
|
+
// 解决:在 Provider 之上加一层 TTL 缓存,减少 DB 压力;同时支持主动失效。
|
|
8
|
+
//
|
|
9
|
+
// 缓存策略:
|
|
10
|
+
// - TTL 到期自动过期,下次请求重新从底层 Provider 加载
|
|
11
|
+
// - 主动失效通过 invalidate() 清除指定 key 或全部
|
|
12
|
+
// - 跨进程失效通过 CacheInvalidationNotifier 实现(如 Redis pub/sub)
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.CachedAgentProfileProvider = exports.CachedSettingsProvider = exports.TTLCache = void 0;
|
|
15
|
+
/**
|
|
16
|
+
* 通用 TTL 缓存。
|
|
17
|
+
*
|
|
18
|
+
* - `ttl > 0`:启用缓存,过期后自动失效
|
|
19
|
+
* - `ttl === 0`:禁用缓存,get() 永远返回 null(每次直接查 Provider)
|
|
20
|
+
*/
|
|
21
|
+
class TTLCache {
|
|
22
|
+
cache = new Map();
|
|
23
|
+
ttl;
|
|
24
|
+
constructor(ttlMs = 60_000) {
|
|
25
|
+
this.ttl = ttlMs;
|
|
26
|
+
}
|
|
27
|
+
/** 是否启用缓存 */
|
|
28
|
+
get enabled() {
|
|
29
|
+
return this.ttl > 0;
|
|
30
|
+
}
|
|
31
|
+
/** 更新 TTL(不影响已缓存条目的过期时间) */
|
|
32
|
+
setTTL(ttlMs) {
|
|
33
|
+
this.ttl = ttlMs;
|
|
34
|
+
}
|
|
35
|
+
/** 获取缓存值(未命中或过期返回 null) */
|
|
36
|
+
get(key) {
|
|
37
|
+
if (!this.enabled)
|
|
38
|
+
return null;
|
|
39
|
+
const entry = this.cache.get(key);
|
|
40
|
+
if (!entry)
|
|
41
|
+
return null;
|
|
42
|
+
if (Date.now() > entry.expiresAt) {
|
|
43
|
+
this.cache.delete(key);
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return entry.value;
|
|
47
|
+
}
|
|
48
|
+
/** 设置缓存值 */
|
|
49
|
+
set(key, value) {
|
|
50
|
+
if (!this.enabled)
|
|
51
|
+
return;
|
|
52
|
+
this.cache.set(key, { value, expiresAt: Date.now() + this.ttl });
|
|
53
|
+
}
|
|
54
|
+
/** 清除指定 key 的缓存 */
|
|
55
|
+
invalidate(key) {
|
|
56
|
+
if (key !== undefined) {
|
|
57
|
+
this.cache.delete(key);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
this.cache.clear();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** 清除所有缓存 */
|
|
64
|
+
clear() {
|
|
65
|
+
this.cache.clear();
|
|
66
|
+
}
|
|
67
|
+
/** 清除已过期的条目 */
|
|
68
|
+
purgeExpired() {
|
|
69
|
+
const now = Date.now();
|
|
70
|
+
for (const [key, entry] of this.cache) {
|
|
71
|
+
if (now > entry.expiresAt) {
|
|
72
|
+
this.cache.delete(key);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** 缓存条目数量 */
|
|
77
|
+
get size() {
|
|
78
|
+
return this.cache.size;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.TTLCache = TTLCache;
|
|
82
|
+
// ============================================================
|
|
83
|
+
// CachedSettingsProvider — Settings 缓存包装器
|
|
84
|
+
// ============================================================
|
|
85
|
+
/**
|
|
86
|
+
* 包装 SettingsProvider,增加 TTL 缓存。
|
|
87
|
+
*
|
|
88
|
+
* 多进程部署时,每个进程独立缓存 Settings,TTL 到期后重新从底层 Provider 加载。
|
|
89
|
+
* 主动失效通过 `invalidate()` 清除缓存,上层可通过 `CacheInvalidationNotifier` 跨进程通知。
|
|
90
|
+
*/
|
|
91
|
+
class CachedSettingsProvider {
|
|
92
|
+
cache;
|
|
93
|
+
delegate;
|
|
94
|
+
constructor(delegate, ttlMs = 60_000) {
|
|
95
|
+
this.delegate = delegate;
|
|
96
|
+
this.cache = new TTLCache(ttlMs);
|
|
97
|
+
}
|
|
98
|
+
getSettings() {
|
|
99
|
+
const cached = this.cache.get('settings');
|
|
100
|
+
if (cached)
|
|
101
|
+
return cached;
|
|
102
|
+
const value = this.delegate.getSettings();
|
|
103
|
+
this.cache.set('settings', value);
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
updateSettings(updates) {
|
|
107
|
+
const value = this.delegate.updateSettings(updates);
|
|
108
|
+
// 更新后立即刷新缓存
|
|
109
|
+
this.cache.set('settings', value);
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
resetSettings() {
|
|
113
|
+
if (this.delegate.resetSettings) {
|
|
114
|
+
const value = this.delegate.resetSettings();
|
|
115
|
+
this.cache.set('settings', value);
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
this.cache.invalidate('settings');
|
|
119
|
+
return this.getSettings();
|
|
120
|
+
}
|
|
121
|
+
/** 清除缓存 */
|
|
122
|
+
invalidate() {
|
|
123
|
+
this.cache.invalidate('settings');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.CachedSettingsProvider = CachedSettingsProvider;
|
|
127
|
+
// ============================================================
|
|
128
|
+
// CachedAgentProfileProvider — Profile 缓存包装器
|
|
129
|
+
// ============================================================
|
|
130
|
+
/**
|
|
131
|
+
* 包装 AgentProfileProvider,增加 TTL 缓存。
|
|
132
|
+
*
|
|
133
|
+
* 多进程部署时,每个进程独立缓存 Profile,TTL 到期后重新从底层 Provider 加载。
|
|
134
|
+
* 主动失效通过 `invalidate(profileId?)` 清除指定或全部 Profile 缓存。
|
|
135
|
+
*/
|
|
136
|
+
class CachedAgentProfileProvider {
|
|
137
|
+
cache;
|
|
138
|
+
listCache;
|
|
139
|
+
defaultCache;
|
|
140
|
+
delegate;
|
|
141
|
+
constructor(delegate, ttlMs = 60_000) {
|
|
142
|
+
this.delegate = delegate;
|
|
143
|
+
this.cache = new TTLCache(ttlMs);
|
|
144
|
+
this.listCache = new TTLCache(ttlMs);
|
|
145
|
+
this.defaultCache = new TTLCache(ttlMs);
|
|
146
|
+
}
|
|
147
|
+
listProfiles() {
|
|
148
|
+
const cached = this.listCache.get('list');
|
|
149
|
+
if (cached)
|
|
150
|
+
return cached;
|
|
151
|
+
const result = this.delegate.listProfiles();
|
|
152
|
+
if (result instanceof Promise) {
|
|
153
|
+
return result.then(value => {
|
|
154
|
+
this.listCache.set('list', value);
|
|
155
|
+
// 同时缓存每个 profile
|
|
156
|
+
for (const p of value)
|
|
157
|
+
this.cache.set(`profile:${p.id}`, p);
|
|
158
|
+
return value;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
this.listCache.set('list', result);
|
|
162
|
+
for (const p of result)
|
|
163
|
+
this.cache.set(`profile:${p.id}`, p);
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
getProfile(id) {
|
|
167
|
+
const cacheKey = `profile:${id}`;
|
|
168
|
+
const cached = this.cache.get(cacheKey);
|
|
169
|
+
if (cached)
|
|
170
|
+
return cached;
|
|
171
|
+
const result = this.delegate.getProfile(id);
|
|
172
|
+
if (result instanceof Promise) {
|
|
173
|
+
return result.then(value => {
|
|
174
|
+
if (value)
|
|
175
|
+
this.cache.set(cacheKey, value);
|
|
176
|
+
return value;
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
if (result)
|
|
180
|
+
this.cache.set(cacheKey, result);
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
getDefaultProfile() {
|
|
184
|
+
const cached = this.defaultCache.get('default');
|
|
185
|
+
if (cached !== null)
|
|
186
|
+
return cached;
|
|
187
|
+
const result = this.delegate.getDefaultProfile();
|
|
188
|
+
if (result instanceof Promise) {
|
|
189
|
+
return result.then(value => {
|
|
190
|
+
this.defaultCache.set('default', value);
|
|
191
|
+
return value;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
this.defaultCache.set('default', result);
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
createProfile(data) {
|
|
198
|
+
const result = this.delegate.createProfile(data);
|
|
199
|
+
// 创建后清除列表缓存和默认缓存
|
|
200
|
+
this.listCache.invalidate('list');
|
|
201
|
+
this.defaultCache.invalidate('default');
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
updateProfile(id, data) {
|
|
205
|
+
const result = this.delegate.updateProfile(id, data);
|
|
206
|
+
// 更新后清除该 profile 缓存 + 列表缓存
|
|
207
|
+
this.cache.invalidate(`profile:${id}`);
|
|
208
|
+
this.listCache.invalidate('list');
|
|
209
|
+
if (result instanceof Promise) {
|
|
210
|
+
return result.then(value => {
|
|
211
|
+
if (value)
|
|
212
|
+
this.cache.set(`profile:${id}`, value);
|
|
213
|
+
return value;
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
if (result)
|
|
217
|
+
this.cache.set(`profile:${id}`, result);
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
deleteProfile(id) {
|
|
221
|
+
const result = this.delegate.deleteProfile(id);
|
|
222
|
+
this.cache.invalidate(`profile:${id}`);
|
|
223
|
+
this.listCache.invalidate('list');
|
|
224
|
+
this.defaultCache.invalidate('default');
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* 清除缓存。
|
|
229
|
+
* @param profileId 指定 profileId 时仅清除该 profile;不指定时清除全部
|
|
230
|
+
*/
|
|
231
|
+
invalidate(profileId) {
|
|
232
|
+
if (profileId !== undefined) {
|
|
233
|
+
this.cache.invalidate(`profile:${profileId}`);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
this.cache.clear();
|
|
237
|
+
this.listCache.clear();
|
|
238
|
+
this.defaultCache.clear();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
exports.CachedAgentProfileProvider = CachedAgentProfileProvider;
|
|
243
|
+
//# sourceMappingURL=cache.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../../src/service/cache.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { EnginePool } from '@cicctencent/agent-core';
|
|
2
2
|
export { EnginePool } from '@cicctencent/agent-core';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/** EnginePool 初始化配置 */
|
|
4
|
+
export interface EnginePoolConfig {
|
|
5
|
+
/** TTL(ms),默认 5 分钟 */
|
|
6
|
+
ttl?: number;
|
|
7
|
+
/** 最大缓存数量,默认 10 */
|
|
8
|
+
maxSize?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 获取全局 Engine 池单例。
|
|
12
|
+
*
|
|
13
|
+
* 首次调用时按 config 创建;后续调用忽略 config(已创建的池不会被覆盖)。
|
|
14
|
+
* 如需重新创建,请先调用 `resetEnginePool()`。
|
|
15
|
+
*/
|
|
16
|
+
export declare function getEnginePool(config?: EnginePoolConfig): EnginePool;
|
|
17
|
+
/** 重置全局池(测试用 / 配置变更后重建) */
|
|
5
18
|
export declare function resetEnginePool(): void;
|
|
6
19
|
//# sourceMappingURL=engine-pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-pool.d.ts","sourceRoot":"","sources":["../../../src/service/engine-pool.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"engine-pool.d.ts","sourceRoot":"","sources":["../../../src/service/engine-pool.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,uBAAuB;AACvB,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAOnE;AAED,2BAA2B;AAC3B,wBAAgB,eAAe,IAAI,IAAI,CAKtC"}
|
|
@@ -11,14 +11,25 @@ var agent_core_2 = require("@cicctencent/agent-core");
|
|
|
11
11
|
Object.defineProperty(exports, "EnginePool", { enumerable: true, get: function () { return agent_core_2.EnginePool; } });
|
|
12
12
|
/** 全局 Engine 池单例 */
|
|
13
13
|
let globalPool = null;
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* 获取全局 Engine 池单例。
|
|
16
|
+
*
|
|
17
|
+
* 首次调用时按 config 创建;后续调用忽略 config(已创建的池不会被覆盖)。
|
|
18
|
+
* 如需重新创建,请先调用 `resetEnginePool()`。
|
|
19
|
+
*/
|
|
20
|
+
function getEnginePool(config) {
|
|
15
21
|
if (!globalPool) {
|
|
16
|
-
|
|
22
|
+
const ttl = config?.ttl ?? 5 * 60_000;
|
|
23
|
+
const maxSize = config?.maxSize ?? 10;
|
|
24
|
+
globalPool = new agent_core_1.EnginePool(ttl, maxSize);
|
|
17
25
|
}
|
|
18
26
|
return globalPool;
|
|
19
27
|
}
|
|
20
|
-
/**
|
|
28
|
+
/** 重置全局池(测试用 / 配置变更后重建) */
|
|
21
29
|
function resetEnginePool() {
|
|
22
|
-
globalPool
|
|
30
|
+
if (globalPool) {
|
|
31
|
+
globalPool.clear();
|
|
32
|
+
globalPool = null;
|
|
33
|
+
}
|
|
23
34
|
}
|
|
24
35
|
//# sourceMappingURL=engine-pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-pool.js","sourceRoot":"","sources":["../../../src/service/engine-pool.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;;;
|
|
1
|
+
{"version":3,"file":"engine-pool.js","sourceRoot":"","sources":["../../../src/service/engine-pool.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;;;AAuB/D,sCAOC;AAGD,0CAKC;AApCD,wDAAqD;AAErD,sDAAqD;AAA5C,wGAAA,UAAU,OAAA;AAUnB,oBAAoB;AACpB,IAAI,UAAU,GAAsB,IAAI,CAAC;AAEzC;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,MAAyB;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;QACtC,UAAU,GAAG,IAAI,uBAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,2BAA2B;AAC3B,SAAgB,eAAe;IAC7B,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ## 设计原则
|
|
3
|
+
*
|
|
4
|
+
* agent-server 核心只定义**接口**(能力契约),不依赖具体框架。
|
|
5
|
+
*
|
|
6
|
+
* 以下适配器实现是**可选参考实现**,业务层可以:
|
|
7
|
+
* 1. 直接使用(如果满足需求)
|
|
8
|
+
* 2. 参考实现自己定制(如果有特殊需求)
|
|
9
|
+
* 3. 完全自己实现(如果框架不同)
|
|
10
|
+
*
|
|
11
|
+
* ### 使用示例
|
|
12
|
+
*
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // 方式 1:直接使用提供的适配器
|
|
15
|
+
* import { KoaSSEAdapter } from '@cicctencent/agent-server';
|
|
16
|
+
* const adapter = new KoaSSEAdapter(ctx);
|
|
17
|
+
*
|
|
18
|
+
* // 方式 2:继承并扩展
|
|
19
|
+
* class MySSEAdapter extends KoaSSEAdapter {
|
|
20
|
+
* write(data: string) {
|
|
21
|
+
* // 添加自定义逻辑(如日志、监控)
|
|
22
|
+
* console.log('[SSE]', data.length, 'bytes');
|
|
23
|
+
* super.write(data);
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* // 方式 3:完全自己实现
|
|
28
|
+
* class CustomSSEAdapter implements SSEResponseAdapter {
|
|
29
|
+
* // 完全自定义实现
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
1
33
|
import type { SSEResponseAdapter, RequestContextAdapter } from './types.js';
|
|
2
34
|
/**
|
|
3
|
-
* Express SSE
|
|
35
|
+
* Express SSE 适配器(参考实现)
|
|
36
|
+
*
|
|
37
|
+
* 业务层可以:
|
|
38
|
+
* - 直接使用
|
|
39
|
+
* - 继承扩展
|
|
40
|
+
* - 参考 implementation 自己实现
|
|
4
41
|
*/
|
|
5
42
|
export declare class ExpressSSEAdapter implements SSEResponseAdapter {
|
|
6
43
|
private res;
|
|
@@ -14,7 +51,7 @@ export declare class ExpressSSEAdapter implements SSEResponseAdapter {
|
|
|
14
51
|
json(data: unknown): void;
|
|
15
52
|
}
|
|
16
53
|
/**
|
|
17
|
-
* Koa/MidwayJS SSE
|
|
54
|
+
* Koa/MidwayJS SSE 适配器(参考实现)
|
|
18
55
|
*/
|
|
19
56
|
export declare class KoaSSEAdapter implements SSEResponseAdapter {
|
|
20
57
|
private ctx;
|
|
@@ -28,7 +65,7 @@ export declare class KoaSSEAdapter implements SSEResponseAdapter {
|
|
|
28
65
|
json(data: unknown): void;
|
|
29
66
|
}
|
|
30
67
|
/**
|
|
31
|
-
* Fastify SSE
|
|
68
|
+
* Fastify SSE 适配器(参考实现)
|
|
32
69
|
*/
|
|
33
70
|
export declare class FastifySSEAdapter implements SSEResponseAdapter {
|
|
34
71
|
private reply;
|
|
@@ -57,6 +94,21 @@ export declare class NativeHttpSSEAdapter implements SSEResponseAdapter {
|
|
|
57
94
|
}
|
|
58
95
|
/**
|
|
59
96
|
* 自动检测框架类型并创建适配器
|
|
97
|
+
*
|
|
98
|
+
* ⚠️ 注意:此函数是便捷工具,但建议业务层显式创建适配器:
|
|
99
|
+
*
|
|
100
|
+
* ```typescript
|
|
101
|
+
* // 推荐:显式创建(更可控)
|
|
102
|
+
* const adapter = new KoaSSEAdapter(ctx);
|
|
103
|
+
*
|
|
104
|
+
* // 不推荐:自动检测(可能误判)
|
|
105
|
+
* const adapter = adaptSSE(ctx);
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* 自动检测可能存在的问题:
|
|
109
|
+
* - 框架版本差异导致误判
|
|
110
|
+
* - 自定义响应对象无法识别
|
|
111
|
+
* - 难以调试
|
|
60
112
|
*/
|
|
61
113
|
export declare function adaptSSE(res: unknown): SSEResponseAdapter;
|
|
62
114
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/spi/adapters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/spi/adapters.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/spi/adapters.js
CHANGED
|
@@ -2,15 +2,52 @@
|
|
|
2
2
|
// ============================================================
|
|
3
3
|
// 框架适配器 — 支持不同 Web 框架
|
|
4
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
|
+
*/
|
|
5
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
38
|
exports.CustomSSEAdapter = exports.KoaRequestAdapter = exports.ExpressRequestAdapter = exports.NativeHttpSSEAdapter = exports.FastifySSEAdapter = exports.KoaSSEAdapter = exports.ExpressSSEAdapter = void 0;
|
|
7
39
|
exports.adaptSSE = adaptSSE;
|
|
8
40
|
exports.adaptRequest = adaptRequest;
|
|
9
41
|
// ============================================================
|
|
10
|
-
// SSE
|
|
42
|
+
// SSE 响应适配器(参考实现)
|
|
11
43
|
// ============================================================
|
|
12
44
|
/**
|
|
13
|
-
* Express SSE
|
|
45
|
+
* Express SSE 适配器(参考实现)
|
|
46
|
+
*
|
|
47
|
+
* 业务层可以:
|
|
48
|
+
* - 直接使用
|
|
49
|
+
* - 继承扩展
|
|
50
|
+
* - 参考 implementation 自己实现
|
|
14
51
|
*/
|
|
15
52
|
class ExpressSSEAdapter {
|
|
16
53
|
res;
|
|
@@ -41,12 +78,16 @@ class ExpressSSEAdapter {
|
|
|
41
78
|
}
|
|
42
79
|
exports.ExpressSSEAdapter = ExpressSSEAdapter;
|
|
43
80
|
/**
|
|
44
|
-
* Koa/MidwayJS SSE
|
|
81
|
+
* Koa/MidwayJS SSE 适配器(参考实现)
|
|
45
82
|
*/
|
|
46
83
|
class KoaSSEAdapter {
|
|
47
84
|
ctx;
|
|
48
85
|
constructor(ctx) {
|
|
49
86
|
this.ctx = ctx;
|
|
87
|
+
// 禁止 Koa 框架自行处理响应,让 SSE 流完全由适配器控制
|
|
88
|
+
if (this.ctx && 'respond' in this.ctx) {
|
|
89
|
+
this.ctx.respond = false;
|
|
90
|
+
}
|
|
50
91
|
}
|
|
51
92
|
write(data) {
|
|
52
93
|
this.ctx.res.write(data);
|
|
@@ -61,7 +102,7 @@ class KoaSSEAdapter {
|
|
|
61
102
|
this.ctx.set(name, String(value));
|
|
62
103
|
}
|
|
63
104
|
flushHeaders() {
|
|
64
|
-
this.ctx.res.
|
|
105
|
+
this.ctx.res.flushHeaders?.();
|
|
65
106
|
}
|
|
66
107
|
status(code) {
|
|
67
108
|
this.ctx.status = code;
|
|
@@ -72,7 +113,7 @@ class KoaSSEAdapter {
|
|
|
72
113
|
}
|
|
73
114
|
exports.KoaSSEAdapter = KoaSSEAdapter;
|
|
74
115
|
/**
|
|
75
|
-
* Fastify SSE
|
|
116
|
+
* Fastify SSE 适配器(参考实现)
|
|
76
117
|
*/
|
|
77
118
|
class FastifySSEAdapter {
|
|
78
119
|
reply;
|
|
@@ -136,6 +177,21 @@ class NativeHttpSSEAdapter {
|
|
|
136
177
|
exports.NativeHttpSSEAdapter = NativeHttpSSEAdapter;
|
|
137
178
|
/**
|
|
138
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
|
+
* - 难以调试
|
|
139
195
|
*/
|
|
140
196
|
function adaptSSE(res) {
|
|
141
197
|
// Express: res.setHeader, res.write, res.end
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/spi/adapters.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,sBAAsB;AACtB,+DAA+D
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/spi/adapters.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/spi/index.d.ts
CHANGED
|
@@ -1,3 +1,87 @@
|
|
|
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
|
+
*/
|
|
1
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';
|
|
2
86
|
export { JsonFileKVStorage, JsonFileListStorage, InMemoryKVStorage, InMemoryListStorage, DatabaseListStorage, createJsonFileStorage, createInMemoryStorage, } from './storage.js';
|
|
3
87
|
export { ExpressSSEAdapter, KoaSSEAdapter, FastifySSEAdapter, NativeHttpSSEAdapter, adaptSSE, ExpressRequestAdapter, KoaRequestAdapter, adaptRequest, CustomSSEAdapter, } from './adapters.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spi/index.ts"],"names":[],"mappings":"
|
|
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"}
|