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

任务自组装 Han-1413141/dsh-autocompose

DeepSeek Harnessv0.5.0
Han-141314133 天前有提交已提供中文文档扫描:含敏感能力

描述任务,自动找插件、安装组合,打开可以继续对话的 DSH 窗口。

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-autocompose
npm 源 · dsh-autocompose 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
静态安装检查通过
未做真实安装
L4 · 真实安装等级说明 →
数据截至 2026/10/27·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 33 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-autocompose @ 0.5.0
✓Node 引擎要求 >=22.19 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 17:39:51

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 118 处,展示前 72 条)
  • 读取本地文件
    lib/index.js:73
    return JSON.parse(await readFile(path, "utf8"));
  • 读取本地文件
    lib/index.js:77
    return await readFile(path, "utf8");
  • 写入本地文件
    lib/index.js:84
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    lib/index.js:93
    await rename(temporary, path);
  • 删除本地文件
    lib/index.js:103
    await rm(temporary, { force: true });
  • 写入本地文件
    lib/index.js:115
    await mkdir(dirname(path), { recursive: true });
  • 读取本地文件
    lib/index.js:119
    const actualRoot = await realpath(root), actual = await realpath(directory);
  • 读取本地文件
    lib/index.js:121
    if ((await lstat(directory)).isSymbolicLink()) throw new Error("\u62D2\u7EDD\u6E05\u7406\u7B26\u53F7\u94FE\u63A5");
  • 删除本地文件递归
    lib/index.js:124
    await rm(actual, { recursive: true });
  • 发起网络请求
    lib/index.js:205
    const response = await fetch(`${registryUrl}/${path}`, { signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(15e3)]) : AbortSignal.timeout(1
  • 读取本地文件
    lib/index.js:903
    return JSON.parse(readFileSync(fileURLToPath(url), "utf8"));
  • 读取本地文件
    lib/index.js:915
    if (existsSync(bin)) return {
  • 执行外部命令来自配置/变量
    lib/index.js:1093
    const child = spawn(this.runtime.command, this.runtime.args, {
  • 发起网络请求
    lib/index.js:1161
    const result = await this.request("initialize", { ...params }, this.runtime.initializeTimeoutMs);
  • 发起网络请求
    lib/index.js:1179
    const result = await this.request("session/prompt", { ...params });
  • 发起网络请求
    lib/index.js:1202
    if (timeout === void 0) return await transport.request(method, params ?? {});
  • 发起网络请求
    lib/index.js:1210
    return await transport.request(method, params ?? {}, abandon.signal);
  • 发起网络请求
    lib/index.js:1277
    await this.request("shutdown", void 0, this.runtime.shutdownTimeoutMs ?? 1e3);
  • 执行外部命令来自配置/变量
    lib/index.js:1606
    const child = spawn2(command, args, {
  • 写入本地文件
    lib/index.js:1808
    await mkdir2(runs, { recursive: true });
  • 写入本地文件
    lib/index.js:1812
    await mkdir2(home, { recursive: true });
  • 写入本地文件
    lib/index.js:2081
    await mkdir3(home, { recursive: true });
  • 执行外部命令来自配置/变量
    lib/index.js:2150
    const child = desktop ? spawn3(desktop.executable, desktop.args, {
  • 执行外部命令来自配置/变量
    lib/index.js:2156
    }) : spawn3(
  • 读取本地文件
    lib/core.js:8
    return JSON.parse(await readFile(path, "utf8"));
  • 读取本地文件
    lib/core.js:12
    return await readFile(path, "utf8");
  • 写入本地文件
    lib/core.js:19
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    lib/core.js:28
    await rename(temporary, path);
  • 删除本地文件
    lib/core.js:38
    await rm(temporary, { force: true });
  • 写入本地文件
    lib/core.js:50
    await mkdir(dirname(path), { recursive: true });
  • 读取本地文件
    lib/core.js:54
    const actualRoot = await realpath(root), actual = await realpath(directory);
  • 读取本地文件
    lib/core.js:56
    if ((await lstat(directory)).isSymbolicLink()) throw new Error("\u62D2\u7EDD\u6E05\u7406\u7B26\u53F7\u94FE\u63A5");
  • 删除本地文件递归
    lib/core.js:59
    await rm(actual, { recursive: true });
  • 发起网络请求
    lib/core.js:140
    const response = await fetch(`${registryUrl}/${path}`, { signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(15e3)]) : AbortSignal.timeout(1
  • 读取本地文件
    lib/core.js:838
    return JSON.parse(readFileSync(fileURLToPath(url), "utf8"));
  • 读取本地文件
    lib/core.js:850
    if (existsSync(bin)) return {
  • 执行外部命令来自配置/变量
    lib/core.js:1028
    const child = spawn(this.runtime.command, this.runtime.args, {
  • 发起网络请求
    lib/core.js:1096
    const result = await this.request("initialize", { ...params }, this.runtime.initializeTimeoutMs);
  • 发起网络请求
    lib/core.js:1114
    const result = await this.request("session/prompt", { ...params });
  • 发起网络请求
    lib/core.js:1137
    if (timeout === void 0) return await transport.request(method, params ?? {});
  • 发起网络请求
    lib/core.js:1145
    return await transport.request(method, params ?? {}, abandon.signal);
  • 发起网络请求
    lib/core.js:1212
    await this.request("shutdown", void 0, this.runtime.shutdownTimeoutMs ?? 1e3);
  • 执行外部命令来自配置/变量
    lib/core.js:1541
    const child = spawn2(command, args, {
  • 写入本地文件
    lib/core.js:1744
    await mkdir2(runs, { recursive: true });
  • 写入本地文件
    lib/core.js:1748
    await mkdir2(home, { recursive: true });
  • 写入本地文件
    lib/core.js:2231
    await mkdir3(home, { recursive: true });
  • 执行外部命令来自配置/变量
    lib/core.js:2300
    const child = desktop ? spawn3(desktop.executable, desktop.args, {
  • 执行外部命令来自配置/变量
    lib/core.js:2306
    }) : spawn3(
  • 发起网络请求
    lib/client.js:70
    `;var yr={pdf:{task:/ pdf |扫描件|扫描文档/iu,evidence:/ pdf /iu,query:"pdf",label:"PDF"},web:{task:/ (web|search|browse|online|latest|documentation) |
  • 读取本地文件
    lib/cli.js:15
    return JSON.parse(await readFile(path, "utf8"));
  • 读取本地文件
    lib/cli.js:19
    return await readFile(path, "utf8");
  • 写入本地文件
    lib/cli.js:26
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    lib/cli.js:35
    await rename(temporary, path);
  • 删除本地文件
    lib/cli.js:45
    await rm(temporary, { force: true });
  • 写入本地文件
    lib/cli.js:57
    await mkdir(dirname(path), { recursive: true });
  • 读取本地文件
    lib/cli.js:61
    const actualRoot = await realpath(root), actual = await realpath(directory);
  • 读取本地文件
    lib/cli.js:63
    if ((await lstat(directory)).isSymbolicLink()) throw new Error("\u62D2\u7EDD\u6E05\u7406\u7B26\u53F7\u94FE\u63A5");
  • 删除本地文件递归
    lib/cli.js:66
    await rm(actual, { recursive: true });
  • 发起网络请求
    lib/cli.js:147
    const response = await fetch(`${registryUrl}/${path}`, { signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(15e3)]) : AbortSignal.timeout(1
  • 读取本地文件
    lib/cli.js:845
    return JSON.parse(readFileSync(fileURLToPath(url), "utf8"));
  • 读取本地文件
    lib/cli.js:857
    if (existsSync(bin)) return {
  • 执行外部命令来自配置/变量
    lib/cli.js:1035
    const child = spawn(this.runtime.command, this.runtime.args, {
  • 发起网络请求
    lib/cli.js:1103
    const result = await this.request("initialize", { ...params }, this.runtime.initializeTimeoutMs);
  • 发起网络请求
    lib/cli.js:1121
    const result = await this.request("session/prompt", { ...params });
  • 发起网络请求
    lib/cli.js:1144
    if (timeout === void 0) return await transport.request(method, params ?? {});
  • 发起网络请求
    lib/cli.js:1152
    return await transport.request(method, params ?? {}, abandon.signal);
  • 发起网络请求
    lib/cli.js:1219
    await this.request("shutdown", void 0, this.runtime.shutdownTimeoutMs ?? 1e3);
  • 执行外部命令来自配置/变量
    lib/cli.js:1548
    const child = spawn2(command, args, {
  • 写入本地文件
    lib/cli.js:1740
    await mkdir2(runs, { recursive: true });
  • 写入本地文件
    lib/cli.js:1744
    await mkdir2(home, { recursive: true });
  • 写入本地文件
    lib/environment-entry.js:34
    await writeFile(`${config.readyFile}.tmp`, JSON.stringify(value), { encoding: "utf8", mode: 384 });
  • 写入本地文件
    lib/environment-entry.js:35
    await rename(`${config.readyFile}.tmp`, config.readyFile);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh@deepseek-ai/dsh-plugin-manager@deepseek-ai/dsh-tools@deepseek-ai/dsh-app-boot@deepseek-ai/dsh-sandbox@deepseek-ai/dsh-sandbox-policy@deepseek-ai/cordis@deepseek-ai/dsh-typert-protocol@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-layout
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 自动查找安装插件
  • 组合插件执行任务
  • 打开可对话窗口

面向 DeepSeek Harness 的任务感知插件组合,具备原生 Web UI 与隔离的任务执行

v0.5.02026-10-01
· 独立环境直接打开 DSH 客户端 DSH Desktop 中的“自动组装并打开客户端”现在直接启动本机官方 DSH 客户端,使用独立的插件、会话和客户端数据目录。多个环境分配不同端口,可与主客户端同时运行。 · “重新打开”唤回同一个客户端实例;“关闭环境”停止该环境及其子进程。 · 新增 windowMode、desktopExecutable 配置和 reveal_environment 工具操作。Web 宿主保留网页模式。 · 更新使用文档、按钮和启动失败提示。 · 验证 · Windows 本机:47 项测试及 TypeScript、构建通过;实际官方 DSH Desktop 0.2.0-rc.2 验证初始会话、本地测试插件安装加载、两个独立实例并存、重新打开和进程清理。 · 模型使用本地固定回复,没有调用付费模型;macOS 客户端尚未实测。 · Windows / Linux CI 全部通过,包含 Git 安装、真实宿主、主环境安装和 Web 窗口检查。 · 安装 在 DSH 插件管理中安装 dsh-autocompose@0.5.0,或运行: dsh plugin --profile desktop add dsh-autocompose@0.5.0 --save-exact --ignore-scripts 按 DSH 提示重启后,主按钮应显示“自动组装并打开客户端”。旧的网页环境需要关闭后重新创建。独立环境不复制主客户端登录状态;需要时在新客户端配置模型。
v0.4.02026-10-01
AutoCompose 0.4.0 将自动查找、兼容性检查和安装接成一个操作,并新增可持续对话的独立 DSH 窗口。 · 修复“我要进行数学研究”不启动搜索的问题,支持数学、学术研究、LaTeX、数据分析等任务;陌生任务搜索原文,缺项和网络错误直接显示。 · 页面新增“自动查找并安装到主环境”,对话工具新增 assemble;保留只生成方案和逐步确认入口。 · 新增“自动组装并打开窗口”,使用原生 DSH Web 界面,自动提交初始任务,支持继续对话、重新打开、关闭环境和保留会话。 · 后台一次性执行保留为独立选项,并明确不会弹出聊天窗口。 适配 DSH 0.2.0-rc.2。安装:dsh-autocompose@0.4.0,或使用本仓库地址。升级后重新生成方案;旧方案不会自动补入新发现的插件。桌面端仍显示旧按钮时,退出并重新启动 DSH。 验证:45 项回归测试;真实 DSH 的自动搜索与官方 Plugin Manager 安装;SDK 执行与取消;独立窗口生命周期;浏览器两轮对话。模型测试使用本地固定回复。公开 npm 规划已实际找到数学与学术插件,其业务功能未经本轮执行验证。自动发现目前面向已发布到 npm 的 DSH 插件。 Windows / Linux CI:
v0.3.02026-09-30
· AutoCompose 0.3.0 生成插件方案后,现在可以选择临时运行,或把选中的插件长期安装到当前 DSH 主环境。 · 新增“安装到主环境”:安装前查看目标 profile、插件版本变化和权限声明,检查与已安装插件的冲突。 · 通过官方 Plugin Manager 安装并按依赖顺序启用;支持复用同版本、启用已安装包和替换已有版本。 · 新增安装进度、停止安装、逐项结果、配置备份和安装记录,显示部分失败及重启要求。 · 对话工具增加 install_preview 和 install。 · 重写 README,补充首次使用、两种运行方式、配置、模型凭据和常见问题;提供实际页面截图。 · 修复 Windows 读取进度文件时短暂占用造成的写入失败。 安装:在 DSH 插件管理中输入 dsh-autocompose@0.3.0,或粘贴本仓库地址。适配 DSH 0.2.0-rc.2、Node.js >=22.19。 验证:41 项测试(Linux 跳过 Windows 文件句柄用例),真实 DSH 的安装、启用、版本替换、冲突拦截、SDK 临时运行与取消。测试插件和模型使用本地替身;主环境安装不执行模型任务。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-autocompose 描述任务,自动找插件、安装组合,打开可以继续对话的 DSH 窗口。 AutoCompose 根据中文或英文任务搜索 npm 上的 DSH 插件,核验包的版本与兼容性,再自动安装。在 DSH Desktop 中,它会直接打开独立的 DSH 客户端,供你继续对话;也可以把插件安装到当前主环境,供后续任务使用。Web 宿主保留网页窗口方式。搜索关键词、候选数量和排除原因会保存在方案中。 它组装的是已有插件,不生成插件代码。生成方案和安装插件都不调用模型;只有执行任务时才调用模型。 安装 · 第一次使用 · 安装到主环境 · 配置与命令行 · 常见问题 安装 当前版本适配 DSH 0.2.0-rc.2,要求 Node.js >=22.19。 在 DSH 插件管理页的安装框中输入: dsh-autocompose@0.5.0 也可以粘贴仓库地址: https://github.com/Han-1413141/dsh-autocompose 使用 Desktop 命令行安装: dsh plugin --profile desktop add dsh-autocompose@0.5.0 --save-exact --ignore-scripts Web 用户把 desktop 改为 web。
展开完整文档(README 剩余 1 节)
dsh-autocompose

描述任务,自动找插件、安装组合,打开可以继续对话的 DSH 窗口。

AutoCompose 根据中文或英文任务搜索 npm 上的 DSH 插件,核验包的版本与兼容性,再自动安装。在 DSH Desktop 中,它会直接打开独立的 DSH 客户端,供你继续对话;也可以把插件安装到当前主环境,供后续任务使用。Web 宿主保留网页窗口方式。搜索关键词、候选数量和排除原因会保存在方案中。

它组装的是已有插件,不生成插件代码。生成方案和安装插件都不调用模型;只有执行任务时才调用模型。

安装 · 第一次使用 · 安装到主环境 · 配置与命令行 · 常见问题

安装

当前版本适配 DSH 0.2.0-rc.2,要求 Node.js >=22.19。

在 DSH 插件管理页的安装框中输入:

dsh-autocompose@0.5.0

也可以粘贴仓库地址:

https://github.com/Han-1413141/dsh-autocompose

使用 Desktop 命令行安装:

dsh plugin --profile desktop add dsh-autocompose@0.5.0 --save-exact --ignore-scripts

Web 用户把 desktop 改为 web。按 DSH 提示刷新页面或重启后,打开侧边栏的 “自组装”。插件复用现有 DSH 运行时,安装时不下载另一套 DSH,也无需允许构建脚本。

第一次使用

1. 输入任务和工作目录。 例如“我要进行数学研究”,目录填写任务文件所在文件夹的完整路径。
2. 选择自动操作。 点击“自动组装并打开客户端”,会依次搜索插件、检查兼容性、安装到独立环境,并在新窗口提交任务。点击“自动查找并安装到主环境”,会自动安装到当前 profile;这种方式不执行任务。
3. 继续对话或查看安装结果。 独立窗口使用 DSH 原生聊天界面,第一轮结束后可以继续发消息。主页面保留“重新打开”和“关闭环境”入口。客户端的关闭按钮会隐藏窗口,“重新打开”唤回同一个实例,原会话继续保留。
4. 需要先看方案时,选择“仅生成方案”。 该操作不安装插件;可查看候选、排除原因与权限声明,再决定如何使用。

自动安装按钮会直接安装匹配的第三方插件,已有其他版本时会替换为方案选定的版本。缺项、已知兼容冲突或构建许可问题会停止后续操作,并显示原因。第三方功能依据发布者的说明识别,不能仅凭搜索结果保证运行效果。

| | 独立窗口 | 后台执行一次 | 安装到主环境 |
| 适合什么情况 | 围绕任务持续对话 | 一次性自动执行 | 长期使用插件 |
| 插件安装在哪里 | 独立 DSH_HOME 的 desktop profile(Web 宿主为 web) | 独立 DSH_HOME 的 sdk profile | 当前打开 AutoCompose 的 profile |
| 是否执行输入的任务 | 是,完成后可继续对话 | 是,完成后结束 | 否,仅安装并启用 |
| 何时结束 | 点击“关闭环境”或退出主 DSH | 任务完成、取消或超时 | 插件持续保留 |
| 文件与会话 | 默认保留,可取消勾选 | 根据保留选项处理 | 持续保留 |

代码、Git、联网检索和终端由官方基础环境提供。数学、学术研究、LaTeX、数据分析、电子表格、写作、演示文稿、PDF、浏览器、视觉和记忆会按需查找插件。无法识别的任务仍会用原文搜索;没有匹配结果时显示缺项,不把它当成“基础环境已经足够”。

安装到主环境

这里的“主环境”指 当前运行 AutoCompose 的 DSH profile:在 Desktop 中通常是 desktop,在 Web 中通常是 web。确认弹窗会显示实际 profile 名称和完整目录。

直接安装

希望自动完成搜索和安装时,直接使用任务输入区的 “自动查找并安装到主环境”。下面的步骤适用于先查看方案再安装。

1. 生成或打开一个可用方案,点击 “安装到主环境”。
2. 检查弹窗中的目标目录、插件名称、版本变化和权限声明。每个插件会标明“新增”“替换版本”“启用”或“已就绪,直接复用”。
3. 点击 “确认安装并启用”。如果与主环境中已有插件存在已知冲突,确认按钮会禁用,并显示原因。
4. 查看结果和 “安装记录”。DSH 要求重启时,页面会明确提示;重启后再使用这些插件。

主环境安装确认弹窗

图中插件来自临时测试环境,用于演示安装预览。

安装使用 DSH 官方插件管理接口,固定到方案中的精确版本。开始变更前,会保存主环境的包清单、锁文件和相关配置;安装后再次检查包的版本、声明与兼容性,再按依赖顺序启用。已有同版本且已启用的插件直接复用;已有其他版本会明确显示版本替换。官方核心组件、AutoCompose 和 Compat Guardian 不作为方案中的替换目标。

安装期间可以切换页面。“停止安装”会请求取消当前下载,并停止后续操作;已经完成的安装和启用会保留。失败时记录会逐项显示处理状态,便于重试或在 DSH 插件管理中清理。多插件安装不是一次整体事务,配置备份也不是整个插件目录的快照。

主环境中的插件使用宿主权限。临时任务的“只读”设置不限制主环境插件;插件声明的权限用于展示和检查,不是对第三方代码的操作系统级隔离。

先试用,再保留

先选择“打开独立客户端”或“后台执行一次”,确认组合适合任务后,回到原方案选择“安装到主环境”。后台执行的方案也可以在 “运行记录” 中通过 “查看方案与安装选项” 打开。安装前会重新检查当前环境。

这一步按方案重新安装插件包,不复制临时环境中的凭据、会话、模型配置或插件运行数据。需要配置的插件仍在主环境中按其说明配置。

独立窗口与临时运行

“自动组装并打开客户端” 直接启动本机已安装的官方 DSH Desktop。每个环境有独立的插件目录、会话、客户端数据目录和本机端口,可与主客户端同时运行。它使用完整的 DSH 原生界面,组装过程不会打开浏览器,也不需要再次下载客户端。

新客户端默认只读任务目录,可在启动前改为“允许修改”。初始任务自动提交;在侧边栏“未分组”中打开与任务同名的会话,即可继续发消息。独立环境没有复制主客户端的登录状态;若出现欢迎页,配置 API Key 或选择稍后设置,再进入会话。凭据配置见下文。
关闭客户端右上角的窗口按钮会隐藏窗口;主页面的 “重新打开” 会唤回同一个客户端与会话。点击 “关闭环境” 才结束该环境的进程,并按保留选项处理文件。在独立客户端菜单中选择退出也会结束该环境。最多同时打开三个环境;退出主 DSH 时停止其独立环境并保留文件。已停止的环境需从原方案重新创建,保留的会话文件仍在记录显示的目录中。

在 Web 宿主中,按钮显示 “自动组装并打开网页窗口”;浏览器拦截弹窗时可用页面上的直接链接。若要从 Web 宿主打开本机客户端,在插件配置中设置 desktopExecutable 和 windowMode: desktop。客户端启动失败会直接显示错误,不会改用浏览器。

需要一次性执行时,选择 “后台执行一次”,核对目录和插件后确认。此方式使用 SDK,不弹出聊天窗口。

后台任务在切换页面后继续运行。页面展示准备、安装、检查、执行和清理进度,支持取消;结束后保存回复,并根据保留选项处理临时目录。

默认模型为 deepseek-official / deepseek-v4-flash。子进程保留必要的系统与代理环境变量,默认额外转发 DEEPSEEK_API_KEY。Desktop 的登录状态不会自动复制为临时环境凭据。使用其他模型或 provider 时,先阅读模型与凭据配置。规划和主环境安装无需模型凭据。

预设与对话操作

保存为预设会保存任务目录和插件的精确版本。复用预设时会重新检查兼容性,不自动安装,也不自动追踪 latest。

你也可以在 DSH 对话中提出:

调用 autocompose 的 assemble,为数学研究自动查找兼容插件并安装到当前环境。

或者:

调用 autocompose 的 assemble,destination 设为 window,为数学研究组装一个可持续对话的独立环境,直接打开 DSH 客户端。

assemble 将搜索、规划和安装接成一次工具操作,实际安装仍遵守 DSH 的批准流程。需要分步审阅时使用 plan → install_preview → install;后台执行使用 run。工具参数与 CLI 用法见配置与命令行。

常见问题

为什么没有找到所需插件?

查看方案中的“搜索记录”与“选择依据”。自动发现查询 npm 的 dsh-plugin 和 deepseek-harness 两类标签,并逐个核验精确版本。只有 GitHub 仓库、未发布到 npm 的项目暂不支持自动安装。包缺少 bundle 声明、说明不匹配或版本不兼容时会排除;网络错误也会显示。可补充具体任务或英文关键词,或在固定候选目录中指定包名、版本和能力。

为什么旧版运行后没有窗口,也没有找到数学插件?

0.3.0 的临时运行只有后台 SDK 模式,且任务识别不包含数学研究。升级到 0.5.0 后重新生成方案,再使用“自动组装并打开客户端”。旧方案不会自动补入新插件。

为什么 0.4.0 打开的是浏览器?

0.4.0 使用网页弹窗,DSH Desktop 会把弹窗交给系统浏览器。0.5.0 改为启动官方客户端实例;升级插件并按 DSH 提示重启后,主按钮应显示“自动组装并打开客户端”。旧的网页环境需关闭后重新创建。

临时运行成功后,为什么主环境里没有这些插件?

临时运行使用独立环境,插件没有安装到主 profile。需要主环境也能使用时,打开该方案,选择“安装到主环境”。

为什么提示安装预览失效?

预览生成后,插件列表或配置发生了变化,或者 DSH 已重启、该预览已使用。重新点击“安装到主环境”即可获取新的检查结果。插件发布内容变化时,需要重新生成整个方案。

安装只完成了一部分,怎么办?

打开“安装记录”查看每个插件的状态和错误。处理冲突、网络或构建授权问题后重新预览:已安装并启用的同版本插件会复用;不需要保留的插件可在 DSH 插件管理中停用或卸载。AutoCompose 不自动删除已经成功安装的插件。

安装 AutoCompose 时出现 Git 构建被拦截或 NPM_TOKEN 提示?

ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 通常来自固定到 0.2.0 的旧 Git 提交。改用本页的 npm 包名或当前仓库地址;从 0.2.1 起仓库包含编译产物,安装不需要构建许可。Failed to replace env in config: ${NPM_TOKEN} 是 npm 配置变量提示;安装公开的 AutoCompose 包不需要 npm Token。

开发与验证

本仓库可独立构建,无需检出配套插件:

npm ci --ignore-scripts
npm run typecheck
npm test
npm run build
npm run test:host
npm run test:main-install
npm run test:window
本机已安装 DSH Desktop 时,再运行客户端集成检查: $env:AUTOCOMPOSE_DESKTOP_EXE = "C:/实际安装目录/DeepSeek Harness.exe"
npm run test:desktop
npm run preview

发布前运行 npm run pack:release。源码修改需同时提交重新生成的 lib/;CI 核对产物与源码,并在禁止构建脚本的全新 profile 中验证 Git 安装。主环境安装测试使用临时 profile 和无业务逻辑的测试插件,不修改日常 DSH 环境。

配置与命令行 · 故障覆盖表 · 验证记录 · 版本记录 · 问题反馈

配套插件:dsh-compat-guardian,用于检查和处理已安装插件的兼容性问题。两者可分别安装。
预览分享卡片长什么样 ↓Han-1413141/dsh-autocompose
分享 · DeepSeek Harness Hub
Han-1413141/dsh-autocompose

描述任务,自动找插件、安装组合,打开可以继续对话的 DSH 窗口。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部