Skip to content

fix(bots): 修复伙伴发送及 Codex、Claude Code 任务能力 - #4066

Merged
zqchris merged 6 commits into
makecindy:mainfrom
zqchris:fix-bot-send-and-codex-tools
Sep 8, 2026
Merged

fix(bots): 修复伙伴发送及 Codex、Claude Code 任务能力#4066
zqchris merged 6 commits into
makecindy:mainfrom
zqchris:fix-bot-send-and-codex-tools

Conversation

@zqchris

@zqchris zqchris commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

伙伴发送消息时会先同步模型选择,内部调用没有 Electron event,却进入窗口校验,导致 senderFrame 异常。将窗口校验保留在 IPC 入口,内部模型事务继续执行原有参数、锁和归属校验。

伙伴切换到 Codex / Claude Code 后,提示中存在的后台任务工具没有直接出现在 MCP 清单。现在复用已有工具定义直接提供伙伴工具,并为 Codex 首次启动和恢复期间的工具发现绑定临时身份。临时身份仅允许 tools/list,不能用于执行工具。

SSH 远端同样注入伙伴任务工具:Claude Code 按 Session 下发带身份的 helper HTTP 配置;Codex 的共享 daemon 保存默认禁用的 helper 连接,伙伴 thread/start 和 thread/resume 才开启,并绑定具体 Session 实例。工具发现和调用继续经过宿主伙伴能力面校验。xdt_helper 同时进入 SSH Claude Code/Codex 的目标可用目录,从而由真实目录生成冻结白名单;远端能力说明也读取该目录,不再因旧的本地/Pi 判断漏掉任务能力。远端 Codex 的 helper 配置还须与当前 token、bridge、转发端口及工具列表的已生效指纹一致;忙碌 daemon 推迟应用时,不会启动缺工具或持旧凭证的伙伴轮次,后续重试沿用既有空闲恢复路径。

远端 Claude Code 同样要求启动前实际注入 helper:本机 bridge、SSH 转发、令牌、helper provider、冻结权限或 Session 实例身份不满足时,终止该次启动并清理本轮临时注册,不会创建缺少任务工具的 query,也不会记录为已完成重建。条件恢复后可以通过既有路径重试;普通任务保留可选 MCP 注入失败时的降级行为。

同时补齐伙伴现有运行契约:关闭伙伴的 harness 原生子任务与共享原生记忆;Claude Code 本地和远端只加载明确挂载的 MCP。后台工作继续走可追踪的 Cindy 任务,记忆继续使用伙伴自身范围。

变更类型

  • fix 缺陷修复

范围

  • 关联 Issue / 需求:用户反馈伙伴发送报错、切换 harness 后不能创建后台任务,并要求一并排查 Codex / Claude Code。
  • 本 PR 包含:内部模型同步修复、伙伴 MCP 直达工具、Codex 启动发现身份、两种 harness 本地与 SSH 远端伙伴配置及回归测试。
  • 明确不包含:UI、人设与 system prompt 文本、数据库、服务端、模型默认值和 runtime 版本升级。
  • 用户可见变化:伙伴发送不再因缺少窗口 event 失败;后台任务工具可发现;伙伴使用自身记忆和任务能力。
  • 是否存在 breaking change:无。普通任务继续沿用原配置;Pi 已有的原生工具注册保持不变。

UI 变化

不涉及。

  • 引用的设计规范:不涉及。

怎么验证的

自动验证

pnpm test:unit:related
结果:通过;前一轮全量门禁通过。本轮相关门禁覆盖 Desktop、mcps、Orca workflow 的整包单测和 maker-core 相关单测。
pnpm --filter desktop --filter @cindy/maker-core --filter @cindy/mcps run --if-present typecheck
结果:通过(Desktop typecheck;另外两个 package 无 typecheck script)。
远端 MCP 定向测试:HTTP bridge、CC 注入、Codex config/漂移
结果:103 条通过,包含真实 loopback HTTP 发现、任务调用、失效身份和能力面拒绝。
Codex/Claude Code harness 测试
结果:纳入本次提交门禁;新增启动/恢复身份、远端 helper 默认禁用与伙伴显式开启回归。
远端 helper 就绪回归
结果:Desktop 远端配置 55 条、Codex 伙伴启动/恢复定向 7 条通过;覆盖首次注入、新增 helper、token/bridge 变更时的 live-turn defer、后续恢复,以及 ConfigRead 后再次漂移时不发送 thread/start|resume。
远端工具目录与冻结策略回归
结果:172 条通过,涵盖真实 Bot 快照、可用/不可用能力说明、CC 注入及两种 harness 的 loopback HTTP 任务发现和调用。测试使用生产目标可用名单生成冻结白名单,不再手工赋予 helper 权限。
远端 Claude Code 启动检查回归
结果:47 条定向测试通过(35 条 MCP 注入/启动准备行为测试、12 条既有 factory 接线检查)。新增行为回归覆盖 bridge、SSH forward、token、helper provider、冻结策略和 Session 实例身份缺失时拒绝启动、清理部分注册,以及恢复后可重试;普通任务仍可降级。本轮相关单测门禁和 Desktop typecheck 通过。
git diff --check
结果:通过。

手工验证

首次提交时的验证:macOS 上使用临时配置目录启动真实 Codex 0.153.4 app-server,连接本 PR 的生产 HTTP bridge 与 helper,确认启动后发现 start/check/message/stop_session_task。Claude Code 2.1.259 使用禁用原生子任务/记忆和严格 MCP 的配置完成 initialize。两项均没有调用模型生成或使用真实凭证。

未执行的验证

未启动 Desktop DEV,未执行界面、真实 SSH 主机或真实模型端到端验收。远端路由已使用生产 HTTP bridge/helper 的 loopback 调用验证,SSH/config 注入使用可注入 fake host;本轮 Claude 启动检查执行真实 preparation 函数并注入 bridge/forward 等远端依赖,factory 调用顺序经源码复核,未把它记录为真实 SSH 启动验收。额外执行过 maker-core / mcps 的 build(tsc),存在未涉及的测试类型错误;没有将这两项记录为通过,生产代码由 Desktop typecheck 覆盖。

风险

风险分类

  • 权限 / 安全 / 用户数据
  • 协议兼容

影响与回滚

  • 影响范围:窗口校验仅迁至 IPC 入口,远端仍使用既有 device-link 鉴权。Codex 临时发现身份仅限精确 instance 的单条 tools/list;工具调用、批量请求和显式未知 threadId 不使用临时身份。工具清单和执行均重新检查伙伴身份。没有用户数据迁移;复用现有远端 MCP 受管段加入默认禁用的 helper transport,不修改受管段之外的用户配置。
  • 远程与移动端:SSH 的两种 harness 已补齐;设备互联与 Mobile 继续驱动被控 Desktop 的现有伙伴/任务入口,无新增 IPC 或移动界面;未修改 device-link 重试或共享连接恢复。
  • 指标影响:本轮改变远端伙伴启动时的工具面、配置就绪检查与基于目录的能力说明开关(不改提示词原文);就绪检查只读本地快照并计算指纹,无新增 SSH 往返;生产 HTTP 测试连续两次 tools/list 内容一致,并实际调用任务工具验证身份和结果。无 system prompt 文本、模型路由、usage 或流式事件路径改动;未运行模型生成,未测实际模型缓存率与延迟。
  • 兼容性:使用现有 MCP 工具协议,新增的 Core 宿主回调可选;普通任务与本地伙伴保留既有行为;远端伙伴缺少当前已生效的 helper 配置时在发送原生线程请求前明确失败,不再静默缺工具。存量插件影响:无。
  • 回滚 / 降级方式:整体 revert 本 PR;无需数据回滚,但会恢复原伙伴发送/任务工具缺陷。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档(遵循现有伙伴运行契约,验证记录见本文)
  • 已确认测试结果或说明未执行原因

Signed-off-by: Chris <4436110+zqchris@users.noreply.github.com>
@zqchris
zqchris marked this pull request as ready for review September 7, 2026 13:49
@zqchris
zqchris requested a review from a team as a code owner September 7, 2026 13:49
@greptile-apps

greptile-apps Bot commented Sep 7, 2026

Copy link
Copy Markdown

Greptile Summary

该 PR 修复伙伴发送前同步模型时错误依赖 Electron event 的问题,并补齐 Codex、Claude Code 伙伴任务工具的发现、身份绑定和运行配置。

  • 将本地窗口信任校验保留在 SET_MODEL IPC 入口,使内部模型事务继续复用既有参数、锁、归属和目录校验。
  • 为 Claude Code 与 Codex 直接公开经过伙伴身份策略过滤的 Cindy 后台任务工具。
  • 为 Codex 启动及恢复阶段的 tools/list 提供按会话实例绑定的临时身份,同时保持工具执行必须使用正式线程身份。
  • 禁用伙伴的 harness 原生子任务与原生共享记忆,并使 Claude Code 伙伴仅加载明确挂载的 MCP。
  • 添加了 IPC、HTTP bridge、MCP 工具面以及本地和远端 Agent 配置回归测试。

Confidence Score: 5/5

该 PR 看起来可以安全合并,未发现由本次改动引入的具体正确性、安全性或协议兼容问题。

IPC sender 校验仍位于真实本地入口,device-link 例外受既有认证上下文约束;Bot 工具的发现与执行均重新校验会话身份,Codex 临时身份仅覆盖启动期 tools/list;Claude Code 和 Codex 的伙伴隔离配置也保留了明确挂载的 Cindy MCP 与 Maker Memory 路径。

Important Files Changed

Filename Overview
apps/desktop/src/main/maker-ipc/sessionSetModelHandler.ts 将真实 sender 校验集中在 SET_MODEL IPC 入口,并为已认证 device-link 调用保留无 Electron frame 的路径。
apps/desktop/src/main/maker-ipc/register.ts 内部模型切换事务不再接收 Electron event,同时继续沿用原有验证、锁和运行时变更逻辑。
apps/desktop/src/main/mcp-integrations/codexHttpBridge.ts 新增按 session instance 绑定的启动期发现身份,且仅允许无 threadId 的单条 tools/list 使用该身份。
packages/lizi-mcps/src/lizi_xdtHelperMcpServer.ts 为 Claude Code 和 Codex 直接公开 Bot 工具,并在工具清单与执行阶段动态复核伙伴能力面。
packages/maker-core/src/agents/codex/index.ts 在 Codex 启动和恢复期间绑定发现身份,并关闭伙伴的原生多代理与原生记忆能力。
packages/maker-core/src/agents/claude-code/index.ts 本地和远端伙伴均禁用原生 Task/Agent 与原生记忆,并启用严格 MCP 配置。
apps/desktop/src/main/maker-host/index.ts 将 Desktop Codex HTTP bridge 的临时发现身份能力接入 maker-core Agent 依赖。

Sequence Diagram

sequenceDiagram
  participant B as 伙伴会话
  participant A as Codex/Claude Code
  participant H as Desktop Host
  participant M as Cindy MCP Bridge
  participant T as Cindy Session Task

  B->>A: 启动或恢复会话
  alt Codex 尚未注册 thread
    A->>H: thread/start 或 thread/resume
    H->>M: 绑定临时 sessionInstanceId 身份
    A->>M: tools/list
    M-->>A: 返回经过伙伴策略过滤的工具
    H->>M: 释放临时身份
    H->>M: 注册正式 thread 身份
  else Claude Code
    H->>A: 注入明确挂载的 MCP 配置
    A->>M: tools/list
    M-->>A: 返回经过伙伴策略过滤的工具
  end
  A->>M: 调用 start/check/message/stop_session_task
  M->>M: 重新校验伙伴会话身份
  M->>T: 创建或控制可追踪任务
  T-->>B: 回传任务状态与结果
Loading

Reviews (1): Last reviewed commit: "fix(bots): restore model sync and harnes..." | Re-trigger Greptile

@MagicLizi MagicLizi added the touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) label Sep 7, 2026
@zqchris

zqchris commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7e2e242659

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread packages/lizi-mcps/src/lizi_xdtHelperMcpServer.ts
@MagicLizi

Copy link
Copy Markdown
Contributor

@zqchris 👋 这个 PR 还有 1 条 review conversation 没 resolve(packages/lizi-mcps/src/lizi_xdtHelperMcpServer.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

Signed-off-by: Chris <4436110+zqchris@users.noreply.github.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9605e0e2c9

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/remote-ssh/codex-remote-mcp.ts Outdated
Signed-off-by: Chris <4436110+zqchris@users.noreply.github.com>

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

approve

Signed-off-by: Chris <4436110+zqchris@users.noreply.github.com>
@zqchris

zqchris commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

DCO 已恢复通过。原因是 PR 的 base SHA 停留在旧主干,比较范围误含已进入 main 的 81 条提交;刷新 base=main 后恢复为本 PR 的两个修复提交、19 个文件,随后用带签名的空提交触发重检。DCO 与设计依据检查均已确认 success,没有替其他贡献者补签或改写其提交。

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8b6c0241be

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/maker-host/cc-remote-mcp.ts
Signed-off-by: Chris <4436110+zqchris@users.noreply.github.com>
@zqchris

zqchris commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

Windows 旧 head 8b6c0241 的失败已定位:run 34236863942 的 Windows shard 1 仅 windowsPackagedInstanceBarrier.test.ts 中的 mutex acquire/release/retry 用例失败,错误为 timed out probing Windows packaged-instance barrier。日志中其他 16,605 条测试通过;失败发生在取得锁后的 PowerShell Add-Type/message-window 探测阶段,其固定预算为 5 秒。

本 PR 未修改该测试和 windowsPackagedInstanceBarrier.ts,两文件与当前上游 main 的 blob 完全一致。本次先不扩大伙伴修复范围或放宽启动超时。最新 head c37ba2cb0 的 Windows 两个分片已在 run 34239041025 中执行,涵盖该用例;不重复启动旧 head 的流水线。当前不能把这个超时认定为已修复,继续由现有跟进任务接收最新 Windows 结果,若再次失败再依据新日志处理。

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c37ba2cb0e

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/maker-host/index.ts Outdated
Signed-off-by: Chris <4436110+zqchris@users.noreply.github.com>
@zqchris

zqchris commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

已核对旧提交 c37ba2cbWindows CI。这次有两项失败,不是上一轮的 packaged-instance barrier 超时:

  • packages/device-link/src/__tests__/client.test.ts:1238:入站 link 重试耗尽后重新建链,断言一条重放帧,实际记录两条。测试使用 5ms 重试计时器,建链 helper 在返回前会等待真实 tick(),ACK 则在返回后发送;这存在 Windows 调度延迟让重试先于测试 ACK 发生的时序窗口。
  • packages/lizi-im/src/feishu/__tests__/outboundFile.test.ts:121:Unicode 文件归属校验超出测试的 5000ms 上限。Windows 分支使用 PowerShell 句柄校验;日志没有证明该校验返回错误,仅报告整条测试超时。

范围证据:packages/device-linkpackages/lizi-im 的完整目录树与本地 PR 基线 upstream/main 分别具有相同的 Git tree ID(d40bdb5c / e7834f4c);协议依赖、锁文件和 CI 调度配置也没有本 PR 改动。这两个独立 package 的测试没有运行伙伴 helper 启动路径。

两条失败用例在本机 macOS 定向执行均通过;这不等于 Windows 故障已修复。没有放宽断言、扩大超时或改动范围外的设备互联/文件安全逻辑。

本次通知对应旧 head。核对时,最新提交 072754dc8新一轮 Windows CI 两个分片都在运行,DCO 与设计依据检查已通过。保留新一轮结果为准,不重复重跑旧提交;后续失败继续由现有 watcher 投递处理。

@zqchris
zqchris merged commit 0d1a5c7 into makecindy:main Sep 8, 2026
12 checks passed
@zqchris

zqchris commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

已合并。伙伴发送时的 senderFrame 异常,以及 Codex / Claude Code 本地和 SSH 远端的任务工具发现、身份绑定与启动检查,均已进入主干;实现继续复用现有任务、权限和记忆机制。

合并前确认最新提交的 Windows / Linux 单测、Desktop Git 集成、DCO 和设计依据检查全部通过,四条 review conversation 全部已回复并 Resolve。此前旧提交上的 Windows 失败未在最新一轮复现,没有通过放宽测试或修改范围外功能来消除失败。

真实 SSH 主机与模型端到端尚未验证,验证边界已保留在 PR 描述中。本次完成代码合并,不代表客户端版本已发布。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants