Skip to content

[tech-debt][chat] chat message list 命令形态漂移:wukong 硬编码单聊分支成死代码(live v1.0.44 复现) #525

Description

@PeterGuy326

[dws 技术债] chat message list 命令形态漂移:wukong 硬编码统一命令被 envelope 拆分覆盖,硬编码成死代码

复核 2026-06-29(dws v1.0.44):仍开。dws chat message list --user 12345678 实测仍 unknown flag: --user,证明 live 的 list 只认 --group,硬编码 list --user 分支仍是死代码。dws-wukong/wukong/products/chat.go 已涨到 3620 行(原文引用 905-970,行号需重新定位)。

  • 分类(category): 技术债 / discovery-overlay 漂移
  • 归属: dws 仓(dws-wukong + dingtalk-workspace-cli envelope)
  • 优先级: 中(不影响功能正确性,影响 UX 一致性与可维护性)
  • 发现日期: 2026-06-06
  • 关联: ISSUE-1(后端 peerUid gap)。注意:本条与 peerUid 报错无因果关系,修了它不解决 peerUid,见下。

现象

wukong 源码与 live 二进制对 chat message list 的实现形态不一致:

wukong 硬编码(源码意图) live 二进制(envelope 生效)
命令形态 list 统一:--group/--user/--open-dingtalk-id 三选一 list --group;单聊拆成独立 list-direct
单聊实现 Go 智能路由(isOpenDingTalkID 判 D 开头)+ callMCPTool compat shim,implemented:false 裸透传
谁生效 被影子覆盖,死代码 三层仲裁「envelope wins」胜出

证据:

  • 源码 dws-wukong/wukong/products/chat.go:905-970 —— 统一 list,单聊分支 callMCPTool("list_individual_chat_message", {userId/openDingTalkId})
  • live 实测:dws chat message list --user Xunknown flag(live 的 list 只认 --group),证明硬编码 list --user 分支从未执行。
  • live list-direct dry-run:kind:compat_invocation, implemented:false —— 纯 envelope 透传,未走 Go 逻辑。

影响

  1. 认知负担:源码读者以为 list --user 可用,实际不可用;help 文案与真实命令树不一致。
  2. 能力退化:硬编码里的 isOpenDingTalkID 智能路由(D 开头自动当 openDingTalkId)在 envelope 路径里丢失,compat shim 只做裸透传。
  3. 维护风险:一份逻辑两处实现且一处常驻死代码,后续改动易踩空。

修复方向(二选一,需先对齐 owner)

  • (a) 收敛到 envelope:删除 wukong 硬编码 list 的单聊分支与 buildConversationTargetArgs 死代码,命令树以 envelope 为唯一权威;把智能路由逻辑下沉进 envelope/compat 的 pipeline。
  • (b) 收敛到硬编码:让 envelope 不再拆分/覆盖 list,恢复统一命令形态,由 Go 实现兜底。

推荐 (a)——与 _docs/discovery-overlay-authority.md 「envelope 为 runtime 权威」的顶层设计对齐,减少硬编码面。

⚠️ 重要边界

本条不修复单聊查询报错。 wukong 硬编码与 envelope 两条路径都发 userId,都会撞 ISSUE-1 的 peerUid is required。命令形态收敛只解决 UX/可维护性,单聊能恢复可用必须靠 ISSUE-1 后端修复。两条 issue 颗粒度分清、各自闭环,勿混并。

验收标准

dws chat message list --help 与源码实现一致:要么 list 支持 --user 且实测可路由,要么源码删除该死代码分支、文案对齐 list-direct。无「文案说支持、实跑 unknown flag」的撕裂。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions