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

DFY 插件合集 xiaoxiao44443/dfy-dsh-plugins

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

按需安装个人维护的对话归档、外观与媒体增强插件

30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xiaoxiao44443/dfy-dsh-plugins
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 17 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 59 处,展示前 55 条)
  • 读取本地文件
    packages/image-protocol/src/session-storage.ts:79
    const manifest = JSON.parse(await readFile(join(directory, 'manifest.json'), 'utf8')) as unknown;
  • 读取本地文件
    packages/image-protocol/src/session-storage.ts:82
    const existing = await readFile(join(directory, fileName(ref.mediaType)));
  • 写入本地文件
    packages/image-protocol/src/session-storage.ts:94
    await mkdir(temporaryDirectory, { recursive: false });
  • 写入本地文件
    packages/image-protocol/src/session-storage.ts:95
    await writeFile(join(temporaryDirectory, fileName(ref.mediaType)), data, { flag: 'wx' });
  • 写入本地文件
    packages/image-protocol/src/session-storage.ts:96
    await writeFile(
  • 写入本地文件
    packages/image-protocol/src/session-storage.ts:102
    await rename(temporaryDirectory, finalDirectory);
  • 删除本地文件递归
    packages/image-protocol/src/session-storage.ts:107
    await rm(temporaryDirectory, { recursive: true, force: true });
  • 删除本地文件递归
    packages/image-protocol/src/session-storage.ts:112
    await rm(temporaryDirectory, { recursive: true, force: true }).catch(() => {});
  • 写入本地文件
    packages/image-protocol/src/session-storage.ts:127
    await mkdir(root, { recursive: true });
  • 删除本地文件递归
    packages/image-protocol/src/session-storage.ts:153
    await Promise.all(created.map((directory) => rm(directory, { recursive: true, force: true }).catch(() => {})));
  • 读取本地文件
    packages/image-protocol/src/session-storage.ts:173
    const info = await stat(candidate);
  • 读取本地文件
    packages/image-protocol/src/session-storage.ts:175
    const [realRoot, realCandidate] = await Promise.all([realpath(root), realpath(candidate)]);
  • 读取本地文件
    packages/image-protocol/src/session-storage.ts:179
    const data = new Uint8Array(await readFile(realCandidate));
  • 读取本地文件
    packages/resource-core/src/settings.ts:33
    try { await readFile(marker); return; } catch (error) {
  • 读取本地文件
    packages/resource-core/src/settings.ts:40
    const document = record(parse(await readFile(join(profile.home, filename), 'utf8')));
  • 写入本地文件
    packages/resource-core/src/settings.ts:51
    await mkdir(profile.dir, { recursive: true });
  • 写入本地文件
    packages/resource-core/src/settings.ts:52
    await writeFile(marker, JSON.stringify({ version: 1, namespace, entryId }) + '\n', { mode: 0o600 });
  • 发起网络请求
    plugins/archive-manager/src/client.ts:161
    fetch('/api/dsh-archive-manager/list')
  • 发起网络请求
    plugins/archive-manager/src/client.ts:196
    fetch(`/api/dsh-archive-manager/${action === 'restore' ? 'unarchive' : 'delete'}`, {
  • 发起网络请求
    plugins/archive-manager/src/client.ts:226
    fetch('/api/dsh-archive-manager/delete-all', { method: 'POST' })
  • 读取本地文件
    plugins/archive-manager/src/logic.ts:56
    const raw = await readFile(workspaceJsonPath(), 'utf8');
  • 读取本地文件
    plugins/archive-manager/src/logic.ts:104
    return JSON.parse(await readFile(path, 'utf8')) as T;
  • 读取本地文件
    plugins/archive-manager/src/logic.ts:254
    const entries = await readdir(sessionDirectory, { withFileTypes: true });
  • 读取本地文件
    plugins/archive-manager/src/logic.ts:271
    return titleFromJsonLines((await readFile(join(sessionDirectory, filename), 'utf8')).split('\n'));
  • 读取本地文件
    plugins/archive-manager/src/logic.ts:273
    const buffer = await readFile(join(sessionDirectory, filename));
  • 读取本地文件
    plugins/archive-manager/src/logic.ts:314
    projects = await readdir(sessionsRoot());
  • 删除本地文件递归
    plugins/archive-manager/src/logic.ts:379
    await rm(join(sessionsRoot(), project, entry), { recursive: true });
  • 写入本地文件
    plugins/codex-bridge/src/index.ts:98
    await mkdir(dirname(DISCOVERY_PATH), { recursive: true });
  • 写入本地文件
    plugins/codex-bridge/src/index.ts:100
    await writeFile(temporary, discoveryDocument(origin, token), { encoding: 'utf8', mode: 0o600 });
  • 写入本地文件
    plugins/codex-bridge/src/index.ts:101
    await rename(temporary, DISCOVERY_PATH);
  • 读取本地文件
    plugins/codex-bridge/src/index.ts:106
    const current = JSON.parse(await readFile(DISCOVERY_PATH, 'utf8')) as { token?: unknown };
  • 删除本地文件
    plugins/codex-bridge/src/index.ts:107
    if (current.token === token) await rm(DISCOVERY_PATH, { force: true });
  • 发起网络请求
    plugins/image-generation/src/index.ts:312
    const response = await fetch(url, { signal, redirect: 'follow' });
  • 发起网络请求
    plugins/image-generation/src/index.ts:368
    response = await fetch(imageApiEndpoint(config.baseUrl, operation), {
  • 发起网络请求
    plugins/image-generation/src/index.ts:387
    response = await fetch(imageApiEndpoint(config.baseUrl, operation), {
  • 写入本地文件
    plugins/visualize/src/index.ts:189
    await mkdir(join(temporaryDirectory, 'assets'), { recursive: true });
  • 写入本地文件
    plugins/visualize/src/index.ts:191
    await writeFile(join(temporaryDirectory, 'index.html'), renderedHtml, { encoding: 'utf8', flag: 'wx' });
  • 写入本地文件
    plugins/visualize/src/index.ts:194
    await writeFile(join(temporaryDirectory, 'assets', asset.name), asset.data, { flag: 'wx' });
  • 写入本地文件
    plugins/visualize/src/index.ts:196
    await writeFile(join(temporaryDirectory, 'manifest.json'), `${JSON.stringify({
  • 写入本地文件
    plugins/visualize/src/index.ts:203
    await rename(temporaryDirectory, finalDirectory);
  • 删除本地文件递归
    plugins/visualize/src/index.ts:205
    await rm(temporaryDirectory, { recursive: true, force: true }).catch(() => {});
  • 读取本地文件
    plugins/visualize/src/index.ts:363
    const [realRoot, realCandidate] = await Promise.all([realpath(artifactRoot), realpath(candidate)]);
  • 读取本地文件
    plugins/visualize/src/index.ts:426
    const data = await readFile(file);
  • 读取本地文件
    plugins/wallpaper/src/index.ts:83
    await stat(DATA_DIR);
  • 写入本地文件
    plugins/wallpaper/src/index.ts:88
    await mkdir(dirname(DATA_DIR), { recursive: true, mode: 0o700 });
  • 写入本地文件
    plugins/wallpaper/src/index.ts:90
    await rename(LEGACY_DATA_DIR, DATA_DIR);
  • 读取本地文件
    plugins/wallpaper/src/index.ts:111
    const parsed = JSON.parse(await readFile(CONFIG_FILE, 'utf8')) as Partial<StoredConfig>;
  • 读取本地文件
    plugins/wallpaper/src/index.ts:137
    return (await stat(imageFile(target))).isFile();
  • 写入本地文件
    plugins/wallpaper/src/index.ts:213
    await mkdir(dirname(file), { recursive: true, mode: 0o700 });
  • 写入本地文件
    plugins/wallpaper/src/index.ts:216
    await writeFile(temporary, content, { flag: 'wx', mode: 0o600 });
  • 写入本地文件
    plugins/wallpaper/src/index.ts:217
    await rename(temporary, file);
  • 删除本地文件
    plugins/wallpaper/src/index.ts:219
    await rm(temporary, { force: true });
  • 读取本地文件
    plugins/wallpaper/src/index.ts:288
    const info = await stat(imageFile(target));
  • 读取本地文件
    plugins/wallpaper/src/index.ts:294
    const stream = createReadStream(imageFile(target));
  • 删除本地文件
    plugins/wallpaper/src/index.ts:338
    await rm(imageFile(target), { force: true });
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
DFY DSH Plugins 个人维护的 DeepSeek Harness 插件集合。仓库用 pnpm workspace 管理,每个插件都保留独立的 package.json、README、版本号、构建和测试脚本。 公共库 - @dfy-plugins/resource-core:普通 npm 库,提供版本化不透明资源引用、进程内 provider 注册表和安全文本降级;它不是 Harness 插件。 - @dfy-plugins/image-protocol:普通 npm 库,提供官方图片块、Attachment 图片引用、格式识别和图片结果降级;它不是 Harness 插件。 插件可以独立发布,并把这些库声明为普通依赖。进程内注册表使用稳定的 Symbol.for ABI,因此各插件即使各自打包了一份 resource-core,仍共享 provider,不需要依赖 media-blocks 的私有协议。 插件 - @dfy-plugins/dsh-bundle:包含以下维护中插件的原生组合包,一次安装、统一更新,在官方详情页分别启停;也可继续单独安装。 - @dfy-plugins/dsh-archive-manager:按项目查看已归档对话,支持取消归档和永久删除。
展开完整文档(README 剩余 1 节)
DFY DSH Plugins

个人维护的 DeepSeek Harness 插件集合。仓库用 pnpm workspace 管理,每个插件都保留独立的 package.json、README、版本号、构建和测试脚本。

公共库

- @dfy-plugins/resource-core:普通 npm 库,提供版本化不透明资源引用、进程内 provider 注册表和安全文本降级;它不是 Harness 插件。
- @dfy-plugins/image-protocol:普通 npm 库,提供官方图片块、Attachment 图片引用、格式识别和图片结果降级;它不是 Harness 插件。

插件可以独立发布,并把这些库声明为普通依赖。进程内注册表使用稳定的 Symbol.for ABI,因此各插件即使各自打包了一份 resource-core,仍共享 provider,不需要依赖 media-blocks 的私有协议。

插件

- @dfy-plugins/dsh-bundle:包含以下维护中插件的原生组合包,一次安装、统一更新,在官方详情页分别启停;也可继续单独安装。

- @dfy-plugins/dsh-archive-manager:按项目查看已归档对话,支持取消归档和永久删除。
- @dfy-plugins/dsh-appearance:在设置侧栏提供独立「外观」页,可调节回复与过程行距,并为本地文件提供右键菜单;新版字体与字号使用官方设置。
- @dfy-plugins/dsh-wallpaper:为 Harness 设置可配置图片背景,支持多种适应模式、模糊、遮罩和界面透明度。
- @dfy-plugins/dsh-media-blocks:提供持久聊天媒体块和可扩展的多媒体展示;上传入口使用 DSH 自带的附件按钮,不再添加重复的图片按钮。图片基础协议来自公共库,未来视频、网页等块仍可通过 MediaResourceMap 扩展。
- @dfy-plugins/dsh-vision:已停止维护,仅保留历史源码。
- @dfy-plugins/dsh-image-generation:通过按需 Skill 和固定工具调用独立图片模型,支持官方图片块、参考图编辑与 Tool 内图片预览;media-blocks 为可选增强。
- @dfy-plugins/dsh-visualize:通过 dfy-visualize Skill 和 dfy_visualize_render 工具,将工作区 HTML 安全发布为对话内可交互的会话级可视化产物。
- @dfy-plugins/dsh-codex-bridge:通过本机鉴权 MCP 将 Harness 会话、工具与 Skills 提供给 Codex;DSH 端与 Codex 伴生插件分别安装。
- @dfy-plugins/dsh-turn-guard:为单轮任务提供收敛提醒、重复调用检测和可配置的硬停止预算。

当前维护版本最低要求 DSH 0.1.7-alpha.1,开发依赖固定到该版本;为仍支持的旧运行时保留必要的能力检测分支。
外观插件在 DSH 0.2.1 使用官方字体与字号,只保留行距和本地文件菜单等扩展;旧版 DSH 保留原字号控制。过程折叠使用 DSH 自带的展示模式。旧设置迁入新版配置树,旧对话由桌面端的历史内容准入修复和官方 V4 迁移共同处理。
视觉理解插件已停止维护,npm 上的已发布版本已撤回。仓库仅保留历史源码,并从工作区构建、npm 发布批次和桌面插件目录移除;图片识别使用模型原生多模态能力。
已适配 DSH 0.1.7-rc.1 的文件链接与工具准备阶段,详见 rc.1 配套更新;最低版本与开发依赖保持不变。基础验证范围见 0.1.7-alpha.1 适配记录。
DSH 0.2.1-rc.2 适配与功能重叠检查见 兼容性记录。配套版本为外观 0.1.7、媒体内容 0.1.5、组合包 0.1.3,详见 本批更新说明。

可视化 0.1.5 收紧技能触发范围,组合包 0.1.2 同步包含该修正,详见 可视化更新说明。

所有发布包使用 @dfy-plugins npm scope;运行时 ID、API、CSS 和持久化目录按各自的兼容性要求命名,不会随包名做全局替换。新增或修改插件前请先阅读:

- DEVELOPMENT.md:客户端 HMR、样式和资源生命周期规范。
- NAMING.md:发布包、运行时 ID、API、CSS 和数据目录命名规范。

开发

桌面端插件目录

根目录的 catalog.json 供桌面端「DFY 插件」页读取。version 是目录格式版本,当前为 1;plugins 数组顺序即展示顺序,每项包含 name(npm 包名)、title(中文名称)、category(分类)、description(简介)、repository(该插件的 GitHub 目录或仓库地址),可选 note(安装后的配置提示)。卡片上的 GitHub 图标打开各自的 repository 地址。目录不保存 npm 版本号,桌面端会查询最新发布版本。

新增插件时,先发布对应的 npm 包,再将条目加入目录并推送到 main。桌面端刷新即可发现,无需发布新版客户端。只列出可安装的 @dfy-plugins/ 插件,公共依赖不进入目录。运行 pnpm catalog:check 校验字段、重复包名及对应插件包。

发布准备、npm 首次上传和 GitHub Actions 可信发布见 npm 发布指南。

bash
pnpm install
pnpm check
pnpm build

针对准备发布的实际 DSH 运行环境,额外核对运行文件的具名导出(包括仅存在于前端 bundle 的模块): bash
node scripts/check-runtime-exports.mjs ../dfy-dsh-desktop/build/harness-runtime
node scripts/test-runtime-compat.mjs ../dfy-dsh-desktop/build/harness-runtime

前者核对具名导出,后者使用目标 DSH 的 AgentLoop、ToolRuntime、审批服务和 Session Controller 做内存集成测试。两者均不调用真实模型或读写用户对话;它们不替代界面交互及热更新验收。

本地安装归档插件: bash
dsh plugin --profile web add ./plugins/archive-manager

本地安装外观插件: bash
dsh plugin --profile web add ./plugins/appearance

本地安装壁纸插件: bash
dsh plugin --profile web add ./plugins/wallpaper

本地安装媒体内容插件: bash
dsh plugin --profile web add ./plugins/media-blocks

本地安装图像生成插件: bash
dsh plugin --profile web add ./plugins/image-generation

本地安装可视化插件: bash
dsh plugin --profile web add ./plugins/visualize

本地安装 Codex Bridge 的 DSH 端: bash
dsh plugin --profile web add ./plugins/codex-bridge

本地安装任务守卫插件: bash
dsh plugin --profile web add ./plugins/turn-guard

将仓库添加为 Codex Plugin Marketplace: bash codex plugin marketplace add xiaoxiao44443/dfy-dsh-plugins

然后在 Codex 桌面端的插件列表中打开 DFY DSH Plugins,安装 DFY DSH。安装或更新后请新建 Codex 任务;已经打开的任务不会热加载插件和 MCP。

许可证

本仓库中的插件和公共库基于 MIT License 开源。DeepSeek Harness 及其他第三方依赖仍分别遵循其各自的许可证。
预览分享卡片长什么样 ↓xiaoxiao44443/dfy-dsh-plugins
分享 · DeepSeek Harness Hub
xiaoxiao44443/dfy-dsh-plugins

按需安装个人维护的对话归档、外观与媒体增强插件

这是你的仓库?认领条目

回到顶部