面向 DSH Web 宿主平台的极简外部插件,挂入渲染端模块加载器并标记文档根节点,用于校验插件安装与热更新链路。
- Language
- TypeScript
- License
- Apache-2.0
- Branch
- main
Install
$ dsh plugin --profile web add github:lencx/Minke/tests/fixtures/web-pluginRun the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial
一句话定位
这是 Minke 桌面工程附带的一个 Web 平台烟雾测试夹具,作为最简形式的外部 Web 插件挂入宿主渲染端模块加载器,用于验证 dsh plugin 安装与热更新链路是否通畅。
核心能力
- 在宿主页面 HTML 根元素上写入
data-dsh-external-web-plugin="active",作为"外部 Web 插件已加载"的探针标记 - 通过宿主提供的
window.__ModuleLoader__把自身注册为一个可被宿主启动的客户端模块 - 在包元数据中声明 cordis 补丁,把自己插入到宿主启动清单中,名称为
@dsh-desktop/smoke-web-plugin - 不在桌面主进程做任何事,主进程侧的
apply()是空函数
技术实现
- 语言: JavaScript(ESM,
type: module) - 关键依赖: 仅依赖宿主运行时提供的
window.__ModuleLoader__,无第三方包依赖 - 架构模式: Web 平台客户端插件——通过
cordis.patch.yml在宿主启动清单中插入自己,再由宿主在渲染端加载lib/client.js注册的工厂 - 入口文件:
lib/index.js(主进程侧,空实现)/lib/client.js(渲染端侧,真正生效)
适用场景
适合 Minke 维护者或 DSH 桌面宿主开发者,用来验证"外部 Web 插件安装 + 渲染端加载 + 热更新"这条链路在改版后仍然工作;不适合普通终端用户安装使用。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 未声明 | 插件包未声明 DSH 版本;仅在 Minke 自带的 harness:smoke 流程下被消费 |
| Node | 未声明 | 插件包未声明 Node 版本 |
| 平台 | 跨平台 | 在宿主 Web 平台(Electron 渲染端或浏览器)运行 |
| 原生模块 | 无 | 源码中未引入任何原生模块 |
安装方式
dsh plugin --profile web add github:lencx/Minke/tests/fixtures/web-plugin
配置项
本插件无需额外配置。包内 dsh.client 仅声明三个清单字段,没有暴露可由用户调整的运行参数:
| 清单字段 | 类型 | 说明 | 默认值 |
|---|---|---|---|
dsh.client.platform | 字符串 | 声明运行平台,必须是 web 才能被宿主渲染端加载 | "web" |
dsh.client.inject | 数组 | 客户端脚本要注入的位置标签,当前为空 | [] |
dsh.client.immediately | 布尔 | 是否在宿主启动时立即注册该客户端模块 | true |
常见问题
Q: 这个插件装上以后我能在 DSH 桌面上看到什么功能?
A: 看不到任何新功能。它的唯一副作用是在宿主页面根元素上写一个 data-dsh-external-web-plugin="active" 数据属性,普通用户感知不到界面变化。
Q: 它适合普通用户安装吗?
A: 不适合。它是 Minke 仓库内的烟雾测试夹具,被 scripts/harness/smoke.mjs 用来自动校验外部 Web 插件的安装和热更新链路,没有业务价值。
Q: 安装后能否卸载?
A: 可以,按通用的 dsh plugin remove 流程卸载即可;卸载后宿主页面根元素上的 data-dsh-external-web-plugin="active" 标记会随之消失。
Q: 它的主进程和渲染端分别是干什么的?
A: 主进程侧的 lib/index.js 导出一个空 apply(),不做任何事情;真正的动作发生在渲染端,lib/client.js 调用 window.__ModuleLoader__.load 注册一个工厂,工厂的 apply() 写入文档根元素的数据属性。
Q: 如何验证这个插件是否被宿主正确加载?
A: 在浏览器开发者工具里查看页面根 <html> 元素,如果 data-dsh-external-web-plugin 的值是 "active",说明已被加载。Minke 的烟雾测试还会修改客户端源码把 "active" 改成 "reloaded" 来验证热更新。
上手难度
入门 — 整个插件只有两个空壳 JS 文件加一份 cordis 补丁,理解门槛来自 DSH Web 插件清单的字段约定,而不是插件自身逻辑。
已知问题与限制
- 仅作为 Minke 工程内烟雾测试夹具存在,未声明对外使用的版本兼容信息,第三方环境无法保证可用
- 主进程
apply()始终是空函数,无法在 Node/桌面主进程侧扩展业务逻辑
Minke
A native desktop workspace for DeepSeek Harness
English · 简体中文
Minke brings DeepSeek Harness to the desktop as a focused, local-first workspace for agentic work. Conversations, project files, terminals, web tools, and native desktop actions stay within reach—without fragmenting your workflow across multiple apps.
[!IMPORTANT] Minke is under active development. Features, packaging, and the local data schema may change as the project evolves. Minke is an independent community project, not an official DeepSeek product.
Highlights
- More than a chat window — Independent right and bottom Tabs keep Files, Terminal, Browser, Plugins, and Session details beside the active conversation. The Plugins workspace supports GitHub discovery, installation, status checks, repair, and removal. Files supports navigation, syntax-highlighted previews, editing, and diffs, while Terminal connects to a real PTY on the Minke host.
- A real remote workspace, not screen sharing — Minke Host projects supported desktop capabilities into a responsive Web UI. From a phone or tablet you can continue conversations, start agent tasks, work with project files, and use the host terminal without streaming pixels from the Electron window.
- Installable as a PWA — Open Minke through a secure HTTPS address and install it to the home screen for a standalone, app-like experience. The PWA provides branded launch surfaces and early connection feedback, while deliberately avoiding caches of authenticated workspace traffic.
- Private remote access — Minke can expose its responsive workspace through an application-managed remote route. The currently validated path is Tailscale Serve over HTTPS; Tailscale Direct IP and Cloudflare Access integrations remain experimental until they complete release testing.
- Local model integrations — Minke can discover and connect to LM Studio, Ollama, and other loopback OpenAI-compatible services. Optional lifecycle management can start supported local runtimes when needed without taking ownership of services that were already running.
- Fast keyboard-driven control — The global Command Palette (
Mod+K), configurable shortcuts, native menus, Session history navigation, log export, synchronized themes, and English and Chinese UI keep common actions close at hand. - Safe, recoverable data migration — Choose where Minke stores its data, then preview and merge existing Sessions, plugins, and settings. Minke deduplicates identical files, preserves conflicts and source directories, and switches only after the restart-time migration succeeds; starting with a clean data home remains an option.
- Local-first and cross-platform — Application state and browser session data stay on your machine under the Minke data boundary. Automated releases target macOS, Windows, and Linux, including a portable AppImage.
![]() | ![]() |
![]() | ![]() |
Mobile access with Tailscale
Minke remote access is a responsive Web client backed by Minke Host—not a video stream or touch-controlled projection of the Electron window. From a phone you can continue conversations, start agent tasks, manage project files, and use a terminal that runs on the Minke computer.

[!NOTE] The only remote route currently tested end to end is Tailscale Serve over HTTPS. Tailscale Direct IP and Cloudflare Access are available as advanced integrations, but have not yet completed release validation and should be treated as experimental.
Minke can expose its Web UI privately through Tailscale Serve. It keeps Harness on the local loopback address, does not bind it to the LAN, and does not enable the public Tailscale Funnel.
- Install Tailscale on the Minke computer and the phone, sign both into the same tailnet, and confirm the computer is connected.
- In Minke, open Settings → Remote access, enable Access through Tailscale, then choose Restart Minke when prompted.
- Return to Remote access, then copy or open the displayed
https://…ts.netaddress on the phone.
Install as a PWA
Open the Tailscale HTTPS address, choose Install Minke in the sidebar, and accept the browser install prompt. On iPhone or iPad, use Share → Add to Home Screen. The installed app launches in standalone mode; when connectivity is poor it shows connection or offline feedback instead of silently presenting cached workspace content.
Minke owns a foreground Serve session and stops it when the app exits. The remote page can start agent tasks and use local tools already authorized in Minke, so grant tailnet access only to people you trust.
Installation
Download Minke only from the official GitHub Releases page. The links below always point to the latest stable release.
| Platform | Architecture | Package |
|---|---|---|
| macOS | Apple Silicon (arm64) | Download .dmg |
| macOS | Intel (x64) | Download .dmg |
| Windows | x64 | Download .exe |
| Linux | Debian / Ubuntu (x64) | Download .deb |
| Linux | Fedora / RHEL (x64) | Download .rpm |
| Linux | Any distro (portable) | Download .AppImage |
Release checksums are available in SHA256SUMS.
macOS
-
Download the
.dmgfile and open it. -
Drag
Minke.appinto the Applications folder. -
Current pre-release builds are not notarized. Open Terminal and remove the quarantine attribute from the installed app:
xattr -dr com.apple.quarantine "/Applications/Minke.app" -
Open Minke from the Applications folder.
[!CAUTION] Removing the quarantine attribute bypasses a macOS security check. Run this command only for
Minke.appdownloaded from the official Releases page, and never replace the path with a broad directory. You can also try Apple's Open Anyway flow under System Settings → Privacy & Security.
Windows
- Download the Windows x64
.exeinstaller. - Run the installer and follow the on-screen instructions.
- Windows may show a reputation-based warning for a new pre-release build. Continue only after confirming that the installer came from the official Minke Releases page.
Linux
Download the package for your distribution, then open it with your graphical package manager or install it from a terminal.
Debian / Ubuntu:
sudo apt install "/path/to/minke-package.deb"
Fedora / RHEL:
sudo dnf install "/path/to/minke-package.rpm"
Replace the example path with the downloaded package path.
Build from source
Build Minke on the same operating system and CPU architecture as the package you need. The build produces distributables for the current host under out/make; this project does not support cross-platform packaging from a single host.
Prerequisites:
- Git with submodule support. The
vendor/deepseek-harnesssubmodule must be checked out. - Node.js 24 or newer.
- pnpm 11.7.0, with the repository dependencies installed before running the scripts.
- macOS: an Apple Silicon or Intel Mac with Xcode Command Line Tools. The
.dmgtarget can only be built on macOS. - Windows: a Windows x64 host. Visual Studio 2022 Build Tools with the Desktop development with C++ workload may be needed if a native dependency must be compiled locally.
- Linux: a Linux x64 host with a native build toolchain,
fakeroot,dpkg, and eitherrpmorrpm-build.
On a fresh checkout, first install the repository dependencies, then prepare the Harness runtime:
pnpm run harness:stage
This command installs and builds the pinned DeepSeek Harness source, then stages the reusable desktop runtime under runtime/host. Run it after a fresh checkout, or whenever the pinned Harness source or runtime contract changes.
Start Minke in development mode with:
pnpm start
pnpm start refreshes the Minke integration in the prepared runtime and launches the development app.
Create the distributable package for the current platform with:
pnpm make
pnpm make performs a full runtime stage again before writing the platform package to out/make.
中国用户
如在使用中遇到问题,或希望进一步交流 Minke,可关注公众号「浮之静」,发送 dsh 获取进群码。也欢迎大家贡献 PR 或分享给更多朋友,您的每一次 Star 都是对开源项目的巨大支持,感恩。



