-
Notifications
You must be signed in to change notification settings - Fork 39
feat: 评估并设计 Claude backend 兼容层(normal mode only) #185
Copy link
Copy link
Closed
Labels
area:codexCodex protocol translation and wrapper integrationCodex protocol translation and wrapper integrationarea:daemonDaemon server, admin API, and runtime controlDaemon server, admin API, and runtime controlenhancementNew feature or requestNew feature or requeststatus:needs-planTechnical investigation is sufficient, but the staged plan is not yet execution-readyTechnical investigation is sufficient, but the staged plan is not yet execution-ready
Milestone
Description
Metadata
Metadata
Assignees
Labels
area:codexCodex protocol translation and wrapper integrationCodex protocol translation and wrapper integrationarea:daemonDaemon server, admin API, and runtime controlDaemon server, admin API, and runtime controlenhancementNew feature or requestNew feature or requeststatus:needs-planTechnical investigation is sufficient, but the staged plan is not yet execution-readyTechnical investigation is sufficient, but the staged plan is not yet execution-ready
背景
#185已完成接入方向调研,当前进入 PoC 方案阶段。本次明确采用“实例级兼容”路线:
目标
范围
非目标
turn.steer与 Codex 精确同语义。thread -> session字段重命名。相关文档
docs/inprogress/claude-backend-integration-plan.mddocs/obsoleted/claude-normal-mode-poc-design.mddocs/obsoleted/claude-provider-protocol-mapping.mddocs/obsoleted/claude-feidex-reassessment.mddocs/general/architecture.mddocs/general/relay-protocol-spec.mddocs/general/remote-surface-state-machine.md涉及文件
internal/core/agentproto/wire.gointernal/core/state/types.gointernal/app/daemon/app_ingress.gointernal/app/wrapper/entry.gointernal/app/wrapper/app.gointernal/core/orchestrator/service_helpers_threads.gointernal/core/orchestrator/service_surface_actions.gointernal/adapter/claude/**(新增)方案阶段(PoC)
阶段 A:兼容性护栏
onHello改为 capability-aware 初始化(不再无条件threads.refresh)。阶段 B:Claude live transport
claude -p --input-format stream-json --output-format stream-json作为当前实现基线。prompt.send/turn.interrupt/request.respond主链路。request.respond按can_use_tool/elicitation两类分开处理。code/message/retryable。阶段 C:session catalog / history plane
threads.refresh/thread.history.read从 live child 分离。threadId在 v1 继续承载 Claudesession_id,但持久键按backend + instance_id + session_id收口。resume(session_id + cwd)成功/失败路径收口。阶段 D:normal mode 命令闭环与显式降级
/new、/use、/list在 Claude 实例下闭环。turn.steer明确 reject/problem + notice,不做 fake steer。threads.refresh不再作为所有 backend 的默认能力假设。model/reasoning/access。阶段 E:稳定化收口
风险与回退
回退策略:
完成标准
2026-04-23 同步更新(文档合并与 UI 语义基座)
docs/inprogress/claude-backend-integration-plan.md。docs/obsoleted/*,保留历史上下文但不再作为执行入口。eventcontractpayload,再进入 orchestrator/projector2026-04-23 二次深调研结论(基于 feidex 最新实现)
本轮基于
https://github.com/yuhuan417/feidex最新main(ff0c522)重新复核,结论是:#185当前不应保持implementable-now,应回到needs-investigation继续收口。关键证据(feidex):
internal/app/commands.go、docs/capabilities.md)。/compact是显式 passthrough(internal/app/backend_runtime_helpers.go)。turn/steer,而是排队新 submission 的近似语义(internal/app/steer.go)。/session fork在session_id尚未 materialize 时允许进入 pending 过渡态,等待下一条消息物化(internal/app/conversation_backend_facade.go、internal/app/commands_test.go)。AskUserQuestion/ExitPlanMode被映射到本地 pending card/request 流程,且 reply 走 backend-specific adapter(internal/app/claude_runtime.go、internal/app/backend_server_request_adapter.go)。internal/app/claude_dynamic_tool_rendering.go)。对本仓库的直接影响:
/append、进行中输入)的语义合同尚未定稿。AskUserQuestion/ExitPlanMode到 canonical request 的映射合同尚未定稿(尤其计划反馈语义)。与当前代码基线的结构缺口(仍未补齐):
agentproto.Capabilities仍只有ThreadsRefresh。app-server)。onHello()仍无条件发送threads.refresh。/mode仍仅normal|vscode。结论:当前阶段应保持
needs-investigation,先完成语义与策略收口,再进入实现。建议范围
#185不再继续作为未拆分调查单;从现在起按A2pre-MVP 路线只承担调度与回卷。#492 -> #493 -> #494 -> #495 -> #497 -> #498。#496继续作为明确的 MVP 决策门提前建好,但在这 6 张 pre-MVP 单都稳定关闭前不进入实现。拆分结构
A. backend identity / capability gate#463B. backend-aware state partition 与 /mode 语义#492C. catalog seam repair(消费 #185 seam,回卷到 #369)#493#185/#369D. Claude 命令策略 / request bridge#494E. backend runtime host pre-MVP seam#495needs-plan;当前只保留 seam-only + lifecycle/reconciliation 闭包F. Claude live transport semantic mapper#497stream-json-> canonicalturn/item/request与 structured progressG. Claude session catalog/history plane#498threads.refresh/thread.history.read/ resume-session semanticsH. Claude normal-mode dev MVP#496推荐顺序
#492#493#494#495#497#498#496讨论 MVP 功能与展现方式,再决定是否开工可并行组
#497与#498在#495seam-only 稳定后可以局部并行。#492 -> #493 -> #494 -> #495 -> #497 -> #498 -> #496。当前风险
#492未先收口,后续 catalog / request / runtime 都会继续建立在旧的 backend 单维假设上。#493直接做 visible Claude,最近审计出的ProductMode / FamilyID / family.default固化点会重新变成真实回归面。#494未先写清 strategy matrix 与 request contract,runtime host 很容易把临时近似写进主链。#495未先吸收 host seam 与 lifecycle/reconciliation,Claude runtime 仍会和 Codex child 管理主骨架缠在一起。#497不单独落 semantic mapper,MVP 很容易退化成 raw protocol 泄漏、伪 Codex 语义或上游预拼 markdown。#498不单独落 session/catalog/history plane,threads.refresh/thread.history.read/ resume 语义会继续被塞回 MVP,形成半死闭包。总调度表
#463)/mode语义#492)/mode语义已完成#493) under#369#185/#369#494)cceeebcc)#495)#497)stream-json/ request / progress / final-output adapter#498)#496)执行决策
#185现在只承担调度、依赖顺序与结果回卷,不再作为单 worker 直做 Claude 母单。implementable-nowworker;当前先继续深调研#497/#498,并把#495的 seam-only closure 写稳。#495/#497/#498默认都需要独立 verifier;#496在进入实现后再决定是否追加 verifier 拆分。当前阶段
当前执行点
已完成
docs/inprogress/claude-backend-integration-plan.md,catalog 设计草案已刷新到docs/draft/backend-aware-command-catalog-design.md。#463已完成 hello/backend/capability gate,并解除最早 blocker。#492、#493、#494、#495、#497、#498、#496。#496已作为“真正开始 MVP 前停下讨论”的统一决策门建立。#492已完成并关闭:backend-aware state partition、workspace defaults backend 分区、surface resume backend 持久化与/mode codex|claude|vscode底层语义已落地。#493已完成并关闭:catalog seam 已收口到CatalogContext + contextual variant主路径,并已回卷到#185/#369。#494已完成并关闭:Claude 命令策略矩阵、request bridge canonical contract 与 final-output 终态合同已落地,并已以cceeebcc回卷到本母单。#495已完成重评并回退到status:needs-plan;确认 runtime host seam 不能继续与 Claude semantic mapper / session plane 混做一张单。#497/#498已创建,用于把 live transport semantic mapper 与 session catalog/history plane 分开研究与收口。当前 blocker
implementable-nowworker:#495仍需 seam-only 重写,#497/#498仍需进一步技术调研。#496必须等待#495/#497/#498的 closure 稳定后,才有资格进入 MVP 功能与展现方式讨论。下一步
#497:把 Claude nativestream-json到 canonicalturn/item/request/progress的映射矩阵写稳。#498:把 session catalog/history/resume plane 的 contract matrix 写稳。#495的 seam-only 执行边界彻底写定,并决定第一个真正可实现的 worker。恢复步骤
总调度表,确认当前没有 ready worker,当前执行点是research-497-498-before-mvp。#495的2026-04-28 重评结论与#497/#498的当前 blocker,确认这轮继续做的是 closure 调研而不是实现。#495/#497/#498至少有一张重新进入implementable-now,才恢复真正编码;否则继续研究和拆单,不要提前进入#496。实现参考
docs/inprogress/claude-backend-integration-plan.md为准;其中第 6 节九项基座(尤其 6.9)定义了 Claude provider 映射、UI 语义归一化与非回归约束。claude -p --input-format stream-json --output-format stream-json;不要按 ACP 落地,remote-control也不是本地 provider 主链路。prompt.send/turn.interrupt/request.respondthreads.refresh/thread.history.readrequest.respond必须按 subtype 分开处理:can_use_toolelicitationturn.steer在 Claude v1 明确不支持;只允许 reject/problem + notice,不允许用interrupt + prompt.send伪装成 steer。threadId承载session_id,但持久状态与缓存键必须带backend + instance_id + session_id。检查参考
threads.refresh。threads.refresh/thread.history.read是否已经与 live child 解耦,在没有运行中 child 时也能工作。request.respond是否没有把 permission 与 elicitation 混成同一条回写路径。turn.steer在 Claude provider 下是显式 rejected/problem,而不是 silent failure 或伪装成其他命令。get_context_usage/ usage 汇总不落到 tick,api_retry之类的可重试过程信号不被上升成 fatal runtime error。收尾参考
docs/inprogress/claude-backend-integration-plan.md。docs/obsoleted/claude-*.md仅保留历史归档,不再承载新的实施结论。docs/general/relay-protocol-spec.md。docs/general/remote-surface-state-machine.md。docs/general/feishu-card-ui-state-machine.md。AGENTS.md或 repo skill。历史调研归档(保留)
展开历史调研与备选方案
背景
当前仓库的 relay / wrapper / orchestrator 大边界本身允许接入多种 agent backend,但产品层和状态层仍明显偏向 Codex app-server 语义。
在重新收窄边界后,本 issue 的前提调整为:
turn/item/request事件模型,而不是先做全仓thread -> session名词重写和上一版判断相比,这个约束变化很重要:
目标
设计并实现一条可演进的 Claude compatibility path,使仓库未来可以在当前架构上同时支持 Codex 与 Claude backend,并满足以下原则:
/list//use//new/ request prompt / token usage / resume 等核心体验要能在能力降级前提下自洽,而不是形成半死流程范围
本 issue 聚焦:
threadID在 Claude backend 下如何映射到 official session handle非目标
/follow、VS Code focus、same-turn steer 语义thread -> session的命名迁移相关文档
仓库内:
docs/general/architecture.mddocs/general/relay-protocol-spec.mddocs/general/codex-mcp-app-server-protocol.mddocs/general/remote-surface-state-machine.mdClaude 官方文档:
https://code.claude.com/docs/en/agent-sdk/overviewhttps://code.claude.com/docs/en/agent-sdk/sessionshttps://code.claude.com/docs/en/agent-sdk/streaming-vs-single-modehttps://code.claude.com/docs/en/agent-sdk/user-inputhttps://code.claude.com/docs/en/agent-sdk/streaming-outputhttps://code.claude.com/docs/en/agent-sdk/cost-trackinghttps://code.claude.com/docs/en/headlesshttps://code.claude.com/docs/en/cli-usage涉及文件
internal/app/wrapper/app.gointernal/core/agentproto/types.gointernal/core/agentproto/wire.gointernal/core/state/types.gointernal/core/orchestrator/service.gointernal/core/orchestrator/service_surface_actions.gointernal/core/orchestrator/service_surface_attach.gointernal/core/orchestrator/service_surface_thread_selection.gointernal/core/orchestrator/service_thread_global.gointernal/core/orchestrator/service_token_usage.gointernal/app/daemon/surface_resume_state.go建议范围
建议按阶段推进:
阶段 0:接入路径定型
接入路径已定型为:
Direct SDK bridge(wrapper 通过轻量桥接进程调用官方@anthropic-ai/claude-agent-sdk,走流式query()+canUseTool回调)claude -p --stream-json作为生产主链路,只保留为诊断/回归对照手段阶段 0 的目标从“选型”改为“桥接契约固化 + PoC 验证”:
turn.steer)的 command matrix 与 UI 提示策略阶段 1:能力基座与 normal-mode 边界收敛
ThreadsRefreshthreadID字段承载 Claude session ID阶段 2:Claude adapter MVP(normal mode only)
turn.steer、VS Code follow、VS Code focus阶段 3:normal mode 产品闭环
/list//use//new/ status / resume 在 Claude backend 下形成自洽体验完成标准
满足以下条件后可关闭:
重新调研结论(仅看 normal mode)
结论摘要
在只保留 normal mode 的前提下,Claude 与当前产品模型的匹配度明显高于上一版判断。
新的判断是:
Direct SDK bridge,主要工作转为桥接细节与状态一致性收敛turn/item/request模型无需大改就能承接 Claude高匹配能力
Session / resume / fork / enumerate
continue、resume by ID、forklistSessions()/getSessionMessages()/getSessionInfo()/renameSession()/tagSession()threadID可以先直接承载 Claudesession_id流式输出与 turn/item 映射
stream-json、StreamEvent、AssistantMessage、ResultMessagemessage_start/content_block_start|delta|stop/message_delta/message_stop这些事件与当前turn.started、item.started/delta/completed、turn.completed的 canonical 结构基本可对齐approval / AskUserQuestion
canUseToolAskUserQuestion直接提供问题与选项结构request.started/request.respond的产品抽象高度一致streaming input / interrupt / queued messages
turn.steer,但“执行中继续补充信息/打断重定向”并非做不到usage / cost
total_cost_usd、modelUsage中等匹配能力
/new/new的基础要求很低:只要有 workspace key / cwd 就能开始新会话/useresume by ID,/use就能成立/list//useallsurface resume / reconnect
resume=session_idcwd必须匹配token usage 汇总
thread.token_usage.updated的“总上下文量”语义,需要自己聚合或降级展示低匹配或应明确降级的能力
vscode mode / follow-local / focus-retarget
精确等价的
turn.steerturn.steer(expectedTurnId)的精确同语义深入调研(接入细节与可行性)
A. 已确认的实现方向(针对本仓库)
query({ prompt: AsyncIterable, options })canUseToolresume: session_idthreadId字段承载会话句柄(阶段 1 不做全仓字段改名),并在 metadata 显式标记provider=claude与cwd绑定信息。B. 与当前代码现状的差距(已定位)
internal/app/wrapper/entry.go当前硬编码只支持codex app-server入口,需要扩成 provider-aware wrapper 入口。internal/app/wrapper/app.go当前实例 hello 只上报ThreadsRefresh单能力,无法表达turn.steer、request 交互、session catalog 等 capability 差异。internal/adapter/当前只有codextranslator;Claude 需要新增并行 adapter,而不是在 codex translator 上堆分支。internal/app/daemon/app_ingress.go在 hello 后默认发送threads.refresh,需要改为 capability-aware(不支持时走降级路径)。C. 可行性判断(normal mode only)
prompt -> turn/item stream -> turn completed主链路、approval/question roundtrip、interrupt、resume(同 cwd)。/list//use//useall,需要先定义 session catalog 来源(SDK API + 本地会话文件扫描策略)与刷新时机。turn.steer(expectedTurnId)强一致语义;第一版应 capability-gate 并给出用户可见提示。D. 阶段 0 PoC 验收口径(新增)
session_id + cwdresume 成功;故意更换 cwd 时返回可识别错误并给出提示。turn.steer在 Claude provider 下返回明确“能力不支持/已降级”而非 silent failure。E. 建议的 capability matrix(阶段 1 草案)
建议把 hello capabilities 从“单布尔位”扩成可枚举能力集,至少包含:
supports_threads_refreshsupports_turn_steersupports_request_respondsupports_session_catalogsupports_resume_by_thread_idrequires_cwd_for_resumesupports_vscode_modeClaude normal-mode 目标默认值建议:
supports_threads_refresh = false(改走 session catalog 刷新命令)supports_turn_steer = false(显式降级)supports_request_respond = truesupports_session_catalog = truesupports_resume_by_thread_id = truerequires_cwd_for_resume = truesupports_vscode_mode = falseF. bridge 协议最小草图(阶段 0 输出物)
为避免一次性改动过大,建议先定义最小双向消息集:
session.start_or_resumeprompt.sendturn.interruptrequest.respondsession.listsession.boundturn.started/item.started/item.delta/item.completed/turn.completed|failedrequest.started/request.resolvedusage.updatedsessions.snapshotproblem.reportedrequest_idcode + message + retryablesession_id + cwd尝试恢复,失败时上报明确失败原因当前 blocker
接入路径已定型后,当前 blocker 变为 桥接细节与状态一致性尚未验证完成:
turn.steer、threads.refresh)因此本 issue 仍保持
needs-investigation,但 investigation 的目标已收敛为“实现前的桥接 PoC 与降级策略定稿”,不再是接入路径选型本身。重新估算工作量
在只做 normal mode 的前提下,工作量低于上一版:
/list//use//new/ resume / request / usage 较自洽:约 2~4 周2026-04-13 复核结论(历史结论,已被 2026-04-23 二次深调研替代)
结论更新为:可以开始阶段 0。
原因不是“所有细节都已经完全确定”,而是当前剩余问题已经从“是否存在可靠接入路径”收缩为“按既定路径完成桥接契约与 capability 基座实现”。这两类问题适合通过阶段 0 的实现与测试来收敛,不再构成继续停留在
needs-investigation的理由。为什么现在可以开工
canUseTool、AskUserQuestion、partial streaming、usage 都有明确承接面;其中 resume 受cwd约束、session 文件本地化,这些限制已经可直接转成产品/状态约束,而不是未知风险。ThreadsRefreshthreads.refreshrequest.respond链路本身已较 provider-agnostic,可直接复用turn.steer已有 ack/reject 回路,可改成 capability-gate + 显式降级,而不是另起一套状态模型prompt.send、turn.interrupt、request.respond、resume:阶段 0/1 可直接做threads.refresh:改成 provider-aware,不再默认要求所有 backend 实现turn.steer:第一版明确不支持,走 rejected/problem + UI 提示阶段 0 最小实现合同(建议直接按此开工)
协议与实例能力
agentproto.Capabilities,至少覆盖:threadsRefreshturnSteerrequestRespondsessionCatalogresumeByThreadIDrequiresCWDForResumevscodeModedaemon hello 启动分支
onHello()不再无条件发送threads.refreshthreadsRefresh能力时走现有刷新路径sessionCatalog时改走新 catalog 刷新命令/路径wrapper/provider 入口
Direct SDK bridge落一条最小 stdio/NDJSON 契约:session.start_or_resume、prompt.send、turn.interrupt、request.respond、session.listcommand matrix 与降级规则
request.respond:保持 canonical 结构,不做 provider-special caseturn.steer:阶段 0 明确 capability-gate;在 Claude provider 下应走 command reject / problem,并把 notice 文案做成“当前 backend 暂不支持执行中追加输入,请等待当前轮结束后再发送下一条”这一类显式提示threads.refresh:不能再作为系统级默认能力写死在协议假设里阶段 0 非目标
thread -> session字段重命名turn.steer阶段 0 建议首批涉及文件
internal/core/agentproto/wire.gointernal/core/state/types.gointernal/app/daemon/app_ingress.gointernal/app/wrapper/entry.gointernal/app/wrapper/app.gointernal/core/orchestrator/service_helpers_threads.gointernal/core/orchestrator/service_surface_actions.gointernal/core/orchestrator/service_snapshot_runtime.gointernal/adapter/claude/**(新增)阶段 0 必测点
threads.refreshrequest.started/request.respond闭环返回session_id + cwdresume 成功;故意错 cwd 时得到 machine-readable 错误,并投影成用户可见提示turn.steer在 Claude provider 下不会 silent failure,会稳定 rejected 并恢复 queue / notice 状态当前状态更新
因此本 issue 从 2026-04-13 起不再继续维持
status:needs-investigation。后续默认按“阶段 0 可开工”处理;如果实现中发现 bridge 契约或官方 SDK 行为与当前结论不符,再单独回退状态。2026-04-13 补充调研:PoC 不干扰现有功能的隔离方案
目标是:Claude PoC 上线前,现有 Codex 路径行为保持不变。基于当前代码复核,结论是可以做到,但要先加“强隔离护栏”。
关键风险(本次新增)
onHello()会对所有实例无条件发送threads.refresh,并把实例计入 startup refresh pending。initialThreadsRefreshRoundComplete是全局门控;若某个 PoC 实例长期不产出threads.snapshot,可能影响其他 surface 的恢复判定。Hello.Capabilities还没进入 daemon/orchestrator 的调度决策,默认行为仍是“按 Codex 能力假设发送命令”。隔离原则(必须同时满足)
source=claude(或等价专用 source),禁止复用vscode/headless语义。阶段 0 需要先落地的“防干扰护栏”
wrapper app-serverCodex 路径不改语义;threads.refresh仅对supports_threads_refresh=true实例发送。threads.refresh时标记 pending;turn.steer、threads.refresh等不支持能力返回明确 rejected/problem + 用户可见提示;新增完成标准(不干扰验收)
在原有完成标准基础上,新增以下硬验收:
Codex + Claude实例时,Claude 实例不会阻塞 Codex 的 surface resume/headless restore 判定。2026-04-13 需求澄清(以本节为准)
你最新确认的方向是:双后端兼容优先,而不是激进隔离优先。
具体落地口径:
turn.steer),允许直接返回显式错误/拒绝,并给用户可见提示。对应实现策略更新:
command_rejected/problem + UI notice,而不是沉默或跨实例 fallback。对应验收补充:
2026-04-13 补充约束:backend 数据分区与并行语义
新增硬约束:
/list和/use中混用。/list默认只看当前 attached instance 的 backend 视图;若有汇总视图也必须按 backend 分组。/use仅在当前 backend 解析会话 ID;跨 backend ID 必须显式报错,不做隐式跳转。该约束已同步到方案文档:
docs/inprogress/claude-normal-mode-poc-design.md(5.4、6.1、阶段与验收条目)2026-04-13 补充约束:
/mode作为 backend 产品入口新增产品决策:
/mode codex= 当前 normal 语义;/mode normal兼容为codex别名。/mode vscode保持现有语义。/mode claude切到 Claude normal 语义。切换
codex <-> claude的状态处理:目标是让用户始终知道“当前正在和哪个 backend 交互”,并避免 backend 会话态串扰。
该决策已同步到方案文档:
docs/inprogress/claude-normal-mode-poc-design.md(5.5、6.2、阶段与验收条目)2026-04-13 补充约束:旧版本数据升级
实现时必须显式考虑旧版本持久化数据的兼容/升级。
原则:
codex解释。重点数据面:
该约束已同步到方案文档:
docs/inprogress/claude-normal-mode-poc-design.md(5.6、阶段 A、验收与风险)2026-04-13 深化设计补充(主方案继续细化)
本轮继续深化了主方案,不新增子 issue,重点补齐了下面几类此前仍偏抽象的点:
Backend与Source:Backend表达会话协议面(codex/claude)Source表达实例来源(vscode/headless/claude)surface -> attached instance -> backend/capabilities -> mode gate -> command gate -> dispatch/reject/mode codex|claude|vscode切换契约codex <-> claude切换前若仍有 active turn / pending request / dispatching queue,默认拒绝切换。/mode状态清理测试,以及 backend-aware workspace 参数读写闭环。已同步到方案文档:
docs/inprogress/claude-normal-mode-poc-design.md(5.7、6.0、6.2 深化内容,以及阶段/验收更新)2026-04-26 最新复核(当前仓库代码 + 最新 feidex)
本轮按当前 master 代码与
yuhuan417/feidex最新main重新复核,结论更新如下:#185继续作为“Claude backend 基座 / provider seam”母单保留,暂不新开新的 Claude backend 母单。agentproto.Capabilities仍只有ThreadsRefreshapp-server*codex.TranslatoronHello()仍无条件发送threads.refreshInstanceRecord/WorkspaceDefaults仍无 backend 维度/modeparser 仍只有normal|vscodeabddb95: Claude runtime 退出时需要 completed reconciliation,不能假设一定收到单一 completed 事件6d05ba7+b454943: plan approve/reject 这类卡片交互应优先走 callback response inline replace,而不是异步 patch8c895e9: quiet/progress 文件聚合必须按稳定全路径去重,不能只按显示文件名ff0c522+docs/capabilities.md: “Claude 缺很多本地产品能力”的旧判断已经失效;backend-aware help/menu filter、/history、/model、/effort、/session permissions、/session fork、/compactpassthrough 都已被 upstream 证明可落地status:needs-investigation,但 investigation 的重点已经进一步收口为:docs/inprogress/claude-backend-integration-plan.md(Updated:2026-04-26)。2026-04-26 与
#369的 ownership 切分为避免 backend seam 与 catalog seam 继续重叠,本 issue 明确拥有:
agentproto.CapabilitiesonHello()capability gateInstanceRecord.BackendWorkspaceDefaults/mode codex|claude|vscode的真实状态切换语义本 issue 不拥有:
上述内容归
#369持有;#369的首张子 issue#462只应消费本 issue 已提供的 seam,不应回头再拥有协议字段或状态 schema 设计。当前依赖关系:
#462已因#463落地完成 unblock 判定;后续由#369继续消费这段 seam。2026-04-27 状态重判(workflow)
按当前代码、文档与依赖关系重新判定后,
#185已不再适合继续维持为未拆分调查单。结论:
status:needs-investigation收口到status:needs-plan。#463已实现 hello/backend/capability gate,并解除#462的最近 blocker。2026-04-29
#500拆分落地#500已从母单草图落成 4 张真实子单:#501、#502、#503、#504。#501(Claude profile schema + launch contract)。#500继续保持status:needs-plan,只承担母 issue 调度;后续执行顺序为#501 -> #502 -> #503 -> #504。2026-04-29 Claude MVP refresh delta follow-up
docs/inprogress/claude-backend-integration-plan.md第7.6 / 12.1节为当前 Claude MVP 定义 source of truth。#496代表上一轮 dev-visible Claude MVP 闭包;它的完成标准与当前新决议已经不一致,不再作为这轮 delta 的继续执行单。#510作为本轮执行入口:它只承担“重审当前实现偏移 + 生成执行拆分”,不直接承担生产补丁。#510;在它产出稳定的偏移清单与执行闭包前,不要直接重开#496或口头驱动零散补丁。2026-04-29
#510审计收口与 next ready unit 更新#510已完成当前主线的事实审计与执行拆分,不再直接承担生产补丁。#510现已正式拆出两张实现子单:#512、#513。#512:Claude 命令面刷新 + backend-only target filtering#513:workspace-preserving backend switch + new-thread-ready + bad-state escape 收口#511继续保持 parked follow-up,只承接resume headless必要性 / 产品语义 / 残留清理 contract 的后续重审,不阻塞当前主线。#512;恢复时不要再回到#496,也不要停留在#510做补丁式直改。2026-04-29
#512完成后 next ready unit 更新#512已完成实现、验证、push 与关单。#510继续作为 Claude MVP refresh delta 的调度母单保留。#513。#511继续保持 parked follow-up,不阻塞当前主线。2026-04-29
#513完成后#510close-out ready#510已完成并关闭,结果回卷如下:#510已完成本轮 Claude MVP refresh delta 的事实审计、执行拆分与子单调度。#512/#513已全部完成:#512收口了 Claude 命令面刷新与 backend-only target filtering。#513收口了Claude <-> Codex normal的 workspace-preserving backend switch、new_thread_ready默认落点,以及 workspace-level normal-surface fresh-start recovery。docs/inprogress/claude-backend-integration-plan.md与docs/general/remote-surface-state-machine.md已与当前 live behavior 对齐。#511继续保持 parked follow-up,不阻塞本轮#510关单。#513更新为#510close-out;完成母单 close-out 后,不自动把#511提升为主线执行单。resume headless的产品语义与残留清理 contract,再单独恢复#511。