Files
heicodedebug/chek/2026-06-02_功能线总问题台账.md

22 KiB
Raw Permalink Blame History

Heicode 功能线总问题台账(逐跳对账)

日期:2026-06-02 方法:按主要功能线做端到端「逐跳对账」——每跳核对生产者写了什么、消费者是否真消费、是否落地/占位/路由不一致。 范围:HeiCode-Swarm、heicode-mananger、heicode-macos-release、heicode-winos-release 关联:chek/2026-06-01_*(P1–P7、标准清单)、chek/2026-06-02_产品维度复审-能力覆盖度.md 性质:只读代码核查 + 部分子代理追踪;标注置信度;未实跑的结论已注明需运行时确认。


0. 一句话总览

后端控制面/契约成熟,但客户端没接新统一 API、关键链路在生产默认配置下退化、回调与路由多处不一致。最致命的是:P1“假完成”修复未到达客户端、macOS 首聊大概率失败、客户端仍打已废弃的 /api/agnet/*。

⚠️ 重要 caveat:多处“Swarm 路由不存在/不匹配”是对 HeiCode-Swarm 仓库默认配置核的;对接文档记录生产烟测可通,生产很可能跑另一套 Runtime(agent_management) 或 env 改了路径。这类项必须实跑确认,不能只凭读码定论。


1. 速览矩阵(每格 = 问题数)

功能线 P0 P1 P2 总体
F1 登录/配对/模型/对话 1 3 2 🔴 win 勉强 / mac 高危
F2 Sub 敏捷全链路 3 3 1 🔴
F3 蜂群(Swarm) 2 3 1 🔴
F4 凭证/审批/资源注入 0 3 3 🟠
F5 产物生命周期 4 1 2 🔴
F6 计费/用量 0 4 2 🟠
F7 客户端 vs Claude Code 0 2 3 🟠
F8 Swarm 鲁棒性 0 2 1 🟠
F9 企业驾驶舱 0 1 0 🔴 覆盖 ~15%

图例:严重度 🔴P0 阻断 / 🟠P1 假成功·数据错 / 🟡P2 契约漂移;置信度 ⬛代码实证 / ◧子代理+抽查 / ⬜待实跑确认


2. 详细总表(一条问题一行)

编号 线 级 问题 用户可见现象 根因 证据(文件:行) 修复方向 置信
1.1 F1 🔴 mac 客户端 anthropic preset 不走 V2 proxy、OAuth 下配对用空 JWT mac 用户能登录但首聊直接失败 mac/win 客户端实现分叉,mac 未对齐 V2 代理与配对 bearer heicode-macos-release/.../providerService.ts:385-394、heicode-auth.ts:964-967,981 mac 对齐 win 的 proxy+encryptedFetch;或明天只放 win ◧
1.2 F1 🟠 登录与配对竞态(配对异步) win 登录后立刻发消息→401 not_paired devicePairBootstrap 非 await heicode-winos-release/.../heicode-auth.ts:993-999、handler.ts:534-538 await 配对或 UI 提示“配对中” ⬛
1.3 F1 🟠 邮箱密码登录 Step2 URL typo 走该路径 100% 404(UI 已隐藏,影响低) from-agnet vs from-agent heicode-auth.ts:546 vs api-router.go:88 改 URL ⬛
1.4 F1 🟡 登录后刷新模型依赖 V2 配对 设置页拉模型可能 401 legacy sk 已清,未配对则签名失败 providerService.ts:577-579 配对未完成时回退/提示 ◧
1.5 F1 🟡 默认 gpt-5.4 是否在用户 group/channel 首聊 4xx/502,错误文案被泛化 模型清单与产线 channel 未保证一致 providerPresets.json:22-26 上线前核对生产 channel ⬜
1.6 F1 🟡 时钟漂移>2min / 多实例无 Redis nonce 偶发 V2 401 / 重放保护弱 诊断头未在 UI 翻译;nonce 进程内 device_signature.go:204、nonce_store.go:15 UI 翻译 drift;生产配 Redis ◧
2.1 F2 🔴 客户端不消费 display_status “只给方案”的任务仍显示已完成(P1 修复对用户无效) 客户端自算 deployment.status,全仓零引用 display_status heicodeTaskStore.ts:1226-1234 vs agent_runtime_client.go:788-808 客户端改用 display_status ⬛
2.2 F2 🔴 客户端代理打废弃 /api/agnet/user/* Sub 任务建/查/审批可能 404 Manager 已改名 /api/agent/*,客户端未跟 heicode-tasks.ts:231-305 vs api-router.go:510-523 客户端切 /api/agent 或 unified /api/heicode/* ⬛
2.3 F2 🔴 Swarm 缺 sub create / /status / content 路由 reconcile 难收敛、产物下载失败 Manager 默认路径与 Swarm 仓库不符(生产或用别的 Runtime) agent_runtime_client.go:100,126 vs main.py:1159-1161 实跑确认生产 Runtime;对齐路径 ⬜
2.4 F2 🟠 Runtime 默认单 general 任务 用户选的后端/多角色被忽略 DAG 默认关,build_task_descriptions 退化 swarm_runtime.py:586-600 开 DAG 或按 role 建任务 ⬛
2.5 F2 🟠 模型/billing 不受 plan 约束 实际用的模型≠用户/计划所选 Agent 用容器 env(ANTHROPIC_API_KEY+env model) task_executor.py:31-39 Runtime 按 plan 注入模型/凭证 ⬛
2.6 F2 🟠 usage 回调复用 budget.alert schema 不符 用量/usage 回调可能被 Manager 拒 Runtime 发 threshold Manager 要 threshold_pct main.py:941 vs agent_callback.go:486 统一事件 schema ◧
2.7 F2 🟡 plan 字段“写了没人读” 功能名存实亡 agile_context/grants/allowed_model_ids/deliverable 下游未消费 见 §4 各跳 定结构化契约并消费 ⬛
3.1 F3 🔴 桌面无蜂群入口 用户无法真正发起蜂群 建任务写死 sub_agile,不调蜂群 API heicodeTaskStore.ts:1502-1506,1690 客户端加蜂群入口+走 /api/heicode/swarm ⬛
3.2 F3 🔴 生产默认 SWARM_RUNTIME_ENABLED=false 蜂群只落库不执行 dispatch 被开关挡住 agent_control_plane.go:1267-1268 生产开关 + 配 SWARM_RUNTIME_* ◧
3.3 F3 🟠 DAG 默认关 “多角色协作”退化成单 Agent ENABLE_SUBTASK_HANDOFF=false swarm_runtime.py:77-83、k8s/agent-deployment-full.yaml:12 灰度开启并验证 ⬛
3.4 F3 🟠 handoff.completed 缺 from_role/to_role handoff 完成回调可能被拒/不落库 Runtime payload 与 Manager schema 不符 main.py:779-786 vs agent_callback.go:478-479 补字段或放宽 schema ◧
3.5 F3 🟠 capability 用 role 名、Agent 注册 general 任务永久 pending 假死 能力集不匹配,队列饿死 task_queue.py:151-156 能力命名对齐或回退匹配 ◧
3.6 F3 🟡 task/handoff 不驱动 deployment 状态;UI 文案 Sub Agile 化 看不到任务图/编队 无 task graph 投影;replace(swarm→Sub Agile) heicodeTaskStore.ts:666 任务图投影 + 文案分流 ⬛
4.1 F4 🟠 高危操作 Manager 不阻断部署 高危可未审批就执行 创建即 accepted+dispatch,RequiresUserApproval 不参与 agent_control_plane.go:1067-1122 Manager 侧 gate pending 审批 ⬛
4.2 F4 🟠 lease 是 lease:// 占位 审批“通过”但无真凭证 不 mint、不读 KV agent_approval.go:213-228 approve 时按 secret_ref 派生短期凭证 ⬛
4.3 F4 🟠 Agent 用全局 GIT_TOKEN,不读 grant/lease 多用户串仓/越权、撤销无效 凭证走进程级 env,非 per-task lease git_operations.py:32-33 Runtime 注入任务级凭证给 Agent ⬛
4.4 F4 🟡 revoke 不同步 Runtime 撤销后运行中仍可访问 approve 有 sync、revoke 无 agent_approval.go:339-349 revoke 推送 Runtime/作废 lease ⬛
4.5 F4 🟡 Runtime payload 不按 status 过滤 grant 撤销的 grant 仍可能下发 manifest 过滤 active,payload 不过滤 agent_runtime_client.go:302 统一过滤规则 ◧
4.6 F4 🟡 自填 azkv 引用仅验前缀 可能错引他人密钥(取决 KV RBAC) 不验 vault/归属 resource.go:170-171 校验归属+KV RBAC ◧
5.1 F5 🔴 双模型错位:真实文件 vs markdown 解析 project_folder 常空/假 Runtime 写文件+元数据,Manager 按单 markdown parse task_executor.py:529-564 vs heicode_project_artifacts.go:92-95 二选一:Runtime 出 markdown 或 Manager 读 files API ◧
5.2 F5 🔴 files_modified 未聚合到顶层 真有代码却被判 summary/document subtask 级字段未汇总 main.py:683-685 顶层聚合 files_modified ⬛
5.3 F5 🔴 Swarm 无 artifact content 路由 产物下载不通 Manager 代理目标不存在 agent_runtime_client.go:549-631 vs main.py 实跑确认;Runtime 补 content 路由 ⬜
5.4 F5 🔴 客户端未接 unified 产物 API 看不到项目树/只能下单文件 仍用 legacy 单 blob,零引用 is_project heicode-tasks.ts:251-259 客户端接 manifest/files/archive ⬛
5.5 F5 🟠 revision consume 不回 Runtime 本地改完续跑不生效 只改 DB 状态,不推 Runtime heicode_task_create.go:193-218、heicode_artifact_edits.go:169-181 Runtime 读取新基线 ⬛
5.6 F5 🟡 parseMarkdownProject 无 .. 净化;冲突检测可绕过 潜在 zip-slip;并发覆盖 未消毒路径;BaseRevision=0 跳过检测 heicode_project_artifacts.go:216-220,367 路径消毒 + 强制 base hash ⬛
5.7 F5 🔴 云部署 pending_worker 无消费者 产物→上线闭环为 0 Deploy Worker 未接 heicode_cloud_deploy.go:14-17,123 接 Worker 或 UI 标“未就绪” ⬛
6.1 F6 🟠 蜂群直连 API key 不经 relay 平台漏收 Agent 用 env key 直连厂商 task_executor.py:31-53 强制走网关或回写扣费 ◧
6.2 F6 🟠 Runtime tokens_used 不触发扣费 用量有显示、账本无对应 consume callback 无 DecreaseUserQuota agent_callback.go:648-746 回调对账扣费 ⬛
6.3 F6 🟠 信任旁路可透支 余额可被扣成负数 预扣=0 仍结算,quota 无下限 billing_session.go:281-314、user.go:927 结算加余额下限/拦截 ◧
6.4 F6 🟡 Realtime 双轨扣费 可能多扣 入口预扣 + 流式 PostWss + Settle 叠加 relay-openai.go:452-556、websocket.go:44 核对日志,去重 ⬜
6.5 F6 🟡 billing_context 不参与扣费主体 任务模型调用可能扣错账户 relay 用 token.UserId,不用 newapi_user_ref agent_runtime_client.go:397 扣费绑定 correlation/归属 ◧
6.6 F6 🟡 EU/X/5·8 资源费未实现;budget 不 enforce 平台资源费收不到 仅创建时校验,执行中只按时长告警 agent_control_plane.go:697-698、main.py:882-904 实现资源计费/硬上限 ⬛
7.1 F7 🟠 四档模型全映射 gpt-5.4 不是真 Claude,体验“变笨” preset 写死 providerPresets.json:22-26 提供真 Claude 通道 ⬛
7.2 F7 🟠 关闭 thinking/WebSearch/tool search/缓存 招牌能力没了 非 1P URL + proxy 路径判定关闭 thinking.ts:104-127、WebSearchTool.ts:172-192、toolSearch.ts:299-310 1P 通道恢复;开 tool search ◧
7.3 F7 🟡 高级压缩 ant-only stub 长会话更易钝/胀 reactive/cached compact 被 DCE reactiveCompact.ts、cachedMicrocompact.ts 用真实源码替换 stub ◧
7.4 F7 🟡 AGENTS.md 未加载 规则没被吃进上下文 不在 CLAUDE.md 发现链 claudemd.ts 加入发现链 ◧
7.5 F7 🟡 四跳延迟 + 空闲冷启动 桌面卡顿/重连慢 多跳架构 + prewarm 激进 ws/handler.ts:736-748 合并连接/延长 prewarm ◧
8.1 F8 🟠 无原子领取/启动 reconcile 重启后任务双跑、重复分支 无 Redis 锁/租约;30s orphan 重派 task_queue.py:114,158,372、main.py:244 原子领取 + 启动重建 ◧
8.2 F8 🟠 失败重试无退避 重试风暴 fail_task 立即 requeue task_queue.py:270 指数退避 ⬛
8.3 F8 🟡 checkpoint 模块未接线 进程级恢复不可靠 写了无人调用 checkpoint_manager.py 接线或删 ⬛
9.1 F9 🟠 驾驶舱指标几乎空 企业看到的是假/空进度 进度 snapshot 硬编码 0;CockpitView dead code agent_control_plane.go:1832-1860 基于真实事件聚合最小指标集 ⬛

2. F1 登录 / 配对 / 模型 / 对话

# 严重度 问题 证据
1.1 🔴 P0(mac) macOS anthropic preset 不走 V2 proxy(直连 + sentinel key),OAuth 下配对用空 JWT → 登录成功但发不出对话 heicode-macos-release/.../providerService.ts:385-394、heicode-auth.ts:964-967,981
1.2 🟠 P1(win) 配对异步,登录后立即开聊 → not_paired 401(竞态) heicode-winos-release/.../heicode-auth.ts:993-999、handler.ts:534-538
1.3 🟠 P1 邮箱密码登录 Step2 URL typo:客户端 from-agnet vs Manager from-agent→404(UI 已隐藏,影响低) heicode-auth.ts:546 vs api-router.go:88
1.4 🟡 登录后刷新模型依赖 V2 配对,legacy sk 已清→可能 401 providerService.ts:577-579
1.5 🟡 默认 gpt-5.4 是否在用户 group/channel 决定首聊成败;错误被泛化文案掩盖 providerPresets.json:22-26
1.6 🟡 时钟漂移>2min / nonce 多实例无 Redis → V2 401,UI 未专门翻译 device_signature.go:204、nonce_store.go:15

Manager 侧 V2(pubkey/pair/TokenAuth/relay/诊断头)整体真落地;问题集中在客户端,且 mac/win 实现分叉。


3. F2 Sub 敏捷全链路

# 严重度 问题 证据
2.1 🔴 P0 客户端不消费 display_status,自算 deployment.status → P1“假完成”修复对用户无效,仍显示已完成 客户端全仓零引用 display_status;heicodeTaskStore.ts:1226-1234 vs Manager agent_runtime_client.go:788-808
2.2 🔴 P0 客户端代理仍打 /api/agnet/user/*,Manager 已改名 /api/agent/*(文档称 agnet 已 404) heicode-tasks.ts:231-305 vs api-router.go:510-523
2.3 🔴 P0(待实跑) Manager 默认 sub create 路径 / /api/swarms/{id}/status / artifact content 在 Swarm 仓库不存在→reconcile/下载失败(生产可能用别的 Runtime) agent_runtime_client.go:100,126 vs main.py:1159-1161
2.4 🟠 P1 Runtime 默认单 general 任务,忽略用户选的 backend/多 role swarm_runtime.py:586-600
2.5 🟠 P1 模型/billing 不受 plan 约束,Agent 用容器 env(ANTHROPIC_API_KEY+env model) task_executor.py:31-39
2.6 🟠 P1 usage 回调复用 budget.alert,与 Manager schema(threshold_pct) 不符→可能被拒 main.py:941 vs agent_callback.go:486
2.7 🟡 P2 agile_context(stage/checkpoint/acceptance)、resource_grants、allowed_model_ids、deliverable 多为“写了没人读” 见逐跳台账

4. F3 蜂群(Swarm)

# 严重度 问题 证据
3.1 🔴 P0 桌面无蜂群产品入口,从不调用 /api/heicode/swarm/tasks 或 /api/swarms;建任务写死 sub_agile heicodeTaskStore.ts:1502-1506,1690
3.2 🔴 P0 生产默认 SWARM_RUNTIME_ENABLED=false→只落库不 dispatch agent_control_plane.go:1267-1268
3.3 🟠 P1 DAG 默认关(ENABLE_SUBTASK_HANDOFF=false),蜂群退化为单 Agent 单任务 swarm_runtime.py:77-83、k8s/agent-deployment-full.yaml:12
3.4 🟠 P1 handoff.completed 缺 from_role/to_role,Manager schema 必填→可能被拒/不落库 main.py:779-786 vs agent_callback.go:478-479
3.5 🟠 P1 capability 用 role 名、Agent 注册 general → 任务永久 pending 假死 task_queue.py:151-156、agent/main.py 默认 capabilities
3.6 🟡 P2 task./handoff. 不驱动 deployment 状态;无任务图结构化展示;UI 把 swarm 文案替换成 Sub Agile applyAgentCallbackDeploymentState、heicodeTaskStore.ts:666

5. F4 凭证 / 审批 / 资源注入(安全)

# 严重度 问题 证据
4.1 🟠 P1 高危操作 Manager 不阻断部署,立即 accepted+dispatch agent_control_plane.go:1067-1122;RequiresUserApproval 仅 struct
4.2 🟠 P1 lease 是 lease:// 占位,不 mint 真凭证、不读 KV agent_approval.go:213-228
4.3 🟠 P1 Agent 用全局 GIT_USERNAME/GIT_TOKEN 环境变量,不读 grant/lease/secret_ref → 串仓/越权 git_operations.py:32-33;agent 无 grant 读取
4.4 🟡 P2 revoke lease/grant 不同步 Runtime(approve 有 sync、revoke 无)→撤销滞后 agent_approval.go:339-349
4.5 🟡 P2 Runtime payload 不按 status 过滤 grant;manifest 过滤 active(不一致) agent_runtime_client.go:302 vs agent_control_plane.go:880
4.6 🟡 用户可自填 azkv:// 引用,仅验前缀不验 vault 归属 resource.go:170-171

6. F5 产物生命周期

# 严重度 问题 证据
5.1 🔴 P0 双模型错位:Runtime 写真实文件 + 元数据,Manager 却按“单 markdown”parse → project_folder 常空/假 task_executor.py:529-564 vs heicode_project_artifacts.go:92-95,176-238
5.2 🔴 P0 files_modified 只在 subtask 级、未聚合到顶层 → 常判 document/summary-only → is_project:false main.py:683-685
5.3 🔴 P0(待实跑) Swarm 无 /artifacts/{id}/content 路由,Manager 代理目标不存在 → 下载不通 agent_runtime_client.go:549-631 vs main.py 无 content 路由
5.4 🔴 P0 客户端未接 unified 产物 API(manifest/files/archive/local-edits),只用 legacy 单 blob heicode-tasks.ts:251-259、客户端零引用 is_project/project_folder
5.5 🟠 P1 revision consume 只改 DB 状态,不推 Runtime、不合并 manifest(revision 恒=1),续跑不生效 heicode_task_create.go:193-218、heicode_artifact_edits.go:169-181
5.6 🟡 P2 parseMarkdownProject 无 .. 净化(潜在 zip-slip);冲突检测 BaseRevision=0 可绕过 heicode_project_artifacts.go:216-220,367
5.7 🔴 云部署 pending_worker 后无 Worker 消费 → 产物→上线闭环为 0 heicode_cloud_deploy.go:14-17,123

7. F6 计费 / 用量 / 额度

扣费在 Manager relay 真落地(PreConsume gate → 上游 usage → SettleBilling delta),按 Token 所属 user.id 扣。以下是风险点:

# 严重度 问题(多付/漏收/扣错) 证据
6.1 🟠 P1(漏收) 蜂群/Runtime 若用独立 API key 直连厂商、不经 relay → 不扣用户 quota task_executor.py:31-53;callback 无 DecreaseUserQuota
6.2 🟠 P1(漏收) Runtime 回传 tokens_used 只入库/告警,不触发扣费 agent_callback.go:648-746
6.3 🟠 P1(多付) 信任旁路预扣=0 但结算仍扣,quota 无下限→可透支/负数 billing_session.go:281-314、user.go:927
6.4 🟡 P1(多付) Realtime 入口预扣 + 流式 PostWssConsumeQuota + 最终 Settle → 叠加扣费空间(需日志核) relay-openai.go:452-556、websocket.go:44
6.5 🟡 P2(扣错人) billing_context.newapi_user_ref/correlation 不参与扣费主体映射;Runtime 服务 token 调网关会扣服务账号 agent_runtime_client.go:397;relay 用 token.UserId
6.6 🟡 Agnet 资源费(EU/X/5·8 上限)未实现;budget 仅创建时校验、执行中只按时长告警 agent_control_plane.go:697-698、main.py:882-904

8. F7 客户端 vs Claude Code(体验)

# 严重度 问题 证据
7.1 🟠 四档模型全映射 gpt-5.4,非真 Sonnet/Opus/Haiku providerPresets.json:22-26
7.2 🟠 非 1P URL + proxy 路径关闭 thinking / WebSearch / tool search / 高级 prompt caching thinking.ts:104-127、WebSearchTool.ts:172-192、toolSearch.ts:299-310
7.3 🟡 reactive/cached compact、history snip、context collapse 等高级压缩是 ant-only stub reactiveCompact.ts、cachedMicrocompact.ts(__stubMissing)
7.4 🟡 AGENTS.md 未纳入 CLAUDE.md 发现链 claudemd.ts
7.5 🟡 桌面四跳延迟 + 空闲停子进程冷启动 ws/handler.ts:736-748

9. F8 Swarm 鲁棒性 / F9 企业能力

  • F8:无 Redis 原子领取/租约;Orchestrator 启动无 reconcile,重启 30s 后可能把在跑任务重新入队→双跑;checkpoint 模块写了未接线;失败重试无退避。证据:task_queue.py:114,158,372、main.py:244、checkpoint_manager.py。
  • F9:项目进度/里程碑/Bug/ETA/风险/质量趋势后端聚合与前端页面基本缺失;进度 snapshot failure_rate/avg_duration 硬编码 0;CockpitView dead code。证据:agent_control_plane.go:1832-1860。审计链路已实现。

10. 上线最关键 5 条(按“明天会不会翻车”排序)

  1. mac 首聊失败(F1.1) → 建议明天只放 Windows。
  2. 客户端不读 display_status(F2.1) → “假完成”照旧;小改、应抢修。
  3. 客户端打 /api/agnet/*(F2.2/F3.1) → Sub/蜂群任务从客户端可能 404;需确认 Manager 是否留别名。
  4. 产物链路双模型错位 + content 不通(F5.1/5.3/5.4) → “拿代码/下载工程包”这条 demo 路径可能空。
  5. win 配对竞态(F1.2) → 登录后稍等再开聊,或改成 await。

这 5 条里 1/2/5 是纯客户端↔Manager、可本地冒烟确认;3/4 含“生产可能用别的 Runtime”的 caveat,必须实跑。


11. 方法论说明(为什么这次更全)

  • 抽样审计(顺问题翻)只看到“Manager 修了 P1”;逐跳对账(生产者↔消费者)才发现“客户端没接 = 没修”。
  • 凡“写了没人读 / 校验了不使用 / 路由不一致 / 硬编码占位”均单列。
  • 代码审计天花板:跨服务路由/运行时镜像差异必须实跑确认(本台账已标注 caveat 项)。

只读核查结论,证据可于对应仓库 文件:行 复核;标注“待实跑”的项需运行时验证。