feat(vscode): 「改动」tab 重做为整 PR 聚合的主从式内联 diff(git-diff-view)

- 左树右 diff:左栏全 PR 文件树 + 统计条(共改 N · +X−Y · 已查看 M/N),右栏选中单文件内联 diff
- 用 @git-diff-view/react 只渲染当前选中文件,绕开上万行全量渲染的性能坑
- gitea 新增 listPullRequestFiles、getPullRequest 取 merge_base/head,按需回两版原文
- diff 走 merge_base→head 三点口径(与 Gitea 网页一致),getRawFile 404 兜底成全增/全删/改名
- 已查看态按 head sha 落盘、新 push 自然重置;去掉提交列表、原生 diff 与 spx-gitea 虚拟文档 provider
This commit is contained in:
2026-06-29 10:52:36 +08:00
parent ceea62ed16
commit fb505d59c5
18 changed files with 1149 additions and 1127 deletions
+7 -17
View File
@@ -26,7 +26,7 @@ import { webhookCoordinator } from '../webhook/coordinator'
import { loadYouTrackIssues } from '../youtrack/issueLoader'
import * as issues from './handlers/issues'
import * as managedSessions from './handlers/managedSessions'
import * as prCommits from './handlers/prCommits'
import * as prFiles from './handlers/prFiles'
import * as sessions from './handlers/sessions'
import * as settings from './handlers/settings'
import * as terminals from './handlers/terminals'
@@ -546,30 +546,20 @@ export class KanbanWebviewPanel {
managedSessions.handleManagedSessionsCloseTab(this, msg.sessionId)
return
}
if (msg.type === 'pr-commits/get') {
void prCommits.handleGetPrCommits(this, msg.issueNumber)
if (msg.type === 'pr-files/get') {
void prFiles.handleGetPrFiles(this, msg.issueNumber)
return
}
if (msg.type === 'pr-commit-files/get') {
void prCommits.handleGetPrCommitFiles(this, msg.issueNumber, msg.sha)
return
}
if (msg.type === 'pr-commit-diff/open') {
void prCommits.handleOpenPrCommitDiff(this, {
if (msg.type === 'pr-file-diff/get') {
void prFiles.handleGetPrFileDiff(this, {
issueNumber: msg.issueNumber,
sha: msg.sha,
parentSha: msg.parentSha,
path: msg.path,
status: msg.status,
previousPath: msg.previousPath,
})
return
}
if (msg.type === 'pr-review/set') {
void prCommits.handleSetPrReviewConfirmed(this, msg)
return
}
if (msg.type === 'pr-review/set-commits') {
void prCommits.handleSetPrReviewConfirmedCommits(this, msg)
void prFiles.handleSetPrReviewConfirmed(this, msg)
return
}
}