Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions ui/src/api/API_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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。
Expand Down Expand Up @@ -336,12 +336,20 @@ API 对象和工作空间上下文,作为该抽屉的范围选择例外;用

### 工具执行记录

`workspace/tool/tool.ts` 的 `getToolRecordPage` 查询 `/<toolId>/tool_record/<currentPage>/<pageSize>`,
`workspace/tool/workflow.ts` 的 `getToolExecutionRecordPage` 查询 `/<toolId>/tool_record/<currentPage>/<pageSize>`,
支持 `source_name`、`source_type`、`state` 筛选,后端固定按创建时间倒序返回。
`getToolRecordDetail` 查询 `/<toolId>/tool_record/<recordId>`,返回状态、耗时和 `meta` 中的输入、输出、
`getToolExecutionRecordDetail` 查询 `/<toolId>/tool_record/<recordId>`,返回状态、耗时和 `meta` 中的输入、输出、
错误及节点详情。共用类型 `ToolExecutionRecord`、`ToolExecutionRecordDetail` 维护在 `types/tool.ts`;
调用来源使用 `TOOL_RECORD_SOURCE`。抽屉负责 loading 和分页状态,不重复解包响应。

### 知识库执行记录

`workspace/knowledge/workflow.ts` 集中维护工作流、发布版本和执行记录接口。
`getKnowledgeExecutionRecordPage` 请求 `/<knowledgeId>/action/<currentPage>/<pageSize>`,
支持 `user_name`、`state` 筛选;详情和取消复用 `getKnowledgeWorkflowAction`、
`postCancelKnowledgeWorkflowAction`,对应 GET `action/<actionId>` 和 POST `action/<actionId>/cancel`。
`KnowledgeExecutionRecord` 为分页摘要,`KnowledgeWorkflowAction` 扩展节点详情;均从 `@/api/types` 导入。

### 工具工作流调试

`workspace/tool/workflow.ts` 的 `postToolWorkflowDebug(toolId, parameters)` 使用 Admin `postStream`
Expand Down
14 changes: 0 additions & 14 deletions ui/src/api/admin/workspace/knowledge/workflow-version.ts

This file was deleted.

22 changes: 20 additions & 2 deletions ui/src/api/admin/workspace/knowledge/workflow.ts
Original file line number Diff line number Diff line change
@@ -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'

Expand Down Expand Up @@ -61,20 +65,34 @@ const postKnowledgeWorkflowDebug = (knowledgeId: string, payload: KnowledgeWorkf
return post<KnowledgeWorkflowDebugPayload, KnowledgeWorkflowAction>(`${getPrefix()}/${knowledgeId}/debug`, payload)
}

/** 轮询知识库工作流调试任务详情。 */
/** 获取知识库工作流执行详情,供调试轮询和执行记录共用。 */
const getKnowledgeWorkflowAction = (knowledgeId: string, actionId: string) => {
return get<KnowledgeWorkflowAction>(`${getPrefix()}/${knowledgeId}/action/${actionId}`)
}

/** 取消知识库工作流调试任务。 */
/** 取消知识库工作流执行任务。 */
const postCancelKnowledgeWorkflowAction = (knowledgeId: string, actionId: string) => {
return post<undefined, boolean>(`${getPrefix()}/${knowledgeId}/action/${actionId}/cancel`)
}

/** 导出知识库工作流文件,不包含知识库文档。 */
const exportKnowledgeWorkflow = (knowledgeId: string, name: string) => getExportFile(`${name}.kbwf`, `${getPrefix()}/${knowledgeId}/workflow/export`)

/** 获取知识库发布历史,按发布时间倒序返回完整版本快照。 */
const getWorkflowVersions = (knowledgeId: string) => get<WorkflowVersion[]>(`${getPrefix()}/${knowledgeId}/knowledge_version`)

/** 修改知识库历史版本标题和更新说明,更新说明需要服务端支持 description 字段。 */
const putWorkflowVersion = (knowledgeId: string, versionId: string, data: WorkflowVersionPayload) =>
put<WorkflowVersionPayload, WorkflowVersion>(`${getPrefix()}/${knowledgeId}/knowledge_version/${versionId}`, data)

/** 获取知识库工作流执行记录分页,支持发起人和状态筛选。 */
const getKnowledgeExecutionRecordPage = (knowledgeId: string, page: ParamsPage, query?: Dict<unknown>) =>
get<ResponsePage<KnowledgeExecutionRecord>>(`${getPrefix()}/${knowledgeId}/action/${page.currentPage}/${page.pageSize}`, query)

export default {
getKnowledgeExecutionRecordPage,
getWorkflowVersions,
putWorkflowVersion,
exportKnowledgeWorkflow,
postKnowledgeWorkflow,
putKnowledgeWorkflow,
Expand Down
14 changes: 1 addition & 13 deletions ui/src/api/admin/workspace/tool/tool.ts
Original file line number Diff line number Diff line change
@@ -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 = () => {
Expand Down Expand Up @@ -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<unknown>) => {
return get<ResponsePage<ToolExecutionRecord>>(`${getPrefix()}/${toolId}/tool_record/${page.currentPage}/${page.pageSize}`, query)
}

/** 获取工具执行记录的输入输出及节点详情。 */
const getToolRecordDetail = (toolId: string, recordId: string) => {
return get<ToolExecutionRecordDetail>(`${getPrefix()}/${toolId}/tool_record/${recordId}`)
}

export default {
getToolRecordPage,
getToolRecordDetail,
getToolPage,
exportTool,
deleteTool,
Expand Down
14 changes: 0 additions & 14 deletions ui/src/api/admin/workspace/tool/workflow-version.ts

This file was deleted.

42 changes: 40 additions & 2 deletions ui/src/api/admin/workspace/tool/workflow.ts
Original file line number Diff line number Diff line change
@@ -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'

Expand Down Expand Up @@ -35,4 +46,31 @@ const postToolWorkflowDebug = (toolId: string, parameters: Record<string, unknow
/** 查询工具工作流调试的输出和节点执行记录。 */
const getToolWorkflowRecord = (toolId: string, recordId: string) => get<ToolWorkflowRecord>(`${getPrefix()}/${toolId}/tool_record/${recordId}`)

export default { getToolWorkflow, putToolWorkflow, putToolWorkflowPublish, postToolWorkflowDebug, getToolWorkflowRecord }
/** 获取工具发布历史,按发布时间倒序返回完整版本快照。 */
const getWorkflowVersions = (toolId: string) => get<WorkflowVersion[]>(`${getPrefix()}/${toolId}/tool_version`)

/** 修改工具历史版本标题和更新说明,更新说明需要服务端支持 description 字段。 */
const putWorkflowVersion = (toolId: string, versionId: string, data: WorkflowVersionPayload) =>
put<WorkflowVersionPayload, WorkflowVersion>(`${getPrefix()}/${toolId}/tool_version/${versionId}`, data)

/** 获取工具执行记录分页,按执行时间倒序返回。 */
const getToolExecutionRecordPage = (toolId: string, page: ParamsPage, query?: Dict<unknown>) => {
return get<ResponsePage<ToolExecutionRecord>>(`${getPrefix()}/${toolId}/tool_record/${page.currentPage}/${page.pageSize}`, query)
}

/** 获取工具执行记录的输入输出及节点详情。 */
const getToolExecutionRecordDetail = (toolId: string, recordId: string) => {
return get<ToolExecutionRecordDetail>(`${getPrefix()}/${toolId}/tool_record/${recordId}`)
}

export default {
getToolExecutionRecordPage,
getToolExecutionRecordDetail,
getWorkflowVersions,
putWorkflowVersion,
getToolWorkflow,
putToolWorkflow,
putToolWorkflowPublish,
postToolWorkflowDebug,
getToolWorkflowRecord,
}
14 changes: 10 additions & 4 deletions ui/src/api/types/knowledge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<string, unknown> & { user_name?: string }
}

/** 知识库工作流执行详情,调试与历史记录共用。 */
export interface KnowledgeWorkflowAction extends KnowledgeExecutionRecord {
details: Record<string, Record<string, unknown>>
meta?: Record<string, unknown>
}

/** 知识库工作流调试提交参数。 */
Expand Down
16 changes: 11 additions & 5 deletions ui/src/views/VIEW_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 # 配置工具启动参数
Expand Down Expand Up @@ -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`,支持触发来源名称、类型、状态筛选;
接口按执行时间倒序返回。详情保留输入、输出、错误及工作流节点详情,支持上一条/下一条跨页浏览。

Expand Down Expand Up @@ -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` 展示节点结果。
3 changes: 2 additions & 1 deletion ui/src/views/tool/ToolView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -309,7 +310,7 @@ onMounted(() => {
<ExecutionRecordToolAction
v-if="tool.tool_type === TOOL_TYPE.CUSTOM || tool.tool_type === TOOL_TYPE.WORKFLOW"
label="查看执行记录"
:api="ToolApi"
:api="WorkflowApi"
:tool="tool"
/>
<!-- 复制 -->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<script setup lang="ts">
import { nextTick, ref, useTemplateRef } from 'vue'
import type ToolApi from '@/api/admin/workspace/tool/tool'
import type WorkflowApi from '@/api/admin/workspace/tool/workflow'
import type { ToolItem } from '@/api/types'
import ExecutionRecordDrawer from '../../execution-record/ExecutionRecordDrawer.vue'
import ExecutionRecordDrawer from '@/views/workflow/tool/execution-record/ExecutionRecordDrawer.vue'

const props = defineProps<{ api: typeof ToolApi; tool: ToolItem; label: string }>()
const props = defineProps<{ api: typeof WorkflowApi; tool: ToolItem; label: string }>()

/* 执行记录抽屉按需挂载。 */
const drawerMounted = ref(false)
Expand Down
6 changes: 3 additions & 3 deletions ui/src/views/workflow/application/ButtonPublishHistory.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script setup lang="ts">
import { ref, useTemplateRef } from 'vue'
import WorkflowVersionApi from '@/api/admin/workspace/application/workflow-version'
import WorkflowApi from '@/api/admin/workspace/application/workflow'
import type { WorkflowVersion, WorkflowVersionPayload } from '@/api/types'
import { MsgSuccess } from '@/utils/message'
import PublishHistoryDrawer from '@/views/workflow/components/publish-history/PublishHistoryDrawer.vue'
Expand Down Expand Up @@ -28,7 +28,7 @@ function handleOpen() {

function loadWorkflowVersions() {
loading.value = true
return WorkflowVersionApi.getWorkflowVersions(props.applicationId)
return WorkflowApi.getWorkflowVersions(props.applicationId)
.then((result) => {
versions.value = result
})
Expand All @@ -44,7 +44,7 @@ const publishHistoryDrawerRef = useTemplateRef<InstanceType<typeof PublishHistor
function handleSubmit(payload: WorkflowVersionPayload, versionId?: string) {
saving.value = true
if (versionId) {
return WorkflowVersionApi.putWorkflowVersion(props.applicationId, versionId, payload)
return WorkflowApi.putWorkflowVersion(props.applicationId, versionId, payload)
.then(() => {
publishHistoryDrawerRef.value?.closeEdit()
MsgSuccess('修改成功')
Expand Down
33 changes: 33 additions & 0 deletions ui/src/views/workflow/knowledge/ButtonExecutionRecord.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<script setup lang="ts">
import { nextTick, ref, useTemplateRef } from 'vue'
import WorkflowApi from '@/api/admin/workspace/knowledge/workflow'
import ExecutionRecordDrawer from './execution-record/ExecutionRecordDrawer.vue'

defineOptions({ name: 'ButtonKnowledgeExecutionRecord', inheritAttrs: false })

defineProps<{ knowledgeId: string }>()

/* 执行记录抽屉按需挂载,关闭动画结束后卸载。 */
const drawerMounted = ref(false)
const executionRecordDrawerRef = useTemplateRef<InstanceType<typeof ExecutionRecordDrawer>>('executionRecordDrawerRef')

function handleOpenExecutionRecords() {
drawerMounted.value = true
return nextTick(() => executionRecordDrawerRef.value?.open())
}
</script>

<template>
<!-- 查看执行记录 -->
<MkDropdownItem v-bind="$attrs" @click="handleOpenExecutionRecords">
<template #icon><MkIcon name="icon_schedule-report_outlined" /></template>
<span>执行记录</span>
</MkDropdownItem>
<ExecutionRecordDrawer
v-if="drawerMounted"
ref="executionRecordDrawerRef"
:api="WorkflowApi"
:knowledge-id="knowledgeId"
@closed="drawerMounted = false"
/>
</template>
Loading
Loading