jiaxing.liao 3 тижнів тому
батько
коміт
dd140e2bd0

+ 16 - 5
apps/web/src/features/nodeLibary/index.vue

@@ -27,7 +27,7 @@ interface NodeGroup {
 	nodes: NodeItem[]
 }
 
-type NodeLibraryGroupId = 'start' | 'logic' | 'data' | 'other' | 'tool'
+type NodeLibraryGroupId = 'start' | 'logic' | 'data' | 'other' | 'tool' | 'custom'
 
 const props = defineProps<{
 	hideStart?: boolean
@@ -47,7 +47,8 @@ const GROUP_ALIASES: Record<string, NodeLibraryGroupId> = {
 	logic: 'logic',
 	data: 'data',
 	tool: 'tool',
-	other: 'other'
+	other: 'other',
+	custom: 'custom'
 }
 
 const groupLabels = computed(() => ({
@@ -55,10 +56,11 @@ const groupLabels = computed(() => ({
 	data: t('pages.nodeLibrary.groups.data'),
 	logic: t('pages.nodeLibrary.groups.logic'),
 	tool: t('pages.nodeLibrary.groups.tool'),
-	other: t('pages.nodeLibrary.groups.other')
+	other: t('pages.nodeLibrary.groups.other'),
+	custom: t('pages.nodeLibrary.groups.custom')
 }))
 
-const GROUP_ORDER: NodeLibraryGroupId[] = ['start', 'data', 'logic', 'tool', 'other']
+const GROUP_ORDER: NodeLibraryGroupId[] = ['start', 'data', 'logic', 'tool', 'other', 'custom']
 
 const canAddNodeType = (nodeType: string) => {
 	const isLoopContainer = ['loop', 'iteration'].includes(props.parentNodeType || '')
@@ -110,7 +112,16 @@ const materials = computed<NodeGroup[]>(() => {
 			})
 		})
 
-	return GROUP_ORDER.filter((groupId) => groupMap.has(groupId)).map((groupId) => groupMap.get(groupId)!)
+	// 自定义
+	const custom = {
+		id: 'custom',
+		label: groupLabels.value.custom,
+		nodes: []
+	}
+
+	return GROUP_ORDER.filter((groupId) => groupMap.has(groupId))
+		.map((groupId) => groupMap.get(groupId)!)
+		.concat([custom])
 })
 
 const activeGroup = ref('')

+ 30 - 8
apps/web/src/features/secretInput/SecretInput.vue

@@ -1,20 +1,33 @@
 <template>
-	<el-input
-		v-model="password"
-		type="password"
-		show-password
-		v-bind="$attrs"
-		@blur="encryptPassword"
-	/>
+	<div class="flex items-center gap-2">
+		<el-input
+			v-model="password"
+			type="password"
+			show-password
+			v-bind="$attrs"
+			:placeholder="hasPassword ? '已设置密码' : '请输入密码'"
+			:disabled="!canEnter"
+			@blur="encryptPassword"
+		/>
+		<el-button v-if="hasPassword" @click="resetPassword">重置密码</el-button>
+	</div>
 </template>
 
 <script setup lang="ts">
-import { ref } from 'vue'
+import { computed, ref } from 'vue'
 
 const password = ref('')
+const canEnter = ref(false)
 
 const modelValue = defineModel<{ rsa_aesKey: string; cipher_text: string }>()
 
+// 存在密码
+const hasPassword = computed(() => {
+	const h = !password.value?.trim() && modelValue.value?.cipher_text
+	canEnter.value = !h
+	return h
+})
+
 // 加密处理
 const encryptPassword = () => {
 	if (!password.value?.trim()) {
@@ -39,6 +52,15 @@ const encryptPassword = () => {
 		cipher_text: newPwd
 	}
 }
+
+const resetPassword = () => {
+	password.value = ''
+	canEnter.value = true
+	modelValue.value = {
+		rsa_aesKey: '',
+		cipher_text: ''
+	}
+}
 </script>
 
 <style scoped></style>

+ 2 - 1
apps/web/src/i18n/locales/en-us.ts

@@ -1274,7 +1274,8 @@ export default {
 				data: 'Data Processing',
 				logic: 'Logic',
 				tool: 'Tool',
-				other: 'Other'
+				other: 'Other',
+				Custom: 'Custom'
 			}
 		},
 		startSetter: {

+ 6 - 2
apps/web/src/i18n/locales/zh-cn.ts

@@ -1179,7 +1179,8 @@ export default {
 				data: '数据处理',
 				logic: '业务逻辑',
 				tool: '工具',
-				other: '其他'
+				other: '其他',
+				custom: '自定义'
 			}
 		},
 		startSetter: {
@@ -1472,7 +1473,10 @@ export default {
 			stickyNote: { displayName: '注释', description: 'Markdown 注释块' },
 			'mail-sender': { displayName: '邮件发送', description: '通过邮件发送信息' },
 			'sms-sender': { displayName: '短信发送', description: '通过短信发送信息' },
-			'workflow-approval': { displayName: '流程审批', description: '根据用户和岗位信息发起流程审批' }
+			'workflow-approval': {
+				displayName: '流程审批',
+				description: '根据用户和岗位信息发起流程审批'
+			}
 		},
 		outputs: {
 			http: {

+ 1 - 1
apps/web/src/nodes/_base/CodeEditor.vue

@@ -571,7 +571,7 @@ defineExpose({
 		position: relative;
 		.resize-handle {
 			position: absolute;
-			bottom: 8px;
+			bottom: 2px;
 			left: 50%;
 			transform: translateX(-50%);
 			width: 18px;

+ 3 - 0
apps/web/src/nodes/src/code/setter.vue

@@ -41,6 +41,7 @@ import OutputVariables from '../../_base/OutputVariables.vue'
 import TestConfig from '../../_base/RetryConfig.vue'
 import ErrorHandling from '../../_base/ErrorHandling.vue'
 import { useSetterModel } from '../_shared/useSetterModel'
+import { agent } from '@repo/api-service'
 
 import type { CodeData } from './index'
 
@@ -55,4 +56,6 @@ const props = defineProps<{
 const emit = defineEmits<Emits>()
 
 const formData = useSetterModel<CodeData>(props, emit)
+
+agent.postAgentGetAgentMonacoEditorCompletions({})
 </script>

+ 4 - 5
apps/web/src/nodes/src/mail-sender/index.ts

@@ -1,17 +1,16 @@
 import { NodeConnectionTypes, type INodeDataBaseSchema, type INodeType } from '../../Interface'
 import Setter from './setter.vue'
-import i18n from '@/i18n'
 import { getNodeDescription, getNodeDisplayName } from '@/nodes/i18n'
 
 export type MailSenderData = INodeDataBaseSchema & {
 	subject: string // '主题'
 	body: string // '内容'
-	toLists: string // '收件人,多个�分割'
+	toLists: string // '收件人,多个以,分割'
 	ccLists: string // '抄�人,多个以,分割'
-	bccLists: string // '密抄人,多个�分割'
-	attachmentLists: string // '附件id, 多个�分割'
+	bccLists: string // '密抄人,多个以,分割'
+	attachmentLists: string // '附件id, 多个以,分割'
 	memo: string // '�述'
-	in_queue: boolean // '是�入队�
+	in_queue: boolean // '是�入队'
 	delaySeconds: number // '入队列�延时几秒'
 }
 

+ 1 - 1
apps/web/src/nodes/src/view-data/setter.vue

@@ -30,7 +30,7 @@
 						/>
 					</el-form-item>
 
-					<el-form-item label="页">
+					<el-form-item label="页">
 						<VarInput
 							v-model="formData.index_variable.value"
 							:placeholder="texts.variableValue"

+ 7 - 5
apps/web/src/views/editor/NodeView.vue

@@ -623,8 +623,8 @@ const handleNodeCreate = (value: { type: string; position?: XYPosition } | strin
 			newNodeParam.position = position
 			newNodeParam.prevNodeId = handle?.nodeId
 			newNodeParam.parentId = parentId
-			// 包含下划线或者没中划线
-			if (handle?.handleId?.includes('_') || !handle?.handleId?.includes('-')) {
+			// 包含下划线的需要传值
+			if (handle?.handleId?.includes('_')) {
 				newNodeParam.nodeHandleId = handle?.handleId
 			}
 		}
@@ -752,8 +752,8 @@ const onCreateConnection = async (connection: Connection) => {
 		target,
 		zIndex: 1
 	}
-	// 只有当 sourceHandle 包含下划线或者不包含中划线时才传给后端,其他情况后端会自动匹配。
-	if (sourceHandle && sourceHandle.includes('_') && !sourceHandle.includes('-')) {
+	// 包含下划线的需要传值
+	if (sourceHandle && sourceHandle.includes('_')) {
 		params.sourceHandle = sourceHandle
 	}
 
@@ -879,7 +879,9 @@ const handleUpdateNode = (node: IWorkflowNode) => {
 					return
 				}
 
-				const latestNode = props.workflow?.nodes.find((item) => item.id === (responseNode.id || node.id))
+				const latestNode = props.workflow?.nodes.find(
+					(item) => item.id === (responseNode.id || node.id)
+				)
 				if (!latestNode) {
 					return
 				}

+ 22 - 12
apps/web/vite.config.ts

@@ -17,18 +17,18 @@ export default defineConfig(({ mode }) => {
 	return {
 		base: './',
 		build: {
-			outDir: 'app-agent',
-			rollupOptions: {
-				output: {
-					manualChunks: {
-						framework: ['vue', 'vue-router', 'pinia'],
-						element: ['element-plus', '@element-plus/icons-vue'],
-						monaco: ['monaco-editor'],
-						lexical: ['lexical', 'lexical-vue'],
-						echarts: ['echarts']
-					}
-				}
-			}
+			outDir: 'app-agent'
+			// rollupOptions: {
+			// 	output: {
+			// 		manualChunks: {
+			// 			framework: ['vue', 'vue-router', 'pinia'],
+			// 			element: ['element-plus', '@element-plus/icons-vue'],
+			// 			monaco: ['monaco-editor'],
+			// 			lexical: ['lexical', 'lexical-vue'],
+			// 			echarts: ['echarts']
+			// 		}
+			// 	}
+			// }
 		},
 		plugins: [
 			vue(),
@@ -93,6 +93,16 @@ export default defineConfig(({ mode }) => {
 					target: `http://${env.VITE_BASE_URL}`,
 					changeOrigin: true,
 					rewrite: (path) => path.replace(/^\/File/, '/File')
+				},
+				'/App': {
+					target: `http://${env.VITE_BASE_URL}`,
+					changeOrigin: true,
+					rewrite: (path) => path.replace(/^\/App/, '/App')
+				},
+				'/_runtime': {
+					target: `http://${env.VITE_BASE_URL}`,
+					changeOrigin: true,
+					rewrite: (path) => path.replace(/^\/_runtime/, '/_runtime')
 				}
 			}
 		}

+ 7 - 2
packages/api-client/request.ts

@@ -127,8 +127,13 @@ class HttpClient {
 			response: AxiosResponse<ResponseData<any>>
 		): AxiosResponse<ResponseData<any>> => {
 			// 会话丢失 重定向到/登录页
-			if (response.data?.code === 9999 && !import.meta.env.DEV) {
-				window.location.href = '/'
+			if (response.data?.code === 9999) {
+				if (import.meta.env.DEV) {
+					window.location.href =
+						'/Views/Account/Index.html?cb=' + encodeURIComponent(window.location.href)
+				} else {
+					window.location.href = '/'
+				}
 			}
 
 			return response

+ 525 - 0
packages/api-service/agent.openapi.json

@@ -4611,6 +4611,531 @@
 				},
 				"security": []
 			}
+		},
+		"/api/agent/getAgentMonacoEditorCompletions": {
+			"post": {
+				"summary": "获取智能体MonacoEditor提示器配置对象",
+				"deprecated": false,
+				"description": "",
+				"tags": ["Agent"],
+				"parameters": [
+					{
+						"name": "Authorization",
+						"in": "header",
+						"description": "",
+						"example": "bpm_client_1499247893062619136",
+						"schema": {
+							"type": "string",
+							"default": "bpm_client_1499247893062619136"
+						}
+					}
+				],
+				"requestBody": {
+					"content": {
+						"application/json": {
+							"schema": {
+								"type": "object",
+								"properties": {}
+							},
+							"example": {}
+						}
+					},
+					"required": true
+				},
+				"responses": {
+					"200": {
+						"description": "",
+						"content": {
+							"application/json": {
+								"schema": {
+									"type": "object",
+									"properties": {
+										"isSuccess": {
+											"type": "boolean"
+										},
+										"code": {
+											"type": "integer"
+										},
+										"result": {
+											"type": "object",
+											"properties": {
+												"javascript": {
+													"type": "array",
+													"items": {
+														"type": "object",
+														"properties": {
+															"methods": {
+																"type": "array",
+																"items": {
+																	"type": "string"
+																}
+															},
+															"object": {
+																"type": "string"
+															},
+															"properties": {
+																"type": "array",
+																"items": {
+																	"type": "object",
+																	"properties": {
+																		"detail": {
+																			"type": "string"
+																		},
+																		"documentation": {
+																			"type": "string"
+																		},
+																		"insertText": {
+																			"type": "string"
+																		},
+																		"kind": {
+																			"type": "string"
+																		},
+																		"label": {
+																			"type": "string"
+																		},
+																		"snippet": {
+																			"type": "boolean"
+																		}
+																	},
+																	"required": [
+																		"detail",
+																		"documentation",
+																		"insertText",
+																		"kind",
+																		"label",
+																		"snippet"
+																	]
+																}
+															},
+															"triggerCharacters": {
+																"type": "array",
+																"items": {
+																	"type": "string"
+																}
+															}
+														},
+														"required": ["methods", "object", "properties", "triggerCharacters"]
+													}
+												}
+											},
+											"required": ["javascript"]
+										},
+										"isAuthorized": {
+											"type": "boolean"
+										}
+									},
+									"required": ["isSuccess", "code", "result", "isAuthorized"]
+								},
+								"example": {
+									"isSuccess": true,
+									"code": 1,
+									"result": {
+										"javascript": [
+											{
+												"methods": [],
+												"object": "user_mstr",
+												"properties": [
+													{
+														"detail": "Date creation_time",
+														"documentation": "creation_time",
+														"insertText": "creation_time",
+														"kind": "property",
+														"label": "creation_time",
+														"snippet": false
+													},
+													{
+														"detail": "String creation_user",
+														"documentation": "creation_user",
+														"insertText": "creation_user",
+														"kind": "property",
+														"label": "creation_user",
+														"snippet": false
+													},
+													{
+														"detail": "Date update_time",
+														"documentation": "update_time",
+														"insertText": "update_time",
+														"kind": "property",
+														"label": "update_time",
+														"snippet": false
+													},
+													{
+														"detail": "String update_user",
+														"documentation": "update_user",
+														"insertText": "update_user",
+														"kind": "property",
+														"label": "update_user",
+														"snippet": false
+													},
+													{
+														"detail": "Date delete_time",
+														"documentation": "delete_time",
+														"insertText": "delete_time",
+														"kind": "property",
+														"label": "delete_time",
+														"snippet": false
+													},
+													{
+														"detail": "String delete_user",
+														"documentation": "delete_user",
+														"insertText": "delete_user",
+														"kind": "property",
+														"label": "delete_user",
+														"snippet": false
+													},
+													{
+														"detail": "Boolean is_deleted",
+														"documentation": "is_deleted",
+														"insertText": "is_deleted",
+														"kind": "property",
+														"label": "is_deleted",
+														"snippet": false
+													},
+													{
+														"detail": "String user_code",
+														"documentation": "user_code",
+														"insertText": "user_code",
+														"kind": "property",
+														"label": "user_code",
+														"snippet": false
+													},
+													{
+														"detail": "String name",
+														"documentation": "name",
+														"insertText": "name",
+														"kind": "property",
+														"label": "name",
+														"snippet": false
+													},
+													{
+														"detail": "Integer age",
+														"documentation": "age",
+														"insertText": "age",
+														"kind": "property",
+														"label": "age",
+														"snippet": false
+													},
+													{
+														"detail": "Date borndate",
+														"documentation": "borndate",
+														"insertText": "borndate",
+														"kind": "property",
+														"label": "borndate",
+														"snippet": false
+													}
+												],
+												"triggerCharacters": ["."]
+											},
+											{
+												"methods": [],
+												"object": "test_mstr",
+												"properties": [
+													{
+														"detail": "Date test_creation_time",
+														"documentation": "test_creation_time",
+														"insertText": "test_creation_time",
+														"kind": "property",
+														"label": "test_creation_time",
+														"snippet": false
+													},
+													{
+														"detail": "String test_creation_user",
+														"documentation": "test_creation_user",
+														"insertText": "test_creation_user",
+														"kind": "property",
+														"label": "test_creation_user",
+														"snippet": false
+													},
+													{
+														"detail": "Date test_update_time",
+														"documentation": "test_update_time",
+														"insertText": "test_update_time",
+														"kind": "property",
+														"label": "test_update_time",
+														"snippet": false
+													},
+													{
+														"detail": "String test_update_user",
+														"documentation": "test_update_user",
+														"insertText": "test_update_user",
+														"kind": "property",
+														"label": "test_update_user",
+														"snippet": false
+													},
+													{
+														"detail": "Date test_delete_time",
+														"documentation": "test_delete_time",
+														"insertText": "test_delete_time",
+														"kind": "property",
+														"label": "test_delete_time",
+														"snippet": false
+													},
+													{
+														"detail": "String test_delete_user",
+														"documentation": "test_delete_user",
+														"insertText": "test_delete_user",
+														"kind": "property",
+														"label": "test_delete_user",
+														"snippet": false
+													},
+													{
+														"detail": "Boolean test_is_deleted",
+														"documentation": "test_is_deleted",
+														"insertText": "test_is_deleted",
+														"kind": "property",
+														"label": "test_is_deleted",
+														"snippet": false
+													}
+												],
+												"triggerCharacters": ["."]
+											},
+											{
+												"methods": [],
+												"object": "test3_mstr",
+												"properties": [
+													{
+														"detail": "String taskId",
+														"documentation": "taskId",
+														"insertText": "taskId",
+														"kind": "property",
+														"label": "taskId",
+														"snippet": false
+													},
+													{
+														"detail": "String snNumber",
+														"documentation": "snNumber",
+														"insertText": "snNumber",
+														"kind": "property",
+														"label": "snNumber",
+														"snippet": false
+													},
+													{
+														"detail": "Integer taskStatus",
+														"documentation": "taskStatus",
+														"insertText": "taskStatus",
+														"kind": "property",
+														"label": "taskStatus",
+														"snippet": false
+													},
+													{
+														"detail": "Date creationTime",
+														"documentation": "creationTime",
+														"insertText": "creationTime",
+														"kind": "property",
+														"label": "creationTime",
+														"snippet": false
+													}
+												],
+												"triggerCharacters": ["."]
+											},
+											{
+												"methods": [],
+												"object": "test2_mstr",
+												"properties": [
+													{
+														"detail": "String taskId",
+														"documentation": "taskId",
+														"insertText": "taskId",
+														"kind": "property",
+														"label": "taskId",
+														"snippet": false
+													},
+													{
+														"detail": "String snNumber",
+														"documentation": "snNumber",
+														"insertText": "snNumber",
+														"kind": "property",
+														"label": "snNumber",
+														"snippet": false
+													},
+													{
+														"detail": "Integer taskStatus",
+														"documentation": "taskStatus",
+														"insertText": "taskStatus",
+														"kind": "property",
+														"label": "taskStatus",
+														"snippet": false
+													},
+													{
+														"detail": "Date creationTime",
+														"documentation": "creationTime",
+														"insertText": "creationTime",
+														"kind": "property",
+														"label": "creationTime",
+														"snippet": false
+													}
+												],
+												"triggerCharacters": ["."]
+											},
+											{
+												"methods": [],
+												"object": "test1_mstr",
+												"properties": [
+													{
+														"detail": "String taskId",
+														"documentation": "taskId",
+														"insertText": "taskId",
+														"kind": "property",
+														"label": "taskId",
+														"snippet": false
+													},
+													{
+														"detail": "String snNumber",
+														"documentation": "snNumber",
+														"insertText": "snNumber",
+														"kind": "property",
+														"label": "snNumber",
+														"snippet": false
+													},
+													{
+														"detail": "Integer taskStatus",
+														"documentation": "taskStatus",
+														"insertText": "taskStatus",
+														"kind": "property",
+														"label": "taskStatus",
+														"snippet": false
+													},
+													{
+														"detail": "Date creationTime",
+														"documentation": "creationTime",
+														"insertText": "creationTime",
+														"kind": "property",
+														"label": "creationTime",
+														"snippet": false
+													}
+												],
+												"triggerCharacters": ["."]
+											},
+											{
+												"methods": [],
+												"object": "chat_mstr",
+												"properties": [
+													{
+														"detail": "Date creation_time",
+														"documentation": "creation_time",
+														"insertText": "creation_time",
+														"kind": "property",
+														"label": "creation_time",
+														"snippet": false
+													},
+													{
+														"detail": "String creation_user",
+														"documentation": "creation_user",
+														"insertText": "creation_user",
+														"kind": "property",
+														"label": "creation_user",
+														"snippet": false
+													},
+													{
+														"detail": "Date update_time",
+														"documentation": "update_time",
+														"insertText": "update_time",
+														"kind": "property",
+														"label": "update_time",
+														"snippet": false
+													},
+													{
+														"detail": "String update_user",
+														"documentation": "update_user",
+														"insertText": "update_user",
+														"kind": "property",
+														"label": "update_user",
+														"snippet": false
+													},
+													{
+														"detail": "Date delete_time",
+														"documentation": "delete_time",
+														"insertText": "delete_time",
+														"kind": "property",
+														"label": "delete_time",
+														"snippet": false
+													},
+													{
+														"detail": "String delete_user",
+														"documentation": "delete_user",
+														"insertText": "delete_user",
+														"kind": "property",
+														"label": "delete_user",
+														"snippet": false
+													},
+													{
+														"detail": "Boolean is_deleted",
+														"documentation": "is_deleted",
+														"insertText": "is_deleted",
+														"kind": "property",
+														"label": "is_deleted",
+														"snippet": false
+													},
+													{
+														"detail": "Integer sess_id",
+														"documentation": "sess_id",
+														"insertText": "sess_id",
+														"kind": "property",
+														"label": "sess_id",
+														"snippet": false
+													},
+													{
+														"detail": "String type",
+														"documentation": "type",
+														"insertText": "type",
+														"kind": "property",
+														"label": "type",
+														"snippet": false
+													},
+													{
+														"detail": "String uniq_key",
+														"documentation": "uniq_key",
+														"insertText": "uniq_key",
+														"kind": "property",
+														"label": "uniq_key",
+														"snippet": false
+													},
+													{
+														"detail": "String grp_name",
+														"documentation": "grp_name",
+														"insertText": "grp_name",
+														"kind": "property",
+														"label": "grp_name",
+														"snippet": false
+													},
+													{
+														"detail": "Integer creat_by",
+														"documentation": "creat_by",
+														"insertText": "creat_by",
+														"kind": "property",
+														"label": "creat_by",
+														"snippet": false
+													},
+													{
+														"detail": "Date creat_time",
+														"documentation": "creat_time",
+														"insertText": "creat_time",
+														"kind": "property",
+														"label": "creat_time",
+														"snippet": false
+													},
+													{
+														"detail": "String chat_code",
+														"documentation": "chat_code",
+														"insertText": "chat_code",
+														"kind": "property",
+														"label": "chat_code",
+														"snippet": false
+													}
+												],
+												"triggerCharacters": ["."]
+											}
+										]
+									},
+									"isAuthorized": true
+								}
+							}
+						},
+						"headers": {}
+					}
+				},
+				"security": []
+			}
 		}
 	},
 	"components": {

+ 34 - 0
packages/api-service/servers/api/agent.ts

@@ -408,6 +408,40 @@ export async function postAgentGetAgentList(
   })
 }
 
+/** 获取智能体MonacoEditor提示器配置对象 POST /api/agent/getAgentMonacoEditorCompletions */
+export async function postAgentGetAgentMonacoEditorCompletions(
+  body: {},
+  options?: { [key: string]: any }
+) {
+  return request<{
+    isSuccess: boolean
+    code: number
+    result: {
+      javascript: {
+        methods: string[]
+        object: string
+        properties: {
+          detail: string
+          documentation: string
+          insertText: string
+          kind: string
+          label: string
+          snippet: boolean
+        }[]
+        triggerCharacters: string[]
+      }[]
+    }
+    isAuthorized: boolean
+  }>('/api/agent/getAgentMonacoEditorCompletions', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json'
+    },
+    data: body,
+    ...(options || {})
+  })
+}
+
 /** 获取智能体节点的最后一次运行日志 POST /api/agent/getAgentNodeLastRunnerLogs */
 export async function postAgentGetAgentNodeLastRunnerLogs(
   body: {