deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
DSH(DeepSeek Harness)「小记」插件:常驻在侧栏与对话区之间的全高竖栏——小计持久化轻量笔记栏(全局与工作区两种作用域,待办 + 随记),右缘可拖拽调宽。
所有配色基于 DSH 主题令牌(--dsw-alias-*),自动适配明暗主题。
当前状态:v0.7.17——文档修正(会话日志真实布局与 v3 代次,README 与
docs/一并改正)+ 新增零依赖 CSS 自洽性测试test/client-css.test.mjs;本版无产品代码改动;适配 dsh 0.1.5-alpha.1(官方右侧栏);dsh-livefeed(「讯息」页签 / /api/dsh-livefeed / 未读角标)已移除,竖栏仅剩「小计」;Host half 改动需重启 DSH 生效,客户端改动刷新即见。
~/.dsh/session-card.json)useWorkspaces.recentWorkspaceId)~/.dsh/storages/notes.json(存储域 notes,JSON 后端);常驻会话走 DSH 原生会话日志--dsw-alias-*),明暗自动切换/api/dsh-livefeed 与 5s 轮询(src/client/livefeed.js、src/livefeed-host.mjs 已删除)。webServer。~/.dsh/dsh-livefeed/(config/state/history)原样保留;需要时用 git 历史中的旧版恢复采集能力即可。路径修正:已废止的旧写法——旧文档(v0.7.16 及以前的本 README)把会话日志写成
~/.dsh/sessions/<cwd>/<sessionId>/session.jsonl.zstd,该写法切勿照抄(<cwd> / <sessionId>
都是原始名、日志名是 v0 代次);
真实布局是 <root>/<projectKey(cwd)>/<encodeSegment(sessionId)>/session.v3.jsonl.zstd
(<root> 即 dshHomePath('sessions'),默认 ~/.dsh/sessions)。目录名是编码后的
安全段,不是原始 cwd / 原始 sessionId。
代次校正:当前会话格式代次是 v3(DSH 源码 packages/core/session/src/types.ts
的 SESSION_FORMAT_VERSION = 3;文件名规则见 packages/session/session-format/src/filename.ts:
v0 沿用 session.jsonl,此后为 session.v<N>.jsonl,压缩后端再加 .zstd 后缀),
旧文档写的是不含 .vN 的 v0 形式文件名 session.jsonl.zstd。旧代(v0/v1/v2)工件不可变,
可能与当前代并存于同一会话目录。
同步范围:为消除「README 说已同步、同仓库文档却仍是旧布局」的矛盾,本次一并改正了 下列文件(全部是文档 / 测试 / 元数据,无代码改动):
| 文件 | 改了什么 |
|---|---|
README.md |
本节 + 「持久化」一节(路径与代次) |
docs/design.md |
§2.1 物理双通道、§3.6 对话消息持久化、§4 三条持久化通道 |
docs/research.md |
§1.3 常驻会话日志路径的实测补充 |
test/client-css.test.mjs |
新增:零依赖 CSS 自洽性测试(私有令牌同名、外部令牌白名单) |
package.json |
version → 0.7.17;scripts.test → 显式指定测试文件 |
src/、lib/ 未动(本版无代码改动)。
position: fixed; inset: 0; z-index: 40,盖在整个 shell.overlay(z-index 20)之上,
竖栏此时不可见;此前仍按 1.5s 轮询 + MutationObserver + ResizeObserver 做强制布局。
现在 frame 带 data-rightbar-fullscreen 时跳过测量,退出全屏由新增的
attributeFilter 触发一次补测(正常态右侧栏 push 时行为不变:中栏变窄 → 消息列
左缘右移 → 竖栏按既有规则自动隐藏/让位)。--dsh-scrollbar-thumb / --dsh-scrollbar-thumb-hover
(旧 --dsw-alias-scrollbar-* 作 fallback),高层级表面可自行 rebind 成 l2 档。兜底**:CSS Module 哈希类名随版本变化, 只保留官方稳定属性[data-conversation-scroll]`。scrollbar-gutter: stable 恒定
预留这 6px,内容跨过「溢出」阈值时正文不再横向重排。max-content 测宽(长待办可撑到上千 px),随记 textarea 随之瞬时变宽、正文重排到
一屏塞得下 → 浏览器把 scrollTop 夹到 0,恢复宽度后不再回来(1.5s 轮询 + 各类
DOM 变化都会触发)。现在只把「小计」头部行设为 max-content 测量,测量结果不变,
竖栏宽度全程不动。dsh plugin --profile web add github:ErrorLst/dsh-notes
dsh web # 重启 dsh web 生效
说明:
pnpm add github:ErrorLst/dsh-notes,成功后 reconcile 自动把声明了
dsh.bundle.patch 的包追加进 dsh.profile.bundles(无需手动登记)。git clone <本仓库地址> dsh-notes
cd dsh-notes
pnpm install
pnpm build # 产出 lib/index.mjs(Host half)+ lib/client.js(浏览器 bundle)
dsh plugin --profile web add .
dsh web # 重启 DSH 使其生效
说明:
dsh plugin add . 会把相对路径 . 锚定到你执行命令的目录(即仓库根目录),
在 web profile 里执行 pnpm add <绝对路径>,随后自动把声明了 dsh.bundle 的包
追加到 profile 的 dsh.profile.bundles(无需手动改配置)。web;其他 profile 用 dsh plugin --profile <name> add .。dsh plugin --profile web remove @dsh-external/dsh-notes(同时从 bundles 移除)。src/ 后执行 pnpm build 重新生成 lib/;profile 以 link: 指向本仓库,
刷新浏览器页面即可看到客户端改动,Host half 改动需重启 DSH。~/.dsh/storages/notes.json(存储域 notes,JSON 后端)。小记数据走 DSH 存储域(storage domain)+ JSON 后端链路:
浏览器操作 → POST /api/dsh-notes → 插件内串行链 → storageDomain('notes', v1)
→ json 后端 → ~/.dsh/storages/notes.json
~/.dsh/storages/notes.json(首次写入时创建,与 workspace.json 同机制){
"unit": { "name": "notes", "version": 1 },
"global": { "todos": [ { "id": "...", "text": "...", "done": false, "createdAt": 0, "updatedAt": 0 } ], "memo": "" },
"tables": { "workspaces": { "<workspaceId>": { "todos": [], "memo": "" } } }
}
~/.dsh/sessions/<projectKey(cwd)>/<encodeSegment(sessionId)>/session.v3.jsonl.zstd
(追加式 JSONL + zstd 压缩;<root> 由 base bundle 配为 dshHomePath('sessions'),
默认 ~/.dsh/sessions),与小记是两条独立通道;agent 只接触会话日志,
结构上接触不到 notes 文件(详见 docs/design.md §3.6)projectKey(cwd) 把路径/盘符分隔符折成 -、把不安全
码元转义为 ~XXXX 并在两侧补 --(会话无 cwd 时用 _no-cwd);encodeSegment(sessionId)
逐码元转义,因此目录名与原始 cwd / sessionId 不同名,按原值找不到目录。
当前格式代次为 v3,日志名 session.v3.jsonl.zstd;旧代(v0/v1/v2)工件不可变,
可能与当前代并存于同一会话目录,读取以最新代次为准。| 文档 | 说明 |
|---|---|
| docs/design.md | 设计文档:需求、架构、数据模型、Host API 契约(小计 + 会话卡片)、插槽、主题适配规范、里程碑 |
| docs/research.md | API 调研记录(会话卡片部分,融合自旧 dsh-session-card):服务契约速查、关键机制验证、源码位置索引 |
| prototype/index.html | HTML 原型(可交互):明暗主题切换、宽/窄侧栏、全高竖栏(上会话卡片 / 下小计)、分隔条拖拽,用浏览器直接打开 |
dsh-notes/
├── src/
│ ├── index.mjs # Host half:存储域 + HTTP API(小计)
│ └── client/
│ └── index.ts # 浏览器 half:全高竖栏(小计 + 宽度拖拽)
├── prototype/index.html # HTML 原型(样式基准)
├── docs/
│ ├── design.md # 设计文档(v0.4 融合版)
│ └── research.md # API 调研记录(会话卡片部分)
├── cordis.patch.yml # bundle 组合补丁(挂 Host half)
├── tsdown.config.ts # 双 half 构建
└── package.json # @dsh-external/dsh-notes(dsh.bundle + dsh.client 元数据)
pnpm build(tsdown;Node 半为 ESM,浏览器半为 __ModuleLoader__ CJS 工厂)--dsw-alias-* 语义令牌(原型即样式基准)MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。