使用说明
August 27, 2026 · View on GitHub
仓库发现与面板布局
- 始终跟随当前工作空间:面板经 Slot 标准 props(
useSessions/useWorkspaces) 推导「当前会话 → 所属工作空间 → 路径」(回退recentWorkspaceId),切换工作空间/ 会话时自动重新扫描;标题栏固定显示当前工作空间名(悬停可见完整路径)。 - 点击文件夹图标在系统文件管理器中打开当前工作空间目录:走插件自己的
openInExplorerRPC(host 半体起explorer.exe显式开新窗口,避开平台host.openPath/Invoke-Item 对已打开目录只激活既有窗口、旧窗口不可见时 用户无感知的问题);host 半体未升级时自动回退平台workspaces.openPath。 刷新图标始终重扫当前工作空间。未打开工作空间时主体显示空态、不发起扫描。 - 扫描根默认跟随当前工作空间路径(面板主动携带 root 调用,Host 不再回退
sandboxPolicy.workspaceRoot——在 dsh web 部署里那可能是无意义的进程启动目录); BFS 递归发现嵌套 Git 仓库(含 worktree 的.git文件形态);跳过node_modules/dist/build等重目录;上限:深度 10 / 2000 目录 / 50 仓库(文件形态下可经组合行 config 的scanMaxDepth/scanMaxDirs/scanMaxRepos覆盖,见安装详解)。 - 扫描结果两级缓存:扫描结果按根目录缓存在内存中,并持久化到
$DSH_HOME/git-panel/scan-cache.json(上限 50 个根、7 天过期)。切换项目再切回、 或重启 dsh web 后首次打开,直接秒回缓存列表;命中时会并行校验每个仓库的.git是否仍存在(过滤已删除的仓库),并在后台静默重扫一次自我修正(新克隆的仓库在 下次切换/扫描时出现)。标题栏的刷新图标始终绕过缓存全量重扫,是兜底刷新手段。 - 每个仓库一张可折叠卡片:仓库名、当前分支、staged/unstaged/untracked 彩色圆点计数、 ↓↑ 落后/领先,以及刷新、Pull、分支、⋯ 更多按钮。
- 面板宽度可拖拽调整:拖动左缘实时改宽(380px ~ 96vw),宽度记忆在 localStorage
(
gp-panel-w)。 - 布局模式(默认侧边栏停靠):标题栏齿轮按钮打开「面板设置」,两种模式即时切换,
偏好记忆在 localStorage(
gp-layout):- 侧边栏模式(dock,默认):面板停靠在对话右侧,对话区域(含输入栏)自动收窄
让位,类似 VS Code 的 Chat 侧边栏。实现上通过宿主 AppFrame 覆盖层的稳定属性
[data-shell-overlay]定位 frame,以padding-right挤压三栏 grid(:has()选择器为主路径,不支持时自动退化为 JS 内联几何写路径);窗口宽度 <1200px 时该 模式临时按浮窗显示(不清除偏好),拉宽后自动恢复。 - 浮窗模式(overlay):面板浮在对话区域上方、带投影,不改变对话布局(v1.0 行为)。
- 已知小取舍:停靠时宿主原生「工具详情」列的自动收起阈值与拖拽手柄位置按 frame 外框宽计算,会略偏一个面板宽(仅影响该列悬停手柄的显形位置,无功能影响)。
- 侧边栏模式(dock,默认):面板停靠在对话右侧,对话区域(含输入栏)自动收窄
让位,类似 VS Code 的 Chat 侧边栏。实现上通过宿主 AppFrame 覆盖层的稳定属性
- 中英双语:跟随 DSH 语言设置(
locale服务 +locale/change事件),Host 文案 经setLocaleRPC 同步切换。 - 所有图标为扁平 SVG 线性图标(stroke + currentColor,类 VS Code codicon),无 emoji。
文件变更列表(VS Code Source Control 风格)
- 分组 Staged Changes / Changes / Untracked Changes(大写小标题 + 计数 pill);每行 左侧彩色状态圆点 + 文件名(basename,悬停 title 显示完整路径)+ 目录 + 重命名来源 + 右侧状态字母徽标(M/A/D/R/U/C/T 着色)。
- 暂存即选择(无 checkbox):文件行悬停出现 +(暂存);Staged 组悬停出现 - (取消暂存);分组标题悬停可批量操作整组。
- 所有下拉菜单(分支/更多/规则)带全局透明遮罩,点击面板外任意区域自动关闭。
- 点击文件名从面板左缘滑出浮层 diff 抽屉(覆盖在聊天区上方,文件列表保持可见,点别的
文件直接切换):双列旧/新行号、整行柔和红绿底色、sticky @@ 分段头、文件头带状态
徽标与 +增/−删 统计;支持自动换行开关、左缘拖拽调宽(
gp-diff-w)、Esc / 点遮罩关闭。 untracked 文件渲染为全新增(≤4000 行),untracked 目录渲染为两层目录树(≤200 条)。
顶部提交区(仅处理已暂存文件)
┌──────────────────────────────────────────────────────────┐
│ 提交信息输入框(自动撑高 2–6 行,Ctrl+Enter 提交) │
│ [✦ 生成] [⚙ 规则▾] 已暂存 N 个文件 │
│ [✓ 提交 ] [↑ 提交并推送 ] │
└──────────────────────────────────────────────────────────┘
- 生成 / 提交 / 提交并推送都只处理 Staged 文件:Host 端
commit不隐式git add/git reset,只提交当前 index(部分提交用 pathspec 限定);提交信息经 stdin(commit -F -)传入,规避 Windows 命令行长度与特殊字符问题。 - ✦ 生成:实时读当前生效规则 + 已暂存文件的 staged diff(总长 ≤120KB 截断)注入
LLM(
llm.stream;模型优先取面板配置的生成模型,缺省取agentDefaultModel.currentSelection(), 再回退第一个 provider/model;maxTokens 8000 / temperature 0.2),结果只填入不提交; 失败保留原内容并 toast 报错;生成中显示 spinner。 - ⚙ 规则 ▾:编辑提交规则(编辑器顶部单选即切换当前仓库的生效来源)/
复制生效规则到剪贴板(Host 经
clip写入)/ 生成模型配置 / 显示当前生效来源 (仓库专属 > 全局 > 内置默认)。 - 提交 / 提交并推送:整行按钮组,禁用态覆盖所有边界(消息为空、无暂存文件、任一 操作进行中)。提交并推送 = 提交成功后自动追加 push;push 失败 toast 错误并保留 commit。
提交规则系统
- 存储:
$DSH_HOME/git-panel/rules/default.yaml(全局)+{repo-name}-{路径哈希}.yaml(仓库专属;路径哈希为规范化绝对路径的 FNV-1a 8 位十六进制,同名仓库各持一份, 重新克隆到原路径自动恢复生效)。旧版纯名字{repo-name}.yaml仅作读取回退, 下次保存自动迁移到新命名;首次扫描自动创建默认文件。$DSH_HOME定位顺序:settings.prepareDocument()返回路径推导 →%USERPROFILE%\.dsh探测 → workspace 根.git-panel/rules兜底。 - 生效来源偏好:
$DSH_HOME/git-panel/git-repos.json(权威配置,非缓存—— 永不 TTL/LRU 逐出,扫描不删除条目)。编辑器里切换「全局规则 / 仓库专属规则」 即写入ruleScope字段:global时即使仓库文件存在也走全局;repo但文件 缺失/非法时落回全局;无记录时按「仓库文件是否存在」推断(兼容旧版行为)。 保存仓库专属规则即自动置为repo;「重置仓库专属」= 删除仓库规则文件并回退全局。 - 每次点击 ✦ 生成实时读盘,规则修改下次生成立即生效,无需重启。
- 编辑器弹窗:左 =
system_prompt/user_context双独立编辑框(键名固定展示不可编辑, 从根上避免误删 YAML 键),右 = 实时预览(占位符{repo_name}/{branch}/{file_list}/{staged_diff}已替换),底部 = 保存 / 取消 / 恢复默认;顶部「全局规则 / 仓库专属规则」 单选直接切换生效来源(切到仓库专属时若文件不存在,以当前生效规则为底自动创建)。 - 内置默认规则内置于
src/host.js(中英两版,跟随面板语言):Conventional Commits 标题(type 白名单、scope 小写可省略、摘要动词开头 ≤50 字不加句号)、正文为要点式逻辑 变更清单(每行强制 "- " 前缀、一条一个改动点、保留参数/阈值等关键细节,3~8 条, 极简变更可只有标题;提示词内置 few-shot 格式示例防格式漂移)、footer 仅必要时输出、 消息语言跟随面板语言(除非代码库本身是其他语言)、只输出纯文本 commit message (无解释、无任何 Markdown 标记,标识符/路径裸写不加反引号)等;未编辑过的旧版默认 文件会随内置规则升级自动重写。 - 语言切换语义:已创建的全局
default.yaml仅当内容仍是未经修改的内置版本(中或 英)时才随语言切换重写为当前语言版;用户编辑过的规则文件(全局/仓库专属)绝不因 语言切换被覆盖;需要另一语言的默认版可用「重置全局默认」。仓库专属规则不受语言 影响。
Git 历史(每卡片可折叠)
- 「历史」默认折叠;展开后为 SVG 图谱 + 无限滚动列表:Host 端
git log --all --topo-order分页(每页 200 条,--skip/-n,滚动到底部前 800px 预取下一页), Client 端自行计算 lane 布局(≤8 条 lane 循环配色、合并/分支线为圆角肘形曲线、HEAD 节点外加光环、其余 lane 降透明度),面板高度 470px、行高 26px、字号 13。 - 悬停浮层(VS Code hover 风格)显示提交详情:subject / author / email / date / 完整 message / diff stat,结果按 hash 缓存;离开行或浮层后延迟关闭,滚动立即关闭。
其他操作
- Pull =
git fetch --all --prune+git merge --no-edit @{u}(无上游则只 fetch)。 - 切换分支:下拉列表(含当前标记/上游)+ 新建分支(创建并切换,分支名校验)。
- ⋯ 更多:推送、Stash push / pop(列表展示已有 stash)、Reset
--soft|--hard HEAD~1、 Clean untracked。
审计日志
- 无审批门:写操作(commit/pull/push/switch/stash/reset/clean/discard)由面板用户 显式点击触发后直接执行(类似 VS Code),无额外放行条件、不弹确认窗。
- 写操作与其结果(ok/fail)写入
$DSH_HOME/git-panel/logs/git-YYYY-MM-DD.log([ISO时间] key=value格式;写入经 promise 链串行化防并发丢行;条目含 scan / diff / generate / rules-save / rules-reset / ok:git.* / fail:git.* 等)。 - 高频只读轮询(status/log)不写审计,避免日志噪声淹没写操作记录;
$DSH_HOME无法定位时打印一次告警后跳过审计,不影响功能。