yuangs 3.16.0 → 3.19.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.
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rankByRelevance = rankByRelevance;
4
+ exports.calculateTotalTokens = calculateTotalTokens;
5
+ exports.filterContextByRelevance = filterContextByRelevance;
6
+ const DEFAULT_CONFIG = {
7
+ keywordsWeight: 0.4,
8
+ pathWeight: 0.3,
9
+ extensionWeight: 0.2,
10
+ recencyWeight: 0.1
11
+ };
12
+ function extractKeywords(query) {
13
+ const cleaned = query
14
+ .toLowerCase()
15
+ .replace(/[^\w\s\u4e00-\u9fa5]/g, '')
16
+ .trim();
17
+ const words = cleaned.split(/\s+/).filter(w => w.length > 1);
18
+ const keywords = new Set();
19
+ for (const word of words) {
20
+ if (word.length > 2) {
21
+ keywords.add(word);
22
+ }
23
+ if (word.length > 4) {
24
+ for (let i = 3; i < word.length; i++) {
25
+ keywords.add(word.substring(0, i));
26
+ }
27
+ }
28
+ }
29
+ return Array.from(keywords);
30
+ }
31
+ function calculateKeywordMatchScore(content, summary, keywords) {
32
+ const textToMatch = (summary || content).toLowerCase();
33
+ let matches = 0;
34
+ let totalMatches = 0;
35
+ for (const keyword of keywords) {
36
+ const regex = new RegExp(keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gi');
37
+ const keywordMatches = textToMatch.match(regex);
38
+ if (keywordMatches) {
39
+ matches += keywordMatches.length;
40
+ }
41
+ totalMatches++;
42
+ }
43
+ return totalMatches > 0 ? matches / (totalMatches * Math.max(keywords.length, 1)) : 0;
44
+ }
45
+ function calculatePathScore(path, keywords) {
46
+ const pathLower = path.toLowerCase();
47
+ let score = 0;
48
+ for (const keyword of keywords) {
49
+ if (pathLower.includes(keyword)) {
50
+ score += 1;
51
+ const parts = path.split(/[/\\]/);
52
+ const fileName = parts[parts.length - 1].toLowerCase();
53
+ if (fileName.includes(keyword)) {
54
+ score += 1;
55
+ }
56
+ }
57
+ }
58
+ const maxScore = Math.max(keywords.length, 1);
59
+ return Math.min(score / maxScore, 1);
60
+ }
61
+ function calculateExtensionScore(path, query) {
62
+ const pathLower = path.toLowerCase();
63
+ const queryLower = query.toLowerCase();
64
+ const ext = pathLower.split('.').pop() || '';
65
+ const queryExts = ['.ts', '.js', '.py', '.go', '.rs', '.java', '.json', '.md'];
66
+ if (!ext)
67
+ return 0;
68
+ if (queryLower.includes(ext)) {
69
+ return 1;
70
+ }
71
+ if (queryExts.some(e => queryLower.includes(e)) && queryExts.includes(`.${ext}`)) {
72
+ return 0.8;
73
+ }
74
+ return 0;
75
+ }
76
+ function calculateRecencyScore(item) {
77
+ return 0.5;
78
+ }
79
+ function rankByRelevance(items, query, config) {
80
+ const finalConfig = { ...DEFAULT_CONFIG, ...config };
81
+ const keywords = extractKeywords(query);
82
+ return items
83
+ .map(item => {
84
+ const keywordScore = calculateKeywordMatchScore(item.content || '', item.summary || '', keywords);
85
+ const pathScore = calculatePathScore(item.path, keywords);
86
+ const extensionScore = calculateExtensionScore(item.path, query);
87
+ const recencyScore = calculateRecencyScore(item);
88
+ const relevance = (keywordScore * finalConfig.keywordsWeight) +
89
+ (pathScore * finalConfig.pathWeight) +
90
+ (extensionScore * finalConfig.extensionWeight) +
91
+ (recencyScore * finalConfig.recencyWeight);
92
+ const matchReasons = [];
93
+ if (keywordScore > 0.5)
94
+ matchReasons.push('Keywords match');
95
+ if (pathScore > 0.5)
96
+ matchReasons.push('Path match');
97
+ if (extensionScore > 0.5)
98
+ matchReasons.push('Relevant extension');
99
+ return {
100
+ ...item,
101
+ relevance: Math.min(relevance, 1),
102
+ matchReasons
103
+ };
104
+ })
105
+ .filter(item => item.relevance > 0.1)
106
+ .sort((a, b) => b.relevance - a.relevance);
107
+ }
108
+ function calculateTotalTokens(items) {
109
+ let total = 0;
110
+ for (const item of items) {
111
+ const text = item.content || item.summary || '';
112
+ total += text.length;
113
+ }
114
+ return Math.ceil(total / 4);
115
+ }
116
+ function filterContextByRelevance(items, query, minRelevance = 0.3, config) {
117
+ const ranked = rankByRelevance(items, query, config);
118
+ return ranked.filter(item => item.relevance >= minRelevance);
119
+ }
120
+ //# sourceMappingURL=relevance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relevance.js","sourceRoot":"","sources":["../../src/agent/relevance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * 风险告知生成器
3
+ * 为高风险操作生成详细的风险告知书,增强Human-in-the-loop安全性
4
+ */
5
+ export interface RiskLevel {
6
+ level: 'low' | 'medium' | 'high';
7
+ score: number;
8
+ }
9
+ export interface RiskFactors {
10
+ commandType: string;
11
+ command?: string;
12
+ filePath?: string;
13
+ fileCount?: number;
14
+ isDestructive: boolean;
15
+ modifiesSystem: boolean;
16
+ requiresNetwork: boolean;
17
+ modifiesGit: boolean;
18
+ }
19
+ export interface RiskDisclosure {
20
+ riskLevel: RiskLevel;
21
+ factors: RiskFactors;
22
+ description: string;
23
+ potentialIssues: string[];
24
+ recommendedActions: string[];
25
+ requireConfirmation: boolean;
26
+ checkpoint?: string;
27
+ }
28
+ /**
29
+ * 分析操作风险等级
30
+ */
31
+ export declare function analyzeRiskLevel(factors: RiskFactors): RiskLevel;
32
+ /**
33
+ * 生成风险告知书
34
+ */
35
+ export declare function generateRiskDisclosure(factors: RiskFactors): RiskDisclosure;
36
+ /**
37
+ * 格式化风险告知书为CLI友好的格式
38
+ */
39
+ export declare function formatRiskDisclosureCLI(disclosure: RiskDisclosure): string;
40
+ /**
41
+ * 从解析的thought生成风险因素
42
+ */
43
+ export declare function extractRiskFactorsFromThought(thought: string): RiskFactors;
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+ /**
3
+ * 风险告知生成器
4
+ * 为高风险操作生成详细的风险告知书,增强Human-in-the-loop安全性
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.analyzeRiskLevel = analyzeRiskLevel;
8
+ exports.generateRiskDisclosure = generateRiskDisclosure;
9
+ exports.formatRiskDisclosureCLI = formatRiskDisclosureCLI;
10
+ exports.extractRiskFactorsFromThought = extractRiskFactorsFromThought;
11
+ /**
12
+ * 分析操作风险等级
13
+ */
14
+ function analyzeRiskLevel(factors) {
15
+ let score = 0;
16
+ // 命令类型风险
17
+ const commandTypeScores = {
18
+ 'shell_cmd': 50,
19
+ 'file_write': 40,
20
+ 'file_delete': 70,
21
+ 'file_read': 10,
22
+ 'git_operation': 40,
23
+ 'npm_install': 30,
24
+ 'docker_operation': 50,
25
+ 'system_config': 80,
26
+ };
27
+ score += commandTypeScores[factors.commandType] || 30;
28
+ // 破坏性操作
29
+ if (factors.isDestructive) {
30
+ score += 30;
31
+ }
32
+ // 系统修改
33
+ if (factors.modifiesSystem) {
34
+ score += 20;
35
+ }
36
+ // 网络操作
37
+ if (factors.requiresNetwork) {
38
+ score += 15;
39
+ }
40
+ // Git操作
41
+ if (factors.modifiesGit) {
42
+ score += 10;
43
+ }
44
+ // 特定命令风险
45
+ if (factors.command) {
46
+ const highRiskPatterns = [
47
+ /rm\s+-rf/,
48
+ /rm\s+-r/,
49
+ /del\s+\//,
50
+ /format/,
51
+ /mkfs/,
52
+ /dd\s+if=/,
53
+ /chmod\s+777/,
54
+ /chmod\s+-R/,
55
+ /chown\s+-R/,
56
+ /wget.*\|/,
57
+ /curl.*\|/,
58
+ /:>.*\//,
59
+ /eval/,
60
+ /exec/,
61
+ ];
62
+ for (const pattern of highRiskPatterns) {
63
+ if (pattern.test(factors.command)) {
64
+ score += 30;
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ // 文件数量风险
70
+ if (factors.fileCount && factors.fileCount > 10) {
71
+ score += 20;
72
+ }
73
+ // 限制分数范围
74
+ score = Math.min(100, Math.max(0, score));
75
+ // 确定风险等级
76
+ let level;
77
+ if (score >= 70) {
78
+ level = 'high';
79
+ }
80
+ else if (score >= 40) {
81
+ level = 'medium';
82
+ }
83
+ else {
84
+ level = 'low';
85
+ }
86
+ return { level, score };
87
+ }
88
+ /**
89
+ * 生成风险描述
90
+ */
91
+ function generateRiskDescription(factors, riskLevel) {
92
+ let description = '';
93
+ switch (factors.commandType) {
94
+ case 'shell_cmd':
95
+ description = `即将执行命令行操作。`;
96
+ break;
97
+ case 'file_write':
98
+ description = `即将写入${factors.fileCount || 1}个文件。`;
99
+ break;
100
+ case 'file_delete':
101
+ description = `即将删除${factors.fileCount || 1}个文件。`;
102
+ break;
103
+ case 'git_operation':
104
+ description = `即将执行Git版本控制操作。`;
105
+ break;
106
+ case 'npm_install':
107
+ description = `即将安装npm依赖包。`;
108
+ break;
109
+ case 'docker_operation':
110
+ description = `即将执行Docker容器操作。`;
111
+ break;
112
+ case 'system_config':
113
+ description = `即将修改系统配置。`;
114
+ break;
115
+ default:
116
+ description = `即将执行潜在风险操作。`;
117
+ }
118
+ // 始终添加风险等级描述
119
+ if (riskLevel.level === 'high') {
120
+ description += ` 此操作风险等级为【高】,可能导致数据丢失或系统不可用。`;
121
+ }
122
+ else if (riskLevel.level === 'medium') {
123
+ description += ` 此操作风险等级为【中】,请仔细检查操作内容。`;
124
+ }
125
+ else {
126
+ description += ` 此操作风险等级为【低】,风险相对可控。`;
127
+ }
128
+ return description;
129
+ }
130
+ /**
131
+ * 生成潜在问题列表
132
+ */
133
+ function generatePotentialIssues(factors, riskLevel) {
134
+ const issues = [];
135
+ if (factors.isDestructive) {
136
+ issues.push('数据可能无法恢复');
137
+ issues.push('重要文件可能被永久删除');
138
+ }
139
+ if (factors.modifiesSystem) {
140
+ issues.push('系统配置可能被修改');
141
+ issues.push('可能影响其他应用程序');
142
+ }
143
+ if (factors.requiresNetwork) {
144
+ issues.push('需要网络连接');
145
+ issues.push('可能下载不安全的软件');
146
+ issues.push('可能泄露敏感信息');
147
+ }
148
+ if (factors.modifiesGit) {
149
+ issues.push('Git历史可能被修改');
150
+ issues.push('可能导致协作冲突');
151
+ }
152
+ if (factors.command) {
153
+ if (factors.command.includes('rm') || factors.command.includes('del')) {
154
+ issues.push('文件删除操作不可逆');
155
+ }
156
+ if (factors.command.includes('sudo')) {
157
+ issues.push('需要管理员权限');
158
+ issues.push('可能影响系统稳定性');
159
+ }
160
+ if (factors.command.includes('chmod')) {
161
+ issues.push('文件权限可能被修改');
162
+ }
163
+ }
164
+ // 高风险特殊问题
165
+ if (riskLevel.level === 'high') {
166
+ issues.push('可能导致系统崩溃');
167
+ issues.push('可能需要重新安装系统');
168
+ }
169
+ return issues.length > 0 ? issues : ['可能导致不可预期的副作用'];
170
+ }
171
+ /**
172
+ * 生成推荐行动
173
+ */
174
+ function generateRecommendedActions(factors, riskLevel) {
175
+ const actions = [];
176
+ if (factors.isDestructive) {
177
+ actions.push('备份重要数据');
178
+ actions.push('确认删除列表');
179
+ actions.push('使用--dry-run参数测试');
180
+ }
181
+ if (factors.modifiesSystem) {
182
+ actions.push('记录当前配置');
183
+ actions.push('在测试环境先尝试');
184
+ actions.push('准备回滚方案');
185
+ }
186
+ if (factors.requiresNetwork) {
187
+ actions.push('验证软件来源');
188
+ actions.push('检查数字签名');
189
+ actions.push('使用网络隔离环境');
190
+ }
191
+ if (factors.modifiesGit) {
192
+ actions.push('创建备份分支');
193
+ actions.push('与团队成员沟通');
194
+ actions.push('检查未提交的更改');
195
+ }
196
+ if (factors.command) {
197
+ if (factors.command.includes('rm') || factors.command.includes('del')) {
198
+ actions.push('使用通配符前先验证');
199
+ actions.push('确认当前工作目录');
200
+ }
201
+ if (factors.command.includes('sudo')) {
202
+ actions.push('确认命令来源');
203
+ actions.push('检查依赖软件');
204
+ }
205
+ }
206
+ // 通用建议
207
+ actions.push('仔细审查命令参数');
208
+ actions.push('确认文件路径正确');
209
+ actions.push('考虑创建系统快照');
210
+ if (riskLevel.level === 'high') {
211
+ actions.unshift('⚠️ 强烈建议先在测试环境验证');
212
+ }
213
+ return actions;
214
+ }
215
+ /**
216
+ * 生成检查点
217
+ */
218
+ function generateCheckpoint(factors, riskLevel) {
219
+ const timestamp = new Date().toISOString();
220
+ const actions = [];
221
+ if (factors.isDestructive) {
222
+ actions.push('已确认重要数据已备份');
223
+ }
224
+ if (factors.modifiesSystem) {
225
+ actions.push('已记录当前系统配置');
226
+ }
227
+ if (factors.modifiesGit) {
228
+ actions.push('已创建备份分支');
229
+ }
230
+ return `Checkpoint [${timestamp}]
231
+ - ${actions.join('\n- ') || '已确认操作风险'}`;
232
+ }
233
+ /**
234
+ * 生成风险告知书
235
+ */
236
+ function generateRiskDisclosure(factors) {
237
+ const riskLevel = analyzeRiskLevel(factors);
238
+ const description = generateRiskDescription(factors, riskLevel);
239
+ const potentialIssues = generatePotentialIssues(factors, riskLevel);
240
+ const recommendedActions = generateRecommendedActions(factors, riskLevel);
241
+ const requireConfirmation = riskLevel.level === 'high';
242
+ const checkpoint = riskLevel.level === 'high' ? generateCheckpoint(factors, riskLevel) : undefined;
243
+ return {
244
+ riskLevel,
245
+ factors,
246
+ description,
247
+ potentialIssues,
248
+ recommendedActions,
249
+ requireConfirmation,
250
+ checkpoint,
251
+ };
252
+ }
253
+ /**
254
+ * 格式化风险告知书为CLI友好的格式
255
+ */
256
+ function formatRiskDisclosureCLI(disclosure) {
257
+ const { riskLevel, description, potentialIssues, recommendedActions, checkpoint } = disclosure;
258
+ // 风险等级图标
259
+ const riskIcons = {
260
+ low: '🟢',
261
+ medium: '🟡',
262
+ high: '🔴',
263
+ };
264
+ const riskLabels = {
265
+ low: '低风险',
266
+ medium: '中风险',
267
+ high: '高风险',
268
+ };
269
+ let output = '';
270
+ output += `\n${'='.repeat(60)}\n`;
271
+ output += `${riskIcons[riskLevel.level]} 风险告知书 [风险等级: ${riskLabels[riskLevel.level]} (${riskLevel.score}/100)]\n`;
272
+ output += `${'='.repeat(60)}\n\n`;
273
+ output += `📋 操作描述\n${description}\n\n`;
274
+ if (potentialIssues.length > 0) {
275
+ output += `⚠️ 潜在问题\n`;
276
+ potentialIssues.forEach(issue => {
277
+ output += ` • ${issue}\n`;
278
+ });
279
+ output += `\n`;
280
+ }
281
+ if (recommendedActions.length > 0) {
282
+ output += `💡 推荐行动\n`;
283
+ recommendedActions.forEach(action => {
284
+ output += ` ${action}\n`;
285
+ });
286
+ output += `\n`;
287
+ }
288
+ if (checkpoint) {
289
+ output += `📍 操作前检查点\n${checkpoint}\n\n`;
290
+ }
291
+ if (riskLevel.level === 'high') {
292
+ output += `🔐 需要确认\n`;
293
+ output += ` 此操作风险较高,请确认:\n`;
294
+ output += ` [y] 继续执行\n`;
295
+ output += ` [n] 取消操作\n`;
296
+ output += ` [v] 查看详细信息\n\n`;
297
+ }
298
+ output += `${'='.repeat(60)}\n`;
299
+ return output;
300
+ }
301
+ /**
302
+ * 从解析的thought生成风险因素
303
+ */
304
+ function extractRiskFactorsFromThought(thought) {
305
+ // 这里可以解析thought中的action_type、command等信息
306
+ // 暂时返回默认值,实际使用时需要根据具体的thought格式调整
307
+ return {
308
+ commandType: 'shell_cmd',
309
+ isDestructive: false,
310
+ modifiesSystem: false,
311
+ requiresNetwork: false,
312
+ modifiesGit: false,
313
+ };
314
+ }
315
+ //# sourceMappingURL=riskDisclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"riskDisclosure.js","sourceRoot":"","sources":["../../src/agent/riskDisclosure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ContextManager } from './contextManager';
2
+ import { RankedContextItem } from './relevance';
3
+ export interface EnhancedContextOptions {
4
+ query: string;
5
+ minRelevance?: number;
6
+ maxTokens?: number;
7
+ enableSmartSummary?: boolean;
8
+ }
9
+ export declare class SmartContextManager extends ContextManager {
10
+ private cachedRankedItems;
11
+ private cachedQuery;
12
+ getEnhancedContext(options: EnhancedContextOptions): Promise<{
13
+ rankedItems: RankedContextItem[];
14
+ summary: string;
15
+ filteredCount: number;
16
+ totalCount: number;
17
+ }>;
18
+ private extractPathFromMessage;
19
+ private buildSmartSummary;
20
+ getCachedRankedItems(): RankedContextItem[];
21
+ getCachedQuery(): string;
22
+ clearCache(): void;
23
+ }
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SmartContextManager = void 0;
4
+ const contextManager_1 = require("./contextManager");
5
+ const relevance_1 = require("./relevance");
6
+ class SmartContextManager extends contextManager_1.ContextManager {
7
+ cachedRankedItems = [];
8
+ cachedQuery = '';
9
+ async getEnhancedContext(options) {
10
+ const { query, minRelevance = 0.3, maxTokens = 10000, enableSmartSummary = true } = options;
11
+ const messages = this.getMessages();
12
+ const contextItems = messages
13
+ .filter(m => m.role === 'user')
14
+ .map(m => ({
15
+ path: this.extractPathFromMessage(m.content) || '',
16
+ content: m.content
17
+ }))
18
+ .filter(item => item.path && item.path.length > 0);
19
+ const rankedItems = await (0, relevance_1.rankByRelevance)(contextItems, query);
20
+ this.cachedRankedItems = rankedItems;
21
+ this.cachedQuery = query;
22
+ const filteredItems = (0, relevance_1.filterContextByRelevance)(contextItems, query, minRelevance);
23
+ let finalItems = filteredItems;
24
+ if (maxTokens > 0) {
25
+ const totalTokens = (0, relevance_1.calculateTotalTokens)(finalItems);
26
+ if (totalTokens > maxTokens) {
27
+ const ratio = maxTokens / totalTokens;
28
+ finalItems = finalItems.slice(0, Math.ceil(finalItems.length * ratio));
29
+ }
30
+ }
31
+ const summary = enableSmartSummary ? this.buildSmartSummary(query, finalItems, contextItems) : '';
32
+ return {
33
+ rankedItems,
34
+ summary,
35
+ filteredCount: finalItems.length,
36
+ totalCount: contextItems.length
37
+ };
38
+ }
39
+ extractPathFromMessage(content) {
40
+ const pathMatch = content.match(/@([^\s]+)/);
41
+ return pathMatch ? pathMatch[1] : undefined;
42
+ }
43
+ buildSmartSummary(query, items, allItems) {
44
+ if (items.length === 0) {
45
+ return '';
46
+ }
47
+ const highRelevance = items.filter(i => i.relevance > 0.8);
48
+ const mediumRelevance = items.filter(i => i.relevance > 0.5 && i.relevance <= 0.8);
49
+ let summary = '【上下文概览】\n';
50
+ summary += `- 总文件: ${allItems.length}\n`;
51
+ summary += `- 已筛选: ${items.length}\n`;
52
+ summary += `- 高度相关 (>0.8): ${highRelevance.length}\n`;
53
+ summary += `- 中度相关 (0.5-0.8): ${mediumRelevance.length}\n\n`;
54
+ if (highRelevance.length > 0) {
55
+ summary += '【高度相关文件】\n';
56
+ highRelevance.slice(0, 5).forEach(item => {
57
+ summary += ` - ${item.path} (相关度: ${(item.relevance * 100).toFixed(0)}%)\n`;
58
+ });
59
+ if (highRelevance.length > 5) {
60
+ summary += ` ... 还有 ${highRelevance.length - 5} 个\n`;
61
+ }
62
+ }
63
+ if (mediumRelevance.length > 0 && mediumRelevance.length <= 3) {
64
+ summary += '\n【中度相关文件】\n';
65
+ mediumRelevance.forEach(item => {
66
+ summary += ` - ${item.path} (相关度: ${(item.relevance * 100).toFixed(0)}%)\n`;
67
+ });
68
+ }
69
+ return summary;
70
+ }
71
+ getCachedRankedItems() {
72
+ return this.cachedRankedItems;
73
+ }
74
+ getCachedQuery() {
75
+ return this.cachedQuery;
76
+ }
77
+ clearCache() {
78
+ this.cachedRankedItems = [];
79
+ this.cachedQuery = '';
80
+ }
81
+ }
82
+ exports.SmartContextManager = SmartContextManager;
83
+ //# sourceMappingURL=smartContextManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smartContextManager.js","sourceRoot":"","sources":["../../src/agent/smartContextManager.ts"],"names":[],"mappings":"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"}
@@ -56,3 +56,18 @@ export type AgentAction = {
56
56
  command: string;
57
57
  risk: 'low' | 'medium' | 'high';
58
58
  };
59
+ export interface TaskStep {
60
+ id: string;
61
+ description: string;
62
+ type: 'shell_cmd' | 'tool_call' | 'code_diff' | 'answer';
63
+ command?: string;
64
+ tool_name?: string;
65
+ parameters?: Record<string, any>;
66
+ risk_level: 'low' | 'medium' | 'high';
67
+ dependencies: string[];
68
+ }
69
+ export interface TaskPlan {
70
+ plan: string;
71
+ steps: TaskStep[];
72
+ estimated_time: string;
73
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yuangs",
3
- "version": "3.16.0",
3
+ "version": "3.19.0",
4
4
  "description": "苑广山的个人应用集合 CLI(彩色版)",
5
5
  "author": "苑广山",
6
6
  "license": "ISC",
@@ -45,7 +45,8 @@
45
45
  "marked-terminal": "^7.3.0",
46
46
  "ora": "^5.4.1",
47
47
  "yuangs": "^2.29.0",
48
- "zod": "^4.3.5"
48
+ "zod": "^4.3.5",
49
+ "zod-to-json-schema": "^3.25.1"
49
50
  },
50
51
  "devDependencies": {
51
52
  "@assemblyscript/loader": "^0.27.37",