在 DeepSeek Harness 中管理常用的文件书签,支持保存、列出与跳转,并且可以创建常用的项目,包括管理类项目、代码类项目等。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-file-bookmark
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:uptoheart/dsh-file-bookmark
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
A DeepSeek Harness tool plugin generated by
create-dsh-plugin. 由 create-dsh-plugin 生成的 DeepSeek Harness 工具插件。 用于将文件或者常用的文件夹添加到DeepSeek Harness中,方便快速访问。并提供了工程的快速创建功能。
Registers the dsh_file_bookmark tool via defineTool().
Quick start / 快速开始
pnpm install
pnpm run build # tsc → dist/index.js (pure ESM)
# From the PARENT directory, install into a profile and boot:
dsh plugin --profile my-profile add ./dsh-file-bookmark
dsh --profile my-profile # watch for: [dsh-file-bookmark] registered "dsh_file_bookmark" — listed=true
注意:
dsh plugin add <dir>的相对路径锚定「调用目录」,请在插件父目录执行。
Verify without an API key / 无 key 验证
dsh --profile my-profile --dump-config | grep dsh-file-bookmark # 配置层含本行
dsh plugin --profile headless add ./dsh-file-bookmark
dsh --profile headless "run a probe" # session/event 触发;模型调用会 MISSING_CREDENTIAL
Dependencies pinned / 依赖锁定
@deepseek-ai/dsh-tools:0.1.5-rc.2(exact — thenext-tag line; npmlatestis stale).@deepseek-ai/cordis:^4.0.2(peerDependency — host provides it; types-only in code).
Theme & Skin Compatibility / 主题与皮肤兼容
This plugin has no host-rendered UI of its own (tool results render through the official
chat surface), so it is compatible by construction. If you later add a panel, follow the
DSH Web styling contract: colors via --dsw-alias-* tokens only, and emit
data-dsh-plugin / data-dsh-part / data-dsh-surface semantic attributes
(dsh-web skin-center contracts).
本插件没有自有宿主 UI(工具结果走官方聊天面渲染),天然兼容。若以后加面板:
颜色只用 --dsw-alias-* 令牌,并输出 data-dsh-* 语义属性(见上方契约链接)。
Pitfalls / 坑(从真实 spike 提炼,防呆)
Node version: DSH requires Node ^22.19.0 || >=24.0.0. Older Node (e.g. v22.17) only warns EBADENGINE but may hit runtime issues — upgrade if you can.
- Node 版本:DSH 要求 ^22.19.0 || >=24.0.0。旧版本(如 v22.17)只告警 EBADENGINE,不阻断,但建议升级。
npm dist-tag trap (the big one):
@deepseek-ai/dsh-toolslatestis a STALE 0.0.1-rc.1; the real line is under thenexttag (0.1.0-rc.x). This scaffold pins the next-tag version for you — nevernpm i @deepseek-ai/dsh-toolsover it.- npm dist-tag 坑(最大):
@deepseek-ai/dsh-tools的 latest 是过期的 0.0.1-rc.1,正确版本在 next tag。本脚手架已锁 next 版本,勿再手动 npm i 覆盖。
- npm dist-tag 坑(最大):
Version-line alignment: keep every
@deepseek-ai/dsh-*package on the same0.1.0-rc.xline so pnpm does not install two module copies.- 版本线对齐:所有 @deepseek-ai/dsh-* 包统一用同一 0.1.0-rc.x 线,避免 pnpm 装两份模块。
@deepseek-ai/cordisis a peerDependency: import onlytype { Context }(erased at compile). At runtime the host hands youctx— never import cordis values at runtime.- @deepseek-ai/cordis 是 peerDep:只 import type(编译期擦除),运行时 ctx 由宿主传入。
Pure ESM: package.json must set
"type": "module"; build withmodule: esnext+moduleResolution: bundlerto keep bare specifiers.- 纯 ESM:package.json 必须 "type": "module";tsc 用 module:esnext + moduleResolution:bundler 保留 bare specifier。
dsh plugin add <dir>anchors relative paths to the INVOKING directory — run it from the parent directory, not from inside the plugin.- dsh plugin add 的相对路径锚定调用目录——要在插件的父目录执行。
In the bundle
cordis.patch.yml,nameis a package name (resolved via node_modules /$DSH_HOME/profiles/node_modules), not a relative path.- bundle 的 cordis.patch.yml 里 name 用包名(走 node_modules 解析),不要用相对路径。
Registrations are effects:
ctx.tools.register()/ctx.on()auto-dispose on unload. Wrap your OWN resources (timers/connections) inctx.effect(() => { acquire; return cleanup }).- 注册是 effect:ctx.tools.register()/ctx.on() 卸载自动清理;自己的资源(timer/连接)要包 ctx.effect(() => {…; return cleanup})。
Load order = service dependencies, never file order:
export const inject = ['tools']makes the plugin wait untilctx.toolsis ready.- 加载顺序靠服务依赖(inject),不靠文件顺序。
Full end-to-end (model actually calls your tool) needs
DEEPSEEK_API_KEY; without it--verifyproves load/list/event, and the model call fails with MISSING_CREDENTIAL.
- 端到端(模型真正调工具)需 DEEPSEEK_API_KEY;无 key 时 --verify 只能证明加载/列出/事件,模型调用会 MISSING_CREDENTIAL。
链接
同类插件
Tencent/WeKnora#dsh-weknora★ 28100
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 1740
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1118
把腾讯云 CloudBase 后端接入 DeepSeek Harness——在对话里搭好并部署全栈应用,查询结果渲染为表格卡片(分页、排序、导出 CSV),部署后可预览真实域名,并提供 CloudBase MCP 工具集(`mcp__cloudbase__*`),登录走 device-code 流程。
gitroomhq/postiz-agent#dsh-postiz★ 481
通过 MCP 将 DeepSeek Harness 连接到 Postiz:列出已连接的社交媒体渠道、获取各平台发帖规则,并向 X、LinkedIn、Instagram、Facebook、Threads、TikTok、YouTube、Reddit、Bluesky、Mastodon、Discord、Slack、Telegram 等平台排期、存草稿或发布帖子;附带 postiz 工作流技能。
EthanYoQ/Invoice-Downloader#dsh-invoice-downloader★ 434
面向 DeepSeek Harness 的本地 IMAP 发票下载、OCR 识别、归档与 Excel 报销汇总。
anysearch-team/anysearch-dsh★ 422
基于 AnySearch 的实时网页与垂直搜索插件,为 DeepSeek Harness 提供搜索工具。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。