🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

知识库 lemoncat7/dsh-knowledge

DeepSeek Harnessv2.17.0
lemoncat74 天前有提交已提供中文文档扫描:含敏感能力

面向 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-knowledge
npm 源 · @lemoncat7/dsh-knowledge 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v2.16.2,当前版本为 v2.17.0
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 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.org
    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
  • 请求外部主机www.w3.org
    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: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 知识库插件

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 调整。

打开侧栏「知识库」创建知识库,在「项目与会话挂载」选择使用范围和写入模式。笔记不需要先挂载知识库;工作日报在「工作记录」中单独开启采集。

使用边界

未挂载知识库不召回、不回写。笔记默认不参与知识自动回写,引用笔记不授予修改或删除权限;修改按工具确认流程执行。日报采集默认关闭,不补采历史会话。远程模式不做隐式双向同步;公开访问应配置认证,升级前备份数据。

文档

- 使用、权限与部署配置
- 文档分组
- 笔记 @ 引用
- 版本与发布说明
- 发布维护约定
预览分享卡片长什么样 ↓lemoncat7/dsh-knowledge
分享 · DeepSeek Harness Hub
lemoncat7/dsh-knowledge

面向 DeepSeek Harness 的知识库、笔记与工作日报插件。支持本地使用和远程中央知识库,不修改 DSH…

回到顶部