yuangs 5.16.0 → 5.17.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/dist/agent/modelRouterIntegration.d.ts +134 -0
- package/dist/agent/modelRouterIntegration.js +355 -0
- package/dist/agent/modelRouterIntegration.js.map +1 -0
- package/dist/commands/git/branch.js +49 -1
- package/dist/commands/git/branch.js.map +1 -1
- package/dist/legacy/governance/capability/token.js +11 -1
- package/dist/legacy/governance/capability/token.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModelRouter 与 AgentRuntime/DualAgentRuntime 集成模块
|
|
3
|
+
*
|
|
4
|
+
* 这个模块提供了将 ModelRouter 系统深度集成到 AI Agent 执行引擎中的功能。
|
|
5
|
+
*
|
|
6
|
+
* 核心功能:
|
|
7
|
+
* 1. 智能任务类型推断:根据用户输入和上下文自动推断任务类型
|
|
8
|
+
* 2. 模型选择策略:支持多种路由策略(自动、最快、成本优化等)
|
|
9
|
+
* 3. 回退机制:当路由失败时自动回退到默认 AI 服务
|
|
10
|
+
* 4. 流式输出支持:保持与现有 Agent 执行引擎的兼容性
|
|
11
|
+
*/
|
|
12
|
+
import { TaskType, RoutingStrategy, type TaskConfig } from '../core/modelRouter';
|
|
13
|
+
import { AIRequestMessage } from '../core/validation';
|
|
14
|
+
/**
|
|
15
|
+
* 智能推断任务类型
|
|
16
|
+
*
|
|
17
|
+
* 根据用户输入和上下文自动推断最适合的任务类型
|
|
18
|
+
*/
|
|
19
|
+
export declare function inferTaskType(userInput: string, mode?: 'chat' | 'command'): TaskType;
|
|
20
|
+
/**
|
|
21
|
+
* 推断路由策略
|
|
22
|
+
*
|
|
23
|
+
* 根据用户配置和任务特性推断最合适的路由策略
|
|
24
|
+
*/
|
|
25
|
+
export declare function inferRoutingStrategy(taskType: TaskType, userInput?: string): RoutingStrategy;
|
|
26
|
+
/**
|
|
27
|
+
* RouterLLMOptions
|
|
28
|
+
*
|
|
29
|
+
* 路由器 LLM 调用选项
|
|
30
|
+
*/
|
|
31
|
+
export interface RouterLLMOptions {
|
|
32
|
+
/** 是否启用模型路由 */
|
|
33
|
+
enableRouting?: boolean;
|
|
34
|
+
/** 手动指定路由策略 */
|
|
35
|
+
routingStrategy?: RoutingStrategy;
|
|
36
|
+
/** 手动指定任务类型 */
|
|
37
|
+
taskType?: TaskType;
|
|
38
|
+
/** 是否启用回退机制 */
|
|
39
|
+
enableFallback?: boolean;
|
|
40
|
+
/** 额外的路由配置 */
|
|
41
|
+
routingConfig?: Partial<TaskConfig>;
|
|
42
|
+
/** 流式输出回调 */
|
|
43
|
+
onChunk?: (chunk: string) => void;
|
|
44
|
+
/** 模型参数 */
|
|
45
|
+
model?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* RouterLLMResult
|
|
49
|
+
*
|
|
50
|
+
* 路由器 LLM 调用结果
|
|
51
|
+
*/
|
|
52
|
+
export interface RouterLLMResult {
|
|
53
|
+
/** 原始响应文本 */
|
|
54
|
+
rawText: string;
|
|
55
|
+
/** 是否使用了路由器 */
|
|
56
|
+
usedRouter: boolean;
|
|
57
|
+
/** 使用的模型名称 */
|
|
58
|
+
modelName: string;
|
|
59
|
+
/** 路由原因 */
|
|
60
|
+
routingReason?: string;
|
|
61
|
+
/** 延迟时间(毫秒) */
|
|
62
|
+
latencyMs: number;
|
|
63
|
+
/** 错误信息(如果有) */
|
|
64
|
+
error?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* ModelRouter 集成类
|
|
68
|
+
*
|
|
69
|
+
* 提供与 AgentRuntime 和 DualAgentRuntime 无缝集成的接口
|
|
70
|
+
*/
|
|
71
|
+
export declare class ModelRouterIntegration {
|
|
72
|
+
private enableRouting;
|
|
73
|
+
private enableFallback;
|
|
74
|
+
private defaultStrategy;
|
|
75
|
+
constructor(options?: {
|
|
76
|
+
enableRouting?: boolean;
|
|
77
|
+
enableFallback?: boolean;
|
|
78
|
+
defaultStrategy?: RoutingStrategy;
|
|
79
|
+
});
|
|
80
|
+
/**
|
|
81
|
+
* 使用路由器执行 LLM 调用
|
|
82
|
+
*
|
|
83
|
+
* 这是主要的集成接口,可以在 AgentRuntime 和 DualAgentRuntime 中使用
|
|
84
|
+
*/
|
|
85
|
+
executeWithRouter(messages: AIRequestMessage[], mode?: 'chat' | 'command', options?: RouterLLMOptions): Promise<RouterLLMResult>;
|
|
86
|
+
/**
|
|
87
|
+
* 智能任务类型推断
|
|
88
|
+
*/
|
|
89
|
+
private inferTaskType;
|
|
90
|
+
/**
|
|
91
|
+
* 智能路由策略推断
|
|
92
|
+
*/
|
|
93
|
+
private inferRoutingStrategy;
|
|
94
|
+
/**
|
|
95
|
+
* 从消息列表构建提示词
|
|
96
|
+
*/
|
|
97
|
+
private buildPromptFromMessages;
|
|
98
|
+
/**
|
|
99
|
+
* 更新配置
|
|
100
|
+
*/
|
|
101
|
+
updateConfig(options: {
|
|
102
|
+
enableRouting?: boolean;
|
|
103
|
+
enableFallback?: boolean;
|
|
104
|
+
defaultStrategy?: RoutingStrategy;
|
|
105
|
+
}): void;
|
|
106
|
+
/**
|
|
107
|
+
* 获取当前配置
|
|
108
|
+
*/
|
|
109
|
+
getConfig(): {
|
|
110
|
+
enableRouting: boolean;
|
|
111
|
+
enableFallback: boolean;
|
|
112
|
+
defaultStrategy: RoutingStrategy;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 获取全局路由器集成实例(单例)
|
|
117
|
+
*/
|
|
118
|
+
export declare function getRouterIntegration(): ModelRouterIntegration;
|
|
119
|
+
/**
|
|
120
|
+
* 重置全局路由器集成实例
|
|
121
|
+
*/
|
|
122
|
+
export declare function resetRouterIntegration(): void;
|
|
123
|
+
/**
|
|
124
|
+
* 快捷函数:执行 LLM 调用(带路由)
|
|
125
|
+
*
|
|
126
|
+
* 这个函数可以直接替换现有的 LLM 调用
|
|
127
|
+
*/
|
|
128
|
+
export declare function callLLMWithRouter(messages: AIRequestMessage[], mode?: 'chat' | 'command', options?: RouterLLMOptions): Promise<RouterLLMResult>;
|
|
129
|
+
/**
|
|
130
|
+
* 判断是否应该使用路由器
|
|
131
|
+
*
|
|
132
|
+
* 根据当前配置和任务特性决定是否使用 ModelRouter
|
|
133
|
+
*/
|
|
134
|
+
export declare function shouldUseRouter(messages: AIRequestMessage[], mode?: 'chat' | 'command'): boolean;
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ModelRouter 与 AgentRuntime/DualAgentRuntime 集成模块
|
|
4
|
+
*
|
|
5
|
+
* 这个模块提供了将 ModelRouter 系统深度集成到 AI Agent 执行引擎中的功能。
|
|
6
|
+
*
|
|
7
|
+
* 核心功能:
|
|
8
|
+
* 1. 智能任务类型推断:根据用户输入和上下文自动推断任务类型
|
|
9
|
+
* 2. 模型选择策略:支持多种路由策略(自动、最快、成本优化等)
|
|
10
|
+
* 3. 回退机制:当路由失败时自动回退到默认 AI 服务
|
|
11
|
+
* 4. 流式输出支持:保持与现有 Agent 执行引擎的兼容性
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ModelRouterIntegration = void 0;
|
|
15
|
+
exports.inferTaskType = inferTaskType;
|
|
16
|
+
exports.inferRoutingStrategy = inferRoutingStrategy;
|
|
17
|
+
exports.getRouterIntegration = getRouterIntegration;
|
|
18
|
+
exports.resetRouterIntegration = resetRouterIntegration;
|
|
19
|
+
exports.callLLMWithRouter = callLLMWithRouter;
|
|
20
|
+
exports.shouldUseRouter = shouldUseRouter;
|
|
21
|
+
const modelRouter_1 = require("../core/modelRouter");
|
|
22
|
+
/**
|
|
23
|
+
* 智能推断任务类型
|
|
24
|
+
*
|
|
25
|
+
* 根据用户输入和上下文自动推断最适合的任务类型
|
|
26
|
+
*/
|
|
27
|
+
function inferTaskType(userInput, mode = 'chat') {
|
|
28
|
+
// 输入验证
|
|
29
|
+
if (!userInput || typeof userInput !== 'string') {
|
|
30
|
+
return modelRouter_1.TaskType.CONVERSATION;
|
|
31
|
+
}
|
|
32
|
+
const input = userInput.toLowerCase().trim();
|
|
33
|
+
// 使用正则表达式提高匹配准确性
|
|
34
|
+
// 代码生成相关
|
|
35
|
+
const codeGenPatterns = [
|
|
36
|
+
/\b(写|生成|实现|create|implement|generate|write)\b.*(函数|方法|类|模块|代码|program|function|method|class|module|code)/i,
|
|
37
|
+
/\b写一个\b/i,
|
|
38
|
+
/\b写个\b/i,
|
|
39
|
+
/\b生成一个\b/i
|
|
40
|
+
];
|
|
41
|
+
for (const pattern of codeGenPatterns) {
|
|
42
|
+
if (pattern.test(input)) {
|
|
43
|
+
return modelRouter_1.TaskType.CODE_GENERATION;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// 代码审查相关
|
|
47
|
+
const codeReviewPatterns = [
|
|
48
|
+
/\b(审查|review|检查|check)\b.*(代码|code)/i,
|
|
49
|
+
/\bcode review\b/i
|
|
50
|
+
];
|
|
51
|
+
for (const pattern of codeReviewPatterns) {
|
|
52
|
+
if (pattern.test(input)) {
|
|
53
|
+
return modelRouter_1.TaskType.CODE_REVIEW;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// 调试相关
|
|
57
|
+
const debugPatterns = [
|
|
58
|
+
/\b(调试|debug)\b/,
|
|
59
|
+
/\b(修复|fix|解决|solve)\b.*(bug|错误|error|问题)/i,
|
|
60
|
+
/\b(bug|错误|error|问题)\b.*(修复|fix|解决|solve)/i
|
|
61
|
+
];
|
|
62
|
+
for (const pattern of debugPatterns) {
|
|
63
|
+
if (pattern.test(input)) {
|
|
64
|
+
return modelRouter_1.TaskType.DEBUG;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// 翻译相关
|
|
68
|
+
const translatePatterns = [
|
|
69
|
+
/\b翻译\b.*(成|为|to|into)\b/i,
|
|
70
|
+
/\btranslate\b/i
|
|
71
|
+
];
|
|
72
|
+
for (const pattern of translatePatterns) {
|
|
73
|
+
if (pattern.test(input)) {
|
|
74
|
+
return modelRouter_1.TaskType.TRANSLATION;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// 摘要相关
|
|
78
|
+
const summaryPatterns = [
|
|
79
|
+
/\b(总结|摘要|summarize|summary)\b/i
|
|
80
|
+
];
|
|
81
|
+
for (const pattern of summaryPatterns) {
|
|
82
|
+
if (pattern.test(input)) {
|
|
83
|
+
return modelRouter_1.TaskType.SUMMARIZATION;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// 分析相关
|
|
87
|
+
const analysisPatterns = [
|
|
88
|
+
/\b(分析|analyze|explain|解释)\b/i
|
|
89
|
+
];
|
|
90
|
+
for (const pattern of analysisPatterns) {
|
|
91
|
+
if (pattern.test(input)) {
|
|
92
|
+
return modelRouter_1.TaskType.ANALYSIS;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// 命令生成相关
|
|
96
|
+
const commandPatterns = [
|
|
97
|
+
/\b(命令|command)\b/
|
|
98
|
+
];
|
|
99
|
+
for (const pattern of commandPatterns) {
|
|
100
|
+
if (pattern.test(input)) {
|
|
101
|
+
return modelRouter_1.TaskType.COMMAND_GENERATION;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// 如果模式是 command,默认为命令生成
|
|
105
|
+
if (mode === 'command') {
|
|
106
|
+
return modelRouter_1.TaskType.COMMAND_GENERATION;
|
|
107
|
+
}
|
|
108
|
+
// 默认对话
|
|
109
|
+
return modelRouter_1.TaskType.CONVERSATION;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 推断路由策略
|
|
113
|
+
*
|
|
114
|
+
* 根据用户配置和任务特性推断最合适的路由策略
|
|
115
|
+
*/
|
|
116
|
+
function inferRoutingStrategy(taskType, userInput) {
|
|
117
|
+
const input = (userInput || '').toLowerCase();
|
|
118
|
+
// 成本优先
|
|
119
|
+
if (input.includes('便宜') ||
|
|
120
|
+
input.includes('预算') ||
|
|
121
|
+
input.includes('cheap') ||
|
|
122
|
+
input.includes('budget')) {
|
|
123
|
+
return modelRouter_1.RoutingStrategy.CHEAPEST_FIRST;
|
|
124
|
+
}
|
|
125
|
+
// 速度优先
|
|
126
|
+
if (input.includes('快') ||
|
|
127
|
+
input.includes('fast') ||
|
|
128
|
+
input.includes('quick') ||
|
|
129
|
+
input.includes('asap')) {
|
|
130
|
+
return modelRouter_1.RoutingStrategy.FASTEST_FIRST;
|
|
131
|
+
}
|
|
132
|
+
// 质量优先
|
|
133
|
+
if (input.includes('高质量') ||
|
|
134
|
+
input.includes('最好') ||
|
|
135
|
+
input.includes('best quality') ||
|
|
136
|
+
input.includes('best')) {
|
|
137
|
+
return modelRouter_1.RoutingStrategy.BEST_QUALITY;
|
|
138
|
+
}
|
|
139
|
+
// 根据任务类型选择默认策略
|
|
140
|
+
const strategyMap = {
|
|
141
|
+
[modelRouter_1.TaskType.CODE_GENERATION]: modelRouter_1.RoutingStrategy.BEST_QUALITY,
|
|
142
|
+
[modelRouter_1.TaskType.CODE_REVIEW]: modelRouter_1.RoutingStrategy.BEST_QUALITY,
|
|
143
|
+
[modelRouter_1.TaskType.CONVERSATION]: modelRouter_1.RoutingStrategy.AUTO,
|
|
144
|
+
[modelRouter_1.TaskType.TRANSLATION]: modelRouter_1.RoutingStrategy.FASTEST_FIRST,
|
|
145
|
+
[modelRouter_1.TaskType.SUMMARIZATION]: modelRouter_1.RoutingStrategy.FASTEST_FIRST,
|
|
146
|
+
[modelRouter_1.TaskType.ANALYSIS]: modelRouter_1.RoutingStrategy.AUTO,
|
|
147
|
+
[modelRouter_1.TaskType.COMMAND_GENERATION]: modelRouter_1.RoutingStrategy.AUTO,
|
|
148
|
+
[modelRouter_1.TaskType.DEBUG]: modelRouter_1.RoutingStrategy.BEST_QUALITY,
|
|
149
|
+
[modelRouter_1.TaskType.GENERAL]: modelRouter_1.RoutingStrategy.AUTO,
|
|
150
|
+
};
|
|
151
|
+
return strategyMap[taskType] || modelRouter_1.RoutingStrategy.AUTO;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* ModelRouter 集成类
|
|
155
|
+
*
|
|
156
|
+
* 提供与 AgentRuntime 和 DualAgentRuntime 无缝集成的接口
|
|
157
|
+
*/
|
|
158
|
+
class ModelRouterIntegration {
|
|
159
|
+
enableRouting;
|
|
160
|
+
enableFallback;
|
|
161
|
+
defaultStrategy;
|
|
162
|
+
constructor(options = {}) {
|
|
163
|
+
this.enableRouting = options.enableRouting ?? true;
|
|
164
|
+
this.enableFallback = options.enableFallback ?? true;
|
|
165
|
+
this.defaultStrategy = options.defaultStrategy ?? modelRouter_1.RoutingStrategy.AUTO;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* 使用路由器执行 LLM 调用
|
|
169
|
+
*
|
|
170
|
+
* 这是主要的集成接口,可以在 AgentRuntime 和 DualAgentRuntime 中使用
|
|
171
|
+
*/
|
|
172
|
+
async executeWithRouter(messages, mode = 'chat', options = {}) {
|
|
173
|
+
const startTime = Date.now();
|
|
174
|
+
// 如果禁用路由,直接返回
|
|
175
|
+
if (!this.enableRouting || !options.enableRouting) {
|
|
176
|
+
return {
|
|
177
|
+
rawText: '',
|
|
178
|
+
usedRouter: false,
|
|
179
|
+
modelName: 'default',
|
|
180
|
+
latencyMs: Date.now() - startTime,
|
|
181
|
+
error: 'Routing disabled'
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
// 获取用户输入(最后一条用户消息)
|
|
186
|
+
const lastUserMessage = messages.filter(m => m.role === 'user').pop();
|
|
187
|
+
const userInput = lastUserMessage?.content || '';
|
|
188
|
+
// 推断任务类型
|
|
189
|
+
const taskType = options.taskType || this.inferTaskType(userInput, mode);
|
|
190
|
+
// 推断路由策略
|
|
191
|
+
const strategy = options.routingStrategy ||
|
|
192
|
+
this.inferRoutingStrategy(taskType, userInput) ||
|
|
193
|
+
this.defaultStrategy;
|
|
194
|
+
// 构建提示词
|
|
195
|
+
const prompt = this.buildPromptFromMessages(messages);
|
|
196
|
+
// 执行任务
|
|
197
|
+
const result = await (0, modelRouter_1.executeTask)(prompt, {
|
|
198
|
+
type: taskType,
|
|
199
|
+
description: `AI ${mode} task: ${userInput.substring(0, 100)}`,
|
|
200
|
+
}, {
|
|
201
|
+
strategy,
|
|
202
|
+
...options.routingConfig,
|
|
203
|
+
}, options.onChunk);
|
|
204
|
+
return {
|
|
205
|
+
rawText: result.content || '',
|
|
206
|
+
usedRouter: true,
|
|
207
|
+
modelName: result.modelName,
|
|
208
|
+
routingReason: result.metadata?.routingReason || 'Routing selected',
|
|
209
|
+
latencyMs: result.executionTime,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
// 如果启用回退机制,记录错误但不要在这里处理
|
|
214
|
+
// 让调用者决定是否回退到默认 AI
|
|
215
|
+
if (this.enableFallback) {
|
|
216
|
+
return {
|
|
217
|
+
rawText: '',
|
|
218
|
+
usedRouter: true,
|
|
219
|
+
modelName: 'router-failed',
|
|
220
|
+
latencyMs: Date.now() - startTime,
|
|
221
|
+
error: error.message || 'Router execution failed'
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
// 如果禁用回退,直接抛出错误
|
|
225
|
+
throw error;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* 智能任务类型推断
|
|
230
|
+
*/
|
|
231
|
+
inferTaskType(userInput, mode) {
|
|
232
|
+
return inferTaskType(userInput, mode);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* 智能路由策略推断
|
|
236
|
+
*/
|
|
237
|
+
inferRoutingStrategy(taskType, userInput) {
|
|
238
|
+
return inferRoutingStrategy(taskType, userInput);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* 从消息列表构建提示词
|
|
242
|
+
*/
|
|
243
|
+
buildPromptFromMessages(messages) {
|
|
244
|
+
const parts = [];
|
|
245
|
+
for (const message of messages) {
|
|
246
|
+
if (message.role === 'system') {
|
|
247
|
+
parts.push(`[SYSTEM]\n${message.content}\n`);
|
|
248
|
+
}
|
|
249
|
+
else if (message.role === 'user') {
|
|
250
|
+
parts.push(`[USER]\n${message.content}\n`);
|
|
251
|
+
}
|
|
252
|
+
else if (message.role === 'assistant') {
|
|
253
|
+
parts.push(`[ASSISTANT]\n${message.content}\n`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return parts.join('\n');
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* 更新配置
|
|
260
|
+
*/
|
|
261
|
+
updateConfig(options) {
|
|
262
|
+
if (options.enableRouting !== undefined) {
|
|
263
|
+
this.enableRouting = options.enableRouting;
|
|
264
|
+
}
|
|
265
|
+
if (options.enableFallback !== undefined) {
|
|
266
|
+
this.enableFallback = options.enableFallback;
|
|
267
|
+
}
|
|
268
|
+
if (options.defaultStrategy !== undefined) {
|
|
269
|
+
this.defaultStrategy = options.defaultStrategy;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* 获取当前配置
|
|
274
|
+
*/
|
|
275
|
+
getConfig() {
|
|
276
|
+
return {
|
|
277
|
+
enableRouting: this.enableRouting,
|
|
278
|
+
enableFallback: this.enableFallback,
|
|
279
|
+
defaultStrategy: this.defaultStrategy,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
exports.ModelRouterIntegration = ModelRouterIntegration;
|
|
284
|
+
/**
|
|
285
|
+
* 全局路由器集成实例
|
|
286
|
+
*/
|
|
287
|
+
let globalRouterIntegration = null;
|
|
288
|
+
/**
|
|
289
|
+
* 获取全局路由器集成实例(单例)
|
|
290
|
+
*/
|
|
291
|
+
function getRouterIntegration() {
|
|
292
|
+
if (!globalRouterIntegration) {
|
|
293
|
+
try {
|
|
294
|
+
// 从配置文件读取设置
|
|
295
|
+
const { getUserConfig } = require('../ai/client');
|
|
296
|
+
const config = getUserConfig();
|
|
297
|
+
globalRouterIntegration = new ModelRouterIntegration({
|
|
298
|
+
enableRouting: config.enableModelRouting !== false,
|
|
299
|
+
enableFallback: config.enableModelRouterFallback !== false,
|
|
300
|
+
defaultStrategy: config.defaultRoutingStrategy || modelRouter_1.RoutingStrategy.AUTO,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
// 如果读取配置失败,使用默认配置
|
|
305
|
+
console.warn('[ModelRouterIntegration] Failed to load user config, using defaults:', error);
|
|
306
|
+
globalRouterIntegration = new ModelRouterIntegration({
|
|
307
|
+
enableRouting: true,
|
|
308
|
+
enableFallback: true,
|
|
309
|
+
defaultStrategy: modelRouter_1.RoutingStrategy.AUTO,
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return globalRouterIntegration;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* 重置全局路由器集成实例
|
|
317
|
+
*/
|
|
318
|
+
function resetRouterIntegration() {
|
|
319
|
+
globalRouterIntegration = null;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* 快捷函数:执行 LLM 调用(带路由)
|
|
323
|
+
*
|
|
324
|
+
* 这个函数可以直接替换现有的 LLM 调用
|
|
325
|
+
*/
|
|
326
|
+
async function callLLMWithRouter(messages, mode = 'chat', options = {}) {
|
|
327
|
+
const integration = getRouterIntegration();
|
|
328
|
+
return integration.executeWithRouter(messages, mode, options);
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* 判断是否应该使用路由器
|
|
332
|
+
*
|
|
333
|
+
* 根据当前配置和任务特性决定是否使用 ModelRouter
|
|
334
|
+
*/
|
|
335
|
+
function shouldUseRouter(messages, mode = 'chat') {
|
|
336
|
+
const integration = getRouterIntegration();
|
|
337
|
+
const config = integration.getConfig();
|
|
338
|
+
if (!config.enableRouting) {
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
341
|
+
// 获取用户输入
|
|
342
|
+
const lastUserMessage = messages.filter(m => m.role === 'user').pop();
|
|
343
|
+
const userInput = lastUserMessage?.content || '';
|
|
344
|
+
// 推断任务类型
|
|
345
|
+
const taskType = inferTaskType(userInput, mode);
|
|
346
|
+
// 某些任务类型可能不适合路由(比如简单对话)
|
|
347
|
+
// 这里可以根据实际需求添加更多逻辑
|
|
348
|
+
const simpleTasks = [modelRouter_1.TaskType.CONVERSATION];
|
|
349
|
+
// 对于简单任务,如果用户没有明确要求使用路由,可以跳过
|
|
350
|
+
if (simpleTasks.includes(taskType) && userInput.length < 50) {
|
|
351
|
+
return false;
|
|
352
|
+
}
|
|
353
|
+
return true;
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=modelRouterIntegration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelRouterIntegration.js","sourceRoot":"","sources":["../../src/agent/modelRouterIntegration.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,42 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
41
41
|
const ora_1 = __importDefault(require("ora"));
|
|
42
42
|
const GitService_1 = require("../../core/git/GitService");
|
|
43
43
|
const modelRouter_1 = require("../../core/modelRouter");
|
|
44
|
+
/**
|
|
45
|
+
* 允许的动态导入路径白名单
|
|
46
|
+
* 用于防止恶意代码注入
|
|
47
|
+
*/
|
|
48
|
+
const ALLOWED_IMPORTS = [
|
|
49
|
+
'../../core/git/BranchAdvisor'
|
|
50
|
+
];
|
|
51
|
+
/**
|
|
52
|
+
* 验证分支名称的安全性
|
|
53
|
+
* 防止命令注入和路径遍历攻击
|
|
54
|
+
*/
|
|
55
|
+
function validateBranchName(branchName) {
|
|
56
|
+
// Git 分支名称规范:
|
|
57
|
+
// 1. 不能包含空格
|
|
58
|
+
// 2. 不能包含特殊字符 (除 -, _, ., /)
|
|
59
|
+
// 3. 不能以 .. 开头(防止路径遍历)
|
|
60
|
+
// 4. 不能以 . 开头或结尾(避免隐藏文件问题)
|
|
61
|
+
const branchNamePattern = /^[a-zA-Z0-9\-_\.]+(?:\/[a-zA-Z0-9\-_\.]+)*$/;
|
|
62
|
+
// 基本格式检查
|
|
63
|
+
if (!branchNamePattern.test(branchName)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
// 防止路径遍历
|
|
67
|
+
if (branchName.includes('..')) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
// 防止以 . 开头或结尾
|
|
71
|
+
if (branchName.startsWith('.') || branchName.endsWith('.')) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
// 限制长度
|
|
75
|
+
if (branchName.length > 255) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
44
80
|
function registerBranchCommand(gitCmd) {
|
|
45
81
|
// git branch - 分支管理
|
|
46
82
|
const branchCmd = gitCmd
|
|
@@ -101,6 +137,13 @@ function registerBranchCommand(gitCmd) {
|
|
|
101
137
|
.description('安全切换分支')
|
|
102
138
|
.action(async (branchName) => {
|
|
103
139
|
try {
|
|
140
|
+
// 安全检查:验证分支名称
|
|
141
|
+
if (!validateBranchName(branchName)) {
|
|
142
|
+
console.log(chalk_1.default.red(`❌ 无效的分支名称: "${branchName}"`));
|
|
143
|
+
console.log(chalk_1.default.gray('分支名称只能包含字母、数字、连字符(-)、下划线(_)和点(.)'));
|
|
144
|
+
console.log(chalk_1.default.gray('示例: feature/new-feature, hotfix/bug-fix-123'));
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
104
147
|
const gitService = new GitService_1.GitService();
|
|
105
148
|
if (!(await gitService.isGitRepository())) {
|
|
106
149
|
console.log(chalk_1.default.red('当前目录不是 Git 仓库'));
|
|
@@ -160,7 +203,12 @@ function registerBranchCommand(gitCmd) {
|
|
|
160
203
|
console.log(chalk_1.default.yellow('💡 请先运行 "yuangs config" 配置 AI 模型'));
|
|
161
204
|
return;
|
|
162
205
|
}
|
|
163
|
-
|
|
206
|
+
// 安全检查:动态导入路径白名单验证
|
|
207
|
+
const importPath = '../../core/git/BranchAdvisor';
|
|
208
|
+
if (!ALLOWED_IMPORTS.includes(importPath)) {
|
|
209
|
+
throw new Error('Security: Import path not in whitelist');
|
|
210
|
+
}
|
|
211
|
+
const { BranchAdvisor } = await Promise.resolve(`${importPath}`).then(s => __importStar(require(s)));
|
|
164
212
|
const advisor = new BranchAdvisor(gitService, router);
|
|
165
213
|
const suggestion = await advisor.suggest();
|
|
166
214
|
spinner.stop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../../src/commands/git/branch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../../src/commands/git/branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,17 @@ exports.attenuate = attenuate;
|
|
|
11
11
|
exports.revoke = revoke;
|
|
12
12
|
exports.checkRevoked = checkRevoked;
|
|
13
13
|
const crypto_1 = __importDefault(require("crypto"));
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* 安全警告:必须通过环境变量 CAP_SECRET 提供密钥
|
|
16
|
+
* 如果未提供,将抛出错误而不是使用默认值
|
|
17
|
+
*/
|
|
18
|
+
const SECRET = (() => {
|
|
19
|
+
const secret = process.env.CAP_SECRET;
|
|
20
|
+
if (!secret || secret.length < 32) {
|
|
21
|
+
throw new Error("Security: CAP_SECRET environment variable is required and must be at least 32 characters");
|
|
22
|
+
}
|
|
23
|
+
return secret;
|
|
24
|
+
})();
|
|
15
25
|
function sign(data) {
|
|
16
26
|
return crypto_1.default
|
|
17
27
|
.createHmac("sha256", SECRET)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/legacy/governance/capability/token.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/legacy/governance/capability/token.ts"],"names":[],"mappings":"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"}
|