Skip to content

feat(ui): child 树渲染、每 child 预算列与 fan-out 执行历史/取消 - #68

Merged
Qiyuanqiii merged 1 commit into
mainfrom
codex/issue-51-ui-followup
Aug 15, 2026
Merged

Qiyuanqiii merged 1 commit into
mainfrom
codex/issue-51-ui-followup

Conversation

@Qiyuanqiii

Copy link
Copy Markdown
Member

背景

#51(PR #67)合入后遗留三个前端展示缺口:Agent 图是平铺列表而非树形、child 预算只有 used/limit 没有剩余额度视角、fan-out 只有"最近一次执行"且没有取消入口。本 PR 补齐,并顺带给出后端已有但前端未做的完整盘点(见文末)。

本次改动

  • child 树渲染:AgentGraphPanel 按 parent_id 渲染 root→child 树形(root 在上,两个 child 缩进挂其下,depth≤1 由准入合同保证)。
  • per-child 预留预算:child 行新增"剩余回合 / 剩余 Tokens"两列(turn_limit - turns_used、token_limit - tokens_used),root 行新增"子槽位"(child_limit)。
  • fan-out 执行历史与取消:
    • 新只读投影 GET /runs/{run_id}/fanout-executions?plan_id={id}(readonly_fanout_executions.v1,含分片表,无文件 manifest/报告 JSON)。
    • 新控制入口 POST /runs/{run_id}/fanout-executions/{execution_id}/cancel(readonly_fanout_cancel.v1,必须显式 confirm_cancel):复用既有 CancelReadOnlyFanoutExecutionRemainder + FinalizeReadOnlyFanoutExecution 与租约栅栏;终端执行幂等返回存储状态。
    • FanoutPanel 每计划展开执行历史,运行中的执行显示 control-token 门控的"取消执行"按钮。
  • Web 客户端新增 getRunFanoutExecutions/cancelRunFanoutExecution 与严格解析器;schema.d.ts 重生成;OpenAPI 新增两个操作与 live-route 测试。

测试覆盖

  • httpapi:openapi 路径/allowlist/validControl/live-route(list 带 plan_id、cancel 以 404 证明路由活体)全绿。
  • Web:59 文件 235 用例通过、typecheck、build。

验证结果

  • go build ./...、go vet ./... 通过;全量 go test -timeout 30m ./...(含 analyzer opt-in)零 FAIL。
  • Web typecheck / vitest / build 通过;docs/openapi.json 与 schema.d.ts 同步。

安全边界与非目标

  • 取消是 control-token + 显式确认的窄操作,不改 fan-out 权限模型(readonly 无写/Shell/网络/再委派不变);UI 不自行提权。
  • 不新增 schema 迁移、不新增执行路径;纯展示 + 复用既有取消方法。

顺带盘点:后端已有但前端未做(审计结论)

  • P0(需要新后端,不只是 UI):PR feat(agent): 模型驱动的有界 child 任务调度 #67 的 child-task 提案缺操作者审阅/准入面——ChildTaskReviewService/AdmitChildTaskProposal 未被任何入口实例化调用,也没有 HTTP 端点或 operator action,提案只能停留在 proposed。建议下一个 PR 补操作者审阅控制面(HTTP + operator action center + Web 审阅对话框)。
  • P1(UI-only):价格快照(/api/v1/models/prices)与 Docker 沙箱(/api/v1/sandbox/docker/*)在 OpenAPI 中但无客户端方法与组件。
  • P2(UI-only):HTTP Skill 安装(client.installSkillPackage 无调用点,UI 只走桌面原生桥)。
  • P3(字段级):Delegation/Application 的 max_children/max_turns_per_child/max_tokens_per_child/stop_code、fan-out 的 scope_path/shard_count/max_output_tokens_per_shard、Activity 的 attempt_id/model_attempt/tool_round、receipt 的 retry_strategy/recovery_action、evidence 的 source_kind/instruction_authorized 等字段在视图里但未渲染;RunView.Budget 未渲染、run 创建不能设预算。

- AgentGraphPanel 按 parent_id 渲染 root→child 树形,child 行增加剩余回合/剩余 Tokens 与根节点子槽位
- 新增 GET /runs/{run_id}/fanout-executions?plan_id= 只读执行历史投影 + POST /runs/{run_id}/fanout-executions/{execution_id}/cancel 取消控制(复用既有 CancelRemainder/Finalize 与租约栅栏,终端执行幂等返回)
- FanoutPanel 每计划展开执行历史与分片表,运行中的执行提供控制侧取消按钮(control token 门控、显式确认)
- Web 客户端新方法+严格解析器、schema.d.ts 重生成、openapi 新操作与 live-route 测试
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant