面向 DeepSeek Harness 的知识库、笔记与工作日报插件。支持本地使用和远程中央知识库,不修改 DSH…
46.1/100
综合分
20
GitHub 星标
2,559
npm 周下载
—/5
用户评分
数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @lemoncat7/dsh-knowledgenpm 源 · @lemoncat7/dsh-knowledge 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@lemoncat7/dsh-knowledge @ 2.17.0
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 22:56:34
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 151 处,展示前 79 条)
- 读取本地文件lib/index.js:109
const databasePath = base === ':memory:' ? ':memory:' : existsSync(legacy) ? legacy : `${base}.worklog.sqlite`; - 发起网络请求lib/client.js:158
constructor(url, change, fetcher = (...args) => globalThis.fetch(...args)) { - 发起网络请求lib/client.js:423
const response = await fetch(`/knowledge-control/v1/writeback-changes?since=${encodeURIComponent(revision)}`, { - 发起网络请求lib/client.js:1647
const response = await fetch(`/knowledge-control/v1/activity/citation?${query}`, { signal: request2.signal, headers: { "x-dsh-knowledge-client": "conv - 发起网络请求lib/client.js:2197
const response = await fetch(`${API_PREFIX}/${path}`, { - 写入本地文件lib/worklog-runtime.js:249
if (path !== ":memory:") mkdirSync(dirname(path), { recursive: true, mode: 448 }); - 发起网络请求lib/worklog-runtime.js:1026
const response = await fetch(`${base}/worklog${path}${query.size ? `?${query}` : ""}`, { - 发起网络请求lib/worklog-runtime.js:1139
const identity = await this.request(connection, "GET", "/identity", void 0, void 0, this.controller.signal); - 发起网络请求lib/worklog-runtime.js:1145
await this.request(connection, "POST", item.path, JSON.parse(item.body), void 0, this.controller.signal); - 发起网络请求lib/worklog-runtime.js:1219
const permission = await this.request(connection, "GET", "/state"); - 发起网络请求lib/worklog-runtime.js:1235
const next = settings(data), snapshot = await this.request(connection, "GET", "/state"); - 发起网络请求lib/worklog-runtime.js:1236
if (sharedKeys.some((key) => next[key] !== snapshot.config[key])) await this.request(connection, "POST", "/settings", { ...pick(next, sharedKeys), sha - 读取本地文件lib/worklog-runtime.js:1357
const asset = readFileSync(new URL(`./worklog/${file}`, import.meta.url)); - 读取本地文件lib/connection.js:55
parsed = JSON.parse(readFileSync(path, 'utf8')); - 写入本地文件lib/connection.js:79
await mkdir(dirname(path), { recursive: true, mode: 0o700 }); - 写入本地文件lib/local-provider.js:50
mkdirSync(dirname(path), { recursive: true }); - 发起网络请求lib/management-proxy.js:78
const response = await fetch(target, { - 发起网络请求lib/remote-provider.js:10
return this.request(`recall/${encodeURIComponent(id)}/feedback`, { method: 'POST', body: value, signal }); - 发起网络请求lib/remote-provider.js:18
await this.request('recall/usage', { method: 'POST', body: usage, signal }); - 发起网络请求lib/remote-provider.js:21
return this.request('settings', { signal }); - 发起网络请求lib/remote-provider.js:24
return this.request('settings', { method: 'PUT', body: { patch }, signal }); - 发起网络请求lib/remote-provider.js:27
return this.request('knowledge-bases', { signal }); - 发起网络请求lib/remote-provider.js:31
return await this.request(`knowledge-bases/${encodeURIComponent(id)}`, { signal }); - 读取本地文件lib/service-settings.js:13
value = JSON.parse(readFileSync(path, 'utf8')); - 写入本地文件lib/service-settings.js:34
await mkdir(dirname(path), { recursive: true, mode: 0o700 }); - 读取本地文件lib/web.js:26
const INDEX_TEMPLATE = readFileSync(new URL('../web/index.html', import.meta.url), 'utf8'); - 读取本地文件lib/web.js:102
const body = readFileSync(new URL(path, import.meta.url)); - 写入本地文件lib/writeback/queue.js:49
mkdirSync(dirname(path), { recursive: true, mode: 0o700 }); - 写入本地文件lib/writeback/queue.js:52
chmodSync(path, 0o600); - 写入本地文件lib/atomic-file.js:16
await writeFile(temporary, content, { - 删除本地文件lib/atomic-file.js:29
await rm(temporary, { force: true }).catch(() => { }); - 删除本地文件lib/atomic-file.js:42
await unlink(target); - 写入本地文件lib/atomic-file.js:46
await rename(temporary, target); - 删除本地文件lib/atomic-file.js:51
await unlink(target).catch(unlinkError => { - 写入本地文件lib/atomic-file.js:55
await rename(temporary, target); - 写入本地文件lib/documents/store.js:24
await mkdir(this.root, { recursive: true }); - 写入本地文件lib/documents/store.js:33
await mkdir(directory, { recursive: false }); - 写入本地文件lib/documents/store.js:40
await mkdir(directory, { recursive: true }); - 删除本地文件递归lib/documents/store.js:58
await rm(managed, { recursive: true, force: false }); - 读取本地文件lib/documents/store.js:68
const [markdown, fileStat] = await Promise.all([readFile(absolutePath, 'utf8'), stat(absolutePath)]); - 读取本地文件lib/documents/store.js:68
const [markdown, fileStat] = await Promise.all([readFile(absolutePath, 'utf8'), stat(absolutePath)]); - 读取本地文件lib/documents/store.js:81
const [markdown, fileStat] = await Promise.all([readFile(absolutePath, 'utf8'), stat(absolutePath)]); - 读取本地文件lib/documents/store.js:81
const [markdown, fileStat] = await Promise.all([readFile(absolutePath, 'utf8'), stat(absolutePath)]); - 读取本地文件lib/documents/store.js:103
await stat(absolutePath); - 读取本地文件lib/documents/store.js:116
const current = await readFile(absolutePath, 'utf8'); - 删除本地文件lib/documents/store.js:132
await unlink(absolutePath); - 删除本地文件lib/documents/store.js:227
await unlink(path).catch(error => { - 写入本地文件lib/notes/store.js:25
mkdirSync(this.objectsPath, { recursive: true, mode: 0o700 }); - 写入本地文件lib/notes/store.js:26
mkdirSync(this.versionsPath, { recursive: true, mode: 0o700 }); - 读取本地文件lib/notes/store.js:241
const content = await readFile(this.objectPath(id)); - 读取本地文件lib/notes/store.js:315
const content = await readFile(this.versionPath(id, normalizedVersion)); - 写入本地文件lib/notes/store.js:351
mkdirSync(this.versionDirectory(id), { recursive: true, mode: 0o700 }); - 删除本地文件lib/notes/store.js:352
await rm(snapshotPath, { force: true }); - 删除本地文件lib/notes/store.js:378
await rm(snapshotPath, { force: true }).catch(() => { }); - 写入本地文件lib/notes/store.js:382
rename(id, name) { - 写入本地文件lib/notes/store.js:446
await rename(target, temporary); - 写入本地文件lib/notes/store.js:474
await rename(item.temporary, item.target).catch(() => { }); - 删除本地文件递归lib/notes/store.js:478
await rm(item.temporary, { recursive: true, force: true }); - 删除本地文件递归lib/notes/store.js:486
await rm(this.rootPath, { recursive: true, force: true }); - 删除本地文件lib/notes/store.js:510
await rm(this.objectPath(id), { force: true }).catch(() => { }); - 删除本地文件递归lib/notes/store.js:511
await rm(this.versionDirectory(id), { recursive: true, force: true }).catch(() => { }); - 读取本地文件lib/notes/store.js:708
const content = readFileSync(this.objectPath(id)); - 发起网络请求lib/citation-links.js:83
const response = await fetch(`/knowledge-control/v1/activity/citation?${query}`, { signal: request.signal, headers: { 'x-dsh-knowledge-client': 'conve - 发起网络请求lib/knowledge-activity-api.js:60
const response = await fetch(`${API_PREFIX}/${path}`, { - 写入剪贴板lib/web-note-editor-selection.js:69
void navigator.clipboard?.writeText(text).catch(() => { }); - 请求外部主机www.w3.orglib/worklog/workspace.js:8
`+o.stack}return{value:e,source:t,stack:l,digest:null}}function ua(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Va(e,t){tr - 请求外部主机www.w3.orglib/worklog/workspace.js:8
`+o.stack}return{value:e,source:t,stack:l,digest:null}}function ua(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Va(e,t){tr - 发起网络请求lib/worklog/workspace.js:8
`+o.stack}return{value:e,source:t,stack:l,digest:null}}function ua(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Va(e,t){tr - 写入剪贴板lib/worklog/workspace.js:76
`+We),en&&(We=Co(We)),P&&Eo?Y(We):We},t.setConfig=function(){let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ss(T),ds=!0,wo=q,So=ae},t - 发起网络请求lib/writeback/status-client.js:18
constructor(url, change, fetcher = (...args) => globalThis.fetch(...args)) { - 发起网络请求web/api-client.js:69
const response = await fetch(endpoint(path), { - 写入剪贴板web/app.js:3906
try { await navigator.clipboard.writeText(noteReference(node)); showToast('笔记引用已复制。') } - 写入剪贴板web/app.js:4324
try { await navigator.clipboard.writeText(value); showToast(successMessage) } catch { showToast('复制失败,请手动选择内容。', 'error') } - 写入剪贴板web/app.js:4982
try { await navigator.clipboard.writeText(token); showToast('令牌已复制。') } catch { showToast('复制失败,请手动选择令牌。', 'error') } - 发起网络请求web/citation-navigation.js:5
const response = await fetch('/knowledge-control/v1/activity/citation?' + new URLSearchParams({ citation: raw, sessionId: ref?.sessionId || '' }), { - 发起网络请求web/dialogs.js:33
discard.request() - 写入剪贴板web/note-editor.js:219
3. "-" cannot repeat`);Z.customSchemes.push([t,e])}function rS(){Z.scanner=G1(Z.customSchemes);for(let t=0;t<Z.tokenQueue.length;t++)Z.tokenQueue[t][1 - 发起网络请求web/writeback-live.js:14
const response = await fetch(`/knowledge-control/v1/writeback-changes?since=${encodeURIComponent(revision)}`, { - 发起网络请求web/writeback-workspace.js:52
const response = await fetch(`/knowledge-control/v1/writeback-jobs?${params}`, { method, credentials: 'same-origin', headers: { 'x-dsh-knowledge-clien
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:www.w3.org
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-client-ui-chat@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-input-trigger@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-session@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-settings-plugins给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 可安装知识库插件
可安装的 DeepSeek Harness 知识库插件
最近更新
在 GitHub 查看全部 →v2.17.12026-10-30
· 2.17.1
已验证 DSH 0.2.1-rc.5,保留 rc.2 最低支持基线。宿主范围限定为 >=0.2.1-rc.2 <0.2.2-0,不宣称兼容 0.2.2-alpha。
更新兼容说明:运行逻辑和现有数据格式保持不变。构建、回归和隔离宿主验证已通过。
v2.17.02026-10-30
· 2.17.0
支持 DeepSeek Harness 0.2.1-rc.2,需要 Node.js ^22.19.0 或 >=24.0.0。
· 19 项知识库/笔记操作收拢为一个 knowledge 工具入口,用 list / describe / call 按需发现和执行。
· 保留会话与项目挂载、引用隔离、版本冲突、审核、笔记整批预览和下一轮确认;不增加任意知识正文写入能力。
· 完整参数规范按需返回,执行前严格校验;自动召回、回写、日报、引用跳转和 HTTP API 不变。
· 伙伴配套兼容关注检查与 fork Skill 的旧操作白名单,不扩大写权限。部署时需带上伙伴兼容补丁。
自定义工具白名单与按旧名执行的外部策略请参阅统一工具入口,不要把旧只读白名单直接改成无限制入口授权。
附件与 npm @lemoncat7/dsh-knowledge@2.17.0 使用同一安装包。
v2.16.02026-10-28
兼容 DeepSeek Harness ^0.2.1-rc.2;Node ^22.19.0 || >=24.0.0。
· 已有和新增知识文档自动分批建立结构索引,保留标题路径、段落位置、Unicode 偏移与行号。原文不变,不引入模型请求或向量服务。
· 文档更新后旧索引立即失效,按版本/正文哈希更新;服务重启后继续处理,失败退避重试,未就绪时继续按需解析检索。
· 知识文档目录的搜索框下方展示就绪、待处理和失败状态,点击查看分页详情,管理员可单篇或批量重试。知识库详情中沿用同一入口。
· 状态和重试遵守当前知识库、会话挂载、项目及标签范围;中央连接显示中央服务进度。读取者可查看、不能重试。
· 轮询仅在可见知识目录/详情中进行,不重建编辑器;不支持状态接口的旧服务显示明确提示。
· 同章节相邻片段补充上下文,保留连续证据及长度预算;增加本地检索评测脚本。当前样例是回归用例,不代表线上真实问题质量,也不保证全场景提速。
部署须升级实际保存文档的知识库服务。只升级连接中央服务的客户端不会给旧中央服务建立索引。SQLite 派生索引为可重建的附加表,历史正文与历史回答不改写。
验证:395 项自动化测试通过,浏览器验证覆盖进度入口、分页、单篇/批量重试、浅深色与移动端。正式环境 221 篇文档索引就绪,待处理、失败均为 0,原文/状态/版本未变。
已知待排查项:页面打开存在偶发延迟,尚未宣称解决;此版本不包含宿主渲染或系统 I/O 的性能修复。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成DSH Knowledge
面向 DeepSeek Harness 的知识库、笔记与工作日报插件。支持本地使用和远程中央知识库,不修改 DSH Agent Loop。
功能
- 知识库与文档分组、全文检索、项目和会话挂载,按权限召回与回写。
- 会话只暴露一个 knowledge 工具入口,按需发现、查看参数和执行 19 项知识库/笔记操作;不改变挂载和确认权限。见统一工具入口。
- 回答完成后在后台独立提取知识,提供审核、版本历史、冲突保护、任务重试与文档封存。
- 独立笔记文档与目录:编辑、预览、分享、历史恢复;输入框 @ 可搜索并引用笔记文档。
- 内置工作日报:按本机工作目录选择采集范围,可显式包含子目录;支持补记、整理与导出,默认开启每天 23:30 的保底整理,可独立关闭,补充当天新增素材(按日报时区)。
- 本地 SQLite 或认证的中央知识服务,多个客户端可连接同一服务。
安装
最低支持 DeepSeek Harness 0.2.1-rc.2,已通过 0.2.1-rc.5 构建与回归测试(宿主仍为 RC),需要 Node.js ^22.19.0 或 >=24.0.0。其他宿主版本请先查阅兼容说明和对应版本的发布说明。
展开完整文档(README 剩余 1 节)
DSH Knowledge 面向 DeepSeek Harness 的知识库、笔记与工作日报插件。支持本地使用和远程中央知识库,不修改 DSH Agent Loop。 功能 - 知识库与文档分组、全文检索、项目和会话挂载,按权限召回与回写。 - 会话只暴露一个 knowledge 工具入口,按需发现、查看参数和执行 19 项知识库/笔记操作;不改变挂载和确认权限。见统一工具入口。 - 回答完成后在后台独立提取知识,提供审核、版本历史、冲突保护、任务重试与文档封存。 - 独立笔记文档与目录:编辑、预览、分享、历史恢复;输入框 @ 可搜索并引用笔记文档。 - 内置工作日报:按本机工作目录选择采集范围,可显式包含子目录;支持补记、整理与导出,默认开启每天 23:30 的保底整理,可独立关闭,补充当天新增素材(按日报时区)。 - 本地 SQLite 或认证的中央知识服务,多个客户端可连接同一服务。 安装 最低支持 DeepSeek Harness 0.2.1-rc.2,已通过 0.2.1-rc.5 构建与回归测试(宿主仍为 RC),需要 Node.js ^22.19.0 或 >=24.0.0。其他宿主版本请先查阅兼容说明和对应版本的发布说明。 dsh plugin --profile web add @lemoncat7/dsh-knowledge@latest 安装或升级后重启对应的 DSH Profile;web 请按实际使用的 Profile 调整。 打开侧栏「知识库」创建知识库,在「项目与会话挂载」选择使用范围和写入模式。笔记不需要先挂载知识库;工作日报在「工作记录」中单独开启采集。 使用边界 未挂载知识库不召回、不回写。笔记默认不参与知识自动回写,引用笔记不授予修改或删除权限;修改按工具确认流程执行。日报采集默认关闭,不补采历史会话。远程模式不做隐式双向同步;公开访问应配置认证,升级前备份数据。 文档 - 使用、权限与部署配置 - 文档分组 - 笔记 @ 引用 - 版本与发布说明 - 发布维护约定
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lemoncat7/dsh-knowledge
面向 DeepSeek Harness 的知识库、笔记与工作日报插件。支持本地使用和远程中央知识库,不修改 DSH…
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,025未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,358已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13938 个插件含 PR 收录与…
★ 350已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7