@cicctencent/agent-midway 0.1.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 +280 -0
- package/dist/adapters/express.d.ts +8 -0
- package/dist/adapters/express.js +91 -0
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.js +21 -0
- package/dist/adapters/koa.d.ts +3 -0
- package/dist/adapters/koa.js +75 -0
- package/dist/adapters/midway.d.ts +5 -0
- package/dist/adapters/midway.js +11 -0
- package/dist/adapters/next.d.ts +12 -0
- package/dist/adapters/next.js +89 -0
- package/dist/adapters/shared.d.ts +4 -0
- package/dist/adapters/shared.js +31 -0
- package/dist/channel/dingtalk.d.ts +18 -0
- package/dist/channel/dingtalk.js +68 -0
- package/dist/channel/feishu.d.ts +20 -0
- package/dist/channel/feishu.js +96 -0
- package/dist/channel/index.d.ts +46 -0
- package/dist/channel/index.js +311 -0
- package/dist/channel/types.d.ts +77 -0
- package/dist/channel/types.js +7 -0
- package/dist/channel/wecom.d.ts +22 -0
- package/dist/channel/wecom.js +106 -0
- package/dist/component.d.ts +49 -0
- package/dist/component.js +129 -0
- package/dist/connector/calendar-adapter.d.ts +19 -0
- package/dist/connector/calendar-adapter.js +236 -0
- package/dist/connector/db-adapter.d.ts +28 -0
- package/dist/connector/db-adapter.js +193 -0
- package/dist/connector/email-adapter.d.ts +23 -0
- package/dist/connector/email-adapter.js +192 -0
- package/dist/connector/fs-adapter.d.ts +15 -0
- package/dist/connector/fs-adapter.js +199 -0
- package/dist/connector/http-adapter.d.ts +29 -0
- package/dist/connector/http-adapter.js +181 -0
- package/dist/connector/index.d.ts +24 -0
- package/dist/connector/index.js +454 -0
- package/dist/connector/mcp-adapter.d.ts +27 -0
- package/dist/connector/mcp-adapter.js +156 -0
- package/dist/connector/mq-adapter.d.ts +25 -0
- package/dist/connector/mq-adapter.js +181 -0
- package/dist/connector/types.d.ts +205 -0
- package/dist/connector/types.js +9 -0
- package/dist/controller/a2a.controller.d.ts +41 -0
- package/dist/controller/a2a.controller.js +150 -0
- package/dist/controller/agent-profile.controller.d.ts +97 -0
- package/dist/controller/agent-profile.controller.js +200 -0
- package/dist/controller/agent.controller.d.ts +199 -0
- package/dist/controller/agent.controller.js +414 -0
- package/dist/controller/application.controller.d.ts +113 -0
- package/dist/controller/application.controller.js +217 -0
- package/dist/controller/automation.controller.d.ts +113 -0
- package/dist/controller/automation.controller.js +246 -0
- package/dist/controller/channel.controller.d.ts +73 -0
- package/dist/controller/channel.controller.js +183 -0
- package/dist/controller/chat.controller.d.ts +188 -0
- package/dist/controller/chat.controller.js +375 -0
- package/dist/controller/connector.controller.d.ts +134 -0
- package/dist/controller/connector.controller.js +257 -0
- package/dist/controller/knowledge-base.controller.d.ts +157 -0
- package/dist/controller/knowledge-base.controller.js +278 -0
- package/dist/controller/mcp-server.controller.d.ts +115 -0
- package/dist/controller/mcp-server.controller.js +236 -0
- package/dist/controller/model-config.controller.d.ts +139 -0
- package/dist/controller/model-config.controller.js +274 -0
- package/dist/controller/observability.controller.d.ts +124 -0
- package/dist/controller/observability.controller.js +142 -0
- package/dist/controller/security.controller.d.ts +91 -0
- package/dist/controller/security.controller.js +172 -0
- package/dist/controller/settings.controller.d.ts +83 -0
- package/dist/controller/settings.controller.js +280 -0
- package/dist/core/ai-workstation.d.ts +17 -0
- package/dist/core/ai-workstation.js +129 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +20 -0
- package/dist/core/service-container.d.ts +12 -0
- package/dist/core/service-container.js +54 -0
- package/dist/core/sse.d.ts +6 -0
- package/dist/core/sse.js +56 -0
- package/dist/core/types.d.ts +72 -0
- package/dist/core/types.js +2 -0
- package/dist/dto/agent.dto.d.ts +21 -0
- package/dist/dto/agent.dto.js +79 -0
- package/dist/dto/ai-config.dto.d.ts +67 -0
- package/dist/dto/ai-config.dto.js +249 -0
- package/dist/dto/chat.dto.d.ts +40 -0
- package/dist/dto/chat.dto.js +122 -0
- package/dist/index.d.ts +101 -0
- package/dist/index.js +195 -0
- package/dist/memory/db-store.d.ts +33 -0
- package/dist/memory/db-store.js +143 -0
- package/dist/memory/index.d.ts +187 -0
- package/dist/memory/index.js +443 -0
- package/dist/model/ai-agent-profile.entity.d.ts +32 -0
- package/dist/model/ai-agent-profile.entity.js +289 -0
- package/dist/model/ai-application.entity.d.ts +20 -0
- package/dist/model/ai-application.entity.js +166 -0
- package/dist/model/ai-chat-memory.entity.d.ts +16 -0
- package/dist/model/ai-chat-memory.entity.js +123 -0
- package/dist/model/ai-chat-message.entity.d.ts +16 -0
- package/dist/model/ai-chat-message.entity.js +122 -0
- package/dist/model/ai-chat-skill.entity.d.ts +19 -0
- package/dist/model/ai-chat-skill.entity.js +155 -0
- package/dist/model/ai-chat-thread.entity.d.ts +15 -0
- package/dist/model/ai-chat-thread.entity.js +113 -0
- package/dist/model/ai-chat-workspace.entity.d.ts +17 -0
- package/dist/model/ai-chat-workspace.entity.js +136 -0
- package/dist/model/ai-kb-document.entity.d.ts +16 -0
- package/dist/model/ai-kb-document.entity.js +122 -0
- package/dist/model/ai-knowledge-base.entity.d.ts +22 -0
- package/dist/model/ai-knowledge-base.entity.js +185 -0
- package/dist/model/ai-mcp-server.entity.d.ts +23 -0
- package/dist/model/ai-mcp-server.entity.js +198 -0
- package/dist/model/ai-model-config.entity.d.ts +24 -0
- package/dist/model/ai-model-config.entity.js +200 -0
- package/dist/service/a2a.service.d.ts +142 -0
- package/dist/service/a2a.service.js +537 -0
- package/dist/service/agent-profile.service.d.ts +34 -0
- package/dist/service/agent-profile.service.js +110 -0
- package/dist/service/agent-server.service.d.ts +91 -0
- package/dist/service/agent-server.service.js +634 -0
- package/dist/service/agent-task-queue.service.d.ts +98 -0
- package/dist/service/agent-task-queue.service.js +283 -0
- package/dist/service/ai-chat.service.d.ts +103 -0
- package/dist/service/ai-chat.service.js +431 -0
- package/dist/service/ai-skill.service.d.ts +116 -0
- package/dist/service/ai-skill.service.js +457 -0
- package/dist/service/application.service.d.ts +42 -0
- package/dist/service/application.service.js +139 -0
- package/dist/service/automation.service.d.ts +37 -0
- package/dist/service/automation.service.js +196 -0
- package/dist/service/connector.service.d.ts +136 -0
- package/dist/service/connector.service.js +524 -0
- package/dist/service/knowledge-base.service.d.ts +138 -0
- package/dist/service/knowledge-base.service.js +528 -0
- package/dist/service/mcp-server.service.d.ts +39 -0
- package/dist/service/mcp-server.service.js +143 -0
- package/dist/service/model-config.service.d.ts +57 -0
- package/dist/service/model-config.service.js +168 -0
- package/dist/service/observability.service.d.ts +145 -0
- package/dist/service/observability.service.js +281 -0
- package/dist/service/openai.service.d.ts +88 -0
- package/dist/service/openai.service.js +406 -0
- package/dist/service/prompt-builder.service.d.ts +50 -0
- package/dist/service/prompt-builder.service.js +246 -0
- package/dist/tools/code-exec.tool.d.ts +37 -0
- package/dist/tools/code-exec.tool.js +162 -0
- package/dist/tools/datetime.tool.d.ts +21 -0
- package/dist/tools/datetime.tool.js +379 -0
- package/dist/tools/http-request.tool.d.ts +43 -0
- package/dist/tools/http-request.tool.js +455 -0
- package/dist/tools/registry.d.ts +71 -0
- package/dist/tools/registry.js +77 -0
- package/dist/tools/text-process.tool.d.ts +7 -0
- package/dist/tools/text-process.tool.js +366 -0
- package/dist/tools/web-search.tool.d.ts +28 -0
- package/dist/tools/web-search.tool.js +304 -0
- package/dist/types.d.ts +70 -0
- package/dist/types.js +7 -0
- package/package.json +69 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MCPServerService = void 0;
|
|
16
|
+
const core_1 = require("@midwayjs/core");
|
|
17
|
+
const midwayjs_base_1 = require("@cicctencent/midwayjs-base");
|
|
18
|
+
const typeorm_1 = require("@midwayjs/typeorm");
|
|
19
|
+
const typeorm_2 = require("typeorm");
|
|
20
|
+
const ai_mcp_server_entity_1 = __importDefault(require("../model/ai-mcp-server.entity"));
|
|
21
|
+
/**
|
|
22
|
+
* MCP Server 服务
|
|
23
|
+
* 管理 MCP Server 配置、状态、工具定义等
|
|
24
|
+
*/
|
|
25
|
+
let MCPServerService = class MCPServerService extends midwayjs_base_1.BaseService {
|
|
26
|
+
get model() {
|
|
27
|
+
if (this.repo)
|
|
28
|
+
return this.repo;
|
|
29
|
+
return (this.repo = this.dataSource.getRepository(ai_mcp_server_entity_1.default));
|
|
30
|
+
}
|
|
31
|
+
/** 获取所有 MCP Server */
|
|
32
|
+
async list(applicationId, options) {
|
|
33
|
+
const where = { applicationId };
|
|
34
|
+
if (options?.enabled !== undefined) {
|
|
35
|
+
where.enabled = options.enabled ? 1 : 0;
|
|
36
|
+
}
|
|
37
|
+
if (options?.status) {
|
|
38
|
+
where.status = options.status;
|
|
39
|
+
}
|
|
40
|
+
return this.model.find({
|
|
41
|
+
where,
|
|
42
|
+
order: { createTime: 'DESC' },
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/** 获取单个 MCP Server */
|
|
46
|
+
async get(id, applicationId) {
|
|
47
|
+
const where = { id };
|
|
48
|
+
if (applicationId)
|
|
49
|
+
where.applicationId = applicationId;
|
|
50
|
+
return this.model.findOne({ where });
|
|
51
|
+
}
|
|
52
|
+
/** 获取启用的 MCP Server */
|
|
53
|
+
async getEnabled(applicationId) {
|
|
54
|
+
return this.model.find({
|
|
55
|
+
where: { applicationId, enabled: 1 },
|
|
56
|
+
order: { name: 'ASC' },
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/** 创建 MCP Server */
|
|
60
|
+
async create(applicationId, data) {
|
|
61
|
+
const server = this.model.create({
|
|
62
|
+
...data,
|
|
63
|
+
applicationId,
|
|
64
|
+
status: 'disconnected',
|
|
65
|
+
toolCount: 0,
|
|
66
|
+
lastError: '',
|
|
67
|
+
});
|
|
68
|
+
return this.model.save(server);
|
|
69
|
+
}
|
|
70
|
+
/** 更新 MCP Server */
|
|
71
|
+
async update(id, applicationId, data) {
|
|
72
|
+
await this.model.update({ id, applicationId }, data);
|
|
73
|
+
return this.get(id, applicationId);
|
|
74
|
+
}
|
|
75
|
+
/** 删除 MCP Server */
|
|
76
|
+
async delete(id, applicationId) {
|
|
77
|
+
await this.model.delete({ id, applicationId });
|
|
78
|
+
}
|
|
79
|
+
/** 启用 MCP Server */
|
|
80
|
+
async enable(id, applicationId) {
|
|
81
|
+
await this.model.update({ id, applicationId }, { enabled: 1 });
|
|
82
|
+
return this.get(id, applicationId);
|
|
83
|
+
}
|
|
84
|
+
/** 禁用 MCP Server */
|
|
85
|
+
async disable(id, applicationId) {
|
|
86
|
+
await this.model.update({ id, applicationId }, { enabled: 0, status: 'disconnected' });
|
|
87
|
+
return this.get(id, applicationId);
|
|
88
|
+
}
|
|
89
|
+
/** 更新连接状态 */
|
|
90
|
+
async updateStatus(id, applicationId, status, error) {
|
|
91
|
+
const updateData = { status };
|
|
92
|
+
if (error) {
|
|
93
|
+
updateData.lastError = error;
|
|
94
|
+
}
|
|
95
|
+
await this.model.update({ id, applicationId }, updateData);
|
|
96
|
+
return this.get(id, applicationId);
|
|
97
|
+
}
|
|
98
|
+
/** 更新工具定义 */
|
|
99
|
+
async updateToolDefinitions(id, applicationId, tools) {
|
|
100
|
+
await this.model.update({ id, applicationId }, {
|
|
101
|
+
toolDefinitions: tools,
|
|
102
|
+
toolCount: tools.length,
|
|
103
|
+
status: 'connected',
|
|
104
|
+
lastError: '',
|
|
105
|
+
});
|
|
106
|
+
return this.get(id, applicationId);
|
|
107
|
+
}
|
|
108
|
+
/** 获取 MCP Server 的工具列表 */
|
|
109
|
+
async getTools(id, applicationId) {
|
|
110
|
+
const server = await this.get(id, applicationId);
|
|
111
|
+
if (!server || !server.toolDefinitions) {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
return server.toolDefinitions;
|
|
115
|
+
}
|
|
116
|
+
/** 批量获取工具定义 */
|
|
117
|
+
async getToolsByServerIds(applicationId, ids) {
|
|
118
|
+
if (!ids || ids.length === 0)
|
|
119
|
+
return [];
|
|
120
|
+
const servers = await this.model.find({
|
|
121
|
+
where: ids.map(id => ({ id: Number(id), applicationId })),
|
|
122
|
+
});
|
|
123
|
+
const tools = [];
|
|
124
|
+
for (const server of servers) {
|
|
125
|
+
if (server.toolDefinitions) {
|
|
126
|
+
tools.push(...server.toolDefinitions.map(t => ({
|
|
127
|
+
...t,
|
|
128
|
+
serverId: server.id,
|
|
129
|
+
serverName: server.name,
|
|
130
|
+
})));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return tools;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
exports.MCPServerService = MCPServerService;
|
|
137
|
+
__decorate([
|
|
138
|
+
(0, typeorm_1.InjectDataSource)('default'),
|
|
139
|
+
__metadata("design:type", typeorm_2.DataSource)
|
|
140
|
+
], MCPServerService.prototype, "dataSource", void 0);
|
|
141
|
+
exports.MCPServerService = MCPServerService = __decorate([
|
|
142
|
+
(0, core_1.Provide)()
|
|
143
|
+
], MCPServerService);
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { BaseService } from '@cicctencent/midwayjs-base';
|
|
2
|
+
import { DataSource, Repository } from 'typeorm';
|
|
3
|
+
import AIModelConfigEntity from '../model/ai-model-config.entity';
|
|
4
|
+
/**
|
|
5
|
+
* 模型配置服务
|
|
6
|
+
* 管理多模型供应商配置、分层策略和降级链
|
|
7
|
+
*/
|
|
8
|
+
export declare class ModelConfigService extends BaseService {
|
|
9
|
+
dataSource: DataSource;
|
|
10
|
+
private repo?;
|
|
11
|
+
get model(): Repository<AIModelConfigEntity>;
|
|
12
|
+
/** 获取所有模型配置 */
|
|
13
|
+
list(applicationId: number, options?: {
|
|
14
|
+
enabled?: boolean;
|
|
15
|
+
tier?: string;
|
|
16
|
+
role?: string;
|
|
17
|
+
}): Promise<AIModelConfigEntity[]>;
|
|
18
|
+
/** 获取单个模型配置 */
|
|
19
|
+
get(id: number, applicationId?: number): Promise<AIModelConfigEntity>;
|
|
20
|
+
/** 获取默认模型配置 */
|
|
21
|
+
getDefault(applicationId: number): Promise<AIModelConfigEntity>;
|
|
22
|
+
/** 获取主模型配置 */
|
|
23
|
+
getPrimary(applicationId: number): Promise<AIModelConfigEntity>;
|
|
24
|
+
/** 获取降级链(按优先级排序) */
|
|
25
|
+
getFallbackChain(applicationId: number, role?: string): Promise<{
|
|
26
|
+
primary: AIModelConfigEntity;
|
|
27
|
+
fallbacks: AIModelConfigEntity[];
|
|
28
|
+
roleSpecific: AIModelConfigEntity[];
|
|
29
|
+
}>;
|
|
30
|
+
/** 创建模型配置 */
|
|
31
|
+
create(applicationId: number, data: Partial<AIModelConfigEntity>): Promise<AIModelConfigEntity>;
|
|
32
|
+
/** 更新模型配置 */
|
|
33
|
+
update(id: number, applicationId: number, data: Partial<AIModelConfigEntity>): Promise<AIModelConfigEntity>;
|
|
34
|
+
/** 删除模型配置 */
|
|
35
|
+
delete(id: number, applicationId: number): Promise<void>;
|
|
36
|
+
/** 设置为默认 */
|
|
37
|
+
setDefault(id: number, applicationId: number): Promise<AIModelConfigEntity>;
|
|
38
|
+
/** 启用模型配置 */
|
|
39
|
+
enable(id: number, applicationId: number): Promise<AIModelConfigEntity>;
|
|
40
|
+
/** 禁用模型配置 */
|
|
41
|
+
disable(id: number, applicationId: number): Promise<AIModelConfigEntity>;
|
|
42
|
+
/** 获取指定角色的模型配置 */
|
|
43
|
+
getByRole(applicationId: number, role: string): Promise<AIModelConfigEntity[]>;
|
|
44
|
+
/** 获取可用的模型配置(用于 Agent 运行时) */
|
|
45
|
+
getAvailableConfig(applicationId: number, role?: string): Promise<AIModelConfigEntity>;
|
|
46
|
+
/** 转换为 agent-core 兼容的模型配置格式 */
|
|
47
|
+
toAgentModelConfig(applicationId: number, id?: number, role?: string): Promise<{
|
|
48
|
+
provider: string;
|
|
49
|
+
model: string;
|
|
50
|
+
apiKey: string;
|
|
51
|
+
baseUrl: string;
|
|
52
|
+
temperature: number;
|
|
53
|
+
maxTokens: number;
|
|
54
|
+
timeout: number;
|
|
55
|
+
extraConfig: Record<string, any>;
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ModelConfigService = void 0;
|
|
16
|
+
const core_1 = require("@midwayjs/core");
|
|
17
|
+
const midwayjs_base_1 = require("@cicctencent/midwayjs-base");
|
|
18
|
+
const typeorm_1 = require("@midwayjs/typeorm");
|
|
19
|
+
const typeorm_2 = require("typeorm");
|
|
20
|
+
const ai_model_config_entity_1 = __importDefault(require("../model/ai-model-config.entity"));
|
|
21
|
+
/**
|
|
22
|
+
* 模型配置服务
|
|
23
|
+
* 管理多模型供应商配置、分层策略和降级链
|
|
24
|
+
*/
|
|
25
|
+
let ModelConfigService = class ModelConfigService extends midwayjs_base_1.BaseService {
|
|
26
|
+
get model() {
|
|
27
|
+
if (this.repo)
|
|
28
|
+
return this.repo;
|
|
29
|
+
return (this.repo = this.dataSource.getRepository(ai_model_config_entity_1.default));
|
|
30
|
+
}
|
|
31
|
+
/** 获取所有模型配置 */
|
|
32
|
+
async list(applicationId, options) {
|
|
33
|
+
const where = { applicationId };
|
|
34
|
+
if (options?.enabled !== undefined) {
|
|
35
|
+
where.enabled = options.enabled ? 1 : 0;
|
|
36
|
+
}
|
|
37
|
+
if (options?.tier) {
|
|
38
|
+
where.tier = options.tier;
|
|
39
|
+
}
|
|
40
|
+
if (options?.role) {
|
|
41
|
+
where.role = options.role;
|
|
42
|
+
}
|
|
43
|
+
return this.model.find({
|
|
44
|
+
where,
|
|
45
|
+
order: { tier: 'ASC', priority: 'DESC', createTime: 'ASC' },
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** 获取单个模型配置 */
|
|
49
|
+
async get(id, applicationId) {
|
|
50
|
+
const where = { id };
|
|
51
|
+
if (applicationId)
|
|
52
|
+
where.applicationId = applicationId;
|
|
53
|
+
return this.model.findOne({ where });
|
|
54
|
+
}
|
|
55
|
+
/** 获取默认模型配置 */
|
|
56
|
+
async getDefault(applicationId) {
|
|
57
|
+
return this.model.findOne({
|
|
58
|
+
where: { applicationId, isDefault: 1, enabled: 1 },
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/** 获取主模型配置 */
|
|
62
|
+
async getPrimary(applicationId) {
|
|
63
|
+
return this.model.findOne({
|
|
64
|
+
where: { applicationId, tier: 'primary', enabled: 1 },
|
|
65
|
+
order: { priority: 'DESC' },
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** 获取降级链(按优先级排序) */
|
|
69
|
+
async getFallbackChain(applicationId, role) {
|
|
70
|
+
const where = { applicationId, enabled: 1 };
|
|
71
|
+
if (role) {
|
|
72
|
+
where.role = role;
|
|
73
|
+
}
|
|
74
|
+
const configs = await this.model.find({
|
|
75
|
+
where,
|
|
76
|
+
order: { tier: 'ASC', priority: 'DESC' },
|
|
77
|
+
});
|
|
78
|
+
// 按 tier 分组
|
|
79
|
+
const primary = configs.filter(c => c.tier === 'primary');
|
|
80
|
+
const fallback = configs.filter(c => c.tier === 'fallback');
|
|
81
|
+
const roleSpecific = configs.filter(c => c.tier === 'role_specific');
|
|
82
|
+
return {
|
|
83
|
+
primary: primary[0] || null,
|
|
84
|
+
fallbacks: fallback,
|
|
85
|
+
roleSpecific: roleSpecific.filter(c => !role || c.role === role),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** 创建模型配置 */
|
|
89
|
+
async create(applicationId, data) {
|
|
90
|
+
// 如果设置为默认,先清除其他默认
|
|
91
|
+
if (data.isDefault === 1) {
|
|
92
|
+
await this.model.update({ applicationId, isDefault: 1 }, { isDefault: 0 });
|
|
93
|
+
}
|
|
94
|
+
const config = this.model.create({ ...data, applicationId });
|
|
95
|
+
return this.model.save(config);
|
|
96
|
+
}
|
|
97
|
+
/** 更新模型配置 */
|
|
98
|
+
async update(id, applicationId, data) {
|
|
99
|
+
// 如果设置为默认,先清除其他默认
|
|
100
|
+
if (data.isDefault === 1) {
|
|
101
|
+
await this.model.update({ applicationId, isDefault: 1 }, { isDefault: 0 });
|
|
102
|
+
}
|
|
103
|
+
await this.model.update({ id, applicationId }, data);
|
|
104
|
+
return this.get(id, applicationId);
|
|
105
|
+
}
|
|
106
|
+
/** 删除模型配置 */
|
|
107
|
+
async delete(id, applicationId) {
|
|
108
|
+
await this.model.delete({ id, applicationId });
|
|
109
|
+
}
|
|
110
|
+
/** 设置为默认 */
|
|
111
|
+
async setDefault(id, applicationId) {
|
|
112
|
+
await this.model.update({ applicationId, isDefault: 1 }, { isDefault: 0 });
|
|
113
|
+
await this.model.update({ id, applicationId }, { isDefault: 1 });
|
|
114
|
+
return this.get(id, applicationId);
|
|
115
|
+
}
|
|
116
|
+
/** 启用模型配置 */
|
|
117
|
+
async enable(id, applicationId) {
|
|
118
|
+
await this.model.update({ id, applicationId }, { enabled: 1 });
|
|
119
|
+
return this.get(id, applicationId);
|
|
120
|
+
}
|
|
121
|
+
/** 禁用模型配置 */
|
|
122
|
+
async disable(id, applicationId) {
|
|
123
|
+
await this.model.update({ id, applicationId }, { enabled: 0 });
|
|
124
|
+
return this.get(id, applicationId);
|
|
125
|
+
}
|
|
126
|
+
/** 获取指定角色的模型配置 */
|
|
127
|
+
async getByRole(applicationId, role) {
|
|
128
|
+
return this.model.find({
|
|
129
|
+
where: { applicationId, role, enabled: 1 },
|
|
130
|
+
order: { priority: 'DESC' },
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/** 获取可用的模型配置(用于 Agent 运行时) */
|
|
134
|
+
async getAvailableConfig(applicationId, role) {
|
|
135
|
+
const chain = await this.getFallbackChain(applicationId, role);
|
|
136
|
+
return chain.primary || chain.fallbacks[0] || null;
|
|
137
|
+
}
|
|
138
|
+
/** 转换为 agent-core 兼容的模型配置格式 */
|
|
139
|
+
async toAgentModelConfig(applicationId, id, role) {
|
|
140
|
+
let config = null;
|
|
141
|
+
if (id) {
|
|
142
|
+
config = await this.get(id, applicationId);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
config = await this.getAvailableConfig(applicationId, role);
|
|
146
|
+
}
|
|
147
|
+
if (!config)
|
|
148
|
+
return null;
|
|
149
|
+
return {
|
|
150
|
+
provider: config.provider,
|
|
151
|
+
model: config.model,
|
|
152
|
+
apiKey: config.apiKey,
|
|
153
|
+
baseUrl: config.baseUrl,
|
|
154
|
+
temperature: config.temperature,
|
|
155
|
+
maxTokens: config.maxTokens,
|
|
156
|
+
timeout: config.timeout,
|
|
157
|
+
extraConfig: config.extraConfig,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
exports.ModelConfigService = ModelConfigService;
|
|
162
|
+
__decorate([
|
|
163
|
+
(0, typeorm_1.InjectDataSource)('default'),
|
|
164
|
+
__metadata("design:type", typeorm_2.DataSource)
|
|
165
|
+
], ModelConfigService.prototype, "dataSource", void 0);
|
|
166
|
+
exports.ModelConfigService = ModelConfigService = __decorate([
|
|
167
|
+
(0, core_1.Provide)()
|
|
168
|
+
], ModelConfigService);
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { BaseService } from '@cicctencent/midwayjs-base';
|
|
2
|
+
/**
|
|
3
|
+
* 链路追踪记录
|
|
4
|
+
*/
|
|
5
|
+
export interface TraceRecord {
|
|
6
|
+
id: string;
|
|
7
|
+
traceId: string;
|
|
8
|
+
threadId?: number;
|
|
9
|
+
action: string;
|
|
10
|
+
status: 'success' | 'error' | 'timeout';
|
|
11
|
+
duration: number;
|
|
12
|
+
input?: any;
|
|
13
|
+
output?: any;
|
|
14
|
+
error?: string;
|
|
15
|
+
timestamp: string;
|
|
16
|
+
userId?: string;
|
|
17
|
+
applicationId?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 指标记录
|
|
21
|
+
*/
|
|
22
|
+
export interface MetricRecord {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
value: number;
|
|
26
|
+
unit: string;
|
|
27
|
+
labels: Record<string, string>;
|
|
28
|
+
timestamp: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 查询选项
|
|
32
|
+
*/
|
|
33
|
+
export interface TraceQueryOptions {
|
|
34
|
+
traceId?: string;
|
|
35
|
+
threadId?: number;
|
|
36
|
+
action?: string;
|
|
37
|
+
status?: string;
|
|
38
|
+
startTime?: string;
|
|
39
|
+
endTime?: string;
|
|
40
|
+
page?: number;
|
|
41
|
+
pageSize?: number;
|
|
42
|
+
}
|
|
43
|
+
export interface MetricQueryOptions {
|
|
44
|
+
name?: string;
|
|
45
|
+
startTime?: string;
|
|
46
|
+
endTime?: string;
|
|
47
|
+
page?: number;
|
|
48
|
+
pageSize?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 可观测性服务
|
|
52
|
+
* 提供链路追踪、指标记录、仪表板和系统健康监控
|
|
53
|
+
*/
|
|
54
|
+
export declare class ObservabilityService extends BaseService {
|
|
55
|
+
/** 环形缓冲区最大容量 */
|
|
56
|
+
private static readonly MAX_TRACES;
|
|
57
|
+
private static readonly MAX_METRICS;
|
|
58
|
+
/** 追踪记录环形缓冲区 */
|
|
59
|
+
private traceBuffer;
|
|
60
|
+
private traceIndex;
|
|
61
|
+
/** 指标记录环形缓冲区 */
|
|
62
|
+
private metricBuffer;
|
|
63
|
+
private metricIndex;
|
|
64
|
+
/** 自增 ID 计数器 */
|
|
65
|
+
private traceIdCounter;
|
|
66
|
+
private metricIdCounter;
|
|
67
|
+
/** 服务启动时间 */
|
|
68
|
+
private readonly startTime;
|
|
69
|
+
/**
|
|
70
|
+
* 记录链路追踪数据
|
|
71
|
+
*/
|
|
72
|
+
recordTrace(trace: Omit<TraceRecord, 'id' | 'timestamp'> & Partial<Pick<TraceRecord, 'timestamp'>>): TraceRecord;
|
|
73
|
+
/**
|
|
74
|
+
* 查询追踪记录
|
|
75
|
+
*/
|
|
76
|
+
getTraces(options?: TraceQueryOptions): {
|
|
77
|
+
list: TraceRecord[];
|
|
78
|
+
total: number;
|
|
79
|
+
page: number;
|
|
80
|
+
pageSize: number;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* 获取单个追踪详情
|
|
84
|
+
*/
|
|
85
|
+
getTraceById(traceId: string): TraceRecord | null;
|
|
86
|
+
/**
|
|
87
|
+
* 记录指标数据
|
|
88
|
+
*/
|
|
89
|
+
recordMetric(metric: Omit<MetricRecord, 'id' | 'timestamp'> & Partial<Pick<MetricRecord, 'timestamp'>>): MetricRecord;
|
|
90
|
+
/**
|
|
91
|
+
* 查询指标
|
|
92
|
+
*/
|
|
93
|
+
getMetrics(options?: MetricQueryOptions): {
|
|
94
|
+
list: MetricRecord[];
|
|
95
|
+
total: number;
|
|
96
|
+
page: number;
|
|
97
|
+
pageSize: number;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* 获取仪表板数据
|
|
101
|
+
*/
|
|
102
|
+
getDashboard(): {
|
|
103
|
+
totalRequests: number;
|
|
104
|
+
successCount: number;
|
|
105
|
+
errorCount: number;
|
|
106
|
+
timeoutCount: number;
|
|
107
|
+
successRate: number;
|
|
108
|
+
avgDuration: number;
|
|
109
|
+
activeThreads: number;
|
|
110
|
+
toolCallStats: Record<string, {
|
|
111
|
+
total: number;
|
|
112
|
+
success: number;
|
|
113
|
+
error: number;
|
|
114
|
+
}>;
|
|
115
|
+
recentTraces: TraceRecord[];
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* 获取系统健康状态
|
|
119
|
+
*/
|
|
120
|
+
getSystemHealth(): {
|
|
121
|
+
status: 'healthy' | 'warning' | 'critical';
|
|
122
|
+
uptime: number;
|
|
123
|
+
memory: {
|
|
124
|
+
rss: number;
|
|
125
|
+
heapUsed: number;
|
|
126
|
+
heapTotal: number;
|
|
127
|
+
external: number;
|
|
128
|
+
};
|
|
129
|
+
cpu: {
|
|
130
|
+
user: number;
|
|
131
|
+
system: number;
|
|
132
|
+
};
|
|
133
|
+
activeConnections: number;
|
|
134
|
+
traceCount: number;
|
|
135
|
+
metricCount: number;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* 导出追踪数据
|
|
139
|
+
*/
|
|
140
|
+
exportTraces(format?: 'json' | 'csv'): string;
|
|
141
|
+
/**
|
|
142
|
+
* 清空所有数据
|
|
143
|
+
*/
|
|
144
|
+
clear(): void;
|
|
145
|
+
}
|