@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.
Files changed (160) hide show
  1. package/README.md +280 -0
  2. package/dist/adapters/express.d.ts +8 -0
  3. package/dist/adapters/express.js +91 -0
  4. package/dist/adapters/index.d.ts +5 -0
  5. package/dist/adapters/index.js +21 -0
  6. package/dist/adapters/koa.d.ts +3 -0
  7. package/dist/adapters/koa.js +75 -0
  8. package/dist/adapters/midway.d.ts +5 -0
  9. package/dist/adapters/midway.js +11 -0
  10. package/dist/adapters/next.d.ts +12 -0
  11. package/dist/adapters/next.js +89 -0
  12. package/dist/adapters/shared.d.ts +4 -0
  13. package/dist/adapters/shared.js +31 -0
  14. package/dist/channel/dingtalk.d.ts +18 -0
  15. package/dist/channel/dingtalk.js +68 -0
  16. package/dist/channel/feishu.d.ts +20 -0
  17. package/dist/channel/feishu.js +96 -0
  18. package/dist/channel/index.d.ts +46 -0
  19. package/dist/channel/index.js +311 -0
  20. package/dist/channel/types.d.ts +77 -0
  21. package/dist/channel/types.js +7 -0
  22. package/dist/channel/wecom.d.ts +22 -0
  23. package/dist/channel/wecom.js +106 -0
  24. package/dist/component.d.ts +49 -0
  25. package/dist/component.js +129 -0
  26. package/dist/connector/calendar-adapter.d.ts +19 -0
  27. package/dist/connector/calendar-adapter.js +236 -0
  28. package/dist/connector/db-adapter.d.ts +28 -0
  29. package/dist/connector/db-adapter.js +193 -0
  30. package/dist/connector/email-adapter.d.ts +23 -0
  31. package/dist/connector/email-adapter.js +192 -0
  32. package/dist/connector/fs-adapter.d.ts +15 -0
  33. package/dist/connector/fs-adapter.js +199 -0
  34. package/dist/connector/http-adapter.d.ts +29 -0
  35. package/dist/connector/http-adapter.js +181 -0
  36. package/dist/connector/index.d.ts +24 -0
  37. package/dist/connector/index.js +454 -0
  38. package/dist/connector/mcp-adapter.d.ts +27 -0
  39. package/dist/connector/mcp-adapter.js +156 -0
  40. package/dist/connector/mq-adapter.d.ts +25 -0
  41. package/dist/connector/mq-adapter.js +181 -0
  42. package/dist/connector/types.d.ts +205 -0
  43. package/dist/connector/types.js +9 -0
  44. package/dist/controller/a2a.controller.d.ts +41 -0
  45. package/dist/controller/a2a.controller.js +150 -0
  46. package/dist/controller/agent-profile.controller.d.ts +97 -0
  47. package/dist/controller/agent-profile.controller.js +200 -0
  48. package/dist/controller/agent.controller.d.ts +199 -0
  49. package/dist/controller/agent.controller.js +414 -0
  50. package/dist/controller/application.controller.d.ts +113 -0
  51. package/dist/controller/application.controller.js +217 -0
  52. package/dist/controller/automation.controller.d.ts +113 -0
  53. package/dist/controller/automation.controller.js +246 -0
  54. package/dist/controller/channel.controller.d.ts +73 -0
  55. package/dist/controller/channel.controller.js +183 -0
  56. package/dist/controller/chat.controller.d.ts +188 -0
  57. package/dist/controller/chat.controller.js +375 -0
  58. package/dist/controller/connector.controller.d.ts +134 -0
  59. package/dist/controller/connector.controller.js +257 -0
  60. package/dist/controller/knowledge-base.controller.d.ts +157 -0
  61. package/dist/controller/knowledge-base.controller.js +278 -0
  62. package/dist/controller/mcp-server.controller.d.ts +115 -0
  63. package/dist/controller/mcp-server.controller.js +236 -0
  64. package/dist/controller/model-config.controller.d.ts +139 -0
  65. package/dist/controller/model-config.controller.js +274 -0
  66. package/dist/controller/observability.controller.d.ts +124 -0
  67. package/dist/controller/observability.controller.js +142 -0
  68. package/dist/controller/security.controller.d.ts +91 -0
  69. package/dist/controller/security.controller.js +172 -0
  70. package/dist/controller/settings.controller.d.ts +83 -0
  71. package/dist/controller/settings.controller.js +280 -0
  72. package/dist/core/ai-workstation.d.ts +17 -0
  73. package/dist/core/ai-workstation.js +129 -0
  74. package/dist/core/index.d.ts +4 -0
  75. package/dist/core/index.js +20 -0
  76. package/dist/core/service-container.d.ts +12 -0
  77. package/dist/core/service-container.js +54 -0
  78. package/dist/core/sse.d.ts +6 -0
  79. package/dist/core/sse.js +56 -0
  80. package/dist/core/types.d.ts +72 -0
  81. package/dist/core/types.js +2 -0
  82. package/dist/dto/agent.dto.d.ts +21 -0
  83. package/dist/dto/agent.dto.js +79 -0
  84. package/dist/dto/ai-config.dto.d.ts +67 -0
  85. package/dist/dto/ai-config.dto.js +249 -0
  86. package/dist/dto/chat.dto.d.ts +40 -0
  87. package/dist/dto/chat.dto.js +122 -0
  88. package/dist/index.d.ts +101 -0
  89. package/dist/index.js +195 -0
  90. package/dist/memory/db-store.d.ts +33 -0
  91. package/dist/memory/db-store.js +143 -0
  92. package/dist/memory/index.d.ts +187 -0
  93. package/dist/memory/index.js +443 -0
  94. package/dist/model/ai-agent-profile.entity.d.ts +32 -0
  95. package/dist/model/ai-agent-profile.entity.js +289 -0
  96. package/dist/model/ai-application.entity.d.ts +20 -0
  97. package/dist/model/ai-application.entity.js +166 -0
  98. package/dist/model/ai-chat-memory.entity.d.ts +16 -0
  99. package/dist/model/ai-chat-memory.entity.js +123 -0
  100. package/dist/model/ai-chat-message.entity.d.ts +16 -0
  101. package/dist/model/ai-chat-message.entity.js +122 -0
  102. package/dist/model/ai-chat-skill.entity.d.ts +19 -0
  103. package/dist/model/ai-chat-skill.entity.js +155 -0
  104. package/dist/model/ai-chat-thread.entity.d.ts +15 -0
  105. package/dist/model/ai-chat-thread.entity.js +113 -0
  106. package/dist/model/ai-chat-workspace.entity.d.ts +17 -0
  107. package/dist/model/ai-chat-workspace.entity.js +136 -0
  108. package/dist/model/ai-kb-document.entity.d.ts +16 -0
  109. package/dist/model/ai-kb-document.entity.js +122 -0
  110. package/dist/model/ai-knowledge-base.entity.d.ts +22 -0
  111. package/dist/model/ai-knowledge-base.entity.js +185 -0
  112. package/dist/model/ai-mcp-server.entity.d.ts +23 -0
  113. package/dist/model/ai-mcp-server.entity.js +198 -0
  114. package/dist/model/ai-model-config.entity.d.ts +24 -0
  115. package/dist/model/ai-model-config.entity.js +200 -0
  116. package/dist/service/a2a.service.d.ts +142 -0
  117. package/dist/service/a2a.service.js +537 -0
  118. package/dist/service/agent-profile.service.d.ts +34 -0
  119. package/dist/service/agent-profile.service.js +110 -0
  120. package/dist/service/agent-server.service.d.ts +91 -0
  121. package/dist/service/agent-server.service.js +634 -0
  122. package/dist/service/agent-task-queue.service.d.ts +98 -0
  123. package/dist/service/agent-task-queue.service.js +283 -0
  124. package/dist/service/ai-chat.service.d.ts +103 -0
  125. package/dist/service/ai-chat.service.js +431 -0
  126. package/dist/service/ai-skill.service.d.ts +116 -0
  127. package/dist/service/ai-skill.service.js +457 -0
  128. package/dist/service/application.service.d.ts +42 -0
  129. package/dist/service/application.service.js +139 -0
  130. package/dist/service/automation.service.d.ts +37 -0
  131. package/dist/service/automation.service.js +196 -0
  132. package/dist/service/connector.service.d.ts +136 -0
  133. package/dist/service/connector.service.js +524 -0
  134. package/dist/service/knowledge-base.service.d.ts +138 -0
  135. package/dist/service/knowledge-base.service.js +528 -0
  136. package/dist/service/mcp-server.service.d.ts +39 -0
  137. package/dist/service/mcp-server.service.js +143 -0
  138. package/dist/service/model-config.service.d.ts +57 -0
  139. package/dist/service/model-config.service.js +168 -0
  140. package/dist/service/observability.service.d.ts +145 -0
  141. package/dist/service/observability.service.js +281 -0
  142. package/dist/service/openai.service.d.ts +88 -0
  143. package/dist/service/openai.service.js +406 -0
  144. package/dist/service/prompt-builder.service.d.ts +50 -0
  145. package/dist/service/prompt-builder.service.js +246 -0
  146. package/dist/tools/code-exec.tool.d.ts +37 -0
  147. package/dist/tools/code-exec.tool.js +162 -0
  148. package/dist/tools/datetime.tool.d.ts +21 -0
  149. package/dist/tools/datetime.tool.js +379 -0
  150. package/dist/tools/http-request.tool.d.ts +43 -0
  151. package/dist/tools/http-request.tool.js +455 -0
  152. package/dist/tools/registry.d.ts +71 -0
  153. package/dist/tools/registry.js +77 -0
  154. package/dist/tools/text-process.tool.d.ts +7 -0
  155. package/dist/tools/text-process.tool.js +366 -0
  156. package/dist/tools/web-search.tool.d.ts +28 -0
  157. package/dist/tools/web-search.tool.js +304 -0
  158. package/dist/types.d.ts +70 -0
  159. package/dist/types.js +7 -0
  160. package/package.json +69 -0
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MCPAdapter = void 0;
4
+ class MCPAdapter {
5
+ constructor() {
6
+ this.type = 'mcp';
7
+ }
8
+ async testConnection(config) {
9
+ try {
10
+ const tools = await this.fetchTools(config);
11
+ return {
12
+ success: true,
13
+ message: `MCP 服务器连接成功,发现 ${tools.length} 个工具`,
14
+ resources: tools.map(t => t.name),
15
+ };
16
+ }
17
+ catch (err) {
18
+ return {
19
+ success: false,
20
+ message: 'MCP 服务器连接失败',
21
+ error: err.message,
22
+ };
23
+ }
24
+ }
25
+ async discoverTools(config) {
26
+ return this.fetchTools(config);
27
+ }
28
+ async generateManifest(config) {
29
+ const tools = await this.discoverTools(config);
30
+ return {
31
+ tools,
32
+ metadata: {
33
+ transport: config.mcpTransport,
34
+ command: config.command,
35
+ url: config.url,
36
+ },
37
+ };
38
+ }
39
+ async generateMCPServerConfigs(config) {
40
+ const tools = await this.discoverTools(config);
41
+ return [
42
+ {
43
+ name: `mcp-${config.name || 'proxy'}`,
44
+ transport: config.mcpTransport || 'stdio',
45
+ command: config.command,
46
+ args: config.args,
47
+ env: config.env,
48
+ url: config.url,
49
+ tools,
50
+ },
51
+ ];
52
+ }
53
+ /** 从 MCP 服务器获取工具列表 */
54
+ async fetchTools(config) {
55
+ const transport = config.mcpTransport || 'stdio';
56
+ if (transport === 'stdio') {
57
+ return this.fetchToolsStdio(config);
58
+ }
59
+ return this.fetchToolsHTTP(config);
60
+ }
61
+ /** 通过 stdio 连接 MCP 服务器 */
62
+ async fetchToolsStdio(config) {
63
+ const { spawn } = require('child_process');
64
+ return new Promise((resolve, reject) => {
65
+ const proc = spawn(config.command, config.args || [], {
66
+ env: { ...process.env, ...(config.env || {}) },
67
+ stdio: ['pipe', 'pipe', 'pipe'],
68
+ });
69
+ const timeout = setTimeout(() => {
70
+ proc.kill();
71
+ reject(new Error('MCP 服务器连接超时'));
72
+ }, 15000);
73
+ let buffer = '';
74
+ proc.stdout.on('data', (data) => {
75
+ buffer += data.toString();
76
+ const lines = buffer.split('\n');
77
+ buffer = lines.pop() || '';
78
+ for (const line of lines) {
79
+ if (!line.trim())
80
+ continue;
81
+ try {
82
+ const msg = JSON.parse(line);
83
+ if (msg.result?.tools) {
84
+ clearTimeout(timeout);
85
+ proc.kill();
86
+ resolve(msg.result.tools.map((t) => ({
87
+ name: t.name,
88
+ description: t.description || '',
89
+ inputSchema: t.inputSchema || {
90
+ type: 'object',
91
+ properties: {},
92
+ },
93
+ })));
94
+ }
95
+ }
96
+ catch {
97
+ // 忽略非 JSON 行
98
+ }
99
+ }
100
+ });
101
+ proc.stderr.on('data', () => {
102
+ // 忽略 stderr
103
+ });
104
+ proc.on('error', err => {
105
+ clearTimeout(timeout);
106
+ reject(new Error(`启动 MCP 服务器失败: ${err.message}`));
107
+ });
108
+ proc.on('close', () => {
109
+ clearTimeout(timeout);
110
+ // 如果还没 resolve,返回空数组
111
+ resolve([]);
112
+ });
113
+ // 发送 initialize + tools/list 请求
114
+ const initMsg = JSON.stringify({
115
+ jsonrpc: '2.0',
116
+ id: 1,
117
+ method: 'initialize',
118
+ params: {
119
+ protocolVersion: '2024-11-05',
120
+ capabilities: {},
121
+ clientInfo: { name: 'connector-test', version: '1.0' },
122
+ },
123
+ });
124
+ const listMsg = JSON.stringify({
125
+ jsonrpc: '2.0',
126
+ id: 2,
127
+ method: 'tools/list',
128
+ params: {},
129
+ });
130
+ proc.stdin.write(initMsg + '\n');
131
+ proc.stdin.write(listMsg + '\n');
132
+ });
133
+ }
134
+ /** 通过 HTTP/SSE 连接 MCP 服务器 */
135
+ async fetchToolsHTTP(config) {
136
+ const resp = await fetch(`${config.url}/tools`, {
137
+ method: 'GET',
138
+ headers: { 'Content-Type': 'application/json' },
139
+ signal: AbortSignal.timeout(10000),
140
+ });
141
+ if (!resp.ok) {
142
+ throw new Error(`HTTP ${resp.status}`);
143
+ }
144
+ const data = await resp.json();
145
+ const tools = data.tools || data;
146
+ return (Array.isArray(tools) ? tools : []).map((t) => ({
147
+ name: t.name,
148
+ description: t.description || '',
149
+ inputSchema: t.inputSchema || {
150
+ type: 'object',
151
+ properties: {},
152
+ },
153
+ }));
154
+ }
155
+ }
156
+ exports.MCPAdapter = MCPAdapter;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 消息队列适配器
3
+ *
4
+ * 支持 RabbitMQ(动态 require amqplib)和 Kafka(动态 require kafkajs)。
5
+ * testConnection 测试 MQ 连接,discoverTools 生成消息生产/消费工具。
6
+ */
7
+ import type { DataSourceConfig, DiscoveredTool, ConnectionTestResult, DataSourceAdapter, MCPServerConfig } from './types';
8
+ export declare class MessageQueueAdapter implements DataSourceAdapter {
9
+ readonly type: "message-queue";
10
+ testConnection(config: DataSourceConfig): Promise<ConnectionTestResult>;
11
+ discoverTools(config: DataSourceConfig): Promise<DiscoveredTool[]>;
12
+ generateManifest(config: DataSourceConfig): Promise<{
13
+ tools: DiscoveredTool[];
14
+ metadata: {
15
+ mqType: "rabbitmq" | "kafka";
16
+ host: string;
17
+ topics: string[];
18
+ };
19
+ }>;
20
+ generateMCPServerConfigs(config: DataSourceConfig): Promise<MCPServerConfig[]>;
21
+ /** 测试 RabbitMQ 连接 */
22
+ private testRabbitMQ;
23
+ /** 测试 Kafka 连接 */
24
+ private testKafka;
25
+ }
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageQueueAdapter = void 0;
4
+ class MessageQueueAdapter {
5
+ constructor() {
6
+ this.type = 'message-queue';
7
+ }
8
+ async testConnection(config) {
9
+ if (config.mqType === 'kafka') {
10
+ return this.testKafka(config);
11
+ }
12
+ return this.testRabbitMQ(config);
13
+ }
14
+ async discoverTools(config) {
15
+ const topics = config.topics || [];
16
+ const tools = [];
17
+ for (const topic of topics) {
18
+ tools.push({
19
+ name: `mq_publish_${topic}`,
20
+ description: `向 ${topic} 发布消息(${config.mqType})`,
21
+ inputSchema: {
22
+ type: 'object',
23
+ properties: {
24
+ message: {
25
+ type: 'string',
26
+ description: '消息内容(JSON 字符串)',
27
+ },
28
+ routingKey: {
29
+ type: 'string',
30
+ description: '路由键(RabbitMQ)',
31
+ },
32
+ },
33
+ required: ['message'],
34
+ },
35
+ });
36
+ tools.push({
37
+ name: `mq_consume_${topic}`,
38
+ description: `从 ${topic} 消费消息(${config.mqType})`,
39
+ inputSchema: {
40
+ type: 'object',
41
+ properties: {
42
+ maxMessages: {
43
+ type: 'number',
44
+ description: '最大消费消息数',
45
+ default: 10,
46
+ },
47
+ timeout: {
48
+ type: 'number',
49
+ description: '超时时间(毫秒)',
50
+ default: 5000,
51
+ },
52
+ },
53
+ },
54
+ });
55
+ }
56
+ // 通用工具
57
+ tools.push({
58
+ name: 'mq_list_topics',
59
+ description: '列出所有可用的 topic / queue',
60
+ inputSchema: {
61
+ type: 'object',
62
+ properties: {},
63
+ },
64
+ });
65
+ return tools;
66
+ }
67
+ async generateManifest(config) {
68
+ const tools = await this.discoverTools(config);
69
+ return {
70
+ tools,
71
+ metadata: {
72
+ mqType: config.mqType,
73
+ host: config.host,
74
+ topics: config.topics,
75
+ },
76
+ };
77
+ }
78
+ async generateMCPServerConfigs(config) {
79
+ const tools = await this.discoverTools(config);
80
+ return [
81
+ {
82
+ name: `mq-${config.name || 'default'}`,
83
+ transport: 'stdio',
84
+ command: 'node',
85
+ args: ['-e', '/* MCP server for message queue */'],
86
+ env: {
87
+ MQ_TYPE: config.mqType || 'rabbitmq',
88
+ MQ_HOST: config.host || '',
89
+ MQ_PORT: String(config.port || 5672),
90
+ MQ_TOPICS: (config.topics || []).join(','),
91
+ MQ_GROUP_ID: config.groupId || '',
92
+ MQ_USER: config.username || '',
93
+ MQ_PASS: config.password || '',
94
+ },
95
+ tools,
96
+ },
97
+ ];
98
+ }
99
+ /** 测试 RabbitMQ 连接 */
100
+ async testRabbitMQ(config) {
101
+ let amqp;
102
+ try {
103
+ amqp = require('amqplib');
104
+ }
105
+ catch {
106
+ throw new Error('amqplib 包未安装,请运行 npm install amqplib');
107
+ }
108
+ const url = `amqp://${config.username
109
+ ? config.username + ':' + (config.password || '') + '@'
110
+ : ''}${config.host}:${config.port || 5672}`;
111
+ let conn;
112
+ try {
113
+ conn = await amqp.connect(url);
114
+ const channel = await conn.createChannel();
115
+ const queues = [];
116
+ for (const topic of config.topics || []) {
117
+ try {
118
+ const q = await channel.assertQueue(topic, {
119
+ durable: true,
120
+ });
121
+ queues.push(q.queue);
122
+ }
123
+ catch {
124
+ // 忽略单个队列错误
125
+ }
126
+ }
127
+ return {
128
+ success: true,
129
+ message: `RabbitMQ 连接成功,确认 ${queues.length} 个队列`,
130
+ resources: queues,
131
+ };
132
+ }
133
+ finally {
134
+ if (conn) {
135
+ await conn.close().catch(() => { });
136
+ }
137
+ }
138
+ }
139
+ /** 测试 Kafka 连接 */
140
+ async testKafka(config) {
141
+ let Kafka;
142
+ try {
143
+ Kafka = require('kafkajs').Kafka;
144
+ }
145
+ catch {
146
+ throw new Error('kafkajs 包未安装,请运行 npm install kafkajs');
147
+ }
148
+ const kafka = new Kafka({
149
+ clientId: 'connector-test',
150
+ brokers: [`${config.host}:${config.port || 9092}`],
151
+ sasl: config.username && config.password
152
+ ? {
153
+ mechanism: 'plain',
154
+ username: config.username,
155
+ password: config.password,
156
+ }
157
+ : undefined,
158
+ });
159
+ const admin = kafka.admin();
160
+ try {
161
+ await admin.connect();
162
+ const topics = await admin.listTopics();
163
+ const configTopics = config.topics || [];
164
+ const missing = configTopics.filter(t => !topics.includes(t));
165
+ for (const t of missing) {
166
+ await admin.createTopics({
167
+ topics: [{ topic: t, numPartitions: 1 }],
168
+ });
169
+ }
170
+ return {
171
+ success: true,
172
+ message: `Kafka 连接成功,发现 ${topics.length} 个 topic`,
173
+ resources: topics,
174
+ };
175
+ }
176
+ finally {
177
+ await admin.disconnect().catch(() => { });
178
+ }
179
+ }
180
+ }
181
+ exports.MessageQueueAdapter = MessageQueueAdapter;
@@ -0,0 +1,205 @@
1
+ /**
2
+ * 连接器系统类型定义
3
+ *
4
+ * 定义数据源类型、配置、适配器接口等核心类型。
5
+ * 适配器模式:每种数据源实现 DataSourceAdapter 接口,
6
+ * 由 ConnectorService 统一管理生命周期。
7
+ */
8
+ /** 数据源类型 */
9
+ export type DataSourceType = 'database' | 'filesystem' | 'message-queue' | 'http-api' | 'mcp' | 'email' | 'calendar';
10
+ /** 数据源连接配置(所有数据源类型的并集) */
11
+ export interface DataSourceConfig {
12
+ /** 数据源名称 */
13
+ name: string;
14
+ /** 数据源类型 */
15
+ type: DataSourceType;
16
+ /** 是否启用 */
17
+ enabled: boolean;
18
+ /** 数据库类型: mysql / postgres / mongodb */
19
+ dbType?: 'mysql' | 'postgres' | 'mongodb';
20
+ /** 数据库主机 */
21
+ host?: string;
22
+ /** 数据库端口 */
23
+ port?: number;
24
+ /** 数据库名 */
25
+ database?: string;
26
+ /** 数据库用户名 */
27
+ username?: string;
28
+ /** 数据库密码 */
29
+ password?: string;
30
+ /** 额外连接参数 (SSL 等) */
31
+ extraOptions?: Record<string, any>;
32
+ /** 根目录路径 */
33
+ rootPath?: string;
34
+ /** 允许的扩展名 */
35
+ allowedExtensions?: string[];
36
+ /** 是否只读 */
37
+ readOnly?: boolean;
38
+ /** HTTP API 模式: manual / openapi */
39
+ apiMode?: 'manual' | 'openapi';
40
+ /** OpenAPI spec URL 或内联 JSON */
41
+ openapiSpec?: string;
42
+ /** 服务配置列表(多服务实例) */
43
+ services?: ServiceConfig[];
44
+ /** 全局请求头 */
45
+ globalHeaders?: Record<string, string>;
46
+ /** 全局认证 token */
47
+ authToken?: string;
48
+ /** 认证类型: bearer / basic / apikey / none */
49
+ authType?: 'bearer' | 'basic' | 'apikey' | 'none';
50
+ /** MCP 传输方式: stdio / sse / streamable-http */
51
+ mcpTransport?: 'stdio' | 'sse' | 'streamable-http';
52
+ /** MCP 命令(stdio 模式) */
53
+ command?: string;
54
+ /** MCP 参数 */
55
+ args?: string[];
56
+ /** MCP 环境变量 */
57
+ env?: Record<string, string>;
58
+ /** MCP URL(sse / streamable-http 模式) */
59
+ url?: string;
60
+ /** IMAP 主机 */
61
+ imapHost?: string;
62
+ /** IMAP 端口 */
63
+ imapPort?: number;
64
+ /** SMTP 主机 */
65
+ smtpHost?: string;
66
+ /** SMTP 端口 */
67
+ smtpPort?: number;
68
+ /** 是否使用 TLS */
69
+ useTLS?: boolean;
70
+ /** 邮箱地址 */
71
+ emailAddress?: string;
72
+ /** 日历类型: local / caldav */
73
+ calendarType?: 'local' | 'caldav';
74
+ /** CalDAV 服务器 URL */
75
+ caldavUrl?: string;
76
+ /** 日历名称 */
77
+ calendarName?: string;
78
+ /** MQ 类型: rabbitmq / kafka */
79
+ mqType?: 'rabbitmq' | 'kafka';
80
+ /** MQ topic / queue 列表 */
81
+ topics?: string[];
82
+ /** 消费组 ID(Kafka) */
83
+ groupId?: string;
84
+ }
85
+ /** HTTP API 服务配置(多服务实例) */
86
+ export interface ServiceConfig {
87
+ /** 服务名称 */
88
+ name: string;
89
+ /** 基础 URL */
90
+ baseUrl: string;
91
+ /** 认证 token */
92
+ authToken?: string;
93
+ /** 请求头 */
94
+ headers?: Record<string, string>;
95
+ /** 端点列表 */
96
+ endpoints?: EndpointConfig[];
97
+ }
98
+ /** HTTP API 端点定义 */
99
+ export interface EndpointConfig {
100
+ /** 端点名称 */
101
+ name: string;
102
+ /** HTTP 方法 */
103
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
104
+ /** 路径(相对于 baseUrl) */
105
+ path: string;
106
+ /** 描述 */
107
+ description?: string;
108
+ /** 请求头 */
109
+ headers?: Record<string, string>;
110
+ /** 请求体 JSON Schema */
111
+ bodySchema?: Record<string, any>;
112
+ /** 查询参数 JSON Schema */
113
+ querySchema?: Record<string, any>;
114
+ }
115
+ /** 工具发现结果 */
116
+ export interface DiscoveredTool {
117
+ /** 工具名称 */
118
+ name: string;
119
+ /** 工具描述 */
120
+ description: string;
121
+ /** 参数 JSON Schema */
122
+ inputSchema: Record<string, any>;
123
+ /** 输出 JSON Schema(可选) */
124
+ outputSchema?: Record<string, any>;
125
+ }
126
+ /** 连接测试结果 */
127
+ export interface ConnectionTestResult {
128
+ /** 是否成功 */
129
+ success: boolean;
130
+ /** 消息 */
131
+ message: string;
132
+ /** 发现的资源(表、文件、端点等) */
133
+ resources?: string[];
134
+ /** 错误详情 */
135
+ error?: string;
136
+ }
137
+ /** MCP 服务器配置(生成的) */
138
+ export interface MCPServerConfig {
139
+ /** 服务器名称 */
140
+ name: string;
141
+ /** 传输方式 */
142
+ transport: 'stdio' | 'sse' | 'streamable-http';
143
+ /** 命令(stdio) */
144
+ command?: string;
145
+ /** 参数(stdio) */
146
+ args?: string[];
147
+ /** 环境变量(stdio) */
148
+ env?: Record<string, string>;
149
+ /** URL(sse / streamable-http) */
150
+ url?: string;
151
+ /** 工具列表 */
152
+ tools: DiscoveredTool[];
153
+ }
154
+ /** 数据源适配器接口 */
155
+ export interface DataSourceAdapter {
156
+ /** 数据源类型 */
157
+ readonly type: DataSourceType;
158
+ /** 测试连接 */
159
+ testConnection(config: DataSourceConfig): Promise<ConnectionTestResult>;
160
+ /** 发现工具 */
161
+ discoverTools(config: DataSourceConfig): Promise<DiscoveredTool[]>;
162
+ /** 生成清单(包含工具定义和元数据) */
163
+ generateManifest(config: DataSourceConfig): Promise<{
164
+ tools: DiscoveredTool[];
165
+ metadata: Record<string, any>;
166
+ }>;
167
+ /** 生成 MCP 服务器配置 */
168
+ generateMCPServerConfigs(config: DataSourceConfig): Promise<MCPServerConfig[]>;
169
+ }
170
+ /** 数据源类型信息(前端向导展示用) */
171
+ export interface DataSourceTypeInfo {
172
+ /** 类型标识 */
173
+ type: DataSourceType;
174
+ /** 显示名称 */
175
+ label: string;
176
+ /** 图标 */
177
+ icon?: string;
178
+ /** 描述 */
179
+ description: string;
180
+ /** 配置字段定义 */
181
+ fields: Array<{
182
+ /** 字段名 */
183
+ name: string;
184
+ /** 显示标签 */
185
+ label: string;
186
+ /** 字段类型 */
187
+ fieldType: 'text' | 'password' | 'number' | 'select' | 'boolean' | 'textarea';
188
+ /** 是否必填 */
189
+ required: boolean;
190
+ /** 默认值 */
191
+ defaultValue?: any;
192
+ /** 选项(select 类型) */
193
+ options?: Array<{
194
+ label: string;
195
+ value: string;
196
+ }>;
197
+ /** 条件显示(依赖其他字段的值) */
198
+ visibleWhen?: {
199
+ field: string;
200
+ equals: any;
201
+ };
202
+ /** 占位符 */
203
+ placeholder?: string;
204
+ }>;
205
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * 连接器系统类型定义
4
+ *
5
+ * 定义数据源类型、配置、适配器接口等核心类型。
6
+ * 适配器模式:每种数据源实现 DataSourceAdapter 接口,
7
+ * 由 ConnectorService 统一管理生命周期。
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,41 @@
1
+ import { BaseController } from '@cicctencent/midwayjs-base';
2
+ import { A2AService } from '../service/a2a.service';
3
+ import type { JsonRpcResponse } from '../service/a2a.service';
4
+ export declare class A2AController extends BaseController {
5
+ a2aService: A2AService;
6
+ /**
7
+ * Agent Card 发现端点
8
+ * GET /.well-known/agent.json
9
+ */
10
+ getAgentCard(): Promise<import("../service/a2a.service").AgentCard>;
11
+ /**
12
+ * JSON-RPC 分发入口
13
+ * POST /a2a
14
+ * 支持 SSE 流式响应(当 method 为 tasks/sendSubscribe 时)
15
+ */
16
+ handleJsonRpc(body: any): Promise<void | JsonRpcResponse>;
17
+ /**
18
+ * 发现远程 Agent
19
+ * POST /api/a2a/discover
20
+ */
21
+ discoverAgent(body: {
22
+ url: string;
23
+ auth?: string;
24
+ }): Promise<{
25
+ ret: number;
26
+ data: import("../service/a2a.service").AgentCard;
27
+ msg: string;
28
+ } | {
29
+ ret: number;
30
+ msg: any;
31
+ data?: undefined;
32
+ }>;
33
+ /**
34
+ * 处理流式 JSON-RPC 请求(SSE)
35
+ */
36
+ private handleStreaming;
37
+ /**
38
+ * 格式化 SSE 事件
39
+ */
40
+ private formatSSEEvent;
41
+ }