Server 执行日志

Server 执行日志用于查看远程执行记录。server web 会过滤 draft run,只展示已发布版本或 latest 的运行记录。issue #79 后,日志不再是独立页面,也不再使用左侧 run 列表;它作为项目详情菜单里的“执行日志”tab 放在“项目详情”下面,并和版本、KV、环境变量等页面共享默认 server/web 的 shadcn/Radix 控件语法。

日志表格

日志 tab 使用 /api/workflows/{name}/runs?pageSize=20&includeDraft=false 的分页响应。draft run 在服务端分页前排除,避免最新 draft 记录占满第一页后让已发布版本记录缺失。 日志面板顶部提供紧凑筛选区;状态下拉使用 Radix Select,不再打开浏览器原生菜单:
  • 按执行 ID、workflow 名称、会话 ID、target 或 resolved target 关键字过滤。
  • 按全部、进行中、等待中、成功、失败、取消或超时状态过滤。
  • 展示当前页范围和服务端过滤后的总数。
  • 清空筛选会关闭当前 run 抽屉,避免旧 runId 继续停留在 URL 中。
  • 服务端还有下一页时启用“下一页”,有 cursor 历史时启用“上一页”,不再提供“加载更多”。
执行记录主体使用 shadcn Table 展示执行 ID、状态、目标版本、创建时间和耗时。状态不会只靠颜色表达,必须同时显示中文状态 badge。Run ID 单元格直接渲染完整值,宽屏或列宽足够时完整显示;空间不足时才由 CSS 省略,并通过 title 保留完整值。最右侧操作列保留两个 icon-only 日志按钮;执行回放使用预览语义图标,不使用重新执行/重试样式图标,按钮会阻止行点击冒泡,避免“详细日志”被行级回放点击覆盖。 列表接口只返回表格需要的 run summary 字段,不携带 stdoutstderr 或完整 report。带 runId 的日志深链会先打开轻量“详细日志”抽屉并读取单条 run record;只有点击“执行回放”按钮时才请求 replay。

行级操作

表格最右侧是稳定操作列:
  • 第一个图标按钮打开“执行回放”右侧抽屉,并按需请求 /api/workflows/{name}/runs/{runId}/replay?messageLimit=20
  • 第二个图标按钮打开“详细日志”右侧抽屉,只读取单条 run record。
  • runningwaiting 的 run 额外显示停止按钮,调用 POST /api/workflows/{name}/runs/{runId}/cancel
读取期间按钮禁用并显示 loading;失败时错误显示在页面全局反馈区域。回放会限制 conversation message window,默认最多返回 20 条消息,并把超大的 args、report 和 output item 内容裁剪为可展开预览,避免长会话或巨型 Markdown 输出在管理端一次性渲染过多 transcript。

右侧抽屉

执行回放抽屉展示只读 Run workspace 回放。普通 workflow 会显示 target、raw arguments、args chips、状态和 Markdown 输出;conversation workflow 会按同一个 conversation_id 汇总当前 run 之前及当前 run 的输入输出,形成只读 transcript。管理端默认请求最近 20 条 replay message;服务端允许用 messageLimit 在 1 到 100 之间调整窗口大小。默认管理端 server/web 会引入 shared run-workspace-input 样式,让 replay 抽屉里的 transcript、assistant 输出 item、业务计时卡片和附件入口与公开 embed / App 保持同一套展示;workflow.createTimerNode 产生的记录从 run.report.timers 读取,success / failed / cleared 分别展示完成、失败和已清理状态,不单独新增 timer 管理页。管理端主题会在全局 CSS 桥接 shared CSS 需要的 --color-* 变量,因此回放抽屉在深色模式下继续使用管理端深色背景、边框和文字,不会回退为 shared CSS 的浅色 fallback。workflow 的最终输出如果包含 displayInputdisplay_input,conversation 回放会优先把它作为用户输入展示,适合 webhook 等原始参数很大的场景;原始 args、provider payload、完整 output item 内容和节点输入仍保留在详细日志中用于排查。(issue #47、issue #79、issue #88 详细日志抽屉展示:
  • 执行摘要:run id、target、resolved target、状态、耗时。
  • 共享 Logs workspace:run 摘要、stdout、stderr、runner diagnostics 和 report.json
  • report.json 使用 shared 只读可搜索查看器,支持匹配定位和上一个/下一个跳转。
  • 日志抽屉只负责排查单条 run record;需要查看 workflow 输出形态时使用“执行回放”抽屉中的 shared Output/Conversation 回放。
抽屉是右侧覆盖层,不挤压项目二级菜单或日志表格列宽。桌面端抽屉内部滚动;移动端抽屉占满可用宽度并保留关闭按钮。

运行状态

运行状态与 server storage 保持一致:
  • running
  • waiting
  • success
  • failed
  • aborted
  • timed_out
外部 Dify 风格 API 会把成功且 errCode === 0 的结果映射为 succeeded,如果 workflow 返回非零 errCode,即使 executor 退出成功也会映射为失败。

移动端与深色模式

移动端仍在项目详情内打开“执行日志”tab,表格内容保持可读标签和可触达图标按钮;回放和详细日志抽屉占满可用宽度,并保留固定关闭入口。深色模式沿用同一套项目详情结构和中性色 token,状态 badge、筛选控件、行级操作与右侧抽屉都必须在深浅主题中保持可辨认。

追踪

本文档首版由 issue #32 记录。日志只读回放由 issue #43 记录。日志分页、进行中筛选和一屏内滚动由 issue #45 记录。日志日期展示和执行中任务停止由 issue #74 记录。server web 极简界面重构由 issue #79 记录。默认日志行为对齐 server/web/src/pages/DetailPage.tsxserver/src/routes/api.tsserver/src/storage.ts