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

MoE4All 本地引擎 Headmaster218/dsh-llm-moe4all

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

连接本地 MoE4All 服务并安全管理后端进程

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · model
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 34 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/9/30) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 91 处,展示前 67 条)
  • 发起网络请求
    lib/client.js:1022
    const response = await fetch(path, {
  • 发起网络请求
    lib/client.js:2362
    constructor(fetcher = (input, init) => fetch(input, init), delay = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)), requ
  • 发起网络请求
    lib/client.js:2378
    const response = await this.request(path, init);
  • 发起网络请求
    lib/client.js:2390
    const response = await this.request("/dsh-market/api/v1/capabilities");
  • 发起网络请求
    lib/client.js:2476
    constructor(fetcher = (input, init) => fetch(input, init)) {
  • 写入剪贴板
    lib/client.js:2582
    navigator.clipboard.writeText(draft).then(() => {
  • 写入剪贴板
    lib/client.js:4192
    navigator.clipboard.writeText(output).then(() => setCopied(true)).catch((error) => w.setError(String(error)));
  • 发起网络请求
    lib/engine-controller.js:124
    const response = await fetch(healthUrl(endpoint), {
  • 读取本地文件
    lib/engine-controller.js:139
    await access(candidate, fsConstants.F_OK);
  • 执行外部命令来自配置/变量
    lib/engine-controller.js:183
    const child = spawn(executable, arguments_, {
  • 执行外部命令来自配置/变量
    lib/engine-controller.js:714
    this.child = spawn(executable, sessionCacheArguments(arguments_, environment), {
  • 执行外部命令固定命令
    lib/engine-release.js:50
    const child = spawn('powershell.exe', [
  • 读取本地文件
    lib/engine-release.js:123
    for (const entry of await readdir(directory, { withFileTypes: true })) {
  • 读取本地文件
    lib/engine-release.js:142
    const input = createReadStream(path);
  • 读取本地文件
    lib/engine-release.js:151
    await access(path, fsConstants.F_OK);
  • 发起网络请求
    lib/engine-release.js:219
    const response = await this.dependencies.fetch(RELEASE_API, {
  • 发起网络请求
    lib/engine-release.js:232
    const page = await this.dependencies.fetch(RELEASE_LATEST_PAGE, {
  • 读取本地文件
    lib/engine-release.js:256
    const value = JSON.parse(await readFile(this.metadataPath, 'utf8'));
  • 读取本地文件
    lib/engine-release.js:278
    for (const entry of await readdir(releasesRoot, { withFileTypes: true })) {
  • 读取本地文件
    lib/engine-release.js:289
    const details = await stat(directory);
  • 写入本地文件
    lib/engine-release.js:342
    await mkdir(this.root, { recursive: true });
  • 写入本地文件
    lib/engine-release.js:377
    await mkdir(releasesRoot, { recursive: true });
  • 写入本地文件
    lib/engine-release.js:384
    await mkdir(staging, { recursive: true });
  • 发起网络请求
    lib/engine-release.js:389
    const checksumResponse = await this.dependencies.fetch(release.checksum.browser_download_url, {
  • 删除本地文件递归
    lib/engine-release.js:402
    await rm(staging, { recursive: true, force: true });
  • 写入本地文件
    lib/engine-release.js:439
    await mkdir(staging, { recursive: true });
  • 删除本地文件递归
    lib/engine-release.js:453
    await rm(staging, { recursive: true, force: true });
  • 删除本地文件递归
    lib/engine-release.js:477
    await rm(target, { recursive: true, force: true });
  • 删除本地文件
    lib/engine-release.js:480
    await rm(this.metadataPath, { force: true });
  • 发起网络请求
    lib/engine-release.js:506
    const response = await this.dependencies.fetch(release.archive.browser_download_url, {
  • 写入本地文件
    lib/engine-release.js:546
    await mkdir(extracted, { recursive: true });
  • 写入本地文件
    lib/engine-release.js:555
    await mkdir(dirname(target), { recursive: true });
  • 删除本地文件递归
    lib/engine-release.js:557
    await rm(target, { recursive: true, force: true });
  • 读取本地文件
    lib/model-download.js:130
    return (await stat(path)).size;
  • 读取本地文件
    lib/model-download.js:138
    await access(path, fsConstants.F_OK);
  • 写入本地文件
    lib/model-download.js:209
    await mkdir(outputDirectory, { recursive: true });
  • 发起网络请求
    lib/model-download.js:239
    let response = await this.dependencies.fetch(item.url, {
  • 发起网络请求
    lib/model-download.js:246
    response = await this.dependencies.fetch(item.url, {
  • 写入本地文件
    lib/model-download.js:275
    await rename(partial, target);
  • 发起网络请求
    lib/model-provider.js:40
    const response = await fetch(url, {
  • 读取本地文件
    lib/plugin-release-update.js:65
    const stream = createReadStream(file);
  • 读取本地文件
    lib/plugin-release-update.js:131
    this.runningVersion = options.runningVersion ?? manifest(readFileSync(new URL('../package.json', import.meta.url))).version;
  • 读取本地文件
    lib/plugin-release-update.js:137
    const profile = manifest(await readFile(join(target.profileDirectory, 'package.json')));
  • 读取本地文件
    lib/plugin-release-update.js:142
    const installed = manifest(await readFile(packageFile));
  • 读取本地文件
    lib/plugin-release-update.js:143
    const actualRoot = await realpath(dirname(packageFile));
  • 读取本地文件
    lib/plugin-release-update.js:144
    const inside = relative(await realpath(join(target.profileDirectory, 'node_modules')), actualRoot);
  • 写入本地文件
    lib/plugin-release-update.js:286
    await mkdir(directory, { recursive: true });
  • 写入本地文件
    lib/plugin-release-update.js:288
    await writeFile(`${staged}.partial`, archive);
  • 写入本地文件
    lib/plugin-release-update.js:289
    await rename(`${staged}.partial`, staged);
  • 删除本地文件
    lib/plugin-release-update.js:309
    await rm(lockPath);
  • 写入本地文件
    lib/plugin-release-update.js:323
    await writeFile(retained, await readFile(oldArchive));
  • 写入本地文件
    lib/plugin-release-update.js:325
    await writeFile(join(directory, 'package.before.json'), packageBytes);
  • 写入本地文件
    lib/plugin-release-update.js:326
    await writeFile(join(directory, 'pnpm-lock.before.yaml'), lockBytes);
  • 删除本地文件
    lib/plugin-release-update.js:381
    await rm(lockPath, { force: true });
  • 执行外部命令来自配置/变量
    lib/plugin-release-update.js:435
    const child = spawn(process.execPath, [resolve(entry), 'plugin', '--profile', profile, ...args], {
  • 执行外部命令固定命令
    lib/plugin-release-update.js:451
    spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], { windowsHide: true, stdio: 'ignore' });
  • 发起网络请求
    lib/network-fetch.js:68
    agent = new ProxyAgent(url);
  • 发起网络请求
    lib/network-fetch.js:80
    direct = await fetch(input, init);
  • 发起网络请求
    lib/network-fetch.js:97
    return await fetch(input, proxyInit);
  • 读取本地文件
    lib/model-files.js:102
    entries = await beforeDeadline(readdir(current.directory, { withFileTypes: true }), deadline);
  • 读取本地文件
    lib/model-files.js:120
    result.set(path.toLowerCase(), { path, size: (await beforeDeadline(stat(path), deadline)).size });
  • 读取本地文件
    lib/model-files.js:135
    const details = await stat(directory).catch((error) => {
  • 读取本地文件
    lib/model-files.js:152
    const details = await stat(path);
  • 读取本地文件
    lib/model-files.js:220
    const info = await stat(absolute);
  • 读取本地文件
    lib/model-files.js:249
    const info = await stat(path);
  • 发起网络请求
    lib/native-file-picker.js:21
    const response = await fetch(new URL(kind === 'engine' ? '/pick-engine' : '/pick-model', bridge), {
  • 执行外部命令来自配置/变量
    lib/native-file-picker.js:75
    const child = spawn(command.executable, command.arguments, {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-llm-pi-ai@deepseek-ai/dsh-settings@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 连接本地引擎服务
  • 管理后端进程

DeepSeek Harness 的本地 MoE4All 引擎服务商。

README

由 DeepSeek 最新模型翻译生成
dsh-llm-moe4all dsh-llm-moe4all 用于把 DeepSeek Harness 连接到 MoE4All OpenAI 兼容服务,并可在配置好可执行文件和参数后安全地管理本地后端进程。 聊天、工具调用、图片、思考块、重试和历史回放兼容性由 DSH 自带的 @deepseek-ai/dsh-llm-pi-ai 负责。本插件只负责端点与模型发现、受保护的本地启动、健康检查和关闭,因此能尽量兼容不同 DSH 版本。 English documentation: README.md 兼容版本 - 已安装基线:DSH Desktop 0.6.3 内置的 DSH 0.1.1-rc.2。 - 当前 npm latest:DSH 0.1.5-rc.3。 - 声明的兼容范围同时覆盖已知的 0.1.7 预发布版本线。 - 需要 Node.js 20 或更高版本。 安装 开发阶段从 GitHub 安装: dsh plugin --profile web add github:Headmaster218/dsh-llm-moe4all 发布 npm 后安装: dsh plugin --profile web add dsh-llm-moe4all 默认端点是 http://127.0.0.1:8080/v1。
展开完整文档(README 剩余 1 节)
dsh-llm-moe4all

dsh-llm-moe4all 用于把 DeepSeek Harness 连接到 MoE4All OpenAI 兼容服务,并可在配置好可执行文件和参数后安全地管理本地后端进程。

聊天、工具调用、图片、思考块、重试和历史回放兼容性由 DSH 自带的 @deepseek-ai/dsh-llm-pi-ai 负责。本插件只负责端点与模型发现、受保护的本地启动、健康检查和关闭,因此能尽量兼容不同 DSH 版本。

English documentation: README.md

兼容版本

- 已安装基线:DSH Desktop 0.6.3 内置的 DSH 0.1.1-rc.2。
- 当前 npm latest:DSH 0.1.5-rc.3。
- 声明的兼容范围同时覆盖已知的 0.1.7 预发布版本线。
- 需要 Node.js 20 或更高版本。

安装

开发阶段从 GitHub 安装:

dsh plugin --profile web add github:Headmaster218/dsh-llm-moe4all

发布 npm 后安装:

dsh plugin --profile web add dsh-llm-moe4all

默认端点是 http://127.0.0.1:8080/v1。插件会读取 /v1/models,过滤 Embedding 模型,并在内存中更新 DSH 已有的 llm-pi-ai 适配器。因此模型 ID 会自动保持准确,也不会持久化第二份适配器配置。

引擎模式

- connect(默认):只连接已经运行的服务,从不启动进程。
- auto:优先复用健康的服务,否则考虑启动已配置的可执行文件。仅当 RAM 和实时 VRAM 都严格超过 50% 空闲时,才会无人值守地启动。
- managed:行为与 auto 类似,但配置不完整会记录为错误。

每次启动前,插件都会从操作系统进程列表检查 infr.exe、moe4all.exe 和配置的可执行文件名。即使已有进程监听的是其他 IP 或端口,也不会再启动第二个实例。RAM 或 VRAM 不足一半空闲时,插件会暂停并通过 DSH Desktop/Electron 对话框询问;Windows 下还有原生对话框回退。没有可用确认界面时保持停止。

只有同时配置 executable 和 arguments 后才会自动启动。这可以避免未配置的 infr.exe 在 DSH 内部打开交互式启动向导。

插件配置覆盖示例:

- id: moe4all-engine
config:
mode: auto
host: 127.0.0.1
port: 1234
executable: D:\AIinfr\infr\target\release\infr.exe
arguments:
- serve
- --dev
- Vulkan1
- --ctx
- 160k
- D:\Models\model.gguf
workingDirectory: D:\AIinfr\infr

也可以通过 MOE4ALL_ENGINE 环境变量指定可执行文件。两者都未设置时,插件还会检查包内 engine/infr.exe、工作目录和 PATH。

host、port、protocol 和 apiBasePath 可以分别配置;高级字段 endpoint 非空时会覆盖这四项。默认只允许回环地址,仅在明确连接远程服务时设置 allowRemoteEndpoint: true。远程端点只用于连接,绝不会触发本地进程启动。API key 的值不会写进插件配置,apiKeyEnv 只填写已有环境变量的名称。

安全行为

- 安装阶段不下载文件,也不执行进程。
- 子进程使用 shell: false 直接启动。
- 除非显式开启,否则只访问本机回环地址。
- 不依赖端口,通过进程身份阻止重复启动引擎。
- 无人值守本地启动要求 RAM 和 VRAM 都严格超过 50% 空闲。
- 插件配置不会保存 API key 的值。
- 插件启动的进程默认会在插件卸载时停止。

开发

npm install
npm run check

许可证

Apache-2.0,详见 LICENSE 和 NOTICE。
预览分享卡片长什么样 ↓Headmaster218/dsh-llm-moe4all
分享 · DeepSeek Harness Hub
Headmaster218/dsh-llm-moe4all

连接本地 MoE4All 服务并安全管理后端进程

回到顶部