편집자 노트

skyzhao1223/dsh-plugin-scaffold

Minimal runnable DeepSeek Harness (dsh) plugin scaffold: one model-facing tool via ctx.tools

이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.

dsh-plugin-scaffold

English | 中文

一个最小、可运行的 DeepSeek Harnessdsh)插件脚手架。它在共享的 ctx.tools 服务上注册一个模型可调用的工具(hello),用最小的代码面完整验证加载链路——插件解析 → Loader 挂载 → 工具注册 → 模型调用。

这是一个外部/社区插件:它不在 deepseek-harness monorepo 内,而是基于已发布的 npm 包(@deepseek-ai/dsh-tools@deepseek-ai/dsh-llm@deepseek-ai/cordis)构建。这正是项目鼓励的贡献方式——参见 CONTRIBUTING.md:目前项目不接受外部 PR,但欢迎带有 dsh-plugin 标签的生态插件。

工具做什么

hello 工具接收一个 name,返回结构化 JSON:

{ "greeting": "Hello, World!", "cwd": "/path/to/cwd" }

它的作用是验证链路是否打通,而不是做真实工作。把它当作开发真实能力(文件访问、网页抓取、Shell、定时任务……)的起始模板。

从这里能做什么

这个脚手架只是插件的一种形态——模型可调用的工具。DeepSeek Harness 的设计是一切皆插件,所以同样的加载路径可以解锁很多其他扩展点。挑一个方向,把 hello 工具替换成真实行为即可:

方向做什么例子
数据查询工具模型调用工具,你拉取 API 并返回 JSON天气、汇率、股票、GitHub
数据库工具执行校验过的查询只读 SQL、内部看板
文件/工作区工具读写、汇总项目文件定制 grep、批量重命名、代码统计
外部服务桥接为模型封装 REST/GraphQL/CLI API翻译、OCR、发邮件、触发 CI
事件监听观察 agent/*tools/* 事件并响应自动会话标题、护栏、用量日志
上下文注入每次模型请求附带持久上下文agent.inject() 注入项目/时间/环境信息
模型 providerctx.llm 注册新适配器本地 Ollama、OpenAI 兼容接口
人工命令不经过模型直接执行的 /commandctx.commands,如 /deploy
后台任务长任务或定时任务ctx.jobs、轮询、提醒
策略/沙箱限制 fs/shell/subprocess 访问审批门、白名单
UI 卡片定制工具在 Web UI 中的展示presentCall / presentResult、diff/终端卡片
自我修改让 agent 检查并装卸自己的插件官方 web-cordis 示例

可参考的现成示例见官方 examples/web-schedule(持久提醒)、mcp-memory(通过 MCP 接外部记忆)、web-cordis(agent 修改自己的插件树)、headless-agent(一次性任务)。扩展点地图见 docs/architecture.md

每种形态都遵循本脚手架演示的同一套模式:一个 name/inject/Config/apply 模块,其注册是卸载时可回滚的 effect。

项目结构

src/index.ts        # 插件本体:name / inject / Config / apply(函数插件,无 default export)
scripts/verify.ts   # 通过 ctx.plugin() 验证加载链路(真实 dsh-tools 运行时)
scripts/verify-loader.ts  # 通过 Cordis Loader + cordis.yml 验证加载链路(dsh 真实的启动路径)
cordis.yml          # 可选 overlay:把插件行插入 dsh 组合配置
verify.cordis.yml   # verify-loader.ts 使用的自包含 Loader 组合配置

环境要求

  • Node.js ^22.19.0 || >=24.0.0
  • 能解析已发布 @deepseek-ai/* 包的 dsh 安装
  • pnpm(用于开发)

开发

pnpm install
pnpm build       # tsc -> lib/index.js + lib/types
pnpm test        # vitest:导出形态、注册、调用、卸载回滚
pnpm verify      # ctx.plugin() 路径:挂载真实 dsh-tools + 插件,调用 `hello`
pnpm verify:loader  # Loader 路径:通过 Cordis Loader 启动 verify.cordis.yml,调用 `hello`

两个 verify 脚本会断言结果为非错误,失败时以非零码退出。vitest 套件覆盖插件导出形态、工具注册与规范返回值、非法参数拒绝、以及卸载时的 effect 回滚。CI 在 Node 22 和 24 上运行全部四项。

挂载到 dsh

把 overlay 传给 dsh web(或 dsh headless):

dsh web --patch "$PWD/cordis.yml"

overlay 会 insert 一行。使用指向构建产物的相对路径,让 Loader 相对配置文件目录解析,不依赖包安装:

- insert:
    - id: dsh-plugin-scaffold
      name: './path/to/lib/index.js'

本仓库的 cordis.yml 就带的是这种相对形式。在 Web UI 里,让模型「用我的名字调用 hello 工具」即可看到效果。

裸包名解析(「发布插件」的真正含义)

Cordis Loader 从它自身的模块位置解析裸包名(dsh-plugin-scaffold@deepseek-ai/*),而不是启动目录。所以裸 name: dsh-plugin-scaffold 只有在包被安装到 dsh 安装树的 node_modules 里才能解析(例如 npm install -g dsh-plugin-scaffold 让它和 Loader 相邻,或安装到 profile 的 node_modules)。两种可靠方式:

  • 发布到 npm 并全局安装——裸包名即可从 Loader 位置解析。
  • 使用相对/绝对路径指向构建产物 lib/index.js——总是相对配置文件位置解析。

如需持久安装,把同样的 insert 块加到 $DSH_HOME/profiles/<name>/cordis.patch.yml(单个 profile)或 $DSH_HOME/cordis.patch.yml(所有 profile),参见 web-schedule 示例。不要覆盖已有文件——它可能已经包含无关的用户补丁。

关于已发布的 @deepseek-ai/*

本脚手架依赖 npm 发布的版本(0.1.0-rc.6),而非 monorepo 的 workspace 版本。如果未来版本修改了 defineTool / ToolRuntime 契约,请同步更新这里的 peerDependencies / devDependencies。插件刻意保持轻量依赖:只有 @deepseek-ai/cordis(类型 + Context)、@deepseek-ai/dsh-toolsdefineTool + ctx.tools)、@deepseek-ai/dsh-llmContentBlock,仅类型)、@deepseek-ai/schemasteryConfig schema)。

在 monorepo 内验证

如果 clone 了 deepseek-harness 来查看真实运行时,注意全量安装 workspace 会拉取大型可选 provider 二进制(Claude Codex SDK、网站用的 mermaid),在慢网络上容易超时。本脚手架的验证不需要它们:已发布的 @deepseek-ai/dsh-tools 包是自包含的。

REPOSITORY SIGNALS

보안 및 설치 증거

이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.

출처 추적 가능

공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.

라이선스

저장소가 MIT 라이선스를 선언했습니다.

유지보수 활동

최근 180일 내 코드 업데이트가 있습니다.

설치 증거

재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.

설치 라이프사이클 스크립트

검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.