构建、检查并发布类型安全的 DeepSeek Harness 插件。
34.9/100
综合分
7
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add liyown/dshx该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dshx-workspace(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 02:40:27
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 58 处,展示前 57 条)
- 发起网络请求apps/framework-hub/src/lib/api-client.ts:45
const response = await fetch(path, { - 读取本地文件apps/framework-hub/src/lib/architecture-boundaries.test.ts:11
const entries = await readdir(directory, { withFileTypes: true }); - 读取本地文件apps/framework-hub/src/lib/architecture-boundaries.test.ts:21
return [{ path: relative(sourceRoot, filePath), text: await readFile(filePath, "utf8") }]; - 发起网络请求apps/framework-hub/src/lib/mcp-server.ts:266
return handler.fetch(boundedRequest); - 发起网络请求apps/framework-hub/src/server-markdown.test.ts:24
fetch(request: Request, env: unknown, context: unknown): Promise<Response>; - 发起网络请求apps/framework-hub/src/server-markdown.test.ts:29
const response = await worker.fetch( - 发起网络请求apps/framework-hub/src/server-markdown.test.ts:49
const response = await worker.fetch( - 发起网络请求apps/framework-hub/src/server-markdown.test.ts:63
const response = await worker.fetch( - 请求外部主机dshx.ioapps/framework-hub/src/server-markdown.test.ts:80
const response = await worker.fetch(new Request("https://dshx.io/"), { DB: {} }, {}); - 发起网络请求apps/framework-hub/src/server-markdown.test.ts:80
const response = await worker.fetch(new Request("https://dshx.io/"), { DB: {} }, {}); - 发起网络请求apps/framework-hub/src/server-markdown.test.ts:91
const response = await worker.fetch( - 发起网络请求apps/framework-hub/src/server-page-cache.test.ts:24
fetch(request: Request, env: unknown, context: unknown): Promise<Response>; - 发起网络请求apps/framework-hub/src/server-page-cache.test.ts:42
return worker.fetch(new Request(url, { headers: { accept: "text/html", ...headers } }), {}, {}); - 发起网络请求apps/framework-hub/src/server.ts:175
const response = await handler.fetch(request, { context }); - 发起网络请求apps/framework-hub/src/server.ts:196
async fetch(request) { - 读取本地文件packages/create-dshx/src/fs.ts:7
await access(path) - 读取本地文件packages/create-dshx/src/fs.ts:15
return (await stat(path)).isDirectory() - 读取本地文件packages/create-dshx/src/fs.ts:21
return readdir(path) - 写入本地文件packages/create-dshx/src/fs.ts:23
async mkdir(path) { - 写入本地文件packages/create-dshx/src/fs.ts:24
await mkdir(path, { recursive: true }) - 写入本地文件packages/create-dshx/src/fs.ts:26
async writeFile(path, contents) { - 写入本地文件packages/create-dshx/src/fs.ts:27
await writeFile(path, contents, 'utf8') - 读取本地文件packages/create-dshx/src/fs.ts:29
async readFile(path) { - 读取本地文件packages/create-dshx/src/fs.ts:30
return readFile(path, 'utf8') - 发起网络请求packages/framework-hub-cli/src/api.ts:213
response = await fetch(url, { - 读取本地文件packages/framework-hub-cli/src/capabilities.ts:27
await readFile(new URL("../package.json", import.meta.url), "utf8"), - 读取本地文件packages/framework-hub-cli/src/cli.ts:98
path === "-" ? await stdin(stream) : await readFile(resolve(path), "utf8"); - 写入本地文件packages/framework-hub-cli/src/cli.ts:119
if (outputPath) await writeFile(resolve(outputPath), json); - 读取本地文件packages/framework-hub-cli/src/cli.ts:125
await readFile(new URL("../package.json", import.meta.url), "utf8"), - 写入本地文件packages/framework-hub-cli/src/cli.ts:420
await writeFile(path, `${JSON.stringify(bundle, null, 2)}\n`, { - 写入本地文件packages/framework-hub-cli/src/cli.ts:423
await chmod(path, 0o600); - 读取本地文件packages/framework-hub-cli/src/keychain.ts:102
const stats = lstatSync(path); - 写入本地文件packages/framework-hub-cli/src/keychain.ts:105
chmodSync(path, 0o700); - 读取本地文件packages/framework-hub-cli/src/keychain.ts:113
const stats = lstatSync(path); - 写入本地文件packages/framework-hub-cli/src/keychain.ts:116
chmodSync(path, 0o600); - 读取本地文件packages/framework-hub-cli/src/keychain.ts:117
return readFileSync(path, "utf8") || null; - 写入本地文件packages/framework-hub-cli/src/keychain.ts:133
mkdirSync(directory, { recursive: true, mode: 0o700 }); - 写入本地文件packages/framework-hub-cli/src/keychain.ts:135
writeFileSync(temporaryPath, token, { - 写入本地文件packages/framework-hub-cli/src/keychain.ts:140
chmodSync(temporaryPath, 0o600); - 写入本地文件packages/framework-hub-cli/src/keychain.ts:141
renameSync(temporaryPath, path); - 删除本地文件packages/framework-hub-cli/src/keychain.ts:148
unlinkSync(temporaryPath); - 删除本地文件packages/framework-hub-cli/src/keychain.ts:161
unlinkSync(path); - 读取本地文件packages/framework-hub-cli/src/media.ts:161
file = await stat(localPath); - 读取本地文件packages/framework-hub-cli/src/media.ts:200
buffer = await readFile(localPath); - 读取本地文件packages/framework-hub-cli/src/ops-state.ts:163
text = await readFile(at.file, "utf8"); - 写入本地文件packages/framework-hub-cli/src/ops-state.ts:216
await rename(temporary, at.file); - 删除本地文件packages/framework-hub-cli/src/ops-state.ts:224
await rm(temporary, { force: true }); - 写入本地文件packages/framework-hub-cli/src/ops-state.ts:235
await mkdir(at.root, { recursive: true, mode: 0o700 }); - 写入本地文件packages/framework-hub-cli/src/ops-state.ts:236
await mkdir(at.directory, { recursive: true, mode: 0o700 }); - 写入本地文件packages/framework-hub-cli/src/ops-state.ts:237
await chmod(at.directory, 0o700); - 写入本地文件packages/framework-hub-cli/src/ops-state.ts:240
await mkdir(lock, { mode: 0o700 }); - 删除本地文件packages/framework-hub-cli/src/ops-state.ts:266
await rmdir(lock); - 发起网络请求packages/framework-hub-cli/src/source.ts:386
response = await options.fetch( - 读取本地文件packages/plugin-marketplace/src/host-service.ts:155
const dir = await realpath(resolve(fileURLToPath(url))) - 读取本地文件packages/plugin-marketplace/src/host-service.ts:158
const expected = await realpath(resolve(dependencies.resolveProfileDir(name))) - 发起网络请求packages/plugin-marketplace/src/host-service.ts:177
const response = await dependencies.fetch(url, { - 读取本地文件packages/plugin-marketplace/src/host-service.ts:315
const manifest = manifestSchema.parse(JSON.parse(await readFile(manifestPath, 'utf8')))
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
涉及外部主机:dshx.io
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 构建类型安全插件
- 测试插件
- 发布插件
构建、测试并发布带类型的 DeepSeek Harness 插件——框架、脚手架,还有一个经过验证的社区 Hub。
README
由 DeepSeek 最新模型翻译生成DSHX
构建、检查并发布类型安全的 DeepSeek Harness 插件。
English · 文档 · Framework Hub · 路线图
DSHX 是面向 DeepSeek Harness 仓库外插件的构建期工具链,提供类型安全的 Host/Client authoring、受约束的 Vite 构建、离线诊断、Profile 开发流程和可复现模板。执行、registry、scope、transport、持久化、Prompt assembly、HMR 与 disposer 生命周期仍由官方 DSH/Cordis 管理。
首个可用版本通过 npm 的 preview tag 分发;完成 Preview 验证前,不覆盖现有 latest 开发版本。
创建项目
pnpm create dshx@preview my-plugin
cd my-plugin
pnpm check
pnpm dev
默认生成最小 starter + css-modules:一个 Host Tool 和一个可见 Client Slot。
展开完整文档(README 剩余 1 节)
DSHX
构建、检查并发布类型安全的 DeepSeek Harness 插件。
English · 文档 · Framework Hub · 路线图
DSHX 是面向 DeepSeek Harness 仓库外插件的构建期工具链,提供类型安全的 Host/Client authoring、受约束的 Vite 构建、离线诊断、Profile 开发流程和可复现模板。执行、registry、scope、transport、持久化、Prompt assembly、HMR 与 disposer 生命周期仍由官方 DSH/Cordis 管理。
首个可用版本通过 npm 的 preview tag 分发;完成 Preview 验证前,不覆盖现有 latest 开发版本。
创建项目
pnpm create dshx@preview my-plugin
cd my-plugin
pnpm check
pnpm dev
默认生成最小 starter + css-modules:一个 Host Tool 和一个可见 Client Slot。需要完整 Candidate API 示例和可选 Tailwind 时执行:
pnpm create dshx@preview my-plugin --template showcase --style tailwind
模板为 starter | showcase,样式为 css-modules | tailwind | none。Tailwind 使用标准 v4 Vite 插件、dshx: 前缀,并省略 Preflight。
正式参考插件
@becomeopc/dshx-plugin-marketplace 是仓库内的正式自举参考插件。它以普通 DSH bundle 接入「设置 → 插件 → 插件市场」,并完整串联 defineHost、defineSettings、defineApi、defineClient、defineLocale、defineSlot、Standard Schema 校验、useApiQuery、CSS Modules、Profile 安装和 Client HMR。
装进 DSH Profile(保留 @preview 标签——直接写包名仍会解析到旧的、只支持 DSH < 0.2 的版本),或用真实 DSH 开发 Profile 运行:
dsh plugin --profile web add @becomeopc/dshx-plugin-marketplace@preview
pnpm --filter @becomeopc/dshx-plugin-marketplace dev
Authoring 示例
// src/api/status.ts
import { defineApi, method } from "@becomeopc/dshx/api";
export const statusApi = defineApi({
id: "status",
version: 1,
methods: {
get: method<void, { readonly ready: boolean }>(),
},
});
// src/host.ts
import { defineHost } from "@becomeopc/dshx/host";
import { statusApi } from "./api/status.js";
export default defineHost({
apis: [
statusApi.host({
get: () => ({ ready: true }),
}),
],
});
// src/client.tsx
import type {} from "@deepseek-ai/dsh-client-ui-sidebar/client";
import {
defineClient,
defineLocale,
defineSlot,
useApiQuery,
type PropsLocaleOf,
} from "@becomeopc/dshx/client";
import { statusApi } from "./api/status.js";
const copy = defineLocale("my-plugin.status", {
zh: { ready: "就绪", unavailable: "不可用" },
en: { ready: "Ready", unavailable: "Unavailable" },
});
function Status({ t }: PropsLocaleOf<typeof copy>) {
const query = useApiQuery(statusApi, "get", { enabled: true });
if (query.status === "pending") return {query.fetchStatus};
if (query.status === "error")
return Retry;
return {t(query.data.ready ? "ready" : "unavailable")};
}
const statusSlot = defineSlot("sidebar.footer.action", {
id: "my-plugin.status",
order: 0,
locale: copy,
component: Status,
});
export default defineClient({ locales: [copy], slots: [statusSlot] });
defineLocale 推导唯一词条集合、在 Slot 前注册词典,并为组件提供类型安全的 t()。package 仍须在 dsh.client.inject 声明 @deepseek-ai/dsh-client-locale;create-dshx 会生成该 provider edge。最终 tree-shaking 后仍保留的 useApiQuery 会自动声明 connection 能力。
公共入口
| 入口 | 状态 | 用途 |
| @becomeopc/dshx 与 /config | API Candidate | 仅 browser-safe defineConfig 和 DshxConfig |
| /host | API Candidate | Host 定义、Tools、Commands、Prompt contribution |
| /client | API Candidate | Client 定义、Locale、Slots、API/Settings Hooks |
| /api | API Candidate | 共享类型 API contract 与 opaque error |
| /settings | API Candidate | 共享 Schemastery Config schema,由 DSH SettingsForms 投影 |
| /experimental/conversation | Experimental | 纯官方事件生命周期和 React renderer |
| /tooling | Tooling / Experimental | Node-only compiler、兼容、诊断、CLI、repair API |
API Candidate 表示当前 0.2.x 计划保持的 authoring 形状,不是 1.0 稳定承诺。DSH 0.2 的 Settings、Conversation、Connection 与 manifest 变化见从 0.1 迁移到 0.2。
技术文档
| 章节 | API 与行为 |
| Host | defineHost、注册顺序、inject、生命周期 |
| Client、Locale 与 Slot | defineClient、defineLocale、defineSlot、官方 props 与接线 |
| Typed API | Standard Schema、handler、命令式调用、useApiQuery、错误 |
| Settings | contract、Host facet、decoder、secret、Hook 状态与 mutation |
| Prompt | Section、Context、顺序与 assembly ownership |
| Conversation | 实验性 initial/reduce/project/render 生命周期 |
| Build | Vite 插件约束、CSS/资源、Tailwind、declaration、watch |
| Creator | 模板/样式矩阵和 programmatic generation |
| Tooling | programmatic build/watch、兼容、诊断、repair |
另见 CLI 参考、兼容与验证和架构。
Preview 范围与已知限制见 Preview,插件包发布要求见 Publishing。
CLI
dshx check # 离线检查 config、manifest、迁移、兼容、TypeScript dshx check --runtime # 额外要求 Profile、Composition、bridge、runtime readiness dshx build # 先 typecheck,再构建 Host/Client dshx dev # Vite build-watch 加官方 DSH 开发会话 dshx inspect services # 也支持 tools、events、configs dshx add ui --slot --provider <package> --id <id>
除非显式使用 --fix,check 保持只读。build 不改写源码或 Manifest 元数据。inspect 需要受支持且正在运行的 Composition。DSH 0.2 不再提供运行时 Slot catalog,inspect slots 会返回 DSHX3204;add ui 接受显式的 --slot/--provider,并由 dshx check 验证生成结果。完整命令与 JSON 字段见 CLI 参考。
兼容性
当前 protocol-2 adapter 发布 peer range >=0.2.1-rc.2 <0.3.0-0,公开支持范围优先写入 engines.dsh(缺失时回退到 peerDependencies)。真实运行时基线是源码 tag dsh-v0.2.1-rc.2 的构建;当前 npm 0.2.1-rc.2 产物包含过期的 profile-boot 代码,在上游重新发布前按 experimental 处理。本地开发使用一个具体 devDependencies 版本。
Settings 使用官方插件 Config schema 与 ctx.configForms,ConfigForm 身份是 Host profile 的 entry id。Conversation 仍为 Experimental,因为已发布协议没有仓库外 durable event vocabulary registry;它只能使用官方 SessionEventMap 键。
开发本仓库
pnpm install --frozen-lockfile
DSH_SOURCE_ROOT=/path/to/deepseek-harness pnpm check:all
check:all 已包含打包产物与真实 DSH 两套 smoke;指定源码目录后,后者使用已验证的 DSH 构建,而不是过期的 npm 产物。
提交前请阅读贡献指南、依赖政策和安全政策。
许可证
MIT © DSHX contributors.预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
liyown/dshx
构建、检查并发布类型安全的 DeepSeek Harness 插件。
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化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,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目