Repository navigation
1.0.0 · 官方右侧栏里的本地 Git + GitHub 远端页签
在 DSH 官方右侧栏里装一个本地 Git 工作台,连同四个 GitHub 远端页签 —— 一个插件、六个页签:Changes(按文件暂存、逐行 diff、提交)、History,以及 Code / Issues / Pull requests / Actions(远端由 host 半代理)。提交信息由 DSH 里已经配好的模型生成,不依赖 Copilot,也不需要额外的 API key。
dsh plugin --profile <profile> add @linxueyuan/dsh-gitnpm:https://www.npmjs.com/package/@linxueyuan/dsh-git · 安装后重启 DSH 并硬刷新页面(host 半是 Node 模块,不随页面刷新重新加载)。
首个版本。
新增
- 官方右侧栏页签 —— 在 DSH 右侧栏注册一个 tab(实例 id
dsh-git,显示名git),
与官方其它页签同一套交互;侧栏「插件」页与「设置 ▸ 内置插件」两处都有设置卡片。 - 多仓库下拉 —— 你显式添加过的本地仓库;登录 GitHub 后还能列出你有权限的远端仓库。
- Changes —— 文件级暂存 / 取消暂存、逐行 diff、提交(摘要 + 描述),
提交信息可由 DSH 模型列表里已配好的模型生成。 - History —— 提交列表;选中提交显示说明、短 sha 与
+/−统计,
以及该提交改动的文件与逐行 diff。 - Code —— 远端文件树;没有远端时退化为本地工作区视图,不是空页。
- Issues —— 列表 + 详情,可新建、评论、关闭 / 重开。
- Pull requests —— 列表 + 详情,可新建 PR。
- Actions —— workflow runs 列表,可重跑或取消。
- 同步与分支 —— fetch / pull / push;强推只允许
--force-with-lease
(全库没有裸--force)。分支可切换、新建、重命名;可检出某个提交(分离头)或 cherry-pick。 - 克隆 —— 走 host 半,且关掉
protocol.ext.*。 - GitHub 登录 —— Personal Access Token(细粒度需 Contents R / Issues RW /
Pull requests RW / Actions RW;经典 Token 用repo);
在 profile 里填了 OAuth App 的clientId时额外提供设备码登录。
安全
/dsh-git/*路由只接受 loopback 请求,局域网 / 远程访问一律 403。- git 只能操作你显式添加过的仓库清单里的路径,其他路径返回
workspace-unknown。 - 令牌只存在 host 半:挂在宿主凭据接缝
ctx.credentials的GITHUB_TOKEN上,
界面只显示尾 4 位;git 通过环境变量拿凭据,不进 argv、不进.git/config。
令牌不在插件的通用状态域里(整域读 / 写 / 导出 / 备份都不会带上它)。 GITHUB_TOKEN=… dsh是只读覆盖(写它会被拒),轮换令牌不需要改代码。- 静止保护是明文 + 文件权限(文件
0600/ 目录0700),没有加密 ——
与宿主credentials-local自己的做法一致,详见 README 的「GitHub 登录与令牌」一节。
已知边界
- 远端页签以 GitHub 为准;本地未推送的提交在 Code 树里看不到对应文件。
- 暂存是文件级的(M1),没有 hunk 级暂存。
构建说明。 本版本的 npm 产物是发布时本机构建的,对应提交 e2e0286(该提交的 package.json 与 npm 上那份逐字段一致);当时工作区含尚未提交的 src/ 改动,因此无法从任一提交逐字节重建这份 tarball。之后的版本走 .github/workflows/release.yml,从 tag 的干净检出构建,可复现。