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
1 change: 1 addition & 0 deletions ui/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ Node.js must satisfy `^22.18.0 || >=24.12.0` as declared in `package.json`.
Admin and Chat use ports 3000 and 3001 respectively, with `strictPort` enabled.
`npm run lint` currently delegates to `lint:*`, but no matching scripts are defined. Use
`npx eslint <changed-files>` for targeted linting until those scripts are configured.
ESLint enforces multi-word Vue component names, with `index` globally exempted in `eslint.config.ts`.

## Vite Configuration

Expand Down
6 changes: 6 additions & 0 deletions ui/eslint.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,10 @@ export default defineConfigWithVueTs(
...pluginOxlint.buildFromOxlintConfigFile('.oxlintrc.json'),

skipFormatting,

{
rules: {
'vue/multi-word-component-names': ['error', { ignores: ['index'] }],
},
},
)
24 changes: 24 additions & 0 deletions ui/src/api/API_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,30 @@ v3 编辑表单提交 `{ name, description }`,标题上限 64、更新说明
共享工具 API 不提供工作空间文件夹移动或批量接口;复用卡片、Action 和表单接收完整 Workspace
与 System 共享 API 的联合类型,不补造接口以匹配 Workspace 方法集合。

### 工具代码生成

三个范围的 `tool/tool.ts` 均提供 `postToolGenerateCode(payload)`,沿用 v2 的
`/workspace/<workspaceId>/tool/generate_code`、`/system/resource/tool/generate_code` 和
`/system/shared/tool/generate_code`。无需工具或智能体 ID,创建中的工具也可生成代码。
`ToolGenerateCodePayload`、`ToolGenerateMessage` 定义在 `types/tool.ts`;请求包含 `messages`、
`prompt`、`init_field_list`、`input_field_list`、`model_id` 和 `model_params_setting`。
返回原始 SSE Response,业务入口通过 `request(messages)` 回调交给 `GenerateContent`,
公共组件复用 `ConversationStream` 读取数据,处理 `content` 和 `error` 数据块。
停止生成与 AI 节点一致,通过 `ConversationStream.cancel()` 停止读取并清理流实例。
工具表单组件 `ToolCodeGenerate` 内部通过资源上下文选择完整 Tool/Model API;
调用方只传工具表单,不逐层传递 API、工作空间及参数列表。

### 系统提示词生成

Workspace、System 资源管理和 System 共享资源的 `application/application.ts` 均提供
`postPromptGenerate(applicationId, modelId, payload)`,请求结构共用 `PromptGeneratePayload`。
路径分别为 `/workspace/<workspaceId>/application/<applicationId>/model/<modelId>/prompt_generate`、
`/system/resource/application/<applicationId>/model/<modelId>/prompt_generate` 和
`/system/shared/application/<applicationId>/model/<modelId>/prompt_generate`,System 接口不依赖工作空间 ID。
均返回原始 SSE Response,由公共生成组件读取。画布的 `PromptGenerate` 通过
`useWorkflowStore(apiType).postPromptGenerate` 调用;三个范围的 Store 适配器分别引用对应的
Application API,直接转发生成请求,不使用查询缓存或请求去重。

### 知识库维护

`getKnowledgeMcpConfig(knowledgeId)` 与 `postKnowledgeKeywordIndex(knowledgeId)` 为预留接口方法,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { postStream } from '@/api/admin/core/request'
import type { PromptGeneratePayload } from '@/api/types'
import { ADMIN_API_BASE_PATH } from '@/api/constants'

const prefix = '/system/resource/application'

/** 使用指定模型流式生成或优化 System 资源智能体的系统提示词。 */
const postPromptGenerate = (applicationId: string, modelId: string, payload: PromptGeneratePayload) => {
return postStream(ADMIN_API_BASE_PATH, `${prefix}/${applicationId}/model/${modelId}/prompt_generate`, payload)
}

export default {
postPromptGenerate,
}
11 changes: 9 additions & 2 deletions ui/src/api/admin/system/resource-management/tool/tool.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { del, downloadRequest, getExportFile, get, post, put } from '../../../core/request'
import { del, downloadRequest, getExportFile, get, post, postStream, put } from '../../../core/request'
import type { ParamsPage, ResponsePage } from '../../../core/types'
import type { Dict, ToolDebugPayload, ToolItem, ToolPayload, ToolPylintIssue } from '@/api/types'
import type { Dict, ToolDebugPayload, ToolGenerateCodePayload, ToolItem, ToolPayload, ToolPylintIssue } from '@/api/types'
import { ADMIN_API_BASE_PATH } from '@/api/constants'

const prefix = '/system/resource/tool'

Expand Down Expand Up @@ -28,6 +29,11 @@ const postToolPylint = (code: string) => {
return post<{ code: string }, ToolPylintIssue[]>(`${prefix}/pylint`, { code })
}

/** 根据需求与参数定义流式生成 System 资源工具 Python 代码。 */
const postToolGenerateCode = (payload: ToolGenerateCodePayload) => {
return postStream(ADMIN_API_BASE_PATH, `${prefix}/generate_code`, payload)
}

/** 调试普通工具代码并返回运行结果。 */
const postToolDebug = (payload: ToolDebugPayload) => {
return post<ToolDebugPayload, unknown>(`${prefix}/debug`, payload)
Expand Down Expand Up @@ -68,6 +74,7 @@ export default {
getToolDetail,
downloadSkillFile,
postToolDebug,
postToolGenerateCode,
putUploadSkillFile,
postToolPylint,
postToolTestConnection,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { postStream } from '@/api/admin/core/request'
import type { PromptGeneratePayload } from '@/api/types'
import { ADMIN_API_BASE_PATH } from '@/api/constants'

const prefix = '/system/shared/application'

/** 使用指定模型流式生成或优化 System 共享智能体的系统提示词。 */
const postPromptGenerate = (applicationId: string, modelId: string, payload: PromptGeneratePayload) => {
return postStream(ADMIN_API_BASE_PATH, `${prefix}/${applicationId}/model/${modelId}/prompt_generate`, payload)
}

export default {
postPromptGenerate,
}
11 changes: 9 additions & 2 deletions ui/src/api/admin/system/shared-resources/tool/tool.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { del, downloadRequest, getExportFile, get, post, put } from '../../../core/request'
import { del, downloadRequest, getExportFile, get, post, postStream, put } from '../../../core/request'
import type { ParamsPage, ResponsePage } from '../../../core/types'
import type { Dict, ToolDebugPayload, ToolItem, ToolPayload, ToolPylintIssue } from '@/api/types'
import type { Dict, ToolDebugPayload, ToolGenerateCodePayload, ToolItem, ToolPayload, ToolPylintIssue } from '@/api/types'
import { ADMIN_API_BASE_PATH } from '@/api/constants'

const prefix = '/system/shared/tool'

Expand Down Expand Up @@ -33,6 +34,11 @@ const postToolPylint = (code: string) => {
return post<{ code: string }, ToolPylintIssue[]>(`${prefix}/pylint`, { code })
}

/** 根据需求与参数定义流式生成 System 共享工具 Python 代码。 */
const postToolGenerateCode = (payload: ToolGenerateCodePayload) => {
return postStream(ADMIN_API_BASE_PATH, `${prefix}/generate_code`, payload)
}

/** 调试普通工具代码并返回运行结果。 */
const postToolDebug = (payload: ToolDebugPayload) => {
return post<ToolDebugPayload, unknown>(`${prefix}/debug`, payload)
Expand Down Expand Up @@ -82,6 +88,7 @@ export default {
downloadSkillFile,
postTool,
postToolDebug,
postToolGenerateCode,
postToolImport,
putUploadSkillFile,
postToolPylint,
Expand Down
14 changes: 8 additions & 6 deletions ui/src/api/admin/workspace/tool/tool.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { del, downloadRequest, getExportFile, get, post, put } from '../../core/request'
import { del, downloadRequest, getExportFile, get, post, postStream, put } from '../../core/request'
import type { ParamsPage, ResponsePage } from '../../core/types'
import type { Dict, ToolDebugPayload, ToolItem, ToolPayload, ToolPylintIssue } from '@/api/types'
import type { Dict, ToolDebugPayload, ToolGenerateCodePayload, ToolItem, ToolPayload, ToolPylintIssue } from '@/api/types'
import { ADMIN_API_BASE_PATH } from '@/api/constants'
import { getWorkspaceId } from '@/utils/resource-context'

const getPrefix = () => {
Expand Down Expand Up @@ -46,10 +47,10 @@ const postToolPylint = (code: string) => {
return post<{ code: string }, ToolPylintIssue[]>(`${getPrefix()}/pylint`, { code })
}

// const generateCode = (data: any) => {
// const p = (window.MaxKB?.prefix ? window.MaxKB?.prefix : '/admin') + '/api'
// return postStream(`${p}${getPrefix()}/generate_code`, data)
// }
/** 根据需求与参数定义流式生成工具 Python 代码。 */
const postToolGenerateCode = (payload: ToolGenerateCodePayload) => {
return postStream(ADMIN_API_BASE_PATH, `${getPrefix()}/generate_code`, payload)
}

/** 调试普通工具代码并返回运行结果。 */
const postToolDebug = (payload: ToolDebugPayload) => {
Expand Down Expand Up @@ -110,6 +111,7 @@ export default {

postTool,
postToolDebug,
postToolGenerateCode,
postToolImport,
putUploadSkillFile,
postToolPylint,
Expand Down
15 changes: 15 additions & 0 deletions ui/src/api/types/tool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,21 @@ export interface ToolDebugPayload {
input_field_list: ToolInputField[]
}

export interface ToolGenerateMessage {
content: string
role: 'user' | 'ai'
}

/** 工具代码生成沿用 v2 的模型、参数定义与多轮消息协议。 */
export interface ToolGenerateCodePayload {
messages: ToolGenerateMessage[]
prompt: string
model_id: string
model_params_setting: Record<string, unknown>
init_field_list: DynamicFormField[]
input_field_list: ToolInputField[]
}

export interface ToolPylintIssue {
column: number
endColumn: number
Expand Down
18 changes: 18 additions & 0 deletions ui/src/components/COMPONENT_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,8 @@ Python 与 JSON 编辑器通过 `<style lang="scss" scoped src="./style.scss">`
或 System 共享资源的工具 API;普通编辑与全屏编辑使用相同的接口选择逻辑。
组件最多展示 50 条诊断,并在代码停止输入 500ms 后检查。编辑器提供内置全屏
入口;全屏确认时更新 `v-model` 并触发 `submit-dialog`,`header-extra` 插槽用于添加全屏标题栏操作。
该插槽提供 `replaceCode(value: string)` 回调,仅替换全屏编辑草稿;点击“确定”后才回写
外层 `v-model`,直接关闭则丢弃草稿。

### JsonInput

Expand Down Expand Up @@ -584,6 +586,22 @@ Model 配置器的默认模型也使用 `SelectModel`,仅展示已选的可选

业务组件显式导入,可调用固定业务 API;页面保留自身的列表查询、路由和保存编排。

### GenerateContent

`business/generate-content/index.vue` 封装生成入口按钮和弹窗,供提示词与 Python
代码生成复用,不通过 `mode` 判断业务。`title`、`placeholder`、`emptyText` 提供文案,
`disabled` 统一控制入口、发送和重新生成,生成期间由内部 `loading` 阻止重复提交。
工具侧在弹窗关闭时允许打开选模型,打开后根据模型及参数加载状态设置 `disabled`。
`request(messages)` 接收 `PromptGenerateMessage[]` 并返回原始 `Promise<Response>`,调用方负责
选择 API、模板和请求参数。公共组件统一使用 `ConversationStream` 处理流式结果、错误、停止、
重新生成和会话清理,不感知工具表单、资源范围或模型接口。

`header-extra` 插槽提供 `{ loading }`,用于放置模型选择等业务设置;`open` 事件初始化业务上下文,
`closed` 在关闭动画结束后清理业务状态,`replace(content)` 交由调用方处理结果并回写。
重新生成追加用户消息 `Re generate` 后请求;停止调用当前流的 `cancel()`,保留已生成内容。
输入支持 Enter 发送、Ctrl/Shift/Alt/Meta + Enter 在光标处换行、原生文本粘贴,拒绝纯空白,
输入法组合期间不提交;键盘和粘贴事件停止冒泡,输入上限 100000 字符。

### FolderTree

Workspace 的文件夹虚拟树业务组件。组件根据当前资源上下文和 `source` 调用统一文件夹接口,负责
Expand Down
Loading
Loading