code-gate 1.1.3 → 1.3.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 (76) hide show
  1. package/README.md +107 -6
  2. package/README_ZH.md +105 -5
  3. package/dist/agent/index.d.ts +8 -0
  4. package/dist/agent/index.js +10 -0
  5. package/dist/agent/index.js.map +1 -0
  6. package/dist/agent/orchestrator.d.ts +13 -0
  7. package/dist/agent/orchestrator.js +109 -0
  8. package/dist/agent/orchestrator.js.map +1 -0
  9. package/dist/agent/prompts/system.d.ts +14 -0
  10. package/dist/agent/prompts/system.js +108 -0
  11. package/dist/agent/prompts/system.js.map +1 -0
  12. package/dist/agent/tools/index.d.ts +15 -0
  13. package/dist/agent/tools/index.js +57 -0
  14. package/dist/agent/tools/index.js.map +1 -0
  15. package/dist/agent/tools/list-directory.d.ts +13 -0
  16. package/dist/agent/tools/list-directory.js +162 -0
  17. package/dist/agent/tools/list-directory.js.map +1 -0
  18. package/dist/agent/tools/read-file.d.ts +13 -0
  19. package/dist/agent/tools/read-file.js +106 -0
  20. package/dist/agent/tools/read-file.js.map +1 -0
  21. package/dist/agent/tools/search-content.d.ts +13 -0
  22. package/dist/agent/tools/search-content.js +110 -0
  23. package/dist/agent/tools/search-content.js.map +1 -0
  24. package/dist/agent/tools/types.d.ts +71 -0
  25. package/dist/agent/tools/types.js +5 -0
  26. package/dist/agent/tools/types.js.map +1 -0
  27. package/dist/agent/types.d.ts +55 -0
  28. package/dist/agent/types.js +5 -0
  29. package/dist/agent/types.js.map +1 -0
  30. package/dist/cli/commands/hook.js +18 -3
  31. package/dist/cli/commands/hook.js.map +1 -1
  32. package/dist/cli/commands/review.js +18 -3
  33. package/dist/cli/commands/review.js.map +1 -1
  34. package/dist/config/defaults.js +5 -0
  35. package/dist/config/defaults.js.map +1 -1
  36. package/dist/config/types.d.ts +6 -0
  37. package/dist/core/context/manager.d.ts +14 -0
  38. package/dist/core/context/manager.js +78 -0
  39. package/dist/core/context/manager.js.map +1 -0
  40. package/dist/core/context/parser/java.d.ts +18 -0
  41. package/dist/core/context/parser/java.js +70 -0
  42. package/dist/core/context/parser/java.js.map +1 -0
  43. package/dist/core/git.d.ts +3 -0
  44. package/dist/core/git.js +20 -0
  45. package/dist/core/git.js.map +1 -1
  46. package/dist/core/review.d.ts +2 -1
  47. package/dist/core/review.js +129 -55
  48. package/dist/core/review.js.map +1 -1
  49. package/dist/llm/base.d.ts +20 -0
  50. package/dist/llm/base.js +15 -0
  51. package/dist/llm/base.js.map +1 -1
  52. package/dist/llm/index.d.ts +13 -1
  53. package/dist/llm/index.js +25 -0
  54. package/dist/llm/index.js.map +1 -1
  55. package/dist/llm/providers/deepseek.d.ts +20 -2
  56. package/dist/llm/providers/deepseek.js +89 -4
  57. package/dist/llm/providers/deepseek.js.map +1 -1
  58. package/dist/llm/providers/zhipu.d.ts +20 -2
  59. package/dist/llm/providers/zhipu.js +80 -4
  60. package/dist/llm/providers/zhipu.js.map +1 -1
  61. package/dist/locales/de.js +3 -0
  62. package/dist/locales/de.js.map +1 -1
  63. package/dist/locales/en.js +3 -0
  64. package/dist/locales/en.js.map +1 -1
  65. package/dist/locales/fr.js +3 -0
  66. package/dist/locales/fr.js.map +1 -1
  67. package/dist/locales/ja.js +3 -0
  68. package/dist/locales/ja.js.map +1 -1
  69. package/dist/locales/ko.js +3 -0
  70. package/dist/locales/ko.js.map +1 -1
  71. package/dist/locales/types.d.ts +3 -0
  72. package/dist/locales/zh-CN.js +3 -0
  73. package/dist/locales/zh-CN.js.map +1 -1
  74. package/dist/locales/zh-TW.js +3 -0
  75. package/dist/locales/zh-TW.js.map +1 -1
  76. package/package.json +1 -1
@@ -1,10 +1,11 @@
1
1
  import { loadConfig } from '../config/index.js';
2
2
  import { setLanguage, t } from '../locales/index.js';
3
3
  import { getStagedFiles, getStagedDiff, filterFiles, getStagedDiffForFile, getBranchName, getDiffStats, getCommitMessage, getFilesFromCommit, getDiffFromCommit, getDiffForFileFromCommit, getCommitMessageFromHash, getDiffStatsFromCommit } from './git.js';
4
- import { createLLMProvider } from '../llm/index.js';
4
+ import { createLLMProvider, createAgentProvider, supportsAgent } from '../llm/index.js';
5
5
  import { renderHTMLLive, renderHTMLTabs } from '../ui/render/html.js';
6
6
  import { serveReview, saveOutput, triggerOpen } from '../ui/server.js';
7
7
  import { info as logInfo, warn } from '../utils/logger.js';
8
+ import { contextManager } from './context/manager.js';
8
9
  export async function runReviewFlow(opts = {}) {
9
10
  const cfg = await loadConfig();
10
11
  if (!cfg) {
@@ -19,10 +20,25 @@ export async function runReviewFlow(opts = {}) {
19
20
  const getFileDiff = opts.commitHash ? (f) => getDiffForFileFromCommit(opts.commitHash, f) : getStagedDiffForFile;
20
21
  const getMsg = opts.commitHash ? () => getCommitMessageFromHash(opts.commitHash) : getCommitMessage;
21
22
  const getStats = opts.commitHash ? () => getDiffStatsFromCommit(opts.commitHash) : getDiffStats;
22
- const provider = createLLMProvider(cfg);
23
23
  const providerName = cfg.provider;
24
24
  const mode = (cfg.reviewMode || 'files');
25
25
  const modelUsed = cfg.providerOptions?.[providerName]?.model || 'unknown';
26
+ // 判断是否启用 Agent 模式
27
+ const agentEnabled = cfg.agent?.enabled === true && supportsAgent(providerName);
28
+ const provider = agentEnabled ? createAgentProvider(cfg) : createLLMProvider(cfg);
29
+ // Agent 模式配置
30
+ const agentOptions = agentEnabled ? {
31
+ maxIterations: cfg.agent?.maxIterations ?? 5,
32
+ maxToolCalls: cfg.agent?.maxToolCalls ?? 10,
33
+ onToolCall: (call) => {
34
+ if (opts.onAgentToolCall) {
35
+ opts.onAgentToolCall(call.name);
36
+ }
37
+ },
38
+ onIteration: (_iteration, _toolCalls) => {
39
+ // 迭代信息通过 onAgentToolCall 传递
40
+ }
41
+ } : null;
26
42
  const allFiles = getFiles();
27
43
  if (allFiles.length === 0) {
28
44
  logInfo(t('cli.noFiles'));
@@ -33,15 +49,16 @@ export async function runReviewFlow(opts = {}) {
33
49
  logInfo(t('cli.noFilesAfterFilter'));
34
50
  return true;
35
51
  }
36
- // Only fetch global diff if we need a summary or if we need to check if diff exists (though files.length > 0 usually implies diff exists)
37
- // But strictly speaking, we might want to skip this check for 'files' mode to avoid large buffer issues
52
+ // Agent 模式或 summary 模式需要获取全局 diff
53
+ // Agent 模式会将所有文件一起审查,需要完整的 diff
38
54
  let diff = '';
39
- if (mode === 'summary' || mode === 'both') {
55
+ if (mode === 'summary' || mode === 'both' || agentEnabled) {
40
56
  diff = getDiff();
41
57
  if (!diff) {
42
- warn('code-gate: 无法获取完整 Diff (可能文件过大),将跳过 Summary 生成');
43
- // Fallback: Disable summary mode or proceed with empty diff?
44
- // For now, let's just proceed. The provider might handle empty diff or we handle it in runSummary
58
+ warn('code-gate: 无法获取完整 Diff (可能文件过大)');
59
+ if (agentEnabled) {
60
+ warn('code-gate: Agent 模式需要完整 Diff,将回退到普通模式');
61
+ }
45
62
  }
46
63
  }
47
64
  const prompt = cfg.prompt || '';
@@ -65,19 +82,29 @@ export async function runReviewFlow(opts = {}) {
65
82
  catch { }
66
83
  }
67
84
  if (opts.onStart)
68
- opts.onStart(files.length);
85
+ opts.onStart(files.length, agentEnabled);
69
86
  async function runSummary() {
70
87
  try {
71
88
  aiInvoked = true;
72
- const s = await provider.review({ prompt, diff });
89
+ let s;
90
+ // 根据模式选择审查方式
91
+ if (agentEnabled && agentOptions) {
92
+ // Agent 模式
93
+ s = await provider.reviewWithAgent({ prompt, diff, files: list }, agentOptions);
94
+ }
95
+ else {
96
+ // 普通模式
97
+ s = await provider.review({ prompt, diff });
98
+ }
73
99
  aiSucceeded = true;
74
100
  return s || '';
75
101
  }
76
102
  catch (e) {
77
- warn(`code-gate: LLM 调用失败:${e?.message || e}`);
78
- status = `LLM 调用失败:${e?.message || e}`;
103
+ const errMsg = e instanceof Error ? e.message : String(e);
104
+ warn(`code-gate: LLM 调用失败:${errMsg}`);
105
+ status = `LLM 调用失败:${errMsg}`;
79
106
  aiSucceeded = false;
80
- return `未生成 AI 审查结果。\n错误信息:${e?.message || e}`;
107
+ return `未生成 AI 审查结果。\n错误信息:${errMsg}`;
81
108
  }
82
109
  }
83
110
  const maxFiles = cfg.limits?.maxFiles || files.length;
@@ -119,58 +146,105 @@ export async function runReviewFlow(opts = {}) {
119
146
  saveOutput(cfg, id, finalHtml);
120
147
  return false;
121
148
  }
122
- const html = renderHTMLLive(id, { aiInvoked, aiSucceeded, provider: providerName, model: modelUsed, status, datetime: formattedTime, subtitle, showLogo: cfg.ui?.showLogo }, []);
123
- const previewUrl = await serveReview(cfg, html, id, () => {
124
- const completed = items.filter((it) => it.done);
125
- const expected = list.length + (mode === 'both' ? 1 : 0);
126
- const allDone = completed.length >= expected;
127
- return { files: completed, done: allDone };
128
- }, false);
129
- if (opts.onServerReady && previewUrl)
130
- opts.onServerReady(previewUrl);
131
- let completedCount = 0;
132
- async function runTask(f) {
133
- let fdiff = getFileDiff(f);
134
- // Check for max diff lines
135
- const maxDiffLines = cfg?.limits?.maxDiffLines || 10000;
136
- const lines = fdiff.split('\n');
137
- if (lines.length > maxDiffLines) {
138
- fdiff = lines.slice(0, maxDiffLines).join('\n') + t('cli.diffTruncated', { lines: lines.length });
139
- }
140
- let frev = '';
149
+ // ============ Agent 模式:所有文件合并审查 ============
150
+ if (agentEnabled && agentOptions && diff) {
151
+ logInfo('Agent 模式:合并审查所有变更文件');
152
+ const html = renderHTMLLive(id, { aiInvoked, aiSucceeded, provider: providerName, model: modelUsed, status, datetime: formattedTime, subtitle, showLogo: cfg.ui?.showLogo }, []);
153
+ const previewUrl = await serveReview(cfg, html, id, () => {
154
+ const completed = items.filter((it) => it.done);
155
+ return { files: completed, done: completed.length > 0 };
156
+ }, false);
157
+ if (opts.onServerReady && previewUrl)
158
+ opts.onServerReady(previewUrl);
159
+ // 执行 Agent 审查(所有文件一起)
160
+ let agentReview = '';
141
161
  try {
142
162
  aiInvoked = true;
143
- frev = await provider.review({ prompt, diff: fdiff });
144
- aiSucceeded = aiSucceeded || !!frev;
163
+ logInfo(`Agent 开始审查 ${list.length} 个文件...`);
164
+ agentReview = await provider.reviewWithAgent({ prompt, diff, files: list }, agentOptions);
165
+ aiSucceeded = !!agentReview;
145
166
  }
146
167
  catch (e) {
147
- warn(`code-gate: 文件 ${f} 审查失败:${e?.message || e}`);
168
+ const errMsg = e instanceof Error ? e.message : String(e);
169
+ warn(`code-gate: Agent 审查失败:${errMsg}`);
170
+ agentReview = `Agent 审查失败。\n错误信息:${errMsg}`;
148
171
  }
149
- items.push({ file: f, review: frev, diff: fdiff || 'diff --git a/' + f + ' b/' + f, done: true });
150
- if (mode === 'files' && items.length === 1 && previewUrl) {
172
+ // 将审查结果作为 Summary 显示,diff 为完整 diff
173
+ items.push({ file: 'Agent Review', review: agentReview, diff, done: true });
174
+ if (previewUrl) {
151
175
  triggerOpen(previewUrl);
152
176
  }
153
- completedCount++;
154
177
  if (opts.onProgress)
155
- opts.onProgress(f, completedCount, list.length);
178
+ opts.onProgress('Agent Review', 1, 1);
179
+ // 如果是 both 模式,不需要再次生成 summary(Agent 已经是综合审查)
156
180
  }
157
- const queue = [...list];
158
- const workers = [];
159
- for (let i = 0; i < Math.max(1, concurrency); i++) {
160
- const worker = (async () => {
161
- while (queue.length) {
162
- const f = queue.shift();
163
- if (!f)
164
- break;
165
- await runTask(f);
181
+ else {
182
+ // ============ 普通模式:逐个文件审查 ============
183
+ const html = renderHTMLLive(id, { aiInvoked, aiSucceeded, provider: providerName, model: modelUsed, status, datetime: formattedTime, subtitle, showLogo: cfg.ui?.showLogo }, []);
184
+ const previewUrl = await serveReview(cfg, html, id, () => {
185
+ const completed = items.filter((it) => it.done);
186
+ const expected = list.length + (mode === 'both' ? 1 : 0);
187
+ const allDone = completed.length >= expected;
188
+ return { files: completed, done: allDone };
189
+ }, false);
190
+ if (opts.onServerReady && previewUrl)
191
+ opts.onServerReady(previewUrl);
192
+ let completedCount = 0;
193
+ async function runTask(f) {
194
+ let fdiff = getFileDiff(f);
195
+ // Attempt to get enhanced context (Smart Skeleton) for Java files
196
+ try {
197
+ const context = contextManager.getContext(f);
198
+ if (context) {
199
+ // Prepend context to the diff so the LLM sees it first
200
+ fdiff = context + '\n\n' + fdiff;
201
+ }
166
202
  }
167
- })();
168
- workers.push(worker);
169
- }
170
- await Promise.all(workers);
171
- if (mode === 'both') {
172
- const s = await runSummary();
173
- items.push({ file: 'Summary', review: s, diff, done: true });
203
+ catch (e) {
204
+ warn(`code-gate: Failed to load context for ${f}: ${e?.message || e}`);
205
+ }
206
+ // Check for max diff lines
207
+ const maxDiffLines = cfg?.limits?.maxDiffLines || 10000;
208
+ const lines = fdiff.split('\n');
209
+ if (lines.length > maxDiffLines) {
210
+ fdiff = lines.slice(0, maxDiffLines).join('\n') + t('cli.diffTruncated', { lines: lines.length });
211
+ }
212
+ let frev = '';
213
+ try {
214
+ aiInvoked = true;
215
+ frev = await provider.review({ prompt, diff: fdiff });
216
+ aiSucceeded = aiSucceeded || !!frev;
217
+ }
218
+ catch (e) {
219
+ const errMsg = e instanceof Error ? e.message : String(e);
220
+ warn(`code-gate: 文件 ${f} 审查失败:${errMsg}`);
221
+ }
222
+ items.push({ file: f, review: frev, diff: fdiff || 'diff --git a/' + f + ' b/' + f, done: true });
223
+ if (mode === 'files' && items.length === 1 && previewUrl) {
224
+ triggerOpen(previewUrl);
225
+ }
226
+ completedCount++;
227
+ if (opts.onProgress)
228
+ opts.onProgress(f, completedCount, list.length);
229
+ }
230
+ const queue = [...list];
231
+ const workers = [];
232
+ for (let i = 0; i < Math.max(1, concurrency); i++) {
233
+ const worker = (async () => {
234
+ while (queue.length) {
235
+ const f = queue.shift();
236
+ if (!f)
237
+ break;
238
+ await runTask(f);
239
+ }
240
+ })();
241
+ workers.push(worker);
242
+ }
243
+ await Promise.all(workers);
244
+ if (mode === 'both') {
245
+ const s = await runSummary();
246
+ items.push({ file: 'Summary', review: s, diff, done: true });
247
+ }
174
248
  }
175
249
  try {
176
250
  const finalHtml = renderHTMLTabs(items, {
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/core/review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/core/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EACL,cAAc,EACd,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEvF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAUrD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA0B,EAAE;IAC9D,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAA;IAE9B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,6CAA6C;QAC7C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC3B,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,cAAc,CAAA;IAC9F,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;IAC3F,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAA;IACzH,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAA;IACpG,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;IAEhG,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAA;IACjC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAiC,CAAA;IACxE,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,SAAS,CAAA;IAEzE,kBAAkB;IAClB,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,IAAI,aAAa,CAAC,YAAY,CAAC,CAAA;IAC/E,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAEjF,aAAa;IACb,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC;QAClC,aAAa,EAAE,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC;QAC5C,YAAY,EAAE,GAAG,CAAC,KAAK,EAAE,YAAY,IAAI,EAAE;QAC3C,UAAU,EAAE,CAAC,IAAsB,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QACD,WAAW,EAAE,CAAC,UAAkB,EAAE,UAAkB,EAAE,EAAE;YACtD,4BAA4B;QAC9B,CAAC;KACF,CAAC,CAAC,CAAC,IAAI,CAAA;IAER,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAA;IAE3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,kCAAkC;IAClC,gCAAgC;IAChC,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,IAAI,YAAY,EAAE,CAAC;QAC1D,IAAI,GAAG,OAAO,EAAE,CAAA;QAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,iCAAiC,CAAC,CAAA;YACvC,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,uCAAuC,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAA;IAE/B,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,mDAAmD;IACnD,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,IAAI,wBAAwB,CAAA;YAChF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;YACxC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAA,CAAC,aAAa;YAC1E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;YACtF,YAAY,CAAC,SAAS,CAAC,CAAA;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAA;gBAChC,kDAAkD;gBAClD,MAAM,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,IAAI,IAAI,CAAC,OAAO;QAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAE1D,KAAK,UAAU,UAAU;QACvB,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAA;YAChB,IAAI,CAAS,CAAA;YAEb,aAAa;YACb,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;gBACjC,WAAW;gBACX,CAAC,GAAG,MAAO,QAA6B,CAAC,eAAe,CACtD,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAC7B,YAAY,CACb,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO;gBACP,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAC7C,CAAC;YAED,WAAW,GAAG,IAAI,CAAA;YAClB,OAAO,CAAC,IAAI,EAAE,CAAA;QAChB,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACzD,IAAI,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAA;YACrC,MAAM,GAAG,YAAY,MAAM,EAAE,CAAA;YAC7B,WAAW,GAAG,KAAK,CAAA;YACnB,OAAO,sBAAsB,MAAM,EAAE,CAAA;QACvC,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAA;IACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IAErC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAA;IAExG,MAAM,KAAK,GAA0E,EAAE,CAAA;IAEvF,kEAAkE;IAClE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACzD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACzD,MAAM,EAAE,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,OAAO,GAAG,OAAO,EAAE,CAAA;IAE/D,MAAM,aAAa,GAAG,GAAG,CAAC,cAAc,EAAE,CAAA;IAC1C,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAA;IAC1B,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAA;IAE5B,gDAAgD;IAChD,MAAM,IAAI,GAAG,SAAS,IAAI,SAAS,CAAA;IACnC,MAAM,QAAQ,GAAG,WAAW,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IAEnE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAA;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,IAAI,GAAG,cAAc,CACzB,EAAE,EACF,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,EAC3I,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CACvC,CAAA;QACD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAClF,IAAI,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE;YACtC,SAAS;YACT,WAAW;YACX,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,SAAS;YAChB,MAAM;YACN,QAAQ,EAAE,aAAa;YACvB,QAAQ;SACT,CAAC,CAAA;QACF,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,8CAA8C;IAC9C,IAAI,YAAY,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QACzC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QAE9B,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;QAChL,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE;YACvD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;YAC/C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAA;QACzD,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,IAAI,IAAI,CAAC,aAAa,IAAI,UAAU;YAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAEpE,sBAAsB;QACtB,IAAI,WAAW,GAAG,EAAE,CAAA;QACpB,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAA;YAChB,OAAO,CAAC,cAAc,IAAI,CAAC,MAAM,SAAS,CAAC,CAAA;YAE3C,WAAW,GAAG,MAAO,QAA6B,CAAC,eAAe,CAChE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAC7B,YAAY,CACb,CAAA;YAED,WAAW,GAAG,CAAC,CAAC,WAAW,CAAA;QAC7B,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACzD,IAAI,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAA;YACvC,WAAW,GAAG,qBAAqB,MAAM,EAAE,CAAA;QAC7C,CAAC;QAED,mCAAmC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3E,IAAI,UAAU,EAAE,CAAC;YACf,WAAW,CAAC,UAAU,CAAC,CAAA;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAE1D,6CAA6C;IAC/C,CAAC;SAAM,CAAC;QACN,wCAAwC;QACxC,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;QAChL,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE;YACvD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACxD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,IAAI,QAAQ,CAAA;YAC5C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;QAC5C,CAAC,EAAE,KAAK,CAAC,CAAA;QAET,IAAI,IAAI,CAAC,aAAa,IAAI,UAAU;YAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAEpE,IAAI,cAAc,GAAG,CAAC,CAAA;QAEtB,KAAK,UAAU,OAAO,CAAC,CAAS;YAC9B,IAAI,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;YAE1B,kEAAkE;YAClE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;gBAC5C,IAAI,OAAO,EAAE,CAAC;oBACZ,uDAAuD;oBACvD,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;gBAClC,CAAC;YACH,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,yCAAyC,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,CAAA;YACxE,CAAC;YAED,2BAA2B;YAC3B,MAAM,YAAY,GAAG,GAAG,EAAE,MAAM,EAAE,YAAY,IAAI,KAAK,CAAA;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;gBAChC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;YACnG,CAAC;YAED,IAAI,IAAI,GAAG,EAAE,CAAA;YACb,IAAI,CAAC;gBACH,SAAS,GAAG,IAAI,CAAA;gBAChB,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;gBACrD,WAAW,GAAG,WAAW,IAAI,CAAC,CAAC,IAAI,CAAA;YACrC,CAAC;YAAC,OAAO,CAAU,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBACzD,IAAI,CAAC,iBAAiB,CAAC,SAAS,MAAM,EAAE,CAAC,CAAA;YAC3C,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,eAAe,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;YACjG,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;gBACzD,WAAW,CAAC,UAAU,CAAC,CAAA;YACzB,CAAC;YACD,cAAc,EAAE,CAAA;YAChB,IAAI,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACtE,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;QACvB,MAAM,OAAO,GAAoB,EAAE,CAAA;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;gBACzB,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;oBACpB,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;oBACvB,IAAI,CAAC,CAAC;wBAAE,MAAK;oBACb,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;gBAClB,CAAC;YACH,CAAC,CAAC,EAAE,CAAA;YACJ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtB,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAE1B,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAA;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE;YACtC,SAAS;YACT,WAAW;YACX,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,SAAS;YAChB,MAAM;YACN,QAAQ,EAAE,aAAa;YACvB,QAAQ;YACR,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ;SAC3B,CAAC,CAAA;QACF,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import { Config } from '../config/types.js';
2
+ import type { AgentReviewInput, AgentReviewOptions, AgentProvider, AgentMessage } from '../agent/types.js';
3
+ import type { ToolDefinition, ToolCall } from '../agent/tools/types.js';
2
4
  export interface ReviewInput {
3
5
  prompt: string;
4
6
  diff: string;
@@ -6,9 +8,27 @@ export interface ReviewInput {
6
8
  export interface LLMProvider {
7
9
  review(input: ReviewInput): Promise<string>;
8
10
  }
11
+ export interface AgentLLMProvider extends LLMProvider, AgentProvider {
12
+ }
9
13
  export declare abstract class BaseLLMProvider implements LLMProvider {
10
14
  protected config: Config;
11
15
  constructor(config: Config);
12
16
  abstract review(input: ReviewInput): Promise<string>;
13
17
  protected buildUserPrompt(diff: string): string;
14
18
  }
19
+ export declare abstract class BaseAgentProvider extends BaseLLMProvider implements AgentLLMProvider {
20
+ /**
21
+ * Agent 模式审查
22
+ * 使用工具调用获取更多上下文
23
+ */
24
+ reviewWithAgent(input: AgentReviewInput, options: AgentReviewOptions): Promise<string>;
25
+ /**
26
+ * 带工具的 LLM 调用
27
+ * 子类必须实现此方法
28
+ */
29
+ protected abstract callLLMWithTools(messages: AgentMessage[], tools: ToolDefinition[]): Promise<{
30
+ content: string | null;
31
+ toolCalls: ToolCall[];
32
+ reasoning_content?: string;
33
+ }>;
34
+ }
package/dist/llm/base.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import { t } from '../locales/index.js';
2
+ import { createOrchestrator } from '../agent/orchestrator.js';
3
+ // ============ 基础 Provider 类 ============
2
4
  export class BaseLLMProvider {
3
5
  constructor(config) {
4
6
  this.config = config;
@@ -7,4 +9,17 @@ export class BaseLLMProvider {
7
9
  return t('prompt.userTemplate', { diff });
8
10
  }
9
11
  }
12
+ // ============ Agent Provider 基类 ============
13
+ export class BaseAgentProvider extends BaseLLMProvider {
14
+ /**
15
+ * Agent 模式审查
16
+ * 使用工具调用获取更多上下文
17
+ */
18
+ async reviewWithAgent(input, options) {
19
+ // 创建编排器
20
+ const orchestrator = createOrchestrator(this.config, this.callLLMWithTools.bind(this));
21
+ // 运行 Agent 循环
22
+ return orchestrator.run(input, options);
23
+ }
24
+ }
10
25
  //# sourceMappingURL=base.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/llm/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAA;AAWvC,MAAM,OAAgB,eAAe;IAGnC,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAIS,eAAe,CAAC,IAAY;QACpC,OAAO,CAAC,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;CACF"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/llm/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAA;AASvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAiB7D,0CAA0C;AAE1C,MAAM,OAAgB,eAAe;IAGnC,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAIS,eAAe,CAAC,IAAY;QACpC,OAAO,CAAC,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;CACF;AAED,8CAA8C;AAE9C,MAAM,OAAgB,iBAAkB,SAAQ,eAAe;IAE7D;;;OAGG;IACH,KAAK,CAAC,eAAe,CACnB,KAAuB,EACvB,OAA2B;QAE3B,QAAQ;QACR,MAAM,YAAY,GAAG,kBAAkB,CACrC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAoB,CACpD,CAAA;QAED,cAAc;QACd,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;CAcF"}
@@ -1,4 +1,16 @@
1
1
  import { Config } from '../config/types.js';
2
- import { LLMProvider } from './base.js';
2
+ import { LLMProvider, AgentLLMProvider } from './base.js';
3
3
  export * from './base.js';
4
+ /**
5
+ * 创建 LLM Provider(普通模式)
6
+ */
4
7
  export declare function createLLMProvider(config: Config): LLMProvider;
8
+ /**
9
+ * 创建支持 Agent 模式的 Provider
10
+ * 仅 DeepSeek 和 Zhipu 支持 Agent 模式
11
+ */
12
+ export declare function createAgentProvider(config: Config): AgentLLMProvider;
13
+ /**
14
+ * 检查 Provider 是否支持 Agent 模式
15
+ */
16
+ export declare function supportsAgent(provider: string): boolean;
package/dist/llm/index.js CHANGED
@@ -10,6 +10,11 @@ import { AliyunProvider } from './providers/aliyun.js';
10
10
  import { VolcengineProvider } from './providers/volcengine.js';
11
11
  import { ZhipuProvider } from './providers/zhipu.js';
12
12
  export * from './base.js';
13
+ // 支持 Agent 模式的 Provider 列表
14
+ const AGENT_SUPPORTED_PROVIDERS = ['deepseek', 'zhipu'];
15
+ /**
16
+ * 创建 LLM Provider(普通模式)
17
+ */
13
18
  export function createLLMProvider(config) {
14
19
  switch (config.provider) {
15
20
  case 'deepseek':
@@ -38,4 +43,24 @@ export function createLLMProvider(config) {
38
43
  throw new Error(`Unsupported provider: ${config.provider}`);
39
44
  }
40
45
  }
46
+ /**
47
+ * 创建支持 Agent 模式的 Provider
48
+ * 仅 DeepSeek 和 Zhipu 支持 Agent 模式
49
+ */
50
+ export function createAgentProvider(config) {
51
+ switch (config.provider) {
52
+ case 'deepseek':
53
+ return new DeepSeekProvider(config);
54
+ case 'zhipu':
55
+ return new ZhipuProvider(config);
56
+ default:
57
+ throw new Error(`Agent mode not supported for provider: ${config.provider}. Supported providers: ${AGENT_SUPPORTED_PROVIDERS.join(', ')}`);
58
+ }
59
+ }
60
+ /**
61
+ * 检查 Provider 是否支持 Agent 模式
62
+ */
63
+ export function supportsAgent(provider) {
64
+ return AGENT_SUPPORTED_PROVIDERS.includes(provider);
65
+ }
41
66
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,cAAc,WAAW,CAAA;AAEzB,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAA;QACrC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,KAAK,WAAW;YACd,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAA;QACtC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,KAAK,SAAS;YACZ,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;QACpC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,KAAK,aAAa;YAChB,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAA;QACxC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,KAAK,YAAY;YACf,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;QACvC,KAAK,OAAO;YACV,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;QAClC;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,cAAc,WAAW,CAAA;AAEzB,2BAA2B;AAC3B,MAAM,yBAAyB,GAAG,CAAC,UAAU,EAAE,OAAO,CAAU,CAAA;AAEhE;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAA;QACrC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,KAAK,WAAW;YACd,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAA;QACtC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,KAAK,SAAS;YACZ,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;QACpC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,KAAK,aAAa;YAChB,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAA;QACxC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,KAAK,YAAY;YACf,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;QACvC,KAAK,OAAO;YACV,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;QAClC;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAA;QACrC,KAAK,OAAO;YACV,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;QAClC;YACE,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,CAAC,QAAQ,0BAA0B,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9I,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAQ,yBAA+C,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC5E,CAAC"}
@@ -1,4 +1,22 @@
1
- import { BaseLLMProvider, ReviewInput } from '../base.js';
2
- export declare class DeepSeekProvider extends BaseLLMProvider {
1
+ import { BaseAgentProvider, ReviewInput } from '../base.js';
2
+ import type { AgentMessage } from '../../agent/types.js';
3
+ import type { ToolDefinition, ToolCall } from '../../agent/tools/types.js';
4
+ export declare class DeepSeekProvider extends BaseAgentProvider {
5
+ private client;
6
+ /**
7
+ * 获取或创建 OpenAI 客户端
8
+ */
9
+ private getClient;
10
+ /**
11
+ * 普通模式审查
12
+ */
3
13
  review(input: ReviewInput): Promise<string>;
14
+ /**
15
+ * 带工具的 LLM 调用(Agent 模式使用)
16
+ */
17
+ protected callLLMWithTools(messages: AgentMessage[], tools: ToolDefinition[]): Promise<{
18
+ content: string | null;
19
+ toolCalls: ToolCall[];
20
+ reasoning_content?: string;
21
+ }>;
4
22
  }
@@ -1,7 +1,17 @@
1
1
  import OpenAI from 'openai';
2
- import { BaseLLMProvider } from '../base.js';
3
- export class DeepSeekProvider extends BaseLLMProvider {
4
- async review(input) {
2
+ import { BaseAgentProvider } from '../base.js';
3
+ export class DeepSeekProvider extends BaseAgentProvider {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.client = null;
7
+ }
8
+ /**
9
+ * 获取或创建 OpenAI 客户端
10
+ */
11
+ getClient() {
12
+ if (this.client) {
13
+ return this.client;
14
+ }
5
15
  const opts = this.config.providerOptions?.deepseek;
6
16
  // Clean up baseURL to avoid issues with copy-pasted configs containing backticks
7
17
  const baseURL = (opts?.baseURL || 'https://api.deepseek.com').replace(/`/g, '').trim();
@@ -10,7 +20,15 @@ export class DeepSeekProvider extends BaseLLMProvider {
10
20
  if (!apiKey) {
11
21
  throw new Error(`Missing DeepSeek API key. Please set ${apiKeyEnv} in environment variables or configure 'apiKey' in .codegate.js`);
12
22
  }
13
- const client = new OpenAI({ baseURL, apiKey });
23
+ this.client = new OpenAI({ baseURL, apiKey });
24
+ return this.client;
25
+ }
26
+ /**
27
+ * 普通模式审查
28
+ */
29
+ async review(input) {
30
+ const client = this.getClient();
31
+ const opts = this.config.providerOptions?.deepseek;
14
32
  const model = opts?.model || 'deepseek-chat';
15
33
  const res = await client.chat.completions.create({
16
34
  model,
@@ -22,5 +40,72 @@ export class DeepSeekProvider extends BaseLLMProvider {
22
40
  });
23
41
  return res.choices?.[0]?.message?.content || '';
24
42
  }
43
+ /**
44
+ * 带工具的 LLM 调用(Agent 模式使用)
45
+ */
46
+ async callLLMWithTools(messages, tools) {
47
+ const client = this.getClient();
48
+ const opts = this.config.providerOptions?.deepseek;
49
+ const model = opts?.model || 'deepseek-chat';
50
+ // 检测是否使用 Reasoner 模型
51
+ const isReasonerModel = model.includes('reasoner');
52
+ // 转换消息格式
53
+ const openaiMessages = messages.map(m => {
54
+ if (m.role === 'tool') {
55
+ return {
56
+ role: 'tool',
57
+ content: m.content || '',
58
+ tool_call_id: m.tool_call_id
59
+ };
60
+ }
61
+ if (m.role === 'assistant' && m.tool_calls) {
62
+ const assistantMsg = {
63
+ role: 'assistant',
64
+ content: m.content,
65
+ tool_calls: m.tool_calls.map(tc => ({
66
+ id: tc.id,
67
+ type: 'function',
68
+ function: {
69
+ name: tc.name,
70
+ arguments: JSON.stringify(tc.arguments)
71
+ }
72
+ }))
73
+ };
74
+ // DeepSeek Reasoner 模型需要保留 reasoning_content
75
+ if (isReasonerModel && m.reasoning_content) {
76
+ assistantMsg.reasoning_content = m.reasoning_content;
77
+ }
78
+ return assistantMsg;
79
+ }
80
+ return {
81
+ role: m.role,
82
+ content: m.content || ''
83
+ };
84
+ });
85
+ // 调用 API
86
+ const response = await client.chat.completions.create({
87
+ model,
88
+ messages: openaiMessages,
89
+ tools: tools.length > 0 ? tools.map(t => ({
90
+ type: 'function',
91
+ function: t.function
92
+ })) : undefined,
93
+ tool_choice: tools.length > 0 ? 'auto' : undefined,
94
+ ...opts?.request
95
+ });
96
+ const message = response.choices?.[0]?.message;
97
+ // 解析工具调用
98
+ const toolCalls = (message?.tool_calls || []).map((tc) => ({
99
+ id: tc.id,
100
+ name: tc.function.name,
101
+ arguments: JSON.parse(tc.function.arguments || '{}')
102
+ }));
103
+ return {
104
+ content: message?.content || null,
105
+ toolCalls,
106
+ // DeepSeek Reasoner 模型会返回 reasoning_content
107
+ reasoning_content: message?.reasoning_content
108
+ };
109
+ }
25
110
  }
26
111
  //# sourceMappingURL=deepseek.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deepseek.js","sourceRoot":"","sources":["../../../src/llm/providers/deepseek.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAe,MAAM,YAAY,CAAA;AAEzD,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IACnD,KAAK,CAAC,MAAM,CAAC,KAAkB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAA;QAClD,iFAAiF;QACjF,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,0BAA0B,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QACtF,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,kBAAkB,CAAA;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,MAAM,CAAA;QAErD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,iEAAiE,CAAC,CAAA;QACrI,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,eAAe,CAAA;QAE5C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAC/C,KAAK;YACL,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;aAC5D;YACD,GAAG,IAAI,EAAE,OAAO;SACjB,CAAC,CAAA;QAEF,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAA;IACjD,CAAC;CACF"}
1
+ {"version":3,"file":"deepseek.js","sourceRoot":"","sources":["../../../src/llm/providers/deepseek.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,22 @@
1
- import { BaseLLMProvider, ReviewInput } from '../base.js';
2
- export declare class ZhipuProvider extends BaseLLMProvider {
1
+ import { BaseAgentProvider, ReviewInput } from '../base.js';
2
+ import type { AgentMessage } from '../../agent/types.js';
3
+ import type { ToolDefinition, ToolCall } from '../../agent/tools/types.js';
4
+ export declare class ZhipuProvider extends BaseAgentProvider {
5
+ private client;
6
+ /**
7
+ * 获取或创建 OpenAI 客户端
8
+ */
9
+ private getClient;
10
+ /**
11
+ * 普通模式审查
12
+ */
3
13
  review(input: ReviewInput): Promise<string>;
14
+ /**
15
+ * 带工具的 LLM 调用(Agent 模式使用)
16
+ */
17
+ protected callLLMWithTools(messages: AgentMessage[], tools: ToolDefinition[]): Promise<{
18
+ content: string | null;
19
+ toolCalls: ToolCall[];
20
+ reasoning_content?: string;
21
+ }>;
4
22
  }