♻️ refactor(vscode): 代码托管仓库抽成统一接口,Gitea 实现搬到 provider 后面,翻页改看 Link 头

This commit is contained in:
cruldra committed 2026-10-19 07:56:40 +11:00
1 parent c90d84d7f2
commit 14bee9f505
64 files changed
+1881 -2718

No files matched your search

+7 -15
View File
@@ -2,8 +2,7 @@ import type { HookContext } from '../../git/worktreeHooks'
import type { KanbanWebviewPanel } from '../KanbanPanel'
import { execFile } from 'node:child_process'
import { commands, Uri, window, workspace } from 'vscode'
import { getToken } from '../../auth/secrets'
import { detectRepo } from '../../git/remote'
import { resolveForge } from '../../forge/context'
import { expandTilde, killProcessesUsingWorktree, removeWorktreeDir, resolveWorktreePath } from '../../git/worktree'
import {
runImplTabPostCloseHook,
@@ -130,17 +129,15 @@ export async function handleDeleteWorktree(panel: KanbanWebviewPanel, issueNumbe
console.warn('[superpowers] failed to clear worktree state JSON:', err)
}
// 连同 feature 分支一起删(本地 + 远程,best-effort)。受保护分支跳过、缺 token 只删本地,
// 连同 feature 分支一起删(本地 + 远程,best-effort)。受保护分支跳过、解析不出代码托管仓库只删本地,
// 逻辑与「拖到完成」共用同一个 cleanupFeatureBranch。
const remote = await detectRepo(workspaceRoot)
const token = remote ? await getToken(panel.context, remote.host) : undefined
const resolved = await resolveForge(panel.context)
await cleanupFeatureBranch({
workspaceRoot,
branch,
issueNumber,
devBranch: settingsForHook.devBranch,
remote: remote ? { host: remote.host, owner: remote.owner, repo: remote.repo } : undefined,
token,
forge: resolved.ok ? resolved.forge : undefined,
})
// null 才能过 postMessage 序列化;undefined 会被丢掉,webview 合并不清字段
@@ -299,15 +296,10 @@ export async function dispatchWorktreeHook(
*/
export async function dispatchImplTabPostCloseAsync(panel: KanbanWebviewPanel, issueNumber: number): Promise<void> {
try {
const workspaceRoot = workspace.workspaceFolders?.[0]?.uri.fsPath
if (!workspaceRoot)
return
const remote = await detectRepo(workspaceRoot)
if (!remote)
return
const token = await getToken(panel.context, remote.host)
if (!token)
const resolved = await resolveForge(panel.context)
if (!resolved.ok)
return
const { workspaceRoot } = resolved.forge
const stateObj = await panel.readIssueState(issueNumber)
const branch = typeof stateObj.branch === 'string' ? stateObj.branch : ''
const wt = typeof stateObj.worktreePath === 'string' ? stateObj.worktreePath : ''