dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
English | 中文
把一句话需求装配成一个能干活的 AI agent,并且交得出去。
dsh-assembler 是一个 DeepSeek Harness (DSH) 插件。用户用自然语言描述想要的 agent("帮我做一个能查订单、开工单、转人工的客服机器人"),装配器从能力目录匹配零件、发射 agent preset、然后在真实会话里试跑验收——新会话选中该 preset 即可使用。
能力目录由索引流水线自动生长:开源库、公开 API、客户自有接口、客户知识,都能一条命令收进目录,过质检门才入库。不写胶水代码,只写配置。
从你的座位看,它是这样工作的:你用一句话描述想要的 agent。助手先把架构摆给你看——能力清单、数据模型、工作流,以及目录覆盖不了的缺口(每个缺口都由你拍板:现场造件、降级、还是砍掉)——等你点头才动手。零件靠毫秒级目录检索找到,每个候选都带价签(它的说明书会给 agent 每轮对话加多少 token、要不要拉进程、要什么凭证);preset 由确定性发射产出、全部安全闸门在场;最后由独立考官在真实会话里试跑证明它能干活,才连同网页、供应链 BOM 和一份可反复自查的体检包一起交到你手上。
毕业不受惩罚:这里的一切都是真实可查的工件——零件是普通进程、出处钉死,交付的 agent 是一份可 diff 的文本组合加它的 BOM,执行层与框架无关。哪天你不用装配器了,东西全归你:零件照跑、preset 照挂,没有任何东西被扣作人质。
| 能力目录 | 103 个零件 / 311 个工具——71 库型、27 服务型、5 第一方(index/catalog.yml) |
| 验证 | 每次装配以独立黑盒探针在真实会话收尾;每张网页过可达门 + 真会话环路门 |
| 耗时 | 单 agent 典型几分钟内交付,含验收 |
selfcheck.json,日后任何改动都能用同一张考卷复查(find → assemble → verify 闭环)。探针快速且诚实:agent 中途向(不在场的)用户求助即判 FAIL 并带回问题原文,每一轮探针的工具动作实时上链<preset>/gaps/:缺什么、造零件的真实入库命令、以及闭环的重跑命令。写缺失零件的活交给调用方 agent(它有全套 coding harness);装配脊柱保持确定性,验收永远归装配器自己的黑盒探针<preset>/progress.log;直播台页面(/assembler/ui/_console)轮询它,让慢装配变成一条可见的、带时间戳的轨迹——"卡了还是在干活"一眼可判,而不是一颗沉默的转圈 chip。选型、发射、探针轮次、每轮工具动作、20s 心跳都在那里滚动via: knowledge):客户手册/SOP/产品目录作为静态教材进目录,过检索命中门(探针问题检不出预期片段就拒收),装配时拷进 preset 的 kb/——交付物自包含listTools 成功、调用返回可行动错误;装配侧对应为"装配成功 + 探针 SKIPPED + 配置指引"。可选凭证(如 GitHub 公开读)走匿名降级不拦验证catalogs/<client>/ 自带 generated/、index/、capabilities.yml——A 客户的零件不会出现在 B 客户的装配里,隔离靠分文件而非过滤条件repo@rev,服务型锁条款 + 速率限制 + 数据许可,同样进 BOMparts.lock.yml——每个零件的出处、许可、验证状态、实际挂载名、知识包来源版本、待配凭证清单装配不只发射 preset——每个 agent 同时得到一张可直接操作的网页前端,由装配器在 host 上同源伺服(/assembler/ui/<preset>)。页面直连 host 公开 wire(session.create / session.prompt / events.mux),与 DSH 对话页共用同一个 agent、同一个持久工作区;打开页面自动拉取当前状态。
下面每张图都是一次真实装配的产物(真实装配、真实数据、真实截图;判定行原样摘自装配结果):
任务管理助手,帮我记录和推进待办任务,要一个可以拖拽的任务看板页面→ 自动验证:PASS · 前端验收:页面门+环路门 PASS
报销审批助手,登记报销申请,按额度规则给出审批意见并留痕,要一个能通过驳回的审批页面
记账助手,把每笔收支记到本地账本,之后可以查询和汇总,要一个能直接记账的网页页面
日常问答助手,能算日期、聊问题,要一个简洁的聊天页面
机制:
via: frontend,第五种零件):7 张模板——聊天台(兜底,每个 preset 默认自带)、表单工单台、记录台、仪表盘、任务看板(拖拽)、审批台、文件台;选型器按交互形状恰选一张data.db)并预建表结构,前端会话与 DSH 对话会话写同一份账——关页重开,数据仍在emit_app 落一套锁死词汇的前端骨架(Vite + React + shadcn/ui + 固定通信 SDK,含记录台/看板两张可整页拷用的范例页),助手在唯一自由区 src/pages/ 照 PAGE-SPEC(每个动作标 face/wire/ai-thin/local 路由)写任意形状的页面;verify_app 五道门黑盒验收(构建/骨架锁/页面 lint/资产可达/行为考:face 动作真执行 SQL 并断言库效,wire 动作跑真会话探针),deploy_app 发布进 preset 同源伺服、留快照可一键回滚。实测定制看板页 face 直连 5.1ms;页面与对话会话仍共享同一份账(双面交付),交接由独立考官验证(一面写、另一面读回)┌───────── 索引流水线(供应链) ──────────────────────────────────────────┐
│ 开源库 / 公开 API / 客户接口 spec / 客户知识 │
│ → 切能力点 → MCP 适配 → 质检门(冒烟 / 检索命中)→ 入目录 │
└─────────────────────────────────────────────────────────────────────────┘
↓
┌───────── 装配(能力消费) ─────────────────────────────────────────────┐
│ capabilities.yml(公共或客户目录) + 并行联邦 │
│ → 毫秒级零件检索(候选带价签)→ 编排者拍板选型 │
│ → 发射 preset + BOM + 知识包拷入 kb/ │
│ → 自动验证:派生探针(单轮或多轮场景)→ 真实会话试跑 → PASS/FAIL │
└─────────────────────────────────────────────────────────────────────────┘
↓
┌───────── 交付(FDE) ─────────────────────────────────────────────────┐
│ 多 agent 班子:逐台 emit_preset 钉同一 sharedDb 共享库 │
│ → verify_shared_data 交接考(一台写、另一台读回)→ 每台自带 BOM 档案 │
└─────────────────────────────────────────────────────────────────────────┘
↓
┌───────── 运行时(harness 的领土) ────────────────────────────────────┐
│ 新会话选中 preset → DSH 按行挂载插件 → agent 真实调用零件工具 │
└─────────────────────────────────────────────────────────────────────────┘
装配器是 Cordis 插件,产物是 Cordis 插件组合清单(preset 每行 = 一个插件实例);零件是外部 MCP 服务器进程,通过 @deepseek-ai/dsh-mcp-client 桥接。装配器只在装配时存在——会话跑起来后它的进程死掉,一切照常。
加入 DSH profile 的 patch 层(示例 ~/.dsh/profiles/web/cordis.patch.yml):
- insert:
- id: dsh-assembler
name: '@dsh-external/dsh-assembler'
package.json 依赖:"@dsh-external/dsh-assembler": "link:/path/to/dsh-assembler"。
服务型零件若需部署方联系方式(SEC 强制 UA、Crossref/OpenAlex polite pool),复制 .env.example 为 .env 并填自己的邮箱——不是凭证,但也不该硬编码任何人的地址。
打开 DSH 网页,直接说:
帮我装配一个记账 agent:随手记收支,按月汇总,能设预算超支提醒,有查账网页
动工前你会先看到架构(以及目录缺口,逐个由你拍板);点头后装配、独立探针在真实会话里验收,然后你拿到 preset id、带证据的验收结论、和一张网页(/assembler/ui/<preset>)。工件都在 ~/.dsh/.agent-presets/<preset>/:parts.lock.yml(BOM)、selfcheck.json(体检包)、progress.log(装配直播链)。
直接在会话里要一套 agent——"给我一套运营 agent 班子:客服、对账、库存、内容四个,共享同一套商品/订单数据,各有前端"——助手把需求拆成分工明确的 agent、逐个装配并验收(每台发射时钉同一个共享库),交接本身也被独立考官验证(verify_shared_data:一个 agent 写、另一个读回,读取指令里不许出现答案——照抄闸)。每台 agent 的 parts.lock.yml 就是它的交付档案:验收结论、零件出处、待配凭证、知识版本,全部从工件长出来。
dsh-assembler/
├── src/
│ ├── index.ts # 装配核心:目录加载/联邦/确定性发射/BOM/装备/知识
│ ├── orchestrated-tools.ts # 工具面:检索/发射/独立考官(search 唯一形态)
│ ├── verify.ts # 装配即验证:探针机器(单轮/多轮场景)+ 真实会话驱动
│ └── persona-lint.ts # persona 机械核查
├── capabilities.yml # ★ 公共组装目录:能力条目 + mcp-servers + requiredSecrets
├── index/ # ★ 公共零件索引(出处/许可/条款)+ 冒烟报告
├── generated/ # ★ 零件库:78 个 MCP 适配服务器(每零件一目录)
├── catalogs/<client>/ # ★ 客户私有目录:自带 generated/ index/ capabilities.yml knowledge/
├── bench/results/ # 装配质量基准账本(run-tagged,git 收录)
├── presets/
│ └── agent-template.yml # preset 模板({{persona}}/{{packageRows}}/{{extraRows}}/{{param:k}})
└── scripts/
├── index-add.mjs # ★ 索引流水线 CLI
└── link-dsh.mjs # 链接 DSH peer 包
四种能力来源:
via | 来源 | 例子 |
|---|---|---|
package | 本仓库/自有插件包的工具 | crm-query |
harness | DSH 内置工具 | content-search |
mcp | MCP 服务器工具(装配时自动联邦) | mcp-weather-forecast-current-weather 等 229 条 |
knowledge | 客户静态教材(装配时拷入 kb/) | acme-policies-kb |
103 个零件 / 311 个工具 —— 71 库型、27 服务型、5 第一方。
| 零件 | 工具 | 数据源 | 许可/条款 | 凭证 |
|---|---|---|---|---|
| package-registry | package-info package-versions check-license | npm + PyPI registries | registry ToS | 免 |
| weather-forecast | current-weather daily-forecast | Open-Meteo | CC-BY-4.0 | 免 |
| currency-rates | latest-rates historical-rate convert-amount | Frankfurter (ECB data) | Public-Domain-ECB | 免 |
| geocode | geocode-address reverse-geocode | OpenStreetMap Nominatim | ODbL-1.0 | 免 |
| public-holidays | list-holidays is-workday available-countries | Nager.Date | MIT | 免 |
| worldbank-data | country-indicator common-indicators | World Bank Open Data | CC-BY-4.0 | 免 |
| sec-filings | lookup-cik company-filings | U.S. SEC EDGAR | Public-Domain-US-Gov | 免 |
| scholar-search | search-published search-preprints doi-lookup | Crossref + arXiv | CC0-1.0 / arXiv terms | 免 |
| wiki-facts | page-summary search-entity entity-facts | Wikimedia (Wikipedia + Wikidata) | CC-BY-SA-4.0 | 免 |
| research-graph | search-works work-citations author-works | OpenAlex | CC0-1.0 | 免 |
| feishu-messaging | send-message list-chats feishu-capabilities | 飞书开放平台 | Feishu API ToS | FEISHU_APP_ID FEISHU_APP_SECRET |
| slack-messaging | post-message list-channels slack-capabilities | Slack API | Slack API ToS | SLACK_BOT_TOKEN |
| github-issues | list-issues get-issue create-issue github-capabilities | GitHub REST API | GitHub ToS | GITHUB_TOKEN(可选) |
binary-write(write-binary-file) · crypto-hash(hash-text, hmac-sign, generate-uuid) · compress-gzip(compress, decompress) · dns-lookup(resolve-domain, reverse-lookup) · book-intake(浏览器→工作区文件直传 + epub 解析) · webhook-intake(入站事件接收) · ai-call(应用内独立 AI 补全) · static-deploy(把构建好的站点发布为 agent 页面) · app-scaffold(官方 create-vite 脚手架)
| 领域 | 零件(工具数) |
|---|---|
| 文档办公 | pdf-generate(4) · pdf-extract(3) · pdf-report(1) · docx-generate(3) · docx-extract(2) · pptx-generate(1) · excel-read-write(4) · zip-archive(4) |
| 数据格式 | csv-parse(3) · yaml-convert(2) · toml-parse(2) · xml-parse(3) · json-query(2) · json-schema-validate(2) · html-parse(4) · html-to-text(4) |
| 文本处理 | markdown-render(3) · html-to-markdown(1) · readability-extract(2) · text-diff(3) · template-render(4) · fuzzy-search(4) · text-encoding(2) |
| 中文专项 | pinyin-convert(2) · chinese-convert(2) · word-segment(2) · num-to-chinese(2) |
| 计算 | math-eval(2) · currency-calc(4) · number-format(4) · semver-check(3) · geo-distance(3) · color-convert(2) |
| 时间日历 | date-format(4) · cron-parse(2) · calendar-parse(3) · calendar-generate(4) · rrule-expand(2) |
| 数据库 | sqlite-query(3) · mysql-query(4) · postgres-query(4) |
| 网络通信 | http-request(4) · email-send(4) · email-fetch(4) · rss-parse(4) |
| 媒体识别 | image-process(4) · ocr-parse(3) · qrcode-generate(4) · barcode-generate(2) · exif-read(1) · file-type-detect(1) |
| 安全校验 | jwt-decode(2) · ip-utils(2) · string-validate(2) · fake-data(2) · phone-parse(2) |
| 工程工具 | github-api(4) · browser-automate(4) · url-slugify(3) · transliterate(2) · safe-filename(2) |
send-email, verify-smtp-config, parse-email-addresses, create-test-account
list-mailboxes, search-messages, fetch-message, list-message-summaries
http-request, http-get, http-post, build-url
extract-text, extract-attributes, query-elements, serialize-html
parse-csv, unparse-csv, validate-csv
create-pdf, merge-pdfs, extract-pages, pdf-info
format-date, parse-date, date-diff, date-manipulate
query, execute, list-tables
get-user, get-repo, list-org-repos, search-repositories
render-markdown, render-markdown-inline, tokenize-markdown
get-pdf-text, get-pdf-info, search-pdf-text
read-xlsx-file, write-xlsx-file, read-csv-file, write-csv-file
docx-generate-text, docx-generate-table, docx-patch-document
zip-list-entries, zip-read-file, zip-create-archive, zip-update-archive
fuzzy-search, fuse-create-index, fuse-search-with-index, fuse-config
render-template, precompile-template, render-precompiled, validate-template
html-to-text, html-to-text-batch, html-to-text-table, html-to-text-links
xml-validate, xml-parse, xml-build
image-info, image-resize, image-convert, image-thumbnail
parse-rss-string, parse-rss-url, extract-feed-items, parse-feed-metadata
parse-ics, parse-ics-file, fetch-ics-url
create-calendar, create-event, create-all-day-event, create-recurring-event
mysql-query, mysql-list-tables, mysql-describe-table, mysql-test-connection
format-number, unformat-number, arithmetic, validate-number
qr-generate-png, qr-generate-data-url, qr-generate-svg, qr-generate-terminal
postgres-test-connection, postgres-list-tables, postgres-describe-table, postgres-query
browser-open, browser-extract, browser-click, browser-screenshot
ocr-languages, ocr-psm-modes, ocr-recognize
currency-calc, currency-format, currency-distribute, currency-parse
extract-article, extract-batch
create-report-pdf
write-binary-file
create-patch, apply-patch, diff-words
hash-text, hmac-sign, generate-uuid
evaluate, unit-convert
next-runs, describe-fields
compare, satisfies, coerce-valid
yaml-to-json, json-to-yaml
to-pinyin, multi-tone
s2t, t2s
html-to-markdown
decode-base64, encode-to-base64
parse-phone, format-phone
compress, decompress
resolve-domain, reverse-lookup
query, query-multi
validate, check-schema
toml-to-json, json-to-toml
docx-to-text, docx-to-html
create-pptx
barcode-png, barcode-types
validate-string, sanitize-string
fake-records, fake-text
to-chinese, from-chinese
decode-jwt, verify-jwt-hs256
parse-ip, cidr-match
transliterate-text, make-slug
expand-rrule, describe-rrule
read-exif
detect-file-type
convert-color, contrast-check
segment-text, extract-keywords
distance, bearing, center-and-bounds
slugify, slugify-unique, slugify-custom
sanitize, sanitize-path
package-info, package-versions, check-license
current-weather, daily-forecast
latest-rates, historical-rate, convert-amount
geocode-address, reverse-geocode
list-holidays, is-workday, available-countries
country-indicator, common-indicators
lookup-cik, company-filings
search-published, search-preprints, doi-lookup
page-summary, search-entity, entity-facts
search-works, work-citations, author-works
send-message, list-chats, feishu-capabilities
post-message, list-channels, slack-capabilities
list-issues, get-issue, create-issue, github-capabilities
所包装代码(库型 + 第一方零件):MIT 46 · Apache-2.0 7 · BSD-3-Clause 7 · ISC 2 · BSD-2-Clause 2 · MIT AND Apache-2.0 1
数据许可 / 服务条款(服务型零件):CC-BY-4.0 2 · registry ToS 1 · Public-Domain-ECB 1 · ODbL-1.0 1 · MIT 1 · Public-Domain-US-Gov 1 · CC0-1.0 / arXiv terms 1 · CC-BY-SA-4.0 1 · CC0-1.0 1 · Feishu API ToS 1 · Slack API ToS 1 · GitHub ToS 1
全部宽松许可,代码侧零 copyleft 风险。服务型零件另记数据许可——那是另一种义务:Nominatim 是 ODbL、Wikipedia 是 CC-BY-SA(署名/共享要求),因此逐条记录并随装配进入 BOM。
完整机器可读清单(含每个零件的 repo@rev、许可、条款、速率限制与工具描述):index/catalog.yml。
设计前提是调用方就是 agent:CLI 只做确定性环节(取源、出工单、装依赖、质检、登记),"切能力点 + 写适配代码"留给调用方。每个子命令末行输出 JSON 判定,机器可判读。
# 收开源库
npm run index:add -- kpdecker/jsdiff --pkg diff --id text-diff
npm run index:verify -- text-diff # install → 冒烟(exit 0 必须)→ 独立 listTools → 报告
npm run index:register -- text-diff # 幂等登记;下次装配联邦自动看见
# 收公开 API(锁条款/速率/数据许可,而非版本)
node scripts/index-add.mjs scaffold - --service https://api.open-meteo.com/v1 --id weather-forecast \
--provider 'Open-Meteo' --license CC-BY-4.0 --terms https://open-meteo.com/en/terms --rate-limit '免费非商用无限制'
# 接客户系统(FDE 日常):吃 OpenAPI → 端点清单工单 → 客户私有目录
node scripts/index-add.mjs from-spec <spec-url|file> --id <id> --client acme \
--requires-secret "TOKEN:用途说明,可含逗号;OTHER:第二个"
# 收客户知识(过检索命中门)
node scripts/index-add.mjs knowledge <文档目录> --id acme-policies --client acme --version 2026-08
# 写 probes.json(问题 + 预期片段)后:
node scripts/index-add.mjs knowledge-verify acme-policies --client acme
# 全自动:一条命令收录(需要在跑的 web profile)
npm run index:auto -- sindresorhus/slugify --pkg @sindresorhus/slugify --id url-slugify
npm run index:check # 全量回归:跑每个零件的冒烟(离线时网络零件记 SKIPPED 并单独计数)
node scripts/index-add.mjs coverage # 能力覆盖图:语义判重用
质检门在流水线里:verify 不过,register 直接拒绝。去重两层——机械硬门(同 id / 同 npm 包 / 同上游 repo),以及对着 coverage 覆盖图做能力级判重:目录收的是能力点,不是库。
需求"记账助手,把每笔收支记到本地账本,之后可以查询和汇总"——派生器判定这是跨轮任务,出了一个 3 轮场景:
自动验证:PASS — 多轮场景「证明记账助手能把收支持久化到 SQLite,并在后续轮次中查询和汇总」共 3 轮,逐轮通过
第1轮 ✓ 「记一笔收入:项目款 8899 元,备注 INV-7781…」标记 [INV-7781, 8899]
第2轮 ✓ 「再记一笔支出:办公用品 1200 元,备注 OFFICE-2201…」标记 [OFFICE-2201, 1200]
第3轮 ✓ 「查询本地账本,列出所有记录并汇总收支」标记 [INV-7781, OFFICE-2201, 8899]
第 3 轮查的是前两轮写入的状态——这样验收才能证明状态真的活过了轮次。纯计算类需求则只出单轮题。
# 缺必需凭证:装配成功,探针 SKIPPED,给出配置指引
自动验证:跳过(待配置凭证:SLACK_BOT_TOKEN——装配正确但无法实调外部服务,配好后重跑装配即可验证)
所需凭证:SLACK_BOT_TOKEN(待配置) — Slack Bot User OAuth Token(xoxb- 开头)
# 可选凭证:走匿名路径照常验证通过
自动验证:PASS — 探针「对公开仓库 octocat/Hello-World 做一次巡检…」通过
所需凭证:GITHUB_TOKEN(可选,未配则降级)
parts.lock.yml(节选)preset: currency-qr-assistant
parts:
- capability: mcp-qrcode-generate-qr-generate-png
server: qrcode-generate
serverName: qrcode-generate-d0fb25cc # 从 preset 字节读回,永远与实际挂载一致
repo: soldair/node-qrcode
rev: v1.5.3
license: MIT
verified: true
- capability: mcp-weather-forecast-current-weather
kind: service
service: https://api.open-meteo.com/v1
terms: https://open-meteo.com/en/terms
rateLimit: 免费非商用无限制;商用需订阅
knowledge:
- id: acme-policies
docs: 2
source: ACME 客服中心知识库导出
version: 2026-08