Skip to content

feat(cursor): 原生 ACP 接入,补齐模型、权限与供应商设置 - #5611

Open
9398-haha wants to merge 24 commits into
makecindy:mainfrom
9398-haha:feat/cursor-native-acp-1027
Open

9398-haha wants to merge 24 commits into
makecindy:mainfrom
9398-haha:feat/cursor-native-acp-1027

Conversation

@9398-haha

@9398-haha 9398-haha commented Oct 8, 2026 •

Copy link
Copy Markdown

同步上游 main(2026-10-11;提交 b8ab6b8b8)

  • 基线:把 makecindy/cindy main@9b200f938 merge 进 feat/cursor-native-acp-1027。上一轮已推送的同步是 main@cf61957a9(合并提交 13c667099)。方式是 merge,没有改写历史。GitHub 上这个 PR 的 base 已是 9b200f938,head 是 b8ab6b8b8,mergeable=MERGEABLE,mergeStateStatus=BLOCKED。BLOCKED 来自 awaiting-discussion、必需 CI 和维护者批准,不是冲突。本地 pnpm check:dco 通过(相对 upstream/main:15 个提交已签名,9 个 merge 豁免)。没有新开 PR,没有请审,也没有改 draft 状态。
  • 上游这 8 个提交:303370439、c33b0130c、037a54080、fff8e6bb3(perf(device-link): 远程运行中工作组改由电脑端下发最近 5 行并就地更新 #5786 远程运行中工作组最近 5 行活动)、17a83d52c(fix(mobile): 普通任务用户气泡改用伙伴模式的浅色边框 #5787 普通任务用户气泡改用浅色边框)、0404f30e0(fix(mobile): 已合并 PR 图标改用焦点蓝,语义对齐桌面 #5789 已合并 PR 图标改用焦点蓝)、f9274e609(fix(mobile): 回复任务时语音结束不再自动弹出键盘 #5790 回复任务时语音结束不再自动弹出键盘)、9b200f938(perf(history): 命令产物推断改为命令级一次性索引,切换伙伴不再被超长命令阻塞主进程 #5506 命令产物推断改为命令级一次性索引)。
  • 没有内容冲突。10 个两边都改过的文件由 git 自动合并,核对后两边都在:
    • dispatch.ts 与 dispatchSendSafety.test.ts:Cursor 模型选择能力投影留下,同时接入上游的运行中工作组补丁。
    • messages.ts 与 makerChatStore.ts:cursor agent kind 留下,同时接入历史正文戳与 workLines。
    • 手机 sessions/[sessionId].tsx:跨引擎列表仍含 Cursor,协同表单仍传 permissionModes;语音结束只在点输入框时聚焦(fix(mobile): 回复任务时语音结束不再自动弹出键盘 #5790)。
    • DeviceLinkContext.tsx 与 mobileMakerTransport.ts:仍声明 cursor-model-picker-v1;历史读取带 workLines,并消费 maker:history-work-patch。
    • MessageRenderer.tsx:Cursor 任务标签留下;普通用户气泡边框改为 colors.border(fix(mobile): 普通任务用户气泡改用伙伴模式的浅色边框 #5787),折叠工作组可显示主机下发的最近活动行。
    • protocol-compatibility.md:Cursor 手机模型选择一节留下,并写入上游的运行中工作组单行活动说明。
    • design-inventory.md:设置行仍包含 CursorProviderSetup.tsx,上游台账更新一并留下。pnpm check:design-inventory 通过(52 个 surface)。
  • 这次没有改到 i18n、供应商组用量或 Worker 创建文件。cursorGroups 与供应商组文案键仍都在。Cursor workers require a local workspace 仍在:SSH、远程 Agent 位置、远程供应商或组把 Worker 改放到另一台电脑时,不提供 Cursor。手机 fix(mobile): 新建任务不再显示写死的 Sonnet 4.6,模型落定前不能创建 #5706(模型未落定不能创建)这次没有改到,行为未改写。
  • 定向测试(本轮单独计数,不与此前 6,510 项或上一轮相加):
    • @cindy/maker-shared:historyWorkLines 13 项、historyView 57 项、historyViewLoading 5 项,共 75 项通过。
    • Mobile:composerNativeVoiceSelection 4、composerRichInputHtml 13、composerRichInputLifecycle 16、messageActionDesktopFirst 16、prStatusVisual 2、sessionComposerDesktopFirst 5、themeColorsFreeze 3、mobileHistoryRender 24,共 83 项通过。Mobile tsc --noEmit 通过。
    • Desktop:dispatchSendSafety 87、historyWorkPatch 11、historyViewPush 9、historyViewOutline 10、historyViewReader 41、workGroupBlockLivePreview 21、commandOutputPaths.scan 8,共 187 项通过。
  • 仍未完成:
    • Desktop 完整类型检查没有跑。脚本要求 12GB 堆;这台机器约 15GB,当时可用内存大约 5GB,不够。
    • iPhone 新包,以及桌面到手机同一任务的实机验收,仍未做。本轮没有做浅色/深色实机目检。
    • 维护者讨论(维护者确认:PR #5611 feat: 原生接入 Cursor Agent ACP(#1027) #5621,标签仍是 awaiting-discussion)和必需 CI 仍待维护者放行。本地测试不替代这些门禁。没有新增请审评论。

这次改了什么

摘要

安装并登录官方 Cursor CLI 后,可在 Cindy 新建和续接 Cursor 原生任务,使用账号实际提供的模型、思考档位和 Fast,并使用 Cindy 的计划反馈、审批和停止入口。

设置 → 模型供应商现在提供 Cursor 添加与安装/登录指引。CLI 已安装但模型发现失败时仍保留入口,允许重试;读取模型后显示正确的 Cursor 引擎说明和连接状态,不创建假的 OAuth 连接。模型选择器保留原生 Auto 与 Cursor Models / Other Models 分组,旧任务的 cursor-default 继续作为默认路由兼容,不新增占位模型。

Cursor 支持默认权限、自动审批和完全访问;新建、恢复、切换引擎、协同创建与手机控制保留受支持的选择。审批热切换、取消和过期结果通过同一授权边界处理。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • docs / test / chore 文档、测试或工程维护

范围

  • 关联需求:原生接入 Cursor Agent CLI(ACP),作为第三种 Agent Harness #1027;维护者确认与验收讨论:维护者确认:PR #5611 feat: 原生接入 Cursor Agent ACP(#1027) #5621。
  • 包含:原生 ACP 会话生命周期、实际模型与参数目录、本机 CLI 检测和设置入口、任务身份和恢复、桌面与手机选择器、Memory HTTP MCP、权限/计划/问题交互、取消及进程退出。
  • 不包含:自动安装 Cursor、代管凭证、SSH/device-hosted Cursor、原生 rewind/fork、额外目录、只读 Library 和固定 Skill 调用。受限 Reviewer/Bot 的逐工具策略无法由当前 ACP 接口保证,启动前明确拒绝。
  • 无新增 channel、relay 类型、协议版本或数据库 migration;本 PR 不修改 Mobile 原生配置或 fingerprint 输入。
  • 最新同步是上方的 main@9b200f938(合并提交 b8ab6b8b8)。此前已推送 main@cf61957a9(合并提交 13c667099)和 main@6393978d0(合并提交 da68e678f,11 处内容冲突)。更早的 main@f78ba734d 跨设备 Worker 与手机表单冲突,以及 main@a76050239 的设置、新建任务、模型档位及文档冲突也已保留。Cursor Worker 仍只在本机工作区运行,跨设备入口不提供 Cursor。手机保留 fix(mobile): 新建任务不再显示写死的 Sonnet 4.6,模型落定前不能创建 #5706 的行为:模型未落定时不能创建,不恢复写死的默认型号。模型列表工具保留两种 gateway 折扣路由识别,同时把 Cursor 的不透明原生 ID 与 gateway 路由分开,并带上按位置列出模型。

UI 变化

  • 引用的设计规范:docs/design-rules/DESIGN.md §2 Color Palette & Roles、§4 Select & Dropdown / Dialog & Modal、§10 Light / Dark Dual-Mode Delivery Gate、§11 Voice & Content。复用现有设置面板、模型列表、权限菜单、确认弹窗与语义颜色。
  • 五种语言同步 Cursor 设置与权限文案。设计台账已按合并后的源码重新生成。
  • macOS 先前同步源码 414ceeb5d 的设置页实测显示 Cursor、10 个模型、已连接及「仅支持 Cursor」,点击刷新后仍正常。浅色/深色已目检并重新截图,验证结束后恢复原来的「跟随系统」显示模式。权限截图来自先前 08f5b720c 试用验证;手机验收仍单列待完成。
macOS 浅色模型供应商 macOS 深色模型供应商
浅色 Cursor 设置 深色 Cursor 设置
macOS 浅色权限菜单 macOS 深色权限菜单
浅色权限菜单 深色权限菜单

怎么验证的

再次同步最新主线(2026-10-11;提交 da68e678f)

  • 合入 main@6393978d0(feat(bots): implement independent teammate Todo workflows #5765 teammate todos,以及自上一轮 main@f78ba734d 起的供应商组、协同 Worker 远程位置等 94 个提交)。方式是 merge,没有改写历史。
  • 11 个冲突文件的处理:
    • orcaWorkerCreationService.ts:保留 Cursor 仅本机工作区,同时接入上游的 Agent 位置解析和供应商组跟随。SSH、Lead 的 Agent 在别的电脑、运行设备、远程供应商,或组把 Worker 改放到另一台电脑时,仍拒绝并返回 Cursor workers require a local workspace。模型选择同时保留「同一位置才继承 Lead 模型」和 Cursor 原生目录首项。
    • register.ts:Cursor 模型目录导入与 teammate Todo dispatch 同时保留。listAvailableModels 采用上游的位置 / 供应商组目录;本机仍列出已注册的 Cursor,跨设备位置和 SSH Lead 不列 Cursor。
    • list_available_models.ts:保留 Cursor 原生 ID(tier 固定 standard,不把 codex/ 前缀当成 gateway 折扣)以及上游的 agent_device_id / locations。
    • UnifiedModelPanel.tsx:分组标题同时使用供应商组标题和 Cursor Models / Other Models。
    • CreateWorkerPopover.tsx:保留 Cursor 能力与权限,并接入远程供应商档位记忆。SSH、运行设备、远程供应商或 Lead Agent 在别的电脑时,面板不提供 Cursor。
    • en / ja / ko / zh-CN common.json:cursorGroups 与供应商组文案键同时保留。zh-TW 自动合并,两边都在。
    • useSessionOrcaCollab.ts 与手机测试:保留 Cursor 权限档位收敛,以及远程供应商模型不按被控电脑目录收敛。运行设备或 Lead Agent 在别的电脑时不提供 Cursor。新建任务页「模型未落定不能创建」的 fix(mobile): 新建任务不再显示写死的 Sonnet 4.6,模型落定前不能创建 #5706 路径不在冲突里,未改写。
  • 定向验证(本轮,不与此前 6,510 项相加):
    • @cindy/mcps listAvailableModelsTool.test.ts:8 项通过。
    • Mobile useOrcaWorkerForm.test.tsx:36 项通过;Mobile tsc --noEmit 通过。
    • Desktop:orcaWorkerCreationService.test.ts 384 项、CreateWorkerPopover.test.tsx 64 项、remoteAgentSetModelWiring.test.ts 7 项、modelSelectorProviderGroupLabel.test.tsx 4 项通过。unifiedModelPanelRendering.test.tsx 单独复跑 162 项通过。与上述文件放在同一次 vitest 进程时有 1 项 Cursor 滑杆查询失败,单独复跑通过,按测试隔离记录,没有改断言。
  • 未跑:Desktop 完整类型检查(脚本要求 12GB 堆,这台云主机约 15GB 且可用内存不够)、Desktop Electron 试用窗口、iPhone 实机。GitHub 现为 mergeable=true、mergeable_state=blocked(冲突已解除;仍受讨论标签、必需 CI 和维护者批准约束)。没有新的请审评论。

上一轮同步(2026-10-10;提交 b05e122c5)

  • 合入 main@f78ba734d 的跨设备 Worker、移动端入口及数据库 migration,解决 5 处内容冲突。Cursor Worker 保持仅在本机工作区运行;跨设备 Worker 入口不提供 Cursor。手机端同时保留权限档位与设备选择,新旧设备切换时按执行电脑重新读取 Agent、模型和权限。
  • 定向验证:Desktop Worker 创建/协同入口 385 项、远端 Worker Host/Runtime 118 项、任务打开 21 项、迁移回放 14 项;Mobile Worker 表单/团队 64 项、协同界面/目录选择 13 项、scope 与 smoke;device-link 14 项,均通过。这些是本轮定向测试,不与下方 6,510 项首轮回归相加。
  • Desktop、Mobile 完整类型检查通过;Desktop 改动文件 ESLint、数据库 db:validate(126 个 migration)、设计台账、术语和开发文档检查通过。术语检查有既有 18 处待裁决提示,无新增违规。
  • 独立 cursor-providers 试用窗口已按新提交冷启动,DESKTOP_DEV_VERDICT=ready;desktop:whoami --all 显示运行源码为 b05e122c5,实际窗口截图确认主界面已加载。此次未重新进入供应商页截图;下方图片均标有其来源提交,不作为新版本的供应商页视觉证据。iPhone 实机验收仍未完成。

首轮相关验证(2026-10-10)

本次相关回归去重 6,510 项,按 package 统计,不与此前运行记录相加:

范围 结果
Desktop 相关 58 个测试文件 2,164 项通过
Mobile 相关 15 个测试文件,含远控 smoke 380 项通过
Maker Core 的 ACP、Cursor 与 Maker 回归 279 项通过
MCP package 全套 956 项通过
Model Providers package 全套 1,248 项通过
Maker Shared package 全套 1,483 项通过

初跑有两个默认超时和两个 Desktop 测试文件的本地依赖读取异常。按 lockfile 的版本与 SHA-512 校验恢复本 checkout 的 protobufjs@7.6.5 后,失败文件在原断言和原超时下复跑全部通过;最终 Desktop 类型检查遇到的 @types/plist@3.0.5 读取挂起也按相同校验恢复,完整检查重跑通过;没有删除、跳过或弱化测试。表格统计包含复跑闭环并去除重复用例,不能视作一次整仓 CI 全绿。

  • Desktop、Mobile、Maker Core 完整 TypeScript 检查通过;Desktop 保留完整 tsconfig。
  • 改动 Desktop 文件 ESLint、i18n key、术语、品牌、开发文档契约、设计台账、语义颜色和 Mobile scope 检查通过。i18n 保留既有非阻塞警告。
  • DCO 与 PR 设计依据检查使用本次真实提交范围,本地检查通过。
  • 同步 a76050239 的供应商组显示更新后,补跑设置页/添加入口/供应商组组件回归和 Desktop 完整类型检查,结果通过。

试用窗口恢复(同步前提交 e54d4750a)

  • 旧试用窗口的 renderer 为空白页。排查发现本机文件仅 ctime 变化时,macOS 文件监听仍对大量未改内容的源码发出 change,触发连续预构建和页面重载,开发进程资源占用持续上升。
  • 增加仅在 XDT_DESKTOP_DEV_WATCH_POLLING=1 时启用的 macOS 轮询监听,覆盖 Desktop main 与 renderer;启动脚本透传该开关并为此模式留足启动等待时间。默认监听方式及 Windows 行为不变。
  • 用正式开发启动脚本冷启动独立 cursor-providers 试用窗口,返回 DESKTOP_DEV_VERDICT=ready;desktop:whoami --all 核对运行源码为 e54d4750a,实际窗口已显示完整 Cindy 界面。启动脚本 76 项测试、开发文档 10 项测试、Desktop 完整类型检查及 git diff --check 通过;本提交 DCO 检查通过。

真实 CLI 与既有手工证据

  • 本次 macOS 官方 CLI 2026.08.11-e8db854:真实已登录账号、独立临时 Git 工程。确认原生目录 10 项、短多轮、文件操作、关闭后加载同一任务、取消完成,以及实际原生进程访问合成 loopback HTTP MCP。测试结束后进程和桥接均清理。
  • 本次文件编辑没有产生原生审批请求,不能据此声称审批 UI 验收通过;合成 HTTP MCP 握手也不代表真实 Memory 读写验收。
  • 此前真实 CLI 验证了档位/Fast、生产 Memory HTTP MCP,以及三档授权回调。默认权限经确认解析器返回 reject-once;自动审批经合成审核委托返回 allow-once;完全访问直接返回 allow-once。这证明协议分流,不是在线审核模型质量评估。
  • 此前实际 Electron 权限菜单三档可选,重载保留自动审批与完全访问;完全访问沿用确认弹窗。合成回合对照保留主消息与非交互事件载荷,不将本地调度耗时当成网络审核延迟或原生缓存命中率。

旧机器人审查逐项核对

原意见 修复与依据
Cursor 历史、定时表单和协作标签变成 Claude 三处身份转换明确保留 Cursor,相关恢复/表单/标签回归通过
加载后计划模式不一致 从新建或加载返回的 modes.currentModeId 初始化,再判断是否切换;ACP/Cursor 回归通过
启动失败失去清理入口 保留失败启动清理记录,重试启动及 dispose 重试退出确认,whenStopped 仅在退出后完成;生命周期回归通过
过早删除模型探测目录 adapter 持有临时目录,原生退出确认后回收;宿主不在 finally 提前删除
停用 Cursor 来源或模型后仍能新建 路由检查读取含原生目录的 catalog,保留已运行任务续跑语义;Cursor 路由门回归通过
权限选择器误用 Claude 能力和文案 明确 Cursor 映射,三档来自 Cursor 能力声明;组件、持久化、远控兼容与取消回归通过

机器人原审查对应旧提交 07c6df02。其中 5 条代码审查 thread 已按上述修复与回归依据标记 resolved;本表不替代维护者对最新提交的正式复审。

未完成与证据边界

  • 维护者确认:PR #5611 feat: 原生接入 Cursor Agent ACP(#1027) #5621 要求的 iPhone 新包及桌面→手机同一任务实机验收仍未完成。当前电脑仅有 Command Line Tools,没有完整 Xcode,devicectl 不可用;未构建、安装或发布手机新包/热更,没有新的手机 Light/Dark 实机证据。Beta 0.1.11 缺少 Cursor 的既有反馈不能用源码测试替代闭环。
  • 本次再次同步后未重新实跑 Windows/Linux 原生 CLI、存量插件升级矩阵或整仓完整单测;各 package 的已跑范围见表格。
  • 试用启动时另发现本 checkout 的 Playwright 加载异常(debugPkg is not a function),按 lockfile 的 SHA-512 校验恢复 playwright-core@1.60.0 后,原版模块导入通过,未修改依赖版本或项目 lockfile。
  • 先前同步版的模型供应商页已完成实际选择、刷新及 Light/Dark 目检;窗口来源由 desktop:whoami 核对。设置截图来自 414ceeb5d,17d55e560 只更新两张截图;e54d4750a 只修复开发试用窗口的监听和启动脚本,未修改产品 UI。旧权限截图与本轮设置截图的来源分别标注。
  • 当时的同步提交 da68e678f 合入 main@6393978d0。最新状态见文首:b8ab6b8b8 已推送,合入 main@9b200f938,GitHub 为 mergeable=MERGEABLE、mergeStateStatus=BLOCKED。上一轮提交 b05e122c5 的 client-ci 与 pr-design-basis 仍为当时的 action_required。新提交的远端 CI 需维护者放行后才会跑,本地检查不替代这些合并门禁。没有新增请审评论。

风险

风险分类

  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 跨平台差异

行为边界与维护者确认

  • 原生 Cursor 凭证、会话保存、系统提示词、沙箱及长期授权仍由 Cursor 管理。Cindy 不改写这些配置。
  • 三档权限只处理 Cursor 经 ACP 实际发来的请求,不保证每次工作区操作都提示。不合成 allow_always;计划批准和问题回答始终明确交互。自动审核不可用时提示并回退到确认卡。
  • 首版是否接受“执行电脑自装并登录官方 CLI、手机经该桌面宿主控制、实际原生目录、原生权限边界,以及上述暂不支持入口”,仍需维护者在本 PR 正式确认。维护者确认:PR #5611 feat: 原生接入 Cursor Agent ACP(#1027) #5621 保持待确认,不把旧意见修复或截图视为产品批准。
  • 旧控制端按实际能力继续使用当前引擎模型列表;完整跨引擎选择需控制端声明 cursor-model-picker-v1。没有恢复保证时不删除历史,退出未确认时不释放目录/MCP 所有权。
  • 独立定时任务沿用已有完全访问默认,绑定任务心跳保留任务保存的权限/计划模式。交互式 Cursor 新任务默认权限不变。
  • 回滚可关闭 Cursor 新建入口或撤回实现,不删除原生会话、消息或凭证;已有引擎可继续使用。
  • 参考已关闭 feat(agents): 经官方 ACP 通道原生接入 Cursor Agent,作为第四种 Agent Harness #2386 的 ACP transport/停止思路,未整分支 cherry-pick。协议依据:Cursor 官方 ACP 与 ACP v1。

提交前检查

  • 已 review 最终 diff,并同步官方 main
  • 每个非豁免 commit 带匹配作者的 DCO 签名
  • UI 变化注明设计依据,附有来源提交的 macOS 浅色/深色截图
  • 未提交凭证、令牌或授权文件
  • 文档、生命周期与原生权限边界同步
  • 已区分通过、复跑闭环及未执行的验证
  • iPhone 新包与真实双端验收
  • 远端必需 CI 和维护者正式 Approve

Add Cursor CLI discovery, native ACP runtime, desktop and mobile selection,
session lifecycle integration, model catalog, tests, and explicit limitations.

Refs makecindy#1027
Inspired by the ACP transport and process-group handling in makecindy#2386.

Signed-off-by: Ken <9398ljlj@gmail.com>
@9398-haha
9398-haha marked this pull request as ready for review October 8, 2026 14:30
@9398-haha
9398-haha requested a review from a team as a code owner October 8, 2026 14:30
@greptile-apps

greptile-apps Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 1/5

[High risk] Integrates Cursor Agent as a new AI backend across the system.

建议先修复权限展示、恢复模式、失败启动清理和停用设置,再合并。

Findings

  1. P1 恢复后计划模式不一致 ▶
  2. P1 失败启动失去清理入口 ▶
  3. P1 Cursor 停用设置失效 ▶
  4. P2 Cursor 身份变成 Claude ▶
  5. P2 提前删除探测目录 ▶
Fix with agent prompt
### Issue 1
packages/maker-core/src/agents/cursor/index.ts:236
`session/load` 后没有用原生的 `modes.currentModeId` 初始化 `planMode`,它始终从 `false` 开始。如果保存的 Cursor 会话仍在计划模式,恢复后发送 `planMode: false` 会在这里直接返回,不会调用 `session/set_mode` 切回 `agent`。用户关闭计划模式后,任务仍会按原生计划模式运行。请先读取新建或加载返回的当前模式,再判断是否需要切换。

### Issue 2
packages/maker-core/src/agents/cursor/index.ts:500-502
启动失败后的第二次 `client.close()` 如果也失败,`whenStopped` 就永久拒绝。这个客户端既没有加入 `sessions`,也没有留下可重试的清理记录;随后 `finally` 还会移除启动记录。后续 `dispose()` 无法再停止这个进程或释放它的 MCP 上下文。请保留失败启动的关闭函数,直到退出得到确认,并在再次启动和关闭应用时重试。

### Issue 3
apps/desktop/src/main/maker-host/cursor-model-catalog.ts:15-22
Cursor 模型只加入 `withCursorDiscoveredModels` 返回的目录,但新建、切换和发送的路由检查仍通过 `verdictForModelRoute` 读取原始 `getActiveCatalog()`。原始目录的 Cursor 模型列表为空,`checkDisableAxisRoute` 遇到零个提供该模型的来源会直接放行。因此,用户停用 Cursor 模型或供应商后,直接请求仍能启动新的 Cursor 任务。请让路由检查也读取带原生模型的完整目录,同时保留已运行会话的续跑豁免。

### Issue 4
apps/desktop/src/renderer/lib/makerChatStore.ts:11243-11244
几个转换函数只扩展了类型,没有增加 `cursor` 分支。`dbAgentKindToMakerKind` 在历史加载时把已保存的 Cursor 任务写成 `claude-code`,后续发送配置也按这个错误身份生成。同样的遗漏还出现在 `sessionAgentKindToScheduleAgentKind` 和 `normalizeOrcaDisplayAgentKind`,分别把 Cursor 的定时表单和协作标签显示成 Claude。请补齐这些分支,并增加 Cursor 的转换回归测试。

### Issue 5
apps/desktop/src/main/maker-host/index.ts:3015-3016
模型发现的宿主包装会在 `finally` 中无条件删除工作目录,即使 `discoverModels(directory)` 抛出 `AgentStartupCleanupPendingError`,或探测会话关闭失败。适配器只延迟删除自己创建的目录;这里传入的目录不在它的延迟清理范围内。请让适配器拥有临时目录,或在宿主确认进程退出后再删除,避免运行中的探测进程失去工作目录。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
Summary

本 PR 新增 Cursor 原生 ACP 接入,包括 CLI 检测、模型发现、持久会话、流式事件、审批和取消,并扩展桌面、手机及协作入口。

  • 权限选择器和部分身份转换仍把 Cursor 当作 Claude。
  • 恢复会话时未同步原生计划模式。
  • 失败启动需要保留可重试的清理入口,探测目录也应等退出确认后再删除。
  • 新任务准入未使用原生模型目录,导致 Cursor 停用设置失效。
  • 未执行运行时或视觉验证。
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart LR
  UI[桌面或手机] --> Host[桌面宿主]
  Host --> Adapter[CursorAgent]
  Adapter --> RPC[AcpClient]
  RPC --> CLI[Cursor 原生 CLI]
  CLI --> Events[文本、工具、审批、终态]
  Events --> Host
  Host --> UI
  CLI --> Native[原生会话保存]
  Adapter --> MCP[会话作用域 MCP]
  CLI --> MCP
  Host --> Catalog[原生模型目录]
  Catalog --> UI
Loading

Reviews (1) · Last reviewed commit: "feat: add native Cursor Agent ACP suppor..." · Reviewed by Greptile

Comment thread apps/desktop/src/renderer/lib/makerChatStore.ts
Comment thread packages/maker-core/src/agents/cursor/index.ts
Comment thread packages/maker-core/src/agents/cursor/index.ts Outdated
Comment thread apps/desktop/src/main/maker-host/index.ts Outdated
Comment thread apps/desktop/src/main/maker-host/cursor-model-catalog.ts Outdated
@greptile-apps

greptile-apps Bot commented Oct 8, 2026

Copy link
Copy Markdown

Comments Outside Diff

These findings could not be posted inline.

  • P1 Cursor 权限说明错误 apps/desktop/src/renderer/components/new-chat/PermissionSelector.tsx:86 ▶

    vendorKeyToAgentKind 没有处理 cursor,因此 Cursor 输入框会读取 Claude Code 的权限列表和说明。用户会看到 Cursor 不支持的自动审批、完全访问等选项,而且「默认权限」说明不再提醒工作区编辑可能无需确认。请增加 Cursor 分支,让选项和文案都来自 Cursor 的能力声明。

    function vendorKeyToAgentKind(v: 'cc' | 'codex' | 'pi' | 'cursor'): AgentKind {
      if (v === 'codex') return 'codex';
      if (v === 'pi') return 'pi';
      if (v === 'cursor') return 'cursor';
      return 'claude-code';
    }
    

@MagicLizi

Copy link
Copy Markdown
Contributor

本 PR 命中维护者确认门(产品 / UI 变更、审查规则文档变更、技术架构调整三类触发),已开维护者确认讨论:#5621

请维护者直接在 PR 上 Approve 表示确认通过;需要作者修改则 Request Changes 并写明需要调整的内容。

@MagicLizi MagicLizi added awaiting-discussion 等待维护者讨论(review-pr) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:large-diff 改动量较大(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:redline 改动碰到红线路径(updater / DB schema 等,review-pr 自动维护,仅展示) touches:rules 改动碰到规则 / 规范文档(review-pr 自动维护,仅展示) labels Oct 8, 2026
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Preserve Cursor identity with the mobile remote mark and clear lint diagnostics in touched files.

Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
@MagicLizi MagicLizi added the touches:security 改动碰到安全边界(review-pr 自动维护,仅展示) label Oct 9, 2026
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
@9398-haha 9398-haha changed the title feat: 原生接入 Cursor Agent ACP(#1027) feat(cursor): 原生接入 ACP,支持模型池与审批模式 Oct 9, 2026
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
@9398-haha 9398-haha changed the title feat(cursor): 原生接入 ACP,支持模型池与审批模式 feat(cursor): 原生 ACP 接入,补齐模型、权限与供应商设置 Oct 10, 2026
9398-haha and others added 8 commits October 10, 2026 13:03
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>
Signed-off-by: 9398-haha <9398ljlj@gmail.com>

Co-authored-by: Ken <9398ljlj@gmail.com>
Merge makecindy/cindy main@7c4ba33e0. Keep Cursor model group labels together with the new provider-group usage strings.

Signed-off-by: 9398-haha <9398ljlj@gmail.com>

Co-authored-by: Ken <9398ljlj@gmail.com>
Merge makecindy/cindy main@451599c72. No content conflicts. Keep Cursor native ACP behavior together with upstream agent app update, mobile markdown links, and IM background result delivery.

Signed-off-by: 9398-haha <9398ljlj@gmail.com>

Co-authored-by: Ken <9398ljlj@gmail.com>
Merge makecindy/cindy main@cf61957a9. Keep Cursor agent kinds together with Codex reset credits and the remote agent device id.

Signed-off-by: 9398-haha <9398ljlj@gmail.com>

Co-authored-by: Ken <9398ljlj@gmail.com>
Merge makecindy/cindy main@9b200f938. No content conflicts. Keep Cursor native ACP behavior together with upstream remote work preview, mobile bubble border, merged PR icon color, voice-end keyboard, and command-output history indexing.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Ken <9398ljlj@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-discussion 等待维护者讨论(review-pr) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:large-diff 改动量较大(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:redline 改动碰到红线路径(updater / DB schema 等,review-pr 自动维护,仅展示) touches:rules 改动碰到规则 / 规范文档(review-pr 自动维护,仅展示) touches:security 改动碰到安全边界(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants