Skip to content

refactor (tui): 契约直通重构 - 严格对齐 gateway 协议,移除本地二次定义与兼容逻辑 #563

@creatang

Description

@creatang

改造目标

  1. 让 TUI 只消费 gateway 已定义的协议与数据结构,不再在 TUI 侧“再定义一套”。
  2. 保持单版本、强约束,不做历史版本兼容分支。
  3. 出错尽早失败(fail-fast),避免静默降级。

总体策略

  1. internal/gateway/protocol + internal/gateway/contracts 作为唯一契约源。
  2. TUI 保留“展示层模型”,但传输层/调用层全部改为 gateway 类型直通。
  3. 删除本地兜底路径(如本地拼装旧 payload、多层 envelope 猜测)。

具体改造方案(按优先级)

  1. 收敛 Runtime 接口到 gateway 契约
  • 改造 [runtime_contract.go]:
  • 入参优先使用 protocol.RunParams / CompactParams / ExecuteSystemToolParams / ResolvePermissionParams
  • 返回值优先使用 gateway.SessionSummary / gateway.Session / gateway.CompactResult 等。
  • 删除仅为历史兼容存在的方法链路(PrepareUserInputRun),统一走 Submit -> gateway.run
  1. RemoteRuntimeAdapter 改为“薄转发器”
  • 改造 [remote_runtime_adapter.go:
  • 只做三件事:参数合法性校验、调用 gateway、错误透传。
  • 不再在 TUI 侧做业务语义转换(例如本地生成过多 fallback 字段)。
  • Submit 保留 authenticate + bindStream + run,但不再引入额外兼容分支。
  1. 事件流严格按 gateway envelope 解码
  • 改造 [gateway_stream_client.go]:
  • 保持只接受 gateway.event
  • payload_version 改为引用共享常量(建议将版本常量上移到 gateway/protocol,TUI 不再硬编码)。
  • 去掉“多层 payload 猜测”逻辑,固定按 gateway runtime bridge 当前结构解码;不匹配直接报错并停止流。
  1. 启动注入点固定为 gateway runtime
  • 保持 [bootstrap.go]当前远端注入模式,但补充“启动期契约探测”:
  • 启动时执行一次轻量握手(authenticate + bindStream),失败直接退出,不做本地 runtime 回退。
  1. 错误语义统一到 gateway code
  • TUI 错误映射仅识别 protocol.JSONRPCError.Data.GatewayCode,不要再做本地推断。
  • UI 文案层可映射为用户可读提示,但不改变语义。
  1. 清理桥接别名层
  • 评估 [gateway_rpc_client_bridge.go:
  • 若仅 type alias,可直接在 TUI service 引用 internal/gateway/client,减少一层“伪解耦”。
  • 若保留该文件,只保留构造器注入价值,不再重复声明类型别名。

不做的事情(避免过分兼容)

  1. 不支持多 payload_version 并行解析。
  2. 不保留旧字段名/旧方法名 fallback。
  3. 不在 TUI 侧复刻 gateway 的 session/run 绑定策略。
  4. 不在 TUI 侧补偿 gateway 缺失能力(缺啥就报错)。

验收标准

  1. TUI 所有 RPC method 名称来自 protocol.Method* 常量。
  2. TUI 传输层不再定义重复 DTO(以 gateway/protocol 类型为主)。
  3. 事件流只接受当前协议版本,版本不符启动或运行期明确失败。
  4. 关键流程(run/compact/permission/session load)端到端用例通过。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions