|
1 | 1 | import { reactive, computed } from 'vue' |
2 | 2 | import type { AgentTask, LogEntry } from '../types' |
3 | 3 | import { isTauri, execGit, execCommand, killProcess } from '../api/ipc' |
| 4 | +import { createPullRequest, mergePullRequest, hasToken } from '../api/github' |
4 | 5 |
|
5 | 6 | const generateId = () => Math.random().toString(36).substring(2, 10) |
6 | 7 |
|
@@ -218,19 +219,44 @@ export function useSwarmStore() { |
218 | 219 | } |
219 | 220 | } |
220 | 221 |
|
221 | | - task.status = 'reviewing' |
222 | | - task.prStatus = 'open' |
223 | | - task.prNumber = Math.floor(Math.random() * 100) + 1 |
224 | | - task.prUrl = `https://github.com/HelloWorldU/Kimi-Code-Swarm/pull/${task.prNumber}` |
225 | | - task.logs.push({ id: generateId(), timestamp: new Date(), type: 'system', content: `PR #${task.prNumber} 已创建(${isTauri ? '真实' : '模拟'})` }) |
| 222 | + if (hasToken()) { |
| 223 | + try { |
| 224 | + const pr = await createPullRequest(task.repoUrl, `feat: ${task.name}`, task.branch) |
| 225 | + task.status = 'reviewing' |
| 226 | + task.prStatus = 'open' |
| 227 | + task.prNumber = pr.number |
| 228 | + task.prUrl = pr.html_url |
| 229 | + task.logs.push({ id: generateId(), timestamp: new Date(), type: 'system', content: `PR #${pr.number} 已创建: ${pr.html_url}` }) |
| 230 | + } catch (err) { |
| 231 | + task.logs.push({ id: generateId(), timestamp: new Date(), type: 'error', content: `创建 PR 失败: ${String(err)}` }) |
| 232 | + } |
| 233 | + } else { |
| 234 | + task.status = 'reviewing' |
| 235 | + task.prStatus = 'open' |
| 236 | + task.prNumber = Math.floor(Math.random() * 100) + 1 |
| 237 | + task.prUrl = `${task.repoUrl.replace(/\.git$/, '')}/pull/${task.prNumber}` |
| 238 | + task.logs.push({ id: generateId(), timestamp: new Date(), type: 'system', content: `PR #${task.prNumber} 已创建(模拟,未配置 GitHub Token)` }) |
| 239 | + } |
226 | 240 | } |
227 | 241 |
|
228 | | - function mergePr(id: string) { |
| 242 | + async function mergePr(id: string) { |
229 | 243 | const task = state.tasks.find(t => t.id === id) |
230 | 244 | if (!task || task.status !== 'reviewing') return |
231 | | - task.status = 'completed' |
232 | | - task.prStatus = 'merged' |
233 | | - task.logs.push({ id: generateId(), timestamp: new Date(), type: 'system', content: `PR #${task.prNumber} 已合并到 main` }) |
| 245 | + |
| 246 | + if (hasToken() && task.prNumber) { |
| 247 | + try { |
| 248 | + await mergePullRequest(task.repoUrl, task.prNumber) |
| 249 | + task.status = 'completed' |
| 250 | + task.prStatus = 'merged' |
| 251 | + task.logs.push({ id: generateId(), timestamp: new Date(), type: 'system', content: `PR #${task.prNumber} 已合并到 main` }) |
| 252 | + } catch (err) { |
| 253 | + task.logs.push({ id: generateId(), timestamp: new Date(), type: 'error', content: `合并失败: ${String(err)}` }) |
| 254 | + } |
| 255 | + } else { |
| 256 | + task.status = 'completed' |
| 257 | + task.prStatus = 'merged' |
| 258 | + task.logs.push({ id: generateId(), timestamp: new Date(), type: 'system', content: `PR #${task.prNumber} 已合并到 main(模拟)` }) |
| 259 | + } |
234 | 260 | } |
235 | 261 |
|
236 | 262 | function rejectPr(id: string) { |
|
0 commit comments