makecindy / makecindy/cindy

bug: 少量 Codex 会话未加载 cindy MCP,TapTap Maker 同时在 Cindy 与本地会话不可用

Open
#594 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
TypeScript
Stars
2.7k
Forks
395
Avg merge
21h 48m
Merged PRs (30d)
776

Description

### 问题描述 / What happened

目前收到约 3–5 名用户反馈:在 Cindy 的 Codex 会话中调用 TapTap Maker 插件时,插件指令和工具清单已经作为文本进入上下文,但当前会话没有加载 `cindy` MCP 提供的 `ghost_list` / `ghost_call`,因此 Agent 无法真正调用 TapTap Maker。

大部分用户使用正常,问题仅在少量用户或少量环境中出现,当前尚未获得稳定的环境级复现条件。

用户首次反馈中的 Agent 诊断为:

```text
确认了——当前会话中确实无法调用 TapTap Maker 插件。

诊断结果

- 我的可用工具中没有 ghost_call / ghost_list(Cindy 总机桥接通道未接通)
- MCP 资源列表中只有 Adobe、Figma、Sites 等插件,没有 TapTap Maker 的 MCP 服务端
- 插件指令和工具清单虽然作为文本注入了上下文,但实际调用通道不存在
```

问题出现后,同一设备上的本地 Codex 会话也无法使用 TapTap Maker,并返回:

```text
当前会话里 Maker MCP 不可用:taptap-maker skill 已安装,但它依赖的
ghost_list / ghost_call 插件入口没有加载,因此无法调用 maker_status 验证连接。
需要在 Cindy 中启用或重新加载 TapTap Maker 插件后再试。
```

这里“启用或重新加载插件”的提示可能误导用户:从现象看,TapTap Maker skill 与插件指令已经存在,缺失的是更上游的 `cindy` MCP 工具入口。

### 环境 / Environment

- Cindy 版本或 commit:多个用户反馈,具体版本待补充
- 平台与版本:待逐个收集;需重点确认 Windows、公司代理/PAC 和系统代理环境
- 安装方式:正式客户端,具体渠道待补充
- 影响规模:目前约 3–5 名用户反馈,大部分用户正常
- Agent:Codex
- 会话类型:Cindy 会话和同设备本地 Codex 会话均观察到;需继续确认是否包含 SSH `remoteHostId` 会话

### 复现步骤 / Steps to reproduce

当前尚未稳定复现。根据用户反馈,可通过以下步骤观察故障状态:

1. 在 Cindy 中安装并启用 TapTap Maker 插件;
2. 创建或打开 Codex 会话;
3. 通过 TapTap Maker 插件入口发送需要调用 Maker 的请求;
4. 插件指令和工具清单进入会话上下文;
5. Agent 检查当前工具后发现不存在 `ghost_list` / `ghost_call`,无法调用 Maker;
6. 在同一设备的本地 Codex 会话中再次尝试使用 `taptap-maker` skill;
7. 本地会话同样报告 `ghost_list` / `ghost_call` 未加载,无法调用 `maker_status`。

### 期望行为 / Expected behavior

- 本地 Codex 会话应始终加载 `cindy` MCP 的稳定工具面,包括 `ghost_list` 和 `ghost_call`;
- TapTap Maker 插件已安装并启用时,Agent 应能通过 `ghost_call` 调用其工具;
- 即使没有安装任何 Ghost 插件,`cindy` MCP 也应存在,只由 `ghost_list` 返回空清单;
- 如果 MCP bridge 无法建立,应向用户展示可诊断、可恢复的错误,而不是继续创建一个缺少全部 Cindy MCP 工具的会话;
- 如果某类远程会话明确不支持 Cindy MCP,则 UI 不应继续展示或注入必然无法执行的 TapTap Maker 插件指令。

### 实际行为 / Actual behavior

- TapTap Maker skill、插件指令和工具描述已经加载;
- `ghost_list` / `ghost_call` 未出现在当前 Agent 工具面;
- Agent 只能读到“必须调用插件”的文本要求,却没有实际调用通道;
- Cindy 出现问题后,同设备本地 Codex 会话也无法使用 TapTap Maker;
- 用户会被提示重新启用 TapTap Maker,但重新启用插件未必能恢复缺失的 `cindy` MCP bridge。

### 已确认的代码事实

1. `cindy` MCP 按设计应恒定注册,不受具体 Ghost 插件开关控制:

```text
apps/desktop/src/main/mcp-integrations/mcp-providers.ts
packages/cindy-tools/src/ghost/mcpServer.ts
```

`createCindyGhostsMcpServer()` 固定注册 `ghost_list` / `ghost_call`。因此缺少这两个工具不是“TapTap Maker 未安装”的正常表现。

2. 本地 Codex 通过 loopback Streamable HTTP bridge 消费 Cindy 的 in-process MCP:

```text
apps/desktop/src/main/mcp-integrations/codexEnvironment.ts
apps/desktop/src/main/mcp-integrations/codexHttpBridge.ts
```

3. bridge 准备失败时,当前代码会记录错误后继续启动不带 Cindy MCP 的 Codex:

```text
apps/desktop/src/main/maker-host/index.ts
packages/maker-core/src/agents/codex/index.ts
```

对应日志:

```text
codex MCP bridge prep failed, continuing without lizi MCP
```

4. SSH 远程 Codex 会话检测到 `remoteHostId` 后会返回空 MCP 启动参数;但 Renderer 仍可能读取本机 Ghost 清单并注入插件指令:

```text
apps/desktop/src/main/maker-host/index.ts
packages/maker-core/src/agents/codex/index.ts
apps/desktop/src/renderer/components/new-chat/ChatInput.tsx
```

5. loopback bridge 依赖 `127.0.0.1:`。代码已专门补充 `NO_PROXY=127.0.0.1,localhost,::1`,注释记录了公司代理/PAC 导致 Codex MCP 返回 `UnexpectedContentType`、全部 Cindy 工具消失的历史风险:

```text
packages/maker-core/src/agents/codex/env-builder.ts
```

### 与 Maker MCP Windows npx 安装缺陷的关系

已知 `@taptap/maker` 的 Windows MCP 安装器曾无条件生成:

```text
cmd.exe /d /s /c npx.cmd -y -p @taptap/maker taptap-maker
```

在客户端 PATH 没有 `npx.cmd` 时会导致独立 Maker MCP 启动失败。但该问题发生在 Maker MCP 启动层;本 issue 的故障发生得更早,连 Cindy 自己的 `ghost_list` / `ghost_call` 都不存在。

因此当前不应把 Maker 安装器缺陷作为本 issue 的既定根因。只有在 `ghost_call` 正常存在、调用 Maker 后才出现 `npx.cmd is not recognized` 时,才属于该独立问题。

### 当前根因假设 / Investigation hypotheses

现有证据只能确定故障点位于 `cindy` MCP bridge 的注册或连接链路,尚不能在以下条件中唯一归因:

1. 受影响会话为 SSH 远程 Codex,会按当前实现跳过本地 Cindy MCP;
2. 本地 HTTP bridge 启动失败,异常被吞后 Codex 继续降级启动;
3. 公司代理、PAC、系统代理或安全软件阻断/改写 `127.0.0.1` bridge 请求;
4. 受影响客户端版本未包含或未正确应用 loopback `NO_PROXY` 处理;
5. 共享 Codex app-server / MCP bridge 的缓存或重启生命周期异常,导致后续本地会话复用缺少 MCP 的 host。

### 建议补充的诊断信息

从一名受影响用户收集以下脱敏信息即可快速分流:

- Cindy 完整版本;
- OS 与架构;
- 会话是否为 SSH Remote,数据库/会话中的 `remoteHostId` 是否非空;
- 是否启用公司代理、PAC、系统代理、TUN 或安全软件;
- `HTTP_PROXY`、`HTTPS_PROXY`、`ALL_PROXY`、`NO_PROXY` 是否设置(只记录是否设置和脱敏后的 host,不记录凭证);
- main 日志中以下关键字:

```text
http bridge listening
codex MCP bridge wired
codex MCP bridge ready
codex MCP bridge prep failed
UnexpectedContentType
rejected unauthenticated request
rejected non-localhost request
```

- Codex app-server 的 MCP server/tool 列表中是否存在 `cindy`、`ghost_list`、`ghost_call`;
- 重启 Cindy、重启 Codex host、重新启用 TapTap Maker 后分别是否恢复。

### 建议验收标准

- [ ] 本地 Codex 新会话稳定包含 `cindy` MCP 的 `ghost_list` / `ghost_call`;
- [ ] bridge 准备或初始化失败时不再静默创建一个缺少全部 Cindy MCP 的会话;
- [ ] 错误信息能区分 bridge 启动失败、loopback 连接失败、代理改写和远程会话不支持;
- [ ] 日志包含脱敏后的 bridge 生命周期、server 名和失败阶段;
- [ ] 公司代理/PAC/系统代理环境下验证 loopback bridge 不经过代理;
- [ ] Windows 与 macOS 至少各完成一次本地 Codex + TapTap Maker 回归;
- [ ] SSH Remote 不支持 Cindy MCP 时,不展示或注入不可执行的 TapTap Maker 插件指令;或补齐远程 bridge 支持;
- [ ] MCP host 重启、插件重载和会话重建后不会复用缺少 `cindy` MCP 的缓存状态;
- [ ] 增加“bridge 准备失败”和“远程会话 UI 仍注入 Ghost 指令”的回归测试。

Contributor guide

Open the contributing guide

Research direction

Start with apps/desktop/src/main/mcp-integrations/codexEnvironment.ts and codexHttpBridge.ts, then trace bridge failure handling in apps/desktop/src/main/maker-host/index.ts and packages/maker-core/src/agents/codex/index.ts. Reproduce while checking the listed bridge and MCP logs under local, proxy/PAC, and SSH sessions; inspect env-builder.ts and ChatInput.tsx for loopback and remote-session behavior. Done means the acceptance checklist passes, including regression coverage for bridge failure and remote UI injection.

Written by the indexing model from the issue text.

Assessment

Tech stack
electron, typescript
Domain
desktop, devtools, networking, testing-qa
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.