🐛 fix(vscode): 修复看板缓存并增加问答默认模型

This commit is contained in:
cruldra committed 2026-10-09 17:00:43 -04:00
1 parent c38f1dc468
commit 012daf95b5
25 files changed
+1753 -164

No files matched your search

+24 -2
View File
@@ -11,12 +11,13 @@
* a field.
*/
import type { ExtensionContext } from 'vscode'
import type { Disposable, ExtensionContext } from 'vscode'
import type { MigrationNote } from './promptMigration'
import { EventEmitter } from 'node:events'
import { copyFileSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs'
import path from 'node:path'
import { seedCommitProfilePath } from '../cc/commitProfile'
import { listClaudeProfiles } from '../cc/profiles'
import { listClaudeProfiles, setProfilesDirOverride } from '../cc/profiles'
import { normalizeReleasePrefix } from '../git/release'
import { PREVIOUS_DEFAULT_REVIEW_PROMPT } from './previousReviewPrompt'
import { planPromptMigration, planReviewPromptMigration } from './promptMigration'
@@ -210,6 +211,7 @@ export interface Settings {
defaultTestProfilePath: string
/** 原型会话的默认 Claude profile;工单级「原型配置文件」为空时用它。 */
defaultPrototypeProfilePath: string
defaultAskProfilePath: string
/**
* Claude settings profile path for the conflict-resolution cc session
* (drag to 完成 when PR merge conflicts). Empty = DEFAULT_PROFILE_PATH.
@@ -314,6 +316,7 @@ function defaults(ctx: ExtensionContext): Settings {
defaultImplementProfilePath: '',
defaultTestProfilePath: '',
defaultPrototypeProfilePath: '',
defaultAskProfilePath: '',
conflictResolutionProfilePath: '',
commitProfilePath: '',
prDiffSummaryProfilePath: '',
@@ -429,6 +432,9 @@ export function getSettings(ctx: ExtensionContext): Settings {
const defaultPrototypeProfilePath = typeof stored.defaultPrototypeProfilePath === 'string'
? stored.defaultPrototypeProfilePath
: base.defaultPrototypeProfilePath
const defaultAskProfilePath = typeof stored.defaultAskProfilePath === 'string'
? stored.defaultAskProfilePath.trim()
: base.defaultAskProfilePath
// conflict-resolution profile: '' is meaningful (= DEFAULT_PROFILE_PATH at
// launch time), so don't coerce. Non-string legacy values collapse to ''.
const conflictResolutionProfilePath = typeof stored.conflictResolutionProfilePath === 'string'
@@ -489,6 +495,7 @@ export function getSettings(ctx: ExtensionContext): Settings {
defaultImplementProfilePath,
defaultTestProfilePath,
defaultPrototypeProfilePath,
defaultAskProfilePath,
conflictResolutionProfilePath,
commitProfilePath,
prDiffSummaryProfilePath,
@@ -524,9 +531,24 @@ export async function getEffectivePrDiffSummaryProfilePath(ctx: ExtensionContext
return seedCommitProfilePath(undefined, profiles)
}
const settingsChanges = new EventEmitter()
export function onDidChangeSettings(ctx: ExtensionContext, listener: () => void): Disposable {
const key = settingsFilePath(ctx)
settingsChanges.on(key, listener)
return {
dispose: () => {
settingsChanges.off(key, listener)
},
}
}
export async function saveSettings(ctx: ExtensionContext, next: Partial<Settings>): Promise<void> {
const merged: Partial<Settings> = { ...readStoredSettings(ctx), ...next }
writeStoredSettings(ctx, merged)
if (next.profilesDirectory !== undefined)
setProfilesDirOverride(next.profilesDirectory.trim() || undefined)
settingsChanges.emit(settingsFilePath(ctx))
}
/**