dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
项目看板:卡片组泳道自定义阶段,卡片关联落盘项目记忆、挂载仓库与已有会话(可恢复归档);从卡片开的会话自动读取项目记忆。

给 DeepSeek Harness 加一块项目看板,并把「项目记忆」做成插件的本职:从卡片打开的会话,自动带上这个项目完整、最新的落盘记忆(STATE + 必读子文档)和卡片资料;说一句「落盘项目」就把进展按规范写回去,换会话、换 CLI、隔几天都能接着做。
dsh plugin add dsh-project-manager
备选(直接从 GitHub 装):
dsh plugin add github:hoyyang/dsh-project-manager
零配置、开箱即用:装完重启 dsh 即可,不需要账号、API Key 或任何设置项。落盘项目默认读写 ~/.ai(写入一律经插件自带的 ai-memory,需要 python3;Windows 上这块自动关闭,看板照常)。要改数据目录或权限模式见下文「配置」。
| 环境 | 版本 | 状态 |
|---|---|---|
dsh CLI(@deepseek-ai/dsh,dsh web) | 0.2.0-rc.2 | 实测通过(0.20.1) |
| DSH Desktop | 2.0.17(内置 dsh 0.2.0-rc.2) | 实测通过(0.20.1) |
| 依赖范围(peerDependencies) | @deepseek-ai/cordis >=4.0.1 <5、@deepseek-ai/dsh-tools >=0.1.5-rc <2、@deepseek-ai/dsh-client-ui-slots >=0.1.5-rc <2、@deepseek-ai/schemastery ^3.18.1 | 声明范围,范围内其他版本未逐一验证 |
需要 dsh web 界面(CLI 的 dsh web 或 DSH Desktop)。侧栏增强(项目区数字、层级、「+」接管、空会话行)依赖 dsh 工作区列表的页面结构;dsh 改版后若对不上,这几项会自动不显示,看板、会话与落盘功能不受影响。

[必读] 的子文档)由插件把全文直接放进会话,系统提示里另有一段实时生成的「卡片档案」(仓库、子任务、说明、链接、文件)。不用先说「回忆」,第一句就能接着干。
~/.ai 里现有的项目名和别名。只认指令写法,讨论「落盘项目这个功能」时不会误触发;规划模式下只提示不拉回。STATE.md 是唯一入口,plans/(批准的计划自动存进来)notes/ evidence/ 里每个文件都要在「📁 文件索引」里有一行;每次落盘都整体重写 STATE、顺手整理文件夹(重复的合并、过时的退役到回收区)。write / edit / bash 直接改 ~/.ai 下的记忆文件会被拒绝;写入只经 ai-memory(文件锁 + 乐观并发),和其他 CLI 共用同一个 ~/.ai 也不会互相覆盖。





~/.ai/projects/<文件夹>/。第一次在这个组落盘时,信息卡请你确认一次(按组名给建议,可改),卡片组设置里也能改。新建、合并的落盘项目都放进这里。~/.ai 里的外部引用改指向、卡片关联换成新位置,旧文件夹进回收区);标题行、文件索引、别名行由落盘的 AI 按清单改好,不合规范不让写。
~/.ai 外引用的文件复制进 evidence/)。~/.ai 里指向旧路径的引用一并改好。
card_manage / repo_manage / phase_move / task_manage 四个工具,在项目会话里不传 card 就作用于本会话的卡片。




repos/<仓库>/ 下,并生成 AGENTS.md 列出仓库清单;从这个路径读写,仓库自己的 AGENTS.md / CLAUDE.md 才会加载。同名不同路径的自动改成「名-2」。


和已有插件的差别:看板类插件多数按工作区记待办;本插件不做通用待办,只做「项目 → 落盘记忆 → 仓库 → 会话」这条链,而且把记忆的读、写、规范、迁移、合并都做进插件里:卡片即项目,会话自动继承完整、最新的项目上下文。
| 操作 | 结果 |
|---|---|
| 以此卡片新建会话 | 按钮立即进入「正在新建会话…」,侧栏出现「卡片名 · 未开始」,卡片组行数字 +1 |
| 在会话里说「落盘项目」 | STATE 写进卡片组的落盘文件夹,带卡片档案块,回读校验通过,信息卡提示「落盘完成」 |
| 落盘中途点「停止」 | 信息卡显示「已停止,没写入」,给「重新落盘 / 忽略」 |
| 在信息卡输入已有项目的名字 | 按钮变成「关联并落盘」,标出「已存在」,给改名建议 |
| 对旧位置的落盘项目落盘 | 整个文件夹迁到卡片组的落盘文件夹,信息卡出现「已按规范迁移」,可撤销 |
| 另一个 CLI 改了 STATE | 本会话下一步收到新版全文,标明替代旧版和写入者 |
| 新稿删掉了旧稿里的 commit 号 | 写入被拒(DROPPED_ANCHORS),点名缺了哪些 |
| 拖动卡片到别的阶段 | 卡片移到新阶段,events.jsonl 追加一条 move 记录 |
在项目会话里让 agent 操作看板(不传 card 就作用于本会话的卡片):
> 把这张卡片推进到「验收」,再加一个子任务「补回归用例」
phase_move { "status": "verify" } → {"ok":true,"event":{"kind":"move","from":"开发","to":"验收"}}
task_manage { "op": "add", "text": "补回归用例" } → {"ok":true,"tasks":[…,{"text":"补回归用例","done":false}]}
读写落盘项目(插件注册的 landfill 工具,模型按 skill 协议调用):
landfill { "op": "recall" } → 分段读 STATE + [必读],读到 complete:true
landfill { "op": "persist", "content": "…", "drop": ["a1b2c3d"] } → {"key":"checkout/checkout-flow","verified":true,"migrated":{…}}
~/.ai 的 STATE;它们写了,DSH 这边下一步自动拿到新版。repos/<仓库>/ 统一读写。[必读] 全文,系统提示里只有一段「项目记忆」(卡片档案 + 落盘项目索引)。~/.ai/projects/<卡片组的落盘文件夹>/memory/designs/<名字>/STATE.md,带卡片档案块、文件索引、别名行。events.jsonl,可追溯谁(用户 / agent)在什么时候做了什么。inbox/retired/ 下。inbox/retired/<时间>-migrate-<名字>/ 下,信息卡显示子文档数和改了几处外部引用。
零配置即可使用。需要时在 profile 的 cordis.patch.yml 加顶层 id 条目覆盖(不要放进 insert: 列表):
- id: dsh-project-manager
config:
dataDir: '' # 缺省 <DSH_HOME>/dsh-project-manager
aiRoot: '' # 缺省 ~/.ai
landfill: true # 落盘项目工具 / 识别 / 拦截 / 收尾检查(false = 只读扫描)
agentsHome: '' # landfill-project skill 链接所在的 ~/.agents
hubTitle: 项目区
projectSessionMode: danger-full-access # 或 inherit(跟随全局权限)
memoryMaxBytes: 6000 # 系统提示里项目记忆段的上限,1000–32000
卡片组的落盘文件夹在「卡片组设置」里改,不需要写配置。
<dataDir>/board.json(原子写 + 串行变更),审计追加到 events.jsonl;落盘项目按需扫描 ~/.ai/projects/*/memory/designs/*/STATE.md;写入只经 ~/.ai/tools/ai-memory(Python 标准库:fcntl 文件锁 + expected-hash + journal)。合并与迁移记录在 <dataDir>/merges.json / migrations.json。[必读] 全文在 agent/pre-step 作为一次性消息注入,按「会话 × 文件版本」记已知,跨重启保存;看到压缩事件就重注。agent/pre-step 识别用户原话并追加提示;tools/pre-execute 拦截直写;agent/turn-stopping 收尾检查并拉回;会话事件 turn/end 的结束原因(完成 / 停止 / 出错)驱动信息卡上的落盘状态。ai-memory retire-dir / write / import / update-state 整体搬迁,中途失败按已做的倒着撤回。workspaceRegistry 登记「项目区」工作区(<dataDir>/hub)与每个卡片组的子工作区,仓库以软链接挂在 repos/<仓> 下。sidebar.panellist;会话信息卡走 conversation.input.dock;侧栏数字与层级是一张按行 id 生成的样式表,「+」接管、空会话行、自动展开是 DOM 增强,找不到对应行时安静跳过。NEED_FULL_READ、DROPPED_ANCHORS、UNINDEXED_FILES、SPEC_ISSUES、NEED_GROUP_FOLDER、MIGRATE_CLASH、FOLDER_TAKEN、REPO_MOUNTED 等错误码点名对象,不静默吞掉。~/.ai 写入有)。inherit);HTTP 路由只接受本机回环(Host 必须是 127.0.0.1 / localhost),写操作带 Origin 时必须同源(DSH Desktop 壳转发会去掉 Origin,此时放行),没有登录态校验;插件会写 ~/.ai、建 ~/.agents/skills/landfill-project 链接;不读写凭据、不访问网络、不执行 git;删除卡片组只删软链接,不删真实仓库。drop;SPEC_ISSUES 按列出的规范项改。workspaceRegistry.unarchiveSession,装 dsh-manage-sessions 并应用它的核心补丁即可。POST /_dsh/dsh-project-manager/api/hub/cleanup(或在工作区列表手动移除「项目区」和各卡片组工作区),撤销插件登记的工作区条目;会话与文件不会被删除。dsh plugin --profile web remove dsh-project-manager,重启 dsh。<DSH_HOME>/dsh-project-manager/(board.json、events.jsonl、merges.json、migrations.json、hub/、backups/),需要时手动删除。~/.ai(含插件补建的 tools/ai-memory)是共享记忆,卸载不删。~/.agents/skills/landfill-project/SKILL.md 若是指向插件的链接,卸载后会断开;要留 skill 就把 backups/ 里的备份(或插件包里的 SKILL.md)复制回去。npm install
npm run build # host:tsc → lib/
npm run build:client # client:tsdown → lib/client.js
npm run typecheck
npm test # node:test 单测 + ai-memory 测试