@nocobase/plugin-ai 2.2.0-alpha.7 → 2.2.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/docs/nocobase/ai-employees/scenarios/company-background-research.md +125 -0
- package/dist/ai/docs/nocobase/building-tips/operations-dashboard.md +513 -0
- package/dist/ai/docs/nocobase/file-manager/stable-url.md +87 -0
- package/dist/ai/docs/nocobase/get-started/deployment/production.md +24 -2
- package/dist/ai/docs/nocobase/get-started/installation/docker-caddy.mdx +3 -0
- package/dist/ai/docs/nocobase/get-started/installation/docker-nginx.mdx +3 -0
- package/dist/ai/docs/nocobase/get-started/installation/docker.mdx +27 -3
- package/dist/ai/docs/nocobase/get-started/installation/env.md +33 -0
- package/dist/ai/docs/nocobase/index.md +1 -1
- package/dist/ai/docs/nocobase/interface-builder/index.md +7 -6
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/desktop.md +97 -0
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/index.md +50 -0
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/mobile.md +133 -0
- package/dist/ai/docs/nocobase/multi-app/multi-app-vs-multi-portal-vs-multi-space.md +159 -0
- package/dist/ai/docs/nocobase/multi-app/multi-portal/index.md +195 -0
- package/dist/ai/docs/nocobase/nocobase-cli/production/index.md +10 -0
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/caddy.md +15 -2
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/index.md +1 -1
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/nginx.md +16 -2
- package/dist/ai/docs/nocobase/runjs/context/ai.md +206 -0
- package/dist/ai/docs/nocobase/tutorials/index.md +20 -1
- package/dist/ai/tools/formFiller.js +4 -3
- package/dist/client/372.40eb52905e3f3049.js +10 -0
- package/dist/client/index.js +7 -7
- package/dist/client-v2/372.8cc3fde09c9bec77.js +10 -0
- package/dist/client-v2/ai-employees/chatbox/utils/normalizeTriggerTaskOptions.d.ts +19 -0
- package/dist/client-v2/ai-employees/chatbox/utils.d.ts +5 -0
- package/dist/client-v2/index.js +3 -3
- package/dist/client-v2/manager/ai-manager.d.ts +21 -0
- package/dist/client-v2/pages/EmployeesPage.d.ts +9 -0
- package/dist/client-v2/plugin.d.ts +1 -0
- package/dist/client-v2/runjs/registerAIEmployeeRunJSFacade.d.ts +20 -0
- package/dist/externalVersion.js +15 -15
- package/dist/locale/en-US.json +3 -0
- package/dist/locale/zh-CN.json +3 -0
- package/dist/node_modules/@langchain/mistralai/package.json +1 -1
- package/dist/node_modules/@langchain/xai/package.json +1 -1
- package/dist/node_modules/fs-extra/package.json +1 -1
- package/dist/node_modules/jsonrepair/package.json +1 -1
- package/dist/node_modules/just-bash/package.json +1 -1
- package/dist/node_modules/nodejs-snowflake/package.json +1 -1
- package/dist/node_modules/openai/package.json +1 -1
- package/dist/node_modules/zod/package.json +1 -1
- package/dist/server/ai-employees/ai-employee.d.ts +1 -0
- package/dist/server/ai-employees/ai-employee.js +30 -1
- package/dist/server/ai-employees/tool-call-sanitizer.d.ts +1 -0
- package/dist/server/ai-employees/tool-call-sanitizer.js +2 -1
- package/dist/server/ai-employees/utils.js +11 -5
- package/dist/server/attachments.d.ts +24 -0
- package/dist/server/attachments.js +204 -0
- package/dist/server/document-loader/cached.d.ts +1 -0
- package/dist/server/document-loader/cached.js +18 -9
- package/dist/server/document-loader/loader.d.ts +0 -1
- package/dist/server/document-loader/loader.js +25 -8
- package/dist/server/document-loader/types.d.ts +7 -0
- package/dist/server/llm-providers/anthropic.d.ts +2 -1
- package/dist/server/llm-providers/anthropic.js +1 -3
- package/dist/server/llm-providers/google-genai.d.ts +1 -1
- package/dist/server/llm-providers/google-genai.js +1 -5
- package/dist/server/llm-providers/provider.d.ts +3 -2
- package/dist/server/llm-providers/provider.js +26 -3
- package/dist/server/manager/ai-context-datasource-manager.js +34 -7
- package/dist/server/plugin.js +14 -0
- package/dist/server/resource/aiConversations.js +44 -1
- package/dist/server/utils.d.ts +5 -2
- package/dist/server/utils.js +11 -19
- package/dist/server/workflow/nodes/employee/files.d.ts +3 -1
- package/dist/server/workflow/nodes/employee/files.js +31 -5
- package/package.json +2 -2
- package/dist/client/372.da38fe350bf841f4.js +0 -10
- package/dist/client-v2/372.d76ea1ceed2be2a4.js +0 -10
package/dist/server/utils.js
CHANGED
|
@@ -7,11 +7,9 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
var __create = Object.create;
|
|
11
10
|
var __defProp = Object.defineProperty;
|
|
12
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
13
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
14
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
15
13
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
16
14
|
var __export = (target, all) => {
|
|
17
15
|
for (var name in all)
|
|
@@ -25,14 +23,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
25
23
|
}
|
|
26
24
|
return to;
|
|
27
25
|
};
|
|
28
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
29
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
30
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
31
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
32
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
33
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
34
|
-
mod
|
|
35
|
-
));
|
|
36
26
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
37
27
|
var utils_exports = {};
|
|
38
28
|
__export(utils_exports, {
|
|
@@ -40,14 +30,13 @@ __export(utils_exports, {
|
|
|
40
30
|
buildTool: () => buildTool,
|
|
41
31
|
encodeFile: () => encodeFile,
|
|
42
32
|
encodeLocalFile: () => encodeLocalFile,
|
|
33
|
+
encodeReadableStream: () => encodeReadableStream,
|
|
43
34
|
parseResponseMessage: () => parseResponseMessage,
|
|
44
35
|
parseVariables: () => parseVariables,
|
|
45
36
|
sendSSEError: () => sendSSEError,
|
|
46
37
|
stripToolCallTags: () => stripToolCallTags
|
|
47
38
|
});
|
|
48
39
|
module.exports = __toCommonJS(utils_exports);
|
|
49
|
-
var import_path = __toESM(require("path"));
|
|
50
|
-
var import_fs = __toESM(require("fs"));
|
|
51
40
|
var import_utils = require("@nocobase/utils");
|
|
52
41
|
var import_langchain = require("langchain");
|
|
53
42
|
function sendSSEError(ctx, error, errorName) {
|
|
@@ -91,13 +80,8 @@ function parseResponseMessage(row) {
|
|
|
91
80
|
role
|
|
92
81
|
};
|
|
93
82
|
}
|
|
94
|
-
async function encodeLocalFile(
|
|
95
|
-
|
|
96
|
-
url = url.slice(process.env.APP_PUBLIC_PATH.length);
|
|
97
|
-
}
|
|
98
|
-
url = import_path.default.join(process.cwd(), url);
|
|
99
|
-
const data = await import_fs.default.promises.readFile(url);
|
|
100
|
-
return Buffer.from(data).toString("base64");
|
|
83
|
+
async function encodeLocalFile(_url) {
|
|
84
|
+
throw new Error("Local file path is not allowed");
|
|
101
85
|
}
|
|
102
86
|
async function encodeFile(ctx, url) {
|
|
103
87
|
if (!url.startsWith("http")) {
|
|
@@ -117,6 +101,13 @@ async function encodeFile(ctx, url) {
|
|
|
117
101
|
});
|
|
118
102
|
return Buffer.from(response.data).toString("base64");
|
|
119
103
|
}
|
|
104
|
+
async function encodeReadableStream(stream) {
|
|
105
|
+
const chunks = [];
|
|
106
|
+
for await (const chunk of stream) {
|
|
107
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
108
|
+
}
|
|
109
|
+
return Buffer.concat(chunks).toString("base64");
|
|
110
|
+
}
|
|
120
111
|
async function getUser(ctx, fields) {
|
|
121
112
|
const userFields = fields.filter((f) => f && ctx.db.getFieldByPath("users." + f));
|
|
122
113
|
if (!ctx.state.currentUser) {
|
|
@@ -193,6 +184,7 @@ class ResourceActionError extends Error {
|
|
|
193
184
|
buildTool,
|
|
194
185
|
encodeFile,
|
|
195
186
|
encodeLocalFile,
|
|
187
|
+
encodeReadableStream,
|
|
196
188
|
parseResponseMessage,
|
|
197
189
|
parseVariables,
|
|
198
190
|
sendSSEError,
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
import { AIEmployeeInstructionFiles } from './types';
|
|
10
10
|
import { Plugin } from '@nocobase/server';
|
|
11
11
|
export declare abstract class Files {
|
|
12
|
-
static resolvers(plugin: Plugin, attachmentPart:
|
|
12
|
+
static resolvers(plugin: Plugin, attachmentPart: {
|
|
13
|
+
attachments?: unknown[];
|
|
14
|
+
}): {
|
|
13
15
|
resolveAttachments: (files: AIEmployeeInstructionFiles[]) => Promise<void>;
|
|
14
16
|
resolveFileIds: (files: AIEmployeeInstructionFiles[]) => Promise<void>;
|
|
15
17
|
resolveUrls: (files: AIEmployeeInstructionFiles[]) => Promise<void>;
|
|
@@ -45,10 +45,25 @@ var import_node_path = __toESM(require("node:path"));
|
|
|
45
45
|
var import_lodash = __toESM(require("lodash"));
|
|
46
46
|
var import_axios = __toESM(require("axios"));
|
|
47
47
|
var import_utils = require("../../utils");
|
|
48
|
+
var import_attachments = require("../../../attachments");
|
|
49
|
+
function appendSource(record, source) {
|
|
50
|
+
if (!record || typeof record !== "object" || Array.isArray(record)) {
|
|
51
|
+
return record;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
...record,
|
|
55
|
+
source
|
|
56
|
+
};
|
|
57
|
+
}
|
|
48
58
|
class Files {
|
|
49
59
|
static resolvers(plugin, attachmentPart) {
|
|
50
60
|
const resolveAttachments = async (files) => {
|
|
51
|
-
const attachments = files.filter((it) => it.type === "attachments").flatMap((it) => import_lodash.default.isArray(it.value) ? it.value : [it.value])
|
|
61
|
+
const attachments = files.filter((it) => it.type === "attachments").flatMap((it) => import_lodash.default.isArray(it.value) ? it.value : [it.value]).map(
|
|
62
|
+
(attachment) => appendSource(attachment, {
|
|
63
|
+
...(0, import_attachments.getAttachmentSource)(attachment) ?? {},
|
|
64
|
+
trustworthy: true
|
|
65
|
+
})
|
|
66
|
+
);
|
|
52
67
|
if (attachments.length) {
|
|
53
68
|
attachmentPart.attachments = [...attachmentPart.attachments ?? [], ...attachments];
|
|
54
69
|
}
|
|
@@ -78,7 +93,13 @@ class Files {
|
|
|
78
93
|
}
|
|
79
94
|
attachmentPart.attachments = [
|
|
80
95
|
...attachmentPart.attachments ?? [],
|
|
81
|
-
...attachmentModels.map(
|
|
96
|
+
...attachmentModels.map(
|
|
97
|
+
(it) => appendSource(it.toJSON(), {
|
|
98
|
+
dataSourceKey: "main",
|
|
99
|
+
collectionName: collection,
|
|
100
|
+
trustworthy: true
|
|
101
|
+
})
|
|
102
|
+
)
|
|
82
103
|
];
|
|
83
104
|
}
|
|
84
105
|
}
|
|
@@ -106,14 +127,19 @@ class Files {
|
|
|
106
127
|
filePath: tempFilePath,
|
|
107
128
|
storageName,
|
|
108
129
|
values: {
|
|
109
|
-
|
|
130
|
+
title: fileIdentity.title,
|
|
110
131
|
mimetype: contentType,
|
|
111
132
|
meta: {
|
|
112
|
-
sourceUrl: url
|
|
133
|
+
sourceUrl: url,
|
|
134
|
+
originalFilename: fileIdentity.filename
|
|
113
135
|
}
|
|
114
136
|
}
|
|
115
137
|
});
|
|
116
|
-
return created.toJSON()
|
|
138
|
+
return appendSource(created.toJSON(), {
|
|
139
|
+
dataSourceKey: "main",
|
|
140
|
+
collectionName: "aiFiles",
|
|
141
|
+
trustworthy: true
|
|
142
|
+
});
|
|
117
143
|
} finally {
|
|
118
144
|
await import_promises.default.rm(tempFilePath, { force: true });
|
|
119
145
|
}
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "Create AI employees with diverse skills to collaborate with humans, build systems, and handle business operations.",
|
|
7
7
|
"description.ru-RU": "Поддержка интеграции с AI-сервисами: предоставляются AI-узлы для рабочих процессов, расширяя возможности бизнес-обработки.",
|
|
8
8
|
"description.zh-CN": "创建各种技能的 AI 员工,与人类协同,搭建系统,处理业务。",
|
|
9
|
-
"version": "2.2.0-alpha.
|
|
9
|
+
"version": "2.2.0-alpha.9",
|
|
10
10
|
"main": "dist/server/index.js",
|
|
11
11
|
"homepage": "https://docs.nocobase.com/handbook/action-ai",
|
|
12
12
|
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/action-ai",
|
|
@@ -66,5 +66,5 @@
|
|
|
66
66
|
"keywords": [
|
|
67
67
|
"AI"
|
|
68
68
|
],
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "4949bf5ebcd92d77a3a0a718ed578c270e4bd570"
|
|
70
70
|
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file is part of the NocoBase (R) project.
|
|
3
|
-
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
-
* Authors: NocoBase Team.
|
|
5
|
-
*
|
|
6
|
-
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
-
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
"use strict";(self.webpackChunk_nocobase_plugin_ai=self.webpackChunk_nocobase_plugin_ai||[]).push([["372"],{1735:function(e,t,n){n.r(t),n.d(t,{EMPLOYEE_PROMPT_VARIABLE_NAMESPACES:function(){return B},EmployeesPage:function(){return ed},createAIEmployee:function(){return H},deleteAIEmployee:function(){return V},isKnowledgeBaseEnabled:function(){return q},listAIEmployees:function(){return G},listKnowledgeBases:function(){return X},moveAIEmployee:function(){return _},updateAIEmployee:function(){return N},updateAIEmployeeEnabled:function(){return U}});var r=n(9155),l=n.n(r),a=n(2059),o=n(7375),i=n(5428),u=n(5477),c=n(3485),s=n(7694),m=n(9488),d=n(4196),f=n(3617),p=n(9312),y=n(8666);function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function g(e){if(Array.isArray(e))return e}function h(e,t,n,r,l,a,o){try{var i=e[a](o),u=i.value}catch(e){n(e);return}i.done?t(u):Promise.resolve(u).then(r,l)}function v(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){h(a,r,l,o,i,"next",e)}function i(e){h(a,r,l,o,i,"throw",e)}o(void 0)})}}function E(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function S(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function I(e,t){return g(e)||function(e,t){var n,r,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||C(e,t)||S()}function A(e){return function(e){if(Array.isArray(e))return b(e)}(e)||E(e)||C(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e,t){if(e){if("string"==typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return b(e,t)}}function F(e,t){var n,r,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:u(0)}),i(o,"throw",{value:u(1)}),i(o,"return",{value:u(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function u(i){return function(u){var c=[i,u];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){a.label=c[1];break}if(6===c[0]&&a.label<l[1]){a.label=l[1],l=c;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(c);break}l[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function x(){var e,t,n=(e=["\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n\n .ant-spin-nested-loading,\n .ant-spin-container,\n .ant-table,\n .ant-table-container {\n min-height: 0;\n flex: 1;\n display: flex;\n flex-direction: column;\n }\n\n .ant-table-content {\n flex: 1;\n min-height: 0;\n }\n\n .ant-table-body {\n flex: 1;\n min-height: 0;\n }\n\n .ant-table-thead > tr > th {\n white-space: nowrap;\n }\n\n .ant-pagination {\n flex: 0 0 auto;\n }\n"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return x=function(){return n},n}var T=Object.keys(d.B)[0],O="sort",B=["user","roleName","locale","now","timestamp"],M=function(e){return"".concat(e,":")},P=(0,u.css)(x()),j=function(e){return null!==e&&(void 0===e?"undefined":e&&"u">typeof Symbol&&e.constructor===Symbol?"symbol":typeof e)=="object"&&!Array.isArray(e)},L=function(e){var t;if(j(e))return null==(t=e.data)?void 0:t.data},R=function(e){if(!j(e))return{};var t=e.data;return j(t)?t:{}},K=function(e){return j(e)&&"string"==typeof e.username},z=function(e){return j(e)&&"string"==typeof e.key&&"string"==typeof e.name},W=function(e,t,n,r){return v(function(){var l;return F(this,function(a){if("function"!=typeof(l=e.resource(t)[n]))throw Error("Missing resource action: ".concat(t,".").concat(n));return[2,l(r)]})})()},D=function(e,t){var n=w({},e);return t.edit&&("system"===e._aboutMode&&(n.about=null),delete n._aboutMode,delete n.enabled),n};function G(e,t){return v(function(){var n,r,l;return F(this,function(a){switch(a.label){case 0:return[4,W(e,"aiEmployees","list",{page:t.page,pageSize:t.pageSize,filter:{category:t.category},sort:[O]})];case 1:return r=L(n=a.sent()),l=R(n),[2,{data:Array.isArray(r)?r.filter(K):[],total:"number"==typeof l.count?l.count:void 0}]}})})()}function _(e,t,n){return v(function(){return F(this,function(r){switch(r.label){case 0:return[4,W(e,"aiEmployees","move",{sourceId:t,targetId:n,sortField:O})];case 1:return r.sent(),[2]}})})()}function H(e,t){return v(function(){return F(this,function(n){switch(n.label){case 0:return[4,W(e,"aiEmployees","create",{values:D(t,{edit:!1})})];case 1:return n.sent(),[2]}})})()}function N(e,t){return v(function(){return F(this,function(n){switch(n.label){case 0:if(!t.username)throw Error("Missing AI employee username.");return[4,W(e,"aiEmployees","update",{values:D(t,{edit:!0}),filterByTk:t.username})];case 1:return n.sent(),[2]}})})()}function V(e,t){return v(function(){return F(this,function(n){switch(n.label){case 0:return[4,W(e,"aiEmployees","destroy",{filterByTk:t})];case 1:return n.sent(),[2]}})})()}function U(e,t,n){return v(function(){return F(this,function(r){switch(r.label){case 0:return[4,W(e,"aiEmployees","update",{filterByTk:t,values:{enabled:n}})];case 1:return r.sent(),[2]}})})()}function q(e){return v(function(){var t;return F(this,function(n){switch(n.label){case 0:return[4,W(e,"aiSettings","isKnowledgeBaseEnabled")];case 1:return[2,j(t=L(n.sent()))&&!0===t.enabled]}})})()}function X(e){return v(function(){var t;return F(this,function(n){switch(n.label){case 0:return[4,W(e,"aiKnowledgeBase","list",{fields:["key","name"],filter:{enabled:!0}})];case 1:return[2,Array.isArray(t=L(n.sent()))?t.filter(z):[]]}})})()}var Y=function(e){var t=e.disabled,n=e.value,o=e.onChange,i=a.theme.useToken().token,u=n||T,c=(0,r.useMemo)(function(){return Object.keys(d.B).map(function(e){return{seed:e,uri:(0,d.H)(e)}})},[]);return l().createElement(l().Fragment,null,l().createElement("div",{style:{marginBottom:i.marginLG+i.margin}},l().createElement(a.Avatar,{size:2*i.controlHeightLG+i.paddingSM+2*i.lineWidth,src:(0,d.H)(u)})),t?null:l().createElement(a.List,{grid:{gutter:i.margin,column:10},dataSource:c,renderItem:function(e){return l().createElement(a.List.Item,null,l().createElement("button",{"aria-label":e.seed,type:"button",onClick:function(){return null==o?void 0:o(e.seed)},onKeyDown:function(t){("Enter"===t.key||" "===t.key)&&(t.preventDefault(),null==o||o(e.seed))},style:{background:"transparent",borderColor:u===e.seed?i.colorPrimary:"transparent",borderStyle:"solid",borderWidth:2*i.lineWidth,borderRadius:"50%",cursor:"pointer",display:"inline-flex",padding:0}},l().createElement(a.Avatar,{size:i.controlHeightLG+i.paddingSM+2*i.lineWidth,src:e.uri})))}}))},Q=function(e){var t=e.edit,n=e.builtIn,r=(0,m.kj)();return l().createElement(l().Fragment,null,l().createElement(a.Form.Item,{name:"username",label:M(r("Username")),rules:[{required:!0}],preserve:!0},l().createElement(a.Input,{disabled:t})),l().createElement(a.Form.Item,{name:"nickname",label:M(r("Nickname")),rules:[{required:!0}],preserve:!0},l().createElement(a.Input,{disabled:n})),l().createElement(a.Form.Item,{name:"position",label:M(r("Position")),extra:r("Position description"),preserve:!0},l().createElement(a.Input,{disabled:n,placeholder:r("Position placeholder")})),l().createElement(a.Form.Item,{name:"avatar",label:M(r("Avatar")),preserve:!0},l().createElement(Y,{disabled:n})),l().createElement(a.Form.Item,{name:"bio",label:M(r("Bio")),preserve:!0},l().createElement(a.Input.TextArea,{disabled:n,placeholder:r("Bio placeholder")})),l().createElement(a.Form.Item,{name:"greeting",label:M(r("Greeting message")),preserve:!0},l().createElement(a.Input.TextArea,{disabled:n,placeholder:r("Greeting message placeholder")})))},$=function(e){var t,n=e.builtIn,o=e.record,i=(0,m.kj)(),u=a.theme.useToken().token,s=a.Form.useFormInstance(),d=null!=(t=a.Form.useWatch("_aboutMode",s))?t:(null==o?void 0:o.about)?"custom":"system";return(0,r.useEffect)(function(){n&&!s.getFieldValue("_aboutMode")&&s.setFieldValue("_aboutMode",(null==o?void 0:o.about)?"custom":"system")},[n,s,null==o?void 0:o.about]),l().createElement(l().Fragment,null,l().createElement(a.Alert,{message:i("Role setting description"),type:"info",showIcon:!0}),n?l().createElement(a.Form.Item,{name:"_aboutMode",preserve:!0},l().createElement(a.Radio.Group,null,l().createElement(a.Radio,{value:"system"},i("System default")),l().createElement(a.Radio,{value:"custom"},i("Custom")))):null,n&&"system"===d?l().createElement(a.Typography.Paragraph,{copyable:!0,style:{backgroundColor:u.colorFillQuaternary,borderColor:u.colorBorder,borderRadius:u.borderRadius,borderStyle:"solid",borderWidth:u.lineWidth,margin:0,maxHeight:12*u.controlHeightLG,overflowY:"auto",paddingBlock:u.paddingSM,paddingInline:u.padding,whiteSpace:"pre-wrap",wordBreak:"break-word"}},(null==o?void 0:o.defaultPrompt)||""):l().createElement(a.Form.Item,{name:"about",label:M(i("Role setting")),preserve:!0},l().createElement(c.VariableTextArea,{namespaces:B,placeholder:i("Role setting placeholder"),rows:15})))},J=function(e){var t,n=g(t=e.split(":"))||E(t)||C(t)||S();return{llmService:n[0],model:n.slice(1).join(":")}},Z=function(e){return e.llmService&&e.model?"".concat(e.llmService,":").concat(e.model):void 0},ee=function(e){return j(e)?e:{}},et=function(e){return j(e)?e:{}},en=function(){var e=(0,f.M)(),t=I((0,r.useState)(!1),2),n=t[0],l=t[1];return(0,r.useEffect)(function(){var t=!1;return v(function(){return F(this,function(n){switch(n.label){case 0:l(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,e.getLLMServices()];case 2:return n.sent(),[3,5];case 3:return console.error(n.sent()),[3,5];case 4:return t||l(!1),[7];case 5:return[2]}})})().catch(function(e){console.error(e)}),function(){t=!0}},[e]),{services:e.llmServices,loading:n||e.llmServicesLoading}},er=(0,s.observer)(function(){var e=(0,m.kj)(),t=a.Form.useFormInstance(),n=a.Form.useWatch("modelSettings",t),o=I((0,r.useState)(function(){return ee(t.getFieldValue("modelSettings"))}),2),i=o[0],u=o[1],c=en(),s=c.services,d=c.loading,f=!!i.enabled,p=(0,r.useMemo)(function(){var e=Array.isArray(i.models)?i.models:[];if(e.length)return e.map(Z).filter(function(e){return!!e});var t=Z(i);return t?[t]:[]},[i]),y=(0,r.useMemo)(function(){return s.map(function(e){return{label:e.llmServiceTitle,options:e.enabledModels.map(function(t){return{label:"".concat(e.llmServiceTitle," / ").concat(t.label),value:"".concat(e.llmService,":").concat(t.value)}})}})},[s]),b=(0,r.useMemo)(function(){var e=new Map;return y.forEach(function(t){t.options.forEach(function(t){return e.set(t.value,t.label)})}),e},[y]),g=(0,r.useCallback)(function(e){var n=w({},ee(t.getFieldValue("modelSettings")),e);u(n),t.setFieldsValue({modelSettings:n})},[t]);return(0,r.useEffect)(function(){u(ee(n))},[n]),(0,r.useEffect)(function(){if(f&&!p.length&&y.length){var e,t,n,r=null==(n=y[0])||null==(t=n.options)||null==(e=t[0])?void 0:e.value;r&&g({models:[J(r)]})}},[f,y,p.length,g]),l().createElement(l().Fragment,null,l().createElement(a.Alert,{type:"info",showIcon:!0,message:e("Restrict this AI employee to the selected models.")}),l().createElement(a.Form.Item,{label:l().createElement(a.Typography.Text,{strong:!0},M(e("Enable dedicated model configuration"))),preserve:!0},l().createElement(a.Switch,{checked:f,onChange:function(e){return g({enabled:e})}})),l().createElement(a.Form.Item,{label:l().createElement(a.Typography.Text,{strong:!0},M(e("Models"))),preserve:!0},l().createElement(a.Select,{allowClear:!0,disabled:!f,loading:d,mode:"multiple",notFoundContent:d?l().createElement(a.Spin,{size:"small"}):null,optionFilterProp:"label",options:y,placeholder:e("Select models"),showSearch:!0,tagRender:function(e){return l().createElement(a.Tag,{closable:e.closable,onClose:e.onClose},b.get(String(e.value))||e.label)},value:p,onChange:function(e){e.length?g({llmService:void 0,model:void 0,models:e.map(J)}):g({llmService:void 0,model:void 0,models:[]})}})))}),el=function(){var e=(0,m.kj)();return function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t?e(t):n}},ea=function(e){var t=e.title,n=e.description,r=a.theme.useToken().token;return l().createElement("div",null,l().createElement("div",{style:{fontWeight:r.fontWeightStrong,fontSize:r.fontSizeSM}},t),l().createElement("div",{style:{color:r.colorTextSecondary,fontSize:r.fontSizeSM}},n))},eo=(0,s.observer)(function(e){var t,n=e.builtIn,o=(0,m.kj)(),i=el(),u=(0,f.M)(),c=a.Form.useFormInstance(),s=null!=(t=a.Form.useWatch("skillSettings",c))?t:{},d=Array.isArray(s.skills)?s.skills:[];(0,r.useEffect)(function(){u.getAISkills().catch(function(e){console.error(e)})},[u]);var p=new Map(u.aiSkills.map(function(e){return[e.name,e]})),y=u.aiSkills.filter(function(e){return"GENERAL"===e.scope}),b=d.map(function(e){return p.get(e)}).filter(function(e){return!!e&&"SPECIFIED"===e.scope}),g=function(e){var t,n;return l().createElement(a.List.Item,{key:e.name},l().createElement("div",null,i(null!=(t=e.title)?t:e.name,e.name)),l().createElement(a.Typography.Text,{type:"secondary"},i(null!=(n=e.about)?n:e.description)))},h=[{key:"general-skills",label:l().createElement(ea,{title:o("General skills"),description:o("Shared by all AI employees.")}),children:l().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:y,renderItem:g})}];return n&&b.length&&h.push({key:"specific-skills",label:l().createElement(ea,{title:o("Employee-specific skills"),description:o("Only available to this AI employee.")}),children:l().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:b,renderItem:g})}),u.aiSkillsLoading?l().createElement(a.Spin,null):l().createElement(a.Collapse,{ghost:!0,size:"small",defaultActiveKey:[],items:h})}),ei=function(e,t){return"CUSTOM"===e.scope?(null==t?void 0:t.autoCall)?"ALLOW":"ASK":"ALLOW"===e.defaultPermission?"ALLOW":"ASK"},eu=(0,s.observer)(function(e){var t=e.builtIn,n=(0,m.kj)(),i=a.theme.useToken().token,u=el(),c=(0,f.M)(),s=a.Form.useFormInstance(),d=a.Form.useWatch("skillSettings",s),p=I((0,r.useState)(function(){return et(s.getFieldValue("skillSettings"))}),2),y=p[0],b=p[1],g=Array.isArray(y.tools)?y.tools:[],h=I((0,r.useState)(t&&!g.length?[]:["custom-tools"]),2),v=h[0],E=h[1],S=l().useRef(g.length),C=[{label:n("Ask"),value:"ASK"},{label:n("Allow"),value:"ALLOW"}];(0,r.useEffect)(function(){c.getAITools().catch(function(e){console.error(e)})},[c]),(0,r.useEffect)(function(){b(et(d))},[d]);var F=function(e){var t=k(w({},et(s.getFieldValue("skillSettings"))),{tools:e});b(t),s.setFieldsValue({skillSettings:t})},x=new Set(g.map(function(e){return e.name})),T=new Map(c.aiTools.map(function(e){return[e.definition.name,e]})),O=c.aiTools.filter(function(e){return"GENERAL"===e.scope&&"loader"===e.from}),B=g.filter(function(e){var t=T.get(e.name);return t&&"GENERAL"!==t.scope&&"CUSTOM"!==t.scope}),M=g.filter(function(e){var t;return(null==(t=T.get(e.name))?void 0:t.scope)==="CUSTOM"});(0,r.useEffect)(function(){var e=0===S.current;t&&0===M.length?E([]):e&&M.length>0&&E(["custom-tools"]),S.current=M.length},[t,M.length]);var P=c.aiTools.filter(function(e){return"CUSTOM"===e.scope&&!x.has(e.definition.name)}).map(function(e){var t,n,r,o;return{key:e.definition.name,label:l().createElement("div",{style:{maxWidth:8*i.controlHeightLG,minWidth:4*i.controlHeightLG}},l().createElement(a.Flex,{justify:"space-between"},l().createElement("div",null,u(null!=(t=null==(r=e.introduction)?void 0:r.title)?t:e.definition.name,e.definition.name))),l().createElement(a.Typography.Text,{type:"secondary"},u(null!=(n=null==(o=e.introduction)?void 0:o.about)?n:e.definition.description))),onClick:function(){var t=et(s.getFieldValue("skillSettings")),n=Array.isArray(t.tools)?t.tools:[];n.some(function(t){return t.name===e.definition.name})||F(A(n).concat([{name:e.definition.name,autoCall:!1}]))}}}),j=function(e){var t,r,o,i,c="definition"in e?e:T.get(e.name);if(!c)return null;var s="definition"in e?void 0:e;return l().createElement(a.List.Item,{key:c.definition.name,extra:l().createElement(a.Flex,{vertical:!0,justify:"end"},l().createElement(a.Space,null,l().createElement(a.Typography.Text,{type:"secondary"},n("Permission")),l().createElement(a.Segmented,{size:"small",options:C,value:ei(c,s),disabled:!0})))},l().createElement("div",null,u(null!=(t=null==(o=c.introduction)?void 0:o.title)?t:c.definition.name,c.definition.name)),l().createElement(a.Typography.Text,{type:"secondary"},u(null!=(r=null==(i=c.introduction)?void 0:i.about)?r:c.definition.description)))},L=[{key:"general-tools",label:l().createElement(ea,{title:n("General tools"),description:n("Shared by all AI employees.")}),children:l().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:O,renderItem:j})}];return t&&B.length&&L.push({key:"specific-tools",label:l().createElement(ea,{title:n("Employee-specific tools"),description:n("Only available to this AI employee.")}),children:l().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:B,renderItem:j})}),L.push({key:"custom-tools",label:l().createElement(ea,{title:n("Custom tools"),description:n("Created by workflow. You can add/remove and set default permissions.")}),extra:l().createElement("div",{onClick:function(e){e.stopPropagation()},onKeyDown:function(e){e.stopPropagation()}},l().createElement(a.Dropdown,{menu:{items:P},disabled:!(null==P?void 0:P.length),placement:"bottomRight"},l().createElement(a.Button,{type:"primary",icon:l().createElement(o.PlusOutlined,null),disabled:!(null==P?void 0:P.length),style:{pointerEvents:(null==P?void 0:P.length)?void 0:"none"}},n("Add tool")))),children:l().createElement(a.List,{itemLayout:"vertical",bordered:!0,dataSource:M,renderItem:function(e){var t,r,i,c,s=T.get(e.name);return s?l().createElement(a.List.Item,{key:e.name,extra:l().createElement(a.Space,null,l().createElement(a.Typography.Text,null,n("Permission")),l().createElement(a.Segmented,{size:"small",options:C,value:ei(s,e),onChange:function(t){F(g.map(function(n){return n.name===e.name?k(w({},n),{autoCall:"ALLOW"===t}):n}))}}),l().createElement(a.Button,{"aria-label":n("Delete"),icon:l().createElement(o.DeleteOutlined,null),type:"text",onClick:function(){F(g.filter(function(t){return t.name!==e.name}))}}))},l().createElement("div",null,u(null!=(t=null==(i=s.introduction)?void 0:i.title)?t:s.definition.name,s.definition.name)),l().createElement(a.Typography.Text,{type:"secondary"},u(null!=(r=null==(c=s.introduction)?void 0:c.about)?r:s.definition.description))):null}})}),c.aiToolsLoading?l().createElement(a.Spin,null):l().createElement(a.Collapse,{ghost:!0,size:"small",activeKey:v,onChange:function(e){return E(Array.isArray(e)?e.map(String):[String(e)])},items:L})}),ec=function(e){var t=e.apiClient,n=(0,m.kj)(),o=a.Form.useFormInstance(),i=a.Form.useWatch("enableKnowledgeBase",o),u=I((0,r.useState)([]),2),c=u[0],s=u[1],d=I((0,r.useState)(!1),2),f=d[0],p=d[1];return(0,r.useEffect)(function(){var e=!1;return v(function(){var n;return F(this,function(r){switch(r.label){case 0:p(!0),r.label=1;case 1:return r.trys.push([1,3,4,5]),[4,X(t)];case 2:return n=r.sent(),e||s(n),[3,5];case 3:return console.error(r.sent()),[3,5];case 4:return e||p(!1),[7];case 5:return[2]}})})().catch(function(e){console.error(e)}),function(){e=!0}},[t]),l().createElement(l().Fragment,null,l().createElement(a.Form.Item,{name:"enableKnowledgeBase",label:M(n("Enable Knowledge Base")),valuePropName:"checked",preserve:!0},l().createElement(a.Switch,null)),l().createElement(a.Form.Item,{name:"knowledgeBasePrompt",label:M(n("Knowledge Base Prompt")),rules:[{required:!0}],preserve:!0},l().createElement(a.Input.TextArea,{disabled:!i,autoSize:{minRows:5}})),l().createElement(a.Form.Item,{name:["knowledgeBase","knowledgeBaseKeys"],label:M(n("Knowledge Base")),rules:[{required:!!i}],preserve:!0},l().createElement(a.Select,{disabled:!i,fieldNames:{label:"name",value:"key"},loading:f,mode:"multiple",options:c})),l().createElement(a.Form.Item,{name:["knowledgeBase","topK"],label:M(n("Top K")),rules:[{required:!0}],preserve:!0},l().createElement(a.InputNumber,{disabled:!i,min:1,max:100})),l().createElement(a.Form.Item,{name:["knowledgeBase","score"],label:M(n("Score")),rules:[{required:!0}],preserve:!0},l().createElement(a.InputNumber,{disabled:!i,min:0,max:1,step:.1})))},es=function(e){var t,n=e.apiClient,r=e.activeTab,o=e.edit,i=e.onTabChange,u=e.record,c=e.knowledgeBaseEnabled,s=(0,m.kj)(),d=a.Form.useFormInstance(),f=null!=(t=a.Form.useWatch("chatSettings",d))?t:{},p=!!(null==u?void 0:u.builtIn),y=!1!==f.enableSkills,b=!1!==f.enableTools;return l().createElement(a.Tabs,{activeKey:r,onChange:i,items:[{key:"profile",label:s("Profile"),children:l().createElement(Q,{edit:o,builtIn:p}),forceRender:!0},{key:"roleSetting",label:s("Role setting"),children:l().createElement($,{builtIn:p,record:u}),forceRender:!0},{key:"modelSettings",label:s("Model settings"),children:l().createElement(er,null),forceRender:!0}].concat(A(y?[{key:"skills",label:s("Skills"),children:l().createElement(eo,{builtIn:p}),forceRender:!0}]:[]),A(b?[{key:"tools",label:s("Tools"),children:l().createElement(eu,{builtIn:p}),forceRender:!0}]:[]),A(c?[{key:"knowledgeBase",label:s("KnowledgeBase"),children:l().createElement(ec,{apiClient:n}),forceRender:!0}]:[]))})},em=function(e){var t=e.record,n=e.onUpdated,o=(0,c.useApp)(),i=(0,m.kj)(),u=a.App.useApp().message,s=(0,f.M)(),d=I((0,r.useState)(!1),2),p=d[0],y=d[1];return l().createElement(a.Switch,{checked:!!t.enabled,onChange:function(e){return v(function(){return F(this,function(r){switch(r.label){case 0:y(!0),r.label=1;case 1:return r.trys.push([1,5,6,7]),[4,U(o.apiClient,t.username,e)];case 2:return r.sent(),u.success(i("Saved successfully")),[4,n()];case 3:return r.sent(),[4,s.refreshAIEmployees()];case 4:return r.sent(),[3,7];case 5:return console.error(r.sent()),u.error(i("Failed to update")),[3,7];case 6:return y(!1),[7];case 7:return[2]}})})()},loading:p,size:"small"})},ed=function(){var e=(0,c.useApp)(),t=(0,s.useFlowContext)(),n=(0,m.kj)(),u=a.theme.useToken().token,y=a.App.useApp().message,b=(0,f.M)(),g=I((0,r.useState)("business"),2),h=g[0],E=g[1],S=I((0,r.useState)([]),2),w=S[0],k=S[1],A=I((0,r.useState)(!1),2),C=A[0],x=A[1],T=I((0,r.useState)(!1),2),O=T[0],B=T[1],M=I((0,r.useState)([]),2),j=M[0],L=M[1],R=e.apiClient.auth,K=(null==R?void 0:R.role)==="root",z=(0,r.useMemo)(function(){return{color:u.colorPrimary,marginInline:-u.paddingSM,paddingBlock:u.paddingSM,paddingInlineEnd:u.paddingXS+u.paddingSM,paddingInlineStart:u.paddingSM}},[u.colorPrimary,u.paddingSM,u.paddingXS]),W=(0,r.useCallback)(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:h;return v(function(){return F(this,function(n){switch(n.label){case 0:x(!0),n.label=1;case 1:return n.trys.push([1,,3,4]),[4,G(e.apiClient,{category:t})];case 2:return k(n.sent().data),[3,4];case 3:return x(!1),[7];case 4:return[2]}})})()},[e.apiClient,h]);(0,r.useEffect)(function(){W().catch(function(e){console.error(e),x(!1)})},[W]),(0,r.useEffect)(function(){v(function(){return F(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,q(e.apiClient)];case 1:return B.apply(void 0,[t.sent()]),[3,3];case 2:return console.error(t.sent()),[3,3];case 3:return[2]}})})().catch(function(e){console.error(e)})},[e.apiClient]);var D=function(e){t.viewer.open({type:"drawer",width:p.o,closable:!0,content:l().createElement(ef,{editingRecord:e,knowledgeBaseEnabled:O,onSubmitted:function(){return v(function(){return F(this,function(e){switch(e.label){case 0:return[4,W()];case 1:return e.sent(),[4,b.refreshAIEmployees()];case 2:return e.sent(),[2]}})})()}})})},H=[{title:n("Avatar"),dataIndex:"avatar",render:function(e){return e?l().createElement(a.Avatar,{shape:"circle",size:"large",src:(0,d.H)(e)}):null}},{title:n("Username"),dataIndex:"username",render:function(e,t){var r=t.missingKnowledgeBaseKeys||[];return r.length?l().createElement(a.Space,{size:"small"},l().createElement("span",null,e),l().createElement(a.Tooltip,{title:n("Missing knowledge base configuration for keys: {{keys}}. Create knowledge bases with the same keys to enable this employee normally.",{keys:r.join(", ")})},l().createElement(o.ExclamationCircleOutlined,null))):e}},{title:n("Nickname"),dataIndex:"nickname"},{title:n("Position"),dataIndex:"position"},{title:n("Enabled"),dataIndex:"enabled",render:function(e,t){return l().createElement(em,{record:t,onUpdated:function(){return W()}})}},{title:n("Actions"),key:"actions",render:function(t,r){return l().createElement(a.Space,{size:u.marginXS},l().createElement("a",{style:z,onClick:function(){return D(r)}},n("Edit")),l().createElement(a.Popconfirm,{title:n("Delete AI employee"),description:n("Are you sure you want to delete this AI employee?"),onConfirm:function(){return v(function(){return F(this,function(t){switch(t.label){case 0:if(r.builtIn&&!K)return y.warning(n("Cannot delete built-in ai employees")),[2];return[4,V(e.apiClient,r.username)];case 1:return t.sent(),y.success(n("Saved successfully")),[4,W()];case 2:return t.sent(),[4,b.refreshAIEmployees()];case 3:return t.sent(),[2]}})})()}},l().createElement("a",{style:z},n("Delete"))))}}];return l().createElement(a.Card,{style:{display:"flex",flexDirection:"column",minHeight:"100%"},styles:{body:{display:"flex",flex:1,flexDirection:"column",minHeight:0}}},l().createElement(a.Flex,{vertical:!0,gap:"middle",style:{flex:1,minHeight:0}},l().createElement(a.Flex,{justify:"space-between",wrap:"wrap",gap:"middle"},l().createElement(a.Radio.Group,{optionType:"button",value:h,options:[{label:n("Business"),value:"business"},{label:n("Developer"),value:"developer"}],onChange:function(e){return E(e.target.value)}}),l().createElement(a.Space,null,l().createElement(a.Button,{icon:l().createElement(o.ReloadOutlined,null),onClick:function(){return W()}},n("Refresh")),l().createElement(a.Button,{type:"primary",icon:l().createElement(o.PlusOutlined,null),onClick:function(){t.viewer.open({type:"drawer",width:p.o,closable:!0,content:l().createElement(ef,{knowledgeBaseEnabled:O,onSubmitted:function(){return v(function(){return F(this,function(e){switch(e.label){case 0:return[4,W()];case 1:return e.sent(),[4,b.refreshAIEmployees()];case 2:return e.sent(),[2]}})})()}})})}},n("New AI employee")))),l().createElement("div",{style:{display:"flex",flex:1,flexDirection:"column",minHeight:0}},l().createElement(c.Table,{rowKey:"username",loading:C,columns:H,dataSource:w,className:P,isDraggable:!0,onSortEnd:function(t,r){return v(function(){var l,a,o;return F(this,function(u){switch(u.label){case 0:if(!t.username||!r.username||t.username===r.username)return[2];l=w,a=w.findIndex(function(e){return e.username===t.username}),o=w.findIndex(function(e){return e.username===r.username}),a>=0&&o>=0&&k((0,i.arrayMove)(w,a,o)),u.label=1;case 1:return u.trys.push([1,5,,6]),[4,_(e.apiClient,t.username,r.username)];case 2:return u.sent(),y.success(n("Saved successfully")),[4,W()];case 3:return u.sent(),[4,b.refreshAIEmployees()];case 4:return u.sent(),[3,6];case 5:return console.error(u.sent()),k(l),y.error(n("Failed to update")),[3,6];case 6:return[2]}})})()},rowSelection:{selectedRowKeys:j,onChange:L},pagination:{defaultPageSize:20,showTotal:function(e){return n("Total {{count}} items",{count:e})}},scroll:{x:"max-content",y:"100%"}}))))},ef=function(e){var t=e.editingRecord,n=e.knowledgeBaseEnabled,o=e.onSubmitted,i=(0,c.useApp)(),u=(0,s.useFlowContext)(),d=(0,m.kj)(),f=a.App.useApp().message,p=I(a.Form.useForm(),1)[0],b=I((0,r.useState)(!1),2),g=b[0],h=b[1],E=I((0,r.useState)("profile"),2),S=E[0],A=E[1],C=I((0,r.useState)(!1),2),x=C[0],O=C[1],B=(0,r.useMemo)(function(){return t?k(w({},t),{_aboutMode:t.builtIn?t.about?"custom":"system":void 0}):{username:(0,s.randomId)(),enabled:!0,enableKnowledgeBase:!1,knowledgeBase:{knowledgeBaseKeys:[],topK:3,score:"0.6"},knowledgeBasePrompt:d("knowledge Base Prompt default"),avatar:T,builtIn:!1,category:"business"}},[t,d]),M=u.view,P=M.Header,j=M.Footer;(0,r.useEffect)(function(){p.setFieldsValue(B)},[p,B]);var L=(0,y.C)({view:u.view,form:p,initialValues:B,dirty:x,title:d("Unsaved changes"),content:d("Are you sure you don't want to save?")});return l().createElement(l().Fragment,null,l().createElement(P,{title:t?d("Edit AI employee"):d("New AI employee")}),l().createElement(a.Spin,{spinning:g},l().createElement(a.Form,{form:p,layout:"vertical",onFinish:function(e){return v(function(){return F(this,function(n){switch(n.label){case 0:h(!0),n.label=1;case 1:if(n.trys.push([1,,8,9]),!t)return[3,3];return[4,N(i.apiClient,e)];case 2:return n.sent(),[3,5];case 3:return[4,H(i.apiClient,e)];case 4:n.sent(),n.label=5;case 5:return f.success(d("Saved successfully")),[4,o()];case 6:return n.sent(),[4,u.view.close(void 0,!0)];case 7:return n.sent(),[3,9];case 8:return h(!1),[7];case 9:return[2]}})})()},onValuesChange:function(){return O(!0)}},l().createElement(es,{apiClient:i.apiClient,activeTab:S,edit:!!t,onTabChange:A,record:t,knowledgeBaseEnabled:n}))),l().createElement(j,null,l().createElement(a.Flex,{justify:"end",gap:"small"},l().createElement(a.Button,{onClick:L},d("Cancel")),l().createElement(a.Button,{type:"primary",loading:g,onClick:function(){return p.submit()}},d("Submit")))))};t.default=ed}}]);
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file is part of the NocoBase (R) project.
|
|
3
|
-
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
-
* Authors: NocoBase Team.
|
|
5
|
-
*
|
|
6
|
-
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
-
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
"use strict";(self.webpackChunk_nocobase_plugin_ai_client_v2=self.webpackChunk_nocobase_plugin_ai_client_v2||[]).push([["372"],{1735:function(e,t,n){n.r(t),n.d(t,{EMPLOYEE_PROMPT_VARIABLE_NAMESPACES:function(){return B},EmployeesPage:function(){return ed},createAIEmployee:function(){return H},deleteAIEmployee:function(){return V},isKnowledgeBaseEnabled:function(){return q},listAIEmployees:function(){return D},listKnowledgeBases:function(){return X},moveAIEmployee:function(){return G},updateAIEmployee:function(){return N},updateAIEmployeeEnabled:function(){return U}});var r=n(9155),l=n.n(r),a=n(2059),o=n(7375),i=n(5428),u=n(5477),c=n(3485),s=n(7694),m=n(9488),d=n(4196),f=n(3617),p=n(9312),y=n(8666);function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function g(e){if(Array.isArray(e))return e}function h(e,t,n,r,l,a,o){try{var i=e[a](o),u=i.value}catch(e){n(e);return}i.done?t(u):Promise.resolve(u).then(r,l)}function v(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){h(a,r,l,o,i,"next",e)}function i(e){h(a,r,l,o,i,"throw",e)}o(void 0)})}}function E(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function S(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function I(e,t){return g(e)||function(e,t){var n,r,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||C(e,t)||S()}function A(e){return function(e){if(Array.isArray(e))return b(e)}(e)||E(e)||C(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e,t){if(e){if("string"==typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return b(e,t)}}function F(e,t){var n,r,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:u(0)}),i(o,"throw",{value:u(1)}),i(o,"return",{value:u(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function u(i){return function(u){var c=[i,u];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){a.label=c[1];break}if(6===c[0]&&a.label<l[1]){a.label=l[1],l=c;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(c);break}l[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function x(){var e,t,n=(e=["\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n\n .ant-spin-nested-loading,\n .ant-spin-container,\n .ant-table,\n .ant-table-container {\n min-height: 0;\n flex: 1;\n display: flex;\n flex-direction: column;\n }\n\n .ant-table-content {\n flex: 1;\n min-height: 0;\n }\n\n .ant-table-body {\n flex: 1;\n min-height: 0;\n }\n\n .ant-table-thead > tr > th {\n white-space: nowrap;\n }\n\n .ant-pagination {\n flex: 0 0 auto;\n }\n"],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return x=function(){return n},n}var T=Object.keys(d.B)[0],O="sort",B=["user","roleName","locale","now","timestamp"],M=function(e){return"".concat(e,":")},P=(0,u.css)(x()),j=function(e){return null!==e&&(void 0===e?"undefined":e&&"u">typeof Symbol&&e.constructor===Symbol?"symbol":typeof e)=="object"&&!Array.isArray(e)},L=function(e){var t;if(j(e))return null==(t=e.data)?void 0:t.data},R=function(e){if(!j(e))return{};var t=e.data;return j(t)?t:{}},K=function(e){return j(e)&&"string"==typeof e.username},z=function(e){return j(e)&&"string"==typeof e.key&&"string"==typeof e.name},W=function(e,t,n,r){return v(function(){var l;return F(this,function(a){if("function"!=typeof(l=e.resource(t)[n]))throw Error("Missing resource action: ".concat(t,".").concat(n));return[2,l(r)]})})()},_=function(e,t){var n=w({},e);return t.edit&&("system"===e._aboutMode&&(n.about=null),delete n._aboutMode,delete n.enabled),n};function D(e,t){return v(function(){var n,r,l;return F(this,function(a){switch(a.label){case 0:return[4,W(e,"aiEmployees","list",{page:t.page,pageSize:t.pageSize,filter:{category:t.category},sort:[O]})];case 1:return r=L(n=a.sent()),l=R(n),[2,{data:Array.isArray(r)?r.filter(K):[],total:"number"==typeof l.count?l.count:void 0}]}})})()}function G(e,t,n){return v(function(){return F(this,function(r){switch(r.label){case 0:return[4,W(e,"aiEmployees","move",{sourceId:t,targetId:n,sortField:O})];case 1:return r.sent(),[2]}})})()}function H(e,t){return v(function(){return F(this,function(n){switch(n.label){case 0:return[4,W(e,"aiEmployees","create",{values:_(t,{edit:!1})})];case 1:return n.sent(),[2]}})})()}function N(e,t){return v(function(){return F(this,function(n){switch(n.label){case 0:if(!t.username)throw Error("Missing AI employee username.");return[4,W(e,"aiEmployees","update",{values:_(t,{edit:!0}),filterByTk:t.username})];case 1:return n.sent(),[2]}})})()}function V(e,t){return v(function(){return F(this,function(n){switch(n.label){case 0:return[4,W(e,"aiEmployees","destroy",{filterByTk:t})];case 1:return n.sent(),[2]}})})()}function U(e,t,n){return v(function(){return F(this,function(r){switch(r.label){case 0:return[4,W(e,"aiEmployees","update",{filterByTk:t,values:{enabled:n}})];case 1:return r.sent(),[2]}})})()}function q(e){return v(function(){var t;return F(this,function(n){switch(n.label){case 0:return[4,W(e,"aiSettings","isKnowledgeBaseEnabled")];case 1:return[2,j(t=L(n.sent()))&&!0===t.enabled]}})})()}function X(e){return v(function(){var t;return F(this,function(n){switch(n.label){case 0:return[4,W(e,"aiKnowledgeBase","list",{fields:["key","name"],filter:{enabled:!0}})];case 1:return[2,Array.isArray(t=L(n.sent()))?t.filter(z):[]]}})})()}var Y=function(e){var t=e.disabled,n=e.value,o=e.onChange,i=a.theme.useToken().token,u=n||T,c=(0,r.useMemo)(function(){return Object.keys(d.B).map(function(e){return{seed:e,uri:(0,d.H)(e)}})},[]);return l().createElement(l().Fragment,null,l().createElement("div",{style:{marginBottom:i.marginLG+i.margin}},l().createElement(a.Avatar,{size:2*i.controlHeightLG+i.paddingSM+2*i.lineWidth,src:(0,d.H)(u)})),t?null:l().createElement(a.List,{grid:{gutter:i.margin,column:10},dataSource:c,renderItem:function(e){return l().createElement(a.List.Item,null,l().createElement("button",{"aria-label":e.seed,type:"button",onClick:function(){return null==o?void 0:o(e.seed)},onKeyDown:function(t){("Enter"===t.key||" "===t.key)&&(t.preventDefault(),null==o||o(e.seed))},style:{background:"transparent",borderColor:u===e.seed?i.colorPrimary:"transparent",borderStyle:"solid",borderWidth:2*i.lineWidth,borderRadius:"50%",cursor:"pointer",display:"inline-flex",padding:0}},l().createElement(a.Avatar,{size:i.controlHeightLG+i.paddingSM+2*i.lineWidth,src:e.uri})))}}))},Q=function(e){var t=e.edit,n=e.builtIn,r=(0,m.kj)();return l().createElement(l().Fragment,null,l().createElement(a.Form.Item,{name:"username",label:M(r("Username")),rules:[{required:!0}],preserve:!0},l().createElement(a.Input,{disabled:t})),l().createElement(a.Form.Item,{name:"nickname",label:M(r("Nickname")),rules:[{required:!0}],preserve:!0},l().createElement(a.Input,{disabled:n})),l().createElement(a.Form.Item,{name:"position",label:M(r("Position")),extra:r("Position description"),preserve:!0},l().createElement(a.Input,{disabled:n,placeholder:r("Position placeholder")})),l().createElement(a.Form.Item,{name:"avatar",label:M(r("Avatar")),preserve:!0},l().createElement(Y,{disabled:n})),l().createElement(a.Form.Item,{name:"bio",label:M(r("Bio")),preserve:!0},l().createElement(a.Input.TextArea,{disabled:n,placeholder:r("Bio placeholder")})),l().createElement(a.Form.Item,{name:"greeting",label:M(r("Greeting message")),preserve:!0},l().createElement(a.Input.TextArea,{disabled:n,placeholder:r("Greeting message placeholder")})))},$=function(e){var t,n=e.builtIn,o=e.record,i=(0,m.kj)(),u=a.theme.useToken().token,s=a.Form.useFormInstance(),d=null!=(t=a.Form.useWatch("_aboutMode",s))?t:(null==o?void 0:o.about)?"custom":"system";return(0,r.useEffect)(function(){n&&!s.getFieldValue("_aboutMode")&&s.setFieldValue("_aboutMode",(null==o?void 0:o.about)?"custom":"system")},[n,s,null==o?void 0:o.about]),l().createElement(l().Fragment,null,l().createElement(a.Alert,{message:i("Role setting description"),type:"info",showIcon:!0}),n?l().createElement(a.Form.Item,{name:"_aboutMode",preserve:!0},l().createElement(a.Radio.Group,null,l().createElement(a.Radio,{value:"system"},i("System default")),l().createElement(a.Radio,{value:"custom"},i("Custom")))):null,n&&"system"===d?l().createElement(a.Typography.Paragraph,{copyable:!0,style:{backgroundColor:u.colorFillQuaternary,borderColor:u.colorBorder,borderRadius:u.borderRadius,borderStyle:"solid",borderWidth:u.lineWidth,margin:0,maxHeight:12*u.controlHeightLG,overflowY:"auto",paddingBlock:u.paddingSM,paddingInline:u.padding,whiteSpace:"pre-wrap",wordBreak:"break-word"}},(null==o?void 0:o.defaultPrompt)||""):l().createElement(a.Form.Item,{name:"about",label:M(i("Role setting")),preserve:!0},l().createElement(c.VariableTextArea,{namespaces:B,placeholder:i("Role setting placeholder"),rows:15})))},J=function(e){var t,n=g(t=e.split(":"))||E(t)||C(t)||S();return{llmService:n[0],model:n.slice(1).join(":")}},Z=function(e){return e.llmService&&e.model?"".concat(e.llmService,":").concat(e.model):void 0},ee=function(e){return j(e)?e:{}},et=function(e){return j(e)?e:{}},en=function(){var e=(0,f.M)(),t=I((0,r.useState)(!1),2),n=t[0],l=t[1];return(0,r.useEffect)(function(){var t=!1;return v(function(){return F(this,function(n){switch(n.label){case 0:l(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,e.getLLMServices()];case 2:return n.sent(),[3,5];case 3:return console.error(n.sent()),[3,5];case 4:return t||l(!1),[7];case 5:return[2]}})})().catch(function(e){console.error(e)}),function(){t=!0}},[e]),{services:e.llmServices,loading:n||e.llmServicesLoading}},er=(0,s.observer)(function(){var e=(0,m.kj)(),t=a.Form.useFormInstance(),n=a.Form.useWatch("modelSettings",t),o=I((0,r.useState)(function(){return ee(t.getFieldValue("modelSettings"))}),2),i=o[0],u=o[1],c=en(),s=c.services,d=c.loading,f=!!i.enabled,p=(0,r.useMemo)(function(){var e=Array.isArray(i.models)?i.models:[];if(e.length)return e.map(Z).filter(function(e){return!!e});var t=Z(i);return t?[t]:[]},[i]),y=(0,r.useMemo)(function(){return s.map(function(e){return{label:e.llmServiceTitle,options:e.enabledModels.map(function(t){return{label:"".concat(e.llmServiceTitle," / ").concat(t.label),value:"".concat(e.llmService,":").concat(t.value)}})}})},[s]),b=(0,r.useMemo)(function(){var e=new Map;return y.forEach(function(t){t.options.forEach(function(t){return e.set(t.value,t.label)})}),e},[y]),g=(0,r.useCallback)(function(e){var n=w({},ee(t.getFieldValue("modelSettings")),e);u(n),t.setFieldsValue({modelSettings:n})},[t]);return(0,r.useEffect)(function(){u(ee(n))},[n]),(0,r.useEffect)(function(){if(f&&!p.length&&y.length){var e,t,n,r=null==(n=y[0])||null==(t=n.options)||null==(e=t[0])?void 0:e.value;r&&g({models:[J(r)]})}},[f,y,p.length,g]),l().createElement(l().Fragment,null,l().createElement(a.Alert,{type:"info",showIcon:!0,message:e("Restrict this AI employee to the selected models.")}),l().createElement(a.Form.Item,{label:l().createElement(a.Typography.Text,{strong:!0},M(e("Enable dedicated model configuration"))),preserve:!0},l().createElement(a.Switch,{checked:f,onChange:function(e){return g({enabled:e})}})),l().createElement(a.Form.Item,{label:l().createElement(a.Typography.Text,{strong:!0},M(e("Models"))),preserve:!0},l().createElement(a.Select,{allowClear:!0,disabled:!f,loading:d,mode:"multiple",notFoundContent:d?l().createElement(a.Spin,{size:"small"}):null,optionFilterProp:"label",options:y,placeholder:e("Select models"),showSearch:!0,tagRender:function(e){return l().createElement(a.Tag,{closable:e.closable,onClose:e.onClose},b.get(String(e.value))||e.label)},value:p,onChange:function(e){e.length?g({llmService:void 0,model:void 0,models:e.map(J)}):g({llmService:void 0,model:void 0,models:[]})}})))}),el=function(){var e=(0,m.kj)();return function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t?e(t):n}},ea=function(e){var t=e.title,n=e.description,r=a.theme.useToken().token;return l().createElement("div",null,l().createElement("div",{style:{fontWeight:r.fontWeightStrong,fontSize:r.fontSizeSM}},t),l().createElement("div",{style:{color:r.colorTextSecondary,fontSize:r.fontSizeSM}},n))},eo=(0,s.observer)(function(e){var t,n=e.builtIn,o=(0,m.kj)(),i=el(),u=(0,f.M)(),c=a.Form.useFormInstance(),s=null!=(t=a.Form.useWatch("skillSettings",c))?t:{},d=Array.isArray(s.skills)?s.skills:[];(0,r.useEffect)(function(){u.getAISkills().catch(function(e){console.error(e)})},[u]);var p=new Map(u.aiSkills.map(function(e){return[e.name,e]})),y=u.aiSkills.filter(function(e){return"GENERAL"===e.scope}),b=d.map(function(e){return p.get(e)}).filter(function(e){return!!e&&"SPECIFIED"===e.scope}),g=function(e){var t,n;return l().createElement(a.List.Item,{key:e.name},l().createElement("div",null,i(null!=(t=e.title)?t:e.name,e.name)),l().createElement(a.Typography.Text,{type:"secondary"},i(null!=(n=e.about)?n:e.description)))},h=[{key:"general-skills",label:l().createElement(ea,{title:o("General skills"),description:o("Shared by all AI employees.")}),children:l().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:y,renderItem:g})}];return n&&b.length&&h.push({key:"specific-skills",label:l().createElement(ea,{title:o("Employee-specific skills"),description:o("Only available to this AI employee.")}),children:l().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:b,renderItem:g})}),u.aiSkillsLoading?l().createElement(a.Spin,null):l().createElement(a.Collapse,{ghost:!0,size:"small",defaultActiveKey:[],items:h})}),ei=function(e,t){return"CUSTOM"===e.scope?(null==t?void 0:t.autoCall)?"ALLOW":"ASK":"ALLOW"===e.defaultPermission?"ALLOW":"ASK"},eu=(0,s.observer)(function(e){var t=e.builtIn,n=(0,m.kj)(),i=a.theme.useToken().token,u=el(),c=(0,f.M)(),s=a.Form.useFormInstance(),d=a.Form.useWatch("skillSettings",s),p=I((0,r.useState)(function(){return et(s.getFieldValue("skillSettings"))}),2),y=p[0],b=p[1],g=Array.isArray(y.tools)?y.tools:[],h=I((0,r.useState)(t&&!g.length?[]:["custom-tools"]),2),v=h[0],E=h[1],S=l().useRef(g.length),C=[{label:n("Ask"),value:"ASK"},{label:n("Allow"),value:"ALLOW"}];(0,r.useEffect)(function(){c.getAITools().catch(function(e){console.error(e)})},[c]),(0,r.useEffect)(function(){b(et(d))},[d]);var F=function(e){var t=k(w({},et(s.getFieldValue("skillSettings"))),{tools:e});b(t),s.setFieldsValue({skillSettings:t})},x=new Set(g.map(function(e){return e.name})),T=new Map(c.aiTools.map(function(e){return[e.definition.name,e]})),O=c.aiTools.filter(function(e){return"GENERAL"===e.scope&&"loader"===e.from}),B=g.filter(function(e){var t=T.get(e.name);return t&&"GENERAL"!==t.scope&&"CUSTOM"!==t.scope}),M=g.filter(function(e){var t;return(null==(t=T.get(e.name))?void 0:t.scope)==="CUSTOM"});(0,r.useEffect)(function(){var e=0===S.current;t&&0===M.length?E([]):e&&M.length>0&&E(["custom-tools"]),S.current=M.length},[t,M.length]);var P=c.aiTools.filter(function(e){return"CUSTOM"===e.scope&&!x.has(e.definition.name)}).map(function(e){var t,n,r,o;return{key:e.definition.name,label:l().createElement("div",{style:{maxWidth:8*i.controlHeightLG,minWidth:4*i.controlHeightLG}},l().createElement(a.Flex,{justify:"space-between"},l().createElement("div",null,u(null!=(t=null==(r=e.introduction)?void 0:r.title)?t:e.definition.name,e.definition.name))),l().createElement(a.Typography.Text,{type:"secondary"},u(null!=(n=null==(o=e.introduction)?void 0:o.about)?n:e.definition.description))),onClick:function(){var t=et(s.getFieldValue("skillSettings")),n=Array.isArray(t.tools)?t.tools:[];n.some(function(t){return t.name===e.definition.name})||F(A(n).concat([{name:e.definition.name,autoCall:!1}]))}}}),j=function(e){var t,r,o,i,c="definition"in e?e:T.get(e.name);if(!c)return null;var s="definition"in e?void 0:e;return l().createElement(a.List.Item,{key:c.definition.name,extra:l().createElement(a.Flex,{vertical:!0,justify:"end"},l().createElement(a.Space,null,l().createElement(a.Typography.Text,{type:"secondary"},n("Permission")),l().createElement(a.Segmented,{size:"small",options:C,value:ei(c,s),disabled:!0})))},l().createElement("div",null,u(null!=(t=null==(o=c.introduction)?void 0:o.title)?t:c.definition.name,c.definition.name)),l().createElement(a.Typography.Text,{type:"secondary"},u(null!=(r=null==(i=c.introduction)?void 0:i.about)?r:c.definition.description)))},L=[{key:"general-tools",label:l().createElement(ea,{title:n("General tools"),description:n("Shared by all AI employees.")}),children:l().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:O,renderItem:j})}];return t&&B.length&&L.push({key:"specific-tools",label:l().createElement(ea,{title:n("Employee-specific tools"),description:n("Only available to this AI employee.")}),children:l().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:B,renderItem:j})}),L.push({key:"custom-tools",label:l().createElement(ea,{title:n("Custom tools"),description:n("Created by workflow. You can add/remove and set default permissions.")}),extra:l().createElement("div",{onClick:function(e){e.stopPropagation()},onKeyDown:function(e){e.stopPropagation()}},l().createElement(a.Dropdown,{menu:{items:P},disabled:!(null==P?void 0:P.length),placement:"bottomRight"},l().createElement(a.Button,{type:"primary",icon:l().createElement(o.PlusOutlined,null),disabled:!(null==P?void 0:P.length),style:{pointerEvents:(null==P?void 0:P.length)?void 0:"none"}},n("Add tool")))),children:l().createElement(a.List,{itemLayout:"vertical",bordered:!0,dataSource:M,renderItem:function(e){var t,r,i,c,s=T.get(e.name);return s?l().createElement(a.List.Item,{key:e.name,extra:l().createElement(a.Space,null,l().createElement(a.Typography.Text,null,n("Permission")),l().createElement(a.Segmented,{size:"small",options:C,value:ei(s,e),onChange:function(t){F(g.map(function(n){return n.name===e.name?k(w({},n),{autoCall:"ALLOW"===t}):n}))}}),l().createElement(a.Button,{"aria-label":n("Delete"),icon:l().createElement(o.DeleteOutlined,null),type:"text",onClick:function(){F(g.filter(function(t){return t.name!==e.name}))}}))},l().createElement("div",null,u(null!=(t=null==(i=s.introduction)?void 0:i.title)?t:s.definition.name,s.definition.name)),l().createElement(a.Typography.Text,{type:"secondary"},u(null!=(r=null==(c=s.introduction)?void 0:c.about)?r:s.definition.description))):null}})}),c.aiToolsLoading?l().createElement(a.Spin,null):l().createElement(a.Collapse,{ghost:!0,size:"small",activeKey:v,onChange:function(e){return E(Array.isArray(e)?e.map(String):[String(e)])},items:L})}),ec=function(e){var t=e.apiClient,n=(0,m.kj)(),o=a.Form.useFormInstance(),i=a.Form.useWatch("enableKnowledgeBase",o),u=I((0,r.useState)([]),2),c=u[0],s=u[1],d=I((0,r.useState)(!1),2),f=d[0],p=d[1];return(0,r.useEffect)(function(){var e=!1;return v(function(){var n;return F(this,function(r){switch(r.label){case 0:p(!0),r.label=1;case 1:return r.trys.push([1,3,4,5]),[4,X(t)];case 2:return n=r.sent(),e||s(n),[3,5];case 3:return console.error(r.sent()),[3,5];case 4:return e||p(!1),[7];case 5:return[2]}})})().catch(function(e){console.error(e)}),function(){e=!0}},[t]),l().createElement(l().Fragment,null,l().createElement(a.Form.Item,{name:"enableKnowledgeBase",label:M(n("Enable Knowledge Base")),valuePropName:"checked",preserve:!0},l().createElement(a.Switch,null)),l().createElement(a.Form.Item,{name:"knowledgeBasePrompt",label:M(n("Knowledge Base Prompt")),rules:[{required:!0}],preserve:!0},l().createElement(a.Input.TextArea,{disabled:!i,autoSize:{minRows:5}})),l().createElement(a.Form.Item,{name:["knowledgeBase","knowledgeBaseKeys"],label:M(n("Knowledge Base")),rules:[{required:!!i}],preserve:!0},l().createElement(a.Select,{disabled:!i,fieldNames:{label:"name",value:"key"},loading:f,mode:"multiple",options:c})),l().createElement(a.Form.Item,{name:["knowledgeBase","topK"],label:M(n("Top K")),rules:[{required:!0}],preserve:!0},l().createElement(a.InputNumber,{disabled:!i,min:1,max:100})),l().createElement(a.Form.Item,{name:["knowledgeBase","score"],label:M(n("Score")),rules:[{required:!0}],preserve:!0},l().createElement(a.InputNumber,{disabled:!i,min:0,max:1,step:.1})))},es=function(e){var t,n=e.apiClient,r=e.activeTab,o=e.edit,i=e.onTabChange,u=e.record,c=e.knowledgeBaseEnabled,s=(0,m.kj)(),d=a.Form.useFormInstance(),f=null!=(t=a.Form.useWatch("chatSettings",d))?t:{},p=!!(null==u?void 0:u.builtIn),y=!1!==f.enableSkills,b=!1!==f.enableTools;return l().createElement(a.Tabs,{activeKey:r,onChange:i,items:[{key:"profile",label:s("Profile"),children:l().createElement(Q,{edit:o,builtIn:p}),forceRender:!0},{key:"roleSetting",label:s("Role setting"),children:l().createElement($,{builtIn:p,record:u}),forceRender:!0},{key:"modelSettings",label:s("Model settings"),children:l().createElement(er,null),forceRender:!0}].concat(A(y?[{key:"skills",label:s("Skills"),children:l().createElement(eo,{builtIn:p}),forceRender:!0}]:[]),A(b?[{key:"tools",label:s("Tools"),children:l().createElement(eu,{builtIn:p}),forceRender:!0}]:[]),A(c?[{key:"knowledgeBase",label:s("KnowledgeBase"),children:l().createElement(ec,{apiClient:n}),forceRender:!0}]:[]))})},em=function(e){var t=e.record,n=e.onUpdated,o=(0,c.useApp)(),i=(0,m.kj)(),u=a.App.useApp().message,s=(0,f.M)(),d=I((0,r.useState)(!1),2),p=d[0],y=d[1];return l().createElement(a.Switch,{checked:!!t.enabled,onChange:function(e){return v(function(){return F(this,function(r){switch(r.label){case 0:y(!0),r.label=1;case 1:return r.trys.push([1,5,6,7]),[4,U(o.apiClient,t.username,e)];case 2:return r.sent(),u.success(i("Saved successfully")),[4,n()];case 3:return r.sent(),[4,s.refreshAIEmployees()];case 4:return r.sent(),[3,7];case 5:return console.error(r.sent()),u.error(i("Failed to update")),[3,7];case 6:return y(!1),[7];case 7:return[2]}})})()},loading:p,size:"small"})},ed=function(){var e=(0,c.useApp)(),t=(0,s.useFlowContext)(),n=(0,m.kj)(),u=a.theme.useToken().token,y=a.App.useApp().message,b=(0,f.M)(),g=I((0,r.useState)("business"),2),h=g[0],E=g[1],S=I((0,r.useState)([]),2),w=S[0],k=S[1],A=I((0,r.useState)(!1),2),C=A[0],x=A[1],T=I((0,r.useState)(!1),2),O=T[0],B=T[1],M=I((0,r.useState)([]),2),j=M[0],L=M[1],R=e.apiClient.auth,K=(null==R?void 0:R.role)==="root",z=(0,r.useMemo)(function(){return{color:u.colorPrimary,marginInline:-u.paddingSM,paddingBlock:u.paddingSM,paddingInlineEnd:u.paddingXS+u.paddingSM,paddingInlineStart:u.paddingSM}},[u.colorPrimary,u.paddingSM,u.paddingXS]),W=(0,r.useCallback)(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:h;return v(function(){return F(this,function(n){switch(n.label){case 0:x(!0),n.label=1;case 1:return n.trys.push([1,,3,4]),[4,D(e.apiClient,{category:t})];case 2:return k(n.sent().data),[3,4];case 3:return x(!1),[7];case 4:return[2]}})})()},[e.apiClient,h]);(0,r.useEffect)(function(){W().catch(function(e){console.error(e),x(!1)})},[W]),(0,r.useEffect)(function(){v(function(){return F(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,q(e.apiClient)];case 1:return B.apply(void 0,[t.sent()]),[3,3];case 2:return console.error(t.sent()),[3,3];case 3:return[2]}})})().catch(function(e){console.error(e)})},[e.apiClient]);var _=function(e){t.viewer.open({type:"drawer",width:p.o,closable:!0,content:l().createElement(ef,{editingRecord:e,knowledgeBaseEnabled:O,onSubmitted:function(){return v(function(){return F(this,function(e){switch(e.label){case 0:return[4,W()];case 1:return e.sent(),[4,b.refreshAIEmployees()];case 2:return e.sent(),[2]}})})()}})})},H=[{title:n("Avatar"),dataIndex:"avatar",render:function(e){return e?l().createElement(a.Avatar,{shape:"circle",size:"large",src:(0,d.H)(e)}):null}},{title:n("Username"),dataIndex:"username",render:function(e,t){var r=t.missingKnowledgeBaseKeys||[];return r.length?l().createElement(a.Space,{size:"small"},l().createElement("span",null,e),l().createElement(a.Tooltip,{title:n("Missing knowledge base configuration for keys: {{keys}}. Create knowledge bases with the same keys to enable this employee normally.",{keys:r.join(", ")})},l().createElement(o.ExclamationCircleOutlined,null))):e}},{title:n("Nickname"),dataIndex:"nickname"},{title:n("Position"),dataIndex:"position"},{title:n("Enabled"),dataIndex:"enabled",render:function(e,t){return l().createElement(em,{record:t,onUpdated:function(){return W()}})}},{title:n("Actions"),key:"actions",render:function(t,r){return l().createElement(a.Space,{size:u.marginXS},l().createElement("a",{style:z,onClick:function(){return _(r)}},n("Edit")),l().createElement(a.Popconfirm,{title:n("Delete AI employee"),description:n("Are you sure you want to delete this AI employee?"),onConfirm:function(){return v(function(){return F(this,function(t){switch(t.label){case 0:if(r.builtIn&&!K)return y.warning(n("Cannot delete built-in ai employees")),[2];return[4,V(e.apiClient,r.username)];case 1:return t.sent(),y.success(n("Saved successfully")),[4,W()];case 2:return t.sent(),[4,b.refreshAIEmployees()];case 3:return t.sent(),[2]}})})()}},l().createElement("a",{style:z},n("Delete"))))}}];return l().createElement(a.Card,{style:{display:"flex",flexDirection:"column",minHeight:"100%"},styles:{body:{display:"flex",flex:1,flexDirection:"column",minHeight:0}}},l().createElement(a.Flex,{vertical:!0,gap:"middle",style:{flex:1,minHeight:0}},l().createElement(a.Flex,{justify:"space-between",wrap:"wrap",gap:"middle"},l().createElement(a.Radio.Group,{optionType:"button",value:h,options:[{label:n("Business"),value:"business"},{label:n("Developer"),value:"developer"}],onChange:function(e){return E(e.target.value)}}),l().createElement(a.Space,null,l().createElement(a.Button,{icon:l().createElement(o.ReloadOutlined,null),onClick:function(){return W()}},n("Refresh")),l().createElement(a.Button,{type:"primary",icon:l().createElement(o.PlusOutlined,null),onClick:function(){t.viewer.open({type:"drawer",width:p.o,closable:!0,content:l().createElement(ef,{knowledgeBaseEnabled:O,onSubmitted:function(){return v(function(){return F(this,function(e){switch(e.label){case 0:return[4,W()];case 1:return e.sent(),[4,b.refreshAIEmployees()];case 2:return e.sent(),[2]}})})()}})})}},n("New AI employee")))),l().createElement("div",{style:{display:"flex",flex:1,flexDirection:"column",minHeight:0}},l().createElement(c.Table,{rowKey:"username",loading:C,columns:H,dataSource:w,className:P,isDraggable:!0,onSortEnd:function(t,r){return v(function(){var l,a,o;return F(this,function(u){switch(u.label){case 0:if(!t.username||!r.username||t.username===r.username)return[2];l=w,a=w.findIndex(function(e){return e.username===t.username}),o=w.findIndex(function(e){return e.username===r.username}),a>=0&&o>=0&&k((0,i.arrayMove)(w,a,o)),u.label=1;case 1:return u.trys.push([1,5,,6]),[4,G(e.apiClient,t.username,r.username)];case 2:return u.sent(),y.success(n("Saved successfully")),[4,W()];case 3:return u.sent(),[4,b.refreshAIEmployees()];case 4:return u.sent(),[3,6];case 5:return console.error(u.sent()),k(l),y.error(n("Failed to update")),[3,6];case 6:return[2]}})})()},rowSelection:{selectedRowKeys:j,onChange:L},pagination:{defaultPageSize:20,showTotal:function(e){return n("Total {{count}} items",{count:e})}},scroll:{x:"max-content",y:"100%"}}))))},ef=function(e){var t=e.editingRecord,n=e.knowledgeBaseEnabled,o=e.onSubmitted,i=(0,c.useApp)(),u=(0,s.useFlowContext)(),d=(0,m.kj)(),f=a.App.useApp().message,p=I(a.Form.useForm(),1)[0],b=I((0,r.useState)(!1),2),g=b[0],h=b[1],E=I((0,r.useState)("profile"),2),S=E[0],A=E[1],C=I((0,r.useState)(!1),2),x=C[0],O=C[1],B=(0,r.useMemo)(function(){return t?k(w({},t),{_aboutMode:t.builtIn?t.about?"custom":"system":void 0}):{username:(0,s.randomId)(),enabled:!0,enableKnowledgeBase:!1,knowledgeBase:{knowledgeBaseKeys:[],topK:3,score:"0.6"},knowledgeBasePrompt:d("knowledge Base Prompt default"),avatar:T,builtIn:!1,category:"business"}},[t,d]),M=u.view,P=M.Header,j=M.Footer;(0,r.useEffect)(function(){p.setFieldsValue(B)},[p,B]);var L=(0,y.C)({view:u.view,form:p,initialValues:B,dirty:x,title:d("Unsaved changes"),content:d("Are you sure you don't want to save?")});return l().createElement(l().Fragment,null,l().createElement(P,{title:t?d("Edit AI employee"):d("New AI employee")}),l().createElement(a.Spin,{spinning:g},l().createElement(a.Form,{form:p,layout:"vertical",onFinish:function(e){return v(function(){return F(this,function(n){switch(n.label){case 0:h(!0),n.label=1;case 1:if(n.trys.push([1,,8,9]),!t)return[3,3];return[4,N(i.apiClient,e)];case 2:return n.sent(),[3,5];case 3:return[4,H(i.apiClient,e)];case 4:n.sent(),n.label=5;case 5:return f.success(d("Saved successfully")),[4,o()];case 6:return n.sent(),[4,u.view.close(void 0,!0)];case 7:return n.sent(),[3,9];case 8:return h(!1),[7];case 9:return[2]}})})()},onValuesChange:function(){return O(!0)}},l().createElement(es,{apiClient:i.apiClient,activeTab:S,edit:!!t,onTabChange:A,record:t,knowledgeBaseEnabled:n}))),l().createElement(j,null,l().createElement(a.Flex,{justify:"end",gap:"small"},l().createElement(a.Button,{onClick:L},d("Cancel")),l().createElement(a.Button,{type:"primary",loading:g,onClick:function(){return p.submit()}},d("Submit")))))};t.default=ed}}]);
|