在 DOT 聊天里派任务给 Harness 并核对结果
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xuanmingguo/dot-deepseek-harness-mcp该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 60 处,展示前 56 条)
- 删除本地文件src/authority/authority-registry-facade.ts:198
await unlink(ownerPath) - 写入本地文件src/authority/registry-guard.ts:23
await mkdir(dirname(path), { recursive: true }) - 删除本地文件src/authority/registry-guard.ts:40
await unlink(temporary) - 删除本地文件src/authority/registry-guard.ts:44
try { await unlink(temporary) } catch (cleanupError) { if (!isCode(cleanupError, 'ENOENT')) throw cleanupError } - 删除本地文件src/authority/registry-guard.ts:94
await unlink(path) - 执行外部命令来自配置/变量src/browser-opener.ts:14
const child = spawn(executable, [url.href], { stdio: 'ignore', windowsHide: true }) - 读取本地文件src/config.ts:82
: readFileSync(env.DSH_RELAY_EXTERNAL_PATHS_FILE, 'utf8') - 读取本地文件src/external-paths.ts:68
try { info = await stat(target) } - 读取本地文件src/external-paths.ts:91
const path = await realpath(current) - 读取本地文件src/external-paths.ts:92
const info = await stat(path) - 读取本地文件src/external-paths.ts:103
if ((await lstat(current)).isSymbolicLink()) { - 读取本地文件src/external-paths.ts:105
current = resolve(dirname(current), await readlink(current)) - 删除本地文件src/harness-entry.ts:352
if (input.removeEndpoint) await attempt(() => unlink(input.endpointDescriptorFile).catch(ignoreMissing)) - 发起网络请求src/harness-entry.ts:361
const response = await fetch(url, { - 读取本地文件src/harness-entry.ts:443
const value = JSON.parse(readFileSync(join(directory, 'package.json'), 'utf8')) as { name?: string; version?: string } - 发起网络请求src/harness-gateway/in-process-dispatch-handler.ts:27
if (scope === undefined) return this.delegate.fetch(input, init) - 发起网络请求src/harness-gateway/in-process-dispatch-handler.ts:39
return this.delegate.fetch(input, init) - 写入本地文件src/mcp-http/token-store-facade.ts:18
await mkdir(dirname(source.tokenFile), { recursive: true }) - 删除本地文件src/mcp-http/token-store-facade.ts:34
await unlink(temporary) - 删除本地文件src/mcp-http/token-store-facade.ts:38
try { await unlink(temporary) } catch (cleanupError) { - 读取本地文件src/native-control/native-control-facade.ts:236
if (await realpath('/proc/self/fd/' + directory.fd) !== root) fail('ARTIFACT_PATH_DENIED', 'Artifact root changed during resolution') - 读取本地文件src/native-control/native-control-facade.ts:243
const openedPath = await realpath('/proc/self/fd/' + file.fd) - 读取本地文件src/native-control/native-control-facade.ts:257
if (before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs || await realpath('/proc/self/fd/' + file.fd) ! - 读取本地文件src/native-control/native-control-facade.ts:280
const path = await realpath(registered.path) - 读取本地文件src/native-control/native-control-facade.ts:281
if (!(await stat(path)).isDirectory()) fail('WORKSPACE_DENIED', 'Registered workspace must be a project directory') - 读取本地文件src/native-control/native-control-facade.ts:283
const roots = await Promise.all(this.options.allowedWorkspaceRoots.map(root => realpath(root))) - 读取本地文件src/native-control/project-files.ts:54
if (await realpath('/proc/self/fd/' + handle.fd) !== expected) changed() - 读取本地文件src/native-control/project-files.ts:61
const stream = await opendir('/proc/self/fd/' + directory!.fd, { encoding: 'buffer' as BufferEncoding, bufferSize: 1 }) - 读取本地文件src/native-control/project-files.ts:82
if (await realpath('/proc/self/fd/' + pinned.handle.fd) !== pinned.path || identity(await pinned.handle.stat({ bigint: true })) !== pinned.identity) c - 读取本地文件src/native-control/project-search.ts:78
if (await realpath('/proc/self/fd/' + handle.fd) !== expected) changed() - 读取本地文件src/native-control/project-search.ts:160
const stream = await opendir('/proc/self/fd/' + directory.handle.fd, { encoding: 'buffer' as BufferEncoding, bufferSize: 1 }) - 读取本地文件src/native-control/project-search.ts:242
if (await realpath('/proc/self/fd/' + pinned.handle.fd) !== pinned.path || identity(await pinned.handle.stat({ bigint: true })) !== pinned.identity) c - 读取本地文件src/native-control/project-text.ts:58
if (await realpath('/proc/self/fd/' + handle.fd) !== expected) changed() - 读取本地文件src/native-control/project-text.ts:142
if (await realpath('/proc/self/fd/' + pinned.handle.fd) !== pinned.path || identity(await pinned.handle.stat({ bigint: true })) !== pinned.identity) c - 写入本地文件src/relay-runtime/path-resolver.ts:171
await mkdir(directory, { recursive: true }) - 读取本地文件src/relay-runtime/path-resolver.ts:172
await access(directory, constants.W_OK) - 写入本地文件src/state-repository/atomic-json-file.ts:15
await mkdir(directory, { recursive: true }) - 写入本地文件src/state-repository/atomic-json-file.ts:27
await rename(temporary, path) - 删除本地文件src/state-repository/atomic-json-file.ts:31
await unlink(temporary) - 写入本地文件src/state-repository/file-lock-facade.ts:71
await mkdir(dirname(lockPath), { recursive: true }) - 删除本地文件src/state-repository/file-lock-facade.ts:95
await unlink(temporary) - 删除本地文件src/state-repository/file-lock-facade.ts:99
try { await unlink(temporary) } catch (cleanupError) { if (!isCode(cleanupError, 'ENOENT')) throw cleanupError } - 写入本地文件src/state-repository/file-lock-facade.ts:185
await rename(lockPath, tombstone) - 删除本地文件src/state-repository/file-lock-facade.ts:200
await unlink(tombstone) - 删除本地文件src/state-repository/file-lock-facade.ts:210
await unlink(tombstone) - 删除本地文件src/state-repository/file-lock-facade.ts:244
await unlink(tombstone) - 写入本地文件src/state-repository/file-permissions.ts:97
await chmod(path, 0o600) - 读取本地文件src/state-repository/file-permissions.ts:123
const mode = (await stat(path)).mode & 0o777 - 执行外部命令来自配置/变量src/state-repository/file-permissions.ts:170
const child = spawn(command, args, { - 读取本地文件src/state-store.ts:186
entries = await readdir(directory, { withFileTypes: true }) - 写入本地文件src/state-store.ts:206
await rename(this.path, quarantined) - 读取本地文件src/stdio-proxy/host-autostart-facade.ts:50
this.accessPath = dependencies.accessPath ?? (path => access(path, constants.F_OK)) - 执行外部命令来自配置/变量src/stdio-proxy/host-autostart-facade.ts:179
const child = spawn(launcher.command, launcher.args, backgroundSpawnOptions(launcher)) - 读取本地文件src/strict-utf8.ts:40
bytes = await readFile(path) - 读取本地文件src/workspace-routing/workspace-routing-facade.ts:68
const resolved = await realpath(input) - 读取本地文件src/workspace-routing/workspace-routing-facade.ts:69
if (!(await stat(resolved)).isDirectory()) throw new Error('workspace must be a directory')
扫描于 2026/11/3(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent-presets@deepseek-ai/dsh-api-gateway@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-api-settings-controller@deepseek-ai/dsh-api-workspace-controller@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-permission-presets@deepseek-ai/dsh-session@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
在 DOT 主聊天中操控已有 DeepSeek Harness:派任务、查历史、搜文件、核对结果。MCP bridge for existing Harness.
README
由 DeepSeek 最新模型翻译生成DOT × DeepSeek Harness
中文首页 · 简体中文 · English · 安装指南 · 工具说明
· MIT 许可证
让 DOT 主聊天直接操控已有的 DeepSeek Harness:派任务、查进度、找历史、搜文件,并核对真实结果。复用现有项目、模型与会话,不另起 Harness Host,也不创建 Work/Codex 聊天。
DOT 通过私有 MCP Tunnel 连接已有 Harness 的功能总览
可以用它做什么
| 你想做的事 | 它提供的能力 |
| 把任务交给 Harness | 提交任务、查看进度、续接会话、排队、引导和取消,保留原始任务与操作编号 |
| 找回以前做过的工作 | 按项目、会话、状态筛选任务;关键词检索原始历史,展开命中消息及前文 |
| 在项目中找到文件和代码 | 浏览目录、搜索文件内容,返回真实路径、匹配行和片段,再按行或末尾读取 |
| 核对结果与处理断线 | 用文件 SHA-256 校验内容;查询原请求和原生历史,避免不确定时重复派发 |
可以直接在 DOT 中描述目标,例如:
“找一下这个项目之前做过的分页修复,把原来的结果给我。”
“搜索项目里包含这个关键词的文件,告诉我文件名和具体行号。”
“把这项修改交给 Harness,完成后读回结果并核对文件。
展开完整文档(README 剩余 1 节)
DOT × DeepSeek Harness 中文首页 · 简体中文 · English · 安装指南 · 工具说明 · MIT 许可证 让 DOT 主聊天直接操控已有的 DeepSeek Harness:派任务、查进度、找历史、搜文件,并核对真实结果。复用现有项目、模型与会话,不另起 Harness Host,也不创建 Work/Codex 聊天。 DOT 通过私有 MCP Tunnel 连接已有 Harness 的功能总览 可以用它做什么 | 你想做的事 | 它提供的能力 | | 把任务交给 Harness | 提交任务、查看进度、续接会话、排队、引导和取消,保留原始任务与操作编号 | | 找回以前做过的工作 | 按项目、会话、状态筛选任务;关键词检索原始历史,展开命中消息及前文 | | 在项目中找到文件和代码 | 浏览目录、搜索文件内容,返回真实路径、匹配行和片段,再按行或末尾读取 | | 核对结果与处理断线 | 用文件 SHA-256 校验内容;查询原请求和原生历史,避免不确定时重复派发 | 可以直接在 DOT 中描述目标,例如: “找一下这个项目之前做过的分页修复,把原来的结果给我。” “搜索项目里包含这个关键词的文件,告诉我文件名和具体行号。” “把这项修改交给 Harness,完成后读回结果并核对文件。” 版本 0.2.18-dsh021a2.14 在兼容 Host 中提供 48 个工具,已适配 Harness 0.2.1-alpha.2。实际工具、模型和权限以运行中的 tools/list 与 get_operational_capabilities 为准。 看一次实际搜索与读回 下面使用通用演示文件,展示本轮原 DOT 的真实只读返回:搜索关键词,定位 notes/task-notes.md 第 3 行,再用本次命中的 SHA-256 校验读回。 实际搜索命中、原行号与 SHA 校验读回的可视化演示 这是真实返回的可视化整理,并非原始聊天截图;仅保留相对搜索目录的文件路径和通用内容。脱敏结果摘录可直接查看。演示文件共 4 行,本次只读回命中行,返回的续读位置是第 4 行。 它如何连接 DOT 主聊天 → OpenAI Secure MCP Tunnel → 本地 stdio proxy → 已有 Harness Host 内的 Relay 插件 → 原生项目、会话与任务 基于固定版本的 Harness Relay MCP,通过 Harness 公共插件 API 接入,不修改上游 Harness。固定来源及版本见 UPSTREAM.json。 使用前需要已有 Harness,以及账号、工作空间与 Platform 组织允许的 DOT / 自定义 MCP / Tunnel 权限。开源代码本身不授予这些产品权限。请参考官方连接说明。 从源码开始 需要 Node.js >=22.19;CI 使用 pnpm 12.11.2: git clone https://github.com/xuanmingguo/dot-deepseek-harness-mcp.git cd dot-deepseek-harness-mcp pnpm install --frozen-lockfile pnpm run prepack pnpm test pnpm run test:package npm pack --ignore-scripts prepack 包含类型检查、构建与包内容校验。最后生成 harness-relay-mcp-0.2.18-dsh021a2.14.tgz,按安装与运维指南接入已有 Harness profile,再配置自己的 Tunnel。 保留上游 npm 包名是为了兼容。本 fork 尚未发布到 npm;直接安装 registry 包或运行 npx harness-relay-mcp 不会选中这里的修改。 文档与验证 | 文档 | 内容 | | 安装与运维 | 构建、已有 profile 接入、Tunnel、工具刷新、诊断与回滚 | | 工具说明 · 完整目录 | 输入、输出、权限与恢复约定 | | 历史搜索 · 消息上下文 | 找到旧任务后核对原始消息 | | 目录发现 · 文本读取 · 内容搜索 | 文件查询、范围、扫描覆盖与校验边界 | | 验证记录与复测方法 | 区分本地测试、已安装插件和原 DOT 实测 | | 同类项目对照 | 功能来源、重合与边界 | 公开版本已通过原生测试、类型/构建/打包与隐私检查;原 DOT 也完成过任务、历史和文件读回验证。具体结果与适用边界见验收文档,持续检查见上方 CI。 权限与隐私 start_run 缺省为只读。示例保持 DSH_RELAY_TRUSTED_OPERATOR=false;文件范围属于任务指令与准入校验,不是 OS 逐路径隔离。需要写入或部署时,按实际授权明确指定范围与权限,详见权限约定和部署契约。 项目不提供模型凭据或订阅。Token、Tunnel 配置、原聊天历史、任务 journal、个人路径、备份和原始回执留在私有环境。发生超时或断线,先查原 runId / operationId,不要换键重派。 许可与贡献 采用 MIT;保留上游 LICENSE 与固定来源,维护归属见 NOTICE。这是独立维护的集成,不代表 OpenAI 或 DeepSeek 官方支持。 欢迎提供可复现的问题与改进,提交前请移除个人信息。见 贡献说明与安全报告。图示提供 PNG 与可编辑 SVG,均使用通用展示内容。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xuanmingguo/dot-deepseek-harness-mcp
在 DOT 聊天里派任务给 Harness 并核对结果
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,330已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,311已汉化DSH
71.4
智能体运行框架路由HarnessRouter/harnessrouter
智能体 harness 的统一接口。
★ 3,984已汉化DSH
71.3
这是你的仓库?认领条目