Commit Graph
35 Commits
Author SHA1 Message Date
cruldra 0d79cb7c73 11 2026-07-31 08:20:42 +08:00
cruldra 0d078e848c 11 2026-07-31 06:52:09 +08:00
cruldra 532f9e09b5 feat(vscode): 设置面板支持 brainstorm 续聊提示词并切换 grill-with-docs 2026-07-31 06:50:38 +08:00
cruldra d68603ee06 🐛 fix(vscode): 改动 tab 默认统一视图并保留阅读位置 2026-07-25 11:08:48 +08:00
cruldra 84a5cda8d2 feat(vscode): 提交代码按钮可配置 Claude profile 2026-07-25 07:29:05 +08:00
cruldra e9543d37ce 🐛 fix(vscode): 导入/恢复会话时从 transcript 推断 profilePath 2026-07-25 01:59:22 +08:00
cruldra 45b2a7797d feat(vscode): 新增会话 transcript 推断 profilePath 纯模块 2026-07-25 01:57:05 +08:00
cruldra 8d00676bba 11 2026-07-24 14:26:56 +08:00
cruldra dc522064ce feat(vscode): 会话管理支持导入已 /rename 的命名会话 2026-07-24 00:12:28 +08:00
cruldra 7c67d220db feat(vscode): 设置面板可配置 Claude profiles 目录并修正探测顺序 2026-07-23 21:52:53 +08:00
cruldra a3e557f9ee ♻️ refactor(vscode): 对齐 state schema 与 knownStateFields 漂移 2026-07-16 01:55:35 +08:00
cruldra b45257a38d 🐛 fix(vscode): resume 会话用 resolveWorktreePath 避免误判 worktree 已清理 2026-07-16 01:51:08 +08:00
cruldra aff4ee2758 🐛 fix(vscode): 删 worktree 前扫 /proc 检测进程占用,命中则中止清理
dev server 常驻在 worktree 里持续写构建产物,递归删除与写入竞态导致
rmdir 撞 ENOTEMPTY。新增 findProcessesUsingWorktree 扫 /proc 找 cwd 或
fd 落在 worktree 下的进程,三处删除调用点(拖到完成列 / 手动删 / 删整工单)
命中即弹错误 toast 列出 pid+命令并中止(不删、不杀进程),用户停掉后重试。
非 Linux 无 /proc 返回空,降级为原直接删除。
2026-07-13 09:26:23 +08:00
cruldra b585016cd7 feat(vscode): 头脑风暴 profile 独立 + codex 命令统一组装收尾
- 头脑风暴/实施/测试会话 profile 彻底独立,互不回退,各自空值回落默认
- 新建工单弹窗的 profile 选择改为头脑风暴专用 brainstormProfilePath
- 详情面板新增「头脑风暴配置文件」下拉
- 删除从未接线的死代码 reviewFlow.ts(runReview 全仓库无调用方)
- codexCommand 精简为仅 resume/interactive 两种终端命令形态
- 版本号 0.2.55 → 0.2.60
2026-07-13 07:50:39 +08:00
cruldra 5188c23765 feat(vscode): codex 命令统一组装,模型/思考级别可在设置面板配置
新增 cc/codexCommand.ts 作为 codex 调用的唯一出口(buildCodexArgs /
buildCodexCommandString),把 exec-review / resume / interactive 三种形态
的 flag 拼装收敛到一处;模型与思考级别作为自由文本项写入全局设置并贯穿
webview 消息通道,空值则不传 -c,沿用 codex config.toml 默认。
2026-07-13 06:43:58 +08:00
cruldra aff99c57f3 ♻️ refactor(vscode): PR 文件说明改为一句话概述改动
已缓存的 `.spx/pr-file-summaries.json` 旧长文不会自动刷新,需重新点  生成。
2026-07-09 08:47:12 +08:00
cruldra 7b4f737ce5 feat(vscode): 冲突解决会话 profile 可在设置面板配置 2026-07-09 08:41:58 +08:00
cruldra 38f15a6fe1 🐛 fix(vscode): resume 测试会话时按 testProfilePath 解析 settings 2026-07-09 08:17:23 +08:00
cruldra f39e61aa7f feat(vscode): 手动删除 worktree 时连同 feature 分支一起删(本地+远程)
抽出共享 cleanupFeatureBranch(handlers/branchCleanup.ts):受保护分支跳过、
远程走 gitea API、本地强删(git branch -D),全程 best-effort 只记日志。
「拖到完成」的分支清理改为复用它(71 行 → 12 行);handleDeleteWorktree 在
删完 worktree 目录后同样调用它,确认框与完成提示带上分支名。

放在 handlers 层而非 git/branchSync.ts:后者刻意不依赖 vscode(有单测覆盖
deleteLocalBranch),本函数需 logger(→vscode)+ gitea API。
2026-07-08 19:05:48 +08:00
cruldra 045e203590 🔖 chore(vscode): 版本号 0.2.54 → 0.2.55 2026-07-08 11:51:19 +08:00
cruldra 75cbe3c515 feat(vscode): 测试会话提示词改用 /pr-acceptance-testing 斜杠命令 2026-07-08 11:51:19 +08:00
cruldra 235cd9ea65 🐛 fix(vscode): worktree 清理改 rm -rf + prune,绕开 gitignored 产物导致的目录非空
git worktree remove 只删跟踪文件+admin 注册,不删 .next/node_modules 等 gitignored 产物,删完残留把目录撑住、最后 rmdir 撞 ENOTEMPTY。新增 removeWorktreeDir(带路径护栏的递归强删 + git worktree prune),替换 3 处 worktree remove 调用点。
2026-07-08 11:48:23 +08:00
cruldra cace658ac1 feat(vscode): profile 值编辑器改为多行+图片粘贴(图片落 .spx/profile-assets)
双击 profile 值单元格改为打开富编辑弹窗:多行 textarea + Ctrl+V 粘贴截图,
⌘/Ctrl+Enter 或点遮罩保存、Esc 取消。值仍是单个字符串,图片存磁盘
(内容寻址 sha1 命名,去重),值里只留 markdown 引用,不撑大 profiles.json。
折叠单元格显示首行 + 含图时加 🖼 徽标。key/列头仍走原内联输入。

- 抽公用 lib/imagePaste:同步探测(preventDefault) + 异步读取,新建工单改用它、行为不变
- 新增扩展侧 profileAssets handler:存图(image/* 校验)/读图(挡路径穿越)
- 新增 useProfileAssets(requestId 关联并发) 与 ProfileCellEditor 弹窗
- 消息两侧同步 profile-asset/save|load|saved|loaded
2026-07-03 16:55:40 +08:00
cruldra 35085f72f7 ♻️ fix(vscode): 「已查看」改为按文件变更指纹失效,PR 新 push 只摘变动文件的勾
原先按 head sha 存已查看,作者一推新提交 head sha 变了,全部勾一起清空——
哪怕只改了一个文件也把没动的勾全冲掉。改成 GitHub「Viewed」式的内容感知:
按每个文件的变更指纹 (status|additions|deletions) 存,拉文件时与当前指纹比对,
只有真改动过的文件掉勾,没动的保留;比对后顺手剪掉盘上失配/消失的条目。

Gitea 的 ChangedFile 不返回 blob sha、compare 端点也不支持任意 commit sha,
故用上述三元组作指纹(文件一改几乎必变其一),零额外请求。

- prReviewStore: 形状改为 issueNumber → {path: sig},导出 read/writeConfirmedSigs
- prFiles: handleGetPrFiles 按指纹过滤+剪枝,顺带去掉不再需要的 getPullRequest 调用
- 消息 pr-files/show 去掉无人消费的 headSha/mergeBase;pr-review/set 改发 {path: sig}
- usePrFiles: 删 headSha,setConfirmed 把路径映射成指纹再发
2026-06-29 16:55:11 +08:00
cruldra bd8ba714b3 ✏️ fix(vscode): 改动说明 prompt 改问「为什么改+不改的后果」并垫入 PR 描述 2026-06-29 15:37:51 +08:00
cruldra 8c5cc90eda feat(vscode): 「改动」面板加审查勾 + deepseek 增量生成文件改动说明
右栏 diff 头部加一组按钮:
- 审查对勾:与左树同一状态源,勾上则文件路径标题置灰
-  一键调 deepseek 生成该文件「一句话改动目的」

增量复用会话:首个文件开新 cc 会话并把 sessionId 记到
.spx/pr-file-summaries.json,后续文件 --resume 接上去,省去每次重新
理解 PR 的开销;resume 失败则丢弃旧 id 重开一次。说明也落盘(跨 push
保留),重载后仍显示。

- spawnClaude 增 resumeSessionId(--resume)
- 新增 prFileSummaryStore;handler handleGeneratePrFileSummary
  用 jsdiff 拼 unified diff 喂模型
- 依赖 diff(jsdiff)
2026-06-29 15:24:43 +08:00
cruldra fb505d59c5 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
2026-06-29 10:52:36 +08:00
cruldra ceea62ed16 feat(vscode): 测试会话提示词改为模拟真实用户对 PR 功能做 e2e 测试 2026-06-27 21:41:01 +08:00
cruldraandClaude Opus 4.8 7be4e38620 ♻️ refactor(vscode): claude 会话命令收口到 buildCcCommand 并移除已卸载的 serena --system-prompt
9 处手拼的 claude 启动命令(managedSessions/sessions/issues)统一改用新增的
cc/ccCommand.ts:buildCcCommand({ profilePath, effort?, resumeSessionId?, prompt? }),
去掉各处重复的 --system-prompt="$(serena prompts ...)"(serena 已卸载)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 00:57:29 +08:00
cruldraandClaude Opus 4.7 02b0aca891 feat(vscode): PyCharm 启动命令可配置(支持 ~/绝对路径),抽 expandTilde 复用
GUI 启动的 VS Code 扩展进程 PATH 常不含 JetBrains 启动器,裸 pycharm 易 ENOENT。
新增设置 pycharmCommand(默认 pycharm),贯穿 store/settings handler/messages/
KanbanPanel 与 webview,「钩子」分组在选 PyCharm 时显示「PyCharm 启动命令」输入框。
handleOpenWorktree 用该命令并经 expandTilde 展开 ~。expandTilde 从 resolveWorktreePath
抽出共用。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-24 05:29:19 +08:00
cruldraandClaude Opus 4.7 cacc60eb0e feat(vscode): worktree 打开方式可选 VS Code/PyCharm,并修复 handleOpenWorktree 不展开 ~ 的打开报错
- worktree.ts: handleOpenWorktree/handleDeleteWorktree/dispatchImplTabPostCloseAsync 三处改用 resolveWorktreePath,修复带 ~ 的存量路径被拼成 <工作区>/~/... 导致打不开
- 新增全局设置 worktreeOpenWith('vscode' | 'pycharm',默认 vscode),贯穿 store/settings handler/messages/KanbanPanel 与 webview 的 messages/useIssues/App/SettingsModal「钩子」分组新增「工作树打开方式」下拉
- handleOpenWorktree 按设置分支:pycharm 走 JetBrains pycharm 启动器,ENOENT 时提示启用命令行启动器

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-24 05:20:22 +08:00
cruldraandClaude Opus 4.7 5e7a3d20d9 🐛 fix(vscode): worktreePath 消费侧统一解析 ~/绝对/相对,修复带 ~ 的存量工单与绝对路径 worktree 误判
新增 resolveWorktreePath(stored, workspaceRoot) 三态合一解析:开头 ~ 展开为 home、
已是绝对原样、相对拼到 workspaceRoot。替换全部消费点,原先「判 isAbsolute 再 join」
不认 ~、issueLoader 算 worktreeExists 更是裸 join 连绝对路径都拼坏。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-24 03:01:08 +08:00
cruldraandClaude Opus 4.7 9a69aeed48 🔧 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>
2026-06-24 02:56:33 +08:00
cruldraandClaude Opus 4.7 11ea6b345c feat(vscode): worktree 改建到 ~/Sources/worktree/<项目>/<slug>,接线 superpowers.worktreeDirectory 配置
实施流程不再硬编码 .claude/worktrees/<hash>:
- worktree 目录名改用 spec/plan 的 slug(specs|plans 后那一级目录名),分支改为 feature/<slug>
- 目录走 superpowers.worktreeDirectory 模板(package.json 新注册配置),支持 $project_root/$project_name/$feature_name 占位符及开头 ~ 展开,默认 ~/Sources/worktree/$project_name/$feature_name
- worktree 现位于工作区外:创建前 mkdir -p 父目录,state/webview 改存绝对路径(下游消费方已兼容 isAbsolute)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-24 02:37:16 +08:00
cruldra e6f1776d4f 11 2026-06-23 05:02:15 +08:00