架构与执行契约

理解任务从产品到所选设备的路径,以及 SDK、连接服务、设备后台和原生 Harness 各自负责什么。

harness-dock 为产品、Agent 和自动化流程提供跨设备原生 Harness 接入与执行管理。这层基础设施分为 client、server、daemon、drivers 和 protocol 五个模块。设备使用具名 dock 集成层调用 ACPX:Codex 经 codex-acp 接入;dsh 实验路径经原生 dsh --profile acp 接入。跨机器通信和设备内部协议分为两个范围。

部署与连接方向#

部署与连接方向应用 SDK 和独立设备 Daemon 主动连接 Server,执行进程和记录由设备持有。执行设备 · macOS arm64WSS设备主动建立 WSS应用 / Client SDK主动连接 · 发请求 · 处理回调Dock Server认证 · 设备授权 · 双向转发Daemon / DeviceHost准入 · 并发 · 进程生命周期Codex 执行链集成层 → ACPX → codex-acp → Codex本地 SQLite / 执行记录
窄屏可横向滚动查看全图。两条 WSS 箭头表示连接建立方向;建立后请求、结果和回调双向传输。Server 可以读取转发内容。设备内调用链见 Codex 与 ACP 分层。

应用与设备都主动连接 Server。两者通过 JSON-RPC / WebSocket 传递设备请求和执行回调;远程使用经过证书校验的 WSS,设备通常不需要开放公网入站端口。模型请求由设备上所选的原生 Harness 按其配置发起,图中以 Codex 为例。

职责与信任#

模块拥有的状态边界
client连接、请求关联、回调有效期不管理 Provider 进程、登录或本机目录
server设备配对、应用授权范围、连接转发不承接业务调度或替设备裁决执行完成
daemon准入、Provider 进程、待批请求、执行记录和托管文件生命周期独立于连接
driversCodex 与实验 dsh 的 dock 集成:环境选择、回调、事件与结果差异复用 Harness 原生工具和权限
protocol公共 JSON 类型、版本、身份和预算不引入调用方业务模型

server 是受信任的转发节点,TLS 不提供针对 server 的端到端内容保密。配对凭据分别用于设备接入和应用访问。远程传输必须校验证书和节点身份,明文仅限回环。

设备协议为 v3,server-client 协议为 v1;版本不匹配明确拒绝。每台设备绑定一个控制方,应用授权声明可访问的节点。

身份与状态#

  • nodeId:稳定的设备身份;daemonId:本次 Daemon 实例身份。
  • runId:调用方生成的单轮执行身份,与原输入绑定并持久去重。
  • sessionKey:dock 托管会话身份,与原生 thread/session ID 分离。
  • 原生续接身份:由已支持后端返回,后续执行显式提交。

执行状态为 running、completed、failed、cancelled 或 unknown。缺少权威完成证据时保持 unknown;取消请求、观察文本或传输成功不能替代终态证据。

一轮执行如何发生#

一轮执行与原生审批时序调用方准备并提交执行,Daemon 在启动原生执行前持久化准入,原生审批回调应用,最终保存并返回原生结果。可选:原生审批应用 / SDK经 Server 转发DeviceHost设备执行管理SQLite本地执行记录Codex 执行链经集成层 / ACPXprepare准备结果execute保存准入建立会话、配置、发起本轮原生审批请求permission用户选择返回精确 optionId原生终态与结果保存结果返回结果
窄屏可横向滚动查看全图。省略 Server 的逐次转发,Codex 执行链按驱动页分层展开。实线为请求,虚线为返回;过程事件可贯穿执行并持久化。结束后由应用 collect 收存输出,再 release 托管资源。
  1. prepare 准备本轮附加 skills 与输出目录,工作目录取自设备本地配置。
  2. execute 校验输入、Provider 能力、设备容量与会话互斥,先持久化 runId 和输入指纹,再启动原生执行。
  3. dock 集成层通过 ACPX 的 ensureSession、配置与 startTurn 接入 Codex。审批和应用工具通过原连接回调;原生工具与模型循环由 Codex 执行。
  4. Daemon 保存原生结果后返回;未取得可靠完成证据或结果无法保存时保留 unknown。应用继续验收业务结果。
  5. 确认结束后调用 collect 验收、收存需要的输出,再 release。释放托管资源不撤销文件修改或外部操作。

输入持久去重用于防止同一轮被重复派发,不承诺任务内部的所有外部操作天然只发生一次。工作目录与附加文件边界见 执行生命周期。

执行与恢复#

调用方先 prepare,再显式 execute。Daemon 负责准入、设备容量与本机会话互斥;相同原生会话不并发续接,不同会话按设备容量隔离。

Provider 进程与待批审批归 Daemon 所有。SDK/server 连接断开不会转移所有权,也不重放请求或决定。依赖应用响应的工具或审批仍可能因失联而失败或被拒绝。迟到审批失效,调用方必须响应 AbortSignal。

原生恢复上下文由 dock 集成层产生和解释,Daemon 只保存不透明内容。reconcile 从原记录选择 Provider 与上下文,只读查询原执行,不重新发现安装、不建立替代会话或发送 prompt。没有证据时仍为 unknown。

原生环境#

Codex 使用设备明确选择的安装、home、配置与登录。dock 状态独立保存,不改写原生认证或配置;调用方 skills 通过受支持的附加根增量接入。

Harness 拥有内部 Agent、模型循环、原生工具、MCP、插件、skills、memory 与权限规则。dock 连接必要宿主并转发原生交互,不能把共享 home、设备配对或新进程视为继承所有系统授权。

应用承担业务授权、数据来源授权、审批界面和最终结果验收。dock 不提供聊天、IDE、插件商店或业务权限系统。设备面板是持有人的轻量接入、状态与维护入口,正常任务、原生审批与业务结果仍在调用方应用中处理。App v0.1.3 提供按 Harness 区分的详情、固定回显与诊断,包含 Codex 支持与 dsh 实验适配。这些 Harness 测试是受保护管理 socket 上的固定诊断:Daemon 按 Harness 与测试 UUID 保存收据,复用相同 DeviceHost/ACPX 执行链,不接受任意 prompt、不增加通用执行入口,也不改变远程应用归属或原生权限所有权。Codex 测试使用原生只读模式;dsh 实验固定回显沿用原生权限配置,不提供只读保证,工具与业务授权仍由应用分别验收。

Codex 集成与 ACP 分层#

本仓库的 Driver 指 packages/drivers 中的 dock 集成层。ACPX 是它调用的 ACP 客户端运行库,codex-acp 是下层的 ACP Agent 端协议适配器;原生 Codex 持有模型循环、工具与权限。

Codex 使用上述固定执行路径。App v0.1.3 与开发者 SDK sdk-v0.1.2 的配套 macOS arm64 Daemon/CLI 另含 dsh 实验路径。Codex 各层职责与代码对应关系见 Codex 与 ACP 分层;发行物与能力边界见 支持范围。

界舟 · Harness Dock · 原生 Harness 接入与执行管理更新于 2026-11-11