From 867e9e53bf767d244a8a33348ece463af1ed5d79 Mon Sep 17 00:00:00 2001 From: ccmjga Date: Sun, 1 Jun 2025 22:53:13 +0800 Subject: [PATCH] init command execute mode --- .../config/ai/DepartmentOperatorTool.java | 38 + .../mjga/config/ai/SystemToolAssistant.java | 10 + .../zl/mjga/config/ai/ToolsInitializer.java | 27 + .../zl/mjga/config/ai/UserOperatorTool.java | 43 + .../com/zl/mjga/controller/AiController.java | 29 +- .../com/zl/mjga/service/AiChatService.java | 16 +- .../java/com/zl/mjga/service/LlmService.java | 3 +- backend/src/main/resources/application.yml | 4 + frontend/src/api/mocks/aiHandlers.ts | 2 +- frontend/src/api/schema/openapi.json | 37 +- frontend/src/api/types/schema.d.ts | 3550 +++++++++-------- frontend/src/components/Assistant.vue | 34 +- frontend/src/composables/ai/useAiChat.ts | 49 +- frontend/src/router/constants.ts | 2 - frontend/src/router/modules/ai.ts | 8 - frontend/src/views/AiChatView.vue | 398 -- 16 files changed, 2059 insertions(+), 2191 deletions(-) create mode 100644 backend/src/main/java/com/zl/mjga/config/ai/DepartmentOperatorTool.java create mode 100644 backend/src/main/java/com/zl/mjga/config/ai/SystemToolAssistant.java create mode 100644 backend/src/main/java/com/zl/mjga/config/ai/ToolsInitializer.java create mode 100644 backend/src/main/java/com/zl/mjga/config/ai/UserOperatorTool.java delete mode 100644 frontend/src/views/AiChatView.vue diff --git a/backend/src/main/java/com/zl/mjga/config/ai/DepartmentOperatorTool.java b/backend/src/main/java/com/zl/mjga/config/ai/DepartmentOperatorTool.java new file mode 100644 index 0000000..f06c751 --- /dev/null +++ b/backend/src/main/java/com/zl/mjga/config/ai/DepartmentOperatorTool.java @@ -0,0 +1,38 @@ +package com.zl.mjga.config.ai; + +import com.zl.mjga.exception.BusinessException; +import com.zl.mjga.repository.DepartmentRepository; +import com.zl.mjga.service.DepartmentService; +import dev.langchain4j.agent.tool.P; +import dev.langchain4j.agent.tool.Tool; +import dev.langchain4j.model.output.structured.Description; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.jooq.generated.mjga.tables.pojos.Department; +import org.springframework.stereotype.Component; + +@Description("和部门管理有关的操作工具") +@RequiredArgsConstructor +@Component +public class DepartmentOperatorTool { + + private final DepartmentService departmentService; + private final DepartmentRepository departmentRepository; + + @Tool(value = "创建部门") + void createDepartment( + @P(value = "部门名称") String departmentName, + @P(value = "上级部门名称", required = false) String parentDepartmentName) { + Department exist = departmentRepository.fetchOneByName(departmentName); + if (exist != null) { + throw new BusinessException("当前部门已存在"); + } + if (StringUtils.isNotEmpty(parentDepartmentName)) { + Department parent = departmentRepository.fetchOneByName(parentDepartmentName); + if (parent == null) { + throw new BusinessException("上级部门不存在"); + } + } + departmentService.upsertDepartment(new Department(null, departmentName, null)); + } +} diff --git a/backend/src/main/java/com/zl/mjga/config/ai/SystemToolAssistant.java b/backend/src/main/java/com/zl/mjga/config/ai/SystemToolAssistant.java new file mode 100644 index 0000000..55aa1e3 --- /dev/null +++ b/backend/src/main/java/com/zl/mjga/config/ai/SystemToolAssistant.java @@ -0,0 +1,10 @@ +package com.zl.mjga.config.ai; + +import dev.langchain4j.service.MemoryId; +import dev.langchain4j.service.TokenStream; +import dev.langchain4j.service.UserMessage; +import dev.langchain4j.service.memory.ChatMemoryAccess; + +public interface SystemToolAssistant extends ChatMemoryAccess { + TokenStream ask(@MemoryId String memoryId, @UserMessage String question); +} diff --git a/backend/src/main/java/com/zl/mjga/config/ai/ToolsInitializer.java b/backend/src/main/java/com/zl/mjga/config/ai/ToolsInitializer.java new file mode 100644 index 0000000..681e972 --- /dev/null +++ b/backend/src/main/java/com/zl/mjga/config/ai/ToolsInitializer.java @@ -0,0 +1,27 @@ +package com.zl.mjga.config.ai; + +import dev.langchain4j.community.model.zhipu.ZhipuAiStreamingChatModel; +import dev.langchain4j.memory.chat.MessageWindowChatMemory; +import dev.langchain4j.service.AiServices; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; + +@Configuration +@RequiredArgsConstructor +public class ToolsInitializer { + + private final UserOperatorTool userOperatorTool; + private final DepartmentOperatorTool departmentOperatorTool; + + @Bean + @DependsOn("flywayInitializer") + public SystemToolAssistant zhiPuToolAssistant(ZhipuAiStreamingChatModel zhipuChatModel) { + return AiServices.builder(SystemToolAssistant.class) + .streamingChatModel(zhipuChatModel) + .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10)) + .tools(userOperatorTool, departmentOperatorTool) + .build(); + } +} diff --git a/backend/src/main/java/com/zl/mjga/config/ai/UserOperatorTool.java b/backend/src/main/java/com/zl/mjga/config/ai/UserOperatorTool.java new file mode 100644 index 0000000..820bfb0 --- /dev/null +++ b/backend/src/main/java/com/zl/mjga/config/ai/UserOperatorTool.java @@ -0,0 +1,43 @@ +package com.zl.mjga.config.ai; + +import com.zl.mjga.dto.urp.UserUpsertDto; +import com.zl.mjga.exception.BusinessException; +import com.zl.mjga.repository.UserRepository; +import com.zl.mjga.service.IdentityAccessService; +import dev.langchain4j.agent.tool.P; +import dev.langchain4j.agent.tool.Tool; +import dev.langchain4j.model.output.structured.Description; +import lombok.RequiredArgsConstructor; +import org.jooq.generated.mjga.tables.pojos.User; +import org.springframework.stereotype.Component; + +@Description("和用户管理有关的操作工具") +@RequiredArgsConstructor +@Component +public class UserOperatorTool { + + private final IdentityAccessService identityAccessService; + private final UserRepository userRepository; + + @Tool(value = "创建用户或注册用户") + void createUser(@P(value = "用户名") String username) { + User user = userRepository.fetchOneByUsername(username); + if (user != null) { + throw new BusinessException("用户已存在"); + } + identityAccessService.upsertUser(new UserUpsertDto(null, username, username, true)); + } + + @Tool(value = "删除用户") + void deleteUser(@P(value = "用户名") String username) { + userRepository.deleteByUsername(username); + } + + @Tool(value = "编辑/更新/更改用户") + void updateUser( + @P(value = "用户名") String username, + @P(value = "密码", required = false) String password, + @P(value = "是否开启", required = false) Boolean enable) { + identityAccessService.upsertUser(new UserUpsertDto(null, username, password, enable)); + } +} diff --git a/backend/src/main/java/com/zl/mjga/controller/AiController.java b/backend/src/main/java/com/zl/mjga/controller/AiController.java index e1fe2c9..2a9bf63 100644 --- a/backend/src/main/java/com/zl/mjga/controller/AiController.java +++ b/backend/src/main/java/com/zl/mjga/controller/AiController.java @@ -42,11 +42,34 @@ public class AiController { private final UserRepository userRepository; private final DepartmentRepository departmentRepository; + @PostMapping(value = "/action/execute", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public Flux actionExecute(Principal principal, @RequestBody String userMessage) { + Sinks.Many sink = Sinks.many().unicast().onBackpressureBuffer(); + TokenStream chat = aiChatService.actionExecuteWithZhiPu(principal.getName(), userMessage); + chat.onPartialResponse( + text -> + sink.tryEmitNext( + StringUtils.isNotEmpty(text) ? text.replace(" ", "␣").replace("\t", "⇥") : "")) + .onToolExecuted( + toolExecution -> log.debug("当前请求 {} 成功执行函数调用: {}", userMessage, toolExecution)) + .onCompleteResponse( + r -> { + sink.tryEmitComplete(); + sink.emitComplete(Sinks.EmitFailureHandler.FAIL_FAST); + }) + .onError(sink::tryEmitError) + .start(); + return sink.asFlux().timeout(Duration.ofSeconds(120)); + } + @PostMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux chat(Principal principal, @RequestBody String userMessage) { Sinks.Many sink = Sinks.many().unicast().onBackpressureBuffer(); TokenStream chat = aiChatService.chatPrecedenceLlmWith(principal.getName(), userMessage); - chat.onPartialResponse(text -> sink.tryEmitNext(text.replace(" ", "␣").replace("\t", "⇥"))) + chat.onPartialResponse( + text -> + sink.tryEmitNext( + StringUtils.isNotEmpty(text) ? text.replace(" ", "␣").replace("\t", "⇥") : "")) .onCompleteResponse( r -> { sink.tryEmitComplete(); @@ -71,8 +94,8 @@ public class AiController { return llmService.pageQueryLlm(pageRequestDto, llmQueryDto); } - @PostMapping("/action/chat") - public Map actionChat(@RequestBody String message) { + @PostMapping("/action/search") + public Map searchAction(@RequestBody String message) { AiLlmConfig aiLlmConfig = llmService.loadConfig(LlmCodeEnum.ZHI_PU); if (!aiLlmConfig.getEnable()) { throw new BusinessException("命令模型未启用,请开启后再试。"); diff --git a/backend/src/main/java/com/zl/mjga/service/AiChatService.java b/backend/src/main/java/com/zl/mjga/service/AiChatService.java index a77586d..262f9e3 100644 --- a/backend/src/main/java/com/zl/mjga/service/AiChatService.java +++ b/backend/src/main/java/com/zl/mjga/service/AiChatService.java @@ -1,6 +1,7 @@ package com.zl.mjga.service; import com.zl.mjga.config.ai.AiChatAssistant; +import com.zl.mjga.config.ai.SystemToolAssistant; import com.zl.mjga.exception.BusinessException; import dev.langchain4j.service.TokenStream; import java.util.Optional; @@ -17,6 +18,7 @@ public class AiChatService { private final AiChatAssistant deepSeekChatAssistant; private final AiChatAssistant zhiPuChatAssistant; + private final SystemToolAssistant zhiPuToolAssistant; private final LlmService llmService; public TokenStream chatWithDeepSeek(String sessionIdentifier, String userMessage) { @@ -27,14 +29,22 @@ public class AiChatService { return zhiPuChatAssistant.chat(sessionIdentifier, userMessage); } + public TokenStream actionExecuteWithZhiPu(String sessionIdentifier, String userMessage) { + return zhiPuToolAssistant.ask(sessionIdentifier, userMessage); + } + public TokenStream chatPrecedenceLlmWith(String sessionIdentifier, String userMessage) { - Optional precedenceLlmBy = llmService.getPrecedenceChatLlmBy(true); - AiLlmConfig aiLlmConfig = precedenceLlmBy.orElseThrow(() -> new BusinessException("没有开启的大模型")); - LlmCodeEnum code = aiLlmConfig.getCode(); + LlmCodeEnum code = getPrecedenceLlmCode(); return switch (code) { case ZHI_PU -> zhiPuChatAssistant.chat(sessionIdentifier, userMessage); case DEEP_SEEK -> deepSeekChatAssistant.chat(sessionIdentifier, userMessage); default -> throw new BusinessException(String.format("无效的模型代码 %s", code)); }; } + + private LlmCodeEnum getPrecedenceLlmCode() { + Optional precedenceLlmBy = llmService.getPrecedenceChatLlmBy(true); + AiLlmConfig aiLlmConfig = precedenceLlmBy.orElseThrow(() -> new BusinessException("没有开启的大模型")); + return aiLlmConfig.getCode(); + } } diff --git a/backend/src/main/java/com/zl/mjga/service/LlmService.java b/backend/src/main/java/com/zl/mjga/service/LlmService.java index 7618c9a..e2cd1d8 100644 --- a/backend/src/main/java/com/zl/mjga/service/LlmService.java +++ b/backend/src/main/java/com/zl/mjga/service/LlmService.java @@ -7,7 +7,6 @@ import com.zl.mjga.dto.PageResponseDto; import com.zl.mjga.dto.ai.LlmQueryDto; import com.zl.mjga.dto.ai.LlmVm; import com.zl.mjga.repository.LlmRepository; - import java.util.Comparator; import java.util.List; import java.util.Objects; @@ -37,7 +36,7 @@ public class LlmService { List aiLlmConfigs = llmRepository.fetchByEnable(enable); return aiLlmConfigs.stream() .filter(aiLlmConfig -> LlmTypeEnum.CHAT.equals(aiLlmConfig.getType())) - .max(Comparator.comparingInt(AiLlmConfig::getPriority)); + .max(Comparator.comparingInt(AiLlmConfig::getPriority)); } public PageResponseDto> pageQueryLlm( diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index 56c3477..1eb0005 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -4,6 +4,10 @@ logging: file: path: /var/log level: + dev: + langchain4j: debug + com: + zl: debug org: springframework: security: debug diff --git a/frontend/src/api/mocks/aiHandlers.ts b/frontend/src/api/mocks/aiHandlers.ts index d20735f..511fa25 100644 --- a/frontend/src/api/mocks/aiHandlers.ts +++ b/frontend/src/api/mocks/aiHandlers.ts @@ -13,7 +13,7 @@ export default [ ); return response; }), - http.post("/ai/action/chat", () => { + http.post("/ai/action/search", () => { const response = HttpResponse.json({ action: "CREATE_USER", }); diff --git a/frontend/src/api/schema/openapi.json b/frontend/src/api/schema/openapi.json index 3eb5b25..a9fe63b 100644 --- a/frontend/src/api/schema/openapi.json +++ b/frontend/src/api/schema/openapi.json @@ -747,12 +747,12 @@ } } }, - "/ai/action/chat": { + "/ai/action/search": { "post": { "tags": [ "ai-controller" ], - "operationId": "actionChat", + "operationId": "searchAction", "requestBody": { "content": { "application/json": { @@ -780,6 +780,39 @@ } } }, + "/ai/action/execute": { + "post": { + "tags": [ + "ai-controller" + ], + "operationId": "actionExecute", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/event-stream": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, "/scheduler/page-query": { "get": { "tags": [ diff --git a/frontend/src/api/types/schema.d.ts b/frontend/src/api/types/schema.d.ts index df74447..73a79b1 100644 --- a/frontend/src/api/types/schema.d.ts +++ b/frontend/src/api/types/schema.d.ts @@ -4,1765 +4,1805 @@ */ export interface paths { - "/scheduler/job/update": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put: operations["updateJob"]; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/llm": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put: operations["updateLlm"]; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/scheduler/trigger/resume": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["resumeTrigger"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/scheduler/trigger/pause": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["pauseTrigger"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/scheduler/job/trigger": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["triggerJob"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/position": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["upsertPosition"]; - delete: operations["deletePosition"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/user": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryUserWithRolePermission"]; - put?: never; - post: operations["upsertUser"]; - delete: operations["deleteUser"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/role": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryRoleWithPermission"]; - put?: never; - post: operations["upsertRole"]; - delete: operations["deleteRole"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/role/unbind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["unBindRoleBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/role/bind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["bindRoleBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/position/unbind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["unBindPositionBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/position/bind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["bindPositionBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/permission": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["upsertPermission"]; - delete: operations["deletePermission"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/permission/unbind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["unBindPermissionBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/permission/bind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["bindPermissionBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/me": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["currentUser"]; - put?: never; - post: operations["upsertMe"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/department/unbind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["unBindDepartmentBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/department/bind": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["bindDepartmentBy"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/department": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["upsertDepartment"]; - delete: operations["deleteDepartment"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/auth/sign-up": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["signUp"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/auth/sign-out": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["signOut"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/auth/sign-in": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["signIn"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/chat": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["chat"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/action/chat": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["actionChat"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/scheduler/page-query": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["pageQuery"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/position/query": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryPositions"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/position/page-query": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["pageQueryPositions"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/users": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryUsers"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/roles": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryRoles"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/iam/permissions": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryPermissions"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/department/query-available": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["queryAvailableParentDepartmentsBy"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/department/page-query": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["pageQueryDepartments"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/llm/page-query": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["pageQueryLlm"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/action/user": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete: operations["deleteUser_1"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/ai/action/department": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete: operations["deleteDepartment_1"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; + "/scheduler/job/update": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["updateJob"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/llm": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["updateLlm"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/scheduler/trigger/resume": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["resumeTrigger"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/scheduler/trigger/pause": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["pauseTrigger"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/scheduler/job/trigger": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["triggerJob"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/position": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["upsertPosition"]; + delete: operations["deletePosition"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/user": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryUserWithRolePermission"]; + put?: never; + post: operations["upsertUser"]; + delete: operations["deleteUser"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/role": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryRoleWithPermission"]; + put?: never; + post: operations["upsertRole"]; + delete: operations["deleteRole"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/role/unbind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["unBindRoleBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/role/bind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["bindRoleBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/position/unbind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["unBindPositionBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/position/bind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["bindPositionBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/permission": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["upsertPermission"]; + delete: operations["deletePermission"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/permission/unbind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["unBindPermissionBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/permission/bind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["bindPermissionBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/me": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["currentUser"]; + put?: never; + post: operations["upsertMe"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/department/unbind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["unBindDepartmentBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/department/bind": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["bindDepartmentBy"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/department": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["upsertDepartment"]; + delete: operations["deleteDepartment"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/sign-up": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["signUp"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/sign-out": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["signOut"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/sign-in": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["signIn"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/chat": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["chat"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/search": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["searchAction"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/execute": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["actionExecute"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/scheduler/page-query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["pageQuery"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/position/query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryPositions"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/position/page-query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["pageQueryPositions"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryUsers"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/roles": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryRoles"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/iam/permissions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryPermissions"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/department/query-available": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["queryAvailableParentDepartmentsBy"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/department/page-query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["pageQueryDepartments"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/llm/page-query": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["pageQueryLlm"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/user": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["deleteUser_1"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/ai/action/department": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["deleteDepartment_1"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; } export type webhooks = Record; export interface components { - schemas: { - TriggerKeyDto: { - name: string; - group: string; - }; - LlmVm: { - /** Format: int64 */ - id: number; - name: string; - modelName: string; - type: string; - apiKey: string; - url: string; - enable: boolean; - /** Format: int32 */ - priority: number; - }; - JobKeyDto: { - name: string; - group: string; - }; - Position: { - /** Format: int64 */ - id?: number; - name?: string; - }; - UserUpsertDto: { - /** Format: int64 */ - id?: number; - username: string; - password?: string; - enable: boolean; - }; - RoleUpsertDto: { - /** Format: int64 */ - id?: number; - code: string; - name: string; - }; - RoleBindDto: { - /** Format: int64 */ - userId: number; - roleIds: number[]; - }; - PositionBindDto: { - /** Format: int64 */ - userId: number; - positionIds: number[]; - }; - PermissionUpsertDto: { - /** Format: int64 */ - id?: number; - code: string; - name: string; - }; - PermissionBindDto: { - /** Format: int64 */ - roleId: number; - permissionIds: number[]; - }; - DepartmentBindDto: { - /** Format: int64 */ - userId: number; - departmentIds: number[]; - }; - Department: { - /** Format: int64 */ - id?: number; - name?: string; - /** Format: int64 */ - parentId?: number; - }; - SignUpDto: { - username: string; - password: string; - }; - SignInDto: { - username: string; - password: string; - }; - PageRequestDto: { - /** Format: int64 */ - page?: number; - /** Format: int64 */ - size?: number; - /** - * @description 排序字段 - * @example name:asc,age:desc - */ - sortBy?: string; - /** Format: int64 */ - offset?: number; - sortFields?: components["schemas"]["SortFieldObject"][]; - }; - SortFieldObject: { - name?: string; - /** @enum {string} */ - order?: "ASC" | "DESC" | "DEFAULT"; - }; - QueryDto: { - name?: string; - }; - JobTriggerDto: { - name?: string; - group?: string; - className?: string; - jobDataMap?: { - [key: string]: Record; - }; - triggerName?: string; - triggerGroup?: string; - schedulerType?: string; - cronExpression?: string; - /** Format: int64 */ - startTime?: number; - /** Format: int64 */ - endTime?: number; - /** Format: int64 */ - nextFireTime?: number; - /** Format: int64 */ - previousFireTime?: number; - triggerState?: string; - triggerJobDataMap?: { - [key: string]: Record; - }; - }; - PageResponseDtoListJobTriggerDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["JobTriggerDto"][]; - }; - PositionQueryDto: { - /** Format: int64 */ - userId?: number; - name?: string; - /** @enum {string} */ - bindState?: "BIND" | "UNBIND" | "ALL"; - }; - PageResponseDtoListPositionRespDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["PositionRespDto"][]; - }; - PositionRespDto: { - /** Format: int64 */ - id: number; - name: string; - /** Format: int64 */ - parentId?: number; - isBound?: boolean; - }; - UserQueryDto: { - username?: string; - }; - PageResponseDtoListUserRolePermissionDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["UserRolePermissionDto"][]; - }; - PermissionRespDto: { - /** Format: int64 */ - id?: number; - code?: string; - name?: string; - isBound?: boolean; - }; - RoleDto: { - /** Format: int64 */ - id?: number; - code?: string; - name?: string; - isBound?: boolean; - permissions?: components["schemas"]["PermissionRespDto"][]; - }; - UserRolePermissionDto: { - /** Format: int64 */ - id?: number; - username?: string; - password?: string; - enable?: boolean; - roles?: components["schemas"]["RoleDto"][]; - /** Format: date-time */ - createTime?: string; - permissions?: components["schemas"]["PermissionRespDto"][]; - }; - RoleQueryDto: { - /** Format: int64 */ - userId?: number; - /** Format: int64 */ - roleId?: number; - roleCode?: string; - roleName?: string; - roleIdList?: number[]; - /** @enum {string} */ - bindState?: "BIND" | "UNBIND" | "ALL"; - }; - PageResponseDtoListRoleDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["RoleDto"][]; - }; - PermissionQueryDto: { - /** Format: int64 */ - roleId?: number; - /** Format: int64 */ - permissionId?: number; - permissionCode?: string; - permissionName?: string; - permissionIdList?: number[]; - /** @enum {string} */ - bindState?: "BIND" | "UNBIND" | "ALL"; - }; - PageResponseDtoListPermissionRespDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["PermissionRespDto"][]; - }; - DepartmentQueryDto: { - /** Format: int64 */ - userId?: number; - name?: string; - enable?: boolean; - /** @enum {string} */ - bindState?: "BIND" | "UNBIND" | "ALL"; - }; - DepartmentRespDto: { - /** Format: int64 */ - id: number; - name: string; - /** Format: int64 */ - parentId?: number; - parentName?: string; - isBound?: boolean; - }; - PageResponseDtoListDepartmentRespDto: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["DepartmentRespDto"][]; - }; - LlmQueryDto: { - name?: string; - type?: string; - }; - PageResponseDtoListLlmVm: { - /** Format: int64 */ - total?: number; - data?: components["schemas"]["LlmVm"][]; - }; - }; - responses: never; - parameters: never; - requestBodies: never; - headers: never; - pathItems: never; + schemas: { + TriggerKeyDto: { + name: string; + group: string; + }; + LlmVm: { + /** Format: int64 */ + id: number; + name: string; + modelName: string; + type: string; + apiKey: string; + url: string; + enable: boolean; + /** Format: int32 */ + priority: number; + }; + JobKeyDto: { + name: string; + group: string; + }; + Position: { + /** Format: int64 */ + id?: number; + name?: string; + }; + UserUpsertDto: { + /** Format: int64 */ + id?: number; + username: string; + password?: string; + enable: boolean; + }; + RoleUpsertDto: { + /** Format: int64 */ + id?: number; + code: string; + name: string; + }; + RoleBindDto: { + /** Format: int64 */ + userId: number; + roleIds: number[]; + }; + PositionBindDto: { + /** Format: int64 */ + userId: number; + positionIds: number[]; + }; + PermissionUpsertDto: { + /** Format: int64 */ + id?: number; + code: string; + name: string; + }; + PermissionBindDto: { + /** Format: int64 */ + roleId: number; + permissionIds: number[]; + }; + DepartmentBindDto: { + /** Format: int64 */ + userId: number; + departmentIds: number[]; + }; + Department: { + /** Format: int64 */ + id?: number; + name?: string; + /** Format: int64 */ + parentId?: number; + }; + SignUpDto: { + username: string; + password: string; + }; + SignInDto: { + username: string; + password: string; + }; + PageRequestDto: { + /** Format: int64 */ + page?: number; + /** Format: int64 */ + size?: number; + /** + * @description 排序字段 + * @example name:asc,age:desc + */ + sortBy?: string; + /** Format: int64 */ + offset?: number; + sortFields?: components["schemas"]["SortFieldObject"][]; + }; + SortFieldObject: { + name?: string; + /** @enum {string} */ + order?: "ASC" | "DESC" | "DEFAULT"; + }; + QueryDto: { + name?: string; + }; + JobTriggerDto: { + name?: string; + group?: string; + className?: string; + jobDataMap?: { + [key: string]: Record; + }; + triggerName?: string; + triggerGroup?: string; + schedulerType?: string; + cronExpression?: string; + /** Format: int64 */ + startTime?: number; + /** Format: int64 */ + endTime?: number; + /** Format: int64 */ + nextFireTime?: number; + /** Format: int64 */ + previousFireTime?: number; + triggerState?: string; + triggerJobDataMap?: { + [key: string]: Record; + }; + }; + PageResponseDtoListJobTriggerDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["JobTriggerDto"][]; + }; + PositionQueryDto: { + /** Format: int64 */ + userId?: number; + name?: string; + /** @enum {string} */ + bindState?: "BIND" | "UNBIND" | "ALL"; + }; + PageResponseDtoListPositionRespDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["PositionRespDto"][]; + }; + PositionRespDto: { + /** Format: int64 */ + id: number; + name: string; + /** Format: int64 */ + parentId?: number; + isBound?: boolean; + }; + UserQueryDto: { + username?: string; + }; + PageResponseDtoListUserRolePermissionDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["UserRolePermissionDto"][]; + }; + PermissionRespDto: { + /** Format: int64 */ + id?: number; + code?: string; + name?: string; + isBound?: boolean; + }; + RoleDto: { + /** Format: int64 */ + id?: number; + code?: string; + name?: string; + isBound?: boolean; + permissions?: components["schemas"]["PermissionRespDto"][]; + }; + UserRolePermissionDto: { + /** Format: int64 */ + id?: number; + username?: string; + password?: string; + enable?: boolean; + roles?: components["schemas"]["RoleDto"][]; + /** Format: date-time */ + createTime?: string; + permissions?: components["schemas"]["PermissionRespDto"][]; + }; + RoleQueryDto: { + /** Format: int64 */ + userId?: number; + /** Format: int64 */ + roleId?: number; + roleCode?: string; + roleName?: string; + roleIdList?: number[]; + /** @enum {string} */ + bindState?: "BIND" | "UNBIND" | "ALL"; + }; + PageResponseDtoListRoleDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["RoleDto"][]; + }; + PermissionQueryDto: { + /** Format: int64 */ + roleId?: number; + /** Format: int64 */ + permissionId?: number; + permissionCode?: string; + permissionName?: string; + permissionIdList?: number[]; + /** @enum {string} */ + bindState?: "BIND" | "UNBIND" | "ALL"; + }; + PageResponseDtoListPermissionRespDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["PermissionRespDto"][]; + }; + DepartmentQueryDto: { + /** Format: int64 */ + userId?: number; + name?: string; + enable?: boolean; + /** @enum {string} */ + bindState?: "BIND" | "UNBIND" | "ALL"; + }; + DepartmentRespDto: { + /** Format: int64 */ + id: number; + name: string; + /** Format: int64 */ + parentId?: number; + parentName?: string; + isBound?: boolean; + }; + PageResponseDtoListDepartmentRespDto: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["DepartmentRespDto"][]; + }; + LlmQueryDto: { + name?: string; + type?: string; + }; + PageResponseDtoListLlmVm: { + /** Format: int64 */ + total?: number; + data?: components["schemas"]["LlmVm"][]; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; } export type $defs = Record; export interface operations { - updateJob: { - parameters: { - query: { - cron: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TriggerKeyDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - updateLlm: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["LlmVm"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - resumeTrigger: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TriggerKeyDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - pauseTrigger: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TriggerKeyDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - triggerJob: { - parameters: { - query: { - startAt: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["JobKeyDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - upsertPosition: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Position"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deletePosition: { - parameters: { - query: { - id: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - queryUserWithRolePermission: { - parameters: { - query: { - userId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["UserRolePermissionDto"]; - }; - }; - }; - }; - upsertUser: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["UserUpsertDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteUser: { - parameters: { - query: { - userId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - queryRoleWithPermission: { - parameters: { - query: { - roleId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["RoleDto"]; - }; - }; - }; - }; - upsertRole: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["RoleUpsertDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteRole: { - parameters: { - query: { - roleId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - unBindRoleBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["RoleBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - bindRoleBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["RoleBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - unBindPositionBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PositionBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - bindPositionBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PositionBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - upsertPermission: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PermissionUpsertDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deletePermission: { - parameters: { - query: { - permissionId: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - unBindPermissionBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PermissionBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - bindPermissionBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PermissionBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - currentUser: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["UserRolePermissionDto"]; - }; - }; - }; - }; - upsertMe: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["UserUpsertDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - unBindDepartmentBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["DepartmentBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - bindDepartmentBy: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["DepartmentBindDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - upsertDepartment: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Department"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteDepartment: { - parameters: { - query: { - id: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - signUp: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["SignUpDto"]; - }; - }; - responses: { - /** @description Created */ - 201: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - signOut: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - signIn: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["SignInDto"]; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - chat: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": string; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "text/event-stream": string[]; - }; - }; - }; - }; - actionChat: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": string; - }; - }; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": { - [key: string]: string; - }; - }; - }; - }; - }; - pageQuery: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - queryDto: components["schemas"]["QueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListJobTriggerDto"]; - }; - }; - }; - }; - queryPositions: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["Position"][]; - }; - }; - }; - }; - pageQueryPositions: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - positionQueryDto: components["schemas"]["PositionQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListPositionRespDto"]; - }; - }; - }; - }; - queryUsers: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - userQueryDto: components["schemas"]["UserQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListUserRolePermissionDto"]; - }; - }; - }; - }; - queryRoles: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - roleQueryDto: components["schemas"]["RoleQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListRoleDto"]; - }; - }; - }; - }; - queryPermissions: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - permissionQueryDto: components["schemas"]["PermissionQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListPermissionRespDto"]; - }; - }; - }; - }; - queryAvailableParentDepartmentsBy: { - parameters: { - query?: { - id?: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["Department"][]; - }; - }; - }; - }; - pageQueryDepartments: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - departmentQueryDto: components["schemas"]["DepartmentQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListDepartmentRespDto"]; - }; - }; - }; - }; - pageQueryLlm: { - parameters: { - query: { - pageRequestDto: components["schemas"]["PageRequestDto"]; - llmQueryDto: components["schemas"]["LlmQueryDto"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["PageResponseDtoListLlmVm"]; - }; - }; - }; - }; - deleteUser_1: { - parameters: { - query: { - username: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - deleteDepartment_1: { - parameters: { - query: { - name: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; + updateJob: { + parameters: { + query: { + cron: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TriggerKeyDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateLlm: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["LlmVm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + resumeTrigger: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TriggerKeyDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + pauseTrigger: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TriggerKeyDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + triggerJob: { + parameters: { + query: { + startAt: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["JobKeyDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + upsertPosition: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Position"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deletePosition: { + parameters: { + query: { + id: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + queryUserWithRolePermission: { + parameters: { + query: { + userId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["UserRolePermissionDto"]; + }; + }; + }; + }; + upsertUser: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UserUpsertDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteUser: { + parameters: { + query: { + userId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + queryRoleWithPermission: { + parameters: { + query: { + roleId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["RoleDto"]; + }; + }; + }; + }; + upsertRole: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RoleUpsertDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteRole: { + parameters: { + query: { + roleId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + unBindRoleBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RoleBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + bindRoleBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RoleBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + unBindPositionBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PositionBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + bindPositionBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PositionBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + upsertPermission: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PermissionUpsertDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deletePermission: { + parameters: { + query: { + permissionId: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + unBindPermissionBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PermissionBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + bindPermissionBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PermissionBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + currentUser: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["UserRolePermissionDto"]; + }; + }; + }; + }; + upsertMe: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UserUpsertDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + unBindDepartmentBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["DepartmentBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + bindDepartmentBy: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["DepartmentBindDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + upsertDepartment: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Department"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteDepartment: { + parameters: { + query: { + id: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + signUp: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SignUpDto"]; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + signOut: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + signIn: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SignInDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + chat: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/event-stream": string[]; + }; + }; + }; + }; + searchAction: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": { + [key: string]: string; + }; + }; + }; + }; + }; + actionExecute: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/event-stream": string[]; + }; + }; + }; + }; + pageQuery: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + queryDto: components["schemas"]["QueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListJobTriggerDto"]; + }; + }; + }; + }; + queryPositions: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["Position"][]; + }; + }; + }; + }; + pageQueryPositions: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + positionQueryDto: components["schemas"]["PositionQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListPositionRespDto"]; + }; + }; + }; + }; + queryUsers: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + userQueryDto: components["schemas"]["UserQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListUserRolePermissionDto"]; + }; + }; + }; + }; + queryRoles: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + roleQueryDto: components["schemas"]["RoleQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListRoleDto"]; + }; + }; + }; + }; + queryPermissions: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + permissionQueryDto: components["schemas"]["PermissionQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListPermissionRespDto"]; + }; + }; + }; + }; + queryAvailableParentDepartmentsBy: { + parameters: { + query?: { + id?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["Department"][]; + }; + }; + }; + }; + pageQueryDepartments: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + departmentQueryDto: components["schemas"]["DepartmentQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListDepartmentRespDto"]; + }; + }; + }; + }; + pageQueryLlm: { + parameters: { + query: { + pageRequestDto: components["schemas"]["PageRequestDto"]; + llmQueryDto: components["schemas"]["LlmQueryDto"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["PageResponseDtoListLlmVm"]; + }; + }; + }; + }; + deleteUser_1: { + parameters: { + query: { + username: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteDepartment_1: { + parameters: { + query: { + name: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; } diff --git a/frontend/src/components/Assistant.vue b/frontend/src/components/Assistant.vue index d86c017..9cbfe09 100644 --- a/frontend/src/components/Assistant.vue +++ b/frontend/src/components/Assistant.vue @@ -42,19 +42,21 @@
+ class="w-full px-0 text-gray-900 bg-white border-0 focus:ring-0" :placeholder=" + commandPlaceholderMap[commandMode] + " required>
-
@@ -102,14 +104,14 @@ import { useAiAction } from "@/composables/ai/useAiAction"; import DepartmentDeleteModal from "@/components/PopupModal.vue"; import InputButton from "@/components/InputButton.vue"; -const { messages, chat, isLoading, cancel, actionChat } = useAiChat(); +const { messages, chat, isLoading, cancel, searchAction, executeAction } = useAiChat(); const { user } = useUserStore(); const userUpsertModal = ref(); const departmentUpsertModal = ref(); const inputMessage = ref(""); const chatContainer = ref(null); const alertStore = useAlertStore(); -const isCommandMode = ref(false); +const commandMode = ref<"chat" | "search" | "execute">("chat"); const userUpsert = useUserUpsert(); const departmentUpsert = useDepartmentUpsert(); const userDeleteModal = ref(); @@ -121,6 +123,12 @@ const currentDeleteDepartmentName = ref(); const { availableDepartments, fetchAvailableDepartments } = useDepartmentQuery(); +const commandPlaceholderMap: Record = { + chat: "随便聊聊", + search: "搜索创建用户、删除部门等功能", + execute: "帮我创建一个名为 mjga 的用户", +}; + const commandActionMap: Record void> = { CREATE_USER: () => { userUpsertModal.value?.show(); @@ -241,7 +249,7 @@ const abortChat = () => { cancel(); }; -const chatByMode = async (message: string, mode: boolean) => { +const chatByMode = async (message: string, mode: "chat" | "search" | "execute") => { inputMessage.value = ""; messages.value.push({ content: message, @@ -249,14 +257,16 @@ const chatByMode = async (message: string, mode: boolean) => { isUser: true, username: user.username!, }); - if (mode) { - await actionChat(message); + if (mode === "search") { + await searchAction(message); + } else if (mode === "execute") { + await executeAction(message); } else { await chat(message); } }; -const handleSendClick = async (message: string, mode: boolean) => { +const handleSendClick = async (message: string, mode: "chat" | "search" | "execute") => { scrollToBottom(); if (isLoading.value) { abortChat(); diff --git a/frontend/src/composables/ai/useAiChat.ts b/frontend/src/composables/ai/useAiChat.ts index 2eb97a5..5ac2bd1 100644 --- a/frontend/src/composables/ai/useAiChat.ts +++ b/frontend/src/composables/ai/useAiChat.ts @@ -56,16 +56,55 @@ export const useAiChat = () => { } }; - const actionChat = async (message: string) => { + const executeAction = async (message: string) => { + isLoading.value = true; + const authStore = useAuthStore(); + const ctrl = new AbortController(); + currentController = ctrl; + messages.value.push({ + content: "", + type: "chat", + isUser: false, + username: "知路智能体", + }); + try { + const baseUrl = `${import.meta.env.VITE_BASE_URL}`; + await fetchEventSource(`${baseUrl}/ai/action/execute`, { + method: "POST", + headers: { + Authorization: authStore.get(), + "Content-Type": "application/json", + }, + body: message, + signal: ctrl.signal, + onmessage(ev) { + messages.value[messages.value.length - 1].content += ev.data; + }, + onclose() { + console.log("onclose"); + }, + onerror(err) { + throw err; + }, + }); + } catch (error) { + messages.value.pop(); + throw error; + } finally { + isLoading.value = false; + } + }; + + const searchAction = async (message: string) => { isLoading.value = true; try { - const { data } = await client.POST("/ai/action/chat", { + const { data } = await client.POST("/ai/action/search", { body: message, }); messages.value.push({ content: data?.action - ? "接收到指令,请您执行。" - : "未找到有效指令,请告诉我更加准确的信息。", + ? "搜索到功能,请您执行。" + : "未搜索到指定功能,请告诉我更加准确的信息。", type: "action", isUser: false, username: "知路智能体", @@ -84,5 +123,5 @@ export const useAiChat = () => { } }; - return { messages, chat, isLoading, cancel, actionChat }; + return { messages, chat, isLoading, cancel, searchAction, executeAction }; }; diff --git a/frontend/src/router/constants.ts b/frontend/src/router/constants.ts index 901d049..d9a33e3 100644 --- a/frontend/src/router/constants.ts +++ b/frontend/src/router/constants.ts @@ -15,7 +15,6 @@ export enum RoutePath { DEPARTMENTVIEW = "departments", POSITIONVIEW = "positions", CREATEUSERVIEW = "create-user", - AICHATVIEW = "ai/chat", LLMCONFIGVIEW = "llm/config", SCHEDULERVIEW = "scheduler", UPSERTUSERVIEW = "upsert-user", @@ -41,7 +40,6 @@ export enum RouteName { DEPARTMENTVIEW = "departments", POSITIONVIEW = "positions", CREATEUSERVIEW = "create-user", - AICHATVIEW = "ai/chat", LLMCONFIGVIEW = "llm/config", SCHEDULERVIEW = "scheduler", UPSERTUSERVIEW = "upsert-user", diff --git a/frontend/src/router/modules/ai.ts b/frontend/src/router/modules/ai.ts index 3108d22..e9c5bfa 100644 --- a/frontend/src/router/modules/ai.ts +++ b/frontend/src/router/modules/ai.ts @@ -2,14 +2,6 @@ import type { RouteRecordRaw } from "vue-router"; import { EPermission, RouteName, RoutePath } from "../constants"; const aiRoutes: RouteRecordRaw[] = [ - { - path: RoutePath.AICHATVIEW, - name: RouteName.AICHATVIEW, - component: () => import("@/views/AiChatView.vue"), - meta: { - requiresAuth: true, - }, - }, { path: RoutePath.LLMCONFIGVIEW, name: RouteName.LLMCONFIGVIEW, diff --git a/frontend/src/views/AiChatView.vue b/frontend/src/views/AiChatView.vue deleted file mode 100644 index 8eda9d9..0000000 --- a/frontend/src/views/AiChatView.vue +++ /dev/null @@ -1,398 +0,0 @@ - - - - -