Skip to content

dsh-kit

Verified

@jjblau2021/dsh-kit · v0.33.20 · MIT · Web UI

Per-turn commits into the workspace's .kit repository, with a /kit command and a right-sidebar history panel

Install

dsh plugin add @jjblau2021/dsh-kit

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Readme

kit 记录器

npm license

@jjblau2021/dsh-kit 是一个 DSH 插件。每个 Agent 轮次结束时,它把工作区快照提交到独立的 .kit 仓库,并在右侧栏提供记录、diff 和回滚。人工维护的 .git 不会被改写。

安装

在 Plugins → Add plugin 中输入:

@jjblau2021/dsh-kit

或在桌面 App 完全退出后执行:

dsh plugin --profile desktop add @jjblau2021/dsh-kit

安装后点 Enable。已安装的插件不会自动升级:先移除旧版本,再安装新版本。Host 半的改动需要完全退出并重新打开 App;Client 半刷新页面即可。

也可以安装 Git 地址或 Release tarball:

dsh plugin --profile desktop add https://github.com/JJblau2021/dsh-kit.git

本地开发使用目录安装,插件以 link: 挂到本目录。移动或删除本目录会使插件失效。

dsh plugin --profile desktop add "$PWD"

如果以前装过 @local/dsh-kit 或 @jjblau/dsh-kit,先移除旧项,再安装 @jjblau2021/dsh-kit。

开始使用

  1. 在要记录的工作区里打开会话。
  2. 第一次使用时执行 /kit init,或在空面板里点 初始化 .kit。
  3. 让 Agent 跑完一轮,或先执行 /kit commit 人工基线。
  4. 打开右侧栏 + → kit 记录。

kit 记录的是工作区快照,不是 Agent 自己的 diff。轮次开始时,如果工作区相对 .kit 已经有未提交改动,插件会先自动提交一条未标记记录,标题是「未提交的改动」。之后这一轮的记录只包含本轮的变化。

git commit 和 git stash 不能代替 /kit commit。kit 只比较工作区内容和自己的 HEAD。

面板

kit 记录面板

顶部是标题栏(名称、工作区路径、刷新)和状态栏(当前活动、类别筛选)。路径后面的修改图标会打开系统的目录选择窗口。选中的目录会记在当前会话上:已有 .kit 就查看并在之后把这个会话的提交写到那里;还没有则留在该目录并显示初始化,初始化后的提交也使用它。HEAD 变化时列表会自动刷新。

记录类别

类别 来源 外观
人工打点 /kit commit 琥珀徽标和左侧色条
agent 轮次 轮次结束时自动提交 蓝色徽标和左侧色条
未标记 没有 kit 元数据的旧提交或裸 git commit 灰色虚线徽标和左侧色条

没有来源、但带有正数轮次的旧提交归为 agent。两者都没有的归为未标记。直接提交到 .kit 的记录没有来源信息,不会显示成人工打点。

状态

状态 含义
思考中 Agent 在推理,或在工具与步骤之间等待模型
执行工具中 有工具调用正在执行
回复中 Assistant 正在输出文本
等待确认 / 等待回答 / 计划审核 等待用户操作
已同步 当前没有进行中的轮次
加载中 / 无 .kit / git 不可用 / 读取失败 加载或异常

优先级是:等待交互 > Agent 活动 > 已同步。进行中的轮次如果已经改了文件,状态后面会附上文件数,例如 思考中 · 3 个文件。

状态带有文件数时,悬停状态会弹出尚未写入 .kit 的文件清单,点击其中的文件会打开 diff。没有未提交改动时不显示文件数。

记录操作

  • 记录默认折叠,先列出最近 50 条。列表滚到底,或内容撑不满面板时,继续加载更早的记录。显示类别、commit 说明、文件数、+N -M 和时间。说明按本轮意图生成,不用固定标题,也不照搬对话里发出的消息。优先用助手说明这一轮要做什么的那一句;这句话如果只是复述用户消息就不用。没有这句时,才用图片说明或本轮用过的工具。展开后用短标签显示会话和轮次,例如 abecf227 #12,悬停可以看到完整会话 id。
  • 点击标题展开 hash、模型、推理等级、git:<分支>@<短 hash>[+dirty]、完整描述和文件。
  • 行尾的定位按钮只对当前会话里已加载的 agent 轮次可用。点击后把该轮用户消息滚到对话顶部,并短暂高亮气泡。其他记录会禁用并说明原因。
  • 点击展开后的完整描述可以复制。结果用右上角 Toast 提示。
  • 没有用户请求时,Kit-Prompt 仍是 (no prompt)。注释优先用本轮 Assistant 的第一句;只有图片时显示「用户上传了 N 张图片(文件名)」;最后才用工具名。不再把上一条用户消息标成「续」。
  • 旧记录如果所属会话还在,面板会按同样规则临时补摘要,不改 .kit 历史。会话已经不在时仍显示 (no prompt)。
  • 悬停文件行会在上方或下方打开 diff 预览,交互与对话流里的文件对比一致。
  • 点击文件优先打开内置的「第 N 轮改动」页;无法复用时打开插件自己的并排 diff 页。新增和删除的文件只用单栏。

右键菜单

记录菜单只出现在标题行。

动作 作用
定位到这一轮 跳到当前会话中对应的用户消息
查看详情 打开这条记录的文件 diff
与另一条记录对比 再点另一条记录,打开两条快照的净差
revert kit 记录 生成一条反向提交,并标为人工打点
将 kit 记录添加到对话 把记录整理成可删除的 .md 附件,不自动发送

记录右键菜单

revert 是 git revert,不是把工作区恢复成那条快照:

  • 工作区必须干净。根提交不能 revert。
  • 成功后新增一条人工记录,标题为 revert: <短 hash> <原标题>,并带有回滚标记。
  • 冲突会中止 revert,不留下半成品提交。
  • 结果挂在该记录下方。unknown-endpoint 表示 Host 还没加载新路由,重载插件后再试。

文件菜单只出现在展开后的文件行。

动作 作用
打开 diff 打开完整 diff
在文件管理器中显示 定位当前工作区里的这个文件
用默认应用打开 用系统默认应用打开当前文件
复制相对路径 复制相对工作区的路径
复制改动 patch 复制这个文件在该记录中的 unified diff
把这个文件 diff 添加到对话 添加可删除的 .patch 附件
查看这个文件的 kit 历史 只显示改过该文件的记录

文件右键菜单

复制、打开和添加附件的结果都用右上角 Toast 提示。文件筛选条可以清除,清除后恢复全部记录。

命令

命令结果只出现在命令面板,不会变成模型消息。

命令 作用
/kit 帮助
/kit init 在当前工作区初始化 .kit
/kit log [n] 最近 n 次提交,默认 10,最多 100
/kit status 查看 kit 视角的改动
/kit show [rev] 查看某次提交,默认 HEAD
/kit commit [说明] 立刻做一条人工打点。不写说明时标题和备注都是「人工打点」

配置

在 ~/.dsh/profiles/<profile>/cordis.patch.yml 里覆盖同名配置:

- id: kit-recorder
  config:
    enabled: true
    commandName: kit
    includeSubagents: false
    timeoutMs: 30000
    # 当前工作区没有 .kit 时,面板改看这个目录
    panelRoot: /path/to/workspace
键 默认 说明
enabled true 关闭后仍保留 /kit,但不再自动提交
commandName kit 斜杠命令名
includeSubagents false 是否也提交子代理轮次
timeoutMs 30000 单条 git 命令的超时
panelRoot 无 会话工作区没有 .kit 时的回退目录

提交里有什么

每次提交都是当时的工作区快照,并带有这些 trailer:

Kit-Session: session-...
Kit-Turn: 3
Kit-Prompt: 用户这一轮的第一条请求
Kit-Followup: 同轮里之后的补充
Kit-Intent: 没有用户请求时的自动摘要
Kit-Model: provider/model
Kit-Reasoning: high
Kit-Human: git:main@a1b2c3d+dirty
Kit-Origin: turn-end
Kit-End: completed
Kit-Files: 3 files +42/-7

Kit-Reasoning 只在有推理等级时出现。Kit-Human 是提交时人工仓库的 git:<分支>@<短 hash>[+dirty],读不到时为 git:none。Kit-Revert 只出现在回滚记录上。Kit-Intent 只在没有用户请求时出现。Kit-Followup 只在同轮有补充时出现,主请求仍留在 Kit-Prompt。不再写 Kit-Change。

自动提交只处理顶层 Agent 的 turn/end。子代理默认跳过。找不到 .kit、工作区没有变化,或 git 不可用时,都不会产生提交。同一工作区的提交按顺序执行。

限制

  • 轮次结束时如果立刻退出 App,排队中的提交可能来不及完成。
  • .kit 与人工仓库仍共用 .gitignore。
  • 在 Agent 沙箱里用 CLI 安装可能因无法写 ~/.dsh 而失败。安装请用插件面板。
  • 定位依赖对话 DOM,不是公开 API。其他会话和尚未加载的轮次无法定位。
  • revert 要求工作区干净;根提交不能 revert;冲突需要处理后重试。
  • 自动摘要描述的是本轮在做什么,不是图片内容本身。没有 Assistant 文本时,图片只记录数量和文件名。

开发

node --test test/*.test.mjs

发布时把 package.json 的 version 改成新版本并提交,然后创建 tag 为 v<version> 的 GitHub Release。publish.yml 会核对 tag、运行测试,并用 NPM_TOKEN 执行 npm publish。这个 secret 需要有发布权限;要无人值守发布时,使用允许跳过 2FA 的 token。已发布过的版本会被跳过。

许可证

MIT