yuangs 6.2.3 → 6.4.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.
Files changed (166) hide show
  1. package/dist/agent/AgentRuntime.d.ts +7 -23
  2. package/dist/agent/AgentRuntime.js +35 -542
  3. package/dist/agent/AgentRuntime.js.map +1 -1
  4. package/dist/agent/DualAgentRuntime.js +16 -16
  5. package/dist/agent/DualAgentRuntime.js.map +1 -1
  6. package/dist/agent/ExecutionCompleter.d.ts +31 -0
  7. package/dist/agent/ExecutionCompleter.js +83 -0
  8. package/dist/agent/ExecutionCompleter.js.map +1 -0
  9. package/dist/agent/ExecutionHandler.d.ts +34 -0
  10. package/dist/agent/ExecutionHandler.js +227 -0
  11. package/dist/agent/ExecutionHandler.js.map +1 -0
  12. package/dist/agent/ExecutionLearning.d.ts +8 -0
  13. package/dist/agent/ExecutionLearning.js +31 -0
  14. package/dist/agent/ExecutionLearning.js.map +1 -0
  15. package/dist/agent/ExecutionRecovery.d.ts +26 -0
  16. package/dist/agent/ExecutionRecovery.js +99 -0
  17. package/dist/agent/ExecutionRecovery.js.map +1 -0
  18. package/dist/agent/ExecutionStabilizer.d.ts +20 -0
  19. package/dist/agent/ExecutionStabilizer.js +101 -0
  20. package/dist/agent/ExecutionStabilizer.js.map +1 -0
  21. package/dist/agent/ExecutionTypes.d.ts +13 -0
  22. package/dist/agent/ExecutionTypes.js +9 -0
  23. package/dist/agent/ExecutionTypes.js.map +1 -0
  24. package/dist/agent/LLMCaller.d.ts +19 -0
  25. package/dist/agent/LLMCaller.js +103 -0
  26. package/dist/agent/LLMCaller.js.map +1 -0
  27. package/dist/agent/PreFlightChecker.d.ts +51 -0
  28. package/dist/agent/PreFlightChecker.js +148 -0
  29. package/dist/agent/PreFlightChecker.js.map +1 -0
  30. package/dist/agent/commandSemantics.js +12 -0
  31. package/dist/agent/commandSemantics.js.map +1 -1
  32. package/dist/agent/errorTracker.d.ts +10 -0
  33. package/dist/agent/errorTracker.js +36 -0
  34. package/dist/agent/errorTracker.js.map +1 -1
  35. package/dist/agent/executor.d.ts +12 -90
  36. package/dist/agent/executor.js +59 -881
  37. package/dist/agent/executor.js.map +1 -1
  38. package/dist/agent/governance/core.js.map +1 -1
  39. package/dist/agent/governance/riskScoring.js +6 -3
  40. package/dist/agent/governance/riskScoring.js.map +1 -1
  41. package/dist/agent/governance.js +4 -36
  42. package/dist/agent/governance.js.map +1 -1
  43. package/dist/agent/llm.js +11 -17
  44. package/dist/agent/llm.js.map +1 -1
  45. package/dist/agent/policy/engine.d.ts +2 -5
  46. package/dist/agent/policy/engine.js.map +1 -1
  47. package/dist/agent/policy/index.d.ts +1 -0
  48. package/dist/agent/policy/index.js +1 -0
  49. package/dist/agent/policy/index.js.map +1 -1
  50. package/dist/agent/policy/policies/WorkdirWrite.d.ts +11 -0
  51. package/dist/agent/policy/policies/WorkdirWrite.js +65 -0
  52. package/dist/agent/policy/policies/WorkdirWrite.js.map +1 -0
  53. package/dist/agent/policy/policies/noDangerousShell.js +1 -1
  54. package/dist/agent/policy/policies/noDangerousShell.js.map +1 -1
  55. package/dist/agent/policy/types.d.ts +6 -4
  56. package/dist/agent/skills.d.ts +12 -17
  57. package/dist/agent/skills.js +45 -52
  58. package/dist/agent/skills.js.map +1 -1
  59. package/dist/agent/state.d.ts +33 -3
  60. package/dist/agent/state.js +14 -0
  61. package/dist/agent/state.js.map +1 -1
  62. package/dist/agent/tools/AnalyzeDependencies.d.ts +9 -0
  63. package/dist/agent/tools/AnalyzeDependencies.js +91 -0
  64. package/dist/agent/tools/AnalyzeDependencies.js.map +1 -0
  65. package/dist/agent/tools/AppendFile.d.ts +8 -0
  66. package/dist/agent/tools/AppendFile.js +36 -0
  67. package/dist/agent/tools/AppendFile.js.map +1 -0
  68. package/dist/agent/tools/CodeDiff.d.ts +8 -0
  69. package/dist/agent/tools/CodeDiff.js +36 -0
  70. package/dist/agent/tools/CodeDiff.js.map +1 -0
  71. package/dist/agent/tools/ContinueReading.d.ts +8 -0
  72. package/dist/agent/tools/ContinueReading.js +59 -0
  73. package/dist/agent/tools/ContinueReading.js.map +1 -0
  74. package/dist/agent/tools/FileInfo.d.ts +8 -0
  75. package/dist/agent/tools/FileInfo.js +43 -0
  76. package/dist/agent/tools/FileInfo.js.map +1 -0
  77. package/dist/agent/tools/GitDiff.d.ts +8 -0
  78. package/dist/agent/tools/GitDiff.js +40 -0
  79. package/dist/agent/tools/GitDiff.js.map +1 -0
  80. package/dist/agent/tools/GitLog.d.ts +8 -0
  81. package/dist/agent/tools/GitLog.js +36 -0
  82. package/dist/agent/tools/GitLog.js.map +1 -0
  83. package/dist/agent/tools/GitStatus.d.ts +8 -0
  84. package/dist/agent/tools/GitStatus.js +38 -0
  85. package/dist/agent/tools/GitStatus.js.map +1 -0
  86. package/dist/agent/tools/ListDirectoryTree.d.ts +9 -0
  87. package/dist/agent/tools/ListDirectoryTree.js +63 -0
  88. package/dist/agent/tools/ListDirectoryTree.js.map +1 -0
  89. package/dist/agent/tools/ListFiles.d.ts +9 -0
  90. package/dist/agent/tools/ListFiles.js +53 -0
  91. package/dist/agent/tools/ListFiles.js.map +1 -0
  92. package/dist/agent/tools/ReadFile.d.ts +8 -0
  93. package/dist/agent/tools/ReadFile.js +33 -0
  94. package/dist/agent/tools/ReadFile.js.map +1 -0
  95. package/dist/agent/tools/ReadFileLines.d.ts +8 -0
  96. package/dist/agent/tools/ReadFileLines.js +45 -0
  97. package/dist/agent/tools/ReadFileLines.js.map +1 -0
  98. package/dist/agent/tools/ReadFileLinesFromEnd.d.ts +8 -0
  99. package/dist/agent/tools/ReadFileLinesFromEnd.js +48 -0
  100. package/dist/agent/tools/ReadFileLinesFromEnd.js.map +1 -0
  101. package/dist/agent/tools/SearchInFiles.d.ts +8 -0
  102. package/dist/agent/tools/SearchInFiles.js +70 -0
  103. package/dist/agent/tools/SearchInFiles.js.map +1 -0
  104. package/dist/agent/tools/SearchSymbol.d.ts +8 -0
  105. package/dist/agent/tools/SearchSymbol.js +62 -0
  106. package/dist/agent/tools/SearchSymbol.js.map +1 -0
  107. package/dist/agent/tools/ShellCmd.d.ts +8 -0
  108. package/dist/agent/tools/ShellCmd.js +40 -0
  109. package/dist/agent/tools/ShellCmd.js.map +1 -0
  110. package/dist/agent/tools/WriteFile.d.ts +8 -0
  111. package/dist/agent/tools/WriteFile.js +35 -0
  112. package/dist/agent/tools/WriteFile.js.map +1 -0
  113. package/dist/agent/tools/index.d.ts +20 -0
  114. package/dist/agent/tools/index.js +50 -0
  115. package/dist/agent/tools/index.js.map +1 -0
  116. package/dist/agent/tools/pathSafety.d.ts +9 -0
  117. package/dist/agent/tools/pathSafety.js +85 -0
  118. package/dist/agent/tools/pathSafety.js.map +1 -0
  119. package/dist/agent/tools/registry.d.ts +40 -0
  120. package/dist/agent/tools/registry.js +77 -0
  121. package/dist/agent/tools/registry.js.map +1 -0
  122. package/dist/agent/tools/types.d.ts +21 -0
  123. package/dist/agent/tools/types.js +3 -0
  124. package/dist/agent/tools/types.js.map +1 -0
  125. package/dist/agent/tools/utils.d.ts +43 -0
  126. package/dist/agent/tools/utils.js +158 -0
  127. package/dist/agent/tools/utils.js.map +1 -0
  128. package/dist/agent/types.d.ts +5 -3
  129. package/dist/ai/client.d.ts +2 -2
  130. package/dist/ai/client.js +16 -23
  131. package/dist/ai/client.js.map +1 -1
  132. package/dist/audit/timeline.js +7 -5
  133. package/dist/audit/timeline.js.map +1 -1
  134. package/dist/cli.js +12 -6
  135. package/dist/cli.js.map +1 -1
  136. package/dist/commands/handleAIChat.js +1 -1
  137. package/dist/commands/handleAIChat.js.map +1 -1
  138. package/dist/commands/handleAICommand.js +3 -3
  139. package/dist/commands/handleAICommand.js.map +1 -1
  140. package/dist/commands/skillsCommands.js +4 -42
  141. package/dist/commands/skillsCommands.js.map +1 -1
  142. package/dist/core/ConfigService.d.ts +87 -0
  143. package/dist/core/ConfigService.js +259 -0
  144. package/dist/core/ConfigService.js.map +1 -0
  145. package/dist/core/executionRecord.d.ts +1 -1
  146. package/dist/core/explain.js +2 -2
  147. package/dist/core/explain.js.map +1 -1
  148. package/dist/core/git/BackupManager.d.ts +30 -0
  149. package/dist/core/git/BackupManager.js +153 -0
  150. package/dist/core/git/BackupManager.js.map +1 -0
  151. package/dist/core/git/ConflictResolver.js.map +1 -1
  152. package/dist/core/replayDiff.js +5 -5
  153. package/dist/core/replayDiff.js.map +1 -1
  154. package/dist/core/skillTypes.d.ts +22 -0
  155. package/dist/core/skillTypes.js +17 -0
  156. package/dist/core/skillTypes.js.map +1 -0
  157. package/dist/utils/Logger.d.ts +24 -5
  158. package/dist/utils/Logger.js +89 -63
  159. package/dist/utils/Logger.js.map +1 -1
  160. package/dist/utils/storage.d.ts +22 -0
  161. package/dist/utils/storage.js +62 -0
  162. package/dist/utils/storage.js.map +1 -0
  163. package/package.json +3 -1
  164. package/dist/core/ConfigManager.d.ts +0 -39
  165. package/dist/core/ConfigManager.js +0 -127
  166. package/dist/core/ConfigManager.js.map +0 -1
@@ -1,55 +1,22 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.computeSkillScore = computeSkillScore;
3
+ exports.computeSkillScore = void 0;
7
4
  exports.updateSkillStatus = updateSkillStatus;
8
5
  exports.learnSkillFromRecord = learnSkillFromRecord;
9
6
  exports.getRelevantSkills = getRelevantSkills;
10
7
  exports.reapColdSkills = reapColdSkills;
11
8
  exports.getAllSkills = getAllSkills;
12
- const fs_1 = __importDefault(require("fs"));
13
- const path_1 = __importDefault(require("path"));
14
- const os_1 = __importDefault(require("os"));
15
- const chalk_1 = __importDefault(require("chalk"));
16
- const SKILLS_FILE = path_1.default.join(os_1.default.homedir(), '.yuangs_skills.json');
17
- let skillLibrary = [];
18
- // === Persistence Logic ===
19
- function loadSkills() {
20
- if (fs_1.default.existsSync(SKILLS_FILE)) {
21
- try {
22
- const data = fs_1.default.readFileSync(SKILLS_FILE, 'utf-8');
23
- skillLibrary = JSON.parse(data);
24
- }
25
- catch (e) {
26
- console.error(chalk_1.default.yellow(`Failed to load skills from ${SKILLS_FILE}, starting empty.`));
27
- skillLibrary = [];
28
- }
29
- }
30
- }
31
- function saveSkills() {
32
- try {
33
- fs_1.default.writeFileSync(SKILLS_FILE, JSON.stringify(skillLibrary, null, 2));
34
- }
35
- catch (e) {
36
- console.error(chalk_1.default.red(`Failed to save skills to ${SKILLS_FILE}`));
37
- }
38
- }
39
- // Initialize on load
40
- loadSkills();
41
- // === Existing Logic with Save Hooks ===
42
- /**
43
- * 计算技能分 (0 ~ 1)
44
- */
45
- function computeSkillScore(skill, now = Date.now()) {
46
- const totalUses = skill.successCount + skill.failureCount;
47
- const successRate = totalUses === 0 ? 0.5 : skill.successCount / totalUses;
48
- // 时间衰减 (Freshness): 半衰期约 14 天
49
- const idleDays = (now - skill.lastUsed) / (1000 * 60 * 60 * 24);
50
- const freshness = Math.exp(-idleDays / 14);
51
- // 综合得分: 45% 成功率 + 35% 新鲜度 + 20% 置信度
52
- return (0.45 * successRate) + (0.35 * freshness) + (0.20 * skill.confidence);
9
+ exports.enableSkill = enableSkill;
10
+ exports.disableSkill = disableSkill;
11
+ const skillTypes_1 = require("../core/skillTypes");
12
+ Object.defineProperty(exports, "computeSkillScore", { enumerable: true, get: function () { return skillTypes_1.computeSkillScore; } });
13
+ const storage_1 = require("../utils/storage");
14
+ const skillsStorage = storage_1.FileStorage.forYuangs('skills.json');
15
+ // 初始化加载
16
+ let skillLibrary = skillsStorage.read() || [];
17
+ /** 持久化技能到磁盘 */
18
+ function persistSkills() {
19
+ skillsStorage.write(skillLibrary);
53
20
  }
54
21
  /**
55
22
  * 更新技能状态 (执行后调用)
@@ -69,7 +36,7 @@ function updateSkillStatus(skillId, success) {
69
36
  // 失败惩罚: 惩罚力度大于奖励,防止系统“自嗨”
70
37
  skill.confidence = Math.max(0, skill.confidence - 0.1);
71
38
  }
72
- saveSkills(); // Persist changes
39
+ persistSkills();
73
40
  }
74
41
  /**
75
42
  * 自动学习新技能
@@ -109,7 +76,7 @@ function learnSkillFromRecord(record, success = true) {
109
76
  });
110
77
  // 每学习一次,尝试清理一次“冷”技能
111
78
  reapColdSkills();
112
- saveSkills(); // Persist changes
79
+ persistSkills();
113
80
  }
114
81
  /**
115
82
  * 筛选并排序技能 (用于注入 Prompt)
@@ -118,11 +85,11 @@ function getRelevantSkills(input, limit = 3) {
118
85
  const now = Date.now();
119
86
  return skillLibrary
120
87
  // 1. 基础筛选: 剔除评分过低的技能 (硬淘汰阈值 0.3)
121
- .filter(s => computeSkillScore(s, now) >= 0.3)
88
+ .filter(s => (0, skillTypes_1.computeSkillScore)(s, now) >= 0.3)
122
89
  // 2. 过滤已禁用的技能
123
90
  .filter(s => s.enabled !== false)
124
91
  // 3. 排序: 按综合分排序
125
- .sort((a, b) => computeSkillScore(b, now) - computeSkillScore(a, now))
92
+ .sort((a, b) => (0, skillTypes_1.computeSkillScore)(b, now) - (0, skillTypes_1.computeSkillScore)(a, now))
126
93
  // 4. 取上限
127
94
  .slice(0, limit);
128
95
  }
@@ -133,7 +100,7 @@ function reapColdSkills() {
133
100
  const now = Date.now();
134
101
  const initialCount = skillLibrary.length;
135
102
  skillLibrary = skillLibrary.filter(skill => {
136
- const score = computeSkillScore(skill, now);
103
+ const score = (0, skillTypes_1.computeSkillScore)(skill, now);
137
104
  const idleDays = (now - skill.lastUsed) / (1000 * 60 * 60 * 24);
138
105
  // 满足以下任一条件则淘汰:
139
106
  // 1. 得分极低且长期不用
@@ -147,14 +114,40 @@ function reapColdSkills() {
147
114
  // 强制保持容量
148
115
  if (skillLibrary.length > 100) {
149
116
  // 如果还超标,移除得分最低的那个
150
- skillLibrary.sort((a, b) => computeSkillScore(a, now) - computeSkillScore(b, now));
117
+ skillLibrary.sort((a, b) => (0, skillTypes_1.computeSkillScore)(a, now) - (0, skillTypes_1.computeSkillScore)(b, now));
151
118
  skillLibrary.shift();
152
119
  }
153
120
  if (skillLibrary.length !== initialCount) {
154
- saveSkills(); // Persist if changes happened
121
+ persistSkills(); // Persist if changes happened
155
122
  }
156
123
  }
157
124
  function getAllSkills() {
158
125
  return [...skillLibrary];
159
126
  }
127
+ /**
128
+ * 启用技能
129
+ */
130
+ function enableSkill(name) {
131
+ const skill = skillLibrary.find(s => s.name === name || s.id === name);
132
+ if (!skill)
133
+ return false;
134
+ if (skill.enabled)
135
+ return true;
136
+ skill.enabled = true;
137
+ persistSkills();
138
+ return true;
139
+ }
140
+ /**
141
+ * 禁用技能
142
+ */
143
+ function disableSkill(name) {
144
+ const skill = skillLibrary.find(s => s.name === name || s.id === name);
145
+ if (!skill)
146
+ return false;
147
+ if (!skill.enabled)
148
+ return true;
149
+ skill.enabled = false;
150
+ persistSkills();
151
+ return true;
152
+ }
160
153
  //# sourceMappingURL=skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/agent/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/agent/skills.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,39 @@
1
1
  export type AgentState = 'IDLE' | 'THINKING' | 'PROPOSING' | 'GOVERNING' | 'EXECUTING' | 'OBSERVING' | 'EVALUATING' | 'TERMINAL';
2
2
  export type RiskLevel = 'low' | 'medium' | 'high';
3
+ export interface ToolCallPayload {
4
+ tool_name: string;
5
+ parameters: Record<string, unknown>;
6
+ risk_level?: RiskLevel;
7
+ }
8
+ export interface ShellCmdPayload {
9
+ command: string;
10
+ risk_level?: RiskLevel;
11
+ }
12
+ export interface AnswerPayload {
13
+ content?: string;
14
+ text?: string;
15
+ risk_level?: RiskLevel;
16
+ }
17
+ /** 联合载荷类型,兼容所有访问模式 */
18
+ export type ProposedActionPayload = ToolCallPayload | ShellCmdPayload | AnswerPayload | Record<string, unknown>;
19
+ export interface ParsedPlan {
20
+ acknowledged_observation?: string;
21
+ goal?: string;
22
+ }
23
+ export interface LLMPlan {
24
+ goal?: string;
25
+ command?: string;
26
+ parameters?: Record<string, unknown>;
27
+ risk_level?: RiskLevel;
28
+ }
29
+ /** 类型守卫辅助 */
30
+ export declare function isToolCallPayload(payload: ProposedActionPayload): payload is ToolCallPayload;
31
+ export declare function isShellCmdPayload(payload: ProposedActionPayload): payload is ShellCmdPayload;
32
+ export declare function isAnswerPayload(payload: ProposedActionPayload): payload is AnswerPayload;
3
33
  export interface ProposedAction {
4
34
  id: string;
5
35
  type: 'tool_call' | 'code_diff' | 'shell_cmd' | 'answer';
6
- payload: any;
36
+ payload: ProposedActionPayload;
7
37
  riskLevel: RiskLevel;
8
38
  reasoning: string;
9
39
  }
@@ -39,10 +69,10 @@ export type EvaluationOutcome = {
39
69
  };
40
70
  export interface AgentThought {
41
71
  raw: string;
42
- parsedPlan: any;
72
+ parsedPlan?: ParsedPlan;
43
73
  isDone: boolean;
44
74
  type?: 'tool_call' | 'code_diff' | 'shell_cmd' | 'answer';
45
- payload?: any;
75
+ payload?: ProposedActionPayload;
46
76
  reasoning?: string;
47
77
  modelName?: string;
48
78
  usedRouter?: boolean;
@@ -1,3 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isToolCallPayload = isToolCallPayload;
4
+ exports.isShellCmdPayload = isShellCmdPayload;
5
+ exports.isAnswerPayload = isAnswerPayload;
6
+ /** 类型守卫辅助 */
7
+ function isToolCallPayload(payload) {
8
+ return 'tool_name' in payload && typeof payload.tool_name === 'string';
9
+ }
10
+ function isShellCmdPayload(payload) {
11
+ return 'command' in payload && typeof payload.command === 'string';
12
+ }
13
+ function isAnswerPayload(payload) {
14
+ return ('content' in payload && typeof payload.content === 'string') ||
15
+ ('text' in payload && typeof payload.text === 'string');
16
+ }
3
17
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/agent/state.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/agent/state.ts"],"names":[],"mappings":";;AAiDA,8CAEC;AAED,8CAEC;AAED,0CAGC;AAZD,aAAa;AACb,SAAgB,iBAAiB,CAAC,OAA8B;IAC9D,OAAO,WAAW,IAAI,OAAO,IAAI,OAAQ,OAAe,CAAC,SAAS,KAAK,QAAQ,CAAC;AAClF,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAA8B;IAC9D,OAAO,SAAS,IAAI,OAAO,IAAI,OAAQ,OAAe,CAAC,OAAO,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED,SAAgB,eAAe,CAAC,OAA8B;IAC5D,OAAO,CAAC,SAAS,IAAI,OAAO,IAAI,OAAQ,OAAe,CAAC,OAAO,KAAK,QAAQ,CAAC;QACtE,CAAC,MAAM,IAAI,OAAO,IAAI,OAAQ,OAAe,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Tool, ToolParameter } from './types';
2
+ import { ToolExecutionResult } from '../state';
3
+ export declare class AnalyzeDependencies implements Tool {
4
+ name: string;
5
+ description: string;
6
+ parameters: ToolParameter[];
7
+ execute(params: Record<string, any>): Promise<ToolExecutionResult>;
8
+ private getFiles;
9
+ }
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AnalyzeDependencies = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const utils_1 = require("./utils");
9
+ const pathSafety_1 = require("./pathSafety");
10
+ const executor_1 = require("../executor");
11
+ class AnalyzeDependencies {
12
+ name = 'analyze_dependencies';
13
+ description = '分析文件的依赖关系(import/require)';
14
+ parameters = [
15
+ { name: 'path', type: 'string', required: true, description: '文件或目录路径' },
16
+ { name: 'recursive', type: 'boolean', required: false, description: '是否递归分析目录' }
17
+ ];
18
+ async execute(params) {
19
+ const targetPath = params.path;
20
+ try {
21
+ const safePath = await (0, pathSafety_1.resolveAndValidate)(targetPath, executor_1.ToolExecutor.getAllowedCwd());
22
+ const stat = await promises_1.default.stat(safePath);
23
+ let files = [];
24
+ if (stat.isFile()) {
25
+ files = [safePath];
26
+ }
27
+ else if (stat.isDirectory()) {
28
+ const allFiles = await this.getFiles(safePath, true);
29
+ files = allFiles
30
+ .filter(f => f.type === 'file')
31
+ .filter(f => /\.(ts|js|tsx|jsx|vue|svelte)$/.test(f.path))
32
+ .map(f => f.path);
33
+ }
34
+ const dependencies = {};
35
+ for (const file of files) {
36
+ const content = await promises_1.default.readFile(file, 'utf-8');
37
+ const deps = [];
38
+ const importRegex = /import\s+(?:(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)\s+from\s+)?['"]([^'"]+)['"]/g;
39
+ let match;
40
+ while ((match = importRegex.exec(content)) !== null) {
41
+ deps.push(match[1]);
42
+ }
43
+ const requireRegex = /require\(['"]([^'"]+)['"]\)/g;
44
+ while ((match = requireRegex.exec(content)) !== null) {
45
+ deps.push(match[1]);
46
+ }
47
+ const dynamicImportRegex = /import\(['"]([^'"]+)['"]\)/g;
48
+ while ((match = dynamicImportRegex.exec(content)) !== null) {
49
+ deps.push(match[1]);
50
+ }
51
+ if (deps.length > 0) {
52
+ dependencies[file] = [...new Set(deps)];
53
+ }
54
+ }
55
+ let output = '依赖关系分析结果:\n\n';
56
+ for (const [file, deps] of Object.entries(dependencies)) {
57
+ output += `${file}:\n`;
58
+ for (const dep of deps)
59
+ output += ` - ${dep}\n`;
60
+ output += '\n';
61
+ }
62
+ return (0, utils_1.successResult)(output || '未找到依赖关系');
63
+ }
64
+ catch (error) {
65
+ if (error.message?.includes('Access denied')) {
66
+ return (0, utils_1.failResult)(error.message);
67
+ }
68
+ return (0, utils_1.failResult)(error.message);
69
+ }
70
+ }
71
+ async getFiles(dir, recursive) {
72
+ const entries = await promises_1.default.readdir(dir, { withFileTypes: true });
73
+ const files = [];
74
+ for (const entry of entries) {
75
+ const fullPath = `${dir}/${entry.name}`;
76
+ if (entry.isDirectory()) {
77
+ files.push({ path: fullPath, type: 'directory' });
78
+ if (recursive) {
79
+ const sub = await this.getFiles(fullPath, recursive);
80
+ files.push(...sub);
81
+ }
82
+ }
83
+ else {
84
+ files.push({ path: fullPath, type: 'file' });
85
+ }
86
+ }
87
+ return files;
88
+ }
89
+ }
90
+ exports.AnalyzeDependencies = AnalyzeDependencies;
91
+ //# sourceMappingURL=AnalyzeDependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyzeDependencies.js","sourceRoot":"","sources":["../../../src/agent/tools/AnalyzeDependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Tool, ToolParameter } from './types';
2
+ import { ToolExecutionResult } from '../state';
3
+ export declare class AppendFile implements Tool {
4
+ name: string;
5
+ description: string;
6
+ parameters: ToolParameter[];
7
+ execute(params: Record<string, any>): Promise<ToolExecutionResult>;
8
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AppendFile = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const utils_1 = require("./utils");
10
+ const pathSafety_1 = require("./pathSafety");
11
+ const executor_1 = require("../executor");
12
+ class AppendFile {
13
+ name = 'append_file';
14
+ description = '向文件末尾追加内容';
15
+ parameters = [
16
+ { name: 'path', type: 'string', required: true, description: '文件路径' },
17
+ { name: 'content', type: 'string', required: true, description: '要追加的内容' },
18
+ { name: 'encoding', type: 'string', required: false, description: '文件编码' }
19
+ ];
20
+ async execute(params) {
21
+ try {
22
+ const safePath = await (0, pathSafety_1.resolveAndValidate)(params.path, executor_1.ToolExecutor.getAllowedCwd());
23
+ await promises_1.default.mkdir(path_1.default.dirname(safePath), { recursive: true });
24
+ await promises_1.default.appendFile(safePath, params.content, params.encoding || 'utf-8');
25
+ return (0, utils_1.successResult)(`Successfully appended to ${safePath}`, [safePath]);
26
+ }
27
+ catch (error) {
28
+ if (error.message?.includes('Access denied')) {
29
+ return (0, utils_1.failResult)(error.message);
30
+ }
31
+ return (0, utils_1.failResult)(error.message);
32
+ }
33
+ }
34
+ }
35
+ exports.AppendFile = AppendFile;
36
+ //# sourceMappingURL=AppendFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppendFile.js","sourceRoot":"","sources":["../../../src/agent/tools/AppendFile.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA6B;AAC7B,gDAAwB;AAGxB,mCAAoD;AACpD,6CAAkD;AAClD,0CAA2C;AAE3C,MAAa,UAAU;IACrB,IAAI,GAAG,aAAa,CAAC;IACrB,WAAW,GAAG,WAAW,CAAC;IAC1B,UAAU,GAAoB;QAC5B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;QACrE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE;QAC1E,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE;KAC3E,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,MAA2B;QACvC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAA,+BAAkB,EAAC,MAAM,CAAC,IAAI,EAAE,uBAAY,CAAC,aAAa,EAAE,CAAC,CAAC;YACrF,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;YAC1E,OAAO,IAAA,qBAAa,EAAC,4BAA4B,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC7C,OAAO,IAAA,kBAAU,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,IAAA,kBAAU,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF;AAtBD,gCAsBC"}
@@ -0,0 +1,8 @@
1
+ import { Tool, ToolParameter } from './types';
2
+ import { ToolExecutionResult } from '../state';
3
+ export declare class CodeDiff implements Tool {
4
+ name: string;
5
+ description: string;
6
+ parameters: ToolParameter[];
7
+ execute(params: Record<string, any>): Promise<ToolExecutionResult>;
8
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CodeDiff = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const util_1 = require("util");
9
+ const promises_1 = __importDefault(require("fs/promises"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const utils_1 = require("./utils");
12
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
13
+ class CodeDiff {
14
+ name = 'code_diff';
15
+ description = '应用代码差异补丁';
16
+ parameters = [
17
+ { name: 'diff', type: 'string', required: true, description: 'Git diff/patch 内容' }
18
+ ];
19
+ async execute(params) {
20
+ try {
21
+ const tempFile = path_1.default.join(process.cwd(), '.yuangs_temp.patch');
22
+ await promises_1.default.writeFile(tempFile, params.diff, 'utf-8');
23
+ await execAsync(`git apply --check ${tempFile}`, { cwd: process.cwd() });
24
+ const { stdout: applyOutput } = await execAsync(`git apply ${tempFile}`, {
25
+ cwd: process.cwd()
26
+ });
27
+ await promises_1.default.unlink(tempFile);
28
+ return (0, utils_1.successResult)(applyOutput || 'Diff applied successfully', ['.yuangs_temp.patch']);
29
+ }
30
+ catch (error) {
31
+ return (0, utils_1.failResult)(error.message, error.stdout || error.stderr || 'Failed to apply diff');
32
+ }
33
+ }
34
+ }
35
+ exports.CodeDiff = CodeDiff;
36
+ //# sourceMappingURL=CodeDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeDiff.js","sourceRoot":"","sources":["../../../src/agent/tools/CodeDiff.ts"],"names":[],"mappings":";;;;;;AAAA,iDAAqC;AACrC,+BAAiC;AACjC,2DAA6B;AAC7B,gDAAwB;AAGxB,mCAAoD;AAEpD,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAElC,MAAa,QAAQ;IACnB,IAAI,GAAG,WAAW,CAAC;IACnB,WAAW,GAAG,UAAU,CAAC;IACzB,UAAU,GAAoB;QAC5B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE;KACnF,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,MAA2B;QACvC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAChE,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEnD,MAAM,SAAS,CAAC,qBAAqB,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACzE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,aAAa,QAAQ,EAAE,EAAE;gBACvE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;aACnB,CAAC,CAAC;YAEH,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE1B,OAAO,IAAA,qBAAa,EAAC,WAAW,IAAI,2BAA2B,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,IAAA,kBAAU,EAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,sBAAsB,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;CACF;AAxBD,4BAwBC"}
@@ -0,0 +1,8 @@
1
+ import { Tool, ToolParameter } from './types';
2
+ import { ToolExecutionResult } from '../state';
3
+ export declare class ContinueReading implements Tool {
4
+ name: string;
5
+ description: string;
6
+ parameters: ToolParameter[];
7
+ execute(params: Record<string, any>): Promise<ToolExecutionResult>;
8
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ContinueReading = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const utils_1 = require("./utils");
9
+ const pathSafety_1 = require("./pathSafety");
10
+ const executor_1 = require("../executor");
11
+ class ContinueReading {
12
+ name = 'continue_reading';
13
+ description = '继续读取之前被截断的文件内容';
14
+ parameters = [
15
+ { name: 'path', type: 'string', required: true, description: '文件路径' },
16
+ { name: 'from_position', type: 'number', required: false, description: '从哪个字符位置开始读取' },
17
+ { name: 'length', type: 'number', required: false, description: '读取的字符长度' }
18
+ ];
19
+ async execute(params) {
20
+ try {
21
+ const safePath = await (0, pathSafety_1.resolveAndValidate)(params.path, executor_1.ToolExecutor.getAllowedCwd());
22
+ let startPos = params.from_position;
23
+ if (startPos === undefined) {
24
+ startPos = (0, utils_1.getReadPosition)(safePath) ?? (0, utils_1.getMaxOutputLength)();
25
+ }
26
+ const content = await promises_1.default.readFile(safePath, 'utf-8');
27
+ const length = params.length || (0, utils_1.getMaxOutputLength)();
28
+ if (startPos >= content.length) {
29
+ return (0, utils_1.successResult)('[EOF] 已到达文件末尾');
30
+ }
31
+ const endPos = Math.min(startPos + length, content.length);
32
+ const result = content.slice(startPos, endPos);
33
+ (0, utils_1.setReadPosition)(safePath, endPos);
34
+ const prefix = `[从位置 ${startPos} 读取,共 ${result.length} 字符]\n\n`;
35
+ const remaining = content.length - endPos;
36
+ let suffix = '';
37
+ if (remaining > 0) {
38
+ suffix = `\n\n[还有 ${remaining} 字符未读取,使用 continue_reading 继续]`;
39
+ }
40
+ else {
41
+ (0, utils_1.clearReadPosition)(safePath);
42
+ }
43
+ return {
44
+ success: true,
45
+ output: prefix + result + suffix,
46
+ readPosition: endPos,
47
+ artifacts: [safePath]
48
+ };
49
+ }
50
+ catch (error) {
51
+ if (error.message?.includes('Access denied')) {
52
+ return (0, utils_1.failResult)(error.message);
53
+ }
54
+ return (0, utils_1.failResult)(error.message);
55
+ }
56
+ }
57
+ }
58
+ exports.ContinueReading = ContinueReading;
59
+ //# sourceMappingURL=ContinueReading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContinueReading.js","sourceRoot":"","sources":["../../../src/agent/tools/ContinueReading.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA6B;AAG7B,mCAA6H;AAC7H,6CAAkD;AAClD,0CAA2C;AAE3C,MAAa,eAAe;IAC1B,IAAI,GAAG,kBAAkB,CAAC;IAC1B,WAAW,GAAG,gBAAgB,CAAC;IAC/B,UAAU,GAAoB;QAC5B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;QACrE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE;QACtF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE;KAC5E,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,MAA2B;QACvC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAA,+BAAkB,EAAC,MAAM,CAAC,IAAI,EAAE,uBAAY,CAAC,aAAa,EAAE,CAAC,CAAC;YACrF,IAAI,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC;YAEpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,QAAQ,GAAG,IAAA,uBAAe,EAAC,QAAQ,CAAC,IAAI,IAAA,0BAAkB,GAAE,CAAC;YAC/D,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAA,0BAAkB,GAAE,CAAC;YAErD,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/B,OAAO,IAAA,qBAAa,EAAC,eAAe,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAA,uBAAe,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAElC,MAAM,MAAM,GAAG,QAAQ,QAAQ,SAAS,MAAM,CAAC,MAAM,UAAU,CAAC;YAChE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YAE1C,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,MAAM,GAAG,WAAW,SAAS,gCAAgC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,IAAA,yBAAiB,EAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;gBAChC,YAAY,EAAE,MAAM;gBACpB,SAAS,EAAE,CAAC,QAAQ,CAAC;aACtB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC7C,OAAO,IAAA,kBAAU,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,IAAA,kBAAU,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF;AApDD,0CAoDC"}
@@ -0,0 +1,8 @@
1
+ import { Tool, ToolParameter } from './types';
2
+ import { ToolExecutionResult } from '../state';
3
+ export declare class FileInfo implements Tool {
4
+ name: string;
5
+ description: string;
6
+ parameters: ToolParameter[];
7
+ execute(params: Record<string, any>): Promise<ToolExecutionResult>;
8
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FileInfo = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const utils_1 = require("./utils");
9
+ const pathSafety_1 = require("./pathSafety");
10
+ const executor_1 = require("../executor");
11
+ class FileInfo {
12
+ name = 'file_info';
13
+ description = '获取文件的元信息(大小、权限、修改时间等)';
14
+ parameters = [
15
+ { name: 'path', type: 'string', required: true, description: '文件路径' }
16
+ ];
17
+ async execute(params) {
18
+ try {
19
+ const safePath = await (0, pathSafety_1.resolveAndValidate)(params.path, executor_1.ToolExecutor.getAllowedCwd());
20
+ const stat = await promises_1.default.stat(safePath);
21
+ const info = {
22
+ path: safePath,
23
+ type: stat.isDirectory() ? 'directory' : 'file',
24
+ size: stat.size,
25
+ sizeHuman: (0, utils_1.formatBytes)(stat.size),
26
+ modified: stat.mtime.toISOString(),
27
+ created: stat.birthtime.toISOString(),
28
+ permissions: stat.mode.toString(8),
29
+ isReadable: !!(stat.mode & parseInt('0400', 8)),
30
+ isWritable: !!(stat.mode & parseInt('0200', 8))
31
+ };
32
+ return (0, utils_1.successResult)(JSON.stringify(info, null, 2));
33
+ }
34
+ catch (error) {
35
+ if (error.message?.includes('Access denied')) {
36
+ return (0, utils_1.failResult)(error.message);
37
+ }
38
+ return (0, utils_1.failResult)(error.message);
39
+ }
40
+ }
41
+ }
42
+ exports.FileInfo = FileInfo;
43
+ //# sourceMappingURL=FileInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileInfo.js","sourceRoot":"","sources":["../../../src/agent/tools/FileInfo.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA6B;AAG7B,mCAAiE;AACjE,6CAAkD;AAClD,0CAA2C;AAE3C,MAAa,QAAQ;IACnB,IAAI,GAAG,WAAW,CAAC;IACnB,WAAW,GAAG,uBAAuB,CAAC;IACtC,UAAU,GAAoB;QAC5B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;KACtE,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,MAA2B;QACvC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAA,+BAAkB,EAAC,MAAM,CAAC,IAAI,EAAE,uBAAY,CAAC,aAAa,EAAE,CAAC,CAAC;YACrF,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;gBAC/C,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAA,mBAAW,EAAC,IAAI,CAAC,IAAI,CAAC;gBACjC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAClC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;gBACrC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC/C,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;aAChD,CAAC;YAEF,OAAO,IAAA,qBAAa,EAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC7C,OAAO,IAAA,kBAAU,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,IAAA,kBAAU,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF;AA/BD,4BA+BC"}
@@ -0,0 +1,8 @@
1
+ import { Tool, ToolParameter } from './types';
2
+ import { ToolExecutionResult } from '../state';
3
+ export declare class GitDiff implements Tool {
4
+ name: string;
5
+ description: string;
6
+ parameters: ToolParameter[];
7
+ execute(params: Record<string, any>): Promise<ToolExecutionResult>;
8
+ }