npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@lemoncat7/dsh-knowledge

v2.13.1

Published

Local and remote knowledge bases for DeepSeek Harness, with scoped recall, controlled write-back, and a Web management console

Readme

dsh-knowledge

当前版本 2.13.1,已验证宿主 DSH 0.2.0-rc.2(宿主仍为 RC)。Node.js ^22.19.0 或 >=24.0.0。详见 兼容说明 和 发布说明。

npm GitHub Release awesome · DSH plugin

dsh-knowledge 是面向 DeepSeek Harness 的知识库插件。它不修改 DSH Agent Loop,同一个插件既能使用本地 SQLite,也能连接远程中央知识库。

兼容性

2.11.1 DSH 0.1.7 适配

插件正式版,已在 DSH 0.1.7-rc.2 构建与测试验证,覆盖 0.1.6-alpha.2 起的宿主破坏性变更:图标渲染崩溃、回合尾回写状态条注册抛错、停靠侧栏「待打开」恒被取消、连接设置卡片静默消失、会话消息 source 校验失败(共五项),逐一修复;开发依赖 11 个客户端包升至 0.1.7-rc.2。0.1.5 及更早宿主请继续使用 2.10.1(图标改名为单向迁移)。数据库无变更。本次 Linux / Node.js 22 验证 186 项测试全部通过,宿主实际回写、召回与设置注册已补充验证。详见 更新说明 和 DSH 0.1.7 兼容说明。

2.10.0 知识文档分组与会话工具

插件正式版,已在 DSH 0.1.5-rc.1 本地构建部署验证。知识文档支持折叠分组、拖拽及批量归类,新文档必选分组,自动回写优先复用已有分组。普通会话和伙伴会话共用分组查询与修改工具,并遵守挂载、项目、标签和审核权限。

186 项自动测试及浏览器分组回归通过。远程模式需同时升级知识服务;数据库升级至 schema 15,回退前应恢复升级前备份。详见 更新说明 和 分组使用说明。

2.9.6 新版宿主适配

插件正式版,已在 DSH 0.1.5-rc.1 验证,保留旧版回退。支持笔记选文摘录到知识库、来源引用和按目录浏览目标文档。详见 更新说明。

2.9.0 知识库分组

正式版,适配 DSH 0.1.2-rc.1。163 项测试及分组、挂载的桌面与手机浏览器回归通过。

“知识库与挂载 → 我的知识库”支持按家里助手、工作、个人等自定义分组。 点击“新建分组”选择知识库并命名;组标题可折叠、重命名,知识库编辑里的“所属分组”可选择已有名称、输入新名称或留空移回“未分组”。同名分组合并显示,空分组自动消失,搜索支持分组名并展开匹配项。 分组持久化在知识服务,独立于标签、内容及挂载权限;折叠偏好保存在当前浏览器。远程模式需要同时升级知识服务。数据库自动升级至 schema 14,回退旧插件前应恢复升级前备份。

挂载列表、设置弹窗及批量挂载确认统一显示“分类 / 知识库名”;列表先按分类、再按库名自然排序,未分组置后,搜索支持分类名,选择状态与挂载配置不受影响。

2.8.1 更新

  • 回写执行失败自动重试 4 次,间隔 5、15、60、180 秒,不再依赖错误关键词。
  • 重试耗尽后保留失败快照和写入计划,放行后续回写;旧失败记录也不再阻塞队列。
  • 重试沿用幂等和版本冲突检查,重启保留尝试次数与计划;158 项测试通过。

2.8.0 更新

正式版,适配 DSH 0.1.2-rc.1。

  • 当前知识文档和笔记自动检查版本,未编辑时刷新,编辑中保留草稿并提示新版本;提供差异和手动合并入口。
  • 页面保存、AI 笔记正文工具和关注记录增加版本校验,防止过期写入覆盖新内容;保存中继续输入仍保留为未保存草稿。
  • 保留指定笔记记录接口及普通会话的引用笔记权限,清理未使用的临时观察会话挂载逻辑。
  • 155 项测试及桌面、手机深浅主题浏览器回归通过。远程模式请同时升级知识服务;AI 笔记正文更新需携带读取结果中的 expectedVersion。

2.7.0 更新

正式版,适配 DSH 0.1.2-rc.1。

  • 新增回写任务工作区:按最新创建顺序查看队列、日期、阻塞项、失败原因和写入目标,支持重试与取消。
  • 保留中断后的内容快照和写入计划,支持重启恢复;取消请求持久化,执行退出前不会提前放行后续轮次。
  • 队列和对话共享状态变化通知,断线自动重连、轮询兜底;修复记录不存在时仍显示旧等待状态的问题。
  • 新任务记录创建时间,旧任务未记录的时间不伪造。已写入的内容不会因取消任务而撤销。
  • 150 项自动化测试通过,另通过桌面、手机、平板浏览器验证。需更新发起回写的客户端;只升级中央知识库不会更新客户端队列逻辑。

2.6.1 更新

适配 DSH 0.1.2-rc.1。

  • 内网分享导入支持管理员确认本次访问,无需提前配置白名单;确认限定当前分享,保留敏感地址拦截和逐跳校验。
  • 笔记文件夹、文件图标复用知识文档样式,更新分享导入等待图标。
  • 不改变网络 DNS 配置;目标不可达时仍需检查部署网络。

正式版 2.6.0 适配 DeepSeek Harness 0.1.2-rc.1,需要 Node.js 22.19+ 或 24+。浏览器端使用该版本的 Session Controller、Renderer、Chat、Settings 与 Theme 插槽接口。

2.6.0 将轮后回写改为本机持久化队列:先保存本轮快照,再释放会话结束流程,不再等待提取模型或远程写入。失败可在原回答下重试;重启和后续对话不会覆盖未完成任务。状态显示等待回写/回写中/成功及目标文档/失败与原因。远程直接写入需要中央服务同时升级到 2.6.0,旧服务不支持幂等回执时会明确报错并保留计划,不冒险重复写入。

回写任务管理

知识工作区的“回写任务”,以及回答下方的“管理回写”,可查看本机持久化队列。按创建先后倒序显示,最新任务在前,每页最多 50 条,可按会话筛选,查看创建日期时间、尝试次数、下次重试时间、阻塞任务、失败原因及完成后的目标文档。旧记录未保存创建时间时明确标注,不用迁移时间冒充。即使连接中央知识库,这里管理的也是当前 DSH 客户端的队列。

  • 网络等暂时错误最多自动尝试 5 次,之后保留为失败项,支持手动重试。重试复用原快照和已保存的计划,不使用后续对话重新生成旧任务。
  • 服务正常关闭后恢复排队;进程意外退出时,在旧工作租约到期后恢复(租约为 60 秒)。失败项仍需处理,不会在每次启动时无限重试。
  • 同会话正常按顺序回写;执行失败后间隔 5、15、60、180 秒自动重试(共最多 5 次尝试),不依赖错误文案。耗尽后保留失败记录、原始快照和写入计划,自动放行后续轮次;历史失败项也不再阻塞队列,可在回写任务中手动重试或取消。重试沿用幂等与版本冲突检查。服务停止、连接切换和远端执行租约等待不计入失败次数;其他会话可继续处理。
  • 排队和失败项可立即取消。执行中的任务先记录取消请求,待当前执行退出后完成取消,期间不提前放行后续任务。取消请求在重启后仍有效;已写入内容不撤销,也不支持恢复已取消的任务。
  • 页面通过共享长轮询接收状态变更通知,收到变化后立即查询最新状态,同时保留每 5 秒刷新队列的兜底。隐藏后暂停连接,重新显示或网络恢复后重新同步;原回答下也使用共享通知通道。确认记录不存在时清除旧等待状态,查询网络失败则提示重连,不误报任务不存在。历史版本未保存快照的任务不能安全重试。

前端回写状态自动轮询,修复浏览器原生 fetch 的接收者绑定问题;读取失败会明确显示正在重连,不把查询失败误报为写入失败。139 项自动化测试通过,并验证真实 Chromium 中的状态请求、目标文档链接及桌面/手机/平板展示。

2.5.1 修复知识目录的长文件名撑宽列表、遮挡结束状态的问题:名称按剩余空间省略,悬停可查看完整名称和路径,“已解决/已收集完成”标签完整保留。不改变文档内容、权限、配色或动画。

2.5.0 支持在用户明确确认问题解决或收集结束后,由 Agent 或轮后提取更新知识文档状态。整篇结束保留正文与历史并封存,局部问题仅修订对应段落;继续遵循挂载权限、审核模式、敏感内容审查及版本冲突保护。远程客户端与中央服务应同时升级。

2.3.6 包含长对话回写前检索触发 HTTP 400 / 431 的修复,并补全干净构建所需的依赖锁文件:自动检索使用有界关键词,长查询通过 POST 传输。使用远程知识库时,请同时更新发起回写的客户端;只更新中央服务不能修复旧客户端发送的超长 GET URL。更新并重启后,可重试之前失败的回写。

当前版本提供可部署的多知识库、按需检索工具、本地与远程中央服务、文档型 Web 管理台,以及全局回写策略与安全直写协调:

  • 回答完成后保存本轮快照,后台使用对应模型判断是否产生知识,并在原回答下方显示逐库回写结果。
  • 知识标题、正文、自然语言标签和提取理由默认跟随本轮用户语言;代码、命令和技术标识保持原样。
  • 回写结果只作为 UI 状态展示,在下一次模型请求前会被移除,不占用会话上下文。
  • 全局“严谨 / 主动”回写策略保存在权威知识库服务中;远程客户端自动跟随中央设置。严谨模式不限制候选数量,而是以长期价值和较高置信度为门槛,接受用户明确陈述以及带具体来源的可靠调研结论。
  • 可创建多个知识库,分别设定说明、默认标签和提取要求。
  • 每个知识库可选择专用回写模型;未设定时跟随当前会话模型。
  • 项目和会话挂载;会话默认继承项目,也可独立覆盖或关闭。
  • 每个挂载支持仅召回、审核写入、直接写入,以及包含/排除标签和额外提取要求。
  • create / update / conflict / skip 文档变更决策;更新会明确区分“补充新内容”和“修订过时原文”,不再用追加文本冒充原文修改。
  • 原文修订使用唯一旧文本锚点和目标版本,由服务端在完整文档上原子执行。无关并发补充可安全重放;同一区域已变化时才转为真实冲突并进入人工解决。
  • 未挂载知识库时,不召回、不提取、不回写。
  • 全局与项目范围,以及偏好、事实、决策、流程、经验五类知识。
  • SQLite WAL、FTS5 全文搜索、原子事务、完整版本历史和幂等提取任务。
  • 回答前通过 DSH 官方提示组装接口提供有界的挂载库地图,并自动召回最多 3 条达到相关性门槛的摘要;不自动注入完整文档。模型可继续按“knowledge_base_search 找库 → knowledge_search 搜索指定库 → knowledge_read 读取文档”的顺序核对完整内容。
  • 普通知识沉淀独立于主 Agent:主模型不暴露通用 knowledge_write,在回答结束后由独立提取调用处理,真实回写状态显示在回答下方。
  • 用户明确确认“问题已解决”或“收集完成/结束”时,Agent 可通过 knowledge_document_status 更新对应知识状态,也支持回答后的自动提取。工具先搜索并读取目标文档,提交当前版本、用户确认原话和结论;仅解决其中一个问题时只修订对应段落,整篇保持开放。整篇结束保留正文和结论、生成历史版本并停止后续回写,可在界面重新打开。
  • 状态更新遵循挂载权限:仅召回不能写,审核模式产生待审核候选,直接模式在版本核验通过后生效;敏感内容转人工审核。Agent 只能按实际工具结果说明“已标记”或“待审核”。不能用模型自述、疑问或普通“好了”封存文档,过期版本也不能确认结束。远程使用同一候选协议,服务端需同步升级到支持文档状态候选的版本,不会在远端失败后回退写本地。
  • 用户明确要求时,模型可调用 knowledge_base_create 和 knowledge_base_update 创建或修改知识库,包括描述、标签、回写策略与专用回写模型;工具内部跟随当前 Provider 自动写入本地 SQLite 或远程中央服务,模型不传也不猜存储位置。
  • knowledge_base_create 默认不保存专用 provider/model,回写沿用本机覆盖设置,否则跟随每次会话;即使连接远程知识库,也不复制远端模型配置。只有明确指定 useCurrentSessionModel: false 时,才要求并校验成对的专用模型参数。默认模式下旧调用夹带的模型字段会被忽略,并在结果中说明。
  • 创建或修改工具不会自动挂载知识库,也不会回退、双写或同步到另一端;结果会明确返回实际写入的 local 或 remote。
  • 搜索和读取由服务端按当前会话挂载、项目范围及包含/排除标签强制限权,读取句柄带签名且仅限当前会话。
  • 本地与远程 Provider 使用同一接口;远程模式不做隐式双向同步。
  • DSH“设置 → 插件”提供“知识库连接”卡片,可选择本地来源或填写中央服务地址和只写客户端令牌,保存后实时验证并切换 Provider。
  • Bearer Token 仅保存 SHA-256 摘要,支持 read / propose / write / admin 权限及吊销。
  • 认证 HTTP API,可作为其他 DSH 客户端和未来桌面端的中央知识库。
  • 笔记软件式双栏文档界面:左侧以“知识库 → 文档”树形目录浏览和新建,右侧支持 Markdown 编辑与安全预览;目录按知识库懒加载并分页,只有打开文档时才读取正文。已有文档默认预览,新建文档默认编辑。
  • 每个生效主题对应一篇真实 Markdown 文档;相似知识作为章节或增量内容写入同一文档。创建、改名、保存、归档和删除会同步 SQLite、全文索引、版本历史与物理文件。
  • 独立的笔记工作区:在知识工作区上方提供可无限嵌套的目录树,支持 Markdown 与常见文本文件直接编辑,图片和 PDF 就地浏览,以及任意文件的拖拽移动、复制、重命名、下载和只读分享。主侧栏中的独立“已分享”页面集中管理本机链接,也能读取其他 DSH 的分享清单并将文档或完整目录复制到指定笔记目录。Markdown 编辑器提供标题大纲定位、文内查找与替换、选择结束后出现的浮动格式菜单和 Ctrl/Cmd + F 快捷键;每次保存会形成按需读取的页面历史,可预览、比较并恢复为新版本。笔记默认不参与知识检索、自动召回或 AI 回写。
  • 分享导入保留 SSRF 防护;域名解析到内网或使用内网 IP 时,导入弹窗提示目标 Origin,管理员点击「允许本次内网分享并读取」后即可继续,无需预先配置白名单。确认仅绑定当前分享链接,修改链接或关闭弹窗即清除,不持久化;不允许借此访问回环、链路本地/云元数据地址或其他分享和接口,重定向仍逐跳校验。原有 trustedShareOrigins 和远程访问插件的可信 Origin 配置继续兼容。
  • 知识文档使用独立的“关联笔记”列表引用笔记文档或文件,正文不再插入引用语法。关系绑定稳定编号,笔记移动或改名不会失效;旧 note:// 引用会在升级时安全回填为结构化关系。
  • 用户明确要求时,AI 可使用 knowledge_note_list / search / read / create / update / move / delete 浏览和维护笔记工作区;所有目标都使用当前会话签名句柄,远程操作继续服从令牌权限,删除被知识文档引用的笔记会被拒绝。
  • knowledge_note_references 单独负责查看、添加或移除知识文档与笔记的结构化关联,并在执行时重新检查知识挂载范围、写入模式和文档封存状态。
  • 文档可标记为“已解决”或“已收集完成”。结束后的文档仍参与搜索和召回,但被服务端强制封存为只读;AI 回写、候选审核和人工编辑都必须先重新打开文档。
  • 知识库管理拆分为“知识库”和“项目与会话挂载”两个工作区;支持按名称、描述、标签和模型即时搜索,避免知识库较多时逐张翻找。
  • 随插件安装的响应式 Web 管理台,覆盖概览、文档树与编辑器、AI 候选审核和客户端令牌管理。
  • DSH 浏览器端插件:在左侧工作区下方显示“知识库”,并在当前页面内打开管理面板。
  • 明暗主题、键盘操作、窄屏布局以及不依赖颜色的状态标签。

安装

从 npm 安装正式版:

dsh plugin --profile web add @lemoncat7/dsh-knowledge

需要固定本次正式版本时:

dsh plugin --profile web add @lemoncat7/[email protected]

也可以从 GitHub Releases 下载对应版本的完整预构建包后安装:

dsh plugin --profile web add ./lemoncat7-dsh-knowledge-2.3.2.tgz

卸载:

dsh plugin --profile web remove @lemoncat7/dsh-knowledge

插件是标准 DSH profile bundle:package.json 的 dsh.bundle.patch 指向 cordis.patch.yml。安装后不需要单独运行知识库容器。

安装或更新后请重启对应的 DSH profile。Web 版重启命令:

pnpm dsh web

DSH 插件商店

本仓库符合 DSH 社区目录的安装要求:声明了 dsh.bundle、发布了 npm 预构建包,并使用 GitHub dsh-plugin Topic。目录收录完成后,可在 DSH 的插件市场搜索 dsh-knowledge 或“知识库”,安装源为 @lemoncat7/dsh-knowledge。

插件商店的数据来自 awesome-dsh-plugin.com,不是单靠 npm 标签自动生成。若商店尚未刷新,可先使用上面的 npm 命令安装。

本地模式

默认配置使用 DSH 持久目录中的 SQLite 文件:

- id: knowledge
  name: '@lemoncat7/dsh-knowledge'
  config:
    backend: local
    databasePath: !!js dshHomePath('knowledge/knowledge.sqlite')
    extractionEnabled: true
    defaultScope: project
    autoRecallLimit: 3
    autoRecallMinScore: 0.2
    recallMaxChars: 5000
    exposeApi: false
    exposeWeb: true

本地管理台默认开启。它使用独立的同源管理接口,不要求开放远程 API,也不要求输入访问令牌;侧栏“知识库”安装后即可使用。任何能访问 DSH Web 的用户都具有本地管理权限,因此把 DSH 暴露到公网时,应继续使用反向代理登录保护整个 DSH 站点。

提取模型默认沿用刚完成回答的 provider/model。可在单个知识库中设置专用回写模型;“本机回写模型”是当前客户端的最高优先级覆盖,适合中央知识库在不同客户端使用不同模型。实际优先级为:本机覆盖 → 知识库专用模型 → 当前会话模型 → 以下兼容性后备配置:

    extractionProvider: deepseek-official
    extractionModel: deepseek-chat

独立模型必须先在 DSH 的模型设置中注册。不论使用 Kimi 还是其他会话模型,首次超限后都会保持原 provider/model,用精简提示和低推理重试,不会暗中换模型。

提取输出达到模型上限时会自动用双倍预算重试一次(最高 8192 tokens)。其他提取失败会将幂等任务标为 failed,失败任务最多可重新领取两次,并在回答下方记录回写通知,不会阻断下一轮。

中央服务端

需要作为中央知识库时,进入“知识库 → 访问管理”,点击“开启远程 API”。开关会持久化,页面会显示其他客户端应填写的完整 API 地址;然后为每台客户端创建独立令牌。已撤销令牌可以永久删除。

部署自动化仍可通过配置直接启用认证 API:

    backend: local
    databasePath: !!js dshHomePath('knowledge/knowledge.sqlite')
    exposeApi: true
    apiToken: !!js process.env.DSH_KNOWLEDGE_API_TOKEN
    apiPrefix: /knowledge-api/v1
    exposeWeb: true
    webPath: /knowledge

DSH_KNOWLEDGE_API_TOKEN 至少 24 个字符。该值只用于创建或恢复 bootstrap admin 身份;数据库只保存摘要。服务端没有 TLS,非回环部署必须放在 HTTPS 反向代理之后。

启用后访问 http://<DSH 地址>:<端口>/knowledge。本地管理台使用同源管理权限;开放给其他客户端的 apiPrefix 仍强制要求 Bearer Token。管理台和 API 均由 DSH 自身 WebServer 提供,不需要额外容器。

管理台功能:

  • 查看准确的知识、候选和提取任务统计。
  • 创建和编辑多个知识库,管理默认标签与提取要求。
  • 在知识库页切换全局“严谨 / 主动”回写策略。
  • 管理当前项目挂载和会话覆盖,设定召回、写入模式与标签范围。
  • 在左侧知识目录中搜索、新建和切换文档,在右侧进行 Markdown 编辑与安全预览;文档区域随窗口自适应,窄屏时知识目录切换为抽屉。
  • 在“笔记工作区”中建立多级目录,直接编辑 Markdown、文本、JSON、YAML、代码和配置文件;Markdown 笔记支持标题大纲定位、文内查找/替换,以及选中文字后的段落、标题、列表、引用、代码、链接等快捷格式菜单。页面历史按需加载单个版本,可查看逐行差异并将任意旧版恢复为新的保存记录。工作区同时支持上传、拖放、复制、移动、搜索、下载和就地浏览图片与 PDF;知识文档底部的“关联笔记”栏用于查看、打开、添加和移除资料关系。
  • 查看 AI 提取依据和真实增删差异,直接通过、编辑最终文档后通过或拒绝候选。
  • 创建、查看和撤销客户端令牌;新令牌原文只显示一次。

知识库的 description 同时用于读取和回写路由:它以轻量目录形式告诉模型每个挂载库覆盖什么主题,knowledge_base_search 也用它匹配当前信息需求;文档正文不会随目录注入。主模型不执行内容回写,所有回答都在完整结束后进行一次独立的严格提取,同时判断长期价值、目标知识库、重复、更新与冲突;用户明确要求保存时也走同一条回答后链路。挂载只表示“可选”,不代表每次回答都要写入。extractionInstructions 用于匹配后继续限定具体收录规则。

笔记工具与知识回写相互独立。当前用户消息只要明确提到“笔记文档”“笔记目录”或“笔记工作区”,AI 就可以按该消息的要求查看和维护笔记,不需要固定授权句式;永久删除仍必须在当前消息中明确提出,并且授权不会从历史消息延续。工具会先用 knowledge_note_list 浏览目录或按名称搜索,也可用 knowledge_note_search 查找非目录节点;随后把返回的精确句柄传给 knowledge_note_read / update / move / delete。knowledge_note_create 未指定父目录时写入笔记根目录,指定目录时必须使用 knowledge_note_list 返回的文件夹句柄。本地和远程模式由当前 Provider 决定,工具不接受也不猜测存储位置。管理台中的笔记文档和普通文件均可从目录列表或打开后的工具栏下载。

创建示例:

{
  "draft": {
    "name": "DSH 项目规范",
    "description": "只匹配 DSH 插件开发、架构决策和部署规范相关对话",
    "defaultTags": ["dsh", "project-rule"],
    "extractionInstructions": "只收录已确认且可跨会话复用的结论"
  }
}

局部修改标签或描述时使用 PATCH /knowledge-bases/:id,请求体为 {"patch":{"description":"...","defaultTags":["..."]}}。

主要 API:

| Method | Path | Permission | Purpose | | --- | --- | --- | --- | | GET | /health | public | 健康检查 | | GET/PUT | /settings | read/admin | 读取或修改全局回写策略 | | GET / POST | /search | read | FTS 检索;长查询使用 POST JSON 请求体,字段为 text、limit、projectId、knowledgeBaseIds、includeTags、excludeTags、types | | GET/POST | /knowledge-bases | read/write | 知识库列表和创建 | | GET/PUT/PATCH | /knowledge-bases/:id | read/write | 详情、完整替换和局部修改 | | POST | /knowledge-bases/:id/archive | admin | 归档并关闭相关挂载 | | POST | /knowledge-bases/:id/restore | admin | 恢复已归档知识库 | | DELETE | /knowledge-bases/:id | admin | 永久删除已归档知识库及全部关联数据 | | GET/POST/DELETE | /mounts | read/write | 挂载查询、更新和删除 | | POST | /mounts/bulk | write | 事务型批量挂载与取消 | | GET | /mounts/resolve | read | 解析项目继承与会话覆盖 | | GET | /documents | read | 按知识库或正文搜索 Markdown 文档 | | GET | /document-index | read | 分页读取不含正文的文档目录;支持 knowledgeBaseId、q、limit 和 cursor | | GET | /documents/:id | read | 读取单篇 Markdown 文档 | | POST | /documents/:id/finalize | write | 标记为已解决或已收集完成并封存 | | POST | /documents/:id/reopen | write | 重新打开封存文档 | | GET | /notes | read | 懒加载目录子节点,或使用 q 搜索全部笔记文档 | | POST | /notes/folders | write | 在任意层级创建目录 | | POST | /notes/documents | write | 创建可编辑的 Markdown 笔记文档 | | POST | /notes/files | write | 上传原始文件;名称和父目录通过查询参数传入 | | GET/PATCH/DELETE | /notes/:id | read/write/admin | 读取元数据、重命名或移动、递归删除 | | POST | /notes/:id/copy | write | 复制文档、文件或完整目录树 | | GET/PUT | /notes/:id/content | read/write | 读取文件内容,或保存 Markdown 与受支持的文本文件;支持 ?download=1 | | GET | /notes/:id/references | read | 列出引用该节点或其目录后代的知识文档 | | GET | /notes/shares | admin | 列出当前笔记工作区的分享记录 | | POST/DELETE | /notes/:id/share | admin | 创建或停止文档/目录的只读分享 | | POST | /notes/import-share/inspect | read | 校验分享链接并读取有大小上限的清单,不写入内容 | | POST | /notes/import-share | write | 从分享链接复制文档或完整目录到指定笔记目录 | | GET | /shared/:token | public | 打开只读分享页;目录分享只允许访问对应子树 | | GET | /shared/:token/content | public | 读取分享范围内的文件内容,支持 noteId 与 download=1 | | GET | /shared/:token/manifest | public | 返回供导入使用的只读目录清单与内容摘要 | | GET/POST | /entries | read/write | 列表和直接创建 | | GET/PUT/DELETE | /entries/:id | read/write/admin | 详情、更新、彻底删除 | | GET/POST | /entries/:id/note-references | read/write | 查看或添加结构化笔记关联 | | DELETE | /entries/:id/note-references/:noteId | write | 移除一项笔记关联 | | GET | /entries/:id/versions | read | 版本历史 | | GET/POST | /candidates | read/propose | 候选列表和提交 | | POST | /candidates/direct | propose + write | 原子直写、兼容合并、重复跳过和冲突转审 | | POST | /candidates/:id/review | write | 审核候选 | | GET/POST/DELETE | /tokens | admin | 客户端令牌管理 |

路径均位于配置的 apiPrefix 下。创建令牌时,原始令牌只在响应中返回一次。

笔记文件上传使用请求体原始字节,不使用 Base64 或 multipart;单文件上限为 64 MiB。目录和文件元数据与知识 SQLite 分开保存在 notes/notes.sqlite,内容按稳定编号保存在 notes/objects/。知识库删除或归档不会删除笔记;仍被知识文档引用的节点及其上级目录默认禁止删除。

远程客户端

先在中央实例的“知识库 → 客户端令牌”中为每台客户端分别创建令牌。普通 DSH 客户端建议选择 read + propose。write 是当前中央服务的全局写权限,同时允许直接写入知识、管理知识库、挂载和笔记;只在客户端确实需要这些能力时授予。令牌原文只显示一次。

其他 DSH 客户端安装本插件后,打开“设置 → 插件 → 知识库连接”,选择“远程”,填写中央实例的知识库 API 地址和客户端令牌,再点“验证并连接”。插件会先验证地址和令牌,成功后立即热切换,并把连接持久化到 DSH 数据目录;令牌不会在页面或控制接口中回显,只能覆盖。

侧栏“知识库”入口会先通过控制接口确认当前实例是否启用了管理台,确认后才加载管理页面。管理台默认随本地模式启用;只有 profile 显式设置 exposeWeb: false 时才关闭。入口不会把未注册的 /knowledge 误交给 DSH Web 主页面,因此不会触发 dsh-plugin-desktop 参数错误。

如需用配置文件或环境变量部署,也可以直接设置 Provider:

- id: knowledge
  name: '@lemoncat7/dsh-knowledge'
  config:
    backend: remote
    remoteUrl: 'https://knowledge.example.com/knowledge-api/v1'
    remoteToken: !!js process.env.DSH_KNOWLEDGE_REMOTE_TOKEN
    extractionEnabled: true

远程地址必须是 HTTPS;只有 localhost 和回环 IP 的测试地址允许 HTTP。普通客户端建议只分配 read + propose 权限。 远程客户端连接的是中央库,不会复制或同步一份本地数据库;断网时无法召回或回写。侧栏管理台仍在当前 DSH 内打开,插件通过同源代理携带已保存的远程令牌访问中央 API,不使用跨域 iframe,也不会把令牌交给浏览器。远程模式隐藏“访问管理”,API 开关和客户端令牌仍由中央 DSH 管理。每台客户端仍需用自己的项目/会话标识挂载所需知识库。

开发与 Docker 构建

要求 Node.js ^22.19.0 || >=24.0.0。

npm install
npm test
npm run pack:check

推荐使用 Node 24 Docker 环境编译、测试并输出 tarball:

docker build \
  --build-arg NODE_IMAGE=docker.1ms.run/library/node:24-bookworm-slim \
  --target artifact \
  --output type=local,dest=dist .

架构和一致性设计见 docs/architecture.md,首版产品边界见 docs/requirements.md,文档型演进设计见 docs/document-knowledge-design.zh-CN.md。

本项目采用 MIT License。

挂载知识的引用笔记

已挂载、可召回的知识文档引用了笔记后,AI 可以通过 knowledge_note_references list 取得笔记句柄,携带 knowledgeHandle 调用 knowledge_note_read 和 knowledge_note_update 读取、追加或替换笔记正文,无需新开关或每轮用户消息。每次调用检查当前挂载范围和实际引用关系;解除引用或关闭召回挂载后失效。知识库的只读挂载仍保护知识文档本身,不阻止其引用笔记的正文更新。此权限不包含笔记创建、删除、移动、重命名或引用关系变更;远端服务原有访问权限继续生效。 伙伴轻量关注只使用手动指定的记录位置,不处理依据中的笔记引用。宿主通过 dshKnowledgeNoteRecording 读取、校验并更新指定笔记。

文档自动同步与保存保护

  • 当前打开的知识文档、可编辑笔记约每 5 秒检查一次版本,有变化才读取正文。不扫描整个文档库;后台标签暂停请求,网络失败自动退避重试。
  • 未编辑时自动更新并保留滚动位置;有未保存修改或正在输入时保留编辑器,提示“文档有新版本”。差异窗口可对照最新内容手动整理,应用为草稿后再保存;放弃草稿需要确认。
  • 页面保存携带读取时的版本;保存过程中继续输入的内容仍标记为未保存。服务端拒绝过期版本,不自动覆盖,也不自动创建被删除的文档。
  • knowledge_note_read 返回 note.version。knowledge_note_update 的正文追加、替换必须携带 expectedVersion;版本过期需重新读取和合并,重命名不需要正文版本。
  • 指定关注记录的内容哈希检查保留,实际写入进一步在笔记写入队列内校验版本。知识文档的版本校验与写入位于同一数据库事务。
  • 这是自动同步与冲突保护,不是多人逐字协同。远端知识服务也需要更新到支持版本校验的版本。

内置工作日报

在「知识库 → 工作记录 → 工作日报」使用,无需独立日报插件。适配 DSH 0.1.7-rc.2。 采集默认关闭;支持全部项目、选择当前/已记录项目、手写路径,以及从 DSH 已配置模型中选择整理模型。 支持日期、补记、来源核对、编辑、导出、历史版本和持久化重试;日报数据独立存储,不混入知识文档。 试用版升级会复用原 worklog/worklog.sqlite;部署时应先移除旧 dsh-worklog bundle 注册,保留数据库,防止双重执行。

中央统一日报

日报跟随知识库连接:本地模式的 DSH 是日报存储/整理节点;远程模式仅采集和补传,浏览、编辑、模型列表和定时配置均来自已连接的中央知识库。中央与采集端都需要升级到支持统一日报的版本,中央需开启知识库远程 API。旧中央不支持时显示升级提示,不悄悄切回本地日报。

  • 本机采集:启用开关、项目范围、本地工作目录、排除会话由每个 DSH 实例独立保存。断网时也可单独关闭采集;已授权进入上传队列的素材仍会补传。
  • 中央整理:时区、模型、每日整理时间和开关统一管理。上传素材按中央时区归日;客户端模型 ID 不直接用于中央生成。请在中央模型列表选择可用模型,避免中央没有对应本机模型。远端模式不会运行原本地整理队列。
  • 断网补传:来源先写入本地 SQLite 上传队列,指数退避重试(最长间隔 5 分钟),可手动重试。来源使用持久实例 ID + 原记录 ID 去重;成功回执后清掉队列中的正文,只保留去重凭证。中央记录被排除后,重复上传不会重新纳入。
  • 目标隔离:队列绑定采集时的中央地址,切换连接不把旧来源发到新中央;回到原地址后继续。同一地址的中央实例 ID 改变时暂停上传并提示,不自动将旧数据交给替代实例。
  • 历史迁移:点击「迁移本地历史」并确认后,来源进入上传队列,已有日报/历史版本作为中央历史归档,不覆盖中央正文。本地数据仍保留;不迁移原本地模型/定时配置或未完成的生成任务。重复迁移可去重。
  • 认证和权限:中央使用现有 Knowledge Bearer Token:读取需要 read,来源上传/补记/整理需要 write,中央设置和历史日报迁移需要 admin。本机网页入口仍需 Host 登录认证。这里是同一中央的共享工作记录,不是按令牌隔离的私人日记,勿给不可信人员中央读取权限。

来源跨实例汇总,但不会尝试在本机打开其他实例的会话。补传状态在页面显示;中央离线时明确报错,本机采集设置仍可修改。

每日定时整理

在「采集设置 → 中央整理 → 定时整理」开启,选择每日时间(默认建议 23:00),按中央设置中的 IANA 时区运行。默认关闭;保存后从下一个设定时间开始,浏览器无需保持打开,但中央 DSH 服务必须运行。

每次整理目标为该日期截至执行时的已采集/补记素材,使用同一模型设置及持久任务队列。采集开关与整理开关独立:关闭采集后,仍可定时整理手工补记。不覆盖人工编辑的正文;无新素材不调用模型;到点后新增的素材可手动更新日报。既有任务运行时等待其结束再判断是否需要整理。

每日触发标记与任务入队在同一事务中持久化;服务重启只补最近一次错过的日期,不批量回填历史。网络失败沿用最多三次自动尝试,失败后在对应日期手动重试。设置中显示最近一次定时检查结果。修改执行时间或时区从新设置的下一次时间生效;关闭定时不取消已入队任务,可在日报页面单独取消。