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
2 changes: 1 addition & 1 deletion ui/src/api/API_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ Action、Drawer 或 Dialog。复用方直接使用 `typeof XxxApi` 约束完整
前端版本标题上限 64、更新说明上限 1000,提交字段为 name、publish_desc,
不将资源 desc 当作版本说明。三类版本接口均保存并返回 publish_desc。
知识库版本编辑省略 publish_desc 或传 null 时保留原说明,传空字符串时清空;服务端上限 1024 字符。
智能体与工具的 putXxxPublish 提交 publish_name、publish_desc,由发布弹框填写。
智能体、工具与知识库的 putXxxPublish 提交 publish_name、publish_desc,由发布弹框填写;弹框的 name 映射为 publish_name。
三个版本列表均未返回历史默认模型配置,预览与恢复保留当前配置。

`admin/store.ts` 的 getStoreApplicationList、getStoreToolWorkflowList、getStoreKnowledgeList 查询三类模板,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@ const putKnowledgeWorkflow = (knowledgeId: string, payload: KnowledgeWorkflowPay
}

/** 发布知识库工作流。 */
const putKnowledgeWorkflowPublish = (knowledgeId: string) => {
return put<undefined, boolean>(`${getPrefix()}/${knowledgeId}/publish`)
const putKnowledgeWorkflowPublish = (knowledgeId: string, publishName: string, publishDesc?: string) => {
return put<Record<string, unknown>, boolean>(`${getPrefix()}/${knowledgeId}/publish`, {
publish_name: publishName,
publish_desc: publishDesc,
})
}

/** 获取数据源节点的动态表单配置。 */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@ const putKnowledgeWorkflow = (knowledgeId: string, payload: KnowledgeWorkflowPay
}

/** 发布知识库工作流。 */
const putKnowledgeWorkflowPublish = (knowledgeId: string) => {
return put<undefined, boolean>(`${getPrefix()}/${knowledgeId}/publish`)
const putKnowledgeWorkflowPublish = (knowledgeId: string, publishName: string, publishDesc?: string) => {
return put<Record<string, unknown>, boolean>(`${getPrefix()}/${knowledgeId}/publish`, {
publish_name: publishName,
publish_desc: publishDesc,
})
}

/** 获取数据源节点的动态表单配置。 */
Expand Down
7 changes: 5 additions & 2 deletions ui/src/api/admin/workspace/knowledge/workflow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,11 @@ const putKnowledgeWorkflow = (knowledgeId: string, payload: KnowledgeWorkflowPay
}

/** 发布知识库工作流。 */
const putKnowledgeWorkflowPublish = (knowledgeId: string) => {
return put<undefined, boolean>(`${getPrefix()}/${knowledgeId}/publish`)
const putKnowledgeWorkflowPublish = (knowledgeId: string, publishName: string, publishDesc?: string) => {
return put<Record<string, unknown>, boolean>(`${getPrefix()}/${knowledgeId}/publish`, {
publish_name: publishName,
publish_desc: publishDesc,
})
}

/** 获取数据源节点的动态表单配置。 */
Expand Down
7 changes: 5 additions & 2 deletions ui/src/api/admin/workspace/shared/knowledge/workflow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,11 @@ const putKnowledgeWorkflow = (knowledgeId: string, payload: KnowledgeWorkflowPay
}

/** 发布知识库工作流。 */
const putKnowledgeWorkflowPublish = (knowledgeId: string) => {
return put<undefined, boolean>(`${getPrefix()}/${knowledgeId}/publish`)
const putKnowledgeWorkflowPublish = (knowledgeId: string, publishName: string, publishDesc?: string) => {
return put<Record<string, unknown>, boolean>(`${getPrefix()}/${knowledgeId}/publish`, {
publish_name: publishName,
publish_desc: publishDesc,
})
}

/** 获取数据源节点的动态表单配置。 */
Expand Down
11 changes: 10 additions & 1 deletion ui/src/views/VIEW_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ View 负责路由、资源与模式、图加载、保存/发布/调试编排
- 默认模型抽屉接收完整 Model API;“应用到所有节点”递归修改图,保留自定义配置及禁用功能,不自动提交模型草稿。
- 发布历史入口各自查询版本,共用纯 UI `publish-history/`;第一次预览保存草稿,关闭恢复,恢复版本只回编辑态,后续保存。
版本缺少默认模型时保留当前配置;更新说明后端支持情况见 API 文档。
- 智能体发布先校验,再打开发布内容表单,提交先保存再发布;失败保留表单。
- 智能体、工具和知识库发布先校验,再关闭调试并打开共用发布内容表单,提交先保存再发布;失败保留表单。
- 模板中心共享 UI 在 `workflow/components/template-store/`,业务入口查模板,View 确认覆盖、提交并重载详情和保存基准。
创建模板由资源创建流程负责,取消/失败保留模板中心。
- 智能体、工具和知识库工作流每次打开调试都先校验画布,通过后按需保存未提交修改;校验或保存失败不打开调试。
Expand All @@ -347,8 +347,17 @@ View 负责路由、资源与模式、图加载、保存/发布/调试编排
工具使用 debug Drawer、SSE 和执行详情;知识库保留任务轮询与导入 Action。
智能体画布按 Workspace/System 资源管理选择详情、保存、发布、模型和历史 API;DebugPanel 尚未按 System 范围适配。
客户端停止读取不等于服务端停止任务。
- 工具工作流的 `workflow/tool/components/ButtonDebug.vue` 组合调试按钮与 `debug/DebugDrawer.vue`,接收页面的校验、改动检查、保存及图数据获取方法,
共用页面 loading,通过 `close()` 保留其他操作关闭调试的联动;页面保留入口权限与 API 范围选择,抽屉内部参数表单和运行结果独立管理。
`workflow/tool/components/ButtonTemplateStore.vue` 组合模板中心按钮与共用模板弹窗,负责模板查询和搜索,使用模板由页面确认、保存并刷新画布。
同目录的 `ButtonPublishHistory.vue` 组合发布历史入口与共用历史抽屉,负责版本查询、编辑提交及预览/恢复事件转发。
- 知识库工作流入口页按四种资源范围选择工作流 API,通过 `api` Props 向调试、历史与执行记录组件逐层传递;详情查询与画布范围同步路由,
System 模型使用对应范围接口,Workspace 共享暂沿用 Workspace 模型设置接口,画布辅助资源查询尚未适配。
`workflow/knowledge/components/ButtonDebug.vue` 组合调试按钮与 `debug/DebugDrawer.vue`,接收页面的校验、改动检查、保存及图数据获取方法,
共用页面 loading,画布未就绪时直接返回;通过 `close()` 保留页面其他操作关闭调试的联动,抽屉内部执行步骤与轮询独立管理。
`workflow/knowledge/components/ButtonPublishHistory.vue` 组合发布历史入口与共用历史抽屉,负责版本查询、编辑提交及预览/恢复事件转发。
同目录的 `ButtonTemplateStore.vue` 组合模板中心按钮与共用模板弹窗,负责模板查询和搜索,使用模板仍由页面确认、保存并刷新画布。
`workflow/knowledge/execution-record/ButtonExecutionRecord.vue` 组合执行记录菜单入口与同目录的 `ExecutionRecordDrawer.vue`,透传当前范围 API 和知识库 ID,管理抽屉按需挂载及关闭后卸载。
- 知识库导出仅工作流 `.kbwf`;导入确认覆盖后直接上传,不先保存旧草稿,成功重载;取消/失败保留图。
正式导入文档要求已发布;转换使用 Knowledge API,保留已有文档,不能用保存代替转换。
- 返回方法集中在各资源 `navigation.ts`;历史模式先退出预览,编辑态保留保存并退出/直接退出确认。
Expand Down
38 changes: 38 additions & 0 deletions ui/src/views/workflow/knowledge/components/ButtonAiGenerate.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<script setup lang="ts">
import { useTemplateRef } from 'vue'
import type LogicFlow from '@logicflow/core'
import type { DefaultModelSettingPayload } from '@/api/types'
import AiGeneratePanel from '@/workflow-canvas/ai-generate/panel/AiGeneratePanel.vue'
import { WorkflowMode } from '@/workflow-canvas/types'

defineOptions({ name: 'ButtonAiGenerate' })
const props = defineProps<{
label: string
disabled?: boolean
getLogicFlow: () => LogicFlow | undefined
defaultModelSettings: DefaultModelSettingPayload
}>()
const emit = defineEmits<{ open: [] }>()
const aiGeneratePanelRef = useTemplateRef<InstanceType<typeof AiGeneratePanel>>('aiGeneratePanelRef')

/* 打开生成面板前通知页面关闭调试。 */
function handleOpenAiGenerate() {
if (props.disabled) return
emit('open')
aiGeneratePanelRef.value?.open()
}
</script>

<template>
<!-- AI 生成智能体工作流 -->
<el-button plain :disabled="disabled" @click="handleOpenAiGenerate">
<MkIcon name="icon_star_colorful" />
<span>{{ label }}</span>
</el-button>
<AiGeneratePanel
ref="aiGeneratePanelRef"
:get-logic-flow="getLogicFlow"
:default-model-settings="defaultModelSettings"
:workflow-mode="WorkflowMode.Knowledge"
/>
</template>
59 changes: 59 additions & 0 deletions ui/src/views/workflow/knowledge/components/ButtonDebug.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<script setup lang="ts">
import { useTemplateRef } from 'vue'
import type LogicFlow from '@logicflow/core'
import type WorkflowApi from '@/api/admin/workspace/knowledge/workflow'
import DebugDrawer from '../debug/DebugDrawer.vue'
import { showWorkflowValidateError } from '../../components/validate-error'

defineOptions({ name: 'ButtonKnowledgeDebug' })

const props = defineProps<{
label: string
api: typeof WorkflowApi
knowledgeId: string
disabled?: boolean
hasUnsavedChanges: () => boolean
validateWorkflow: () => Promise<unknown> | undefined
saveWorkflow: () => Promise<unknown>
getGraphData: () => LogicFlow.GraphData | undefined
}>()
const loading = defineModel<boolean>('loading', { default: false })
const debugDrawerRef = useTemplateRef<InstanceType<typeof DebugDrawer>>('debugDrawerRef')

/* 每次打开调试前校验画布,有未提交修改时再保存;失败时不打开调试。 */
async function handleDebug() {
if (loading.value || props.disabled) return
try {
const validation = props.validateWorkflow()
if (!validation) return
loading.value = true
await validation.catch((error: unknown) => {
showWorkflowValidateError(error)
throw error
})
if (props.hasUnsavedChanges()) await props.saveWorkflow()
const graphData = props.getGraphData()
if (graphData) debugDrawerRef.value?.open(graphData)
} catch {
// 校验或保存失败已由对应流程提示,不打开调试。
} finally {
loading.value = false
}
}

function close() {
debugDrawerRef.value?.close()
}

defineExpose({ close })
</script>

<template>
<!-- 调试知识库工作流 -->
<MkTooltip :content="label" placement="bottom">
<el-button plain :disabled="loading || disabled" @click="handleDebug" class="w-8! min-w-8!">
<MkIcon name="icon_play_outlined" />
</el-button>
</MkTooltip>
<DebugDrawer ref="debugDrawerRef" :api="api" :knowledge-id="knowledgeId" />
</template>
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import PublishHistoryDrawer from '@/views/workflow/components/publish-history/Pu

defineOptions({ name: 'ButtonKnowledgePublishHistory' })

const props = defineProps<{ api: typeof WorkflowApi; knowledgeId: string; selectedId?: string; disabled?: boolean }>()
const props = defineProps<{ label: string; api: typeof WorkflowApi; knowledgeId: string; selectedId?: string; disabled?: boolean }>()
const visible = defineModel<boolean>('visible', { default: false })
const emit = defineEmits<{
open: []
Expand Down Expand Up @@ -59,7 +59,7 @@ function handleSubmit(payload: WorkflowVersionPayload, versionId: string) {
<!-- 打开知识库发布历史 -->
<MkDropdownItem @click="handleOpen">
<template #icon><MkIcon name="icon_history_outlined" /></template>
<span>发布历史</span>
<span>{{ label }}</span>
</MkDropdownItem>
<!-- 发布历史抽屉:由 MkDrawer 按需渲染内容。 -->
<PublishHistoryDrawer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import type { WorkflowStoreTemplate } from '@/api/types'
import TemplateStoreDialog from '@/views/workflow/components/template-store/TemplateStoreDialog.vue'

defineOptions({ name: 'ButtonKnowledgeTemplateStore' })
defineProps<{ label: string }>()
const emit = defineEmits<{ open: []; use: [template: WorkflowStoreTemplate] }>()
const templateStoreDialogRef = useTemplateRef<InstanceType<typeof TemplateStoreDialog>>('templateStoreDialogRef')

Expand Down Expand Up @@ -41,7 +42,7 @@ defineExpose({ close })
<!-- 打开模板中心 -->
<el-button plain :disabled="loading" @click="handleOpen">
<MkIcon name="icon_template_outlined" />
<span>模板中心</span>
<span>{{ label }}</span>
</el-button>
<TemplateStoreDialog
ref="templateStoreDialogRef"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<script setup lang="ts">
import { nextTick, ref, useTemplateRef } from 'vue'
import type WorkflowApi from '@/api/admin/workspace/knowledge/workflow'
import ExecutionRecordDrawer from './execution-record/ExecutionRecordDrawer.vue'
import ExecutionRecordDrawer from './ExecutionRecordDrawer.vue'

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

defineProps<{ api: typeof WorkflowApi; knowledgeId: string }>()
defineProps<{ label: string; api: typeof WorkflowApi; knowledgeId: string }>()

/* 执行记录抽屉按需挂载,关闭动画结束后卸载。 */
const drawerMounted = ref(false)
Expand All @@ -21,7 +21,7 @@ function handleOpenExecutionRecords() {
<!-- 查看执行记录 -->
<MkDropdownItem v-bind="$attrs" @click="handleOpenExecutionRecords">
<template #icon><MkIcon name="icon_schedule-report_outlined" /></template>
<span>执行记录</span>
<span>{{ label }}</span>
</MkDropdownItem>
<ExecutionRecordDrawer v-if="drawerMounted" ref="executionRecordDrawerRef" :api="api" :knowledge-id="knowledgeId" @closed="drawerMounted = false" />
</template>
Loading
Loading