From d517a943ea22ed4f71422644bb16f6a33baa3b8e Mon Sep 17 00:00:00 2001 From: wangdan-fit2cloud Date: Sun, 20 Sep 2026 14:48:46 +0800 Subject: [PATCH] feat: workflow knowledge --- ui/src/api/API_README.md | 18 +- .../{workflow-version.ts => workflow.ts} | 0 .../workspace/knowledge/workflow-version.ts | 14 -- .../api/admin/workspace/knowledge/workflow.ts | 22 +- ui/src/api/admin/workspace/tool/tool.ts | 14 +- .../admin/workspace/tool/workflow-version.ts | 14 -- ui/src/api/admin/workspace/tool/workflow.ts | 42 +++- ui/src/api/types/knowledge.ts | 14 +- ui/src/views/VIEW_README.md | 16 +- ui/src/views/tool/ToolView.vue | 3 +- .../ExecutionRecordToolAction.vue | 6 +- .../application/ButtonPublishHistory.vue | 6 +- .../knowledge/ButtonExecutionRecord.vue | 33 +++ .../knowledge/ButtonPublishHistory.vue | 8 +- .../knowledge/KnowledgeWorkflowView.vue | 4 + .../ExecutionDetailDrawer.vue | 98 +++++++++ .../ExecutionRecordDrawer.vue | 191 ++++++++++++++++++ .../workflow/tool/ButtonPublishHistory.vue | 6 +- .../ExecutionDetailDrawer.vue | 6 +- .../ExecutionRecordDrawer.vue | 6 +- 20 files changed, 442 insertions(+), 79 deletions(-) rename ui/src/api/admin/workspace/application/{workflow-version.ts => workflow.ts} (100%) delete mode 100644 ui/src/api/admin/workspace/knowledge/workflow-version.ts delete mode 100644 ui/src/api/admin/workspace/tool/workflow-version.ts create mode 100644 ui/src/views/workflow/knowledge/ButtonExecutionRecord.vue create mode 100644 ui/src/views/workflow/knowledge/execution-record/ExecutionDetailDrawer.vue create mode 100644 ui/src/views/workflow/knowledge/execution-record/ExecutionRecordDrawer.vue rename ui/src/views/{ => workflow}/tool/execution-record/ExecutionDetailDrawer.vue (96%) rename ui/src/views/{ => workflow}/tool/execution-record/ExecutionRecordDrawer.vue (95%) diff --git a/ui/src/api/API_README.md b/ui/src/api/API_README.md index ac1f550a838..1487c7834d9 100644 --- a/ui/src/api/API_README.md +++ b/ui/src/api/API_README.md @@ -103,17 +103,17 @@ Action、Drawer 或 Dialog。复用方直接使用 `typeof XxxApi` 约束完整 ### 工作流发布历史 -`workspace/application/workflow-version.ts` 维护智能体 `application_version` 资源: +`workspace/application/workflow.ts` 维护智能体 `application_version` 资源: `getWorkflowVersions(applicationId)` 返回按创建时间倒序的完整 `WorkflowVersion[]`; `putWorkflowVersion(applicationId, versionId, payload)` 编辑标题与更新说明,返回更新后的版本。 共用类型 `WorkflowVersion` 和 `WorkflowVersionPayload` 位于 `types/workflow-version.ts`, 通过 `@/api/types` 导出。`ButtonApplicationPublishHistory` 内部调用智能体版本 API,公共发布历史 UI 组件只接收数据和事件,不接收 API 或推测其他工作流的接口地址。 -`workspace/tool/workflow-version.ts` 单独维护工具 `tool_version` 资源,提供 +`workspace/tool/workflow.ts` 同时维护工具 `tool_version` 资源,提供 `getWorkflowVersions(toolId)` 和 `putWorkflowVersion(toolId, versionId, payload)`, 复用上述版本类型,由 `views/workflow/tool/ButtonPublishHistory.vue` 调用。 工具版本接口同样尚未支持 `description`,且未返回版本的默认模型配置。 -`workspace/knowledge/workflow-version.ts` 维护知识库 `knowledge_version` 资源,提供同名查询与编辑方法, +`workspace/knowledge/workflow.ts` 维护知识库 `knowledge_version` 资源,提供同名查询与编辑方法, 由知识库 `ButtonPublishHistory.vue` 调用;知识库版本也尚未支持更新说明和默认模型配置。 v3 编辑表单提交 `{ name, description }`,标题上限 64、更新说明上限 1000。 @@ -336,12 +336,20 @@ API 对象和工作空间上下文,作为该抽屉的范围选择例外;用 ### 工具执行记录 -`workspace/tool/tool.ts` 的 `getToolRecordPage` 查询 `//tool_record//`, +`workspace/tool/workflow.ts` 的 `getToolExecutionRecordPage` 查询 `//tool_record//`, 支持 `source_name`、`source_type`、`state` 筛选,后端固定按创建时间倒序返回。 -`getToolRecordDetail` 查询 `//tool_record/`,返回状态、耗时和 `meta` 中的输入、输出、 +`getToolExecutionRecordDetail` 查询 `//tool_record/`,返回状态、耗时和 `meta` 中的输入、输出、 错误及节点详情。共用类型 `ToolExecutionRecord`、`ToolExecutionRecordDetail` 维护在 `types/tool.ts`; 调用来源使用 `TOOL_RECORD_SOURCE`。抽屉负责 loading 和分页状态,不重复解包响应。 +### 知识库执行记录 + +`workspace/knowledge/workflow.ts` 集中维护工作流、发布版本和执行记录接口。 +`getKnowledgeExecutionRecordPage` 请求 `//action//`, +支持 `user_name`、`state` 筛选;详情和取消复用 `getKnowledgeWorkflowAction`、 +`postCancelKnowledgeWorkflowAction`,对应 GET `action/` 和 POST `action//cancel`。 +`KnowledgeExecutionRecord` 为分页摘要,`KnowledgeWorkflowAction` 扩展节点详情;均从 `@/api/types` 导入。 + ### 工具工作流调试 `workspace/tool/workflow.ts` 的 `postToolWorkflowDebug(toolId, parameters)` 使用 Admin `postStream` diff --git a/ui/src/api/admin/workspace/application/workflow-version.ts b/ui/src/api/admin/workspace/application/workflow.ts similarity index 100% rename from ui/src/api/admin/workspace/application/workflow-version.ts rename to ui/src/api/admin/workspace/application/workflow.ts diff --git a/ui/src/api/admin/workspace/knowledge/workflow-version.ts b/ui/src/api/admin/workspace/knowledge/workflow-version.ts deleted file mode 100644 index 1b2df561121..00000000000 --- a/ui/src/api/admin/workspace/knowledge/workflow-version.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { get, put } from '../../core/request' -import type { WorkflowVersion, WorkflowVersionPayload } from '@/api/types' -import { getWorkspaceId } from '@/utils/resource-context' - -const getPrefix = (knowledgeId: string) => `/workspace/${getWorkspaceId()}/knowledge/${knowledgeId}/knowledge_version` - -/** 获取知识库发布历史,按发布时间倒序返回完整版本快照。 */ -const getWorkflowVersions = (knowledgeId: string) => get(getPrefix(knowledgeId)) - -/** 修改知识库历史版本标题和更新说明,更新说明需要服务端支持 description 字段。 */ -const putWorkflowVersion = (knowledgeId: string, versionId: string, data: WorkflowVersionPayload) => - put(`${getPrefix(knowledgeId)}/${versionId}`, data) - -export default { getWorkflowVersions, putWorkflowVersion } diff --git a/ui/src/api/admin/workspace/knowledge/workflow.ts b/ui/src/api/admin/workspace/knowledge/workflow.ts index 53526467831..c17ff77ef16 100644 --- a/ui/src/api/admin/workspace/knowledge/workflow.ts +++ b/ui/src/api/admin/workspace/knowledge/workflow.ts @@ -1,15 +1,19 @@ +import type { ParamsPage, ResponsePage } from '../../core/types' import type LogicFlow from '@logicflow/core' import { get, post, put, getExportFile } from '../../core/request' import type { DefaultModelSettingPayload, Dict, KnowledgeItem, + KnowledgeExecutionRecord, KnowledgeCreatePayload, KnowledgeWorkflowTemplate, KnowledgeWorkflowAction, KnowledgeWorkflowDebugPayload, KnowledgeWorkflowDetail, WorkflowStoreTemplate, + WorkflowVersion, + WorkflowVersionPayload, } from '@/api/types' import { getWorkspaceId } from '@/utils/resource-context' @@ -61,12 +65,12 @@ const postKnowledgeWorkflowDebug = (knowledgeId: string, payload: KnowledgeWorkf return post(`${getPrefix()}/${knowledgeId}/debug`, payload) } -/** 轮询知识库工作流调试任务详情。 */ +/** 获取知识库工作流执行详情,供调试轮询和执行记录共用。 */ const getKnowledgeWorkflowAction = (knowledgeId: string, actionId: string) => { return get(`${getPrefix()}/${knowledgeId}/action/${actionId}`) } -/** 取消知识库工作流调试任务。 */ +/** 取消知识库工作流执行任务。 */ const postCancelKnowledgeWorkflowAction = (knowledgeId: string, actionId: string) => { return post(`${getPrefix()}/${knowledgeId}/action/${actionId}/cancel`) } @@ -74,7 +78,21 @@ const postCancelKnowledgeWorkflowAction = (knowledgeId: string, actionId: string /** 导出知识库工作流文件,不包含知识库文档。 */ const exportKnowledgeWorkflow = (knowledgeId: string, name: string) => getExportFile(`${name}.kbwf`, `${getPrefix()}/${knowledgeId}/workflow/export`) +/** 获取知识库发布历史,按发布时间倒序返回完整版本快照。 */ +const getWorkflowVersions = (knowledgeId: string) => get(`${getPrefix()}/${knowledgeId}/knowledge_version`) + +/** 修改知识库历史版本标题和更新说明,更新说明需要服务端支持 description 字段。 */ +const putWorkflowVersion = (knowledgeId: string, versionId: string, data: WorkflowVersionPayload) => + put(`${getPrefix()}/${knowledgeId}/knowledge_version/${versionId}`, data) + +/** 获取知识库工作流执行记录分页,支持发起人和状态筛选。 */ +const getKnowledgeExecutionRecordPage = (knowledgeId: string, page: ParamsPage, query?: Dict) => + get>(`${getPrefix()}/${knowledgeId}/action/${page.currentPage}/${page.pageSize}`, query) + export default { + getKnowledgeExecutionRecordPage, + getWorkflowVersions, + putWorkflowVersion, exportKnowledgeWorkflow, postKnowledgeWorkflow, putKnowledgeWorkflow, diff --git a/ui/src/api/admin/workspace/tool/tool.ts b/ui/src/api/admin/workspace/tool/tool.ts index 656cc91b2ec..2cd2d3803ce 100644 --- a/ui/src/api/admin/workspace/tool/tool.ts +++ b/ui/src/api/admin/workspace/tool/tool.ts @@ -1,6 +1,6 @@ import { del, downloadRequest, getExportFile, get, post, put } from '../../core/request' import type { ParamsPage, ResponsePage } from '../../core/types' -import type { Dict, ToolExecutionRecord, ToolExecutionRecordDetail, ToolDebugPayload, ToolItem, ToolPayload, ToolPylintIssue } from '@/api/types' +import type { Dict, ToolDebugPayload, ToolItem, ToolPayload, ToolPylintIssue } from '@/api/types' import { getWorkspaceId } from '@/utils/resource-context' const getPrefix = () => { @@ -101,19 +101,7 @@ const putBatchMoveTools = (toolIds: string[], folderId: string) => { return put<{ folder_id: string; id_list: string[] }, boolean>(`${getPrefix()}/batch_move`, { folder_id: folderId, id_list: toolIds }) } -/** 获取工具执行记录分页,按执行时间倒序返回。 */ -const getToolRecordPage = (toolId: string, page: ParamsPage, query?: Dict) => { - return get>(`${getPrefix()}/${toolId}/tool_record/${page.currentPage}/${page.pageSize}`, query) -} - -/** 获取工具执行记录的输入输出及节点详情。 */ -const getToolRecordDetail = (toolId: string, recordId: string) => { - return get(`${getPrefix()}/${toolId}/tool_record/${recordId}`) -} - export default { - getToolRecordPage, - getToolRecordDetail, getToolPage, exportTool, deleteTool, diff --git a/ui/src/api/admin/workspace/tool/workflow-version.ts b/ui/src/api/admin/workspace/tool/workflow-version.ts deleted file mode 100644 index 491fd72d10b..00000000000 --- a/ui/src/api/admin/workspace/tool/workflow-version.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { get, put } from '../../core/request' -import type { WorkflowVersion, WorkflowVersionPayload } from '@/api/types' -import { getWorkspaceId } from '@/utils/resource-context' - -const getPrefix = (toolId: string) => `/workspace/${getWorkspaceId()}/tool/${toolId}/tool_version` - -/** 获取工具发布历史,按发布时间倒序返回完整版本快照。 */ -const getWorkflowVersions = (toolId: string) => get(getPrefix(toolId)) - -/** 修改工具历史版本标题和更新说明,更新说明需要服务端支持 description 字段。 */ -const putWorkflowVersion = (toolId: string, versionId: string, data: WorkflowVersionPayload) => - put(`${getPrefix(toolId)}/${versionId}`, data) - -export default { getWorkflowVersions, putWorkflowVersion } diff --git a/ui/src/api/admin/workspace/tool/workflow.ts b/ui/src/api/admin/workspace/tool/workflow.ts index 28fbc23b6fd..81eab1ac79d 100644 --- a/ui/src/api/admin/workspace/tool/workflow.ts +++ b/ui/src/api/admin/workspace/tool/workflow.ts @@ -1,6 +1,17 @@ import type LogicFlow from '@logicflow/core' import { get, put, postStream } from '../../core/request' -import type { DefaultModelSettingPayload, ToolWorkflowDetail, ToolWorkflowRecord, WorkflowStoreTemplate } from '@/api/types' +import type { ParamsPage, ResponsePage } from '../../core/types' +import type { + DefaultModelSettingPayload, + Dict, + ToolExecutionRecord, + ToolExecutionRecordDetail, + ToolWorkflowDetail, + ToolWorkflowRecord, + WorkflowStoreTemplate, + WorkflowVersion, + WorkflowVersionPayload, +} from '@/api/types' import { ADMIN_API_BASE_PATH } from '@/api/constants' import { getWorkspaceId } from '@/utils/resource-context' @@ -35,4 +46,31 @@ const postToolWorkflowDebug = (toolId: string, parameters: Record get(`${getPrefix()}/${toolId}/tool_record/${recordId}`) -export default { getToolWorkflow, putToolWorkflow, putToolWorkflowPublish, postToolWorkflowDebug, getToolWorkflowRecord } +/** 获取工具发布历史,按发布时间倒序返回完整版本快照。 */ +const getWorkflowVersions = (toolId: string) => get(`${getPrefix()}/${toolId}/tool_version`) + +/** 修改工具历史版本标题和更新说明,更新说明需要服务端支持 description 字段。 */ +const putWorkflowVersion = (toolId: string, versionId: string, data: WorkflowVersionPayload) => + put(`${getPrefix()}/${toolId}/tool_version/${versionId}`, data) + +/** 获取工具执行记录分页,按执行时间倒序返回。 */ +const getToolExecutionRecordPage = (toolId: string, page: ParamsPage, query?: Dict) => { + return get>(`${getPrefix()}/${toolId}/tool_record/${page.currentPage}/${page.pageSize}`, query) +} + +/** 获取工具执行记录的输入输出及节点详情。 */ +const getToolExecutionRecordDetail = (toolId: string, recordId: string) => { + return get(`${getPrefix()}/${toolId}/tool_record/${recordId}`) +} + +export default { + getToolExecutionRecordPage, + getToolExecutionRecordDetail, + getWorkflowVersions, + putWorkflowVersion, + getToolWorkflow, + putToolWorkflow, + putToolWorkflowPublish, + postToolWorkflowDebug, + getToolWorkflowRecord, +} diff --git a/ui/src/api/types/knowledge.ts b/ui/src/api/types/knowledge.ts index 16f5463f005..eeb50a3a0f8 100644 --- a/ui/src/api/types/knowledge.ts +++ b/ui/src/api/types/knowledge.ts @@ -42,16 +42,22 @@ export interface KnowledgeTagGroup { values: { id: string; value: string; create_time: string; update_time: string }[] } -/** 知识库工作流调试任务状态。 */ +/** 知识库工作流任务状态。 */ export type KnowledgeWorkflowActionState = 'STARTED' | 'PENDING' | 'SUCCESS' | 'FAILURE' | 'REVOKE' | 'REVOKED' -/** 知识库工作流调试任务,details 按节点 id 聚合各节点执行详情。 */ -export interface KnowledgeWorkflowAction { +/** 知识库工作流执行记录摘要。 */ +export interface KnowledgeExecutionRecord { id: string knowledge_id: string state: KnowledgeWorkflowActionState + run_time?: number | null + create_time?: string + meta?: Record & { user_name?: string } +} + +/** 知识库工作流执行详情,调试与历史记录共用。 */ +export interface KnowledgeWorkflowAction extends KnowledgeExecutionRecord { details: Record> - meta?: Record } /** 知识库工作流调试提交参数。 */ diff --git a/ui/src/views/VIEW_README.md b/ui/src/views/VIEW_README.md index eb3ff9263a0..3b69275ccc7 100644 --- a/ui/src/views/VIEW_README.md +++ b/ui/src/views/VIEW_README.md @@ -246,9 +246,6 @@ src/views/tool/ │ │ ├── input-field/ │ │ └── python-code/ │ └── tool-custom/ -├── execution-record/ # 工具执行记录列表与详情抽屉 -│ ├── ExecutionRecordDrawer.vue -│ └── ExecutionDetailDrawer.vue ├── tool-card/ │ ├── ToolCard.vue # 工具卡片展示与操作插槽 │ ├── InitParamDialog.vue # 配置工具启动参数 @@ -276,9 +273,9 @@ src/views/tool/ ``` `tool-card/action-dropdown/ExecutionRecordToolAction.vue` 维护执行记录入口,两个抽屉 -`ExecutionRecordDrawer.vue` 和 `ExecutionDetailDrawer.vue` 统一放在 `tool/execution-record/`。 +`ExecutionRecordDrawer.vue` 和 `ExecutionDetailDrawer.vue` 统一放在 `workflow/tool/execution-record/`。 Workspace 的自定义工具和工作流工具菜单 -展示“执行记录”,页面传入完整 Tool API;点击后挂载抽屉,关闭动画结束后卸载。 +展示“执行记录”,页面传入工具的完整 Workflow API;点击后挂载抽屉,关闭动画结束后卸载。 列表使用 `MkComplexSearch`、`MkTable` 和 `MkStatusLabel`,支持触发来源名称、类型、状态筛选; 接口按执行时间倒序返回。详情保留输入、输出、错误及工作流节点详情,支持上一条/下一条跨页浏览。 @@ -751,3 +748,12 @@ application、tool、knowledge 的 WorkflowView 统一使用一个 `loading` 控 排行榜 API 由 `HomeView` 传入 `HomeRankings`,再传给 `RankingDrawer`。两者的 `api` 均使用 `typeof HomepageApi` 约束,查询、汇总和导出统一通过 `props.api` 调用。 + +## 知识库工作流执行记录 + +`workflow/knowledge/ButtonExecutionRecord.vue` 封装更多菜单入口、抽屉挂载与打开逻辑,接收 +`knowledgeId`,菜单属性(如 `divided`)透传到 `MkDropdownItem`,内部提供知识库 Workflow API。 +`workflow/knowledge/execution-record/` 维护记录列表和详情抽屉,由该按钮组件打开, +关闭动画结束后卸载。列表复用 `MkComplexSearch`、`MkTable` 和 `MkStatusLabel`,支持发起人、 +状态筛选及跨页浏览,每 6 秒刷新;关闭或卸载停止轮询。待执行、执行中任务经确认后取消,成功刷新列表。 +抽屉接收完整知识库 Workflow API;详情查询复用调试任务接口,使用 `ExecutionDetailContent` 展示节点结果。 diff --git a/ui/src/views/tool/ToolView.vue b/ui/src/views/tool/ToolView.vue index 616ae8b75b2..6d079600954 100644 --- a/ui/src/views/tool/ToolView.vue +++ b/ui/src/views/tool/ToolView.vue @@ -5,6 +5,7 @@ import { onMounted, computed, ref, useTemplateRef } from 'vue' import { useRoute, useRouter } from 'vue-router' import CommonApi from '@/api/admin/workspace/common' import CommonSystemApi from '@/api/admin/system/common' +import WorkflowApi from '@/api/admin/workspace/tool/workflow' import ToolApi from '@/api/admin/workspace/tool/tool' import SharedApi from '@/api/admin/workspace/shared' import StoreApi from '@/api/admin/store.ts' @@ -309,7 +310,7 @@ onMounted(() => { diff --git a/ui/src/views/tool/tool-card/action-dropdown/ExecutionRecordToolAction.vue b/ui/src/views/tool/tool-card/action-dropdown/ExecutionRecordToolAction.vue index 401f8b54204..8d7ee4183f4 100644 --- a/ui/src/views/tool/tool-card/action-dropdown/ExecutionRecordToolAction.vue +++ b/ui/src/views/tool/tool-card/action-dropdown/ExecutionRecordToolAction.vue @@ -1,10 +1,10 @@ + + diff --git a/ui/src/views/workflow/knowledge/ButtonPublishHistory.vue b/ui/src/views/workflow/knowledge/ButtonPublishHistory.vue index 34863862646..be97f23c25c 100644 --- a/ui/src/views/workflow/knowledge/ButtonPublishHistory.vue +++ b/ui/src/views/workflow/knowledge/ButtonPublishHistory.vue @@ -1,6 +1,6 @@ + + diff --git a/ui/src/views/workflow/knowledge/execution-record/ExecutionRecordDrawer.vue b/ui/src/views/workflow/knowledge/execution-record/ExecutionRecordDrawer.vue new file mode 100644 index 00000000000..7e158c00ab5 --- /dev/null +++ b/ui/src/views/workflow/knowledge/execution-record/ExecutionRecordDrawer.vue @@ -0,0 +1,191 @@ + + + diff --git a/ui/src/views/workflow/tool/ButtonPublishHistory.vue b/ui/src/views/workflow/tool/ButtonPublishHistory.vue index da781c7a5c4..995993807a5 100644 --- a/ui/src/views/workflow/tool/ButtonPublishHistory.vue +++ b/ui/src/views/workflow/tool/ButtonPublishHistory.vue @@ -1,6 +1,6 @@