fischer-agentkit/docs/plans/2026-06-12-023-feat-fronten...

30 KiB
Raw Blame History

date status origin type
2026-06-12 active docs/brainstorms/2026-06-12-frontend-productization-requirements.md feat

Summary

对 Fischer AgentKit 前端三个核心界面(可视化编排器、监控数据看板、知识库管理)进行产品级重建,补齐后端 API 缺口终端、设置、工作流执行历史、KB 文档管理),引入 ECharts 图表库,抽取前端 API 公共基类,实现 Ant Design Vue 和 ECharts 按需引入,使整体达到面向外部用户交付的产品化标准。

Problem Frame

AgentKit 后端能力丰富但前端停留在 70% 完成度的内部工具水平。可视化编排器拖拽放置未完成、并行节点缺失;进化仪表盘用原生 SVG 画折线图无交互无实时推送;知识库上传数据回填有 bug、文档管理不完整。后端存在多个 API 缺口终端、设置、执行历史、KB 文档管理),前端重建依赖这些 API 补齐。产品化交付需要前后端协同推进,三个模块并行达到可交付水平。


Requirements Traceability

R-ID 需求摘要 覆盖单元
R1 拖拽放置功能完整可用 U1
R2 并行节点自定义组件 U1
R3 条件分支可视化引导 U1
R4 撤销/重做支持 U2
R5 工作流执行动画 U3
R6 工作流执行历史列表 U4
R7 ECharts 替换原生 SVG U5
R8 进化仪表盘实时推送 U6
R9 经验时间线筛选修复 U5
R10 全局概览页 U7
R11 用量统计面板 U7
R12 文档上传数据回填修复 U8
R13 文档列表与删除 U9
R14 信息源同步触发 U9
R15 信息源配置更新 U9
R16 检索高级选项 U9
R17 终端 API 实现 U10
R18 设置 API 实现 U11
R19 工作流 Skill 真实执行 U4
R20 前端 API 公共基类 U12
R21 Ant Design Vue 按需引入 U12
R22 ECharts 按需引入 U12

Key Technical Decisions

KTD1. 终端 API 安全策略:白名单 + 用户确认 + 可加入白名单。 复用 ShellTool_SAFE_COMMAND_PREFIXES_is_dangerous() 检测逻辑。白名单内命令直接执行;非白名单命令通过 WebSocket 推送确认请求,用户确认后执行,确认时可选择将命令加入白名单。白名单存储在服务端内存中(与 ShellTool 一致),不持久化到配置文件。

KTD2. 工作流执行引擎改造Skill 阶段接入 SkillRegistry。_execute_workflow 的 skill 类型分支中,通过 app.state.skill_registry 查找并执行对应 Skill将结果写入 stage_results。Parallel 阶段使用 asyncio.gather() 并行执行子阶段。Condition 阶段增加分支跳过逻辑(不满足条件的下游阶段标记为 skipped

KTD3. ECharts 按需引入策略。 使用 ECharts 5.x 的 tree-shakable APIecharts/use + 手动注册所需图表类型和组件),配合 Vite 的自然 tree-shaking。不引入全量 echarts 包。需引入LineChart、BarChart、PieChart、TooltipComponent、LegendComponent、GridComponent、DataZoomComponent。

KTD4. 前端 API 层统一class 风格基类。 将 6 个 API 文件统一为 class 风格(与现有 ApiClientWorkflowApiClientEvolutionApiClient 一致),提取公共 request<T>() 方法到 BaseApiClient,各模块继承并指定 baseUrl。WebSocket 创建逻辑也统一到基类。

KTD5. 撤销/重做实现:命令模式 + 栈。 使用命令模式Command Pattern封装画布编辑操作AddNode、DeleteNode、AddEdge、DeleteEdge、UpdateProperty维护 undo/redo 两个栈。每次操作执行时压入 undo 栈并清空 redo 栈,撤销时从 undo 弹出执行 inverse 并压入 redo重做反之。

KTD6. 进化仪表盘 WebSocket 推送激活。evolution_dashboard.py 的 REST 端点中,写操作完成后调用 _broadcast_event()。前端在 EvolutionView 挂载时建立 WebSocket 连接按频道订阅experiences/metrics/pitfalls/optimizations收到推送后调用对应 store 方法刷新数据。


High-Level Technical Design

flowchart TB
    subgraph Frontend["前端 (Vue 3 + TypeScript)"]
        WF[工作流编排器] --> WFStore[WorkflowStore]
        EV[进化仪表盘] --> EVStore[EvolutionStore]
        KB[知识库管理] --> KBStore[KnowledgeStore]
        TM[终端] --> TMStore[TerminalStore]
        ST[设置] --> STStore[SettingsStore]

        WFStore --> API[BaseApiClient]
        EVStore --> API
        KBStore --> API
        TMStore --> API
        STStore --> API

        API --> HTTP[REST API]
        API --> WS[WebSocket]
    end

    subgraph Backend["后端 (FastAPI)"]
        HTTP --> WFRoutes[Workflow Routes]
        HTTP --> EVDRoutes[Evolution Dashboard Routes]
        HTTP --> KBRoutes[KB Management Routes]
        HTTP --> TMRoutes[Terminal Routes]
        HTTP --> STRoutes[Settings Routes]

        WS --> WFWS[Workflow WS]
        WS --> EVWS[Evolution WS]
        WS --> TMWS[Terminal WS]

        WFRoutes --> WFEngine[Workflow Execution Engine]
        TMRoutes --> PTY[PTYSession]
        TMRoutes --> Security[ShellTool 白名单]
        STRoutes --> Config[Config Hot Reload]
        WFEngine --> SkillReg[SkillRegistry]
    end

Implementation Units

U1. 工作流编排器核心修复

Goal: 修复拖拽放置、添加并行节点组件、实现条件分支可视化引导,使编排器基本可用

Requirements: R1, R2, R3

Dependencies:

Files:

  • src/agentkit/server/frontend/src/components/workflow/FlowCanvas.vue -- 修复 onDrop添加节点到画布
  • src/agentkit/server/frontend/src/components/workflow/NodePalette.vue -- 无需修改(拖拽发起端已正常)
  • src/agentkit/server/frontend/src/components/workflow/ParallelNode.vue -- 新建并行节点自定义组件
  • src/agentkit/server/frontend/src/components/workflow/ConditionNode.vue -- 修改条件节点,添加"是/否"端口标签
  • src/agentkit/server/frontend/src/stores/workflow.ts -- addNode 支持 parallel 类型,条件分支端口映射
  • src/agentkit/server/frontend/src/views/WorkflowView.vue -- 注册 parallel 节点类型,监听 drop 事件

Approach:

  1. 修复 FlowCanvas.vue 的 onDrop:调用 store.addNode(nodeType, position) 将节点添加到画布,位置对齐 15px 网格
  2. 新建 ParallelNode.vue绿色主题自定义组件显示并行图标和最大并行数包含输入端口和输出端口
  3. 在 FlowCanvas.vue 的 nodeTypes 中注册 parallel: ParallelNode
  4. 修改 ConditionNode.vue两个输出端口分别标注"是"和"否"标签,使用 Handle 组件的 idposition 属性区分
  5. 修改 workflowSerializer.ts序列化时将条件节点的边映射到 branch_targetstrue/false反序列化时还原

Patterns to follow: 现有 SkillNode.vue、ConditionNode.vue、ApprovalNode.vue 的组件结构

Test scenarios:

  • 拖拽技能节点到画布,节点出现在正确位置且对齐网格
  • 拖拽并行节点到画布,渲染为绿色自定义组件
  • 拖拽条件节点到画布,"是/否"端口标签可见
  • 从条件节点"是"端口连线到目标节点,序列化后 branch_targets 包含 true 分支
  • 拖拽到画布外区域,节点不被创建
  • 连续拖拽 3 个不同类型节点,位置均正确

Verification: 前端 dev server 启动后,在工作流页面可拖拽创建所有 4 种节点,条件节点端口标注正确,序列化/反序列化后属性不丢失


U2. 工作流撤销/重做

Goal: 实现画布编辑操作的撤销/重做功能

Requirements: R4

Dependencies: U1

Files:

  • src/agentkit/server/frontend/src/stores/workflow.ts -- 添加 undo/redo 栈和命令执行逻辑
  • src/agentkit/server/frontend/src/components/workflow/FlowCanvas.vue -- 注册 Ctrl+Z / Ctrl+Shift+Z 快捷键
  • src/agentkit/server/frontend/src/components/workflow/PropertyPanel.vue -- 属性修改操作入栈

Approach:

  1. 定义 Command 接口:{ execute(), undo() }
  2. 实现 AddNodeCommand、DeleteNodeCommand、AddEdgeCommand、DeleteEdgeCommand、UpdatePropertyCommand
  3. WorkflowStore 增加 undoStack: Command[]redoStack: Command[]
  4. 每次操作执行时创建 Command 压入 undoStack清空 redoStack
  5. undo() 从 undoStack 弹出执行 command.undo(),压入 redoStack
  6. redo() 从 redoStack 弹出执行 command.execute(),压入 undoStack
  7. FlowCanvas 注册 onKeyDown 监听 Ctrl+Z / Ctrl+Shift+Z

Patterns to follow: Vue Flow 官方示例中的 undo/redo 实现

Test scenarios:

  • 添加节点后 Ctrl+Z节点从画布消失
  • 删除节点后 Ctrl+Z节点恢复原位
  • 连线后 Ctrl+Z连线消失
  • 修改属性后 Ctrl+Z属性恢复原值
  • 撤销后 Ctrl+Shift+Z操作重做
  • 连续 5 次操作后全部撤销再全部重做,画布状态一致

Verification: 在工作流编辑器中执行各种操作后Ctrl+Z/Ctrl+Shift+Z 可正确撤销/重做


U3. 工作流执行动画

Goal: 工作流执行时画布节点实时显示状态动画

Requirements: R5

Dependencies: U1

Files:

  • src/agentkit/server/frontend/src/stores/workflow.ts -- 接入 WebSocket更新节点状态
  • src/agentkit/server/frontend/src/components/workflow/FlowCanvas.vue -- 根据节点状态渲染动画样式
  • src/agentkit/server/frontend/src/components/workflow/SkillNode.vue -- 添加状态样式(运行中脉冲、完成绿色、失败红色)
  • src/agentkit/server/frontend/src/components/workflow/ConditionNode.vue -- 添加状态样式
  • src/agentkit/server/frontend/src/components/workflow/ApprovalNode.vue -- 添加等待图标样式
  • src/agentkit/server/frontend/src/components/workflow/ParallelNode.vue -- 添加状态样式

Approach:

  1. WorkflowStore 建立 WebSocket 连接(复用 createWorkflowWebSocket),订阅执行事件
  2. 收到 stage_started 事件时,更新对应节点的 data.status = 'running'
  3. 收到 stage_completed 事件时,更新 data.status = 'completed'
  4. 收到 stage_failed 事件时,更新 data.status = 'failed'
  5. 收到 approval_required 事件时,更新 data.status = 'waiting_approval'
  6. 各节点组件根据 data.status 渲染不同样式running 脉冲动画、completed 绿色勾选、failed 红色错误、waiting_approval 等待图标
  7. 替换当前的轮询机制为 WebSocket 推送

Patterns to follow: 现有 WorkflowApi 的 createWorkflowWebSocket 方法

Test scenarios:

  • 执行工作流后,当前阶段节点显示脉冲动画
  • 阶段完成后节点变为绿色勾选
  • 阶段失败后节点变为红色错误
  • 审批节点暂停时显示等待图标
  • 未执行节点保持默认样式
  • WebSocket 断开后自动重连

Verification: 执行工作流时,画布节点实时反映执行状态,延迟不超过 1 秒


U4. 工作流执行历史与 Skill 真实执行

Goal: 后端新增执行历史 API工作流 Skill 阶段调用真实 Skill 执行

Requirements: R6, R19

Dependencies: U3

Files:

  • src/agentkit/server/routes/workflows.py -- 新增执行历史端点,改造 skill/parallel 阶段执行逻辑
  • src/agentkit/orchestrator/workflow_schema.py -- WorkflowStore 增加按 workflow_id 查询执行记录方法
  • src/agentkit/server/frontend/src/api/workflow.ts -- 新增 listExecutions 方法
  • src/agentkit/server/frontend/src/stores/workflow.ts -- 加载执行历史
  • src/agentkit/server/frontend/src/views/WorkflowView.vue -- 执行历史表格展示
  • tests/unit/server/test_workflow_routes.py -- 新增测试

Approach:

  1. WorkflowStore 新增 list_executions(workflow_id) 方法,从内存存储中过滤
  2. 后端新增 GET /workflows/{workflow_id}/executions 端点,返回分页执行记录
  3. 改造 _execute_workflow 中 skill 类型分支:通过 app.state.skill_registry 查找 Skill调用 skill.execute() 或通过 AgentPool 分发任务
  4. 改造 parallel 类型分支:使用 asyncio.gather() 并行执行子阶段
  5. 前端新增执行历史面板展示表格execution_id、状态、开始/结束时间),支持展开查看阶段结果

Patterns to follow: 现有 test_workflow_routes.py 的 fixture 和测试组织模式

Test scenarios:

  • GET /workflows/{id}/executions 返回指定工作流的执行记录列表
  • Skill 阶段执行返回真实输出而非 dry_run 模拟数据
  • Skill 执行失败时阶段状态标记为 failed
  • Parallel 阶段并行执行子阶段
  • 前端执行历史表格正确展示记录
  • 空历史时显示空状态提示

Verification: 执行包含 skill 阶段的工作流后,执行历史中可查看真实 Skill 输出


U5. ECharts 图表替换与筛选修复

Goal: 用 ECharts 替换原生 SVG 图表,修复经验时间线筛选 bug

Requirements: R7, R9

Dependencies: U12ECharts 按需引入需先完成)

Files:

  • src/agentkit/server/frontend/src/components/evolution/MetricsChart.vue -- 用 ECharts 重写
  • src/agentkit/server/frontend/src/views/EvolutionView.vue -- 修复 onExperienceFilter
  • src/agentkit/server/frontend/src/utils/echarts.ts -- 新建 ECharts 按需引入配置

Approach:

  1. 新建 utils/echarts.ts:按需注册 LineChart、BarChart、PieChart、TooltipComponent、LegendComponent、GridComponent、DataZoomComponent导出 use 函数
  2. 重写 MetricsChart.vue使用 ECharts 折线图,配置 tooltip、legend、dataZoom自适应容器宽度ResizeObserver
  3. 修复 EvolutionView.vue 的 onExperienceFilter:正确传递 outcome 参数(store.loadExperiences(outcome || undefined)),同时修正 loadExperiences 的参数语义(从 taskType 改为 outcome
  4. 删除原生 SVG 绘制代码

Patterns to follow: ECharts 5.x 按需引入官方文档

Test scenarios:

  • 指标趋势图使用 ECharts 渲染,无原生 SVG 代码残留
  • 鼠标悬停数据点显示 tooltip
  • 点击图例切换显示/隐藏趋势线
  • 时间周期切换后图表正确刷新
  • 图表自适应容器宽度
  • 选择"成功"筛选后仅显示 success 记录
  • 选择"失败"筛选后仅显示 failure 记录

Verification: 进化仪表盘页面图表交互正常,筛选功能生效


U6. 进化仪表盘实时 WebSocket 推送

Goal: 激活后端 WebSocket 推送,前端接收后自动刷新面板

Requirements: R8

Dependencies: U5

Files:

  • src/agentkit/server/routes/evolution_dashboard.py -- 在写操作后调用 _broadcast_event
  • src/agentkit/server/frontend/src/stores/evolution.ts -- 建立 WebSocket 连接,处理推送事件
  • src/agentkit/server/frontend/src/views/EvolutionView.vue -- 挂载时连接 WebSocket卸载时断开
  • tests/unit/server/test_evolution_dashboard.py -- 新增 WebSocket 推送测试

Approach:

  1. 后端:在 POST /evolution/trigger、经验记录新增、指标更新等写操作完成后调用 _broadcast_event(connections, event_type, data)
  2. 前端 EvolutionStore增加 connectWebSocket()disconnectWebSocket() 方法
  3. WebSocket 消息处理:收到 experience_added 刷新经验时间线,收到 metrics_updated 刷新趋势图,收到 pitfall_detected 刷新避坑预警
  4. EvolutionView onMounted 时调用 connectWebSocket()onUnmounted 时调用 disconnectWebSocket()
  5. 断线重连:最多 3 次,间隔 5 秒

Patterns to follow: 现有 workflow WebSocket 连接模式(createWorkflowWebSocket

Test scenarios:

  • WebSocket 连接建立后收到 subscribed 确认
  • 新经验记录产生后,经验时间线在 2 秒内自动追加
  • 指标更新后趋势图自动刷新
  • WebSocket 断开后自动重连(最多 3 次)
  • 页面卸载时 WebSocket 正确断开

Verification: 打开进化仪表盘,触发进化操作后页面自动刷新


U7. 全局概览页与用量统计面板

Goal: 新增进化模块首页概览和 LLM 用量统计面板

Requirements: R10, R11

Dependencies: U5

Files:

  • src/agentkit/server/frontend/src/views/EvolutionView.vue -- 重构为带子路由的布局
  • src/agentkit/server/frontend/src/components/evolution/DashboardOverview.vue -- 新建概览页
  • src/agentkit/server/frontend/src/components/evolution/UsagePanel.vue -- 新建用量统计面板
  • src/agentkit/server/frontend/src/router/index.ts -- 添加进化子路由
  • src/agentkit/server/frontend/src/api/evolution.ts -- 新增用量统计 API 调用

Approach:

  1. 重构 EvolutionView 为容器布局:左侧导航(概览/经验/指标/避坑/路径优化/用量统计),右侧内容区
  2. 新建 DashboardOverview.vue4 个摘要卡片总任务数、Agent 活跃数、LLM 用量、质量通过率),数据从 /metrics/health 端点聚合
  3. 新建 UsagePanel.vueECharts 折线图展示 Token 用量趋势(按 Provider 分组),摘要卡片展示请求成功率和平均延迟,时间范围选择器
  4. 路由:/evolution 默认跳转到 /evolution/overview

Patterns to follow: 现有 EvolutionView 的面板布局模式

Test scenarios:

  • 概览页展示 4 个摘要卡片,数据来自后端 API
  • 每个卡片可点击跳转到对应子面板
  • 页面加载时显示 loading 状态
  • 数据为空时显示零值
  • 用量统计折线图按 Provider 分组显示
  • 时间范围切换后图表刷新
  • 无数据时显示空状态提示

Verification: 访问 /evolution 默认显示概览页,各卡片数据正确,可跳转到子面板


U8. 知识库上传数据回填修复

Goal: 修复文档上传后使用后端返回的真实数据

Requirements: R12

Dependencies:

Files:

  • src/agentkit/server/frontend/src/components/kb/DocumentUpload.vue -- 使用后端返回值
  • src/agentkit/server/frontend/src/stores/knowledge.ts -- uploadDocument 返回后端数据

Approach:

  1. 修改 uploadDocument store 方法返回后端响应数据document_id、chunks、status
  2. 修改 DocumentUpload.vue 的 handleUpload 回调:使用后端返回的 document_id 和 chunks 替换 Date.now() 伪造值
  3. 上传失败时不将文档添加到列表,显示错误提示

Patterns to follow: 现有上传流程的 FormData + custom-request 模式

Test scenarios:

  • 上传文档后列表显示后端返回的真实 document_id
  • 分块数显示后端返回的 chunks 值
  • 上传多个文档后每个 id 唯一
  • 上传失败时文档不出现在列表中

Verification: 上传文档后列表数据与后端返回值一致


U9. 知识库文档管理与检索增强

Goal: 补齐后端 KB 文档管理 API前端实现文档列表/删除、信息源同步/更新、检索高级选项

Requirements: R13, R14, R15, R16

Dependencies: U8

Files:

  • src/agentkit/server/routes/kb_management.py -- 新增文档列表/删除/同步/更新端点,检索支持高级参数
  • src/agentkit/server/frontend/src/api/kb.ts -- 新增 API 调用方法
  • src/agentkit/server/frontend/src/components/kb/DocumentUpload.vue -- 文档列表和删除功能
  • src/agentkit/server/frontend/src/components/kb/SourceConfig.vue -- 同步按钮和编辑功能
  • src/agentkit/server/frontend/src/components/kb/SearchTest.vue -- 高级选项折叠面板
  • tests/unit/server/test_kb_management.py -- 新增测试

Approach:

  1. 后端新增 GET /kb-management/documents:返回文档列表(从 _source_store.list_documents() 暴露)
  2. 后端新增 DELETE /kb-management/documents/{document_id}:从存储中删除文档
  3. 后端新增 POST /kb-management/sources/{source_id}/sync:触发外部源同步(飞书/Confluence返回同步状态
  4. 后端新增 PUT /kb-management/sources/{source_id}:更新信息源配置
  5. 后端 POST /kb-management/search 增加 source_idstop_kstrategy 参数
  6. 前端 DocumentUpload加载文档列表删除按钮带确认弹窗
  7. 前端 SourceConfig每行添加"同步"和"编辑"按钮
  8. 前端 SearchTest新增"高级选项"折叠面板信息源多选、top_k 输入、策略选择)

Patterns to follow: 现有 kb_management.py 的路由和存储模式

Test scenarios:

  • GET /kb-management/documents 返回文档列表
  • DELETE /kb-management/documents/{id} 删除成功后文档不存在
  • POST /kb-management/sources/{id}/sync 触发同步并返回状态
  • PUT /kb-management/sources/{id} 更新配置后返回新对象
  • 检索请求带 source_ids/top_k/strategy 参数时后端正确处理
  • 前端文档列表正确展示,删除后列表刷新
  • 同步按钮 loading 状态正确
  • 高级选项参数随检索请求发送

Verification: 知识库页面可完整管理文档和信息源,检索支持高级选项


U10. 终端 API 实现

Goal: 后端新增终端路由模块,对接 PTYSession前端终端页面可用

Requirements: R17

Dependencies:

Files:

  • src/agentkit/server/routes/terminal.py -- 新建终端路由模块
  • src/agentkit/server/app.py -- 注册终端路由
  • src/agentkit/server/frontend/src/api/terminal.ts -- 适配新 API
  • src/agentkit/server/frontend/src/stores/terminal.ts -- 对接 WebSocket
  • src/agentkit/server/frontend/src/views/TerminalView.vue -- 集成 xterm.js
  • tests/unit/server/test_terminal_routes.py -- 新建测试

Approach:

  1. 新建 routes/terminal.py,实现 4 个端点:
    • POST /terminal/execute:创建 PTYSession 执行命令,白名单检查,非白名单命令返回需确认状态
    • GET /terminal/sessions:返回活跃会话列表
    • GET /terminal/sessions/{session_id}/history:返回命令历史
    • WS /terminal/ws:实时命令输入/输出流,非白名单命令推送确认请求,用户确认后执行,确认时可选择加入白名单
  2. 安全策略:复用 ShellTool_is_dangerous() 检测逻辑,白名单内命令直接执行,非白名单通过 WebSocket 推送确认请求
  3. 白名单管理:服务端内存维护可扩展白名单(用户确认时选择加入的命令),不持久化
  4. 前端集成 xterm.js需新增依赖通过 WebSocket 连接实现交互式终端

Patterns to follow: 现有 routes/chat.py 的 WebSocket 端点模式;tools/shell.py 的白名单机制

Test scenarios:

  • POST /terminal/execute 执行白名单命令返回输出
  • POST /terminal/execute 非白名单命令返回需确认状态
  • WebSocket 连接后可交互式执行命令
  • 非白名单命令推送确认请求,确认后执行
  • 确认时选择加入白名单后,后续相同命令直接执行
  • GET /terminal/sessions 返回活跃会话列表
  • GET /terminal/sessions/{id}/history 返回命令历史

Verification: 前端终端页面可执行命令、查看输出、确认非白名单命令


U11. 设置 API 实现

Goal: 后端新增设置路由模块,前端 Settings 页面可读写配置

Requirements: R18

Dependencies:

Files:

  • src/agentkit/server/routes/settings.py -- 新建设置路由模块
  • src/agentkit/server/app.py -- 注册设置路由
  • src/agentkit/server/frontend/src/api/settings.ts -- 新建设置 API
  • src/agentkit/server/frontend/src/stores/settings.ts -- 对接 API
  • src/agentkit/server/frontend/src/views/SettingsView.vue -- 对接真实 API
  • tests/unit/server/test_settings_routes.py -- 新建测试

Approach:

  1. 新建 routes/settings.py,实现 4 组端点:
    • GET/PUT /settings/llm:读写 LLM 配置Provider 列表、默认模型、别名GET 不暴露 API Key 明文
    • GET/PUT /settings/skills:读写技能路径配置
    • GET/PUT /settings/kb:读写知识库连接配置
    • GET/PUT /settings/general读写通用设置日志级别、Server 端口等)
  2. PUT 操作触发配置热重载(复用 _on_config_change 机制)
  3. 前端 SettingsView 对接真实 API替换当前内存数据

Patterns to follow: 现有 app.py_on_config_change 热重载机制

Test scenarios:

  • GET /settings/llm 返回 LLM 配置API Key 被脱敏
  • PUT /settings/llm 更新配置后触发热重载
  • GET/PUT /settings/skills 读写技能路径
  • GET/PUT /settings/kb 读写知识库配置
  • GET/PUT /settings/general 读写通用设置
  • 前端 Settings 页面可展示和修改配置
  • 配置修改后无需重启服务即生效

Verification: 前端 Settings 页面可读写所有配置项,修改后立即生效


U12. 前端基础设施改进

Goal: 抽取 API 公共基类,实现 Ant Design Vue 和 ECharts 按需引入

Requirements: R20, R21, R22

Dependencies: 无(应最先实施,其他单元依赖其产出)

Files:

  • src/agentkit/server/frontend/src/api/base.ts -- 新建 API 基类
  • src/agentkit/server/frontend/src/api/client.ts -- 继承基类
  • src/agentkit/server/frontend/src/api/workflow.ts -- 继承基类
  • src/agentkit/server/frontend/src/api/evolution.ts -- 继承基类
  • src/agentkit/server/frontend/src/api/kb.ts -- 重构为 class 风格继承基类
  • src/agentkit/server/frontend/src/api/terminal.ts -- 重构为 class 风格继承基类
  • src/agentkit/server/frontend/src/api/skills.ts -- 重构为 class 风格继承基类
  • src/agentkit/server/frontend/vite.config.ts -- 添加 unplugin 插件
  • src/agentkit/server/frontend/package.json -- 新增依赖
  • src/agentkit/server/frontend/src/main.ts -- 移除 app.use(Antd)

Approach:

  1. 新建 api/base.tsBaseApiClient 类,包含 request<T>(method, path, options) 方法(统一 baseURL、超时、错误处理、响应拦截createWebSocket(path) 方法
  2. 6 个 API 文件重构为继承 BaseApiClient,指定各自的 baseUrl
  3. 安装 unplugin-vue-componentsunplugin-auto-import,配置 Vite 插件实现 Ant Design Vue 按需引入
  4. main.ts 移除 app.use(Antd) 全量注册
  5. 安装 echarts,按需引入配置(在 U5 的 utils/echarts.ts 中完成)

Patterns to follow: 现有 ApiClientWorkflowApiClientEvolutionApiClient 的 class 风格

Test scenarios:

  • BaseApiClient 的 request 方法统一处理错误和响应
  • 6 个 API 模块均使用基类,无独立 request 函数
  • 现有页面渲染和交互行为不变(回归验证)
  • 构建无报错、无运行时组件缺失警告
  • ant-design-vue 打包体积较全量引入减少 40% 以上

Verification: npm run build 成功,所有现有页面功能正常


Scope Boundaries

In scope: 22 条需求R1-R22涵盖可视化编排器、监控数据看板、知识库管理、后端 API 补齐、技术改进

Deferred to follow-up work:

  • 暗色模式——需设计系统层面改造
  • 角色视图切换——通过信息架构区分,不做独立视图
  • Computer Use 页面——功能独立
  • CI/CD 流水线——独立于前端重建
  • 前端单元测试和 E2E 测试——后续专项
  • xterm.js 终端模拟器集成——U10 实现后端 API 和 WebSocket前端终端交互式体验可后续增强

Open Questions

Deferred to implementation:

  • 全局概览页R10数据聚合方式从现有多个端点聚合还是新增专用概览端点——实现时根据性能需求决定
  • 工作流执行动画R5节点状态样式方案在现有组件上叠加状态层还是创建带状态变体——实现时根据组件复杂度决定
  • 工作流 Skill 真实执行R19的变量传递机制上游 stage_results 如何传递给下游 Skill inputs——实现时根据 Skill 接口设计

Risks & Dependencies

风险 影响 缓解措施
ECharts 按需引入配置复杂,可能遗漏组件导致运行时错误 图表渲染失败 先全量引入验证功能,再逐步切换为按需引入
工作流执行引擎改造影响现有 approval/condition 逻辑 现有功能回归 改造时保持现有分支不变,仅修改 skill/parallel 分支,增加集成测试
终端 API 安全策略绕过风险 安全漏洞 复用 ShellTool 成熟的白名单机制,链式操作符一律视为危险
前端 API 层重构导致现有调用行为变化 页面功能回归 逐模块迁移,每个模块迁移后回归验证
后端 KB 文档管理当前为纯内存存储,重启丢失 数据丢失 本次不解决持久化问题,但在 API 文档中标注此限制

System-Wide Impact

  • 前端构建流程变化:新增 unplugin 插件和 ECharts 依赖,npm installnpm run build 行为变化
  • 后端路由注册变化:新增 terminal 和 settings 两个路由模块,app.py 需更新
  • 前端 API 层架构变化6 个 API 文件重构为 class 继承模式,所有 store 的 API 调用方式变化
  • 工作流执行引擎行为变化Skill 阶段从 dry-run 变为真实执行,可能影响执行时间和错误处理

Sources & Research

  • 需求文档:docs/brainstorms/2026-06-12-frontend-productization-requirements.md
  • 前端构建配置:src/agentkit/server/frontend/vite.config.tspackage.json
  • 工作流编辑器:src/agentkit/server/frontend/src/components/workflow/FlowCanvas.vue(拖拽断裂点在第 96-110 行)
  • 进化仪表盘:src/agentkit/server/frontend/src/components/evolution/MetricsChart.vue(原生 SVG 实现)
  • 筛选 bugsrc/agentkit/server/frontend/src/views/EvolutionView.vue(第 55-57 行)
  • 后端工作流执行:src/agentkit/server/routes/workflows.pyskill/parallel dry-run 在第 378-387 行)
  • 后端进化推送:src/agentkit/server/routes/evolution_dashboard.py_broadcast_event 未被调用)
  • 后端 KB 管理:src/agentkit/server/routes/kb_management.py(文档列表/删除/同步端点缺失)
  • PTYSessionsrc/agentkit/tools/pty_session.py
  • ShellTool 白名单:src/agentkit/tools/shell.py_SAFE_COMMAND_PREFIXES_is_dangerous()
  • 配置热重载:src/agentkit/server/app.py_on_config_change 第 242-336 行)
  • 现有测试模式:tests/unit/server/test_workflow_routes.pytest_evolution_dashboard.pytest_kb_management.py