🔧 fix(vscode): worktree 目录配置改用插件自带设置面板,撤销 VS Code 原生配置

上一版误把 worktree 目录模板注册成 VS Code 原生设置(contributes.configuration
+ workspace.getConfiguration),但本插件有自己的设置面板(SettingsModal,存 globalState)。
改为:
- Settings 新增 worktreeDirectory 字段(默认 ~/Sources/worktree/$project_name/$feature_name,
  留空回退默认),贯穿 store/handler/两端 messages/useIssues/App/SettingsModal
- SettingsModal「钩子」分组新增「工作树目录」输入项,走既有 save/load 流程
- handleImplement 改从 getSettings(panel.context).worktreeDirectory 读模板
- 删除 package.json 的 contributes.configuration(meta.ts 为 gitignore 生成物,已本地还原)

deriveSlug / resolveWorktreeDir / ~ 展开 / 绝对路径 / feature/<slug> 逻辑不变。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-24 02:56:33 +08:00
co-authored by Claude Opus 4.7
parent 11ea6b345c
commit 9a69aeed48
10 changed files with 74 additions and 13 deletions
+1
View File
@@ -445,6 +445,7 @@ export function App() {
initialReviewPrompt={settings?.reviewPrompt ?? ''}
initialDevBranch={settings?.devBranch ?? 'main'}
initialAutoBuildBranch={settings?.autoBuildBranch ?? ''}
initialWorktreeDirectory={settings?.worktreeDirectory ?? ''}
initialWorktreePostCreateScript={settings?.worktreePostCreateScript ?? ''}
initialWorktreePreRemoveScript={settings?.worktreePreRemoveScript ?? ''}
initialImplTabPreCreateScript={settings?.implTabPreCreateScript ?? ''}
@@ -23,6 +23,7 @@ interface SubmitValues {
reviewPrompt: string
devBranch: string
autoBuildBranch: string
worktreeDirectory: string
worktreePostCreateScript: string
worktreePreRemoveScript: string
implTabPreCreateScript: string
@@ -59,6 +60,7 @@ export interface SettingsModalProps {
initialReviewPrompt: string
initialDevBranch: string
initialAutoBuildBranch: string
initialWorktreeDirectory: string
initialWorktreePostCreateScript: string
initialWorktreePreRemoveScript: string
initialImplTabPreCreateScript: string
@@ -128,6 +130,7 @@ export function SettingsModal({
initialReviewPrompt,
initialDevBranch,
initialAutoBuildBranch,
initialWorktreeDirectory,
initialWorktreePostCreateScript,
initialWorktreePreRemoveScript,
initialImplTabPreCreateScript,
@@ -151,6 +154,7 @@ export function SettingsModal({
const [reviewPrompt, setReviewPrompt] = useState(initialReviewPrompt)
const [devBranch, setDevBranch] = useState(initialDevBranch)
const [autoBuildBranch, setAutoBuildBranch] = useState(initialAutoBuildBranch)
const [worktreeDirectory, setWorktreeDirectory] = useState(initialWorktreeDirectory)
const [worktreePostCreateScript, setWorktreePostCreateScript] = useState(initialWorktreePostCreateScript)
const [worktreePreRemoveScript, setWorktreePreRemoveScript] = useState(initialWorktreePreRemoveScript)
const [implTabPreCreateScript, setImplTabPreCreateScript] = useState(initialImplTabPreCreateScript)
@@ -252,6 +256,8 @@ export function SettingsModal({
reviewPrompt,
devBranch: devBranch.trim(),
autoBuildBranch: autoBuildBranch.trim(),
// worktree 目录模板:trim 后留空 = 用默认模板(getSettings 读时回退)
worktreeDirectory: worktreeDirectory.trim(),
// 钩子路径保持原样 trim(前后空格无意义;空串 = 用默认 .spx/*.sh
worktreePostCreateScript: worktreePostCreateScript.trim(),
worktreePreRemoveScript: worktreePreRemoveScript.trim(),
@@ -605,6 +611,37 @@ export function SettingsModal({
{activeGroup === 'hooks' && (
<>
<Field
label="工作树目录"
hint={(
<>
Plan worktree
{' '}
<code>$project_root</code>
<code>$project_name</code>
<code>$feature_name</code>
spec/plan slug
{' '}
<code>~</code>
{' '}
=
{' '}
<code>~/Sources/worktree/$project_name/$feature_name</code>
</>
)}
>
<input
type="text"
value={worktreeDirectory}
onChange={e => setWorktreeDirectory(e.target.value)}
placeholder="~/Sources/worktree/$project_name/$feature_name"
className={inputClass}
/>
</Field>
<Field
label="worktree 创建后脚本"
hint={(
+4
View File
@@ -33,6 +33,7 @@ export interface SettingsValues {
reviewPrompt: string
devBranch: string
autoBuildBranch: string
worktreeDirectory: string
worktreePostCreateScript: string
worktreePreRemoveScript: string
implTabPreCreateScript: string
@@ -55,6 +56,7 @@ export interface SettingsOverlayState {
reviewPrompt: string
devBranch: string
autoBuildBranch: string
worktreeDirectory: string
worktreePostCreateScript: string
worktreePreRemoveScript: string
implTabPreCreateScript: string
@@ -265,6 +267,7 @@ export function useIssues(): UseIssuesResult {
reviewPrompt: values.reviewPrompt,
devBranch: values.devBranch,
autoBuildBranch: values.autoBuildBranch,
worktreeDirectory: values.worktreeDirectory,
worktreePostCreateScript: values.worktreePostCreateScript,
worktreePreRemoveScript: values.worktreePreRemoveScript,
implTabPreCreateScript: values.implTabPreCreateScript,
@@ -590,6 +593,7 @@ export function useIssues(): UseIssuesResult {
reviewPrompt: msg.reviewPrompt,
devBranch: msg.devBranch,
autoBuildBranch: msg.autoBuildBranch,
worktreeDirectory: msg.worktreeDirectory,
worktreePostCreateScript: msg.worktreePostCreateScript,
worktreePreRemoveScript: msg.worktreePreRemoveScript,
implTabPreCreateScript: msg.implTabPreCreateScript,
+2
View File
@@ -76,6 +76,7 @@ export type ExtensionToWebview
reviewPrompt: string
devBranch: string
autoBuildBranch: string
worktreeDirectory: string
worktreePostCreateScript: string
worktreePreRemoveScript: string
implTabPreCreateScript: string
@@ -130,6 +131,7 @@ export type WebviewToExtension
reviewPrompt: string
devBranch: string
autoBuildBranch: string
worktreeDirectory: string
worktreePostCreateScript: string
worktreePreRemoveScript: string
implTabPreCreateScript: string