dsh-chat-digest
Keeps a panel of what you must do, what you can apply for and what is worth knowing, distilled from your WeChat and QQ chat logs by one resident agent session that re-reads them on a schedule or when you click Fetch; each item can link straight to its source file or image.
Install
dsh plugin --profile web add dsh-chat-digest
Sandbox test
This plugin has not been tested yet. Submit a test →
README
dsh-chat-digest · 聊天摘要
[English](README.md) | DeepSeek Harness 插件(profile bundle)



该做的事埋在群聊里。这个插件替你留一块面板,派一条常驻会话去读。
它管三样东西:一块面板、一条常驻主 agent 会话、以及两者之间的 HTTP 契约。按定时——或者你点一下侧栏的
「获取」——那条会话就去读你的聊天记录,挑出「必须做的」「可以报名的」「值得知道的」,重写面板条目;
每条都能直接链到原始文件或图片。插件核心无需取数依赖;包内另附可选的微信/QQ 管线。
也可以把聊天导出放进私人 inbox/,或通过 HTTP 喂入条目。
装完三步走(全新安装)
不需要取数管线 —— 插件有一个默认数据约定:把聊天导出丢进主 agent 工作区下的 inbox\,常驻会话会去读它。
1. 装上并重启(见下面「安装」)。把聊天导出丢进 inbox —— 纯文本 / Markdown / JSON 都行(默认
%USERPROFILE%\.dsh\dsh-chat-digest\inbox\;确切路径看 GET /chat-feed/api/state 的 inbox 字段)。
examples/inbox/sample.txt 是一份可以直接复制进去的小样例。
2. 点一次「获取」。常驻会话会创建并读取 inbox,面板上出现条目,每条都链回来源文件。
想换成你自己的说法或自己的采集器?把 examples/local/ 复制到你自己的一个目录,用 config.localDir 指过去,
改「数据从哪来」那一节就行。
长什么样
面板里一条条目(示意):
一、待办
· 10/08 前提交报名表 · 创新实践项目
这是什么:面向大一的项目制课程,秋季学期开课
怎么做:填表 → 导师签字 → 交教务
注意:20 个名额,先到先得
→ 附件 报名表.docx (点一下用系统默认应用打开)
二、机会与招募
· 9/30 截止:校园开放数据挑战赛(可自由报名)
三、有用信息
· 图书馆研讨间预约 9/28 开放(官方)
面板背后是两条常驻会话,一条线路一条。点「获取」会弹出你配置的那几条线路;选一条,先探它的网关,
通了才开始跑 —— 不通就不触发,采集指针也不动。
怎么工作
定时(每天一个固定时刻)或点「获取」 → 选一条线路,先探它的网关 (花模型步数之前) → 唤醒 / 复用那条线路的常驻主 agent 会话 → 会话跑**你自己的**取数管线,去读你的聊天记录 → 它把条目 POST 回来: /chat-feed/api/items → 面板重建;附件变成 file: / img: 链接 → 用 turn/end 计数收尾;采集指针前进
插件自己不解析你的聊天记录,也不会选你没配置的线路之外的模型。它负责的是:面板、常驻会话、
轮次记账(busy 记账、轮次异常结束时自动重试一次)、按线路阈值做上下文轮换、以及文件与附件端点。
要求
需要 · 为什么 · 没有它会怎样
DSH >= 0.1.5-rc.1 · 宿主 · —
Node >= 22.5 · 加载器与浏览器半边 · —
Windows · 文件用 cmd /c start 打开,路径按 \ 拼 · 面板与接口照常;file: 链接回落成下载
一条你在 DSH 里配好的模型线路 · 常驻会话跑在它上面 · 面板与手工回写照常;跑不了一轮
wxRoot —— 你的微信附件根 · 解析 file: / img: 链接 · 只允许 <agentCwd>\output 之内
一条你自己的取数管线 · 读聊天、提炼条目 · 面板能用,但不会自己长东西
安装
dsh plugin --profile web add dsh-chat-digest
web 是 DSH 网页界面背后的那个 profile —— 你要改过名就换成自己的。**安装本身已经把它写进 profile 的
dsh.profile.bundles,别再手工加一遍,否则加载器会报 duplicate loader entry id。然后重启 dsh web**。
本地 checkout 一样:
dsh plugin --profile web add link:/path/to/dsh-chat-digest
为什么要重启:宿主半边只在挂载时求值一次。lib/ui.js与lib/right.js由本包自己用 HTTP 发出去
(Cache-Control: no-store),改完刷新页面即可。
怎么确认它在工作
GET /chat-feed/api/state—— 一份 JSON,含全部自证字段:条目、面板来源、线路槽、采集游标、
上下文窗口与阈值、最后一次错误。
POST /chat-feed/api/collect带{"dry": true}—— 只组装这一轮的提示词并返回,什么都不跑,
所以你能读到主 agent 究竟会被告知什么。
- 点侧栏「获取」:按钮走
探测中…→采集中…,面板自动打开;网关不通就闪红,
采集指针与采集时间都不变。
- 盘上:私人 profile 内的
state.json(条目、游标、线路槽)与panel.json。
新装完是空的,直到你喂进条目或跑一轮为止 —— 这是预期的:管线是你的。
配置
每个键都可选,写在那一行的 config 里 —— 可以写在包自己的 cordis.patch.yml,但更好是写在
你自己 profile 的 patch 层($DSH_HOME/profiles/<name>/cordis.patch.yml,它会赢):
- id: dsh-chat-digest
config:
localDir: 'C:\path\to\your\private-profile' # 私人数据与常驻会话的工作区
wxRoot: 'C:\path\to\wechat\attachments'
routes:
- id: 'free'
label: 'Free'
provider: 'your-provider'
model: 'your-model'
probeUrl: 'https://your-gateway/v1/models'
ctxRatio: 0.75
- id: 'paid'
label: 'Paid'
provider: 'your-other-provider'
model: 'your-other-model'
default: true
键 · 缺省 · 说明
bodyPath · <包>/lib/host-body.txt · 权威 Host 函数体;可用 DSH_CHAT_FEED_BODY 覆盖
stateDir · localDir(=私人 profile) · state.json 与 panel.json 的位置
agentCwd · localDir(=私人 profile) · 必须与 localDir 指向同一物理目录;通常无需配置
dshHome · $DSH_HOME,否则 %USERPROFILE%\.dsh · 读会话标题用
agentPreset · 空 · 建会话时带的 agent preset
routes · 一条通用线路 · [{ id, label, provider?, model?, effort?, probeUrl?, ctxRatio?, default?, hint? }]。两条线是设计形态;不配则只有一条不指定 provider/model 的线路,会话继承宿主默认
localDir · <DSH_HOME>/dsh-chat-digest · 你的私人 profile 的物理目录;见下
inboxDir · <agentCwd>\inbox · 内置提示词让 agent 去读的默认数据来源;local/round.md 里的 {inbox} 就是它,且它默认在 fileRoots 里
wxRoot · 无缺省 · 微信附件根 —— 只有当附件在 inbox 与 <agentCwd>\output 之外才需要
fileRoots · [wxRoot, <agentCwd>\output] · 允许取字节 / 用默认应用打开的根(拒绝 ..、根外绝对路径、UNC)
私人 profile(本地、不上传、更新不丢)
你的私人东西(提示词覆盖、私有配置、产物、知识库、归档、面板状态)住在插件自己的 profile 目录:
<DSH_HOME>/dsh-chat-digest/ 缺省 = %USERPROFILE%\.dsh\dsh-chat-digest
pipeline.yaml pipeline.json wxid / 数据库密钥 / 群名 / 各路径
output/ knowledge/ archive/ 产物 / 知识库 / 归档
docs/ state.json panel.json profile.md
<包>/local、<包>/profile、agent/output和agent/docs/{knowledge,archive}是兼容旧路径的运行时联接。
会话 cwd 与所有新代码的写入路径均使用私人目录的物理路径,不经这些联接写入。
- 为什么不直接放包里:
dsh plugin add <包>@<版本>会整体重建包目录,放里面的私人文件每次更新都没。 - 为什么不放别处:放
~/.dsh下(本页默认位置)由~/.dsh/.gitignore的*规则忽略,
仓库 .gitignore 与包的 files 白名单也排掉 local/profile/output/knowledge/archive/state
—— 三处都挡住,不会上传。
- 新机器可直接安装:挂载时创建空的私人目录及兼容联接;示例聊天不会自动放进 inbox。
你自己的提示词
唤醒提示词与每轮指令的本体在包里(通用件,随包发布、全文):
放哪 · 放什么
<包>/prompt/prompt.md · 唤醒主 agent 的提示词
<包>/prompt/round.md · 每轮的指令({date}/{mode}/{since}/{agent}/{pkg}/{profile}/{py}/{work} 会被替换)
想改成你自己的说法:在私人 profile 放一份同名的 prompt.md / round.md 即覆盖。
加载顺序 = 私人 profile → <包>/prompt/ → 内置通用;三份都不在时退回内置的短提示词。
localDir 的解析顺序:config.localDir → $DSH_CHAT_FEED_LOCAL → <DSH_HOME>/dsh-chat-digest
(若无 DSH_HOME,则用用户目录下的 .dsh)。私人 profile 已被 ~/.dsh/.gitignore、仓库 .gitignore 与包的 files 白名单三处排掉
—— 私人提示词与路径永远不会进仓库或 npm 包。
它写什么、花什么
- 状态写在
stateDir(缺省=私人 profile)下:state.json(原子写 + 一份.bak;解析失败时
把坏件隔离成 .corrupt-<ts>)与
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::1,最后更新 2026-09-28