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

插件工坊 liyown/dshx

DeepSeek Harness
liyown5 天前有提交已提供中文文档扫描:含敏感能力

构建、检查并发布类型安全的 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
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 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.io
    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: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.
预览分享卡片长什么样 ↓liyown/dshx
分享 · DeepSeek Harness Hub
liyown/dshx

构建、检查并发布类型安全的 DeepSeek Harness 插件。

这是你的仓库?认领条目

回到顶部