DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

PolinniZhong /

PolinniZhong/dsh-knit

Verified

Agent 一天产出 20 篇文档,你找不到刚才那篇。Knit:DeepSeek Harness(DSH)Web 插件,把工作区最近的 Markdown 文档与图片/视频放到对话旁边的侧边栏,按与当前对话的相关性排序,点开就地预览。零模型调用。 | Recent docs, images & video in the DSH sidebar, ranked by relevance, with inline preview.

★ 1 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: main@8841a675

Knit

Agent 一天产出 20 篇文档,你找不到刚才那篇。 Knit 把它们放到对话旁边 —— 你正在聊什么,相关的那篇就在最上面。

Knit 面板真机截图:右侧栏列出工作区里的文档,下方就地展开 Markdown 预览

真机截图(不是原型):一个含 16 篇文档的工作区,列表 + 就地预览。 注意顶行:新会话还没聊起来时,它退回按最新排并如实说明依据,不假装排了个序 —— 一发出消息,这一行就会换成按你正在聊什么排序。

扫整个项目文件夹的 Markdown / 图片 / 视频 · 排序跟着对话走 · 不调模型、不联网

dsh plugin --profile web add dsh-knit

这不就是个「最近文件列表」吗?

是的,但有两个关键区别:

  1. 范围:最近打开列表只记你点开过的文件;Knit 扫整个项目文件夹。 重启 DSH、新开会话、跨天回来,它都还在。
  2. 排序:它按时间排;Knit 按你正在聊什么排。

三句话说完它是什么:

  1. 扫整个项目文件夹的 Markdown,不只是这一轮生成的那几篇 —— 重启、换会话、跨天都还在
  2. 排序跟着你正在聊什么走:聊架构,架构文档浮上来;聊竞品,竞品分析浮上来
  3. 不调模型、不联网:全是本地字符串运算,零延迟、零成本、文档不出本机

「相关」是怎么算出来的

没有玄学,就是字符串运算。三步:

1. 读当前会话。 取最近 6 条用户 / 助手消息,只认真人输入的用户消息 (agent.inject() 塞进来的合成上下文不算,那会把话题带偏)。越新的消息权重越高:3 / 2 / 1 / 1 …

2. 抽关键词。

  • 英文词:取值很高,出现 1 次就要(chokidar、mtime 这种精确词)
  • 中文 2/3-gram:出现 2 次,或出现在最新那条消息里
  • 虚词表过滤 + 贪心去重叠(选了「相关性排序」就不再算「相关性」和「排序」)

3. 给文档打分。 每个词对每篇文档算加权命中:

标题 ×4  +  摘要 ×2  +  正文前 2500 字 ×1
单个词命中数封顶 6 次(防止长文档堆词刷分)
再叠 10% 的时间新鲜度微调(主排序仍是相关性)

全是字符串运算 —— 没有 embedding,没有模型调用。

并且老实说边界:对话只有一两句时关键词太少,它会退回按修改时间排, 并在面板上说明这一点 —— 不假装排了个序。


安装

dsh plugin --profile web add dsh-knit

装完重启 DSH,然后硬刷新浏览器(Cmd + Shift + R)。

怎么打开:

  • 会话头部右侧的 Knit 图标按钮(就在右侧栏展开按钮旁边)—— 一键开面板
  • 或右侧栏 tab 条上的「+」→「Knit 最近文档」

可选:装了 dsh-better-sidebar 的话,面板也会注册成它的一个 tab; 没装不受影响,两边是各自独立的可选依赖。


功能

能力
按当前对话相关性排序(纯本地关键词匹配,零模型) ✅
相关性 / 修改时间双模式一键切换(偏好记在 localStorage) ✅
扫描会话工作区里的 .md(递归,深度 ≤ 6,跳过 node_modules / .git / dist) ✅
每项显示:H1 标题(无则文件名)+ 相对时间 + 首段摘要 ✅
单击就地展开预览,再点收起 ✅
相对路径图片真正渲染(./img/a.png、../assets/b.png) ✅
文档 / 图片与视频 / 全部 三类一键切换(偏好记住,默认仍是文档,老体验不变);选中态是中性灰填充,不带品牌色描边 ✅
图片与视频:方形缩略图网格,最少 3 列、宽了才加列;格子 64px 起步,一屏基准 8 个,超过 8 个不隐藏而是整块等比缩小;视频自动取首帧、叠播放三角与时长角标(零依赖、不转码) ✅
点图片 / 视频在面板内就地预览:图片大图、视频可播放可拖动(HTTP Range 流式,不全量下载) ✅
「全部」视图分上下两区:文档最多 4 条(超出给「查看全部 →」);图片视频不截断,只给计数 ✅
预览面板可拖高度(20%–80%,位置记住)、可全屏,Esc 退出 ✅
双击在新标签页打开 ✅
过滤框:按标题 / 摘要 / 路径实时过滤 ✅
点工作区路径:用系统文件管理器打开项目文件夹 ✅
悬停入口按钮偷看:弹只读浮层列最近 5 篇,点击才进右边栏(不推挤布局) ✅
键盘导航:↑ ↓ 移动即预览 / Enter 切换 / Esc 收起 ✅
每 5 秒自动刷新 + 手动刷新;2 分钟内改动过的文档打 🆕 ✅
中英双语,跟随 DSH 语言实时切换(不用重载插件) ✅
零模型调用、零网络出口 ✅

相关度不做可视化(不显示百分比、不画长条)—— 排序本身就是答案,名次即相关度。


它读什么,不读什么

  • 扫描当前会话工作区内的 .md、图片与视频(路径越出工作区一律拒绝);媒体只取元信息,不读画面内容
  • 只读当前会话的对话事件(用来排序)
  • 不发起任何对外网络请求:客户端的 fetch 都指向插件自己的同源路由
  • 没有安装期脚本(无 install / postinstall)
  • 零依赖 —— 装完不需要构建授权,也没有构建步骤
  • 按路径读文件的接口只放行图片 / 视频扩展名白名单(图片 ≤ 12MB、视频 ≤ 256MB), 视频走 HTTP Range 按需取字节,响应带 nosniff 与 default-src 'none'; sandbox

面板里那份「相关度」只影响排序,不显示也不外传。


已知限制

  • 对话太短时排序会退化:只有一两句时关键词不足,退回按修改时间,并在面板上说明
  • 中文分词是 n-gram 近似:没有引入分词库(那会带来依赖),效果够用但不算精细
  • 右侧栏默认页会变成 guide:DSH 的规则是「guide 入口只有一个才直接开那一页」, 内置 Files 占了一个,所以展开右侧栏先看到 guide,需要点一下胶囊
  • 媒体只认常见格式与大小:图片 png/jpg/jpeg/gif/webp/avif/bmp/ico/svg、 视频 mp4/m4v/webm/mov/ogv;图片 ≤ 12MB、视频 ≤ 256MB,超出不列出
  • 媒体只按文件名参与相关性匹配:不解析画面 / 语音内容,截图与录屏建议用可检索的文件名
  • 右侧栏状态是 memory-only:刷新或新会话会回到收起状态

开发

git clone https://github.com/PolinniZhong/dsh-knit.git
cd dsh-knit

npm test          # 162 项,零依赖,不需要先 npm install

改动生效方式:宿主半边(src/host/)改了必须重启 DSH(实测不热加载); 客户端半边(src/client/)改了硬刷新浏览器即可。

没有构建步骤:客户端半边是手写的 window.__ModuleLoader__.load({...}), 用 React.createElement 而不是 JSX,所以不需要 tsdown / tsc。 静态资源也是内联的 —— 改图标要同时改 assets/ 源文件和 src/client/client.js 里的 KNIT_ICON_PATH,test/icon.test.mjs 会核对两者逐字一致。

knit/
├── package.json          # dsh.bundle.patch + dsh.client
├── cordis.patch.yml      # 挂进 plugin tree 的 insert 行
├── assets/               # 图标源文件(path 已内联进 client.js)
├── src/
│   ├── host/index.js     # /knit/api/recent · /doc · /raw
│   ├── host/relevance.js # 相关性引擎(纯函数)
│   └── client/client.js  # 双宿主注册 + 面板 UI
└── test/                 # 162 项测试

细节和取舍写在源码注释里;贡献流程见 CONTRIBUTING.md, 版本变更见 CHANGELOG.md。

版本策略:0.x 表示功能还在动,可能有破坏性变更。 1.0.0 留给「真实留存被验证之后」,不因为功能做完就发。

协议

MIT © Polinni

—/ 5

No ratings yet

Verified DSH bundle

Commit 8841a675f0d7

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout