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

Codex 编排桥 Fly2Kiana/Codex-DSH-Orchestrator

MCP
Fly2Kiana6 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

Codex-DSH-Orchestrator 让 Codex 把有明确范围的任务交给 DeepSeek…

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

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

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/Fly2Kiana/Codex-DSH-Orchestrator.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
该类项目属生态应用(桌面端 / Web 外壳),不以 dsh plugin add 方式安装,请按仓库说明部署
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/30) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✗npm 包dsh-agentlink(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/7 14:41:05

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 54 处,展示前 51 条)
  • 读取本地文件
    src/bridge-service.ts:746
    const canonical = await realpath(requestedCwd).catch((error: unknown) => {
  • 读取本地文件
    src/bridge-service.ts:749
    const cwdStat = await stat(canonical);
  • 读取本地文件
    src/bridge-service.ts:785
    const canonical = await realpath(resolve(advertised)).catch(() => undefined);
  • 读取本地文件
    src/bridge-service.ts:790
    const cwdStat = await stat(canonical).catch(() => undefined);
  • 读取本地文件
    src/bridge-service.ts:873
    const expectedCwd = await realpath(resolve(input.expectedCwd)).catch((error: unknown) => {
  • 读取本地文件
    src/bridge-service.ts:876
    const cwd = await realpath(resolve(session.cwd)).catch((error: unknown) => {
  • 读取本地文件
    src/codex-skill-install.ts:44
    const details = await lstat(path);
  • 读取本地文件
    src/codex-skill-install.ts:52
    const details = await lstat(current).catch((error: NodeJS.ErrnoException) => {
  • 读取本地文件
    src/codex-skill-install.ts:73
    const details = await lstat(targetPath).catch((error: NodeJS.ErrnoException) => {
  • 读取本地文件
    src/codex-skill-install.ts:92
    readFile(sourcePath, "utf8"),
  • 写入本地文件
    src/event-ledger.ts:851
    await appendFile(this.logPath(taskId), `${JSON.stringify(record)}\n`, { encoding: "utf8", mode: 0o600 });
  • 写入本地文件
    src/event-ledger.ts:852
    await chmod(this.logPath(taskId), 0o600);
  • 读取本地文件
    src/event-ledger.ts:1039
    raw = await readFile(this.logPath(taskId), "utf8");
  • 写入本地文件
    src/event-ledger.ts:1098
    await mkdir(this.ledgersDir, { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/event-ledger.ts:1099
    await chmod(this.ledgersDir, 0o700);
  • 写入本地文件
    src/event-ledger.ts:1100
    await mkdir(join(this.ledgersDir, taskId), { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/event-ledger.ts:1101
    await chmod(join(this.ledgersDir, taskId), 0o700);
  • 发起网络请求
    src/gateway-connection.ts:231
    const response = await this.#fetch(new URL(`/api/${endpoint}`, peer.origin), {
  • 发起网络请求
    src/gateway-connection.ts:332
    const response = await this.#fetch(url, {
  • 读取本地文件
    src/lock-doctor.ts:59
    const stats = await lstat(path);
  • 读取本地文件
    src/lock-doctor.ts:74
    directory = await opendir(path);
  • 读取本地文件
    src/lock-doctor.ts:157
    directory = await opendir(ledgersPath);
  • 读取本地文件
    src/setup-claude-code.ts:227
    return readFile(canonicalClaudeCodeSkillSourcePath(), "utf8");
  • 读取本地文件
    src/setup-claude-code.ts:239
    details = await lstat(parent);
  • 读取本地文件
    src/setup-claude-code.ts:367
    canonical = await realpath(candidate);
  • 读取本地文件
    src/setup-claude-code.ts:371
    if (!(await stat(canonical)).isDirectory()) {
  • 读取本地文件
    src/setup-claude-code.ts:485
    const entryPath = await realpath(fileURLToPath(new URL("./index.js", import.meta.url)));
  • 读取本地文件
    src/setup-codex.ts:297
    const entryPath = await realpath(fileURLToPath(new URL("./index.js", import.meta.url)));
  • 读取本地文件
    src/setup-engine.ts:94
    const details = await lstat(path).catch((error: NodeJS.ErrnoException) => {
  • 删除本地文件
    src/setup-engine.ts:133
    await unlink(backupPath).catch(() => undefined);
  • 写入本地文件
    src/setup-engine.ts:161
    await mkdir(dirname(options.path), { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/setup-engine.ts:180
    await rename(temporary.path, options.path);
  • 删除本地文件
    src/setup-engine.ts:201
    await unlink(temporary.path).catch(() => undefined);
  • 执行外部命令来自配置/变量
    src/startup-authorization.ts:43
    const child = spawn(caller.executable, caller.args ?? [], {
  • 删除本地文件
    src/task-store.ts:117
    await unlink(this.pathFor(resolution.task.taskId));
  • 写入本地文件
    src/task-store.ts:151
    await writeFile(temp, `${JSON.stringify(record, null, 2)}\n`, { encoding: "utf8", mode: 0o600, flag: "wx" });
  • 删除本地文件
    src/task-store.ts:153
    await unlink(temp).catch(() => undefined);
  • 删除本地文件
    src/task-store.ts:156
    await unlink(temp).catch(() => undefined);
  • 读取本地文件
    src/task-store.ts:166
    raw = await readFile(this.pathFor(taskId), "utf8");
  • 读取本地文件
    src/task-store.ts:181
    names = await readdir(this.tasksDir);
  • 读取本地文件
    src/task-store.ts:191
    taskIds.map(async (taskId) => parseRecord(await readFile(this.pathFor(taskId), "utf8"), taskId)),
  • 写入本地文件
    src/task-store.ts:196
    await mkdir(this.tasksDir, { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/task-store.ts:197
    await chmod(this.tasksDir, 0o700);
  • 写入本地文件
    src/workspace-claim.ts:154
    await writeFile(this.pathFor(claim.taskId), `${JSON.stringify(claim, null, 2)}\n`, {
  • 写入本地文件
    src/workspace-claim.ts:159
    await chmod(this.pathFor(claim.taskId), 0o600);
  • 删除本地文件
    src/workspace-claim.ts:171
    await unlink(this.pathFor(taskId));
  • 写入本地文件
    src/workspace-claim.ts:189
    await mkdir(this.claimsDir, { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/workspace-claim.ts:190
    await chmod(this.claimsDir, 0o700);
  • 读取本地文件
    src/workspace-claim.ts:197
    names = await readdir(this.claimsDir);
  • 读取本地文件
    src/workspace-claim.ts:207
    taskIds.map(async (taskId) => parseClaim(await readFile(this.pathFor(taskId), "utf8"), taskId, this.pathFor(taskId))),
  • 读取本地文件
    src/workspace-claim.ts:213
    return parseClaim(await readFile(this.pathFor(taskId), "utf8"), taskId, this.pathFor(taskId));
扫描于 2026/11/4(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 转交实现与调研任务
  • 管控DSH会话
  • MCP桥接调用

以 Codex 为先的编排层,兼调用侧 MCP 桥接,用于与 DeepSeek Harness(DSH)做有边界的协作。

README

由 DeepSeek 最新模型翻译生成
Codex-DSH-Orchestrator Codex-DSH-Orchestrator 让 Codex 把有明确范围的任务交给 DeepSeek Harness(DSH),观察进度、继续同一会话并审阅结果。Codex 负责规划与最终验收,DSH 承担实现、代码搜索、重构和测试。 项目边界 connect-only MCP 注册名为 dsh_agentlink,连接由用户管理的 DSH Host。Desktop 启动、登录、权限和模型凭据由用户负责,审批需要人工确认。它不是 DSH Cordis bundle,请勿使用 dsh plugin --profile ... add ... 安装。 本项目独立维护,派生自 dsh-Agentlink,保留上游 MIT 许可及 NOTICE 署名。DeepSeek、OpenAI 和上游维护者不参与本项目维护。 快速上手 准备 Node.js 22+、npm、Git、Codex 和对应平台的官方 DeepSeek Harness Desktop。仓库放在固定工具目录,因为 setup 会记录绝对路径。
展开完整文档(README 剩余 1 节)
Codex-DSH-Orchestrator

Codex-DSH-Orchestrator 让 Codex 把有明确范围的任务交给 DeepSeek Harness(DSH),观察进度、继续同一会话并审阅结果。Codex 负责规划与最终验收,DSH 承担实现、代码搜索、重构和测试。

项目边界

connect-only MCP 注册名为 dsh_agentlink,连接由用户管理的 DSH Host。Desktop 启动、登录、权限和模型凭据由用户负责,审批需要人工确认。它不是 DSH Cordis bundle,请勿使用 dsh plugin --profile ... add ... 安装。

本项目独立维护,派生自 dsh-Agentlink,保留上游 MIT 许可及 NOTICE 署名。DeepSeek、OpenAI 和上游维护者不参与本项目维护。

快速上手

准备 Node.js 22+、npm、Git、Codex 和对应平台的官方 DeepSeek Harness Desktop。仓库放在固定工具目录,因为 setup 会记录绝对路径。

| Host 路径 | setup 选项 |
| Windows 或 macOS 官方 Desktop | --gateway --desktop-auto --no-preset |
| 已知 origin 的官方 Gateway | --gateway --host <origin> --no-preset |
| 旧 rc.6 Web Host 或 Windows 社区 Desktop | 参见旧版配置 |

本源码快照版本为 0.1.0-alpha.6,包含 Windows 和 macOS 官方 Desktop 支持。Windows 与 Apple Silicon Mac 均已完成继承当前模型的只读任务及同会话 follow-up。源码通过了 Ubuntu、Windows、macOS 与 Node 22/24/26 的全部九项 CI,以及公开 CodeQL 和维护者作者检查。验证记录列出实测版本和仍待验证的能力;已发布标签及版本包以 Releases 记录为准。

推荐:复制给 Agent 的安装 Prompt

从 https://github.com/Fly2Kiana/Codex-DSH-Orchestrator 安装到我批准的固定工具目录。
核对 Node.js 22+、npm、Git 和选定的源码版本,执行 npm ci、npm run check。
官方 Desktop 先预览:
npm run setup -- --yes --gateway --desktop-auto --no-preset --dry-run

报告 MCP、Skill 目标及冲突。跨项目使用时选择一个用户级 Skill 位置;只在仓库使用时保留 .agents/skills/codex-dsh-orchestrator。
已装在旧全局位置的 Skill 原地更新。使用 --replace 或 --replace-skill 前先问我。
只安装审阅后的目标,保留备份;部分成功时报告实际状态。

准备阶段保持我的应用和任务运行。授权交接前,说明哪些应用将启动或重启,等我批准空窗。
启动授权只经私有进程管道传递,不打印、不保存,也不要向我索要 provider API key。

我重启后,核对 MCP 和 Skill 加载,再做仅连接验收。
模型调用另行审批。分别报告安装、连接和真实任务结果。

手动配置与验收

每台电脑使用独立 clone:

git clone https://github.com/Fly2Kiana/Codex-DSH-Orchestrator.git
cd Codex-DSH-Orchestrator
npm ci
npm run check

Windows 和 macOS 官方 Desktop 使用同一组参数,先预览:

npm run setup -- --yes --gateway --desktop-auto --no-preset --dry-run

默认 Skill 位置是当前 checkout 的 .agents/skills/codex-dsh-orchestrator/。如需在任何项目中调用,在预览和安装命令中都加上 --skill-path "$HOME/.agents/skills/codex-dsh-orchestrator"。已有的 ~/.codex/skills 安装可以继续使用原位置,显式指定该位置更新,避免出现同名双份 Skill。目录规则参见 Codex Skill 官方文档。

确认目标后,去掉 --dry-run 正式安装:

npm run setup -- --yes --gateway --desktop-auto --no-preset

setup 注册 bridge,为审批保留 approval_mode = "prompt",并复制 SKILL.md 和 agents/openai.yaml。MCP 与 Skill 内容冲突分别需要 --replace、--replace-skill;先检查冲突再替换。--no-skill 跳过 Skill 安装。替换成功时会产生备份;若只完成其中一部分,先核对状态再重试。

官方 Gateway 通过私有内存管道把 Desktop 启动授权交给新启动的 Codex。这一步会启动 Desktop 和 Codex,执行前需要先正常退出两个应用。请先结束当前工作,再按 Win/Mac 启动步骤操作。使用期间保持该终端运行。

受控启动后,通过 /mcp 或设置确认 dsh_agentlink,用 /skills 或 $codex-dsh-orchestrator 确认 Skill。随后仅调用 dsh_host_status 检查连接,不创建任务、不调用模型。该调用会按需交换授权、建立 Gateway API Peer;doctor 则有意将这一步报告为 not_probed。

换机与回滚

换电脑请重新 clone。单个 linked worktree 的 .git 指向原始 clone,不能直接当作独立安装复制。

将 DSH_BRIDGE_HOME 放在可靠的本地磁盘。遵守同一协作锁协议的兼容进程可以共用;独立管理或不兼容的 build 使用不同 home。新 home 的 mapping、cursor 和 claim 从头开始,DSH 对话历史仍由 Host 保留。

升级时保留旧 checkout、配置和已安装 Skill 的备份。回滚前先检查后续配置改动,只恢复目标 MCP 与 Skill,再在约定空窗重启调用方。锁恢复及 Windows 文件权限限制见已知问题。

给 AI Agents

读取聚焦的安装、验证文档和所需的非敏感配置,保留无关 MCP、Skill。准备工作不包含替换安装、关闭应用或调用模型的授权。

报告源码版本、构建结果、MCP/Skill 安装位置、调用方重载和连接结果。公开报告不包含凭据、真实会话标识及个人路径。应用空窗、DSH 审批和发布由用户批准。

使用方式

在已加载 bridge 和 Skill 的项目中说:

请委派给 DSH 完成这个有明确范围的任务,按当前项目状态交接,并由 Codex 审阅结果。

可用 $codex-dsh-orchestrator 显式调用,也可使用自然语言委派。Skill 根据进度、Git 状态、重点文件、测试和限制组织 compact handoff,让 DSH 先读重点文件。Bridge 不会自动取得此前的调用方对话。

同一已知任务使用 dsh_followup。跨 Codex 对话接续时,先由仅元数据 dsh_find_sessions 找到精确 canonical 工作区内唯一 mapped、idle root,再以新鲜 title/cwd/update 前置条件执行 dsh_attach_session。标题或措辞相似不足以决定复用。保留上下文能减少重复读取,也可能增加输入 token;Host 没有文档化用量遥测时,provider cache 证据保持 not_exposed。

模型路由

委派和 follow-up 共用显式启用、保留兼容的模型路由。

| 请求 | 行为 |
| 省略路由或使用 inherit | 验证当前会话路由,不写入模型选择 |
| flash / pro | 在当前账号/API Key provider 内选择目录实际提供的官方模型 |
| reasoningEffort | 要求目录明确支持该等级 |
| 低复杂度视觉任务 | visualIntent="required"、complexity="low",有可信图片能力证据时才选择官方 Flash Vision |
| 高复杂度视觉任务 | 由用户在 official-flash-vision 与 modlens-pro 中选择 |

Flash 兼容 deepseek-flash 与旧 deepseek-v4-flash;Pro 使用 deepseek-v4-pro。Pro 不可用时拒绝继续,账号与 API Key provider 保持分离。选择后 bridge 会重读目录验证。选择保存为全局默认值时,委派和 follow-up 返回 modelRouting.persistsAsDshDefault=true;即使验证失败、尚未发出 prompt,这个副作用也可能已经发生。

官方 rc.3 会话目录省略图片模态信息,因此仅凭 Vision 名称不能启用原生视觉。ModLens Flash 只在获批视觉路由耗尽符合条件的有界重试后尝试一次;无效输入、模型缺失、权限和配置错误不触发备用切换。prompt 写入不自动重试。省略视觉策略字段时,显式旧式 modlens-flash 仍保留兼容。

自动测试已覆盖路由策略;当前原生视觉、ModLens 及备用 provider 执行仍待真实验证。具体能力限制和旧 Code Mode 交接见 Gateway 说明。

MCP 工具

| 工具 | 用途 |
| dsh_host_status | 连接状态和能力 |
| dsh_find_sessions | 有界 root 会话元数据发现 |
| dsh_attach_session | 以新鲜前置条件接管精确空闲 root |
| dsh_delegate | 创建 root 并排入初始 prompt |
| dsh_followup / dsh_continue | 在同一 root 排队或 steer |
| dsh_status | 执行、待交互项、最终回复与 claim |
| dsh_tail | 有界事件摘要和后续 cursor |
| dsh_wait / dsh_observe | 单次最多 30 秒的有界观察 |
| dsh_cancel | 取消当前 turn 或已观察到的队列项 |
| dsh_list | 映射任务列表 |
| dsh_answer_question | 回答类型化待答问题 |
| dsh_resolve_approval | 经人工批准的 allow_once 或拒绝 |
| dsh_release_workspace | 释放协作 claim,保留 DSH 会话 |

操作前保留最新 cursor/revision。单次等待结束后继续观察,直到真实终态或需要人工处理。Workspace claim 协调 bridge 用户,不执行 DSH 文件系统权限限制。

调用方支持

Codex 使用上述 canonical Skill 与 setup。Claude Code 保留项目级安装器:

npm run setup:claude -- --yes --project /absolute/path/to/project

该安装器配置 legacy 集成,新官方 Gateway 尚无近期 Claude Code 真实验收。ZCode、OpenCode、Workbuddy 和 Claude Desktop 暂缓,见延期路线图。

项目组成

- src/:共享 MCP runtime 与 setup。
- skill/codex-dsh-orchestrator/:canonical Codex Skill,修改此源文件而非安装副本。
- skill/codex-dsh/、skill/claude-code-dsh/:兼容 Skill。
- test/:模拟 Host、协议、持久化与安装回归。
- 项目总览、架构、验证、手动配置、发布清单、贡献及安全。

相关项目

| 项目 | 关系 |
| DeepSeek Harness / 源码 | 官方 Desktop 与 Host runtime |
| DSH Desktop | 社区客户端,保留 Windows legacy 自动发现 |
| ModLens | 可选视觉插件。本项目不维护 ModLens,也不与其存在隶属关系 |
| Model Context Protocol | 调用方与 bridge 之间的协议 |
| dsh-Agentlink | 上游 MIT 源码与兼容沿革 |

许可证

MIT。升级共享 bridge home 前请阅读已知问题。
预览分享卡片长什么样 ↓Fly2Kiana/Codex-DSH-Orchestrator
分享 · DeepSeek Harness Hub
Fly2Kiana/Codex-DSH-Orchestrator

Codex-DSH-Orchestrator 让 Codex 把有明确范围的任务交给 DeepSeek…

这是你的仓库?认领条目

回到顶部