这是一个插件,让你在手机上通过易用的 Material 3 ExpressiveM3E界面操作 DeepSeek…
32.3/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add AliceSaikawa/dsh-webui-m3e该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 13 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-webui-m3e(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/22 09:42:24
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 77 处,展示前 72 条)
- 发起网络请求e2e/agent-presets-coding-tools.spec.ts:9
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/conversation-picker.spec.ts:7
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/conversation-selection-review.spec.ts:5
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/conversation-unread.spec.ts:5
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/file-revision-race.spec.ts:10
const response = await request.fetch(), body = await response.text() - 发起网络请求e2e/final-audit.spec.ts:6
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/goal-strip.spec.ts:21
const response = await route.fetch(), body = await response.text() - 写入本地文件e2e/helpers.ts:35
await mkdir(shots, { recursive: true }) - 写入本地文件e2e/helpers.ts:55
await mkdir(shots, { recursive: true }) - 发起网络请求e2e/i18n.spec.ts:22
const response = await route.fetch() - 发起网络请求e2e/interaction-cancel-race.spec.ts:7
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/jobs-recovery.spec.ts:6
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/mobile-accessibility.spec.ts:97
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/mobile-accessibility.spec.ts:125
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/permission-draft-withdrawn.spec.ts:11
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/permission-icon.spec.ts:10
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/permission-preset-names.spec.ts:13
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/permission-sheet-race.spec.ts:14
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/permission-sheet-race.spec.ts:32
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/permission-sheet-review.spec.ts:6
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/permission-sheet-review.spec.ts:61
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/provider-record-broadcast.spec.ts:13
const response = await route.fetch() - 发起网络请求e2e/robustness.spec.ts:44
const response = await route.fetch() - 发起网络请求e2e/session-contract-review.spec.ts:6
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/settings-broadcast.spec.ts:11
const response = await route.fetch() - 发起网络请求e2e/settings-custom-provider.spec.ts:6
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/settings-drafts.spec.ts:5
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/settings-general.spec.ts:9
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/settings-key-lifetime.spec.ts:10
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/stage6c.spec.ts:6
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/timed-questions.spec.ts:73
const response = await route.fetch(), body = await response.text() - 发起网络请求e2e/timed-questions.spec.ts:79
const response = await route.fetch(), body = await response.text() - 执行外部命令来自配置/变量e2e-dsh/dsh-host.ts:19
execFileSync(command, args, { cwd, env, stdio: ['ignore', 'inherit', 'inherit'] }) - 读取本地文件e2e-dsh/dsh-host.ts:27
if (!existsSync(join(dir, 'node_modules', '.bin', 'dsh'))) { - 写入本地文件e2e-dsh/dsh-host.ts:28
mkdirSync(dir, { recursive: true }) - 写入本地文件e2e-dsh/dsh-host.ts:38
mkdirSync(out, { recursive: true }) - 读取本地文件e2e-dsh/dsh-host.ts:40
const tarball = readdirSync(out).find(name => name.endsWith('.tgz')) - 读取本地文件e2e-dsh/dsh-host.ts:91
const actual = JSON.parse(readFileSync(join(install, 'node_modules', '@deepseek-ai', 'dsh', 'package.json'), 'utf8')).version as string - 读取本地文件e2e-dsh/dsh-host.ts:93
if (!options.preserveRuns && existsSync(work)) for (const name of readdirSync(work)) if (name.startsWith('run-')) rmSync(join(work, name), { recursive - 读取本地文件e2e-dsh/dsh-host.ts:93
if (!options.preserveRuns && existsSync(work)) for (const name of readdirSync(work)) if (name.startsWith('run-')) rmSync(join(work, name), { recursive - 删除本地文件递归e2e-dsh/dsh-host.ts:93
if (!options.preserveRuns && existsSync(work)) for (const name of readdirSync(work)) if (name.startsWith('run-')) rmSync(join(work, name), { recursive - 写入本地文件e2e-dsh/dsh-host.ts:97
mkdirSync(home, { recursive: true }) - 写入本地文件e2e-dsh/dsh-host.ts:98
mkdirSync(dshHome, { recursive: true }) - 写入本地文件e2e-dsh/dsh-host.ts:117
mkdirSync(fixture, { recursive: true }) - 写入本地文件e2e-dsh/dsh-host.ts:118
writeFileSync(join(fixture, 'package.json'), JSON.stringify({ - 执行外部命令来自配置/变量e2e-dsh/dsh-host.ts:140
const proc = spawn(bin, ['web', '--no-open', '--host', '127.0.0.1', '--port', String(port)], { cwd: install, env, stdio: ['ignore', 'pipe', 'pipe'] }) - 写入本地文件e2e-dsh/fake-llm.ts:90
if (options.log) appendFileSync(options.log, `${JSON.stringify({ last: last?.role, prompt: prompt.slice(-200), tools: request.tools?.length ?? 0 })}\n - 写入本地文件e2e-dsh/rpc-audit.ts:40
mkdirSync(pluginDir, { recursive: true }) - 写入本地文件e2e-dsh/rpc-audit.ts:41
writeFileSync(join(pluginDir, 'package.json'), JSON.stringify({ name: 's5-rpc-audit', type: 'module', version: '0.0.0' })) - 读取本地文件e2e-dsh/rpc-audit.ts:44
const original = readFileSync(profile, 'utf8') - 写入本地文件e2e-dsh/rpc-audit.ts:45
writeFileSync(flag, 'off') - 写入本地文件e2e-dsh/rpc-audit.ts:46
writeFileSync(plugin, ` - 写入本地文件e2e-dsh/rpc-audit.ts:64
writeFileSync(profile, `${original.replace(/^ *$/m, '')}\n- insert:\n - id: s5-rpc-auto\n name: ${JSON.stringify(pathToFileURL(plugin).hr - 写入本地文件e2e-dsh/rpc-audit.ts:67
set: (enabled: boolean) => writeFileSync(flag, enabled ? 'on' : 'off'), - 读取本地文件e2e-dsh/rpc-audit.ts:68
acknowledged: () => { try { return readFileSync(ack, 'utf8') } catch { return '' } }, - 写入本地文件e2e-dsh/rpc.spec.ts:90
mkdirSync(path, { recursive: true }) - 读取本地文件e2e-dsh/rpc.spec.ts:106
const stat = statSync(path, { bigint: true }) - 写入本地文件e2e-dsh/rpc.spec.ts:149
writeFileSync(join(root, 'tmp/s5-public-settings.json'), JSON.stringify(description, null, 2)) - 写入本地文件e2e-dsh/rpc.spec.ts:199
writeFileSync(join(root, 'tmp/stage5-fix3-real-writes.json'), JSON.stringify(outcomes, null, 2)) - 写入本地文件e2e-dsh/rpc.spec.ts:273
writeFileSync(join(path, 'rpc.txt'), 'M3E RPC ファイル確認\n2 行目') - 写入本地文件e2e-dsh/rpc.spec.ts:276
writeFileSync(join(path, 'preview.png'), png) - 发起网络请求e2e-dsh/rpc.spec.ts:289
const displayed = await page.locator('.session-file-image').evaluate(async image => [...new Uint8Array(await (await fetch((image as HTMLImageElement). - 写入本地文件e2e-dsh/rpc.spec.ts:307
writeFileSync(join(path, 'watched.txt'), 'before') - 写入本地文件e2e-dsh/stream-settlement.spec.ts:20
await mkdir(fixtureDir, { recursive: true }) - 写入本地文件e2e-dsh/stream-settlement.spec.ts:25
await writeFile(plugin, ` - 写入本地文件e2e-dsh/stream-settlement.spec.ts:128
await writeFile(gateOf(scenario.mark), 'release') - 发起网络请求e2e-dsh/tab-restore-auth.spec.ts:28
if (url.origin === origin && url.pathname === '/m3e/' && response.request().resourceType() === 'document') loads.push(response.status()) - 发起网络请求e2e-dsh/timed-questions-race.spec.ts:45
requests.push(route.request().postDataJSON()) - 发起网络请求e2e-dsh/timed-questions-race.spec.ts:47
const response = await route.fetch({ timeout: 10_000 }) - 读取本地文件src/host/index.ts:239
prepareM3eIndex(ctx.webServer.renderIndex(await readFile(DIST_INDEX, 'utf8'))) - 读取本地文件src/host/index.ts:288
const body = await readFile(target) - 发起网络请求web/public/sw.js:13
const result = cacheFirst(event.request, caches, (request) => fetch(request))
扫描于 2026/11/4(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-client-store给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 按设备切换界面
为 DeepSeek Harness(DSH)提供 Material 3 Expressive 移动端 Web UI 插件,按设备切换。
README
由 DeepSeek 最新模型翻译生成dsh-webui-m3e
这是一个插件,让你在手机上通过易用的 Material 3 Expressive(M3E)界面操作 DeepSeek Harness(DSH)。
这些截图展示经过翻译的模拟画面;实际应用界面仅提供日语。
[!NOTE]
这是个人项目,并非 DeepSeek 官方产品。项目仍在开发中,可能存在缺陷,请谨慎使用。
快速开始
[!IMPORTANT]
当前发布的 0.0.8 面向 DSH 0.2.0-rc.2。请用 npm i -g @deepseek-ai/dsh@0.2.0-rc.2 安装 DSH 0.2.0-rc.2,并用 dsh --version 确认版本。支持 DSH 0.2.1-rc.2 的是预发布版本 v0.0.9-rc.2(GitHub 的 Latest 仍是 0.0.8)。安装方法与下面相同,只需把 URL 中的 v0.0.8 和 0.0.8 换成 v0.0.9-rc.2 和 0.0.9-rc.2。0.0.8 无法在 DSH 0.2.1-rc.2 上运行。如果你继续使用 DSH 0.2.0-rc.2,回退目标同样是 0.0.8。
展开完整文档(README 剩余 1 节)
dsh-webui-m3e 这是一个插件,让你在手机上通过易用的 Material 3 Expressive(M3E)界面操作 DeepSeek Harness(DSH)。 这些截图展示经过翻译的模拟画面;实际应用界面仅提供日语。 [!NOTE] 这是个人项目,并非 DeepSeek 官方产品。项目仍在开发中,可能存在缺陷,请谨慎使用。 快速开始 [!IMPORTANT] 当前发布的 0.0.8 面向 DSH 0.2.0-rc.2。请用 npm i -g @deepseek-ai/dsh@0.2.0-rc.2 安装 DSH 0.2.0-rc.2,并用 dsh --version 确认版本。支持 DSH 0.2.1-rc.2 的是预发布版本 v0.0.9-rc.2(GitHub 的 Latest 仍是 0.0.8)。安装方法与下面相同,只需把 URL 中的 v0.0.8 和 0.0.8 换成 v0.0.9-rc.2 和 0.0.9-rc.2。0.0.8 无法在 DSH 0.2.1-rc.2 上运行。如果你继续使用 DSH 0.2.0-rc.2,回退目标同样是 0.0.8。 1. 在运行 DSH 的机器上执行以下命令: dsh plugin --profile web add https://github.com/AliceSaikawa/dsh-webui-m3e/releases/download/v0.0.8/dsh-webui-m3e-0.0.8.tgz web 只是示例,请指定实际提供 Web 界面的配置档案(名称拼错时也只会创建新档案,安装成功并不代表目标正确)。 2. 打开 dsh web 输出的登录 URL,登录标准界面(DSH 原有的 Web 界面)。 3. 用同一地址打开 http://<host>/m3e/。如果返回 404,请重启该配置档案的 Host。重启 Host(用 Ctrl+C 停止 dsh web,再用同一命令重新启动)后登录 URL 可能会改变,因此请从第 2 步重新开始。 M3E 未发布到 npm registry,因此不能只用名称执行 add dsh-webui-m3e 来安装。M3E 无需另外安装运行时依赖包,也无需获取源码、手动构建或安装开发依赖。更新或回退会切换 Host 代码的版本,因此必须重启 Host。 功能 [!NOTE] 本节介绍 main 的内容。0.0.8 没有固定会话、显示和恢复已归档的会话、选择基准色、插件列表,也没有通用的错误界面和设置中的「モード」页面。预发布版本 v0.0.9-rc.2 已包含这些功能。 - 会话:在手机屏幕上阅读 AI 的回复、工具执行结果和思考内容,也可以切换到按时间顺序排列的「トレース」(追踪)视图。 - 会话列表:可以把会话固定到列表顶部。固定状态在所有工作区之间共用,标准界面或其他设备上的更改也会反映过来。已归档的会话可以通过切换显示来查看,并在长按菜单中恢复归档。 - 回复:无论当前在哪个页面,都可以通过底部弹出的面板审批工具、回答 AI 的提问或确认计划。 - 待处理事项:集中查看需要回复的会话和已结束的会话。 - 输入:支持附加图片、用 @ 引用文件、用 / 显示命令候选项,以及切换模型、思考深度、权限预设和计划模式。 - 会话工具:可以从会话菜单打开统计、文件、作业、子代理和目标。 - 搜索:搜索会话。 - 设置:管理 DSH 的设置、API 密钥和自定义提供方。在「モード」(模式)页面中,可以查看代理预设,并选择新会话使用的预设。 - 工作区:在会话列表的抽屉中切换工作区。 - 外观:除了明暗之外,还可以在每台设备上从 6 种预设颜色(紫、蓝、青绿、绿、橙、红)或任意颜色中选择基准色。所选颜色会应用到整个界面。 - 插件:可以从设置中以只读列表查看已安装插件的状态。 - 错误:对于渲染失败、不存在的页面、无法打开的会话以及启动时离线,会用统一的界面说明原因和下一步操作。 - 主屏幕:在 iPhone 上,可以通过 Safari 的「添加到主屏幕」,像应用一样打开。作为添加到主屏幕的应用运行时的表现尚未验证。 DSH 原有的界面会保留。你可以在每台设备上分别选择使用哪个界面。 环境要求 - DeepSeek Harness 0.2.0-rc.2(使用当前发布的 0.0.8 时) - 0.0.8 适用于这个版本。安装方法见「快速开始」。 - 验证结果、已知差异和未验证的操作见 docs/dsh-compatibility.md(日文)。 - DeepSeek Harness 0.2.1-rc.2(本仓库的 main 和预发布版本 v0.0.9-rc.2) - main 和 v0.0.9-rc.2 支持这个版本。已取消对 0.1.5 系列的支持。 - 安装 DSH 本体时需要指定版本。npm 的 latest、next 等标签会随时间变动(截至 2026-10-20,两者都指向 0.2.1-rc.2),请固定为本仓库支持的版本。 npm i -g @deepseek-ai/dsh@0.2.1-rc.2 可用 dsh --version 确认本机版本。 - 满足 DSH 和 pnpm 要求的 Node.js,以及 PATH 中的 pnpm(供通过 npm 安装的普通 DSH CLI 使用)。 - DSH 本身未声明 Node 版本下限,但 CLI 使用的 commander 15 要求 Node >=22.12.0,pnpm 11.17.0 要求 >=22.13。请使用同时满足 DSH 和所用 pnpm 版本要求的 Node。 - 验证环境为 macOS 27.2、Node.js 26.7.0 和 pnpm 11.17.0;依赖声明的下限不代表 M3E 保证支持的最低版本。 - 本版本尚未在此环境中验证 Desktop。虽然有上游关于内置 pnpm 的说明,但请与普通 CLI 的验证结果区分开。 使用方法 安装、登录标准界面以及打开 http://<host>/m3e/ 的步骤见「快速开始」。 在 iPhone 上,可以通过 Safari 的分享菜单选择「添加到主屏幕」,像应用一样打开。实机上仅验证了在 Safari 中打开的情况,作为添加到主屏幕的 Web 应用运行时的表现尚未验证。 切换界面 本 README 中的「标准界面」指 DSH 原有的 Web 界面(URL 参数和设置中称为「classic」)。你可以通过以下任一方式选择这台设备使用的界面。所选设置会分别保存在每台设备上。 - 在标准界面中选择「設定 → 一般 → この端末で M3E の画面を使う」(设置 → 常规 → 在此设备上使用 M3E 界面) - 在本界面中选择「設定 → 今の画面に戻す」(设置 → 返回标准界面) - 在 URL 后附加 ?ui=m3e 或 ?ui=classic 后打开 在选择了 M3E 的设备上,手机上新打开 / 会切换到 M3E。在电脑上(主要输入设备为鼠标或触控板),/ 仍保持标准界面;直接打开 /m3e/ 即可使用 M3E。带触摸屏的 Windows Firefox 等设备可能不会被判定为电脑,因此 / 仍会像手机一样跳转到 /m3e/。在显示 M3E 的标签页中,从 URL 中去掉 /m3e/ 后打开 /,该标签页会保持标准界面。新打开的标签页在手机上会遵循设置。0.0.8 在电脑上也会从 / 跳转到 /m3e/,没有按标签页保持标准界面的行为。 如果某个界面无法正常打开,请访问 http://<host>/?ui=classic,返回标准界面。 更新、版本确认与卸载 查看 JSON 输出中的 dependencies.dsh-webui-m3e.version 确认已安装版本,resolved 则显示来源。 dsh plugin --profile web list dsh-webui-m3e --depth 0 --json 更新时,从发布列表选择兼容版本,用其 tgz 附件的 URL 重新添加。URL 格式为 https://github.com/AliceSaikawa/dsh-webui-m3e/releases/download/v<version>/dsh-webui-m3e-<version>.tgz。下面是迁移到 0.0.8 的示例。通过本地 tgz 安装的用户也在同一配置档案中执行此命令,重启 Host,再用上面的命令检查版本,无需手动修改版本号。 dsh plugin --profile web add https://github.com/AliceSaikawa/dsh-webui-m3e/releases/download/v0.0.8/dsh-webui-m3e-0.0.8.tgz 从未来的新版本回退时,从发布列表选择已验证的兼容版本的 URL,重新添加并重启 Host。回到 0.0.8 可使用同一命令。请勿将以前分发的 0.0.7 作为 DSH 0.2.0-rc.2 的回退目标。也可以使用保留的兼容 tgz: dsh plugin --profile web add file:/path/to/dsh-webui-m3e-<version>.tgz 卸载前,请打开标准界面(http://<host>/?ui=classic)。卸载后 /m3e/ 返回 404,请使用标准界面: dsh plugin --profile web remove dsh-webui-m3e 如果遇到问题,请检查以下几点。 - 下载时遇到 404:在发布列表检查标签、附件名称和 URL。 - 找不到 pnpm:检查 PATH。 - 界面未出现:检查配置档案并重启 Host。 - 在没有 cookie 的情况下打开 /m3e/ 时,会显示请从地址栏重新打开的提示(该页面为日语;从 v0.0.9-rc.2 开始)。在 0.0.8 中如果无法打开,请重新打开 dsh web 输出的登录 URL。 - CLI 失败时还会输出诊断日志位置。 从源码构建请参阅开发与分发指南(日文)。 注意事项 - 界面文字目前仅提供日语。虽然已有跟随 DSH 语言设置的机制(docs/design/11-i18n.md,日文),但英语和中文的译文尚未加入。 - 插件随附 DSH 的内部库(@deepseek-ai/cordis、@deepseek-ai/dsh-client-store),因此可能无法在某些 DSH 版本上运行。 - 实机验证仅限于在 iPhone 17 Pro Max 的 Safari 中打开的情况。作为添加到主屏幕的应用运行时的表现,以及其他设备和浏览器,尚未验证。 - 界面测试主要使用模拟数据,与 DSH 的连接则通过隔离的真实 DSH 和模拟 LLM 验证。尚未验证使用真实 LLM 时的表现。详细验证范围见 docs/dsh-compatibility.md(日文)。 - 开发方法、工作原理和验证记录见 docs/development.md(日文)。 许可证 采用 MIT 许可证。详见 LICENSE。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
AliceSaikawa/dsh-webui-m3e
这是一个插件,让你在手机上通过易用的 Material 3 ExpressiveM3E界面操作 DeepSeek…
相关插件 · 市场 / 管理
插件精选列表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
这是你的仓库?认领条目