@cicctencent/agent-server 0.1.2 → 0.2.1
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 +95 -43
- package/dist/cjs/agent/agent-server.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +7 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/service/agent-profile.service.d.ts +25 -2
- package/dist/cjs/service/agent-profile.service.d.ts.map +1 -1
- package/dist/cjs/service/agent-profile.service.js +18 -7
- package/dist/cjs/service/agent-profile.service.js.map +1 -1
- package/dist/cjs/service/cache.service.d.ts +70 -0
- package/dist/cjs/service/cache.service.d.ts.map +1 -0
- package/dist/cjs/service/cache.service.js +270 -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/service/settings.service.d.ts +7 -3
- package/dist/cjs/service/settings.service.d.ts.map +1 -1
- package/dist/cjs/service/settings.service.js +19 -14
- package/dist/cjs/service/settings.service.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 +75 -23
- package/dist/cjs/spi/adapters.js.map +1 -1
- package/dist/cjs/spi/index.d.ts +85 -1
- 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 +47 -42
- package/dist/cjs/spi/types.d.ts.map +1 -1
- package/dist/cjs/store/app-stores.js +1 -1
- package/dist/cjs/store/app-stores.js.map +1 -1
- package/dist/cjs/types.d.ts +125 -24
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/utils/data-dir.d.ts.map +1 -1
- package/dist/cjs/utils/data-dir.js +8 -11
- package/dist/cjs/utils/data-dir.js.map +1 -1
- package/dist/esm/agent/agent-server.d.ts.map +1 -1
- package/dist/esm/agent/agent-server.js +98 -46
- package/dist/esm/agent/agent-server.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/service/agent-profile.service.d.ts +25 -2
- package/dist/esm/service/agent-profile.service.d.ts.map +1 -1
- package/dist/esm/service/agent-profile.service.js +18 -7
- package/dist/esm/service/agent-profile.service.js.map +1 -1
- package/dist/esm/service/cache.service.d.ts +70 -0
- package/dist/esm/service/cache.service.d.ts.map +1 -0
- package/dist/esm/service/cache.service.js +264 -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/service/settings.service.d.ts +7 -3
- package/dist/esm/service/settings.service.d.ts.map +1 -1
- package/dist/esm/service/settings.service.js +19 -14
- package/dist/esm/service/settings.service.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 +75 -23
- package/dist/esm/spi/adapters.js.map +1 -1
- package/dist/esm/spi/index.d.ts +85 -1
- 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 +47 -42
- package/dist/esm/spi/types.d.ts.map +1 -1
- package/dist/esm/store/app-stores.js +1 -1
- package/dist/esm/store/app-stores.js.map +1 -1
- package/dist/esm/types.d.ts +125 -24
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils/data-dir.d.ts.map +1 -1
- package/dist/esm/utils/data-dir.js +0 -3
- package/dist/esm/utils/data-dir.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import type { SettingsEntity, SettingsProvider } from '../types.js';
|
|
2
2
|
/**
|
|
3
3
|
* 默认 SettingsProvider 实现 — JSON 文件存储
|
|
4
|
+
*
|
|
5
|
+
* @param _dataDir - 数据目录(保留用于未来扩展,当前由 JsonStore 通过 getProjectDataPath 管理)
|
|
6
|
+
* @param defaultOverrides - 应用层覆盖默认设置(如 theme、language 等)
|
|
4
7
|
*/
|
|
5
8
|
export declare class DefaultSettingsProvider implements SettingsProvider {
|
|
6
9
|
private store;
|
|
7
|
-
|
|
10
|
+
private defaults;
|
|
11
|
+
constructor(_dataDir?: string, defaultOverrides?: Partial<SettingsEntity>);
|
|
8
12
|
getSettings(): SettingsEntity;
|
|
9
13
|
updateSettings(updates: Partial<SettingsEntity>): SettingsEntity;
|
|
10
14
|
resetSettings(): SettingsEntity;
|
|
11
15
|
private tryRecoverSettings;
|
|
12
16
|
private migrateApiKeysToProviders;
|
|
13
17
|
}
|
|
14
|
-
export declare function getSettings(): SettingsEntity;
|
|
18
|
+
export declare function getSettings(dataDir?: string): SettingsEntity;
|
|
15
19
|
export declare function updateSettings(updates: Partial<SettingsEntity>): SettingsEntity;
|
|
16
20
|
export declare function resetSettings(): SettingsEntity;
|
|
17
|
-
export declare function getSettingsProvider(dataDir?: string): DefaultSettingsProvider;
|
|
21
|
+
export declare function getSettingsProvider(dataDir?: string, defaultOverrides?: Partial<SettingsEntity>): DefaultSettingsProvider;
|
|
18
22
|
//# sourceMappingURL=settings.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.service.d.ts","sourceRoot":"","sources":["../../../src/service/settings.service.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAuB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYzF
|
|
1
|
+
{"version":3,"file":"settings.service.d.ts","sourceRoot":"","sources":["../../../src/service/settings.service.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAuB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYzF;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAC9D,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,QAAQ,CAAiB;gBAErB,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAKzE,WAAW,IAAI,cAAc;IAwC7B,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc;IA6BhE,aAAa,IAAI,cAAc;IAO/B,OAAO,CAAC,kBAAkB;IA6B1B,OAAO,CAAC,yBAAyB;CAoClC;AAMD,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,CAG5D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAG/E;AAED,wBAAgB,aAAa,IAAI,cAAc,CAG9C;AAED,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,uBAAuB,CAGzH"}
|
|
@@ -46,7 +46,7 @@ const index_ts_1 = require("../store/index.js");
|
|
|
46
46
|
const agent_core_1 = require("@cicctencent/agent-core");
|
|
47
47
|
const DEFAULT_SETTINGS = {
|
|
48
48
|
theme: 'dark',
|
|
49
|
-
language: '
|
|
49
|
+
language: 'en',
|
|
50
50
|
apiKeys: {},
|
|
51
51
|
notifications: {
|
|
52
52
|
taskComplete: true,
|
|
@@ -54,27 +54,32 @@ const DEFAULT_SETTINGS = {
|
|
|
54
54
|
};
|
|
55
55
|
/**
|
|
56
56
|
* 默认 SettingsProvider 实现 — JSON 文件存储
|
|
57
|
+
*
|
|
58
|
+
* @param _dataDir - 数据目录(保留用于未来扩展,当前由 JsonStore 通过 getProjectDataPath 管理)
|
|
59
|
+
* @param defaultOverrides - 应用层覆盖默认设置(如 theme、language 等)
|
|
57
60
|
*/
|
|
58
61
|
class DefaultSettingsProvider {
|
|
59
62
|
store;
|
|
60
|
-
|
|
63
|
+
defaults;
|
|
64
|
+
constructor(_dataDir, defaultOverrides) {
|
|
61
65
|
this.store = new index_ts_1.JsonStore('settings.json', 0, { projectLocal: true });
|
|
66
|
+
this.defaults = { ...DEFAULT_SETTINGS, ...defaultOverrides };
|
|
62
67
|
}
|
|
63
68
|
getSettings() {
|
|
64
|
-
let data = this.store.read(
|
|
65
|
-
const isDefaultData = JSON.stringify(data) === JSON.stringify(
|
|
69
|
+
let data = this.store.read(this.defaults);
|
|
70
|
+
const isDefaultData = JSON.stringify(data) === JSON.stringify(this.defaults);
|
|
66
71
|
if (isDefaultData) {
|
|
67
72
|
const recovered = this.tryRecoverSettings();
|
|
68
73
|
if (recovered) {
|
|
69
|
-
data = { ...
|
|
74
|
+
data = { ...this.defaults, ...recovered };
|
|
70
75
|
console.log('[SettingsService] 从损坏的 JSON 中恢复了设置数据');
|
|
71
76
|
}
|
|
72
77
|
}
|
|
73
78
|
const result = {
|
|
74
|
-
...
|
|
79
|
+
...this.defaults,
|
|
75
80
|
...data,
|
|
76
|
-
apiKeys: { ...
|
|
77
|
-
notifications: { ...
|
|
81
|
+
apiKeys: { ...this.defaults.apiKeys, ...(data.apiKeys || {}) },
|
|
82
|
+
notifications: { ...this.defaults.notifications, ...(data.notifications || {}) },
|
|
78
83
|
agentConfig: data.agentConfig ? { ...data.agentConfig } : undefined,
|
|
79
84
|
modelProviders: data.modelProviders ? [...data.modelProviders] : [],
|
|
80
85
|
defaultModelId: data.defaultModelId,
|
|
@@ -122,8 +127,8 @@ class DefaultSettingsProvider {
|
|
|
122
127
|
return merged;
|
|
123
128
|
}
|
|
124
129
|
resetSettings() {
|
|
125
|
-
this.store.write(
|
|
126
|
-
return
|
|
130
|
+
this.store.write(this.defaults);
|
|
131
|
+
return this.defaults;
|
|
127
132
|
}
|
|
128
133
|
// ---- 内部方法 ----
|
|
129
134
|
tryRecoverSettings() {
|
|
@@ -199,9 +204,9 @@ class DefaultSettingsProvider {
|
|
|
199
204
|
exports.DefaultSettingsProvider = DefaultSettingsProvider;
|
|
200
205
|
// ---- 全局单例(向后兼容) ----
|
|
201
206
|
let globalProvider = null;
|
|
202
|
-
function getSettings() {
|
|
207
|
+
function getSettings(dataDir) {
|
|
203
208
|
if (!globalProvider)
|
|
204
|
-
globalProvider = new DefaultSettingsProvider();
|
|
209
|
+
globalProvider = new DefaultSettingsProvider(dataDir);
|
|
205
210
|
return globalProvider.getSettings();
|
|
206
211
|
}
|
|
207
212
|
function updateSettings(updates) {
|
|
@@ -214,9 +219,9 @@ function resetSettings() {
|
|
|
214
219
|
globalProvider = new DefaultSettingsProvider();
|
|
215
220
|
return globalProvider.resetSettings();
|
|
216
221
|
}
|
|
217
|
-
function getSettingsProvider(dataDir) {
|
|
222
|
+
function getSettingsProvider(dataDir, defaultOverrides) {
|
|
218
223
|
if (!globalProvider)
|
|
219
|
-
globalProvider = new DefaultSettingsProvider(dataDir);
|
|
224
|
+
globalProvider = new DefaultSettingsProvider(dataDir, defaultOverrides);
|
|
220
225
|
return globalProvider;
|
|
221
226
|
}
|
|
222
227
|
//# sourceMappingURL=settings.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.service.js","sourceRoot":"","sources":["../../../src/service/settings.service.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,0CAA0C;AAC1C,+DAA+D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"settings.service.js","sourceRoot":"","sources":["../../../src/service/settings.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,31 +177,42 @@ 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
|
-
|
|
142
|
-
|
|
143
|
-
// 检查是否是 Koa Context (有 ctx.res 且 ctx.set)
|
|
144
|
-
if ('ctx' in res || ('req' in res && 'socket' in res.req)) {
|
|
145
|
-
return new KoaSSEAdapter(res);
|
|
146
|
-
}
|
|
147
|
-
// 检查是否是 Fastify Reply (有 .raw)
|
|
148
|
-
if ('raw' in res && 'header' in res) {
|
|
149
|
-
return new FastifySSEAdapter(res);
|
|
150
|
-
}
|
|
151
|
-
// Express 或原生 HTTP
|
|
152
|
-
return new ExpressSSEAdapter(res);
|
|
197
|
+
if (!res || typeof res !== 'object') {
|
|
198
|
+
throw new Error('Unsupported response type. Please provide a custom SSE adapter.');
|
|
153
199
|
}
|
|
154
|
-
|
|
155
|
-
|
|
200
|
+
const obj = res;
|
|
201
|
+
// 1. Koa Context: has ctx.res (raw response) + ctx.set (header setter) + ctx.state
|
|
202
|
+
// Must check before Express because Koa ctx also has setHeader via delegation
|
|
203
|
+
if ('res' in obj && 'set' in obj && 'state' in obj) {
|
|
156
204
|
return new KoaSSEAdapter(res);
|
|
157
205
|
}
|
|
158
|
-
// Fastify Reply
|
|
159
|
-
if (
|
|
206
|
+
// 2. Fastify Reply: has .raw (raw response) + .header() + .code()
|
|
207
|
+
if ('raw' in obj && 'header' in obj && typeof obj.header === 'function') {
|
|
160
208
|
return new FastifySSEAdapter(res);
|
|
161
209
|
}
|
|
162
|
-
//
|
|
163
|
-
if (
|
|
210
|
+
// 3. Express Response: has setHeader + write + end + flushHeaders
|
|
211
|
+
if ('setHeader' in obj && typeof obj.setHeader === 'function' && 'write' in obj && 'end' in obj) {
|
|
212
|
+
return new ExpressSSEAdapter(res);
|
|
213
|
+
}
|
|
214
|
+
// 4. Native HTTP ServerResponse: has write + end + statusCode
|
|
215
|
+
if ('write' in obj && 'end' in obj && 'statusCode' in obj) {
|
|
164
216
|
return new NativeHttpSSEAdapter(res);
|
|
165
217
|
}
|
|
166
218
|
throw new Error('Unsupported response type. Please provide a custom SSE adapter.');
|
|
@@ -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,4 +1,88 @@
|
|
|
1
|
-
|
|
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, TenantContext, 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';
|
|
4
88
|
/**
|
|
@@ -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,aAAa,EAGb,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"}
|