dsh-git-idea 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 mays-hi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,148 @@
1
+ # dsh-git-idea
2
+
3
+ 把 Git 的日常操作搬进 DSH 会话:输入框左侧的仓库 chip,挂在它上面的浮层面板(分支树 / 提交历史 + 图 / 变更与提交 / 提交详情),一个 Settings 页,以及 8 个模型可调用的 git 工具。
4
+
5
+ > A git panel for DeepSeek Harness: a repository chip in the composer, a branch tree / commit graph / working tree / commit detail panel, a settings page, and 8 git tools for the model.
6
+
7
+ 仓库:<https://github.com/mays-hi/dsh-git-idea>
8
+
9
+ ---
10
+
11
+ ## 功能
12
+
13
+ - **仓库 chip**:会话输入框左侧显示当前仓库、分支和改动数;点它开面板。鼠标停在上面弹出分支切换卡片(可关)。
14
+ - **分支树**:按 `HEAD / 本地 / 远程` 分组,支持搜索、收藏,行尾 `›` 是分支可执行的动作。
15
+ - **提交历史 + 图**:一次分页 200 条,列表底部「加载更多」;虚拟化只渲染视口内的行。筛选支持正则 `.*`、区分大小写 `Cc`、`分支:`、`作者:`。开启筛选时提交图按真实 DAG 排道,跨过被筛掉的提交画虚线。
16
+ - **提交详情**:选中提交后显示作者、时间、引用、提交信息和文件列表。
17
+ - **变更与暂存**:分「变更」和「新增的文件」两组,可切树 / 平铺两种视图;勾选框暂存或取消暂存,分组标题的框对整组生效;未跟踪目录折叠成一行,展开才读取,勾选整目录等于 `git add <dir>`。
18
+ - **文件差异**:在变更树或提交详情里单击文件,patch 直接占满正文,可返回、重读、暂存 / 取消暂存。四种状态:`staged`、`worktree`、`untracked`、`commit`;二进制只显示提示,不打印乱码。
19
+ - **引导页**:工作区还不是仓库时,显示「打开这个目录」和「在此初始化仓库」。
20
+ - **跟随会话沙箱**:所有 git 命令按当前会话解析出的 sandbox policy 发出——会话只读,插件就只读;会话可写,插件就能写它被指到的仓库。
21
+
22
+ 面板是挂在输入框上方的浮层,不是可停靠的工具窗。
23
+
24
+ ---
25
+
26
+ ## 安装
27
+
28
+ 要求 DSH `0.1.5-rc.1` 及兼容版本(peer:`@deepseek-ai/dsh-tools ^0.1.5-rc.1`、`@deepseek-ai/cordis ^4.0.2`)。
29
+
30
+ ```sh
31
+ # 从 npm(发布后)
32
+ dsh plugin --profile web add dsh-git-idea
33
+
34
+ # 或直接从 GitHub
35
+ dsh plugin --profile web add github:mays-hi/dsh-git-idea
36
+
37
+ # 本地开发
38
+ dsh plugin --profile web add /path/to/dsh-git-idea
39
+ ```
40
+
41
+ 装完**重启 `dsh web`**(bundle 在启动时读取)。若报 `ERR_PNPM_ADDING_TO_ROOT`,在包名前加 `-w`。
42
+
43
+ > 如果 DSH 里已经跑着旧版动态插件(`<DSH_HOME>/dsh-git-idea` 那个桥),先停掉它再装,否则模型工具会重名。
44
+
45
+ ---
46
+
47
+ ## 使用
48
+
49
+ 面板打开时停在**历史**页;`变更` 页签上带未提交文件数。
50
+
51
+ **手势**(和 IDEA 的树一致):
52
+
53
+ | 行 | 单击 | 双击 / 点三角 |
54
+ |---|---|---|
55
+ | 目录行(分支树、变更树、提交文件树) | 只选中 | 展开 / 折叠 |
56
+ | 未跟踪目录(git 折叠成一行的那种) | 只选中,不发读取 | 读取并展开 |
57
+ | 分支行 | 只选中 | 把历史切到该分支 |
58
+ | 分组标题(HEAD / 本地 / 远程) | 只选中 | 展开 / 折叠 |
59
+ | 文件行 | 打开差异 | — |
60
+ | 分组标题最左的复选框 | 整组进 / 出索引 | — |
61
+
62
+ **仓库范围**:看的是会话工作区**它自己**——只检查 `<dir>/.git`,不向上查找父目录,也不看子目录。
63
+
64
+ ---
65
+
66
+ ## 设置
67
+
68
+ Settings → **dsh-git-idea配置**。分两层。
69
+
70
+ **插件级**(写入 `$DSH_HOME/dsh-git-idea.json`,默认 `~/.dsh/dsh-git-idea.json`,换浏览器一致):
71
+
72
+ | 项 | 默认 | 说明 |
73
+ |---|---|---|
74
+ | 初始化仓库的默认分支 | `main` | 引导页「在此初始化仓库」执行 `git init -b <值>`;留空用 git 自己的默认值 |
75
+ | cherry-pick 时记录来源(`-x`) | 关 | 提交时是否带上 `-x` |
76
+
77
+ **浏览器级**(只写当前浏览器的 localStorage):
78
+
79
+ | 项 | 默认 | 说明 |
80
+ |---|---|---|
81
+ | 后台监测仓库变化并自动刷新 | 开 | 关掉后下面的节奏选项一并失效 |
82
+ | 面板打开时每 N 秒检查 | 3(1–120) | |
83
+ | 只有按钮时每 N 秒检查 | 15(2–600) | |
84
+ | 面板关着时也监测 | 开 | 让 chip 上的分支名和改动数保持实时 |
85
+ | 悬停弹出分支切换卡片 | 开 | 鼠标停在 Git 按钮上弹出,点一下切换 |
86
+ | 面板尺寸 | 跟随输入框宽度 / 74vh | 可恢复默认 |
87
+ | 变更页视图 | 树 | 或平铺列表 |
88
+ | 切换器记忆 | — | 可清除最近使用与收藏 |
89
+
90
+ ---
91
+
92
+ ## 模型工具
93
+
94
+ 注册 8 个工具,都是结构化返回;破坏性操作需要显式 `confirm: true`。
95
+
96
+ | 工具 | 作用 |
97
+ |---|---|
98
+ | `git` | 任意 git 命令的逃生舱,参数是 token 数组,没有白名单;破坏性命令需 `confirm: true` |
99
+ | `git_status` | 分支、detached、upstream、ahead/behind,以及 staged / unstaged / untracked / unmerged 文件列表 |
100
+ | `git_log` | 提交历史:hash、短 hash、作者、ISO 时间、标题、引用;支持范围、路径、条数上限 |
101
+ | `git_diff` | 两个状态之间的差异;mode 为 `worktree` / `staged` / `commit` / `range`,超过 `maxFiles` 回退为原始 unified patch |
102
+ | `git_commit` | 暂存并提交;默认提交已暂存内容,可用 `paths` 指定路径或 `all: true` 全量暂存 |
103
+ | `git_branch` | 列出 / 新建 / 切换 / 删除 / 重命名分支;强删需 `confirm: true` |
104
+ | `git_stash` | stash 的 list / push / pop / apply / show / drop / clear;drop、clear 需 `confirm: true` |
105
+ | `git_sync` | fetch / pull / push 和远端的增删改;保护分支(main / master)不可强推,任何强推需 `confirm: true` |
106
+
107
+ 结构化工具拒绝以 `-` 开头的值(修订号、远端、分支名等),避免被 git 读成选项。
108
+
109
+ ---
110
+
111
+ ## 开发
112
+
113
+ 源码按功能拆成片段,构建就是按顺序拼接,没有转译、打包或压缩。改代码请改 `src/`。
114
+
115
+ ```sh
116
+ node build-package.mjs # 生成正式包:lib/index.js + client/client.js
117
+ node build.mjs # 生成动态桥:host.js + client.js
118
+ node test/run-all.mjs # 全部断言(676 条)
119
+ node build.mjs --check && node build-package.mjs --check # 检查产物是否最新
120
+ node test/bench.mjs # 基准:200 条提交的历史列表
121
+ node test/bench-branch.mjs # 基准:300 个分支的切换器
122
+ ```
123
+
124
+ `test/run-all.mjs` 在跑任何断言之前会先检查两份产物和测试文件是否落后于源码。
125
+
126
+ ### 目录结构
127
+
128
+ ```
129
+ package.json npm / DSH manifest(dsh.bundle patch + dsh.client web)
130
+ cordis.patch.yml bundle 层插入的插件行
131
+ lib/index.js 构建产物:Host 半侧(ESM,8 个工具 + 同源 RPC 路由)
132
+ client/client.js 构建产物:Client 半侧(__ModuleLoader__ bundle)
133
+ src/host/*.js Host 源码片段(13 个)
134
+ src/client/*.js Client 源码片段(23 个)
135
+ src/pkg/*.js 正式包的 prelude / postlude(harness shim、host.call)
136
+ build-package.mjs 正式包构建
137
+ build.mjs 动态桥构建
138
+ host.js client.js 构建产物:动态桥读取的两个半侧(旧运行方式,保留)
139
+ test/ 断言套件与性能基准
140
+ ```
141
+
142
+ Host 与 Client 的片段各自共享一个作用域:一个片段可以使用它上面的片段定义的东西,反之不行。
143
+
144
+ ---
145
+
146
+ ## 许可
147
+
148
+ MIT