🐛 fix(vscode): 恢复实施会话改按显式角色命名,worktree 清理后不再误标为规划

Claude-Session: https://claude.ai/code/session_012YFEAU7RsuCdinUNMS9tzv
This commit is contained in:
cruldra committed 2026-09-09 10:41:04 +08:00
1 parent 1fee0f2630
commit e8963ac2a2
11 files changed
+116 -61

No files matched your search

+39
View File
@@ -0,0 +1,39 @@
/**
* 实施 / 规划会话 resume 的落点决策。纯函数,不碰 vscode API,便于单测。
*
* 角色由调用方明确传入,不从「有没有 cwd」反推:worktree 被清理后
* 工单里的 worktreePath 会清空,靠 cwd 推断会把实施会话误判成规划。
*/
export type ResumeKind = 'implement' | 'brainstorm'
export function resumeSessionRole(kind: ResumeKind): '实施' | '规划' {
return kind === 'implement' ? '实施' : '规划'
}
export function resumeTerminalName(kind: ResumeKind, sessionId: string, issueNumber?: number): string {
return issueNumber !== undefined
? `issue-${issueNumber}-${resumeSessionRole(kind)}`
: `Claude · ${sessionId.slice(0, 8)}`
}
export interface ResumeCwdInput {
kind: ResumeKind
workspaceRoot: string
/** 已解析成绝对路径的 worktree;工单没记就 undefined */
worktreeAbs?: string
worktreeExists: boolean
}
export interface ResumeCwdPlan {
cwd: string
/** 实施会话但 worktree 已不在磁盘上(含工单里没记 worktreePath 的情况) */
worktreeMissing: boolean
}
export function planResumeCwd(input: ResumeCwdInput): ResumeCwdPlan {
if (input.kind !== 'implement')
return { cwd: input.workspaceRoot, worktreeMissing: false }
if (input.worktreeAbs && input.worktreeExists)
return { cwd: input.worktreeAbs, worktreeMissing: false }
return { cwd: input.workspaceRoot, worktreeMissing: true }
}