215 lines
22 KiB
Markdown
215 lines
22 KiB
Markdown
# 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 项)。
|
||
|
||
---
|
||
|
||
*只读核查结论,证据可于对应仓库 `文件:行` 复核;标注“待实跑”的项需运行时验证。*
|