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

M3E 移动界面 AliceSaikawa/dsh-webui-m3e

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

这是一个插件,让你在手机上通过易用的 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
装得上吗
静态安装检查有提示项,装前建议看一眼 README
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 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。
预览分享卡片长什么样 ↓AliceSaikawa/dsh-webui-m3e
分享 · DeepSeek Harness Hub
AliceSaikawa/dsh-webui-m3e

这是一个插件,让你在手机上通过易用的 Material 3 ExpressiveM3E界面操作 DeepSeek…

这是你的仓库?认领条目

回到顶部